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 b9b1f88c46..c7932b861f 100644 --- a/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java +++ b/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java @@ -115,6 +115,21 @@ public class PanelGroupService { newPanel.setId(panelId); newPanel.setCreateBy(AuthUtils.getUser().getUsername()); panelGroupMapper.insertSelective(newPanel); + } else if ("move".equals(request.getOptType())) { + PanelGroupWithBLOBs panelInfo = panelGroupMapper.selectByPrimaryKey(request.getId()); + if(panelInfo.getPid().equalsIgnoreCase(request.getPid())){ + DataEaseException.throwException(Translator.get("i18n_select_diff_folder")); + } + // 移动校验 + if (StringUtils.isNotEmpty(request.getName())) { + checkPanelName(request.getName(), request.getPid(), PanelConstants.OPT_TYPE_INSERT, request.getId()); + } + PanelGroupWithBLOBs record = new PanelGroupWithBLOBs(); + record.setName(request.getName()); + record.setId(request.getId()); + record.setPid(request.getPid()); + panelGroupMapper.updateByPrimaryKeySelective(record); + }else { // 更新 if (StringUtils.isNotEmpty(request.getName())) { diff --git a/backend/src/main/resources/i18n/messages_en_US.properties b/backend/src/main/resources/i18n/messages_en_US.properties index 9ad714f65d..289f98b90a 100644 --- a/backend/src/main/resources/i18n/messages_en_US.properties +++ b/backend/src/main/resources/i18n/messages_en_US.properties @@ -234,6 +234,7 @@ i18n_chart_count=Count* i18n_excel_have_merge_region=Excel has merged region i18n_cron_expression_error=Cron expression error i18n_same_folder_can_not_repeat=Name is already used in the same folder +i18n_select_diff_folder= Select Diff Folder i18n_default_panel=Default Dashboard i18n_panel_list=Dashboard i18n_processing_data=Processing data now, Refresh later @@ -281,4 +282,4 @@ i18n_check_sql_error=Check incremental SQL exception, i18n_change_task_status_error=Suspension is not allowed. The task status is: i18n_Stopped=END i18n_Exec=Running -i18n_no_trigger=The current setting does not trigger task generation. \ No newline at end of file +i18n_no_trigger=The current setting does not trigger task generation. diff --git a/backend/src/main/resources/i18n/messages_zh_CN.properties b/backend/src/main/resources/i18n/messages_zh_CN.properties index ac52f22368..5b08fdea68 100644 --- a/backend/src/main/resources/i18n/messages_zh_CN.properties +++ b/backend/src/main/resources/i18n/messages_zh_CN.properties @@ -233,6 +233,7 @@ i18n_chart_count=记录数* i18n_excel_have_merge_region=Excel 存在合并单元格 i18n_cron_expression_error=Cron 表达式校验错误 i18n_same_folder_can_not_repeat=同一目录下该名称已被使用 +i18n_select_diff_folder= 请选择不通的目录 i18n_default_panel=默认仪表板 i18n_panel_list=仪表板 i18n_processing_data=正在处理数据,稍后刷新 diff --git a/backend/src/main/resources/i18n/messages_zh_TW.properties b/backend/src/main/resources/i18n/messages_zh_TW.properties index de243c1861..e4c9d9736b 100644 --- a/backend/src/main/resources/i18n/messages_zh_TW.properties +++ b/backend/src/main/resources/i18n/messages_zh_TW.properties @@ -236,6 +236,7 @@ i18n_chart_count=記錄數* i18n_excel_have_merge_region=Excel存在合並單元格 i18n_cron_expression_error=Cron表達式校驗錯誤 i18n_same_folder_can_not_repeat=同一目錄下該名稱已被使用 +i18n_select_diff_folder= 请选择不通的目录 i18n_default_panel=默認儀表板 i18n_panel_list=儀表板 i18n_processing_data=正在處理數據,稍後刷新 @@ -283,4 +284,4 @@ i18n_check_sql_error=校驗增量SQL異常, i18n_change_task_status_error=不允許暫停,任務狀態為: i18n_Stopped=執行結束 i18n_Exec=運行中 -i18n_no_trigger=当前设置没有触发任务生成 當前設置沒有觸發任務生成. \ No newline at end of file +i18n_no_trigger=当前设置没有触发任务生成 當前設置沒有觸發任務生成. diff --git a/frontend/src/components/TreeSelector/index.vue b/frontend/src/components/TreeSelector/index.vue new file mode 100644 index 0000000000..72ec3b7e72 --- /dev/null +++ b/frontend/src/components/TreeSelector/index.vue @@ -0,0 +1,77 @@ + + + + + diff --git a/frontend/src/views/chart/components/TreeSelector/index.vue b/frontend/src/views/chart/components/TreeSelector/index.vue new file mode 100644 index 0000000000..7ce66af1e4 --- /dev/null +++ b/frontend/src/views/chart/components/TreeSelector/index.vue @@ -0,0 +1,77 @@ + + + + + diff --git a/frontend/src/views/panel/list/PanelList.vue b/frontend/src/views/panel/list/PanelList.vue index 8d7ef8482b..a034e68669 100644 --- a/frontend/src/views/panel/list/PanelList.vue +++ b/frontend/src/views/panel/list/PanelList.vue @@ -112,6 +112,9 @@ {{ $t('panel.copy') }} + + {{ $t('dataset.move_to') }} + {{ $t('panel.create_public_links') }} @@ -169,6 +172,16 @@ + + + + + + @@ -179,16 +192,18 @@ import LinkGenerate from '@/views/link/generate' import { uuid } from 'vue-uuid' import bus from '@/utils/bus' import EditPanel from './EditPanel' -import { addGroup, delGroup, groupTree, defaultTree, findOne } from '@/api/panel/panel' +import { addGroup, delGroup, groupTree, defaultTree, findOne, panelSave } from '@/api/panel/panel' import { getPanelAllLinkageInfo } from '@/api/panel/linkage' import { mapState } from 'vuex' import { DEFAULT_COMMON_CANVAS_STYLE_STRING } from '@/views/panel/panel' +import TreeSelector from '@/components/TreeSelector' +import { post } from '@/api/chart/chart' export default { name: 'PanelList', - components: { GrantAuth, LinkGenerate, EditPanel }, + components: { GrantAuth, LinkGenerate, EditPanel, TreeSelector }, data() { return { lastActiveNode: null, // 激活的节点 在这个节点下面动态放置子节点 @@ -273,7 +288,13 @@ export default { mode: [ { required: true, message: this.$t('commons.input_content'), trigger: 'blur' } ] - } + }, + moveGroup: false, + groupMoveConfirmDisabled: true, + moveDialogTitle: '', + moveInfo: {}, + tGroup: {}, + tGroupData: [] // 所有目录 } }, computed: { @@ -413,8 +434,6 @@ export default { case 'rename': this.showEditPanel(param) break - case 'move': - break case 'delete': this.delete(param.data) break @@ -427,6 +446,9 @@ export default { case 'link': this.link(param.data) break + case 'move': + this.moveTo(param.data) + break } }, @@ -649,6 +671,45 @@ export default { }) }) } + }, + moveTo(data) { + const _this = this + this.moveInfo = data + this.moveDialogTitle = this.$t('dataset.m1') + (data.name.length > 10 ? (data.name.substr(0, 10) + '...') : data.name) + this.$t('dataset.m2') + const queryInfo = JSON.parse(JSON.stringify(this.groupForm)) + queryInfo['nodeType'] = 'folder' + groupTree(queryInfo).then(res => { + if (data.nodeType === 'folder') { + _this.tGroupData = [ + { + id: 'panel_list', + name: _this.$t('panel.panel_list'), + label: _this.$t('panel.panel_list'), + children: res.data + } + ] + // console.log('tGroupData=>' + JSON.stringify(_this.tGroupData)) + } else { + _this.tGroupData = res.data + } + _this.moveGroup = true + }) + }, + closeMoveGroup() { + this.moveGroup = false + this.tGroup = {} + }, + saveMoveGroup() { + this.moveInfo.pid = this.tGroup.id + this.moveInfo['optType'] = 'move' + panelSave(this.moveInfo).then(response => { + this.tree(this.groupForm) + this.closeMoveGroup() + }) + }, + targetGroup(val) { + this.tGroup = val + this.groupMoveConfirmDisabled = false } } }