@@ -250,7 +247,7 @@ export function TokenDeleteModal({
showIcon
icon={
}
message={`包含 ${dangerous} 条进行中的 Token`}
- description="使用中/已绑定/发货处理中/绑定错误的 Token 与订单履约相关。删除后它们会从列表和统计中消失,可能导致客服排查困难;请确认这些订单已无需处理,或已经人工接管。"
+ description="使用中/已绑定/绑定错误的 Token 与订单履约相关。删除后它们会从列表和统计中消失,可能导致客服排查困难;请确认这些订单已无需处理,或已经人工接管。"
/>
)}
diff --git a/frontend/src/pages/platformRock/TokenRecycleBinDrawer.tsx b/frontend/src/pages/platformRock/TokenRecycleBinDrawer.tsx
index 8238b32..4768a1f 100644
--- a/frontend/src/pages/platformRock/TokenRecycleBinDrawer.tsx
+++ b/frontend/src/pages/platformRock/TokenRecycleBinDrawer.tsx
@@ -31,7 +31,6 @@ const STATUS_LABELS: Record
= {
available: '可用库存',
using: '使用中',
bound: '已绑定',
- redeeming: '发货处理中',
redeemed: '已发货',
mismatch: '绑定错误',
abnormal: '已上报失效',
@@ -44,7 +43,6 @@ const STATUS_OPTIONS = [
{ value: 'available', label: '可用库存' },
{ value: 'using', label: '使用中' },
{ value: 'bound', label: '已绑定' },
- { value: 'redeeming', label: '发货处理中' },
{ value: 'redeemed', label: '已发货' },
{ value: 'mismatch', label: '绑定错误' },
{ value: 'abnormal', label: '已上报失效' },
@@ -52,7 +50,7 @@ const STATUS_OPTIONS = [
{ value: 'bound_overdue', label: '绑定超时' },
]
-const DANGEROUS_STATUSES = new Set(['using', 'bound', 'redeeming', 'mismatch'])
+const DANGEROUS_STATUSES = new Set(['using', 'bound', 'mismatch'])
const SKIP_REASONS: Record = {
not_deleted: '已不在回收站',
@@ -72,8 +70,6 @@ function statusTagColor(status: string) {
return 'processing'
case 'bound':
return 'cyan'
- case 'redeeming':
- return 'geekblue'
case 'redeemed':
return 'purple'
case 'mismatch':
diff --git a/frontend/src/pages/platformRock/TokenStatusLogDrawer.tsx b/frontend/src/pages/platformRock/TokenStatusLogDrawer.tsx
index 16f7307..d24636f 100644
--- a/frontend/src/pages/platformRock/TokenStatusLogDrawer.tsx
+++ b/frontend/src/pages/platformRock/TokenStatusLogDrawer.tsx
@@ -435,12 +435,11 @@ export function TokenStatusLogDrawer({
当前状态:{rockTokenStatusLabel(token.status)}
{token.assigned_order_no ? ` · 工单 ${token.assigned_order_no}` : ''}
- {token.status === 'redeeming' && (
-
- {token.redeem_last_message || '上游官方处理中,系统会自动确认发货结果'}
- {token.redeem_requested_at
- ? ` · 提交于 ${formatDateTime(token.redeem_requested_at)}`
- : ''}
+ {token.has_anomaly && (
+
+ ⚠️ 历史异常:{token.anomaly_type || '异常'}
+ {token.anomaly_count ? ` · 共 ${token.anomaly_count} 次` : ''}
+ {token.anomaly_at ? ` · 最近 ${formatDateTime(token.anomaly_at)}` : ''}
)}
diff --git a/frontend/src/pages/platformRock/tokenColumns.tsx b/frontend/src/pages/platformRock/tokenColumns.tsx
index 677820c..2fbcb6b 100644
--- a/frontend/src/pages/platformRock/tokenColumns.tsx
+++ b/frontend/src/pages/platformRock/tokenColumns.tsx
@@ -40,6 +40,45 @@ function serverElapsedDays(serverDays: number | undefined, at?: string): number
return elapsedDaysSince(at)
}
+// 异常标记:独立小标签,不改变主状态。hover 展示最近一次异常原因与时间。
+function AnomalyBadge({ record }: { record: RockTokenItem }) {
+ const reason = (record.anomaly_reason || '').trim()
+ const type = (record.anomaly_type || '').trim()
+ return (
+
+
+ {type || '历史异常'}
+ {record.anomaly_count ? ` · 共 ${record.anomaly_count} 次` : ''}
+
+ {reason || '历史流转中出现过异常'}
+ {record.anomaly_at ? (
+
+ 最近:{formatDateTime(record.anomaly_at)}
+
+ ) : null}
+
+ }
+ >
+
-
⏳ 提交发货:
- {formatDateTime(record.redeem_requested_at)}
- {record.redeem_attempts ? `(已查询 ${record.redeem_attempts} 次)` : ''}
+ {record.anomaly_at && (
+
+ ⚠️ 异常:
+ {formatDateTime(record.anomaly_at)}
+ {record.anomaly_type ? `(${record.anomaly_type})` : ''}
)}
{record.mismatch_at && (
diff --git a/frontend/src/pages/platformRock/types.ts b/frontend/src/pages/platformRock/types.ts
index f88b206..3b4d5b8 100644
--- a/frontend/src/pages/platformRock/types.ts
+++ b/frontend/src/pages/platformRock/types.ts
@@ -10,7 +10,6 @@ export const ROCK_TOKEN_STATUS_LABELS: Record
= {
available: '可用库存',
using: '扫码使用中',
bound: '已授权绑定',
- redeeming: '发货处理中',
redeemed: '已交付发货',
mismatch: '绑定错误',
abnormal: '已上报失效',