fix: align audit and dispatch workflows and release failed requests
This commit is contained in:
@@ -94,7 +94,7 @@ async function inspect() {
|
||||
const token = ++previewQuery, generation = scope; busy.value = true; commandError.value = null; preview.value = null
|
||||
try { const result = await previewTripHandover(props.detail.trip.tripNo, selection()); if (token === previewQuery && generation === scope) preview.value = result }
|
||||
catch (cause) { if (generation === scope) commandError.value = getApiErrorDetails(cause, '交接核对未通过') }
|
||||
finally { if (generation === scope) busy.value = false }
|
||||
finally { pending.value = null; pendingRelease.value = null; if (generation === scope) busy.value = false }
|
||||
}
|
||||
async function confirm() {
|
||||
if (busy.value || !writable.value || (!pending.value && !preview.value)) return
|
||||
@@ -107,7 +107,7 @@ async function confirm() {
|
||||
pending.value = null; preview.value = null; selected.value = result; emit('saved'); ElMessage.success('交接已记录,请分别核对原资源任务结束')
|
||||
await load()
|
||||
} catch (cause) { if (generation === scope) { if (cause instanceof ApiResponseError && /^A04/.test(cause.code)) { pending.value = null; preview.value = null } commandError.value = getApiErrorDetails(cause, '交接未确认,请核对或重试') } }
|
||||
finally { if (generation === scope) busy.value = false }
|
||||
finally { pending.value = null; pendingRelease.value = null; if (generation === scope) busy.value = false }
|
||||
}
|
||||
async function release() {
|
||||
if (busy.value || !releasable.value || (!pendingRelease.value && (!selected.value || !ending.value))) return
|
||||
@@ -121,18 +121,10 @@ async function release() {
|
||||
} catch (cause) {
|
||||
if (generation === scope) {
|
||||
commandError.value = getApiErrorDetails(cause, '任务结束未确认,请核对或重试')
|
||||
if (cause instanceof ApiResponseError && /^A04/.test(cause.code)) {
|
||||
pendingRelease.value = null
|
||||
const number = selected.value?.handoverNo
|
||||
await load()
|
||||
if (generation === scope) {
|
||||
selected.value = rows.value.find(row => row.handoverNo === number) || null
|
||||
if (!selected.value) ending.value = null
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
finally { if (generation === scope) busy.value = false }
|
||||
finally { pending.value = null; pendingRelease.value = null; if (generation === scope) busy.value = false }
|
||||
}
|
||||
onBeforeUnmount(() => { scope++; query++; previewQuery++; vehicleQuery++; driverQuery++ })
|
||||
</script>
|
||||
@@ -144,7 +136,7 @@ onBeforeUnmount(() => { scope++; query++; previewQuery++; vehicleQuery++; driver
|
||||
<p>交接后原车辆和司机分别结束实际任务。已经签收或完成退回的货物保留原运输记录。</p>
|
||||
<LoadErrorState v-if="error" title="交接记录加载失败" :message="error.message" @retry="load"><template #details><ApiErrorMeta :details="error" /></template></LoadErrorState>
|
||||
<div v-if="writable && (detail.trip.status === 'IN_TRANSIT' || pending)">
|
||||
<p v-if="pending">上次交接结果尚待确认;重试使用原请求及原内容。</p>
|
||||
|
||||
<el-form label-position="top" :disabled="busy || !!pending || !!pendingRelease" class="density-form handover-form">
|
||||
<el-form-item label="接替车辆" required><el-select v-model="form.vehicleId" filterable remote :remote-method="searchVehicles" :loading="vehicleLoading" @focus="searchVehicles()">
|
||||
<el-option v-if="detail.trip.vehicleId && !vehicles.some(row => row.id === detail.trip.vehicleId)" :value="detail.trip.vehicleId" :label="detail.trip.vehiclePlate || '当前车辆'" />
|
||||
@@ -166,7 +158,7 @@ onBeforeUnmount(() => { scope++; query++; previewQuery++; vehicleQuery++; driver
|
||||
<p>本次交接 {{ preview.cargo.remainingPalletIds.length }} 个实托,占 {{ handoverNumber(preview.cargo.occupied.palletSpaces) }} 托位、{{ handoverNumber(preview.cargo.occupied.weightKg) }} kg、{{ handoverNumber(preview.cargo.occupied.volumeCbm) }} m³。</p>
|
||||
<table class="density-table"><thead><tr><th>客户排车单</th><th>交接箱数</th></tr></thead><tbody><tr v-for="(cargo, index) in preview.cargo.remainingCargo" :key="index"><td>{{ cargo.dispatchNo }}</td><td>{{ cargo.packages }}</td></tr></tbody></table>
|
||||
</template>
|
||||
<el-button v-if="preview || pending" type="primary" :loading="busy" @click="confirm">{{ pending ? '重试原交接请求' : '确认实际交接' }}</el-button>
|
||||
<el-button v-if="preview || pending" type="primary" :loading="busy" @click="confirm">{{ '确认实际交接' }}</el-button>
|
||||
</div>
|
||||
<div v-if="commandError" role="alert"><p>{{ commandError.message }}</p><ApiErrorMeta :details="commandError" /></div>
|
||||
<div class="workbench-table"><DataTable v-model:page="page" v-model:page-size="size" :data="rows" :columns="columns" :loading="loading" :total="total" row-key="handoverNo" empty-text="暂无在途交接记录">
|
||||
@@ -183,13 +175,13 @@ onBeforeUnmount(() => { scope++; query++; previewQuery++; vehicleQuery++; driver
|
||||
<p>原司机任务:{{ selected.snapshot.previous.driverId === selected.snapshot.replacement.driverId ? '司机继续执行' : selected.driverRelease ? `已结束 · ${time(selected.driverRelease.actualEndAt)} · ${selected.driverRelease.location}` : '尚未结束' }}</p>
|
||||
<p>交接前已完成派送:{{ selected.snapshot.cargo.completedDeliveries.map(row => row.deliveryNo).join('、') || '—' }}</p>
|
||||
<template v-if="ending || pendingRelease">
|
||||
<p v-if="pendingRelease">上次任务结束结果尚待确认;重试不会释放后续车次占用。</p>
|
||||
|
||||
<el-form label-position="top" class="density-form handover-form" :disabled="busy || !!pendingRelease">
|
||||
<el-form-item label="实际任务结束时间" required><el-date-picker v-model="endForm.actualEndAt" type="datetime" value-format="YYYY-MM-DDTHH:mm:ssZ" /></el-form-item>
|
||||
<el-form-item label="实际任务结束地点" required><el-input v-model="endForm.location" maxlength="500" placeholder="请输入原车辆或司机实际结束任务的地点" /></el-form-item>
|
||||
<el-form-item v-if="ending === 'VEHICLE'" label="车辆实际状态" required><el-select v-model="endForm.vehicleStatus"><el-option value="IN_SERVICE" label="在役" /><el-option value="MAINTENANCE" label="维修中" /><el-option value="INACTIVE" label="停用" /><el-option value="RETURNED" label="已归还" /></el-select></el-form-item>
|
||||
</el-form>
|
||||
<el-button v-if="releasable" type="primary" :loading="busy" @click="release">{{ pendingRelease ? '重试原任务结束请求' : '确认原资源任务结束' }}</el-button>
|
||||
<el-button v-if="releasable" type="primary" :loading="busy" @click="release">{{ '确认原资源任务结束' }}</el-button>
|
||||
</template>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
Reference in New Issue
Block a user