diff --git a/apps/frontend/src/styles/admin-config-pages.css b/apps/frontend/src/styles/admin-config-pages.css new file mode 100644 index 00000000..08727357 --- /dev/null +++ b/apps/frontend/src/styles/admin-config-pages.css @@ -0,0 +1,282 @@ +/* ============================================================ + 管理员配置页面共享结构样式 + 引入: AdminFulfillmentBindings.css, AdminKuaishouCloudFulfillment.css + 各页面自行覆盖颜色、圆角、主题属性 + ============================================================ */ + +/* ---------- 面板头部 & 分区标题 ---------- */ +.panel-header, +.section-title-row { + display: flex; + justify-content: space-between; + gap: 16px; + align-items: flex-start; +} + +.panel-header { + flex-wrap: wrap; +} + +.panel-header-copy { + min-width: 280px; + flex: 1; +} + +.panel-header h1, +.panel-header-copy h1, +.section-title-row h3 { + margin: 0; +} + +.panel-header p, +.panel-header-copy p, +.section-title-row p { + margin: 6px 0 0; +} + +/* ---------- 头部工具 ---------- */ +.header-tags, +.header-actions, +.section-header-tools, +.section-mini-stats, +.section-action-group { + display: flex; + flex-wrap: wrap; + gap: 8px; + align-items: center; +} + +.header-actions, +.section-header-tools { + justify-content: flex-end; +} + +/* ---------- 卡片容器 ---------- */ +.overview-card, +.table-card, +.empty-block, +.error-copy { + padding: 16px; + background: rgba(255, 255, 255, 0.94); + border: 1px solid rgba(86, 108, 138, 0.1); +} + +.table-card--dense { + padding: 14px 16px 16px; +} + +.overview-card { + display: grid; + gap: 12px; +} + +/* ---------- 概览文件 & 统计 ---------- */ +.overview-file { + display: grid; + gap: 6px; +} + +.overview-file code { + display: inline-flex; + width: 100%; + max-width: 100%; + padding: 8px 12px; + border-radius: 14px; + word-break: break-all; +} + +.overview-stats { + display: grid; + grid-template-columns: repeat(5, minmax(0, 1fr)); + gap: 10px; +} + +.overview-stat { + display: grid; + gap: 4px; + padding: 12px 14px; + background: #f8fafc; + border: 1px solid rgba(148, 163, 184, 0.14); +} + +.overview-stat span { + font-size: var(--text-xs); + font-weight: 700; +} + +.overview-stat strong { + line-height: 1.1; +} + +.overview-notes { + display: flex; + flex-wrap: wrap; + gap: 8px; +} + +/* ---------- 分区工具 ---------- */ +.section-title-row--tight { + align-items: center; +} + +/* ---------- 字段块 ---------- */ +.field-block { + min-width: 0; + display: grid; + gap: 6px; +} + +.field-block span { + font-size: var(--text-xs); + font-weight: 700; +} + +.field-block--action { + align-content: end; +} + +.field-block--action :deep(.el-button) { + width: 100%; +} + +.field-help { + font-size: var(--text-xs); + line-height: 1.5; +} + +/* ---------- 文本输入 ---------- */ +.text-input { + width: 100%; + border-radius: 14px; +} + +/* ---------- 校验 & 错误 ---------- */ +.validation-banner, +.binding-inline-error { + margin: 10px 0 0; + padding: 10px 12px; + border-radius: 14px; + font-weight: 600; +} + +.binding-inline-error { + font-size: var(--text-sm); +} + +/* ---------- 数据表 ---------- */ +.data-table { + width: 100%; + border-collapse: collapse; + margin-top: 12px; +} + +.data-table th, +.data-table td { + text-align: left; + border-bottom: 1px solid rgba(86, 108, 138, 0.08); + vertical-align: top; +} + +.data-table th { + font-size: var(--text-xs); + font-weight: 700; +} + +.cell-stack { + display: grid; + gap: 4px; +} + +.cell-subtle { + font-size: var(--text-xs); +} + +/* ---------- 绑定卡片 ---------- */ +.binding-card { + margin-top: 12px; + padding: 14px; + background: #f8fafc; + border: 1px solid rgba(148, 163, 184, 0.18); +} + +.binding-card--invalid { + border-color: rgba(220, 38, 38, 0.3); + box-shadow: 0 0 0 4px rgba(254, 226, 226, 0.85); +} + +.binding-header { + display: flex; + justify-content: space-between; + gap: 12px; + align-items: flex-start; + margin-bottom: 10px; +} + +.binding-summary { + display: grid; + gap: 4px; +} + +.binding-title-row { + display: flex; + gap: 10px; + align-items: center; + flex-wrap: wrap; +} + +.binding-subtle { + font-size: var(--text-sm); +} + +/* ---------- 状态标签 ---------- */ +.binding-status-chip { + display: inline-flex; + align-items: center; + border-radius: var(--radius-full); + padding: 2px 10px; + background: #fff1f2; + color: #be123c; + font-size: var(--text-xs); + font-weight: 700; +} + +.binding-status-chip--done { + background: #ecfdf3; + color: #027a48; +} + +/* ---------- 折叠 ---------- */ +.collapse-button { + border: 1px solid rgba(86, 108, 138, 0.18); + background: rgba(255, 255, 255, 0.96); + border-radius: var(--radius-full); + padding: 7px 12px; + font: inherit; + cursor: pointer; +} + +.binding-collapsed-preview { + display: grid; + gap: 6px; +} + +/* ---------- 操作栏 ---------- */ +.binding-actions { + display: flex; + justify-content: space-between; + gap: 12px; + align-items: center; +} + +/* ---------- 复选框 ---------- */ +.checkbox-line { + display: inline-flex; + gap: 8px; + align-items: center; +} + +/* ---------- 工具栏提示 ---------- */ +.toolbar-hint { + margin: 10px 0 0; + font-size: var(--text-xs); +} diff --git a/apps/frontend/src/views/admin/AdminFulfillmentBindings.css b/apps/frontend/src/views/admin/AdminFulfillmentBindings.css index a6898ddb..8798215f 100644 --- a/apps/frontend/src/views/admin/AdminFulfillmentBindings.css +++ b/apps/frontend/src/views/admin/AdminFulfillmentBindings.css @@ -1,45 +1,28 @@ +@import '../../styles/admin-config-pages.css'; + +/* ============================================================ + AdminFulfillmentBindings — 绿色主题覆盖 & 页面特有样式 + ============================================================ */ + .admin-panel { display: grid; gap: 12px; } -.panel-header, -.section-title-row { - display: flex; - justify-content: space-between; - gap: 16px; - align-items: flex-start; -} - +/* ---------- 主题:标题文字 ---------- */ .panel-header h1, +.panel-header-copy h1, .section-title-row h3 { - margin: 0; color: var(--text-primary); } .panel-header p, +.panel-header-copy p, .section-title-row p { - margin: 6px 0 0; color: var(--text-secondary); } -.panel-header { - align-items: flex-start; - flex-wrap: wrap; -} - -.panel-header-copy { - min-width: 280px; - flex: 1; -} - -.header-tags { - display: flex; - flex-wrap: wrap; - gap: 8px; - align-items: center; -} - +/* ---------- 主题:标签 chip (绿色) ---------- */ .header-tag, .section-note-chip, .mini-stat-chip, @@ -58,79 +41,7 @@ letter-spacing: 0.04em; } -.header-actions { - display: flex; - gap: 10px; -} - -.overview-card, -.table-card, -.empty-block, -.error-copy { - padding: 16px; - border-radius: var(--radius-xl); - background: rgba(255, 255, 255, 0.94); - border: 1px solid rgba(86, 108, 138, 0.1); -} - -.table-card--dense { - padding: 14px 16px 16px; -} - -.overview-card { - display: grid; - gap: 12px; -} - -.overview-file { - display: grid; - gap: 6px; -} - -.overview-file code { - display: inline-flex; - width: 100%; - max-width: 100%; - padding: 8px 12px; - border-radius: 14px; - background: rgba(15, 23, 42, 0.05); - color: var(--text-primary); - word-break: break-all; -} - -.overview-stats { - display: grid; - grid-template-columns: repeat(5, minmax(0, 1fr)); - gap: 10px; -} - -.overview-stat { - display: grid; - gap: 4px; - padding: 12px 14px; - border-radius: var(--radius-lg); - background: #f8fafc; - border: 1px solid rgba(148, 163, 184, 0.14); -} - -.overview-stat span { - color: var(--text-secondary); - font-size: var(--text-xs); - font-weight: 700; -} - -.overview-stat strong { - color: var(--text-primary); - font-size: 22px; - line-height: 1.1; -} - -.overview-notes { - display: flex; - flex-wrap: wrap; - gap: 8px; -} - +/* ---------- 主题:概览标签 ---------- */ .overview-note { display: inline-flex; align-items: center; @@ -143,25 +54,39 @@ font-weight: 600; } -.section-title-row--tight { - align-items: center; +/* ---------- 主题覆写:header-actions 间距 ---------- */ +.header-actions { + gap: 10px; } -.section-header-tools { - display: flex; - flex-wrap: wrap; - gap: 12px; - justify-content: flex-end; - align-items: center; +/* ---------- 主题覆写:卡片圆角 ---------- */ +.overview-card, +.table-card, +.empty-block, +.error-copy { + border-radius: var(--radius-xl); } -.section-mini-stats, -.section-action-group { - display: flex; - flex-wrap: wrap; - gap: 8px; +.overview-file code { + background: rgba(15, 23, 42, 0.05); + color: var(--text-primary); } +/* ---------- 主题覆写:概览统计 ---------- */ +.overview-stat { + border-radius: var(--radius-lg); +} + +.overview-stat span { + color: var(--text-secondary); +} + +.overview-stat strong { + color: var(--text-primary); + font-size: 22px; +} + +/* ---------- 查询工具栏 (本页特有) ---------- */ .lookup-toolbar, .lookup-summary { display: grid; @@ -173,16 +98,6 @@ align-items: end; } -.field-block--action :deep(.el-button) { - width: 100%; -} - -.toolbar-hint { - margin: 10px 0 0; - color: var(--text-secondary); - font-size: var(--text-xs); -} - .lookup-summary { margin-top: 14px; grid-template-columns: repeat(3, minmax(0, 1fr)); @@ -201,120 +116,23 @@ color: var(--text-primary); } -.binding-card { - margin-top: 12px; - padding: 14px; - border-radius: var(--radius-lg); - background: #f8fafc; - border: 1px solid rgba(148, 163, 184, 0.18); -} - -.binding-card--invalid { - border-color: rgba(220, 38, 38, 0.3); - box-shadow: 0 0 0 4px rgba(254, 226, 226, 0.85); -} - -.binding-header { - display: flex; - justify-content: space-between; - gap: 12px; - align-items: flex-start; - margin-bottom: 10px; -} - -.binding-summary { - display: grid; - gap: 4px; -} - -.binding-title-row { - display: flex; - gap: 10px; - align-items: center; - flex-wrap: wrap; - color: var(--text-primary); -} - -.binding-subtle { - color: var(--text-secondary); - font-size: var(--text-sm); -} - -.binding-status-chip { - display: inline-flex; - align-items: center; - border-radius: var(--radius-full); - padding: 2px 10px; - background: #fff1f2; - color: #be123c; - font-size: var(--text-xs); - font-weight: 700; -} - -.binding-status-chip--done { - background: #ecfdf3; - color: #027a48; -} - -.collapse-button { - border: 1px solid rgba(86, 108, 138, 0.18); - background: rgba(255, 255, 255, 0.96); - color: var(--text-primary); - border-radius: var(--radius-full); - padding: 7px 12px; - font: inherit; - cursor: pointer; -} - -.binding-collapsed-preview { - display: grid; - gap: 6px; - color: var(--text-secondary); - font-size: var(--text-sm); -} - -.binding-grid { - display: grid; - grid-template-columns: repeat(2, minmax(0, 1fr)); - gap: 10px 12px; -} - -.validation-banner { - margin: 12px 0 0; - padding: 10px 12px; - border-radius: 14px; - background: #fff4f2; - border: 1px solid rgba(244, 63, 94, 0.18); - color: var(--color-danger); - font-weight: 600; -} - -.field-block { - display: grid; - gap: 6px; -} - +/* ---------- 主题覆写:字段块 ---------- */ .field-block span { color: var(--text-secondary); - font-size: var(--text-xs); - font-weight: 700; } .field-help { color: var(--text-secondary); - font-size: var(--text-xs); - line-height: 1.5; } .field-wide { grid-column: 1 / -1; } +/* ---------- 主题覆写:文本输入 ---------- */ .text-input { - width: 100%; min-height: 40px; padding: 0 12px; - border-radius: 14px; border: 1px solid rgba(86, 108, 138, 0.18); background: rgba(255, 255, 255, 0.96); } @@ -335,56 +153,15 @@ background: rgba(148, 163, 184, 0.08); } -.binding-inline-error { - margin: 10px 0 0; +/* ---------- 主题覆写:校验/错误/空状态 ---------- */ +.validation-banner { + background: #fff4f2; + border: 1px solid rgba(244, 63, 94, 0.18); color: var(--color-danger); - font-size: var(--text-sm); - font-weight: 600; } -.binding-actions { - margin-top: 10px; - display: flex; - justify-content: space-between; - gap: 12px; - align-items: center; -} - -.checkbox-line { - display: inline-flex; - gap: 8px; - align-items: center; - color: var(--text-secondary); -} - -.data-table { - width: 100%; - border-collapse: collapse; - margin-top: 12px; -} - -.data-table th, -.data-table td { - padding: 12px 10px; - text-align: left; - border-bottom: 1px solid rgba(86, 108, 138, 0.08); - color: var(--text-primary); - vertical-align: top; -} - -.data-table th { - color: var(--text-secondary); - font-size: var(--text-sm); -} - -.cell-stack { - display: grid; - gap: 4px; -} - -.cell-subtle { - color: var(--text-secondary); - font-size: var(--text-xs); +.binding-inline-error { + color: var(--color-danger); } .empty-block, @@ -392,10 +169,62 @@ color: var(--text-secondary); } -.error-copy { - color: var(--color-danger); +/* ---------- 主题覆写:表格 ---------- */ +.data-table th, +.data-table td { + padding: 12px 10px; + color: var(--text-primary); } +.data-table th { + color: var(--text-secondary); + font-size: var(--text-sm); +} + +.cell-subtle { + color: var(--text-secondary); +} + +/* ---------- 主题覆写:绑定卡片 ---------- */ +.binding-card { + border-radius: var(--radius-lg); +} + +.binding-title-row { + color: var(--text-primary); +} + +.binding-subtle { + color: var(--text-secondary); +} + +.binding-grid { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 10px 12px; +} + +/* ---------- 主题覆写:折叠/操作/复选框 ---------- */ +.binding-collapsed-preview { + color: var(--text-secondary); + font-size: var(--text-sm); +} + +.collapse-button { + color: var(--text-primary); +} + +.checkbox-line { + color: var(--text-secondary); +} + +.toolbar-hint { + color: var(--text-secondary); +} + +/* ============================================== + 响应式 + ============================================== */ @media (max-width: 900px) { .panel-header, .section-title-row, diff --git a/apps/frontend/src/views/admin/AdminKuaishouCloudFulfillment.css b/apps/frontend/src/views/admin/AdminKuaishouCloudFulfillment.css index e3d1ceef..de70f352 100644 --- a/apps/frontend/src/views/admin/AdminKuaishouCloudFulfillment.css +++ b/apps/frontend/src/views/admin/AdminKuaishouCloudFulfillment.css @@ -1,3 +1,5 @@ +@import '../../styles/admin-config-pages.css'; + .admin-panel { --panel-ink: var(--text-primary); --panel-muted: var(--text-secondary); @@ -651,8 +653,336 @@ } } +/* ============================================================ + 从 admin-config-pages.css 继承的共享结构样式,本页仅覆盖主题 + ============================================================ */ -.panel-header, +/* ---------- 主题覆写:标题颜色 ---------- */ +.panel-header h1, +.panel-header-copy h1, +.section-title-row h3 { + color: #1d3555; +} + +.panel-header p, +.panel-header-copy p, +.section-title-row p { + color: #64748b; + line-height: 1.55; +} + +/* ---------- 主题覆写:chip 标签 (蓝色) ---------- */ +.header-tag, +.mini-stat-chip, +.overview-note { + color: #175cd3; +} + +/* ---------- 主题覆写:卡片圆角 ---------- */ +.overview-card, +.table-card, +.empty-block, +.error-copy { + border-radius: 20px; + box-shadow: none; +} + +.overview-file code { + background: rgba(15, 23, 42, 0.05); + color: #1d3555; +} + +/* ---------- 主题覆写:概览统计 ---------- */ +.overview-stat { + border-radius: 16px; +} + +.overview-stat span { + color: #64748b; +} + +.overview-stat strong { + color: #1d3555; + font-size: var(--text-2xl); +} + +/* ---------- 查询工具栏 (本页特有) ---------- */ +.lookup-toolbar { + display: grid; + grid-template-columns: minmax(180px, 1fr) 110px 130px 180px; + gap: 12px; + align-items: end; +} + +/* ---------- 字段块 ---------- */ +.field-block span { + color: #1d3555; +} + +.field-help, +.toolbar-hint, +.cell-subtle { + color: #64748b; +} + +.field-wide { + grid-column: span 2; +} + +/* ---------- 文本输入 (蓝色聚焦环) ---------- */ +.text-input { + min-height: 36px; + padding: 8px 12px; + border: 1px solid rgba(86, 108, 138, 0.22); + background: #fff; + color: #1d3555; + outline: none; + transition: border-color 0.16s ease, box-shadow 0.16s ease; +} + +.text-input:focus { + border-color: rgba(15, 93, 216, 0.42); + box-shadow: 0 0 0 4px rgba(15, 93, 216, 0.08); +} + +.text-input--readonly, +.text-input:disabled { + background: #f8fafc; + color: #64748b; +} + +.textarea-input { + min-height: 72px; + resize: vertical; +} + +/* ---------- 主题覆写:校验/错误 ---------- */ +.validation-banner, +.binding-inline-error { + background: #fff5f4; + border: 1px solid rgba(180, 35, 24, 0.14); + color: #b42318; + font-size: var(--text-sm); +} + +.error-copy { + color: #b42318; +} + +/* ---------- 主题覆写:表格 ---------- */ +.data-table th, +.data-table td { + padding: 11px 10px; +} + +.data-table th { + color: #64748b; + font-size: var(--text-xs); +} + +.cell-stack strong { + color: #1d3555; +} + +/* ---------- 主题覆写:绑定卡片 ---------- */ +.binding-card { + border-radius: 16px; + box-shadow: none; +} + +.binding-title-row { + color: #1d3555; +} + +.binding-subtle { + color: #64748b; +} + +.binding-grid { + display: grid; + grid-template-columns: repeat(4, minmax(0, 1fr)); + gap: 12px; +} + +.collapse-button { + color: #1d3555; + cursor: pointer; +} + +.binding-collapsed-preview { + padding: 10px 12px; + border-radius: 14px; + background: rgba(255, 255, 255, 0.78); + color: #64748b; + font-size: var(--text-xs); +} + +.checkbox-line { + color: #1d3555; + font-size: var(--text-sm); +} + +.binding-actions { + margin-top: 12px; +} + +.toolbar-hint { + margin: 10px 0 0; +} + +.empty-inline { + padding: 14px; + color: #64748b; + text-align: center; +} + +/* ---------- 映射编辑 (本页特有) ---------- */ +.mapping-editor { + display: grid; + grid-template-columns: minmax(0, 1fr) 74px minmax(0, 1fr); + gap: 12px; + align-items: stretch; +} + +.mapping-panel { + display: grid; + align-content: start; + gap: 12px; + padding: 14px; + border-radius: 16px; + border: 1px solid rgba(148, 163, 184, 0.18); +} + +.mapping-panel--external { + background: rgba(239, 246, 255, 0.72); +} + +.mapping-panel--internal { + background: rgba(255, 255, 255, 0.86); + border-color: rgba(15, 93, 216, 0.16); +} + +.mapping-panel-head { + display: flex; + justify-content: space-between; + gap: 10px; + align-items: baseline; +} + +.mapping-panel-head strong { + color: #1d3555; + font-size: 15px; +} + +.mapping-panel-head span { + color: #64748b; + font-size: var(--text-xs); +} + +.mapping-grid, +.mapping-extra { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 10px 12px; +} + +.mapping-arrow { + display: grid; + place-items: center; + color: #175cd3; + font-size: var(--text-xs); + font-weight: 700; +} + +.mapping-arrow span { + display: inline-flex; + align-items: center; + justify-content: center; + min-height: 30px; + min-width: 54px; + padding: 0 10px; + border-radius: var(--radius-full); + background: rgba(15, 93, 216, 0.08); + border: 1px solid rgba(15, 93, 216, 0.14); +} + +.mapping-extra { + margin-top: 12px; + padding-top: 12px; + border-top: 1px dashed rgba(86, 108, 138, 0.18); +} + +/* ---------- mini-stat-chip 交互态 (本页特有) ---------- */ +.mini-stat-chip--button { + border: 1px solid rgba(15, 93, 216, 0.12); + cursor: pointer; + font: inherit; +} + +.mini-stat-chip--active { + border-color: rgba(15, 93, 216, 0.32); + background: rgba(15, 93, 216, 0.14); +} + +.overview-label { + color: #64748b; + font-size: var(--text-xs); +} + +/* ---------- Element Plus 蓝色主题覆盖 ---------- */ +.admin-panel :deep(.el-button) { + min-height: 34px; + border-radius: var(--radius-full); +} + +.admin-panel :deep(.el-button--primary) { + --el-button-bg-color: #3a91f7; + --el-button-border-color: #3a91f7; + --el-button-hover-bg-color: #0f5dd8; + --el-button-hover-border-color: #0f5dd8; +} + +/* ---------- 响应式 ---------- */ +@media (max-width: 900px) { + .overview-stats, + .lookup-toolbar, + .binding-grid, + .mapping-editor { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + + .mapping-arrow { + display: none; + } + + .field-wide { + grid-column: span 2; + } +} + +@media (max-width: 640px) { + .panel-header, + .section-title-row, + .section-header-tools, + .binding-actions, + .binding-header { + flex-direction: column; + align-items: stretch; + } + + .overview-stats, + .lookup-toolbar, + .binding-grid, + .mapping-editor, + .mapping-grid, + .mapping-extra { + grid-template-columns: 1fr; + } + + .field-wide { + grid-column: auto; + } +} .section-title-row { display: flex; justify-content: space-between; diff --git a/apps/frontend/src/views/admin/AdminMessageDeliveriesView.vue b/apps/frontend/src/views/admin/AdminMessageDeliveriesView.vue index f907dcd1..b3ac3cc7 100644 --- a/apps/frontend/src/views/admin/AdminMessageDeliveriesView.vue +++ b/apps/frontend/src/views/admin/AdminMessageDeliveriesView.vue @@ -71,15 +71,6 @@ function resetFilters() { void loadMessageDeliveries(1) } -function formatResponse(item: AdminMessageDeliveryListItem) { - if (item.responseStatus <= 0 && !item.errorMessage) return '-' - const parts = [] - if (item.responseStatus > 0) parts.push(`HTTP ${item.responseStatus}`) - const msg = String(item.response?.Error_Msg || item.response?.msg || item.response?.message || item.response?.error || '').trim() - if (msg) parts.push(msg) - return parts.join(' · ') || item.errorMessage || '-' -} - onMounted(loadMessageDeliveries) @@ -92,21 +83,24 @@ onMounted(loadMessageDeliveries) - + +
- - - + + + - - - - - -
-
- 消息体、Claim 链接、接口回执和失败原因都已经拆分展示,查问题会更直观。 + + + + +
重置 查询 @@ -115,102 +109,76 @@ onMounted(loadMessageDeliveries) -
- - 当前页成功 - {{ summary.successCount }} - 消息已被平台受理或发送完成 - - - 当前页失败 - {{ summary.failedCount }} - 优先查看失败原因和接口返回 - - - 当前页等待 - {{ summary.pendingCount }} - 等待发送或等待外部回调更新 - +
+ 当前页 + 发送成功 {{ summary.successCount }} + 发送失败 {{ summary.failedCount }} + 等待中 {{ summary.pendingCount }}
- + @@ -228,10 +228,7 @@ onMounted(loadUsers) .filter-control--role, .filter-control--status { width: 128px; } .filter-control--password { width: 210px; } -.users-table-section { - margin-top: var(--space-5); - overflow: visible; -} +.section-card { margin-top: var(--space-4); } .users-table-toolbar { display: flex; align-items: center; diff --git a/apps/frontend/src/views/admin/AdminWebhookEventsView.vue b/apps/frontend/src/views/admin/AdminWebhookEventsView.vue index 571ffd0d..7db431df 100644 --- a/apps/frontend/src/views/admin/AdminWebhookEventsView.vue +++ b/apps/frontend/src/views/admin/AdminWebhookEventsView.vue @@ -90,17 +90,6 @@ function resetFilters() { void loadEvents(1) } -function formatRequestTimestamp(value: string) { - const normalized = String(value || '').trim() - if (!/^\d{10,13}$/.test(normalized)) return normalized || '-' - const epochMs = normalized.length === 13 ? Number(normalized) : Number(normalized) * 1000 - return formatAdminDateTime(new Date(epochMs).toISOString()) -} - -function formatAmount(item: AdminWebhookEventListItem) { - return item.totalAmount ? `${item.totalAmount} ${item.currency}` : '-' -} - function formatVisibilityLabel(value: string) { return value === 'ignored' ? '已忽略' : '重要' } @@ -117,23 +106,26 @@ onMounted(loadEvents) - + +
- - - + + + - + - - - - -
-
- Webhook 事件已拆成来源、摘要、订单、验签、请求来源几个信息块,排查会更直观。 + + + +
重置 查询 @@ -142,134 +134,89 @@ onMounted(loadEvents) -
- - 当前页处理成功 - {{ summary.processedCount }} - 已通过处理链路,通常无需人工介入 - - - 当前页异常 / 失败 - {{ summary.failedCount }} - 优先查看验签、处理错误和请求来源 - - - 当前页重要事件 - {{ summary.importantCount }} - 仅重要模式下更适合日常排查 - +
+ 当前页 + 处理成功 {{ summary.processedCount }} + 异常/失败 {{ summary.failedCount }} + 重要事件 {{ summary.importantCount }}
- +