tav-ui
Version:
102 lines (99 loc) • 3.92 kB
JavaScript
import { unref, computed } from 'vue';
import { useNamespace } from '../../../utils/namespace2.mjs';
import { nanoid } from '../../../utils/uuid2.mjs';
import { useGlobalConfig } from '../../../hooks/global/useGlobalConfig2.mjs';
import { DEFAULT_PERMISSIONQUERY_KEYS } from './PermissionQuery/types2.mjs';
function createNS(name) {
return useNamespace(name);
}
function createId(className) {
return `${className}-${nanoid()}`;
}
function normalizedPermissionCodes(codes) {
return codes.reduce((result, code) => {
if (!result[code])
result[code] = code;
return result;
}, {});
}
function normalizedPermissionQueryContent(content) {
let permissionQueryContent;
Object.keys(content).forEach((key) => {
if (!permissionQueryContent)
permissionQueryContent = {};
if (DEFAULT_PERMISSIONQUERY_KEYS.includes(key)) {
if (key === DEFAULT_PERMISSIONQUERY_KEYS[1]) {
;
permissionQueryContent[key] = normalizedPermissionCodes(content[key]);
} else {
;
permissionQueryContent[key] = content[key];
}
}
});
return permissionQueryContent;
}
function usePermissionMatchedByParent(options) {
const { code, ref: vnode, row, useEffect = true } = options;
const PermissionParentNames = ["TaPermissionQuery", "TaPermissionDataQuery"];
function filterVNodeProps(_vnode) {
const filterVNode = unref(_vnode);
const tableProVNode = (filterVNode.instance ? filterVNode.instance._ || filterVNode.instance.$ : {}).parent;
return tableProVNode ?? filterVNode.parent ?? filterVNode.__vueParentComponent ?? filterVNode.$?.parent ?? null;
}
function findPermissionParent(__vnode) {
const _vnode = unref(__vnode);
if (!unref(_vnode))
return false;
if (_vnode.type && _vnode.type.name && PermissionParentNames.includes(_vnode.type.name) && _vnode.exposed && _vnode.exposed.permissionContext && _vnode.exposed.permissionContext.permission) {
if (Array.isArray(_vnode.exposed.permissionContext.permission)) {
return findPermissionParent(filterVNodeProps(_vnode));
} else {
const permissionCodes = _vnode.exposed.permissionContext.permission.permissionCodes || _vnode.exposed.permissionContext.permission.RECORD_PREMISSION.permissionCodes;
if (permissionCodes) {
if (Array.isArray(permissionCodes)) {
if (permissionCodes.includes(code)) {
return !!permissionCodes.includes(code);
} else {
return findPermissionParent(filterVNodeProps(_vnode));
}
} else if (Reflect.has(permissionCodes, code)) {
return !!permissionCodes[code];
} else {
return findPermissionParent(filterVNodeProps(_vnode));
}
} else {
return findPermissionParent(filterVNodeProps(_vnode));
}
}
} else {
return findPermissionParent(filterVNodeProps(_vnode));
}
}
function findRowPermission(row2) {
if (row2 && row2.RECORD_PREMISSION && row2.RECORD_PREMISSION.permissionCodes) {
return row2.RECORD_PREMISSION.permissionCodes.includes(code);
}
return false;
}
function handler() {
if (!(code && unref(vnode))) {
return false;
}
const findRowPermissionResult = !!row && findRowPermission(row);
if (findRowPermissionResult) {
return true;
} else {
const findPermissionParentResult = findPermissionParent(filterVNodeProps(vnode));
if (findPermissionParentResult) {
return true;
} else {
const resourceMapPermissions = useGlobalConfig("permissions");
return resourceMapPermissions.value?.[code]?.ifShow ?? false;
}
}
}
return useEffect ? computed(() => handler()) : handler();
}
export { createId, createNS, normalizedPermissionCodes, normalizedPermissionQueryContent, usePermissionMatchedByParent };
//# sourceMappingURL=utils2.mjs.map