import { defineStore } from 'pinia' import { ref } from 'vue' import request from '@/utils/request' export const usePermissionStore = defineStore('permission', () => { // 存储我能看到的页面代码 (如 ['inbound_buy', ...]) const menuPermissions = ref([]) // 存储我能看到的列代码 (如 ['unit_price', 'sale_price']) const elementPermissions = ref([]) // 初始化加载权限 (登录后调用) const loadPermissions = async () => { try { const res: any = await request({ url: '/v1/auth/my-permissions', method: 'get' }) if (res.code === 200 && res.data) { menuPermissions.value = res.data.menus || [] elementPermissions.value = res.data.elements || [] console.log('权限字典加载完成:', elementPermissions.value.length, '个列权限') } } catch (e) { console.error('加载权限失败', e) // 失败时清空,防止残留 menuPermissions.value = [] elementPermissions.value = [] } } // ★ 核心判断函数:判断当前用户是否拥有某个列/按钮的权限 // page: 页面代码 (预留字段,目前全局唯一code,暂不使用page隔离) // code: 权限标识 (如 'unit_price') const hasColumnPermission = (page: string, code: string) => { // 1. 如果列没有配置 permissionKey,说明是公开列,直接放行 if (!code) return true // 2. 检查权限池里是否有这个 code return elementPermissions.value.includes(code) } return { menuPermissions, elementPermissions, loadPermissions, hasColumnPermission } })