支持已验收订单补图
This commit is contained in:
@@ -2100,7 +2100,7 @@ export async function remindWorkerOrderAcceptance(
|
||||
}
|
||||
}
|
||||
|
||||
/** VIP 自动验收订单在 24 小时内追加验收图片,不改变订单状态和结算结果。 */
|
||||
/** 已验收订单可追加验收图片,不改变订单状态和结算结果。 */
|
||||
export async function supplementWorkerAcceptedOrderEvidence(
|
||||
workOrderId: number | string,
|
||||
payload: JsonObject = {},
|
||||
@@ -2128,20 +2128,6 @@ export async function supplementWorkerAcceptedOrderEvidence(
|
||||
|
||||
const now = nowIso()
|
||||
const previous = safeParseJson(workOrder.acceptance_json)
|
||||
if (String(previous.reviewMode || '').trim() !== 'vip_auto') {
|
||||
throw createHttpError('该订单不支持验收后补图', {
|
||||
statusCode: 403,
|
||||
errorCode: 'work_order_evidence_supplement_not_allowed',
|
||||
})
|
||||
}
|
||||
const evidenceDueAt = String(previous.evidenceDueAt || '').trim()
|
||||
if (!evidenceDueAt || Date.parse(evidenceDueAt) <= Date.now()) {
|
||||
throw createHttpError('补充验收图片已超过 24 小时时限', {
|
||||
statusCode: 409,
|
||||
errorCode: 'work_order_evidence_supplement_expired',
|
||||
})
|
||||
}
|
||||
|
||||
const existingFiles = normalizeUploadedFiles(previous.files)
|
||||
const uploadedFiles = normalizeUploadedFiles(payload.files)
|
||||
const mergedFiles = [...existingFiles]
|
||||
@@ -2294,7 +2280,7 @@ async function submitWorkerSharingAcceptance(
|
||||
}
|
||||
}
|
||||
|
||||
/** VIP 拼单份额在免审核后 24 小时内补充验收图片。 */
|
||||
/** 已验收拼单份额可追加验收图片,不改变订单状态和结算结果。 */
|
||||
async function supplementWorkerAcceptedSharingEvidence(
|
||||
workOrder: WorkOrderRow,
|
||||
sharingShare: WorkOrderShareRow,
|
||||
@@ -2310,20 +2296,6 @@ async function supplementWorkerAcceptedSharingEvidence(
|
||||
|
||||
const now = nowIso()
|
||||
const previous = safeParseJson(sharingShare.acceptance_json)
|
||||
if (String(previous.reviewMode || '').trim() !== 'vip_auto') {
|
||||
throw createHttpError('该拼单份额不支持验收后补图', {
|
||||
statusCode: 403,
|
||||
errorCode: 'work_order_sharing_evidence_supplement_not_allowed',
|
||||
})
|
||||
}
|
||||
const evidenceDueAt = String(previous.evidenceDueAt || '').trim()
|
||||
if (!evidenceDueAt || Date.parse(evidenceDueAt) <= Date.now()) {
|
||||
throw createHttpError('补充验收图片已超过 24 小时时限', {
|
||||
statusCode: 409,
|
||||
errorCode: 'work_order_sharing_evidence_supplement_expired',
|
||||
})
|
||||
}
|
||||
|
||||
const existingFiles = normalizeUploadedFiles(previous.files)
|
||||
const uploadedFiles = normalizeUploadedFiles(payload.files)
|
||||
const mergedFiles = [...existingFiles]
|
||||
|
||||
@@ -292,6 +292,13 @@ export default function WorkerOrdersPage() {
|
||||
function openAcceptanceModal(order: WorkOrder) {
|
||||
markOrderAsRead(order)
|
||||
setEditingOrder(order)
|
||||
if (canSupplementAcceptedEvidence(order)) {
|
||||
// 已验收补图只上传新增文件,原有验收图片由服务端保留。
|
||||
setAcceptanceFiles([])
|
||||
form.resetFields()
|
||||
setDetailOrder(null)
|
||||
return
|
||||
}
|
||||
// 已提交:以已提交的验收资料为初始内容;未提交:以暂存草稿为初始内容
|
||||
const source = hasSubmittedAcceptance(order)
|
||||
? getWorkerAcceptance(order)
|
||||
@@ -1307,16 +1314,23 @@ export default function WorkerOrdersPage() {
|
||||
}
|
||||
>
|
||||
<Form form={form} layout="vertical" onFinish={submitAcceptance}>
|
||||
{!editingOrder || !canSupplementAcceptedEvidence(editingOrder) ? (
|
||||
<Form.Item label="完成说明" name="note">
|
||||
<Input.TextArea rows={3} placeholder="可补充代练结果、注意事项或截图说明。" />
|
||||
</Form.Item>
|
||||
) : null}
|
||||
<Form.Item
|
||||
label="验收图片"
|
||||
required={
|
||||
!editingOrder || !canAutoAcceptOrder(editingOrder, workerCanAutoAcceptWithoutEvidence)
|
||||
!editingOrder ||
|
||||
canSupplementAcceptedEvidence(editingOrder) ||
|
||||
!canAutoAcceptOrder(editingOrder, workerCanAutoAcceptWithoutEvidence)
|
||||
}
|
||||
extra={
|
||||
editingOrder && canAutoAcceptOrder(editingOrder, workerCanAutoAcceptWithoutEvidence)
|
||||
editingOrder && canSupplementAcceptedEvidence(editingOrder)
|
||||
? '仅可追加新图片,原有验收图片会保留。'
|
||||
: editingOrder &&
|
||||
canAutoAcceptOrder(editingOrder, workerCanAutoAcceptWithoutEvidence)
|
||||
? 'VIP 免审核可先提交,验收后需在 24 小时内补充图片。'
|
||||
: undefined
|
||||
}
|
||||
@@ -1375,10 +1389,7 @@ function canAutoAcceptOrder(order: WorkOrder, workerCanAutoAcceptWithoutEvidence
|
||||
}
|
||||
|
||||
function canSupplementAcceptedEvidence(order: WorkOrder) {
|
||||
const acceptance = getWorkerAcceptance(order)
|
||||
if (order.status !== 'accepted' || acceptance?.reviewMode !== 'vip_auto') return false
|
||||
const dueAt = Date.parse(String(acceptance.evidenceDueAt || ''))
|
||||
return Number.isFinite(dueAt) && dueAt > Date.now()
|
||||
return order.status === 'accepted'
|
||||
}
|
||||
|
||||
function isVipEvidencePending(order: WorkOrder) {
|
||||
@@ -1389,7 +1400,9 @@ function isVipEvidencePending(order: WorkOrder) {
|
||||
/** 是否可编辑验收图片:未提交时可暂存,已提交(待验收)时可补充/修改 */
|
||||
function canEditAcceptanceImages(order: WorkOrder) {
|
||||
if (order.myShare) {
|
||||
return ['joined', 'submitted'].includes(order.myShare.status) && order.status !== 'accepted'
|
||||
return (
|
||||
['joined', 'submitted'].includes(order.myShare.status) || canSupplementAcceptedEvidence(order)
|
||||
)
|
||||
}
|
||||
return (
|
||||
['in_progress', 'problem', 'pending_acceptance'].includes(order.status) ||
|
||||
@@ -1402,7 +1415,7 @@ function hasSubmittedAcceptance(order: WorkOrder) {
|
||||
if (order.myShare) {
|
||||
return order.myShare.status === 'submitted'
|
||||
}
|
||||
return order.status === 'pending_acceptance' || order.acceptance?.reviewMode === 'vip_auto'
|
||||
return order.status === 'pending_acceptance' || order.status === 'accepted'
|
||||
}
|
||||
|
||||
function getDisplayOrderNo(order: Pick<WorkOrder, 'platformOrderId'> | null | undefined): string {
|
||||
|
||||
Reference in New Issue
Block a user