certd/packages/ui/certd-client/src/plugin/permission/store.permission.ts

98 lines
2.3 KiB
TypeScript

import { defineStore } from "pinia";
import { useResourceStore } from "/src/store/modules/resource";
import { getPermissions } from "./api";
import { mitter } from "/@/utils/util.mitt";
import { env } from "/@/utils/util.env";
//监听注销事件
mitter.on("app.logout", () => {
const permissionStore = usePermissionStore();
permissionStore.clear();
});
mitter.on("app.login", () => {
const permissionStore = useResourceStore();
permissionStore.clear();
permissionStore.init();
});
interface PermissionState {
permissions: [];
inited: boolean;
}
/**
* 构建权限码列表
* @param menuTree
* @param permissionList
* @returns {*}
*/
function formatPermissions(menuTree: Array<any>, permissionList: any[] = []) {
if (menuTree == null) {
menuTree = [];
}
menuTree.forEach((item: any) => {
if (item.permission) {
// @ts-ignore
permissionList.push(item.permission);
}
if (item.children != null && item.children.length > 0) {
formatPermissions(item.children, permissionList);
}
});
return permissionList;
}
export const usePermissionStore = defineStore({
id: "app.permission",
state: (): PermissionState => ({
permissions: [],
inited: false
}),
getters: {
// @ts-ignore
getPermissions() {
// @ts-ignore
return this.permissions;
},
// @ts-ignore
isInited() {
// @ts-ignore
return this.inited;
}
},
actions: {
init({ permissions }: any) {
this.permissions = permissions;
this.inited = true;
},
clear() {
this.permissions = [];
this.inited = false;
},
resolve(resourceTree: any) {
const permissions = formatPermissions(resourceTree);
this.init({ permissions });
//过滤没有权限的菜单
const resourceStore = useResourceStore();
resourceStore.filterByPermission(permissions);
},
async loadFromRemote() {
let permissionTree = [];
if (env.PM_ENABLED === "false") {
console.warn("当前权限模块未开启,权限列表为空");
} else {
//开启了权限模块,向后台请求权限列表
const data = await getPermissions();
if (data != null) {
permissionTree = data;
} else {
console.warn("当前获取到的权限列表为空");
}
}
this.resolve(permissionTree);
}
}
});