65 lines
1.4 KiB
JavaScript
65 lines
1.4 KiB
JavaScript
// stores/counter.js
|
||
import {
|
||
defineStore
|
||
} from 'pinia';
|
||
import * as menusApi from '@/http/api/menu.js'
|
||
import pagesJSON from '@/pages.json'
|
||
const allPages = pagesJSON.pages.concat(pagesJSON.subPackages.reduce((prve, cur) => {
|
||
const childPages = cur.pages.map(v => {
|
||
return {
|
||
...v,
|
||
allPath: cur.root + '/' + v.path
|
||
}
|
||
})
|
||
prve.push(...childPages)
|
||
return prve
|
||
}, []))
|
||
|
||
function flattenNestedChildren(data) {
|
||
const result = [];
|
||
|
||
function traverse(nodeArray) {
|
||
if (!Array.isArray(nodeArray)) return;
|
||
|
||
for (const node of nodeArray) {
|
||
// 复制当前节点(不含children)
|
||
const flatNode = {
|
||
...node
|
||
};
|
||
delete flatNode.children;
|
||
result.push(flatNode);
|
||
|
||
// 递归处理子节点
|
||
traverse(node.children);
|
||
}
|
||
}
|
||
|
||
traverse(data);
|
||
return result;
|
||
}
|
||
|
||
export const useMenusStore = defineStore('menus', {
|
||
state: () => {
|
||
return {
|
||
originMenus: [],
|
||
menuList: [],
|
||
allPages: allPages,//小程序全部页面
|
||
adminPages:[]//后台返回的全部页面
|
||
};
|
||
},
|
||
actions: {
|
||
async getMenus() {
|
||
const data = await menusApi.getMenus()
|
||
this.originMenus = data;
|
||
const arr = flattenNestedChildren(data).filter(v => v.miniPath)
|
||
this.adminPages=arr;
|
||
this.menuList = this.allPages.filter(v => {
|
||
const findItem = arr.find(item => item.miniPath == v.pageId || item.miniPath
|
||
.replace(/^\/+|\/+$/g, '') == v.allPath)
|
||
return findItem
|
||
})
|
||
return this.originMenus
|
||
|
||
}
|
||
},
|
||
}); |