92 lines
2.4 KiB
TypeScript
92 lines
2.4 KiB
TypeScript
import { requestGetJson } from '@/shared/api/http'
|
|
|
|
export interface PermissionMenuItem {
|
|
id: number | string
|
|
name?: string
|
|
column_key?: string
|
|
columnKey?: string
|
|
route_path?: string
|
|
routePath?: string
|
|
menu_type?: string
|
|
sort_order?: number
|
|
created_at?: string
|
|
}
|
|
|
|
interface PermissionMenuResponse {
|
|
success: boolean
|
|
data?: PermissionMenuItem[]
|
|
items?: PermissionMenuItem[]
|
|
error?: string
|
|
message?: string
|
|
}
|
|
|
|
function getCurrentUserId() {
|
|
const raw = typeof window === 'undefined' ? '' : window.localStorage.getItem('uid') || ''
|
|
const value = Number(raw)
|
|
if (!Number.isFinite(value) || value <= 0) {
|
|
throw new Error('未获取到用户ID')
|
|
}
|
|
return value
|
|
}
|
|
|
|
function getAppPermissionCacheKey(uid: number) {
|
|
return `app_column_permissions:${String(uid)}`
|
|
}
|
|
|
|
function getAuthToken() {
|
|
return typeof window === 'undefined' ? '' : window.localStorage.getItem('aiimage_auth_token') || ''
|
|
}
|
|
|
|
function normalizeColumnKeys(items: PermissionMenuItem[] | undefined) {
|
|
const keys = new Set<string>()
|
|
for (const item of items || []) {
|
|
for (const value of [item.column_key, item.columnKey, item.route_path, item.routePath]) {
|
|
const key = String(value || '').trim().toLowerCase()
|
|
if (key) {
|
|
keys.add(key)
|
|
}
|
|
}
|
|
}
|
|
return Array.from(keys)
|
|
}
|
|
|
|
export async function getCurrentUserAppColumnKeys() {
|
|
const uid = getCurrentUserId()
|
|
const cacheKey = getAppPermissionCacheKey(uid)
|
|
|
|
try {
|
|
const cachedItems = JSON.parse(window.localStorage.getItem(cacheKey) || 'null') as PermissionMenuItem[] | null
|
|
if (Array.isArray(cachedItems)) {
|
|
const cachedKeys = normalizeColumnKeys(cachedItems)
|
|
if (cachedKeys.length) {
|
|
return cachedKeys
|
|
}
|
|
}
|
|
} catch (_error) {}
|
|
|
|
const headers: Record<string, string> = {}
|
|
const token = getAuthToken()
|
|
if (token) {
|
|
headers.Authorization = `Bearer ${token}`
|
|
}
|
|
|
|
const res = await requestGetJson<PermissionMenuResponse>(
|
|
`/newApi/api/admin/permission-users/${encodeURIComponent(String(uid))}/column-permissions`,
|
|
{
|
|
params: { menuType: 'app' },
|
|
headers,
|
|
},
|
|
)
|
|
|
|
if (!res.success) {
|
|
throw new Error(res.error || res.message || '获取菜单权限失败')
|
|
}
|
|
|
|
const items = res.data || res.items || []
|
|
try {
|
|
window.localStorage.setItem(cacheKey, JSON.stringify(items))
|
|
} catch (_error) {}
|
|
|
|
return normalizeColumnKeys(items)
|
|
}
|