import { requestClient } from '#/api/request'; // ---------- 管理员(/api/service/admin/admin) ---------- export interface AdminItem { id: number; username: string; nickname: string; status: number; roleIds: number[]; roleNames: string[]; createdAt: string; } export interface AdminListResp { list: AdminItem[]; total: number; } export function getAdminList(data: { keyword?: string; page: number; size: number; }) { return requestClient.post( '/api/service/admin/admin/list', data, ); } export function createAdmin(data: { nickname: string; password: string; roleIds: number[]; username: string; }) { return requestClient.post<{ id: number }>( '/api/service/admin/admin/create', data, ); } export function updateAdmin( id: number, data: { nickname: string; roleIds: number[]; status: number; }, ) { return requestClient.post(`/api/service/admin/admin/update/${id}`, data); } export function resetAdminPassword(id: number, password: string) { return requestClient.post(`/api/service/admin/admin/resetPwd/${id}`, { password, }); } export function deleteAdmin(id: number) { return requestClient.post(`/api/service/admin/admin/delete/${id}`); } // ---------- 角色(/api/service/admin/system/role) ---------- export interface RoleItem { id: number; code: string; name: string; status: number; menuIds: number[]; createdAt: string; } export interface RoleListResp { list: RoleItem[]; total: number; } export function getRoleList(data: { keyword?: string; page: number; size: number; }) { return requestClient.post( '/api/service/admin/system/role/list', data, ); } export function createRole(data: { code: string; menuIds: number[]; name: string; status: number; }) { return requestClient.post<{ id: number }>( '/api/service/admin/system/role/create', data, ); } export function updateRole( id: number, data: { menuIds: number[]; name: string; status: number; }, ) { return requestClient.post( `/api/service/admin/system/role/update/${id}`, data, ); } export function deleteRole(id: number) { return requestClient.post(`/api/service/admin/system/role/delete/${id}`); } // ---------- 菜单(/api/service/admin/system/menu) ---------- export interface MenuNode { id: number; parentId: number; name: string; icon: string; type: number; path: string; component: string; permission: string; sort: number; status: number; hidden: boolean; children?: MenuNode[]; } export function getMenuTree() { return requestClient.post<{ tree: MenuNode[] }>( '/api/service/admin/system/menu/tree', ); } export function createMenu(data: Partial) { return requestClient.post<{ id: number }>( '/api/service/admin/system/menu/create', data, ); } export function updateMenu(id: number, data: Partial) { return requestClient.post( `/api/service/admin/system/menu/update/${id}`, data, ); } export function deleteMenu(id: number) { return requestClient.post(`/api/service/admin/system/menu/delete/${id}`); } // ---------- 操作日志(/api/service/admin/system/log) ---------- // 注意:接口规范为全部 POST、URL 不带参数、入参走 body。 export interface LogItem { id: number; adminId: number; adminUsername: string; // 操作账号(写入时冗余落库,免 JOIN) permission: string; // 权限标识 method: string; // HTTP 方法 path: string; // 请求路径 ip: string; // 来源 IP ipLocation: string; // IP 归属地(如「中国 江苏省 苏州市 电信」) param: string; // 请求参数(已脱敏) durationMs: number; // 耗时(ms) statusCode: number; // HTTP 状态码 errorMessage: string; // 失败原因(响应非 2xx 时填充) userAgent: string; // 浏览器 UA createdAt: string; // 操作时间 } export interface LogListResp { list: LogItem[]; total: number; } // 操作日志分页查询参数;覆盖时间、账号、IP、归属地、方法、结果、耗时、排序等维度。 export interface LogQuery { page: number; size: number; adminId?: number; // 按管理员ID精确过滤 username?: string; // 按账号模糊过滤 ip?: string; // 按来源 IP 模糊过滤 ipLocation?: string; // 按 IP 归属地模糊过滤 method?: string; // 按 HTTP 方法精确过滤(GET/POST/PUT/DELETE) status?: number; // 0 全部 / 1 成功(2xx) / 2 失败(非2xx) keyword?: string; // 权限码/路径/IP 关键字 startTime?: string; // 起始时间 yyyy-MM-dd HH:mm:ss endTime?: string; // 结束时间 yyyy-MM-dd HH:mm:ss minDuration?: number; // 耗时下限(ms),0 不限 maxDuration?: number; // 耗时上限(ms),0 不限 orderBy?: string; // createdAt(默认) | durationMs orderDir?: string; // desc(默认) | asc } /** 操作日志分页查询 */ export function getSystemLogList(data: LogQuery) { return requestClient.post('/api/service/admin/system/log', data); } // ---------- 登录日志(/api/service/admin/system/login-log) ---------- export interface LoginLogItem { id: number; username: string; ip: string; userAgent: string; status: number; // 1 成功 0 失败 failReason: string; createdAt: string; } export interface LoginLogListResp { list: LoginLogItem[]; total: number; } /** 登录日志分页查询(username 匹配账号,status 按结果过滤) */ export function getLoginLogList(data: { page: number; size: number; status?: number; username?: string; }) { return requestClient.post( '/api/service/admin/system/login-log', data, ); }