import { apiJson } from '@/lib/api/client'; import { API_V1 } from '@/lib/api/paths'; import type { DeptNode, IamDept } from '@/lib/api/types/dept'; import type { MenuNode } from '@/lib/api/types/menu'; import type { IamRole } from '@/lib/api/types/role'; import type { IamTenant } from '@/lib/api/types/tenant'; import type { IamUser } from '@/lib/api/types/user'; const B = `${API_V1}/iam`; /** 列表响应信封 */ type ListEnvelope = { items: T[]; total: number }; /** 租户 */ export const iamTenant = { create: (body: Partial) => apiJson(`${B}/tenant/create`, { method: 'POST', body: JSON.stringify(body) }), update: (id: string, body: Partial) => apiJson(`${B}/tenant/update/${encodeURIComponent(id)}`, { method: 'PUT', body: JSON.stringify(body), }), deleteBatch: (ids: string[]) => apiJson(`${B}/tenant/delete-batch`, { method: 'DELETE', body: JSON.stringify(ids) }), get: (id: string) => apiJson(`${B}/tenant/get/${encodeURIComponent(id)}`), list: (query?: Record) => { const q = query ? new URLSearchParams(query).toString() : 'page=1&page_size=200'; return apiJson>(`${B}/tenant/list?${q}`); }, }; /** 部门 */ export const iamDept = { create: (body: Partial) => apiJson(`${B}/dept/create`, { method: 'POST', body: JSON.stringify(body) }), update: (id: string, body: Partial) => apiJson(`${B}/dept/update/${encodeURIComponent(id)}`, { method: 'PUT', body: JSON.stringify(body), }), deleteBatch: (ids: string[]) => apiJson(`${B}/dept/delete-batch`, { method: 'DELETE', body: JSON.stringify(ids) }), get: (id: string) => apiJson(`${B}/dept/get/${encodeURIComponent(id)}`), tree: () => apiJson(`${B}/dept/tree`), }; /** 角色 */ export const iamRole = { create: (body: Partial) => apiJson(`${B}/role/create`, { method: 'POST', body: JSON.stringify(body) }), update: (id: string, body: Partial) => apiJson(`${B}/role/update/${encodeURIComponent(id)}`, { method: 'PUT', body: JSON.stringify(body), }), deleteBatch: (ids: string[]) => apiJson(`${B}/role/delete-batch`, { method: 'DELETE', body: JSON.stringify(ids) }), get: (id: string) => apiJson(`${B}/role/get/${encodeURIComponent(id)}`), list: (query?: Record) => { const q = query ? new URLSearchParams(query).toString() : 'page=1&page_size=50'; return apiJson>(`${B}/role/list?${q}`); }, }; /** 用户 */ export const iamUser = { create: (body: Partial) => apiJson(`${B}/user/create`, { method: 'POST', body: JSON.stringify(body) }), update: (id: string, body: Partial) => apiJson(`${B}/user/update/${encodeURIComponent(id)}`, { method: 'PUT', body: JSON.stringify(body), }), deleteBatch: (ids: string[]) => apiJson(`${B}/user/delete-batch`, { method: 'DELETE', body: JSON.stringify(ids) }), get: (id: string) => apiJson(`${B}/user/get/${encodeURIComponent(id)}`), list: (query?: Record) => { const q = query ? new URLSearchParams(query).toString() : 'page=1&page_size=20'; return apiJson>(`${B}/user/list?${q}`); }, }; /** 菜单 */ export const iamMenu = { create: (body: Partial) => apiJson(`${B}/menu/create`, { method: 'POST', body: JSON.stringify(body) }), update: (id: string, body: Partial) => apiJson(`${B}/menu/update/${encodeURIComponent(id)}`, { method: 'PUT', body: JSON.stringify(body), }), deleteBatch: (ids: string[]) => apiJson(`${B}/menu/delete-batch`, { method: 'DELETE', body: JSON.stringify(ids) }), get: (id: string) => apiJson(`${B}/menu/get/${encodeURIComponent(id)}`), tree: () => apiJson(`${B}/menu/tree`), /** 当前用户可见导航树(需 Bearer,后端从 token 解析 user_id) */ nav: () => apiJson(`${B}/menu/nav`), perms: () => apiJson<{ perms: string[] }>(`${B}/menu/perms`), };