UNPKG

tav-ui

Version:
102 lines (99 loc) 3.92 kB
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