diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelGroupMapper.java b/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelGroupMapper.java new file mode 100644 index 0000000000..e7975eb351 --- /dev/null +++ b/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelGroupMapper.java @@ -0,0 +1,17 @@ +package io.dataease.base.mapper.ext; + +import io.dataease.controller.request.panel.PanelGroupRequest; +import io.dataease.dto.panel.PanelGroupDTO; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface ExtPanelGroupMapper { + + List panelGroupList(PanelGroupRequest request); + + //会级联删除pid 下的所有数据 + int deleteCircle(@Param("pid") String pid); + + +} \ No newline at end of file diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelGroupMapper.xml b/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelGroupMapper.xml new file mode 100644 index 0000000000..76d4aaf26a --- /dev/null +++ b/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelGroupMapper.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + delete from panel_group where FIND_IN_SET(panel_group.id,GET_PANEL_GROUP_WITH_CHILDREN(#{pid})) + + \ No newline at end of file diff --git a/backend/src/main/java/io/dataease/controller/panel/PanelGroupController.java b/backend/src/main/java/io/dataease/controller/panel/PanelGroupController.java index 6b287ece43..e3631bdfa0 100644 --- a/backend/src/main/java/io/dataease/controller/panel/PanelGroupController.java +++ b/backend/src/main/java/io/dataease/controller/panel/PanelGroupController.java @@ -1,14 +1,46 @@ package io.dataease.controller.panel; +import io.dataease.base.domain.DatasetGroup; +import io.dataease.controller.request.dataset.DataSetGroupRequest; +import io.dataease.controller.request.panel.PanelGroupRequest; +import io.dataease.dto.dataset.DataSetGroupDTO; +import io.dataease.dto.panel.PanelGroupDTO; +import io.dataease.service.panel.PanelGroupService; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + /** * Author: wangjiahao * Date: 2021-03-05 * Description: */ +@RestController +@RequestMapping("panel/group") public class PanelGroupController { + @Resource + private PanelGroupService panelGroupService; + @PostMapping("/tree") + public List tree(@RequestBody PanelGroupRequest request) { + request.setLevel(0); + return panelGroupService.tree(request); + } + @PostMapping("/defaultTree") + public List defaultTree(@RequestBody PanelGroupRequest request) { + return panelGroupService.getDefaultTree(request); + } + @PostMapping("/save") + public PanelGroupDTO save(@RequestBody PanelGroupRequest request) { + return panelGroupService.save(request); + } + @PostMapping("/deleteCircle/{id}") + public void deleteCircle(@PathVariable String id) { + panelGroupService.deleteCircle(id); + } } diff --git a/backend/src/main/java/io/dataease/controller/request/panel/PanelGroupRequest.java b/backend/src/main/java/io/dataease/controller/request/panel/PanelGroupRequest.java new file mode 100644 index 0000000000..d17c4e8d41 --- /dev/null +++ b/backend/src/main/java/io/dataease/controller/request/panel/PanelGroupRequest.java @@ -0,0 +1,21 @@ +package io.dataease.controller.request.panel; + +import io.dataease.base.domain.PanelGroup; +import lombok.Data; + +/** + * Author: wangjiahao + * Date: 2021-03-05 + * Description: + */ +@Data +public class PanelGroupRequest extends PanelGroup { + private String sort; + + public PanelGroupRequest() { + } + + public PanelGroupRequest(String pid) { + super.setPid(pid); + } +} diff --git a/backend/src/main/java/io/dataease/dto/panel/PanelGroupDTO.java b/backend/src/main/java/io/dataease/dto/panel/PanelGroupDTO.java index a551e533e4..eb1c597027 100644 --- a/backend/src/main/java/io/dataease/dto/panel/PanelGroupDTO.java +++ b/backend/src/main/java/io/dataease/dto/panel/PanelGroupDTO.java @@ -2,6 +2,7 @@ package io.dataease.dto.panel; import io.dataease.base.domain.PanelGroup; import io.dataease.dto.dataset.DataSetGroupDTO; +import lombok.Data; import java.util.List; @@ -10,25 +11,10 @@ import java.util.List; * Date: 2021-03-05 * Description: */ +@Data public class PanelGroupDTO extends PanelGroup { private String label; private List children; - - public String getLabel() { - return label; - } - - public void setLabel(String label) { - this.label = label; - } - - public List getChildren() { - return children; - } - - public void setChildren(List children) { - this.children = children; - } } diff --git a/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java b/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java index db6beb9dc3..e82f5ab56f 100644 --- a/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java +++ b/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java @@ -1,9 +1,20 @@ package io.dataease.service.panel; +import io.dataease.base.domain.DatasetGroup; import io.dataease.base.mapper.PanelGroupMapper; +import io.dataease.base.mapper.ext.ExtPanelGroupMapper; +import io.dataease.commons.utils.BeanUtils; +import io.dataease.controller.request.panel.PanelGroupRequest; +import io.dataease.dto.dataset.DataSetGroupDTO; +import io.dataease.dto.panel.PanelGroupDTO; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; +import org.springframework.util.Assert; import javax.annotation.Resource; +import java.util.List; +import java.util.Optional; +import java.util.UUID; /** * Author: wangjiahao @@ -15,9 +26,47 @@ public class PanelGroupService { @Resource private PanelGroupMapper panelGroupMapper; + @Resource + private ExtPanelGroupMapper extPanelGroupMapper; + + public List tree(PanelGroupRequest panelGroupRequest) { + List panelGroupDTOList = extPanelGroupMapper.panelGroupList(panelGroupRequest); + getTreeChildren(panelGroupDTOList); + return panelGroupDTOList; + } + + public void getTreeChildren(List parentPanelGroupDTO){ + Optional.ofNullable(parentPanelGroupDTO).ifPresent(parent -> parent.forEach(panelGroupDTO -> { + List panelGroupDTOChildren = extPanelGroupMapper.panelGroupList(new PanelGroupRequest(panelGroupDTO.getId())); + panelGroupDTO.setChildren(panelGroupDTOChildren); + getTreeChildren(panelGroupDTOChildren); + })); + } + + public List getDefaultTree(PanelGroupRequest panelGroupRequest){ + return extPanelGroupMapper.panelGroupList(panelGroupRequest); + } + public PanelGroupDTO save(PanelGroupRequest request) { + if (StringUtils.isEmpty(request.getId())) { + request.setId(UUID.randomUUID().toString()); + request.setCreateTime(System.currentTimeMillis()); + panelGroupMapper.insert(request); + } else { + panelGroupMapper.updateByPrimaryKey(request); + } + PanelGroupDTO panelGroupDTO = new PanelGroupDTO(); + BeanUtils.copyBean(panelGroupDTO, request); + panelGroupDTO.setLabel(request.getName()); + return panelGroupDTO; + } + public void deleteCircle(String id){ + Assert.notNull(id, "id cannot be null"); + extPanelGroupMapper.deleteCircle(id); + } + } diff --git a/backend/src/main/resources/db/migration/V12__panel_table.sql b/backend/src/main/resources/db/migration/V12__panel_table.sql index 3864101c11..7858d9f9ed 100644 --- a/backend/src/main/resources/db/migration/V12__panel_table.sql +++ b/backend/src/main/resources/db/migration/V12__panel_table.sql @@ -32,4 +32,31 @@ CREATE TABLE `panel_view` ( PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -SET FOREIGN_KEY_CHECKS = 1; \ No newline at end of file +SET FOREIGN_KEY_CHECKS = 1; + + + +CREATE DEFINER=`root`@`%` FUNCTION `GET_PANEL_CHILDREN_CHILDREN`(parentId varchar(8000)) RETURNS varchar(8000) CHARSET utf8 +BEGIN + +DECLARE oTemp VARCHAR(8000); + +DECLARE oTempChild VARCHAR(8000); + +SET oTemp = ''; + +SET oTempChild = CAST(parentId AS CHAR); + +WHILE oTempChild IS NOT NULL + +DO + +SET oTemp = CONCAT(oTemp,',',oTempChild); + +SELECT GROUP_CONCAT(id) INTO oTempChild FROM panel_group WHERE FIND_IN_SET(pid,oTempChild) > 0; + +END WHILE; + +RETURN oTemp; + +END \ No newline at end of file diff --git a/frontend/src/api/panel/panel.js b/frontend/src/api/panel/panel.js index a9a68dbe9d..ce6a8a33ad 100644 --- a/frontend/src/api/panel/panel.js +++ b/frontend/src/api/panel/panel.js @@ -1,8 +1,26 @@ import request from '@/utils/request' +export function defaultTree(data) { + return request({ + url: '/panel/group/defaultTree', + method: 'post', + loading: true, + data + }) +} + +export function groupTree(data) { + return request({ + url: '/panel/group/tree', + method: 'post', + loading: true, + data + }) +} + export function loadTable(data) { return request({ - url: '/dataset/table/list', + url: '/panel/table/list', method: 'post', data }) @@ -10,14 +28,14 @@ export function loadTable(data) { export function getScene(sceneId) { return request({ - url: '/dataset/group/getScene/' + sceneId, + url: '/panel/group/getScene/' + sceneId, method: 'post' }) } export function addGroup(data) { return request({ - url: '/dataset/group/save', + url: '/panel/group/save', method: 'post', data }) @@ -25,14 +43,14 @@ export function addGroup(data) { export function delGroup(groupId) { return request({ - url: '/dataset/group/delete/' + groupId, + url: '/panel/group/deleteCircle/' + groupId, method: 'post' }) } export function addTable(data) { return request({ - url: '/dataset/table/update', + url: '/panel/table/update', method: 'post', data }) @@ -40,19 +58,11 @@ export function addTable(data) { export function delTable(tableId) { return request({ - url: '/dataset/table/delete/' + tableId, + url: '/panel/table/delete/' + tableId, method: 'post' }) } -export function groupTree(data) { - return request({ - url: '/dataset/group/tree', - method: 'post', - data - }) -} - export function listDatasource() { return request({ url: '/datasource/list', @@ -62,14 +72,14 @@ export function listDatasource() { export function getTable(id) { return request({ - url: '/dataset/table/get/' + id, + url: '/panel/table/get/' + id, method: 'post' }) } export function getPreviewData(data) { return request({ - url: '/dataset/table/getPreviewData', + url: '/panel/table/getPreviewData', method: 'post', data }) @@ -77,14 +87,14 @@ export function getPreviewData(data) { export function fieldList(id) { return request({ - url: '/dataset/field/list/' + id, + url: '/panel/field/list/' + id, method: 'post' }) } export function batchEdit(data) { return request({ - url: '/dataset/field/batchEdit', + url: '/panel/field/batchEdit', method: 'post', data }) @@ -98,4 +108,4 @@ export function post(url, data) { }) } -export default { loadTable, getScene, addGroup, delGroup, addTable, delTable, groupTree } +export default { loadTable, getScene, addGroup, delGroup, addTable, delTable, groupTree,defaultTree } diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index f1712eb1ec..fa806ca647 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -683,10 +683,10 @@ export default { }, panel: { datalist: '视图列表', - add_group: '添加分组', - add_scene: '添加场景', - group: '分组', - scene: '场景', + group:'目录', + panel:'仪表盘', + groupAdd:'新建目录', + panelAdd:'新建仪表盘', delete: '删除', move_to: '移动到', rename: '重命名', @@ -696,31 +696,7 @@ export default { confirm: '确认', cancel: '取消', search: '搜索', - back: '返回', - add_table: '添加表', - process: '进度', - add_chart: '添加视图', - db_data: '数据库表', - sql_data: 'SQL数据集', - excel_data: 'Excel数据集', - custom_data: '自助数据集', - pls_slc_tbl_left: '请从左侧选视图', - add_db_table: '添加数据库表', - pls_slc_data_source: '请选择数据库连接', - table: '表', - edit: '编辑', - create_view: '创建试图', - data_preview: '数据预览', - dimension: '维度', - quota: '指标', - title: '标题', - show: '显示', - chart_type: '图表类型', - shape_attr: '图形属性', - module_style: '组件样式', - result_filter: '结果过滤器', - x_axis: '横轴', - y_axis: '纵轴', - chart: '视图' + back: '返回' + } } diff --git a/frontend/src/views/panel/group/Group.vue b/frontend/src/views/panel/group/Group.vue deleted file mode 100644 index 9953cd0817..0000000000 --- a/frontend/src/views/panel/group/Group.vue +++ /dev/null @@ -1,605 +0,0 @@ - - - - - diff --git a/frontend/src/views/panel/index.vue b/frontend/src/views/panel/index.vue index 56c5b8b8bb..6d63ac87c2 100644 --- a/frontend/src/views/panel/index.vue +++ b/frontend/src/views/panel/index.vue @@ -34,13 +34,13 @@ import MsMainContainer from '@/metersphere/common/components/MsMainContainer' import MsContainer from '@/metersphere/common/components/MsContainer' import MsAsideContainer from '@/metersphere/common/components/MsAsideContainer' - import Group from './group/Group' + // import Group from './group/Group' import PanelList from './list/PanelList' import PanelView from './list/PanelView' export default { name: 'Panel', - components: {MsMainContainer, MsContainer, MsAsideContainer, Group, PanelList,PanelView}, + components: {MsMainContainer, MsContainer, MsAsideContainer, PanelList,PanelView}, data() { return { component: PanelView, diff --git a/frontend/src/views/panel/list/PanelList.vue b/frontend/src/views/panel/list/PanelList.vue index 8024c854ca..13498f4d77 100644 --- a/frontend/src/views/panel/list/PanelList.vue +++ b/frontend/src/views/panel/list/PanelList.vue @@ -1,13 +1,13 @@