From 1259699632ca89e618d2310f765cccdac8f7da33 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sun, 6 Apr 2025 10:23:57 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E5=A2=9E=E5=8A=A0=20loginlog=20?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/api/system/login-log/index.ts | 32 +++++ .../src/views/system/loginlog/data.ts | 116 ++++++++++++++++++ .../src/views/system/loginlog/index.vue | 96 +++++++++++++++ .../views/system/loginlog/modules/detail.vue | 60 +++++++++ .../src/views/system/mail/log/index.vue | 4 +- .../views/system/mail/log/modules/detail.vue | 4 +- .../system/notify/message/modules/detail.vue | 2 +- .../views/system/sms/log/modules/detail.vue | 8 +- 8 files changed, 313 insertions(+), 9 deletions(-) create mode 100644 apps/web-antd/src/api/system/login-log/index.ts create mode 100644 apps/web-antd/src/views/system/loginlog/data.ts create mode 100644 apps/web-antd/src/views/system/loginlog/index.vue create mode 100644 apps/web-antd/src/views/system/loginlog/modules/detail.vue diff --git a/apps/web-antd/src/api/system/login-log/index.ts b/apps/web-antd/src/api/system/login-log/index.ts new file mode 100644 index 000000000..5b1bfdf06 --- /dev/null +++ b/apps/web-antd/src/api/system/login-log/index.ts @@ -0,0 +1,32 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace SystemLoginLogApi { + /** 登录日志信息 */ + export interface SystemLoginLog { + id: number; + logType: number; + traceId: number; + userId: number; + userType: number; + username: string; + result: number; + status: number; + userIp: string; + userAgent: string; + createTime: string; + } +} + +/** 查询登录日志列表 */ +export function getLoginLogPage(params: PageParam) { + return requestClient.get>('/system/login-log/page', + { params } + ); +} + +/** 导出登录日志 */ +export function exportLoginLog(params: any) { + return requestClient.download('/system/login-log/export-excel', { params }); +} diff --git a/apps/web-antd/src/views/system/loginlog/data.ts b/apps/web-antd/src/views/system/loginlog/data.ts new file mode 100644 index 000000000..24599b8fe --- /dev/null +++ b/apps/web-antd/src/views/system/loginlog/data.ts @@ -0,0 +1,116 @@ +import type { VbenFormSchema } from '#/adapter/form'; +import type { OnActionClickFn, VxeTableGridOptions } from '#/adapter/vxe-table'; +import type { SystemLoginLogApi } from '#/api/system/login-log'; + +import { DICT_TYPE } from '#/utils/dict'; +import { getRangePickerDefaultProps } from '#/utils/date'; +import { useAccess } from '@vben/access'; + +const { hasAccessByCodes } = useAccess(); + +/** 列表的搜索表单 */ +export function useGridFormSchema(): VbenFormSchema[] { + return [ + { + fieldName: 'username', + label: '用户名称', + component: 'Input', + componentProps: { + allowClear: true, + placeholder: '请输入用户名称', + }, + }, + { + fieldName: 'userIp', + label: '登录地址', + component: 'Input', + componentProps: { + allowClear: true, + placeholder: '请输入登录地址', + }, + }, + { + fieldName: 'createTime', + label: '登录时间', + component: 'RangePicker', + componentProps: { + ...getRangePickerDefaultProps(), + allowClear: true, + }, + }, + ]; +} + +/** 列表的字段 */ +export function useGridColumns( + onActionClick: OnActionClickFn, +): VxeTableGridOptions['columns'] { + return [ + { + field: 'id', + title: '日志编号', + minWidth: 100, + }, + { + field: 'logType', + title: '操作类型', + minWidth: 120, + cellRender: { + name: 'CellDict', + props: { type: DICT_TYPE.SYSTEM_LOGIN_TYPE }, + }, + }, + { + field: 'username', + title: '用户名称', + minWidth: 180, + }, + { + field: 'userIp', + title: '登录地址', + minWidth: 180, + }, + { + field: 'userAgent', + title: '浏览器', + minWidth: 200, + }, + { + field: 'result', + title: '登录结果', + minWidth: 120, + cellRender: { + name: 'CellDict', + props: { type: DICT_TYPE.SYSTEM_LOGIN_RESULT }, + }, + }, + { + field: 'createTime', + title: '登录日期', + minWidth: 180, + formatter: 'formatDateTime', + }, + { + field: 'operation', + title: '操作', + minWidth: 120, + align: 'center', + fixed: 'right', + cellRender: { + attrs: { + nameField: 'username', + nameTitle: '登录日志', + onClick: onActionClick, + }, + name: 'CellOperation', + options: [ + { + code: 'view', + text: '详情', + show: hasAccessByCodes(['system:login-log:query']), + }, + ], + }, + }, + ]; +} diff --git a/apps/web-antd/src/views/system/loginlog/index.vue b/apps/web-antd/src/views/system/loginlog/index.vue new file mode 100644 index 000000000..4cd37bc44 --- /dev/null +++ b/apps/web-antd/src/views/system/loginlog/index.vue @@ -0,0 +1,96 @@ + + + \ No newline at end of file diff --git a/apps/web-antd/src/views/system/loginlog/modules/detail.vue b/apps/web-antd/src/views/system/loginlog/modules/detail.vue new file mode 100644 index 000000000..9ae8004b6 --- /dev/null +++ b/apps/web-antd/src/views/system/loginlog/modules/detail.vue @@ -0,0 +1,60 @@ + + + diff --git a/apps/web-antd/src/views/system/mail/log/index.vue b/apps/web-antd/src/views/system/mail/log/index.vue index 8db7caa2f..28e9aebd9 100644 --- a/apps/web-antd/src/views/system/mail/log/index.vue +++ b/apps/web-antd/src/views/system/mail/log/index.vue @@ -69,9 +69,9 @@ const [Grid, gridApi] = useVbenVxeGrid({ });