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 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;
|
loading.value = true;
|
||||||
const res = await updateMenus(treeData.value);
|
const res = await updateMenus(dataArr).catch(() => {});
|
||||||
if (res.status === 200) {
|
if (res?.status === 200) {
|
||||||
onlyMessage('操作成功', 'success');
|
onlyMessage('操作成功', 'success');
|
||||||
}
|
}
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
|
|
|
@ -31,12 +31,12 @@ export const filterMenu = (permissions: string[], menus: any[]) => {
|
||||||
export const mergeMapToArr = (baseMenuData: any, systemMenuData: any) => {
|
export const mergeMapToArr = (baseMenuData: any, systemMenuData: any) => {
|
||||||
const updataArr = (r: any) => {
|
const updataArr = (r: any) => {
|
||||||
for (let i = 0; i < r.length; i++) {
|
for (let i = 0; i < r.length; i++) {
|
||||||
const child = r[i].children;
|
let child = r[i].children;
|
||||||
if (child) {
|
if (child) {
|
||||||
updataArr(child);
|
updataArr(child);
|
||||||
}
|
}
|
||||||
r[i] = newMap.get(r[i].code);
|
r[i] = newMap.get(r[i].code);
|
||||||
delete r[i].parentCode;
|
r[i]?.parentCode && delete r[i].parentCode;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
const root: any = [];
|
const root: any = [];
|
||||||
|
@ -45,7 +45,7 @@ export const mergeMapToArr = (baseMenuData: any, systemMenuData: any) => {
|
||||||
...new Set([...baseMenuData?.rootSet, ...systemMenuData.rootSet]),
|
...new Set([...baseMenuData?.rootSet, ...systemMenuData.rootSet]),
|
||||||
];
|
];
|
||||||
newRootArr.forEach((item: any) => {
|
newRootArr.forEach((item: any) => {
|
||||||
root.push(newMap.get(item));
|
newMap.has(item) && root.push(newMap.get(item));
|
||||||
});
|
});
|
||||||
updataArr(root);
|
updataArr(root);
|
||||||
return root;
|
return root;
|
||||||
|
@ -55,9 +55,10 @@ export const mergeMapToArr = (baseMenuData: any, systemMenuData: any) => {
|
||||||
* 平铺菜单
|
* 平铺菜单
|
||||||
* @param value 默认菜单以及查询系统菜单 baseMenu systemMenu
|
* @param value 默认菜单以及查询系统菜单 baseMenu systemMenu
|
||||||
* @param checked 查询系统菜单传true
|
* @param checked 查询系统菜单传true
|
||||||
|
* @param save 保存时传true
|
||||||
* @returns 平铺菜单Map、根菜单名、系统选中的keys
|
* @returns 平铺菜单Map、根菜单名、系统选中的keys
|
||||||
*/
|
*/
|
||||||
export const developArrToMap = (Menu: any, checked = false) => {
|
export const developArrToMap = (Menu: any, checked = false, save = false) => {
|
||||||
const rootSet = new Set();
|
const rootSet = new Set();
|
||||||
const arrMap = new Map();
|
const arrMap = new Map();
|
||||||
const checkedKeys: any = [];
|
const checkedKeys: any = [];
|
||||||
|
@ -65,10 +66,16 @@ export const developArrToMap = (Menu: any, checked = false) => {
|
||||||
arr.forEach((item: any) => {
|
arr.forEach((item: any) => {
|
||||||
item.title = item.code;
|
item.title = item.code;
|
||||||
item.key = item.code;
|
item.key = item.code;
|
||||||
|
if (save) {
|
||||||
|
delete item.checked; //保存时删除 checked 字段
|
||||||
|
checkedKeys.push(item.code);
|
||||||
|
} else {
|
||||||
if (checked || item?.checked) {
|
if (checked || item?.checked) {
|
||||||
item.checked = item?.checked || checked;
|
item.checked = item?.checked || checked;
|
||||||
checkedKeys.push(item.code);
|
checkedKeys.push(item.code);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
arrMap.set(item.code, item);
|
arrMap.set(item.code, item);
|
||||||
if (parentCode === 'root') {
|
if (parentCode === 'root') {
|
||||||
rootSet.add(item.code); //处理根菜单
|
rootSet.add(item.code); //处理根菜单
|
||||||
|
|
Loading…
Reference in New Issue