# 财务管理-结算记录:状态列部分行显示成空的/裸字母标签 Status: ready-for-agent 领域: 支付链路(自动结算与结算记录) 来源: 用户工单「【财务管理】结算记录:状态没有显示出来」(截图:2026-09-18 两条流水状态列红框为空标签) 日期: 2026-09-18 ## 现象 「财务管理 → 结算记录」列表里,状态列**大部分行正常显示「已结算」**,但**最新日期(2026-09-18)的两条** (个人进件验证商户、景区服务-卡)只显示一个几乎空白的小标签——实际是标签里只有**一个裸字母 `I`**, 看起来像"状态没显示出来"。 ## 根因 状态值直接来自斗拱结算流水的 `trans_stat`,前端只映射了三个值,其余原样输出: - 后端:`MerchantSettlementAdminService.decode(...)` 第 116 行 `row.put("status", record.get("trans_stat"))`; - 前端:[MerchantSettlementView.vue](D:/Code/talent-card/talent-card-admin/src/views/MerchantSettlementView.vue:54) `settleStatusLabel()` 只映射了 `S→已结算 / F→结算失败 / P→处理中`,其它值走 `|| String(value || '-')` 原样显示。 当天还没结算完成的流水,斗拱返回的是 **`trans_stat = "I"`(处理中/未终态)**,不在映射表里,于是标签里 只剩下一个裸的 `I`。更早的流水都是 `S`,所以显示正常——这也解释了为什么"只有最新的两行看起来是空的"。 ## 证据 1. 截图:2026-09-18 两行状态列是空标签,其余 2026-09-17 / 09-15 / 08-29 / 08-26 都是「已结算」。 2. 代码里 `I` 是确实存在的交易状态: - `PendingPaymentConfirmationTests:105` `"trans_stat", "I", "resp_code", "00000000"`; - `MerchantVerificationServiceTests:228` `"trans_stat", "I", "resp_code", "00000000"`; - `PaymentReconciliationService:629` 把 `"I"` 和失败/未找到一起归为"未终态"。 3. 通道状态取值说明见 `talent-card-server/docs/huifu-payment-integration.md:103` (`trans_stat`:`S`/`SUCCESS`/`PAID`、`F`/`FAILED`、`P`/`PROCESSING`/`PENDING` 等)。 ## 建议改法(支付链路负责人) 1. 前端 `settleStatusLabel()` / `settleStatusType()` 补上缺失取值,至少: `I → 处理中`(`warning`),并顺手兼容长写法 `SUCCESS/FAILED/PROCESSING/PENDING`(与后端文档口径一致)。 2. 更稳的做法是后端 `decode()` 里把 `trans_stat` **归一化**(`I`/`PROCESSING`/`PENDING` → `P`, `SUCCESS`/`PAID` → `S`,`FAILED` → `F`),前端只认三种值,避免以后每出现一个新码就再崩一次。 3. 另:结算记录页的「状态」筛选下拉目前是空的(`statusOptions` 对 `settlements` 返回 `[]`, `MerchantSettlementView.vue:36`),归一化后建议一并把 `S/F/P` 三个选项补上,方便按状态筛流水。 ## Comments - 2026-09-18:由「其余业务」侧的会话只读排查后归档(按仓库约定,支付链路代码未改动)。待转交支付链路负责人。