fix: bug#11271

This commit is contained in:
jackhoo_98 2023-03-31 21:21:35 +08:00
parent ae2758b5ba
commit 6ae03a9fc9
2 changed files with 60 additions and 8 deletions

View File

@ -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;

View File

@ -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 Mapkeys
*/
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); //处理根菜单