From 08b7f35d2af1b14eb22a872afa3cc7d3be7d4ed9 Mon Sep 17 00:00:00 2001 From: lvjunzhao <967725@dms.yudean.com> Date: Fri, 18 Apr 2025 16:53:12 +0800 Subject: [PATCH] =?UTF-8?q?fixbug:=E6=9D=83=E9=99=90=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E7=9A=84bug=EF=BC=8C=E5=85=A8=E9=87=8F=E6=8F=90=E4=BA=A4?= =?UTF-8?q?=E6=B2=A1=E7=82=B9=E5=87=BB=E6=97=B6=E5=80=99=E4=B8=A2=E5=A4=B1?= =?UTF-8?q?=E5=AD=90=E8=8A=82=E7=82=B9=E7=9A=84=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/role/components/RoleAuthModal.vue | 36 +++++++++++++------ 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/src/views/system/role/components/RoleAuthModal.vue b/src/views/system/role/components/RoleAuthModal.vue index 1818896..b11739d 100644 --- a/src/views/system/role/components/RoleAuthModal.vue +++ b/src/views/system/role/components/RoleAuthModal.vue @@ -186,7 +186,7 @@ }); findMenuTree(buttonSelectData.value, treeData.value, btnCheckedKey, 'button'); } - btnKeys.value = btnCheckedKey; + btnKeys.value = Array.from(new Set([...btnKeys.value, ...btnCheckedKey])); let lostColKey = []; colKeys.value.forEach((o) => { @@ -205,7 +205,7 @@ }); findMenuTree(columnSelectData.value, treeData.value, colCheckedKey, 'column'); } - colKeys.value = colCheckedKey; + colKeys.value = Array.from(new Set([...colKeys.value, ...colCheckedKey])); let lostFieldKey = []; fieldKeys.value.forEach((o) => { @@ -224,7 +224,7 @@ }); findMenuTree(fieldSelectData.value, treeData.value, fieldCheckedKey, 'field'); } - fieldKeys.value = fieldCheckedKey; + fieldKeys.value = Array.from(new Set([...fieldKeys.value, ...fieldCheckedKey])); nextTick(() => { getTree(unref(ButtonRef))?.setCheckedKeys(authList.buttonIds); @@ -289,6 +289,11 @@ // colKeys.value = getTree(unref(ColumnRef)).getCheckedKeys(); // fieldKeys.value = getTree(unref(FieldRef)).getCheckedKeys(); + // 过滤无效的权限 ID + btnKeys.value = btnKeys.value.filter((o) => btnFilterKeys.value.includes(o)); + colKeys.value = colKeys.value.filter((o) => colFilterKeys.value.includes(o)); + fieldKeys.value = fieldKeys.value.filter((o) => fieldFilterKeys.value.includes(o)); + // btnKeys.value = btnKeys.value.filter((o) => { // return btnFilterKeys.value.includes(o); // }); @@ -299,6 +304,7 @@ // return fieldFilterKeys.value.includes(o); // }); + // 提交更新后的权限数据 await RoleSetAuth({ id: rowId.value, type: typeKey.value == 4?NaN:typeKey.value, @@ -307,6 +313,7 @@ columnIds: colKeys.value, formIds: fieldKeys.value, }); + notification.success({ message: t('提示'), description: t('功能授权更新成功'), @@ -362,14 +369,23 @@ colFilterKeys.value = []; fieldFilterKeys.value = []; - findMenuTree(buttonSelectData.value, treeData.value, addMenuSelect, 'button'); - findMenuTree(columnSelectData.value, treeData.value, addMenuSelect, 'column'); - findMenuTree(fieldSelectData.value, treeData.value, addMenuSelect, 'field'); + // 使用 Set 合并已选中和新增选中的菜单,避免重复 + const allMenuKeys = new Set([...menuKeys.value, ...addMenuSelect]); - let newBtnSelect = [...new Set([...btnKeys.value, ...addMenuSelect])]; - getTree(unref(ButtonRef))?.setExpandedKeys(newBtnSelect); - getTree(unref(ColumnRef))?.setExpandedKeys([...new Set([...colKeys.value, ...addMenuSelect])]); - getTree(unref(FieldRef))?.setExpandedKeys([...new Set([...fieldKeys.value, ...addMenuSelect])]); + // 确保未选中菜单的子节点不会丢失 + findMenuTree(buttonSelectData.value, treeData.value, Array.from(allMenuKeys), 'button'); + findMenuTree(columnSelectData.value, treeData.value, Array.from(allMenuKeys), 'column'); + findMenuTree(fieldSelectData.value, treeData.value, Array.from(allMenuKeys), 'field'); + + // 更新按钮、字段、表单的选中状态 + btnKeys.value = Array.from(new Set([...btnKeys.value, ...addMenuSelect])); + colKeys.value = Array.from(new Set([...colKeys.value, ...addMenuSelect])); + fieldKeys.value = Array.from(new Set([...fieldKeys.value, ...addMenuSelect])); + + // 扩展树的展开状态 + getTree(unref(ButtonRef))?.setExpandedKeys(Array.from(allMenuKeys)); + getTree(unref(ColumnRef))?.setExpandedKeys(Array.from(allMenuKeys)); + getTree(unref(FieldRef))?.setExpandedKeys(Array.from(allMenuKeys)); } function getParentKeys(checkedKey, arr, keys) { for (let i = 0; i < arr.length; i++) {