From d5fdf626fe6e5c4e5411eea46bb5215d605c2cb6 Mon Sep 17 00:00:00 2001 From: jacy-dukang Date: Mon, 6 Jul 2026 21:11:23 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=89=E6=88=BF=E6=97=A5=E5=BF=97=E8=AF=A6?= =?UTF-8?q?=E6=83=85=E8=A1=A5=E5=85=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/pages/ThirdPartyLogsPage.tsx | 159 +++++++++++++++--- 1 file changed, 138 insertions(+), 21 deletions(-) diff --git a/apps/admin-web/src/pages/ThirdPartyLogsPage.tsx b/apps/admin-web/src/pages/ThirdPartyLogsPage.tsx index 463fe72..7f2c77b 100644 --- a/apps/admin-web/src/pages/ThirdPartyLogsPage.tsx +++ b/apps/admin-web/src/pages/ThirdPartyLogsPage.tsx @@ -1,5 +1,5 @@ import { useState } from 'react'; -import { Button, Descriptions, Drawer, Form, Input, Table, Typography } from 'antd'; +import { Button, Descriptions, Drawer, Form, Input, Select, Table, Tag, Typography } from 'antd'; import type { ColumnsType } from 'antd/es/table'; import { request } from '../lib/api'; import { fmtTime } from '../lib/constants'; @@ -9,13 +9,48 @@ type Row = { id: string; provider: string; scene: string; - refType: string; - refId: string; - externalNo?: string; + refType: string | null; + refId: string | null; + requestUrl?: string | null; + requestBody?: Record | null; + responseBody?: Record | null; + externalNo?: string | null; + amount?: string | null; status: string; + errorMessage?: string | null; createdAt: string; }; +const PROVIDER_OPTIONS = [ + { value: 'WECHAT_AUTH', label: 'WECHAT_AUTH' }, + { value: 'WECHAT_PAY', label: 'WECHAT_PAY' }, + { value: 'WECHAT_MAP', label: 'WECHAT_MAP' }, + { value: 'ALIYUN_SMS', label: 'ALIYUN_SMS' }, + { value: 'MOCK_SMS', label: 'MOCK_SMS' }, + { value: 'XIAOFEIXIA', label: 'XIAOFEIXIA' }, +]; + +const STATUS_COLOR: Record = { + SUCCESS: 'success', + FAILED: 'error', + PENDING: 'processing', +}; + +function summarizeJson(json: Record | null | undefined) { + if (!json || Object.keys(json).length === 0) return '—'; + const text = JSON.stringify(json); + return text.length > 60 ? `${text.slice(0, 60)}…` : text; +} + +function JsonBlock({ value }: { value: unknown }) { + if (value == null) return ; + return ( +
+      {JSON.stringify(value, null, 2)}
+    
+ ); +} + export default function ThirdPartyLogsPage() { const [filters, setFilters] = useState>({}); const { data, loading, page, pageSize, setPage, setPageSize } = useAdminList( @@ -23,6 +58,7 @@ export default function ThirdPartyLogsPage() { () => { const qs = new URLSearchParams(); if (filters.provider) qs.set('provider', filters.provider); + if (filters.scene) qs.set('scene', filters.scene); if (filters.refId) qs.set('refId', filters.refId); return qs; }, @@ -32,19 +68,46 @@ export default function ThirdPartyLogsPage() { const [drawerOpen, setDrawerOpen] = useState(false); const columns: ColumnsType = [ + { title: '时间', dataIndex: 'createdAt', width: 160, render: fmtTime }, { title: 'Provider', dataIndex: 'provider', width: 120 }, { title: '场景', dataIndex: 'scene', width: 120 }, - { title: '关联', width: 140, render: (_, r) => `${r.refType}#${r.refId}` }, - { title: '外部单号', dataIndex: 'externalNo', width: 180 }, - { title: '状态', dataIndex: 'status', width: 90 }, - { title: '时间', dataIndex: 'createdAt', width: 160, render: fmtTime }, { - title: '操作', width: 80, + title: '关联', + width: 120, + render: (_, r) => (r.refType && r.refId ? `${r.refType}#${r.refId}` : '—'), + }, + { + title: '状态', + dataIndex: 'status', + width: 90, + render: (v: string) => {v}, + }, + { + title: '错误信息', + dataIndex: 'errorMessage', + ellipsis: true, + render: (v: string | null | undefined) => v || '—', + }, + { + title: '请求摘要', + ellipsis: true, + render: (_, r) => summarizeJson(r.requestBody), + }, + { title: '外部单号', dataIndex: 'externalNo', width: 140, render: (v) => v || '—' }, + { + title: '操作', + width: 80, render: (_, row) => ( - + ), }, ]; @@ -52,21 +115,75 @@ export default function ThirdPartyLogsPage() { return (
第三方日志 -
{ setFilters(v); setPage(1); }}> - - - + { + setFilters(v); + setPage(1); + }} + > + + + + + + +
- { setPage(p); setPageSize(ps); } }} /> - setDrawerOpen(false)}> +
{ + setPage(p); + setPageSize(ps); + }, + }} + /> + setDrawerOpen(false)}> {detail && ( + {String(detail.id)} {String(detail.provider)} {String(detail.scene)} - {String(detail.status)} + + {String(detail.status)} + + + {detail.refType ? `${String(detail.refType)}#${String(detail.refId)}` : '—'} + {String(detail.externalNo ?? '—')} + {detail.amount != null ? String(detail.amount) : '—'} + {String(detail.requestUrl ?? '—')} + + {detail.errorMessage ? ( + + {String(detail.errorMessage)} + + ) : ( + '—' + )} + {fmtTime(String(detail.createdAt))} + + + + + + )}