admin.xpcool.com/apps/web-tdesign/src/api/system.ts

227 lines
5.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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<AdminListResp>(
'/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<RoleListResp>(
'/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<MenuNode>) {
return requestClient.post<{ id: number }>(
'/api/service/admin/system/menu/create',
data,
);
}
export function updateMenu(id: number, data: Partial<MenuNode>) {
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<LogListResp>('/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<LoginLogListResp>(
'/api/service/admin/system/login-log',
data,
);
}