diff --git a/src/api/system/log.ts b/src/api/system/log.ts new file mode 100644 index 0000000..2321b7b --- /dev/null +++ b/src/api/system/log.ts @@ -0,0 +1,124 @@ +import request from "@/utils/request"; + +const LOG_BASE_URL = "/api/v1/logs"; + +class LogAPI { + /** + * 获取日志分页列表 + * + * @param queryParams 查询参数 + */ + static getPage(queryParams: LogPageQuery) { + return request>({ + url: `${LOG_BASE_URL}/page`, + method: "GET", + data: queryParams, + }); + } + + /** + * 获取访问趋势 + * + * @param queryParams + * @returns + */ + static getVisitTrend(queryParams: VisitTrendQuery) { + return request({ + url: `${LOG_BASE_URL}/visit-trend`, + method: "GET", + data: queryParams, + }); + } + + /** + * 获取访问趋势 + * + * @param queryParams + * @returns + */ + static getVisitStats() { + return request({ + url: `${LOG_BASE_URL}/visit-stats`, + method: "GET", + }); + } +} + +export default LogAPI; + +/** + * 日志分页查询对象 + */ +export interface LogPageQuery extends PageQuery { + /** 搜索关键字 */ + keywords: string; + /** 操作时间 */ + createTime: [string, string]; +} + +/** + * 系统日志分页VO + */ +export interface LogPageVO { + /** 主键 */ + id?: number; + /** 日志模块 */ + module?: string; + /** 日志内容 */ + content?: string; + /** 请求路径 */ + requestUri?: string; + /** 请求方法 */ + method?: string; + /** IP 地址 */ + ip?: string; + /** 地区 */ + region?: string; + /** 浏览器 */ + browser?: string; + /** 终端系统 */ + os?: string; + /** 执行时间(毫秒) */ + executionTime?: number; + /** 操作人 */ + operator?: string; + /** 操作时间 */ + createTime?: string; +} + +/** 访问趋势视图对象 */ +export interface VisitTrendVO { + /** 日期列表 */ + dates: string[]; + /** 浏览量(PV) */ + pvList: number[]; + /** 访客数(UV) */ + uvList: number[]; + /** IP数 */ + ipList: number[]; +} + +/** 访问趋势查询参数 */ +export interface VisitTrendQuery { + /** 开始日期 */ + startDate: string; + /** 结束日期 */ + endDate: string; +} + +/** 访问统计 */ +export interface VisitStatsVO { + /** 标题 */ + title: string; + /** 类型 */ + type: "pv" | "uv" | "ip"; + + /** 今日访问量 */ + todayCount: number; + /** 总访问量 */ + totalCount: number; + /** 同比增长率(相对于昨天同一时间段的增长率) */ + growthRate: number; + + totalCountOutput: number; +} diff --git a/src/pages.json b/src/pages.json index c09cd1a..94219a7 100644 --- a/src/pages.json +++ b/src/pages.json @@ -48,6 +48,12 @@ "style": { "navigationBarTitleText": "编辑用户" } + }, + { + "path": "pages/work/log/index", + "style": { + "navigationBarTitleText": "日志管理" + } } ], "globalStyle": { diff --git a/src/pages/work/index.vue b/src/pages/work/index.vue index 3756da9..ab6fe46 100644 --- a/src/pages/work/index.vue +++ b/src/pages/work/index.vue @@ -72,6 +72,7 @@ const gridList = reactive([ { icon: "/static/icons/log.png", title: "日志管理", + url: "/pages/work/log/index", }, { icon: "/static/icons/performance.png", diff --git a/src/pages/work/log/index.vue b/src/pages/work/log/index.vue new file mode 100644 index 0000000..6d3d9be --- /dev/null +++ b/src/pages/work/log/index.vue @@ -0,0 +1,269 @@ + + + +