feat(consignment): 支持多数量拆分与份额级赠送,并对齐待抢单看板

- 匹配引擎支持一条库存按剩余数量拆给多张整单/拼单,份额数量、报酬、分配数量按实际占用计算
- 「我的寄卖」改为按占用单/份额一行 + 剩余库存行,卖家按 allocation/share/workOrder 定位确认加好友与提交凭证
- 解绑/撤销/超时按 allocation 精确回补,修复单绑定字段在多占用下被误清的问题
- 拼单好友赠送改为份额级 friend_added_at / gift_available_at(迁移 146),新增后台按份额确认加好友入口与寄卖赠送列
- 待抢单匹配看板改用新引擎:覆盖全部寄卖分类、拼单余量、精确/非精确/冲突明细,去掉手枪品类写死
- 发布押金改为该提报单全部售出/作废后才释放,避免多件库存分多单时提前退款
- 补齐集成测试与单测:拆分、多占用、份额级独立冷却与凭证、看板新旧引擎对齐
This commit is contained in:
2026-11-06 12:23:55 +08:00
parent 3f16b15c5c
commit e0a85359b6
28 changed files with 1758 additions and 125 deletions
@@ -52,6 +52,7 @@ import VideoPreview, { formatAcceptanceVideoDuration } from '@/components/files/
import {
acceptAdminWorkOrder,
acceptAdminWorkOrderShare,
confirmAdminWorkOrderShareFriendAdded,
acceptAdminWorkOrders,
assignAdminWorkOrderToWorker,
cancelAdminWorkOrder,
@@ -3734,6 +3735,22 @@ export default function WorkOrdersPanel() {
</Space>
),
},
{
title: '寄卖赠送',
width: 120,
render: (_, share) => {
if (!share.consignmentInventoryId) return '-'
if (share.status === 'accepted') return <Tag color="green">已完成</Tag>
if (share.status === 'submitted')
return <Tag color="processing">待审核</Tag>
if (!share.friendAddedAt) return <Tag>待加好友</Tag>
const availableAt = Date.parse(String(share.giftAvailableAt || ''))
if (Number.isFinite(availableAt) && availableAt > Date.now()) {
return <Tag color="orange">冷却中</Tag>
}
return <Tag color="green">待赠送</Tag>
},
},
{
title: '问题',
width: 120,
@@ -3906,6 +3923,29 @@ export default function WorkOrdersPanel() {
)
) : null
const consignmentGiftAction =
sharingOrder?.acceptanceMode === 'friend_gift' &&
share.consignmentInventoryId &&
share.status === 'joined' &&
!share.friendAddedAt ? (
<Button
size="small"
title="只确认该卖家的份额,其他卖家的冷却不受影响"
onClick={() => {
void runAction(
() =>
confirmAdminWorkOrderShareFriendAdded(
sharingOrder.workOrderId,
share.shareId,
),
'已确认该份额加好友,赠送冷却开始',
)
}}
>
确认加好友
</Button>
) : null
return (
<Space size={6} className="admin-share-actions">
{share.status === 'submitted' ? (
@@ -3969,6 +4009,7 @@ export default function WorkOrdersPanel() {
撤份额
</Button>
) : null}
{consignmentGiftAction}
{problemAction}
</Space>
)