import request from '@/utils/request' export interface DeptItem { id: number parentId: number deptName: string orderNum: number leader: string phone: string email: string status: number createdAt: string updatedAt: string children?: DeptItem[] } export interface CreateDeptRequest { parentId?: number deptName: string orderNum?: number leader?: string phone?: string email?: string status?: number } export interface UpdateDeptRequest { parentId?: number deptName?: string orderNum?: number leader?: string phone?: string email?: string status?: number } function buildTree(list: DeptItem[]): DeptItem[] { const map = new Map() const roots: DeptItem[] = [] for (const item of list) { map.set(item.id, { ...item, children: [] }) } for (const item of list) { const node = map.get(item.id)! if (item.parentId === 0 || !map.has(item.parentId)) { roots.push(node) } else { const parent = map.get(item.parentId) parent?.children?.push(node) } } return roots } export const deptApi = { getAll: async (): Promise => { const res = await request.get('/depts') const list = Array.isArray(res) ? res : [] return buildTree(list) }, getById: async (id: number): Promise => { const res = await request.get(`/depts/${id}`) return res as unknown as DeptItem }, create: (data: CreateDeptRequest) => request.post('/depts', data), update: (id: number, data: UpdateDeptRequest) => request.put(`/depts/${id}`, data), delete: (id: number) => request.delete(`/depts/${id}`), }