From 168e4bf1b8f25d2654f6415ce598694f9579e626 Mon Sep 17 00:00:00 2001 From: caiyuchao Date: Wed, 8 Jan 2025 15:34:07 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E8=A7=92=E8=89=B2=E7=9A=84=E8=8F=9C=E5=8D=95=E6=9D=83=E9=99=90?= =?UTF-8?q?bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/menu.ts | 25 +++++++++++++------ .../role/modules/role-operate-drawer.vue | 2 +- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/utils/menu.ts b/src/utils/menu.ts index fd3e676..dc898a1 100644 --- a/src/utils/menu.ts +++ b/src/utils/menu.ts @@ -10,17 +10,26 @@ import type { DataNode } from 'ant-design-vue/es/tree'; */ export function transformMenuChildWithRootIds(menuList: DataNode[], checkedKeys: number[]): number[] { const checkedKeysSet = new Set(checkedKeys); - - function changeCheckedKeys(menus: DataNode[]) { - menus.forEach(menu => { - if (menu.children) { - changeCheckedKeys(menu.children); + + function changeCheckedKeys(menus: DataNode[], checkedKey: number): boolean { + for (let menu of menus) { + if (menu.key === checkedKey) { checkedKeysSet.add(menu.key as number); + return true; } - }); + if (menu.children && menu.children.length > 0) { + let isFind = changeCheckedKeys(menu.children, checkedKey); + if (isFind) { + checkedKeysSet.add(menu.key as number); + return true; + } + } + }; + return false; } - - changeCheckedKeys(menuList); + checkedKeys.forEach(checkedKey => { + changeCheckedKeys(menuList, checkedKey); + }) return Array.from(checkedKeysSet); } diff --git a/src/views/manage/role/modules/role-operate-drawer.vue b/src/views/manage/role/modules/role-operate-drawer.vue index fa5dc1b..22707b7 100644 --- a/src/views/manage/role/modules/role-operate-drawer.vue +++ b/src/views/manage/role/modules/role-operate-drawer.vue @@ -83,7 +83,7 @@ function closeDrawer() { async function handleSubmit() { await validate(); - const menuIds = menuAuthRef.value?.checkedKeys(); + const menuIds = transformMenuChildWithRootIds(menuAuthRef.value?.tree || [], model.value.menuIds); const {error} = await (props.operateType === 'edit' ? doPutRole : doPostRole)({ ...model.value,