You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
244 lines
7.6 KiB
244 lines
7.6 KiB
7 months ago
|
|
||
|
|
||
|
import { defineStore } from 'pinia';
|
||
|
import { appConfigStore } from '/nerv-base/store/modules/app-config';
|
||
|
export const authorizationService = defineStore({
|
||
|
id: 'authorizationService',
|
||
|
state(): {
|
||
|
userInfo: any;
|
||
|
projectId: any;
|
||
|
projectName: string;
|
||
|
enterpriseName: any;
|
||
|
userResourceList: any;
|
||
|
initAllResourceList: string[];
|
||
|
initRouterList: string[];
|
||
|
initOpList: string[];
|
||
|
appConfig: any;
|
||
|
initMenus?: object[];
|
||
|
allResourMenus?: object[];
|
||
|
} {
|
||
|
return {
|
||
|
appConfig: appConfigStore(),
|
||
|
projectId: null,
|
||
|
projectName: '',
|
||
|
enterpriseName: null,
|
||
|
userInfo: {},
|
||
|
userResourceList: [],
|
||
|
initAllResourceList: [],
|
||
|
initRouterList: [],
|
||
|
initOpList: [],
|
||
|
initMenus: [],
|
||
|
allResourMenus: [],
|
||
|
};
|
||
|
},
|
||
|
getters: {
|
||
|
getPrjectId: (state: any) => state.projectId,
|
||
|
getProjectName: (state: any) => state.projectName,
|
||
|
getEnterpriseName: (state: any) => state.enterpriseName,
|
||
|
getUserResource: (state: any) => state.userResource,
|
||
|
getInitRouterList: (state: any) => state.initRouterList,
|
||
|
getUserResourceList: (state: any) => state.userResourceList,
|
||
|
getInitMenus: (state: any) => state.initMenus,
|
||
|
getAllResourMenus: (state: any) => state.allResourMenus,
|
||
|
getInitAllResourceList: (state: any) => state.initAllResourceList,
|
||
|
},
|
||
|
actions: {
|
||
|
clearAuthorization() {
|
||
|
this.initMenus = [];
|
||
|
this.initRouterList = [];
|
||
|
this.initOpList = [];
|
||
|
this.userResourceList = [];
|
||
|
this.projectId = '';
|
||
|
this.projectName = '';
|
||
|
this.enterpriseName = '';
|
||
|
},
|
||
|
setProjectId(val: string) {
|
||
|
this.projectId = val;
|
||
|
},
|
||
|
clearProjectId() {
|
||
|
this.projectId = '';
|
||
|
},
|
||
|
setProjectName(val: string) {
|
||
|
this.projectName = val;
|
||
|
},
|
||
|
setEnterpriseName(val: string) {
|
||
|
this.enterpriseName = val;
|
||
|
},
|
||
|
|
||
|
async initUserResource() {
|
||
|
if (window.sessionStorage.getItem('checkResource') === 'false') {
|
||
|
this.userResourceList = [JSON.parse(window.sessionStorage.getItem('resource'))];
|
||
|
this.initRouterList = [];
|
||
|
this.dealResourceTree(this.userResourceList);
|
||
|
} else {
|
||
|
const res = await this.appConfig.userResource();
|
||
|
this.userResourceList = res.data ? res.data : [];
|
||
|
if (this.appConfig.defaultResource) {
|
||
|
this.userResourceList.push(this.appConfig.defaultResource);
|
||
|
}
|
||
|
this.initRouterList = [];
|
||
|
|
||
|
this.dealResourceTree(this.userResourceList);
|
||
|
}
|
||
|
},
|
||
|
dealMenuResource(menu: object) {
|
||
|
this.allResourMenus.push(menu);
|
||
|
if (menu.menus?.length) {
|
||
|
menu.menus.forEach((item) => {
|
||
|
this.dealMenuResource(item);
|
||
|
});
|
||
|
}
|
||
|
},
|
||
|
//初始化菜单树
|
||
|
async initMenuResource() {
|
||
|
const res = await this.appConfig.userResource();
|
||
|
this.initMenus = [];
|
||
|
if (this.appConfig.resourceName && res.data && res.data.length) {
|
||
|
res.data.forEach((item) => {
|
||
|
if (item.code.includes('Custom_')) {
|
||
|
this.initMenus.push(item);
|
||
|
}
|
||
|
if (item.code.includes(this.appConfig.resourceName)) {
|
||
|
this.initMenus.push(item);
|
||
|
}
|
||
|
});
|
||
|
} else {
|
||
|
this.initMenus = res.data ? res.data : [];
|
||
|
}
|
||
|
if (!res.data) {
|
||
|
return;
|
||
|
}
|
||
|
this.allResourMenus = [];
|
||
|
res.data.forEach((item) => {
|
||
|
this.dealMenuResource(item);
|
||
|
});
|
||
|
},
|
||
|
async initMenuResourceV2() {
|
||
|
if (window.sessionStorage.getItem('checkResource') === 'false') {
|
||
|
this.userResourceList = JSON.parse(window.sessionStorage.getItem('resource')).menus;
|
||
|
this.initMenus = this.userResourceList ? this.userResourceList : [];
|
||
|
this.allResourMenus = [];
|
||
|
this.userResourceList.forEach((item) => {
|
||
|
this.dealResourceTree(item);
|
||
|
});
|
||
|
}
|
||
|
},
|
||
|
|
||
|
addUserResource(val: any) {
|
||
|
this.userResourceList.push(val);
|
||
|
this.initRouterList = [];
|
||
|
this.dealResourceTree(this.userResourceList);
|
||
|
},
|
||
|
|
||
|
updateUserResource(res: any) {
|
||
|
if (Object.prototype.toString.call(res) !== '[object Array]') return;
|
||
|
if (!this.appConfig.resourceName) {
|
||
|
this.userResourceList = res;
|
||
|
this.initRouterList = [];
|
||
|
this.initAllResourceList = [];
|
||
|
this.dealResourceTree(res);
|
||
|
} else {
|
||
|
const initResource = [];
|
||
|
res.forEach((item) => {
|
||
|
if (item.code.includes('intelligent-cloud-')) {
|
||
|
initResource.push(item);
|
||
|
}
|
||
|
if (item.code.includes('Custom_')) {
|
||
|
initResource.push(item);
|
||
|
}
|
||
|
});
|
||
|
this.userResourceList = initResource;
|
||
|
this.initRouterList = [];
|
||
|
this.initAllResourceList = [];
|
||
|
this.dealResourceTree(initResource);
|
||
|
}
|
||
|
},
|
||
|
//检查是否有路由权限
|
||
|
checkPermissionRouter(routeName: string): boolean {
|
||
|
if (!this.appConfig.enablePermissions) {
|
||
|
return true;
|
||
|
} else {
|
||
|
if (this.appConfig.resourceName) {
|
||
|
const newName = `${this.appConfig.resourceName}${routeName}`;
|
||
|
return this.initRouterList.indexOf(newName) === -1 ? false : true;
|
||
|
} else {
|
||
|
return this.initRouterList.indexOf(routeName) === -1 ? false : true;
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
//检查是否有操作权限
|
||
|
checkPermission(actionName: string): boolean {
|
||
|
if (!this.appConfig.enablePermissions) {
|
||
|
return true;
|
||
|
} else {
|
||
|
if (this.appConfig.resourceName) {
|
||
|
const newName = `${this.appConfig.resourceName}${actionName}`;
|
||
|
return this.initOpList.indexOf(newName) === -1 ? false : true;
|
||
|
} else {
|
||
|
return this.initOpList.indexOf(actionName) === -1 ? false : true;
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
//检查是否有全部的操作
|
||
|
checkAllPermission(actionName: string): boolean {
|
||
|
if (!this.appConfig.enablePermissions) {
|
||
|
return true;
|
||
|
} else {
|
||
|
if (this.appConfig.resourceName) {
|
||
|
return this.initAllResourceList.indexOf(`${this.appConfig.resourceName}${actionName}`) ===
|
||
|
-1
|
||
|
? false
|
||
|
: true;
|
||
|
} else {
|
||
|
return this.initAllResourceList.indexOf(actionName) === -1 ? false : true;
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
getApp() {
|
||
|
return ((import.meta.env.VITE_PUBLIC_PATH || '') as string).replace(/\//g, '');
|
||
|
},
|
||
|
//判断是否为父节点
|
||
|
dealNoChildrenMenu(item: any) {
|
||
|
if (item.type === 'noChildrenMenu') {
|
||
|
return true;
|
||
|
} else {
|
||
|
if (
|
||
|
Object.prototype.toString.call(item.menus) === '[object Array]' &&
|
||
|
item.menus.length !== 0
|
||
|
) {
|
||
|
return true;
|
||
|
} else {
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
//处理资源树
|
||
|
dealResourceTree(res: any) {
|
||
|
if (Object.prototype.toString.call(res) !== '[object Array]') return;
|
||
|
res?.forEach((item) => {
|
||
|
if (item.type === 'menus' || item.type === 'noChildrenMenu') {
|
||
|
this.initRouterList.push(item.code);
|
||
|
this.initAllResourceList.push(item.code);
|
||
|
if (this.dealNoChildrenMenu(item)) {
|
||
|
this.initAllResourceList.push(item.code + 'Index');
|
||
|
this.initRouterList.push(item.code + 'Index');
|
||
|
}
|
||
|
}
|
||
|
if (item.type === 'op') {
|
||
|
if (item.code && this.initRouterList.indexOf(item.code) === -1) {
|
||
|
this.initRouterList.push(item.code);
|
||
|
}
|
||
|
this.initAllResourceList.push(item.code);
|
||
|
this.initOpList.push(item.code);
|
||
|
}
|
||
|
if (
|
||
|
Object.prototype.toString.call(item.menus) === '[object Array]' &&
|
||
|
item.menus.length !== 0
|
||
|
) {
|
||
|
this.dealResourceTree(item.menus);
|
||
|
}
|
||
|
});
|
||
|
},
|
||
|
},
|
||
|
});
|