From 8eb5c136d663eaf6faf45596ae4e714c0eb44541 Mon Sep 17 00:00:00 2001 From: yaojn Date: Fri, 26 Sep 2025 10:14:44 +0800 Subject: [PATCH] =?UTF-8?q?-=20[=E4=BF=AE=E5=A4=8D]=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E7=AE=A1=E7=90=86-=E7=9B=AE=E5=BD=95=E4=B8=8B=E7=9A=84?= =?UTF-8?q?=E8=8F=9C=E5=8D=95=E6=97=A0=E6=B3=95=E7=A7=BB=E5=8A=A8=E8=87=B3?= =?UTF-8?q?=E7=A9=BA=E7=9B=AE=E5=BD=95=20=20=20=20-=20[=E5=85=B3=E8=81=94]?= =?UTF-8?q?#[1516720919904256]=E8=8F=9C=E5=8D=95=E7=AE=A1=E7=90=86-?= =?UTF-8?q?=E7=9B=AE=E5=BD=95=E4=B8=8B=E7=9A=84=E8=8F=9C=E5=8D=95=E6=97=A0?= =?UTF-8?q?=E6=B3=95=E7=A7=BB=E5=8A=A8=E8=87=B3=E7=A9=BA=E7=9B=AE=E5=BD=95?= =?UTF-8?q?=20http://192.168.0.96:8090/demo/rdm.html#/bug-detail/939050947?= =?UTF-8?q?543040/939050947543057/1516720919904256?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../framework/extramenu/extramenu-manage.vue | 15 ++++- .../framework/extramenu/menu-treeview.vue | 66 +++++++++---------- 2 files changed, 43 insertions(+), 38 deletions(-) diff --git a/src/views/pages/framework/extramenu/extramenu-manage.vue b/src/views/pages/framework/extramenu/extramenu-manage.vue index 7dca73ed..f4c8bf17 100644 --- a/src/views/pages/framework/extramenu/extramenu-manage.vue +++ b/src/views/pages/framework/extramenu/extramenu-manage.vue @@ -80,7 +80,6 @@ export default { } }, update(list, parentId) { - console.log('update', parentId); this.$api.framework.extramenu.moveExtramenu({ menuList: list }).then(res => { if (res.Status === 'OK') { this.$Message.success(this.$t('message.executesuccess')); @@ -92,11 +91,23 @@ export default { this.$api.framework.extramenu .getMenuTreeList() .then(res => { - this.menuList = res.Return; + this.menuList = this.normalizeMenuList(res.Return || []); }) .finally(() => { this.loadingShow = false; }); + }, + normalizeMenuList(list = []) { + // 修复空目录节点无法拖入菜单的问题 + list.forEach(item => { + if (item && item.type === 0 && item.childCount === 0) { + item.children = []; + } + if (item && Array.isArray(item.children) && item.children.length > 0) { + this.normalizeMenuList(item.children); + } + }); + return list; } }, filter: {}, diff --git a/src/views/pages/framework/extramenu/menu-treeview.vue b/src/views/pages/framework/extramenu/menu-treeview.vue index cb572c9f..8e486267 100644 --- a/src/views/pages/framework/extramenu/menu-treeview.vue +++ b/src/views/pages/framework/extramenu/menu-treeview.vue @@ -5,10 +5,10 @@ tag="div" class="dataSource-ul" :list="childrenList" - :group="{ name: 'item-sub' }" :move="checkMove" handle=".tsfont-drag" :forceFallback="false" + :data-parentid="parentId" @start="moveStart" @sort="moveEnd" @remove="moveRemove" @@ -48,10 +48,10 @@ d.id == targetParentId); + if (parentNode && parentNode.type === 0) { + // 只能拖到目录下面 + this.newParentId = parentNode.id; + return true; + } else { + // 链接节点不允许有子节点 + return false; + } + } return false; }, moveStart(e) { this.currentId = e.item.attributes.id.value; this.currentNode = this.childrenList.find(d => d.id == this.currentId); - console.log(this.currentId, this.currentNode); }, update() { - console.log('update', this.parentId); this.$emit('update', this.childrenList, this.parentId); }, moveEnd(evt) { - console.log('moveEnd'); if (this.needUpdate) { - console.log('update node'); if (this.currentNode && this.newParentId !== null) { this.$set(this.currentNode, 'parentId', this.newParentId); this.newParentId = null; @@ -213,20 +232,6 @@ export default { }, isOpen(cd) { this.$set(cd, '_isHidden', !cd._isHidden); - }, - setItem(item) { - this.$set(item, 'isShow', this.search); - this.$set(item, 'isRequest', !this.search); - if (item.children && item.children.length > 0) { - item.children.forEach(citem => { - this.$set(citem, 'isShow', true); - this.$set(citem, 'isRequest', true); - this.setItem(citem); - }); - } else { - this.$set(item, 'isShow', false); - this.$set(item, 'isRequest', false); - } } }, filter: {}, @@ -235,27 +240,16 @@ export default { return { animation: 150, scroll: true, - group: 'description', disabled: false, - ghostClass: 'ghost' - }; - }, - showOpen() { - return function(item) { - let KEY = false; - let cKEY = false; - if (item.childCount > 0) { - KEY = true; - } - - return KEY; + ghostClass: 'ghost', + group: { name: 'tree', pull: true, put: true } }; } }, watch: { children: { handler(newVal) { - this.childrenList = newVal; + this.childrenList = newVal || []; }, deep: true, immediate: true -- Gitee