2.2 KiB
2.2 KiB
运费单删除(级联软删)设计
日期:2026-10-14
范围:Web 管理端「运费信息」、市场移动端(专员/经理)「运费信息」
背景
此前两端仅有「取消关联(unlink)」;当有效关联清零时部分路径会顺带软删主表,但没有显式「删除运费单」能力。产品需要列表上一键删除整单。
决策
- 语义:同事务软删
biz_sample_freight+ 该批次全部del_flag=0的biz_sample_freight_item(级联解除关联并删除批次)。 - 市场端权限门禁:存在当前账号不可见的关联样本时 禁止删除(与
edit一致);错误文案提示需全部样本在范围内。 - Web 权限:沿用现有运费页入口(
require_admin_or_super_admin),不新增独立按钮权限码。 - 批次号:软删后
freight_no仍占用唯一索引(与现网一致,本轮不回收)。 - 非目标:不改协议单内配置/取消运费交互;不做 Web 批量删除。
与 unlink 的差异
| unlink | delete(本能力) | |
|---|---|---|
| 目标 | 解除选中(或可见范围内)样本关联 | 废弃整个运费单 |
| Items | 仅软删匹配项 | 软删该批次全部 active items |
| 主表 | 剩余 0 才软删(市场:仅当无任何剩余 active) | 始终软删主表 |
| 市场范围外样本 | 可见解完可不删主表 | 禁止整单删除 |
API
- Web:
DELETE /web/admin/sample-freights/{id} - Market:
DELETE /mini/market/{specialist|manager}/freights/{id} - Market 成功返回:
{ id, visibleItemCount: 0, disappeared: true } - Web 成功返回:
{ id, deleted: true, linkedSampleCount: 0 }
前端
- Web:运费列表行内「删除」+ 确认框(说明将解除全部关联)。
- Mobile:列表卡片 / 详情底栏在后端
allowedActions含delete时展示;确认后DELETE;消失后回列表。
实现要点
- 禁止只软删主表而留下 active items(否则
uk_bsfi_active_sample会阻止样本再关联)。 - Market
allowedActions:全可见时['edit','delete','link','unlink'];有范围外样本时['link','unlink']。 decorate_allowed_actionsfreight 白名单含delete。