📎 技术回填附录:金额格式与弱反馈 · 技术确认清单
TradeHub 新资金系统 · 前台收银台 H5
自选充值
路径:/cashier/self-select · 菜单:收银台 › 自选充值 · 范围:存款首页「自选」Tab + 购买后撮合存款链路(不含取款自选)
⚠️ 来源说明:老板 TG 历史(08-18~08-30)无「快捷/自选」专项口述。本页依据:老平台 H5 实页截图、Nova 原型 F-107~F-109,金额/弱反馈以 2026-09-01 技术回填为准。
✅ 技术回填(2026-09-01):wallet 项目对应路由 /wallet/business(C2C 卖单列表,代码无「自选」字面命名);IM 对应 c-play 聊天室。完整对照表见 独立站 · 技术确认清单 或仓库 docs/自选充值_金额与弱反馈_技术确认.html。
📌 C 币 vs 撮合(已澄清):列表「C」是库存展示单位,不等于非撮合。是否进 IM 由下单后 uiType / 通道 payModel 决定;uiType=3 跳聊天室。老板口径中的 ZHOTC/余额 C 是另一条产品线,勿与 business 卖单列表混谈。详见 §⑨。
① 范围
| 维度 | 说明 |
|---|---|
| 入口 | 存款首页顶栏 Segmented:快捷 | 自选(F-107)。默认 Tab、是否展示自选由后台配置。 |
| 自选态页面 | 报价列表(C 币 P2P 市场),非通道 Grid + 金额输入区。 |
| 开单方式 | 点报价卡「购买」(F-109)直接锁单;无「确认存款」按钮。 |
| 开单后 | 进入撮合存款沟通页(S-02),后续上传回单 / 待确认 / 完成 / 驳回 / 超时 / 取消等与 撮合支付 SPEC 共用,但首条卖方文案与金额来源不同(见 §③④)。 |
| 不含 | 取款侧无「自选」;快捷存款 Tab;C 币钱包直充(非报价购买)见 三方支付 SPEC。 |
| Demo 深链 | /cashier-prototype/index.html?screen=deposit&depositMode=custom |
② 流程
存款首页 → 点「自选」→ 报价列表(可筛选 F-108)→ 点「购买」→ (可选)付款人姓名弹窗 → 沟通页「待付款」→ 上传回单 → 已付款待确认 → 完成 / 驳回 / 失败 / 超时 / 取消
| 步骤 | 页面 | 用户动作 | 金额锁定时机 |
|---|---|---|---|
| 1 | 自选大厅 | 浏览 / 筛选 / 排序报价 | 未锁定 |
| 2 | 自选大厅 | 点「购买」 | 锁定:depositAmount = offer.stock |
| 3 | 沟通页 | 填付款人姓名(撮合路径) | 已锁定,不可改 |
| 4 | 沟通页 | 付款 + 上传回单 | 订单卡展示锁定金额 |
| 5 | 后续态 | 同撮合存款 | 详情 / 列表沿用锁定值 |
③ 金额展示(已定案 · 以代码为准)
✅ 下列「定案展示」= wallet / c-play 代码实装;「Nova 原型」列仅作对照,不以原型覆盖代码。
③a 自选大厅(wallet · business)
| 展示位置 | 定案展示 | 数据字段 / 格式化 | 小数 | 单位 | 来源 |
|---|---|---|---|---|---|
| 顶栏余额 | ¥999,999(千分位) | GET /counter/front/merchant/getAvailableBalance · number(分)→ Math.floor(res/100) → formatNumberToThousand | 整数 | ¥ 前缀 | 前端 |
| 筛选金额区间标签 | 1-100(示例) | sellPageAmountRangeConfig · ${startAmount}-${endAmount};接口空时兜底 0-1000 等 | 整数 | 不带 C | API 配置 |
| 报价卡「可售」 | 可售 105 C | amount raw number + 前端字面量 C | 整数 | 后缀 C | API+前端 |
| 成单量 | 成单量99+ | historyChildFinishCount · >=99 显示 99+ | — | — | 前端封顶 |
| 空列表 | 暂无数据 | 通用空态 pull-refresh.emptyText | — | — | 非 PRD 句 |
③b 购买开单后(wallet + c-play IM)
| 展示位置 | 定案展示 | 数据字段 / 格式化 | 小数 | 单位 | 备注 |
|---|---|---|---|---|---|
| 购买成功 Toast | 无 | 成功走 uiType 外跳或 jumpToIM | — | — | Nova 原型有 Toast,代码未实现 |
| 购买弹窗内金额 | 105元 | deposit-popup · {{ info.amount }}元 | 整数 | 元 | 锁单前确认 |
| 卖方 IM 文本话术 | (WS 推送,无固定「可售」模板) | msgObject.text HTML 直出 | — | — | 订单信息卡:{quantity} c +「交易数量」 |
| 沟通页订单卡大字 | 105元 | c-play · Math.floor(amount) + 小字「元」 | 整数 floor | 元 | 与列表 amount 同值,展示单位不同 |
| 订单列表行 | +105 C | 账单 +/- amount currency | — | currency 字段 | 非 +¥ |
| 订单详情标题 | 105 C | {{ amount }} {{ currency }} | API 原值 | currency | 无单独「申请金额」字段名 |
| 实际到账 | 105.00 等 | actualAmount 直接渲染;退回 reimburseAmount.toFixed(2) | 跟 API / 2 位 | 元 | 手续费 feeQuantity.toFixed(2) |
| 倒计时 | 04:30(IM)/ 120s(wallet 通用) | IM:CountDown MM:SS;wallet 通用为剩余秒数 | — | — | 场景不同组件不同 |
| 赠送语 | {N}分钟内上传回单…赠送3元 | rebateRatio×amount 截断 2 位;分钟数 ceil(rebateTimeLimit/60) | 2 位截断 | 元 | 无固定「5分钟」句 |
③c 格式化总规则(汇总)
| 规则 ID | 规则 | 状态 |
|---|---|---|
| AMT-01 | 列表库存 amount:整数 raw + 前端拼 C | 已定案 |
| AMT-02 | 筛选区间标签来自 sellPageAmountRangeConfig,格式 start-end,不带 C | 已定案 |
| AMT-03 | IM 支付卡主金额:Math.floor(amount) +「元」;订单信息卡 quantity +「 c」 | 已定案 |
| AMT-04 | 顶栏余额:分转元 floor 后千分位 + ¥ 前缀 | 已定案 |
| AMT-05 | 锁单后金额不可改;quantity = amount 原样 1:1 下单 | 已定案 |
| AMT-06 | 工具类:floatNumCut、formatNumberToThousand、multiplyAllFloat(utils/base.js);IM:formatRebateAmount、truncateMoney2Display | 已定案 |
| AMT-07 | CNY 不一律 2 位小数:弹窗整数+「元」;fee/gift 2 位截断;actualAmount 跟 API | 已定案 |
④ 提示文案(已定案 · 以代码为准)
📌 下表「定案」= 代码实装;「Nova 原型」= 仅原型/mock,未在老平台实现。弱反馈多数为 API msg 直出或前端常量 FE_LITERAL:文案,无统一 i18n key。
④a 自选大厅与筛选(wallet business)
| 触发 | 定案 / Nova 原型 | 类型 | messageCode / 来源 |
|---|---|---|---|
| 切换自选 Tab | 未实现 · Nova:已切换自选报价 | Toast | wallet 无快捷/自选 Tab |
| 切换快捷 Tab | 未实现 | Toast | 同上 |
| 付款方式筛选变更 | 未实现 · 静默刷新列表 | — | filter-sort.vue · handleFilterSortChange |
| 金额筛选变更 | 未实现 · 静默刷新 | — | 同上 |
| 可售数量排序 | 未实现 · 三态排序仅 emit | — | handleResidualQuantitySortAsc |
| 筛选无结果 | 暂无数据 | 页内空态 | FE_LITERAL:暂无数据(非「暂无符合当前条件的报价」) |
| 报价失效 / 购买失败 | 接口 msg + 可选 【code】 | Toast | 无固定「报价失效」key;实名 6286;未接单 100032 |
| 购买成功 | 未实现 Toast · 直接跳 IM/外跳 | — | proceedDepositBuy 成功分支 |
| 未勾选协议 | 请先勾选同意后下单 | Toast | deposit-popup |
④b 沟通页各状态(c-play IM · 购买后)
状态轴与 撮合支付 一致。下表为代码实装的固定模板;卖方首条文本话术为 WS msgObject.text 直出,前端无「已锁定自选报价」写死模板。
| 状态 | 状态标签 | 卖方首条 / 系统消息 | 订单卡锁层 | 倒计时 / 底栏提示 | 完成 / 附属 |
|---|---|---|---|---|---|
| 待付款 | 待付款 | WS 文本 msgObject.text(无固定自选模板) | (未锁定) | 请 {MM:SS} 内付款,超时将自动取消订单 | RebateTag:{N}分钟内上传回单…赠送 M 元 |
| 已付款待确认 | 已付款 | 用户发「我已支付,请查收,谢谢」+ 回单图 | 已付款 请等待对方查收 |
请等待 {MM:SS} 对方发货中... | 前端推导 tradeStatus∈[3,4,6,7,8] |
| 已完成 | 已完成 | WS / 蒙层 | 已完成(StatusMask 全屏) | — | 非 Toast「存款已到账」;蒙层 FE_LITERAL:已完成 |
| 回单驳回 | 回单驳回 | WS disPlayType 9 → toast msgObject.text | — | 驳回原因跟 API content,前端不枚举 | 无固定「回单已驳回」key |
④c 弹窗 · 强制退出 · Toast
| 场景 | 定案文案 | 类型 | 来源 |
|---|---|---|---|
| 付款人姓名校验失败 | 请输入2-20位中文或英文字符 | Toast | c-play · payer-name-panel(非「请填写付款人姓名」) |
| 付款人姓名提交成功 | 无 Toast | — | 关面板 + sessionStorage |
| 锁单成功 | 无 Toast | — | 按 uiType 跳转 |
| 强制退出 · 未完成单 | 购买订单未完成,请尽快查看! 按钮:查看 → 跳 IM | Modal | wallet · ConfirmTip;counter 侧为「充值订单未完成…」 |
| 复制订单号 | 复制成功 | Toast | copyToClipboard(不含订单号) |
| 取消成功 | 刻意无 Toast(卖家侧) | — | 买家 WS 未接单:支付商家未接单,请更换通道尝试. |
| 存款成功 | WS payload.title/content 或蒙层「已完成」 | 推送/蒙层 | 非固定「存款已到账」Toast |
④d 订单详情 / 列表
| 订单态 | 列表状态文案 | 详情状态文案 | 详情操作 |
|---|---|---|---|
| 进行中 | 待处理 | 待处理 | — |
| 待确认 | 待处理 | 待处理 | — |
| 已完成 | 已完成 | 已完成 | — |
| 已取消 | 已取消 | 已取消 | 「再来一单」→ 存款首页 |
| 驳回 | 回单驳回 | 回单驳回 | 回沟通页修改 |
| 失败 | 已失败 | 存款失败 | 申诉 / 重新发起 |
⑤ 数据来源(API 已定案)
| 字段 | 含义 | 接口 / 配置 | 状态 |
|---|---|---|---|
| amount | 可售库存 → 下单 quantity(1:1) | POST .../buyOrder/v2/sellPage · WalletSellOrderPageVO.amount | 已定案 |
| historyChildFinishCount | 成单量(≥99 显示 99+) | sellPage 列表 | 已定案 |
| payTypeName 等 | 支付方式名 / 通道 | payTypeCode、accountTypeName、customTypeName | 已定案 |
| giftRatio / rebateRatio | 赠送 / 返利比例 | POST .../buyOrderConfig + 列表字段 | 已定案 |
| 筛选项 | 付款方式、金额区间 | GET .../buyTradeType · BuyOrderConfigVO + sellPageAmountRangeConfig | 已定案 |
| 购买锁单 | 创建存款单 | POST .../buyFromSellList · 入参 WalletBuyDTO(payTypeCode、quantity) | 已定案 |
| 下单结果 | 跳转方式 | PlacePayOrderVO.uiType(3=IM,1/2=浏览器,4/5=USDT/ZHOTC) | 已定案 |
| 进行中撮合单 | 强制退出弹窗 | GET .../getInProgressMatchOrder | 已定案 |
| levelBadge | 等级标签文案 | matchPayLevel 等 · 实页「优质」待产品对齐 | 待产品 |
| 默认 Tab | 快捷 or 自选 | counter 侧配置 · wallet business 无 Tab 字面 | 待产品 |
⑥ 关联 SPEC
| 页面 | 关系 |
|---|---|
| 可点击原型 | Demo 实现 F-107~F-109;深链 depositMode=custom |
| 撮合支付 | 购买后全流程、强制退出、上传回单、客服介入 |
| 老板 Bug 清单 | 购买后 Bug 与快捷撮合共用 |
| 技术确认清单 | 金额格式 + 弱反馈完整回填(wallet + c-play + 架构) |
| 三方支付 | C 币钱包直充(非报价自选) |
⑦ 业务待确认(技术已答 / 产品待决)
| # | 主题 | 技术结论 | 产品待决 | 状态 |
|---|---|---|---|---|
| 1 | C 币 vs 撮合 | 列表 C = 展示单位;是否撮合看 payModel/uiType,可下撮合单 | 与老板 08-20/08-24 口径需产品拍板表述 | 产品 |
| 2 | 可售 C vs 订单元 | 同字段 amount 1:1;列表拼 C、IM 卡拼元,无汇率换算 | Nova 原型需对齐代码展示 | 技术✓ |
| 3 | 顶栏余额 | 存款/取款页 CounterHeaderTitle 展示余额 | 自选态是否必展示 | 产品 |
| 4 | 等级 badge | matchPayLevel 字段存在 | 「优质」vs「高级」文案 | 产品 |
| 5 | 成单量 99+ | >=99 封顶 | — | 已定案 |
| 6 | 金额筛选枚举 | API 配置 sellPageAmountRangeConfig,非写死「100C以内」 | Nova 是否改区间展示(不带 C) | 技术✓ |
| 7 | 报价列表 API | POST .../sellPage + GET .../buyTradeType | 分页/刷新策略 | 已定案 |
| 8 | 购买锁单 API | POST .../buyFromSellList;失败码见 §⑨ | — | 已定案 |
| 9 | stock 小数位 | 整数 raw | — | 已定案 |
| 10 | 自选默认 Tab | wallet 无 Tab;counter 侧有通道切换 | 新系统入口配置 | 产品 |
| 11 | 筛选 UI / Toast | 实装为静默刷新,无筛选 Toast | Nova 是否保留原型 Toast | 产品 |
| 12 | 卖方锁定句 | IM 无写死「已锁定自选报价」模板 | 是否要求后端推固定句 | 产品 |
| 13 | 小铃铛 / 待处理 | 进行中撮合单 getInProgressMatchOrder 触发强提示 | 与老板「C 币不提示」是否冲突 | 产品 |
| 14 | 赠送语 | rebateRatio + rebateTimeLimit 动态分钟数 | 无固定「5 分钟」句 | 技术✓ |
⑧ 技术回填摘要
✅ 完整 A/B/C/D 表(含代码路径)见 独立站 · 技术确认清单。下表为 SPEC 速查。
⑧a 金额 · 关键差异(Nova vs 代码)
| 展示位 | Nova 原型 / 截图 | 代码定案 |
|---|---|---|
| 筛选区间 | 100C以内 | 1-100(不带 C) |
| 列表可售 | 105(无 C) | 105 C |
| 订单列表 | +¥105 | +105 C |
| 空态 | 暂无符合当前条件的报价 | 暂无数据 |
| 购买 Toast | 已选择…可售… | 无 Toast |
⑧b 弱反馈 · 关键差异
| 场景 | Nova 原型 | 代码定案 |
|---|---|---|
| 筛选变更 | 付款方式:{选项} Toast | 静默刷新 |
| 付款人姓名 | 请填写付款人姓名 | 请输入2-20位中文或英文字符 |
| 复制订单号 | 已复制订单号:{orderNo} | 复制成功 |
| 存款到账 | 存款已到账 Toast | WS 推送 / 蒙层「已完成」 |
| 强制退出 | 充值订单未完成… | wallet:购买订单未完成,请尽快查看! |
⑨ 业务架构(金额 / 提示相关)
| # | 问题 | 技术回答 |
|---|---|---|
| D1 | 订单类型 | 自选购买 = 卖单列表购买;按支付方式分流:uiType=3 撮合 IM,1/2 外跳浏览器,4/5 USDT/ZHOTC。代码无「自选」独立订单类型名。 |
| D2 | 列表 API | POST /front/buyOrder/v2/sellPage → WalletSellOrderPageVO(amount、historyChildFinishCount、feeRatio、giftRatio 等);筛选项 GET .../buyTradeType。 |
| D3 | 锁单 API | POST /front/buyOrder/v2/buyFromSellList;失败码含 6286 实名、6265 库存不足、6276 已成交/下架、100032 未接单等;成功无 Toast。 |
| D4 | C 币非撮合? | 不直接冲突:C 是展示单位;撮合看 PayModel.isMatchModel / typeCode;ZHOTC/余额 C 是另一条线。 |
链路串联
| 节点 | 金额 | 提示 |
|---|---|---|
| sellPage 列表 | amount + C | 筛选无 Toast;空态「暂无数据」 |
| buyFromSellList | quantity = amount 1:1 | 失败 API msg;成功按 uiType 跳 |
| uiType=3 → IM | 支付卡 floor+「元」;quantity+「 c」 | WS 文本 / 倒计时 MM:SS / StatusMask |
| 账单/详情 | amount+currency / actualAmount | 复制「复制成功」;结束 WS content |