mirror of
https://github.com/pure-admin/vue-pure-admin.git
synced 2025-06-06 00:18:51 +08:00
77 lines
2.2 KiB
TypeScript
77 lines
2.2 KiB
TypeScript
import { defineStore } from "pinia";
|
|
import { store } from "/@/store";
|
|
import { cacheType } from "./types";
|
|
import { constantMenus } from "/@/router";
|
|
import { cloneDeep } from "lodash-unified";
|
|
import { RouteConfigs } from "/@/layout/types";
|
|
import { ascending, filterTree } from "/@/router/utils";
|
|
|
|
export const usePermissionStore = defineStore({
|
|
id: "pure-permission",
|
|
state: () => ({
|
|
// 静态路由生成的菜单
|
|
constantMenus,
|
|
// 整体路由生成的菜单(静态、动态)
|
|
wholeMenus: [],
|
|
// 深拷贝一个菜单树,与导航菜单不突出
|
|
menusTree: [],
|
|
buttonAuth: [],
|
|
// 缓存页面keepAlive
|
|
cachePageList: []
|
|
}),
|
|
actions: {
|
|
/** 获取异步路由菜单 */
|
|
asyncActionRoutes(routes) {
|
|
if (this.wholeMenus.length > 0) return;
|
|
this.wholeMenus = filterTree(
|
|
ascending(this.constantMenus.concat(routes))
|
|
);
|
|
|
|
this.menusTree = cloneDeep(
|
|
filterTree(ascending(this.constantMenus.concat(routes)))
|
|
);
|
|
|
|
const getButtonAuth = (arrRoutes: Array<RouteConfigs>) => {
|
|
if (!arrRoutes || !arrRoutes.length) return;
|
|
arrRoutes.forEach((v: RouteConfigs) => {
|
|
if (v.meta && v.meta.authority) {
|
|
this.buttonAuth.push(...v.meta.authority);
|
|
}
|
|
if (v.children) {
|
|
getButtonAuth(v.children);
|
|
}
|
|
});
|
|
};
|
|
|
|
getButtonAuth(this.wholeMenus);
|
|
},
|
|
async changeSetting(routes) {
|
|
await this.asyncActionRoutes(routes);
|
|
},
|
|
cacheOperate({ mode, name }: cacheType) {
|
|
switch (mode) {
|
|
case "add":
|
|
this.cachePageList.push(name);
|
|
this.cachePageList = [...new Set(this.cachePageList)];
|
|
break;
|
|
case "delete":
|
|
// eslint-disable-next-line no-case-declarations
|
|
const delIndex = this.cachePageList.findIndex(v => v === name);
|
|
delIndex !== -1 && this.cachePageList.splice(delIndex, 1);
|
|
break;
|
|
}
|
|
},
|
|
/** 清空缓存页面 */
|
|
clearAllCachePage() {
|
|
this.wholeMenus = [];
|
|
this.menusTree = [];
|
|
this.buttonAuth = [];
|
|
this.cachePageList = [];
|
|
}
|
|
}
|
|
});
|
|
|
|
export function usePermissionStoreHook() {
|
|
return usePermissionStore(store);
|
|
}
|