From 3f101ac528395a025af066646392968f3bf0e19e Mon Sep 17 00:00:00 2001 From: sunlei Date: Thu, 4 Jun 2026 13:13:26 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=8E=A5=E5=85=A5=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web-antdv-next/src/api/core/menu.ts | 1 + apps/web-antdv-next/src/api/system/index.ts | 1 + apps/web-antdv-next/src/api/system/log.ts | 71 +++ .../src/locales/langs/en-US/system.json | 26 ++ .../src/locales/langs/zh-CN/system.json | 26 ++ .../src/router/routes/modules/system.ts | 9 + .../src/views/system/log/list.vue | 435 ++++++++++++++++++ 7 files changed, 569 insertions(+) create mode 100644 apps/web-antdv-next/src/api/system/log.ts create mode 100644 apps/web-antdv-next/src/views/system/log/list.vue diff --git a/apps/web-antdv-next/src/api/core/menu.ts b/apps/web-antdv-next/src/api/core/menu.ts index fd3ab92..29859b2 100644 --- a/apps/web-antdv-next/src/api/core/menu.ts +++ b/apps/web-antdv-next/src/api/core/menu.ts @@ -59,6 +59,7 @@ const SUPPORTED_ADMIN_MENU_NAMES = new Set([ 'SystemKtTableDemoCreate', 'SystemKtTableDemoDelete', 'SystemKtTableDemoEdit', + 'SystemLog', 'SystemMenu', 'SystemMenuCreate', 'SystemMenuDelete', diff --git a/apps/web-antdv-next/src/api/system/index.ts b/apps/web-antdv-next/src/api/system/index.ts index 5137978..828ddbb 100644 --- a/apps/web-antdv-next/src/api/system/index.ts +++ b/apps/web-antdv-next/src/api/system/index.ts @@ -1,5 +1,6 @@ export * from './dept'; export * from './dict'; +export * from './log'; export * from './menu'; export * from './role'; export * from './user'; diff --git a/apps/web-antdv-next/src/api/system/log.ts b/apps/web-antdv-next/src/api/system/log.ts new file mode 100644 index 0000000..c798c44 --- /dev/null +++ b/apps/web-antdv-next/src/api/system/log.ts @@ -0,0 +1,71 @@ +import type { Recordable } from '@vben/types'; + +import { requestClient } from '#/api/request'; + +export namespace SystemLogApi { + export type LogLevel = 'critical' | 'debug' | 'error' | 'info' | 'warning'; + + export interface LogItem { + context?: string; + durationMs?: number; + hostname?: string; + id: string; + level: LogLevel | string; + message: string; + method?: string; + path?: string; + raw: string; + requestId?: string; + statusCode?: number; + timestamp: string; + timestampNs: string; + } + + export interface LogSummary { + count: number; + level: LogLevel; + } + + export interface LogStatus { + app: string; + configured: boolean; + env: string; + host?: string; + selector: string; + } + + export interface PageResult { + items: T[]; + total: number; + } +} + +async function getSystemLogList(params: Recordable) { + return requestClient.get>( + '/system/logs', + { params }, + ); +} + +async function getSystemLogSummary(params: Recordable) { + return requestClient.get('/system/logs/summary', { + params, + }); +} + +async function getSystemLogLevels() { + return requestClient.get< + Array<{ label: string; value: SystemLogApi.LogLevel }> + >('/system/logs/levels'); +} + +async function getSystemLogStatus() { + return requestClient.get('/system/logs/status'); +} + +export { + getSystemLogLevels, + getSystemLogList, + getSystemLogStatus, + getSystemLogSummary, +}; diff --git a/apps/web-antdv-next/src/locales/langs/en-US/system.json b/apps/web-antdv-next/src/locales/langs/en-US/system.json index 6ffa373..7a1574f 100644 --- a/apps/web-antdv-next/src/locales/langs/en-US/system.json +++ b/apps/web-antdv-next/src/locales/langs/en-US/system.json @@ -85,6 +85,32 @@ "ktTableDemo": { "title": "Table Demo" }, + "log": { + "app": "App", + "configured": "Loki Connected", + "context": "Context", + "durationMs": "Duration", + "emptyStatus": "Loki query host is not configured", + "env": "Env", + "detail": "Detail", + "host": "Loki Host", + "keyword": "Keyword", + "level": "Level", + "message": "Message", + "method": "Method", + "path": "Path", + "raw": "Raw Log", + "rangeMinutes": "Last N Minutes", + "requestId": "Request ID", + "selector": "Selector", + "statusCode": "Status", + "summary": "Level Summary", + "time": "Time", + "timeRange": "Time Range", + "title": "System Logs", + "total": "Total", + "unconfigured": "Loki Not Configured" + }, "role": { "title": "Role Management", "list": "Role List", diff --git a/apps/web-antdv-next/src/locales/langs/zh-CN/system.json b/apps/web-antdv-next/src/locales/langs/zh-CN/system.json index 9959fef..993f1e6 100644 --- a/apps/web-antdv-next/src/locales/langs/zh-CN/system.json +++ b/apps/web-antdv-next/src/locales/langs/zh-CN/system.json @@ -87,6 +87,32 @@ "ktTableDemo": { "title": "表格演示" }, + "log": { + "app": "应用", + "configured": "Loki 已接入", + "context": "上下文", + "durationMs": "耗时", + "emptyStatus": "未配置 Loki 查询地址", + "env": "环境", + "detail": "详情", + "host": "Loki 地址", + "keyword": "关键字", + "level": "级别", + "message": "消息", + "method": "方法", + "path": "路径", + "raw": "原始日志", + "rangeMinutes": "近 N 分钟", + "requestId": "请求 ID", + "selector": "选择器", + "statusCode": "状态码", + "summary": "级别统计", + "time": "时间", + "timeRange": "时间范围", + "title": "系统日志", + "total": "总量", + "unconfigured": "Loki 未配置" + }, "role": { "title": "角色管理", "list": "角色列表", diff --git a/apps/web-antdv-next/src/router/routes/modules/system.ts b/apps/web-antdv-next/src/router/routes/modules/system.ts index 139f355..22de24e 100644 --- a/apps/web-antdv-next/src/router/routes/modules/system.ts +++ b/apps/web-antdv-next/src/router/routes/modules/system.ts @@ -57,6 +57,15 @@ const routes: RouteRecordRaw[] = [ }, component: () => import('#/views/system/dept/list.vue'), }, + { + path: '/system/logs', + name: 'SystemLog', + meta: { + icon: 'lucide:scroll-text', + title: $t('system.log.title'), + }, + component: () => import('#/views/system/log/list.vue'), + }, { path: '/system/ktTableDemo', name: 'SystemKtTableDemo', diff --git a/apps/web-antdv-next/src/views/system/log/list.vue b/apps/web-antdv-next/src/views/system/log/list.vue new file mode 100644 index 0000000..1e31917 --- /dev/null +++ b/apps/web-antdv-next/src/views/system/log/list.vue @@ -0,0 +1,435 @@ + + + + +