fix: bug#11271
This commit is contained in:
parent
ae2758b5ba
commit
6ae03a9fc9
|
@ -103,10 +103,55 @@ const params = {
|
|||
],
|
||||
};
|
||||
|
||||
// 过滤子级空children
|
||||
const filterAndClean = (data: any) => {
|
||||
// 如果 data 是一个数组,则对每个元素递归调用此函数
|
||||
if (Array.isArray(data)) {
|
||||
return data
|
||||
.filter((item) => item !== null) // 过滤掉 null 元素
|
||||
.map((item: any) => filterAndClean(item)); // 递归调用此函数
|
||||
}
|
||||
|
||||
// 如果 data 是一个对象,则递归调用此函数来清除其子元素
|
||||
if (typeof data === 'object') {
|
||||
let cleanedChildren = filterAndClean(data.children); // 递归清除子元素
|
||||
if (Array.isArray(cleanedChildren)) {
|
||||
cleanedChildren = cleanedChildren.filter((i) => i);
|
||||
}
|
||||
|
||||
if (cleanedChildren !== undefined) {
|
||||
data.children = cleanedChildren;
|
||||
} else {
|
||||
delete data.children; // 如果 children 是 undefined,则将其删除
|
||||
}
|
||||
}
|
||||
return data;
|
||||
};
|
||||
|
||||
const handleOk = async () => {
|
||||
const { arrMap, rootSet } = developArrToMap(
|
||||
cloneDeep(treeData.value),
|
||||
false,
|
||||
true,
|
||||
);
|
||||
const dataMap = new Map();
|
||||
// 过滤选中菜单的map
|
||||
selectedKeys.value.forEach((item: string) => {
|
||||
if (arrMap.has(item)) {
|
||||
dataMap.set(item, arrMap.get(item));
|
||||
}
|
||||
});
|
||||
|
||||
const _saveDataMap = {
|
||||
arrMap: dataMap,
|
||||
rootSet,
|
||||
};
|
||||
|
||||
const dataArr = filterAndClean(mergeMapToArr(_saveDataMap, _saveDataMap));
|
||||
|
||||
loading.value = true;
|
||||
const res = await updateMenus(treeData.value);
|
||||
if (res.status === 200) {
|
||||
const res = await updateMenus(dataArr).catch(() => {});
|
||||
if (res?.status === 200) {
|
||||
onlyMessage('操作成功', 'success');
|
||||
}
|
||||
loading.value = false;
|
||||
|
|
|
@ -31,12 +31,12 @@ export const filterMenu = (permissions: string[], menus: any[]) => {
|
|||
export const mergeMapToArr = (baseMenuData: any, systemMenuData: any) => {
|
||||
const updataArr = (r: any) => {
|
||||
for (let i = 0; i < r.length; i++) {
|
||||
const child = r[i].children;
|
||||
let child = r[i].children;
|
||||
if (child) {
|
||||
updataArr(child);
|
||||
}
|
||||
r[i] = newMap.get(r[i].code);
|
||||
delete r[i].parentCode;
|
||||
r[i]?.parentCode && delete r[i].parentCode;
|
||||
}
|
||||
};
|
||||
const root: any = [];
|
||||
|
@ -45,7 +45,7 @@ export const mergeMapToArr = (baseMenuData: any, systemMenuData: any) => {
|
|||
...new Set([...baseMenuData?.rootSet, ...systemMenuData.rootSet]),
|
||||
];
|
||||
newRootArr.forEach((item: any) => {
|
||||
root.push(newMap.get(item));
|
||||
newMap.has(item) && root.push(newMap.get(item));
|
||||
});
|
||||
updataArr(root);
|
||||
return root;
|
||||
|
@ -55,9 +55,10 @@ export const mergeMapToArr = (baseMenuData: any, systemMenuData: any) => {
|
|||
* 平铺菜单
|
||||
* @param value 默认菜单以及查询系统菜单 baseMenu systemMenu
|
||||
* @param checked 查询系统菜单传true
|
||||
* @param save 保存时传true
|
||||
* @returns 平铺菜单Map、根菜单名、系统选中的keys
|
||||
*/
|
||||
export const developArrToMap = (Menu: any, checked = false) => {
|
||||
export const developArrToMap = (Menu: any, checked = false, save = false) => {
|
||||
const rootSet = new Set();
|
||||
const arrMap = new Map();
|
||||
const checkedKeys: any = [];
|
||||
|
@ -65,10 +66,16 @@ export const developArrToMap = (Menu: any, checked = false) => {
|
|||
arr.forEach((item: any) => {
|
||||
item.title = item.code;
|
||||
item.key = item.code;
|
||||
if (checked || item?.checked) {
|
||||
item.checked = item?.checked || checked;
|
||||
if (save) {
|
||||
delete item.checked; //保存时删除 checked 字段
|
||||
checkedKeys.push(item.code);
|
||||
} else {
|
||||
if (checked || item?.checked) {
|
||||
item.checked = item?.checked || checked;
|
||||
checkedKeys.push(item.code);
|
||||
}
|
||||
}
|
||||
|
||||
arrMap.set(item.code, item);
|
||||
if (parentCode === 'root') {
|
||||
rootSet.add(item.code); //处理根菜单
|
||||
|
|
Loading…
Reference in New Issue