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++) {