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,