fix(consignment): 手动匹配订单按钮点了不弹窗(弹窗挂错了位置)

用户反馈:在库待匹配列表点「手动匹配订单」没有反应。

根因:上一批把手动匹配弹窗挂到了「编辑寄售物品」弹窗**内部**,外层弹窗未打开时
该组件根本没被挂载,点击只改状态、界面无变化。

- 弹窗移到面板顶层(与其它弹窗同级),点击即弹
- 新增静态守卫测试:断言手动匹配弹窗前面不能有未闭合的 Modal(即不能嵌在别的弹窗里)、
  按钮必须真的 setState、open 由该状态驱动;已验证该守卫能拦下错误写法
- 顺带补入口缺口:订单侧原先只在"检测到系统候选"的提醒弹窗里给入口,订单没有任何候选时
  反而进不去手动匹配 —— 工单行内新增常驻「手动匹配现货」(仅待指派/待补资料,
  与后端前置校验同口径)
- 已暂停匹配的现货点按钮会直接 409,改为按钮禁用并提示先打开「允许匹配」开关
- destroyOnClose → antd 6 的 destroyOnHidden(前者已废弃)

验证:前端 typecheck/lint/format/48 例测试/build 全过。
This commit is contained in:
yml2213
2026-09-17 12:27:58 +08:00
parent a7a55d6c16
commit 0476339ec4
7 changed files with 131 additions and 18 deletions
+18
View File
@@ -289,6 +289,24 @@
前端在"部分匹配"候选上先 `modal.confirm` 危险确认,再带 `allowPartial: true` 重试,高配充低配的合法玩法保留但不可误触。
3. ⏳ 匹配下推 SQL + 批量匹配接口 + 工单列表角标(P2-8)未做:当前仍是"取全量在库 → 内存比对"。
### 批次 T · 手动匹配的入口修复(本轮)
**问题**(用户):在库待匹配列表点「手动匹配订单」**不弹窗**。
**根因**:弹窗被挂到了「编辑寄售物品」弹窗**内部**(JSX 嵌套位置错),
外层弹窗没打开时它根本没被挂载 → 点击只改状态、什么都不发生。
**这类"点了没反应"的问题在浏览器里才看得出来**,所以顺手加了静态守卫。
| 修复 | 说明 |
| --- | --- |
| ✅ 挂载位置 | 弹窗移到面板顶层(与其它弹窗同级),点击即弹 |
| ✅ 静态守卫 | 新增 3 例测试:断言手动匹配弹窗**前面不能有未闭合的 Modal**,按钮必须真的 setState、open 由该状态驱动(已验证该守卫能拦下"嵌在别的弹窗里"的写法) |
| ✅ 入口补全 | 订单侧原来只在「检测到候选」的提醒弹窗里给入口,**订单没有任何系统候选时反而进不去**(而那正是最需要人工指定的时候)→ 工单行内新增常驻「手动匹配现货」(仅待指派/待补资料,与后端前置校验同口径) |
| ✅ 失败前收敛 | 已暂停匹配的现货点按钮会直接 409 → 改为按钮禁用 + 提示"先打开允许匹配开关" |
| ✅ 顺带 | `destroyOnClose` 换成 antd 6 的 `destroyOnHidden`(前者已废弃) |
验证:前端 typecheck / lint / format / 48 例测试 / build 全过。
### 批次 S · 客服手动指定现货匹配(本轮)
**需求**(用户):客服要能在后台**人工指定**现货与订单匹配起来,而不是只能用系统算出的候选。