支持VIP5免审核后补图
This commit is contained in:
@@ -38,6 +38,7 @@ import {
|
||||
fetchWorkerProfile,
|
||||
saveWorkerAcceptanceDraft,
|
||||
saveWorkerOrderNote,
|
||||
supplementWorkerAcceptedOrderEvidence,
|
||||
submitWorkerAcceptance,
|
||||
} from '@/services/worker'
|
||||
import type {
|
||||
@@ -199,6 +200,8 @@ export default function WorkerOrdersPage() {
|
||||
retry: false,
|
||||
})
|
||||
const orderTimelineVisible = profileQuery.data?.data.orderTimelineVisible === true
|
||||
const workerCanAutoAcceptWithoutEvidence =
|
||||
profileQuery.data?.data.worker.level?.permissions.autoAcceptWithoutEvidence === true
|
||||
|
||||
const overviewQuery = useQuery({
|
||||
queryKey: ['worker-my-orders-overview'],
|
||||
@@ -297,7 +300,29 @@ export default function WorkerOrdersPage() {
|
||||
|
||||
async function submitAcceptance(values: AcceptanceFormValues) {
|
||||
if (!editingOrder) return
|
||||
if (acceptanceFiles.length === 0) {
|
||||
const isAcceptedEvidenceSupplement = canSupplementAcceptedEvidence(editingOrder)
|
||||
if (isAcceptedEvidenceSupplement) {
|
||||
if (acceptanceFiles.length === 0) {
|
||||
message.error('请上传新的验收图片')
|
||||
return
|
||||
}
|
||||
try {
|
||||
await supplementWorkerAcceptedOrderEvidence(editingOrder.workOrderId, {
|
||||
files: acceptanceFiles,
|
||||
})
|
||||
message.success('验收图片已补充')
|
||||
setEditingOrder(null)
|
||||
setAcceptanceFiles([])
|
||||
form.resetFields()
|
||||
await refreshAll()
|
||||
} catch (error) {
|
||||
message.error(error instanceof Error ? error.message : '补充验收图片失败')
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
const canAutoAccept = canAutoAcceptOrder(editingOrder, workerCanAutoAcceptWithoutEvidence)
|
||||
if (acceptanceFiles.length === 0 && !canAutoAccept) {
|
||||
message.error('请上传验收图片')
|
||||
return
|
||||
}
|
||||
@@ -306,7 +331,7 @@ export default function WorkerOrdersPage() {
|
||||
note: values.note,
|
||||
files: acceptanceFiles,
|
||||
})
|
||||
message.success('已提交验收')
|
||||
message.success(canAutoAccept ? '已自动验收,可在 24 小时内补充图片' : '已提交验收')
|
||||
setEditingOrder(null)
|
||||
setAcceptanceFiles([])
|
||||
form.resetFields()
|
||||
@@ -426,6 +451,7 @@ export default function WorkerOrdersPage() {
|
||||
const hasAcceptance = acceptanceFiles.length > 0
|
||||
const draftFiles = getUniqueAcceptanceFiles(getWorkerDraft(row))
|
||||
const draftCount = draftFiles.length
|
||||
const vipEvidencePending = isVipEvidencePending(row)
|
||||
|
||||
if (!hasAcceptance && !submittedAt && draftCount === 0) {
|
||||
return (
|
||||
@@ -444,6 +470,7 @@ export default function WorkerOrdersPage() {
|
||||
提交:{formatDateTime(submittedAt)}
|
||||
</Typography.Text>
|
||||
) : null}
|
||||
{vipEvidencePending ? <Tag color="purple">VIP 免审核,待补图</Tag> : null}
|
||||
{draftCount > 0 && !hasSubmittedAcceptance(row) ? (
|
||||
<div className="acceptance-draft-badge-wrap">
|
||||
<Tag color="processing" icon={<PictureOutlined />}>
|
||||
@@ -794,6 +821,9 @@ export default function WorkerOrdersPage() {
|
||||
<ImagePreviewList files={acceptanceFiles} size={32} maxVisible={3} />
|
||||
</div>
|
||||
) : null}
|
||||
{isVipEvidencePending(order) ? (
|
||||
<Tag color="purple">VIP 免审核,待补图</Tag>
|
||||
) : null}
|
||||
{draftCount > 0 && !hasSubmittedAcceptance(order) ? (
|
||||
<div className="worker-order-mobile-draft-files">
|
||||
<Tag color="processing" icon={<PictureOutlined />}>
|
||||
@@ -1160,7 +1190,7 @@ export default function WorkerOrdersPage() {
|
||||
<Modal
|
||||
title={
|
||||
editingOrder
|
||||
? hasSubmittedAcceptance(editingOrder)
|
||||
? canSupplementAcceptedEvidence(editingOrder) || hasSubmittedAcceptance(editingOrder)
|
||||
? '补充验收图片'
|
||||
: '验收图片'
|
||||
: '验收图片'
|
||||
@@ -1185,14 +1215,22 @@ export default function WorkerOrdersPage() {
|
||||
>
|
||||
取消
|
||||
</Button>
|
||||
<Button onClick={() => void saveAcceptanceImages(form.getFieldsValue())}>
|
||||
{hasSubmittedAcceptance(editingOrder) ? '保存修改' : '保存暂存'}
|
||||
</Button>
|
||||
{canSubmitAcceptance(editingOrder) ? (
|
||||
{canSupplementAcceptedEvidence(editingOrder) ? (
|
||||
<Button type="primary" onClick={() => form.submit()}>
|
||||
提交验收
|
||||
补充图片
|
||||
</Button>
|
||||
) : null}
|
||||
) : (
|
||||
<>
|
||||
<Button onClick={() => void saveAcceptanceImages(form.getFieldsValue())}>
|
||||
{hasSubmittedAcceptance(editingOrder) ? '保存修改' : '保存暂存'}
|
||||
</Button>
|
||||
{canSubmitAcceptance(editingOrder) ? (
|
||||
<Button type="primary" onClick={() => form.submit()}>
|
||||
提交验收
|
||||
</Button>
|
||||
) : null}
|
||||
</>
|
||||
)}
|
||||
</Space>
|
||||
) : null
|
||||
}
|
||||
@@ -1201,7 +1239,17 @@ export default function WorkerOrdersPage() {
|
||||
<Form.Item label="完成说明" name="note">
|
||||
<Input.TextArea rows={3} placeholder="可补充代练结果、注意事项或截图说明。" />
|
||||
</Form.Item>
|
||||
<Form.Item label="验收图片" required>
|
||||
<Form.Item
|
||||
label="验收图片"
|
||||
required={
|
||||
!editingOrder || !canAutoAcceptOrder(editingOrder, workerCanAutoAcceptWithoutEvidence)
|
||||
}
|
||||
extra={
|
||||
editingOrder && canAutoAcceptOrder(editingOrder, workerCanAutoAcceptWithoutEvidence)
|
||||
? 'VIP 免审核可先提交,验收后需在 24 小时内补充图片。'
|
||||
: undefined
|
||||
}
|
||||
>
|
||||
<ImageUpload
|
||||
scene="worker-acceptance"
|
||||
scope="worker"
|
||||
@@ -1224,12 +1272,38 @@ function canSubmitAcceptance(order: WorkOrder) {
|
||||
return ['in_progress', 'problem'].includes(order.status)
|
||||
}
|
||||
|
||||
function canAutoAcceptOrder(order: WorkOrder, workerCanAutoAcceptWithoutEvidence: boolean) {
|
||||
return (
|
||||
workerCanAutoAcceptWithoutEvidence &&
|
||||
!order.myShare &&
|
||||
order.sharing?.enabled !== true &&
|
||||
['in_progress', 'problem'].includes(order.status)
|
||||
)
|
||||
}
|
||||
|
||||
function canSupplementAcceptedEvidence(order: WorkOrder) {
|
||||
if (order.myShare || order.status !== 'accepted' || order.acceptance?.reviewMode !== 'vip_auto') {
|
||||
return false
|
||||
}
|
||||
const dueAt = Date.parse(String(order.acceptance.evidenceDueAt || ''))
|
||||
return Number.isFinite(dueAt) && dueAt > Date.now()
|
||||
}
|
||||
|
||||
function isVipEvidencePending(order: WorkOrder) {
|
||||
return (
|
||||
order.acceptance?.reviewMode === 'vip_auto' && order.acceptance?.evidenceStatus === 'pending'
|
||||
)
|
||||
}
|
||||
|
||||
/** 是否可编辑验收图片:未提交时可暂存,已提交(待验收)时可补充/修改 */
|
||||
function canEditAcceptanceImages(order: WorkOrder) {
|
||||
if (order.myShare) {
|
||||
return ['joined', 'submitted'].includes(order.myShare.status) && order.status !== 'accepted'
|
||||
}
|
||||
return ['in_progress', 'problem', 'pending_acceptance'].includes(order.status)
|
||||
return (
|
||||
['in_progress', 'problem', 'pending_acceptance'].includes(order.status) ||
|
||||
canSupplementAcceptedEvidence(order)
|
||||
)
|
||||
}
|
||||
|
||||
/** 是否已提交验收(整单 pending_acceptance / 拼单份额 submitted) */
|
||||
@@ -1237,7 +1311,7 @@ function hasSubmittedAcceptance(order: WorkOrder) {
|
||||
if (order.myShare) {
|
||||
return order.myShare.status === 'submitted'
|
||||
}
|
||||
return order.status === 'pending_acceptance'
|
||||
return order.status === 'pending_acceptance' || order.acceptance?.reviewMode === 'vip_auto'
|
||||
}
|
||||
|
||||
function getDisplayOrderNo(order: Pick<WorkOrder, 'platformOrderId'> | null | undefined): string {
|
||||
|
||||
Reference in New Issue
Block a user