feat(consignment): 接单模板反推规格字段,打手端大批量选项改下拉

- 新增 consignment-template-spec-service:按「分类 + 子树」解析接单模板商品名,
  全部可拆成统一维度且无组合碰撞时生成多字段矩阵,否则整类降级为商品名下拉;
  选项只存 ruleKey,取价时实时回查模板,模板停用/删除即无价(missingPricePolicy=block)。
- 匹配引擎:模板驱动配置强制使用 profile specs(不再回退库存旧快照),订单侧按
  product_rule_id 反解规格;解析失败按 unknown 处理,不参与自动匹配。
- 管理端:寄卖配置新增「从接单模板生成」,弹窗给出推荐模式(规格字段 / 商品名下拉)、
  降级原因与组合→模板价覆盖矩阵。
- 打手端:选项超过 8 个改用带搜索的下拉(地铁逃生 100 个商品),规格网格按字段数
  自适应铺满;物品名改用商品名,去掉硬编码「苏尔南」后缀。
- 迁移重编号:合并 main 后寄卖线顺延为 147–151,migrate.ts 保留 legacy→new 幂等映射。
- 同工作区的拼单份额报酬口径、超时重匹配兜底、整单/拼单匹配弹窗调整一并提交。

验证:前端 254/254、后端寄卖相关 41/41、双端 tsc 通过;开发库已实跑
发布→审核入库→自动匹配(模板价 1200 → 匹配报酬 1200)。
This commit is contained in:
2026-11-07 12:26:10 +08:00
parent 50ee3553c5
commit 787b8e2771
38 changed files with 2242 additions and 197 deletions
@@ -45,6 +45,7 @@ import {
} from '../../../services/worker-platform/consignment-fulfillment-service.js'
import { listPendingConsignmentMatches } from '../../../services/worker-platform/consignment-pending-match-service.js'
import { listConsignmentMatchLogs } from '../../../services/worker-platform/consignment-match-log-service.js'
import { buildTemplateSpecProposalForCategory } from '../../../services/worker-platform/consignment-template-spec-service.js'
import {
listConsignmentMatchCandidatesForWorkOrder,
matchConsignmentWorkOrderManually,
@@ -105,6 +106,20 @@ router.post(
}),
)
/** 从接单模板反推规格字段:返回字段建议 + 组合→价格覆盖矩阵,运营确认后再保存。 */
router.get(
'/worker-platform/consignment/template-spec-proposal',
requireAdminPermission('consignment.manage'),
createJsonHandler(
(req) => buildTemplateSpecProposalForCategory(Number(req.query.categoryId || 0)),
{
successMessage: 'ok',
errorMessage: '读取接单模板规格建议失败',
scope: '[admin/consignment/template-spec-proposal]',
},
),
)
// ---------------- 内部匹配(手动/自动共用) ----------------
router.get(