import { storeToRefs } from 'pinia' import { useUserInfo } from '/@/stores/userInfo' import { judementSameArr } from '/@/utils/arrayOperation' /** * 权限 composable:用于「无权限即无节点」场景(v-if + hasAuth),替代 v-auth * 多页面复用,保证响应式(权限变更后模板会更新) * * @example * const { hasAuth, hasAuths, hasAuthAll } = useAuth() * // 模板:v-if="hasAuth('xxx')" v-if="hasAuths(['a','b'])" v-if="hasAuthAll(['a','b'])" */ export function useAuth() { const { userInfos } = storeToRefs(useUserInfo()) const list = () => userInfos.value?.authBtnList ?? [] /** 单个权限:有该权限返回 true */ const hasAuth = (code: string) => list().includes(code) /** 多个权限满足其一即返回 true */ const hasAuths = (codes: string[]) => { const btnList = list() return codes.some((c) => btnList.includes(c)) } /** 多个权限全部满足才返回 true */ const hasAuthAll = (codes: string[]) => judementSameArr(codes, list()) return { hasAuth, hasAuths, hasAuthAll } }