From f85ac96e9fc6ad9f41797c8230542c29db378172 Mon Sep 17 00:00:00 2001 From: junjie Date: Tue, 25 May 2021 11:53:19 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat(backend):=E5=85=B3=E8=81=94=E8=A7=86?= =?UTF-8?q?=E5=9B=BE=E8=A1=A8=E3=80=81=E5=AD=97=E6=AE=B5=E9=87=8D=E5=A4=8D?= =?UTF-8?q?=E5=85=B3=E8=81=94=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/dataease/service/dataset/DataSetTableUnionService.java | 1 + frontend/src/views/dataset/data/UnionView.vue | 1 + 2 files changed, 2 insertions(+) diff --git a/backend/src/main/java/io/dataease/service/dataset/DataSetTableUnionService.java b/backend/src/main/java/io/dataease/service/dataset/DataSetTableUnionService.java index 3c8ec99224..12a8004b7a 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableUnionService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableUnionService.java @@ -88,6 +88,7 @@ public class DataSetTableUnionService { criteria.andTargetTableFieldIdEqualTo(datasetTableUnion.getTargetTableFieldId()); List sourceResult = datasetTableUnionMapper.selectByExample(datasetTableUnionExample); datasetTableUnionExample.clear(); + criteria = datasetTableUnionExample.createCriteria(); if (StringUtils.isNotEmpty(datasetTableUnion.getId())) { criteria.andIdNotEqualTo(datasetTableUnion.getId()); } diff --git a/frontend/src/views/dataset/data/UnionView.vue b/frontend/src/views/dataset/data/UnionView.vue index 19edacf70c..e975d11c51 100644 --- a/frontend/src/views/dataset/data/UnionView.vue +++ b/frontend/src/views/dataset/data/UnionView.vue @@ -230,6 +230,7 @@ export default { targetTableFieldId: '', targetUnionRelation: '' } + this.targetTable = {} }, edit(item) { From 133f5dcae9adce44629818fb39cffac6e475de33 Mon Sep 17 00:00:00 2001 From: wangjiahao <1522128093@qq.com> Date: Tue, 25 May 2021 12:36:35 +0800 Subject: [PATCH 2/2] =?UTF-8?q?feat:=201.=E4=BB=AA=E8=A1=A8=E7=9B=98?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E5=8A=A8=E6=80=81=E6=B7=BB=E5=8A=A0=E7=9B=AE?= =?UTF-8?q?=E5=BD=95=EF=BC=8C=E6=96=B0=E5=BB=BA=E4=BB=AA=E8=A1=A8=E7=9B=98?= =?UTF-8?q?=E6=97=A0=E9=9C=80=E5=88=B7=E6=96=B0=E7=9B=B4=E6=8E=A5=E5=B1=95?= =?UTF-8?q?=E5=BC=80=EF=BC=8C2.=E6=96=B0=E5=BB=BA=E4=BB=AA=E8=A1=A8?= =?UTF-8?q?=E7=9B=98=E7=9B=B4=E6=8E=A5=E8=BF=9B=E5=85=A5=E7=BC=96=E8=BE=91?= =?UTF-8?q?=E7=95=8C=E9=9D=A2=EF=BC=8C3.=E3=80=90=E3=80=90=E4=BB=AA?= =?UTF-8?q?=E8=A1=A8=E7=9B=98=E3=80=91=E5=8F=B3=E9=94=AE=E7=82=B9=E5=BC=80?= =?UTF-8?q?=E7=9A=84=E5=8A=9F=E8=83=BD=E9=A1=BA=E5=BA=8F=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E3=80=914.=E3=80=90=E3=80=90=E4=BB=AA=E8=A1=A8=E7=9B=98?= =?UTF-8?q?=E3=80=91=E4=BB=AA=E8=A1=A8=E7=9B=98=E7=94=BB=E6=9D=BF=E4=B8=AD?= =?UTF-8?q?=EF=BC=8C=E8=A7=86=E5=9B=BE=E5=B1=82=E7=BA=A7=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E7=9A=84=E6=96=87=E6=A1=88=E8=B0=83=E6=95=B4=E3=80=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/panel/PanelGroupService.java | 9 +- .../main/resources/db/migration/V5__auth.sql | 21 +---- .../canvas/components/Editor/ContextMenu.vue | 20 ++--- .../components/canvas/components/Toolbar.vue | 6 +- frontend/src/lang/en.js | 10 ++- frontend/src/lang/tw.js | 10 ++- frontend/src/lang/zh.js | 11 ++- frontend/src/views/panel/edit/index.vue | 5 +- .../src/views/panel/list/EditPanel/index.vue | 2 +- frontend/src/views/panel/list/PanelList.vue | 82 ++++++++++++++----- 10 files changed, 120 insertions(+), 56 deletions(-) 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 64f4073923..7843b70193 100644 --- a/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java +++ b/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java @@ -104,7 +104,14 @@ public class PanelGroupService { } panelGroupMapper.updateByPrimaryKeySelective(request); } - return panelGroupMapper.selectByPrimaryKey(panelId); + + //带有权限的返回 + PanelGroupRequest authRequest = new PanelGroupRequest(); + authRequest.setId(panelId); + authRequest.setUserId(String.valueOf(AuthUtils.getUser().getUserId())); + List panelGroupDTOList = extPanelGroupMapper.panelGroupList(authRequest); + + return panelGroupDTOList.get(0); } diff --git a/backend/src/main/resources/db/migration/V5__auth.sql b/backend/src/main/resources/db/migration/V5__auth.sql index ee4be3cb70..37d9f3f114 100644 --- a/backend/src/main/resources/db/migration/V5__auth.sql +++ b/backend/src/main/resources/db/migration/V5__auth.sql @@ -1,18 +1,3 @@ -/* - Navicat Premium Data Transfer - - Source Server : A-LOCAL-本机数据库 - Source Server Type : MySQL - Source Server Version : 50726 - Source Host : localhost:3306 - Source Schema : data_ease - - Target Server Type : MySQL - Target Server Version : 50726 - File Encoding : 65001 - - Date: 18/05/2021 18:37:45 -*/ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; @@ -191,7 +176,7 @@ delimiter ; -- ---------------------------- DROP FUNCTION IF EXISTS `get_auths`; delimiter ;; -CREATE DEFINER=`root`@`%` FUNCTION `get_auths`(authSource varchar(255),modelType varchar(255),userId varchar(255)) RETURNS longtext CHARSET utf8 +CREATE FUNCTION `get_auths`(authSource varchar(255),modelType varchar(255),userId varchar(255)) RETURNS longtext CHARSET utf8 READS SQL DATA BEGIN @@ -302,7 +287,9 @@ delimiter ; -- ---------------------------- -- Function structure for GET_V_AUTH_MODEL_ID_P_USE -- ---------------------------- -CREATE DEFINER=`root`@`%` FUNCTION `GET_V_AUTH_MODEL_ID_P_USE`(userId longtext,modelType varchar(255)) RETURNS longtext CHARSET utf8 +DROP FUNCTION IF EXISTS `GET_V_AUTH_MODEL_ID_P_USE`; +delimiter ;; +CREATE FUNCTION `GET_V_AUTH_MODEL_ID_P_USE`(userId longtext,modelType varchar(255)) RETURNS longtext CHARSET utf8 READS SQL DATA BEGIN diff --git a/frontend/src/components/canvas/components/Editor/ContextMenu.vue b/frontend/src/components/canvas/components/Editor/ContextMenu.vue index 9083d20a57..81173c5546 100644 --- a/frontend/src/components/canvas/components/Editor/ContextMenu.vue +++ b/frontend/src/components/canvas/components/Editor/ContextMenu.vue @@ -3,16 +3,16 @@
    diff --git a/frontend/src/components/canvas/components/Toolbar.vue b/frontend/src/components/canvas/components/Toolbar.vue index 188be0928d..846c585a96 100644 --- a/frontend/src/components/canvas/components/Toolbar.vue +++ b/frontend/src/components/canvas/components/Toolbar.vue @@ -34,7 +34,7 @@ - + {{ $t('commons.save') }} @@ -54,6 +54,9 @@ import eventBus from '@/components/canvas/utils/eventBus' import { deepCopy } from '@/components/canvas/utils/utils' import { post } from '@/api/panel/panel' import bus from '@/utils/bus' +import { + DEFAULT_COMMON_CANVAS_STYLE +} from '@/views/panel/panel' export default { data() { @@ -213,6 +216,7 @@ export default { }, clearCanvas() { this.$store.commit('setComponentData', []) + this.$store.commit('setCanvasStyle', DEFAULT_COMMON_CANVAS_STYLE) this.$store.commit('recordSnapshot') }, diff --git a/frontend/src/lang/en.js b/frontend/src/lang/en.js index 74e26d4d85..21ece828dd 100644 --- a/frontend/src/lang/en.js +++ b/frontend/src/lang/en.js @@ -893,7 +893,15 @@ export default { insert_picture: 'Insert Picture', redo: 'Redo', undo: 'Undo', - panelNull: 'This is a Empty Panel,You Can Edit and Enrich It' + panelNull: 'This is a Empty Panel,You Can Edit and Enrich It', + copy: 'Copy', + paste: 'Paste', + cut: 'Cut', + lock: 'Lock', + topComponent: 'Top Component', + bottomComponent: 'Bottom Component', + upComponent: 'Up One Level', + downComponent: 'Down One Level' }, plugin: { local_install: 'Local installation', diff --git a/frontend/src/lang/tw.js b/frontend/src/lang/tw.js index 8abe13ebda..3d88a4efd5 100644 --- a/frontend/src/lang/tw.js +++ b/frontend/src/lang/tw.js @@ -892,7 +892,15 @@ export default { insert_picture: '插入圖片', redo: '重做', undo: '撤銷', - panelNull: '这是个空的儀表盤,可以通过编辑来丰富内容' + panelNull: '这是个空的儀表盤,可以通过编辑来丰富内容', + copy: '复制', + paste: '粘贴', + cut: '剪切', + lock: '锁定', + topComponent: '置于顶层', + bottomComponent: '置于底层', + upComponent: '上移一层', + downComponent: '下移一层' }, plugin: { local_install: '本地安裝', diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index f1d074c1da..673e9832f5 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -894,7 +894,16 @@ export default { insert_picture: '插入图片', redo: '重做', undo: '撤销', - panelNull: '这是个空的仪表板,可以通过编辑来丰富内容' + panelNull: '这是个空的仪表板,可以通过编辑来丰富内容', + copy: '复制', + paste: '粘贴', + cut: '剪切', + lock: '锁定', + topComponent: '置于顶层', + bottomComponent: '置于底层', + upComponent: '上移一层', + downComponent: '下移一层' + }, plugin: { local_install: '本地安装', diff --git a/frontend/src/views/panel/edit/index.vue b/frontend/src/views/panel/edit/index.vue index 339b056d8b..11ba687355 100644 --- a/frontend/src/views/panel/edit/index.vue +++ b/frontend/src/views/panel/edit/index.vue @@ -138,7 +138,7 @@ import { listenGlobalKeyDown } from '@/components/canvas/utils/shortcutKey' import { mapState } from 'vuex' import { uuid } from 'vue-uuid' import Toolbar from '@/components/canvas/components/Toolbar' -import { get } from '@/api/panel/panel' +import { findOne } from '@/api/panel/panel' import PreviewFullScreen from '@/components/canvas/components/Editor/PreviewFullScreen' import Preview from '@/components/canvas/components/Editor/Preview' @@ -243,7 +243,7 @@ export default { this.$store.commit('setComponentData', this.resetID(JSON.parse(componentDataTemp))) this.$store.commit('setCanvasStyle', JSON.parse(canvasStyleDataTemp)) } else if (panelId) { - get('panel/group/findOne/' + panelId).then(response => { + findOne(panelId).then(response => { this.$store.commit('setComponentData', this.resetID(JSON.parse(response.data.panelData))) const panelStyle = JSON.parse(response.data.panelStyle) this.$store.commit('setCanvasStyle', panelStyle) @@ -257,7 +257,6 @@ export default { this.$router.replace('/panel/index') }, showPanel(type) { - if (this.showIndex === -1 || this.showIndex === type) { this.$nextTick(() => (this.show = !this.show)) } diff --git a/frontend/src/views/panel/list/EditPanel/index.vue b/frontend/src/views/panel/list/EditPanel/index.vue index f25d8abfc8..9cba1a9301 100644 --- a/frontend/src/views/panel/list/EditPanel/index.vue +++ b/frontend/src/views/panel/list/EditPanel/index.vue @@ -110,7 +110,7 @@ export default { type: 'success', showClose: true }) - this.$emit('closeEditPanelDialog') + this.$emit('closeEditPanelDialog', response.data) }) }, handleFileChange(e) { diff --git a/frontend/src/views/panel/list/PanelList.vue b/frontend/src/views/panel/list/PanelList.vue index 92860fa0dd..c188a99a69 100644 --- a/frontend/src/views/panel/list/PanelList.vue +++ b/frontend/src/views/panel/list/PanelList.vue @@ -8,7 +8,7 @@ :default-expanded-keys="expandedArray" :data="defaultData" node-key="id" - highlight-current + :highlight-current="activeTree==='system'" :expand-on-click-node="true" @node-click="nodeClick" > @@ -55,10 +55,11 @@
    @@ -102,24 +103,24 @@ /> + + {{ $t('panel.edit') }} + + + {{ $t('panel.share') }} + + + {{ $t('panel.create_public_links') }} + + + {{ $t('panel.to_default_panel') }} + {{ $t('panel.rename') }} {{ $t('panel.delete') }} - - {{ $t('panel.share') }} - - - {{ $t('panel.to_default_panel') }} - - - {{ $t('panel.edit') }} - - - {{ $t('panel.create_public_links') }} - @@ -184,6 +185,9 @@ import { DEFAULT_YAXIS_STYLE, DEFAULT_BACKGROUND_COLOR } from '@/views/chart/chart/chart' +import { + DEFAULT_COMMON_CANVAS_STYLE +} from '@/views/panel/panel' import { DEFAULT_PANEL_STYLE } from '@/views/panel/panel' @@ -192,6 +196,9 @@ export default { components: { GrantAuth, LinkGenerate, EditPanel }, data() { return { + lastActiveNode: null, // 激活的节点 在这个节点下面动态放置子节点 + lastActiveNodeData: null, + activeTree: 'self', // 识别当前操作的树类型self 是仪表盘列表树 system 是默认仪表盘树 editPanelModel: { titlePre: null, titleSuf: null, @@ -332,19 +339,31 @@ export default { } }, watch: { - }, mounted() { + this.$store.commit('setComponentData', []) + this.$store.commit('setCanvasStyle', DEFAULT_COMMON_CANVAS_STYLE) this.defaultTree() this.tree(this.groupForm) }, methods: { - closeEditPanelDialog() { + closeEditPanelDialog(panelInfo) { this.editPanel.visible = false + debugger this.defaultTree() - this.tree(this.groupForm) + // 默认展开 同时点击 新增的节点 + if (panelInfo && this.lastActiveNodeData.id) { + if (!this.lastActiveNodeData.children) { + this.$set(this.lastActiveNodeData, 'children', []) + } + this.lastActiveNodeData.children.push(panelInfo) + this.lastActiveNode.expanded = true + this.activeNodeAndClick(panelInfo) + } }, showEditPanel(param) { + this.lastActiveNode = param.node + this.lastActiveNodeData = param.data this.editPanel = JSON.parse(JSON.stringify(this.editPanelModel)) this.editPanel.optType = param.optType this.editPanel.panelInfo.nodeType = param.type @@ -425,7 +444,7 @@ export default { this.share(param.data) break case 'edit': - this.edit(param.data) + this.edit(param.data, param.node) break case 'link': this.link(param.data) @@ -525,6 +544,9 @@ export default { }, nodeClick(data, node) { + this.lastActiveNode = node + this.lastActiveNodeData = data + this.activeTree = data.panelType if (data.nodeType === 'panel') { // 加载视图数据 findOne(data.id).then(response => { @@ -564,8 +586,12 @@ export default { this.authResourceId = null this.authVisible = false }, - edit(data) { - debugger + edit(data, node) { + this.lastActiveNodeData = data + this.lastActiveNode = node + // 清空当前缓存 + this.$store.commit('setComponentData', []) + this.$store.commit('setCanvasStyle', DEFAULT_COMMON_CANVAS_STYLE) this.$store.dispatch('panel/setPanelInfo', data) bus.$emit('PanelSwitchComponent', { name: 'PanelEdit' }) }, @@ -587,6 +613,22 @@ export default { }, newPanelSave(id) { + }, + // 激活并点击当前节点 + activeNodeAndClick(panelInfo) { + if (panelInfo) { + this.$nextTick(() => { + // 延迟设置CurrentKey + this.$refs.panel_list_tree.setCurrentKey(panelInfo.id) + this.$nextTick(() => { + document.querySelector('.is-current').firstChild.click() + // 如果是仪表盘列表的仪表盘 直接进入编辑界面 + if (panelInfo.nodeType === 'panel' && panelInfo.panelType === 'self') { + this.edit(this.lastActiveNodeData, this.lastActiveNode) + } + }) + }) + } } } }