forked from wangjiadong/comp
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.
175 lines
5.7 KiB
175 lines
5.7 KiB
1 year ago
|
import type { RouteRecordRaw } from 'vue-router';
|
||
|
|
||
|
import { useAppStore } from '/@/store/modules/app';
|
||
|
import { usePermissionStore } from '/@/store/modules/permission';
|
||
|
import { useUserStore } from '/@/store/modules/user';
|
||
|
|
||
|
import { useTabs } from './useTabs';
|
||
|
|
||
|
import { router, resetRouter } from '/@/router';
|
||
|
// import { RootRoute } from '/@/router/routes';
|
||
|
|
||
|
import projectSetting from '/@/settings/projectSetting';
|
||
|
import { PermissionModeEnum } from '/@/enums/appEnum';
|
||
|
import { RoleEnum } from '/@/enums/roleEnum';
|
||
|
|
||
|
import { intersection } from 'lodash-es';
|
||
|
import { isArray } from '/@/utils/is';
|
||
|
import { useMultipleTabStore } from '/@/store/modules/multipleTab';
|
||
|
|
||
|
// User permissions related operations
|
||
|
export function usePermission() {
|
||
|
const userStore = useUserStore();
|
||
|
const appStore = useAppStore();
|
||
|
const permissionStore = usePermissionStore();
|
||
|
//动态加载流程节点表单权限
|
||
|
let formData: any = {};
|
||
|
function initBpmFormData(_bpmFormData) {
|
||
|
formData = _bpmFormData;
|
||
|
}
|
||
|
const { closeAll } = useTabs(router);
|
||
|
|
||
|
//==================================工作流权限判断-begin=========================================
|
||
|
function hasBpmPermission(code, type) {
|
||
|
// 禁用-type=2
|
||
|
// 显示-type=1
|
||
|
let codeList: string[] = [];
|
||
|
let permissionList = formData.permissionList;
|
||
|
if (permissionList && permissionList.length > 0) {
|
||
|
for (let item of permissionList) {
|
||
|
if (item.type == type) {
|
||
|
codeList.push(item.action);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return codeList.indexOf(code) >= 0;
|
||
|
}
|
||
|
//==================================工作流权限判断-end=========================================
|
||
|
|
||
|
/**
|
||
|
* Change permission mode
|
||
|
*/
|
||
|
async function togglePermissionMode() {
|
||
|
appStore.setProjectConfig({
|
||
|
permissionMode: projectSetting.permissionMode === PermissionModeEnum.BACK ? PermissionModeEnum.ROUTE_MAPPING : PermissionModeEnum.BACK,
|
||
|
});
|
||
|
location.reload();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Reset and regain authority resource information
|
||
|
* @param id
|
||
|
*/
|
||
|
async function resume() {
|
||
|
const tabStore = useMultipleTabStore();
|
||
|
tabStore.clearCacheTabs();
|
||
|
resetRouter();
|
||
|
const routes = await permissionStore.buildRoutesAction();
|
||
|
routes.forEach((route) => {
|
||
|
router.addRoute(route as unknown as RouteRecordRaw);
|
||
|
});
|
||
|
permissionStore.setLastBuildMenuTime();
|
||
|
closeAll();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 确定是否存在权限
|
||
|
*/
|
||
|
function hasPermission(value?: RoleEnum | RoleEnum[] | string | string[], def = true): boolean {
|
||
|
// Visible by default
|
||
|
if (!value) {
|
||
|
return def;
|
||
|
}
|
||
|
|
||
|
const permMode = projectSetting.permissionMode;
|
||
|
|
||
|
if ([PermissionModeEnum.ROUTE_MAPPING, PermissionModeEnum.ROLE].includes(permMode)) {
|
||
|
if (!isArray(value)) {
|
||
|
return userStore.getRoleList?.includes(value as RoleEnum);
|
||
|
}
|
||
|
return (intersection(value, userStore.getRoleList) as RoleEnum[]).length > 0;
|
||
|
}
|
||
|
|
||
|
if (PermissionModeEnum.BACK === permMode) {
|
||
|
const allCodeList = permissionStore.getPermCodeList as string[];
|
||
|
if (!isArray(value) && allCodeList && allCodeList.length > 0) {
|
||
|
//=============================工作流权限判断-显示-begin==============================================
|
||
|
if (formData) {
|
||
|
let code = value as string;
|
||
|
if (hasBpmPermission(code, '1') === true) {
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
//=============================工作流权限判断-显示-end==============================================
|
||
|
return allCodeList.includes(value);
|
||
|
}
|
||
|
return (intersection(value, allCodeList) as string[]).length > 0;
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
/**
|
||
|
* 是否禁用组件
|
||
|
*/
|
||
|
function isDisabledAuth(value?: RoleEnum | RoleEnum[] | string | string[], def = true): boolean {
|
||
|
//=============================工作流权限判断-禁用-begin==============================================
|
||
|
if (formData) {
|
||
|
let code = value as string;
|
||
|
if (hasBpmPermission(code, '2') === true) {
|
||
|
return true;
|
||
|
}
|
||
|
//update-begin-author:taoyan date:2022-6-17 for: VUEN-1342【流程】编码方式 节点权限配置好后,未生效
|
||
|
if (isCodingButNoConfig(code) == true) {
|
||
|
return false;
|
||
|
}
|
||
|
//update-end-author:taoyan date:2022-6-17 for: VUEN-1342【流程】编码方式 节点权限配置好后,未生效
|
||
|
}
|
||
|
//=============================工作流权限判断-禁用-end==============================================
|
||
|
return !hasPermission(value);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Change roles
|
||
|
* @param roles
|
||
|
*/
|
||
|
async function changeRole(roles: RoleEnum | RoleEnum[]): Promise<void> {
|
||
|
if (projectSetting.permissionMode !== PermissionModeEnum.ROUTE_MAPPING) {
|
||
|
throw new Error('Please switch PermissionModeEnum to ROUTE_MAPPING mode in the configuration to operate!');
|
||
|
}
|
||
|
|
||
|
if (!isArray(roles)) {
|
||
|
roles = [roles];
|
||
|
}
|
||
|
userStore.setRoleList(roles);
|
||
|
await resume();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* refresh menu data
|
||
|
*/
|
||
|
async function refreshMenu() {
|
||
|
resume();
|
||
|
}
|
||
|
|
||
|
//update-begin-author:taoyan date:2022-6-17 for: VUEN-1342【流程】编码方式 节点权限配置好后,未生效
|
||
|
/**
|
||
|
* 判断是不是 代码里写了逻辑但是没有配置权限这种情况
|
||
|
*/
|
||
|
function isCodingButNoConfig(code) {
|
||
|
let all = permissionStore.allAuthList;
|
||
|
if (all && all instanceof Array) {
|
||
|
let temp = all.filter((item) => item.action == code);
|
||
|
if (temp && temp.length > 0) {
|
||
|
if (temp[0].status == '0') {
|
||
|
return true;
|
||
|
}
|
||
|
} else {
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
//update-end-author:taoyan date:2022-6-17 for: VUEN-1342【流程】编码方式 节点权限配置好后,未生效
|
||
|
|
||
|
return { changeRole, hasPermission, togglePermissionMode, refreshMenu, isDisabledAuth, initBpmFormData };
|
||
|
}
|