From d26274d89d377067c1e2648192cffbf89464b361 Mon Sep 17 00:00:00 2001
From: wsj <593216709@qq.com>
Date: Wed, 28 Oct 2026 23:34:32 +0800
Subject: [PATCH] feat: 拆包
---
src/pages/platform/audit-logs/columns.tsx | 172 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 172 insertions(+), 0 deletions(-)
diff --git a/src/pages/platform/audit-logs/columns.tsx b/src/pages/platform/audit-logs/columns.tsx
new file mode 100644
index 0000000..2ee7092
--- /dev/null
+++ b/src/pages/platform/audit-logs/columns.tsx
@@ -0,0 +1,172 @@
+import { Button, Space, Tag } from 'antd';
+import type { ProColumns } from '@ant-design/pro-components';
+import dayjs from 'dayjs';
+import type { AuditLogResultStatus, AuditLogVO } from './types';
+
+/** 业务模块(后端可能扩展,未命中的直接展示原值)。 */
+export const moduleText: Record<string, string> = {
+ EMPLOYEE: '员工',
+ ORG: '组织',
+ ROLE: '角色',
+ CUSTOMER: '客户',
+ FOLLOW_UP: '跟进',
+ TENANT: '租户',
+ SYSTEM: '系统',
+};
+
+/** 操作动作(后端可能扩展,未命中的直接展示原值)。 */
+export const actionText: Record<string, string> = {
+ CREATE: '新增',
+ UPDATE: '修改',
+ DELETE: '删除',
+ IMPORT: '导入',
+ EXPORT: '导出',
+ LOGIN: '登录',
+ LOGOUT: '退出',
+};
+
+export const resultStatusMeta: Record<AuditLogResultStatus, { text: string; color: string }> = {
+ SUCCESS: { text: '成功', color: 'success' },
+ FAILURE: { text: '失败', color: 'error' },
+};
+
+const toValueEnum = (meta: Record<string, string>) =>
+ Object.fromEntries(Object.entries(meta).map(([value, text]) => [value, { text }]));
+
+export const getModuleText = (value?: string) => (value ? moduleText[value] ?? value : '-');
+
+export const getActionText = (value?: string) => (value ? actionText[value] ?? value : '-');
+
+export const createAuditLogColumns = (options: {
+ onDetail: (record: AuditLogVO) => void;
+}): ProColumns<AuditLogVO>[] => [
+ {
+ title: '日志 ID',
+ dataIndex: 'logId',
+ width: 100,
+ search: false,
+ },
+ {
+ title: '操作时间',
+ dataIndex: 'createdAt',
+ valueType: 'dateTime',
+ width: 170,
+ search: false,
+ },
+ {
+ title: '操作人',
+ dataIndex: 'operatorName',
+ width: 140,
+ search: false,
+ render: (_value, record) => (
+ <Space direction="vertical" size={0}>
+ <span>{record.operatorName || '-'}</span>
+ {record.operatorRole && <span className="text-muted">{record.operatorRole}</span>}
+ </Space>
+ ),
+ },
+ {
+ title: '操作人 ID',
+ dataIndex: 'operatorId',
+ valueType: 'digit',
+ hideInTable: true,
+ fieldProps: { placeholder: '请输入操作人 ID' },
+ },
+ {
+ title: '业务模块',
+ dataIndex: 'module',
+ width: 100,
+ valueEnum: toValueEnum(moduleText),
+ render: (_value, record) => getModuleText(record.module),
+ },
+ {
+ title: '操作动作',
+ dataIndex: 'action',
+ width: 100,
+ valueEnum: toValueEnum(actionText),
+ render: (_value, record) => getActionText(record.action),
+ },
+ {
+ title: '操作描述',
+ dataIndex: 'operationDesc',
+ width: 120,
+ search: false,
+ ellipsis: true,
+ render: (_value, record) => record.operationDesc || '-',
+ },
+ {
+ title: '操作对象',
+ dataIndex: 'entityName',
+ width: 180,
+ search: false,
+ ellipsis: true,
+ render: (_value, record) => record.entityName || '-',
+ },
+ {
+ title: '实体类型',
+ dataIndex: 'entityType',
+ hideInTable: true,
+ fieldProps: { placeholder: '请输入实体类型' },
+ },
+ {
+ title: '请求',
+ dataIndex: 'requestPath',
+ width: 220,
+ search: false,
+ ellipsis: true,
+ render: (_value, record) => (
+ <Space size={4}>
+ <Tag bordered={false}>{record.requestMethod || '-'}</Tag>
+ <span>{record.requestPath || '-'}</span>
+ </Space>
+ ),
+ },
+ {
+ title: '来源 IP',
+ dataIndex: 'requestIp',
+ width: 130,
+ search: false,
+ },
+ {
+ title: '结果',
+ dataIndex: 'resultStatus',
+ width: 90,
+ valueEnum: {
+ SUCCESS: { text: resultStatusMeta.SUCCESS.text },
+ FAILURE: { text: resultStatusMeta.FAILURE.text },
+ },
+ render: (_value, record) => {
+ const meta = record.resultStatus ? resultStatusMeta[record.resultStatus] : undefined;
+ return meta ? (
+ <Tag color={meta.color} bordered={false}>
+ {meta.text}
+ </Tag>
+ ) : (
+ '-'
+ );
+ },
+ },
+ {
+ title: '操作',
+ key: 'option',
+ valueType: 'option',
+ width: 80,
+ render: (_value, record) => (
+ <Button type="link" size="small" onClick={() => options.onDetail(record)}>
+ 详情
+ </Button>
+ ),
+ },
+ {
+ title: '操作时间',
+ dataIndex: 'timeRange',
+ valueType: 'dateRange',
+ hideInTable: true,
+ search: {
+ transform: (value: [string, string]) => ({
+ start: value?.[0] ? dayjs(value[0]).format('YYYY-MM-DD 00:00:00') : undefined,
+ end: value?.[1] ? dayjs(value[1]).format('YYYY-MM-DD 23:59:59') : undefined,
+ }),
+ },
+ },
+];
--
Gitblit v1.9.3