import request from '@/utils/request'; export interface Menu { id?: number; parentId?: number; name: string; code: string; type?: 'MENU' | 'BUTTON'; path?: string; component?: string; icon?: string; sort?: number; sortOrder?: number; status?: string; description?: string; children?: Menu[]; createdAt?: string; updatedAt?: string; } export interface MenuTree extends Menu { children?: MenuTree[]; } export interface MenuQueryParams { name?: string; code?: string; type?: 'MENU' | 'BUTTON'; status?: 'ENABLED' | 'DISABLED'; current?: number; size?: number; } export interface MenuPageResponse { records: Menu[]; total: number; current: number; size: number; } export const menuApi = { getMenus: (params?: MenuQueryParams) => { return request.get('/sys/menu', { params }); }, getMenuTree: () => { return request.get('/sys/menu/tree'); }, getMenuById: (id: number) => { return request.get(`/sys/menu/${id}`); }, createMenu: (data: Menu) => { return request.post('/sys/menu', data); }, updateMenu: (id: number, data: Menu) => { return request.put(`/sys/menu/${id}`, data); }, deleteMenu: (id: number) => { return request.delete(`/sys/menu/${id}`); }, getMenusByRole: (roleId: number) => { return request.get(`/sys/role/${roleId}/menus`); }, assignMenusToRole: (roleId: number, menuIds: number[]) => { return request.post(`/sys/role/${roleId}/menus`, { menuIds }); }, assignMenuToRole: (data: { roleId: number; menuIds: number[] }) => { return request.post('/sys/menu/assign', data); }, getMenusByUserId: (userId: number) => { return request.get(`/sys/menu/user/${userId}`); }, removeMenuFromRole: (roleId: number, menuId: number) => { return request.delete(`/sys/menu/role/${roleId}/menu/${menuId}`); } };