add:新增同一个工单同一人可以多次拼单

This commit is contained in:
2026-10-23 14:26:41 +08:00
parent 72a758fd7c
commit bfd2325ac5
28 changed files with 1332 additions and 347 deletions
@@ -23,6 +23,11 @@ const notificationEventRows: NotificationEventRow[] = [
{ key: 'recharge_requested', name: '充值申请', description: '打手提交新的充值申请' },
{ key: 'acceptance_submitted', name: '提交验收', description: '打手提交订单验收资料' },
{ key: 'acceptance_reminded', name: '催验收', description: '打手在验收后催促处理' },
{
key: 'order_accepted',
name: '整单验收完成',
description: '全部份额验收完成(含拼单统一验收)',
},
{ key: 'material_required', name: '待补资料工单', description: '新工单等待后台补充资料' },
{
key: 'cancel_requested',
@@ -114,6 +114,7 @@ import {
asRecord,
formatMoney,
formatSharingShareStatus,
formatSharingShareCancelledReason,
formatStatus,
resolveGiftPhaseColor,
resolveSharingShareStatusColor,
@@ -3145,6 +3146,7 @@ export default function WorkOrdersPanel() {
dataSource={sharingShares}
loading={sharingQuery.isFetching}
pagination={false}
scroll={{ x: 1280 }}
columns={[
{
title: '打手',
@@ -3159,11 +3161,38 @@ export default function WorkOrdersPanel() {
{
title: '状态',
render: (_, share) => (
<Tag color={resolveSharingShareStatusColor(share.status)}>
{formatSharingShareStatus(share.status)}
</Tag>
<Space size={4} wrap>
<Tag color={resolveSharingShareStatusColor(share.status)}>
{formatSharingShareStatus(share.status)}
</Tag>
{share.status === 'cancelled' && share.cancelledReason ? (
<Tag>{formatSharingShareCancelledReason(share.cancelledReason)}</Tag>
) : null}
</Space>
),
},
{
title: '参与时间',
render: (_, share) =>
share.createdAt ? formatAdminDateTime(share.createdAt) : '-',
},
{
title: '截止时间',
render: (_, share) =>
share.deadlineAt ? (
<span>
{formatAdminDateTime(share.deadlineAt)}
{share.timeoutMinutes ? ` · ${share.timeoutMinutes} 分钟` : null}
</span>
) : (
<Typography.Text type="secondary">不限时</Typography.Text>
),
},
{
title: '超时策略',
render: (_, share) =>
share.timeoutPolicy ? formatTimeoutPolicyLabel(share.timeoutPolicy) : '-',
},
{
title: '提交时间',
render: (_, share) =>
@@ -252,6 +252,16 @@ export function formatSharingShareStatus(status: string) {
return labels[status] || status
}
/** 撤单原因:份额级独立撤单后,后台需要一眼看出是谁撤的。 */
export function formatSharingShareCancelledReason(reason: string) {
const labels: Record<string, string> = {
timeout: '超时失效',
admin: '后台撤单',
worker_request: '打手退单',
}
return labels[reason] || reason
}
export function formatAcceptanceMode(mode: string) {
if (mode === 'friend_gift') return '好友赠送'
return '标准验收'