diff --git a/src/modules/overseas-warehouse/pages/LastMileOrdersView.vue b/src/modules/overseas-warehouse/pages/LastMileOrdersView.vue index cca3c05f..0f1231e6 100644 --- a/src/modules/overseas-warehouse/pages/LastMileOrdersView.vue +++ b/src/modules/overseas-warehouse/pages/LastMileOrdersView.vue @@ -26,6 +26,11 @@ import { useAccessPreviewStore } from '@/core/access/accessPreview' import { overseasWarehousePermissions as permission } from '../permissions' import { lastMileStatusLabel, packageDifferenceText, toLastMileOrderListItem } from '../lastMilePresentation' import type { LastMileOrderListItem } from '../types' +import { reworkRelabelApplications } from '../relabelRework' +const reworkOpen = ref(false) +const reworkSaving = ref(false) +const reworkOptions = ref>([]) +const reworkForm = reactive({ relabelNo: '', remark: '' }) const rows = ref([]) const submitExport = useExportTask() const access = useAccessPreviewStore() @@ -955,7 +960,7 @@ async function reviewDirectRelabel(source: object) { } } function canConfirmRelabel(row: { relabelStatusCode?: string }) { return row.relabelStatusCode === 'CUSTOMER_CONFIRM_PENDING' } -function canReworkRelabel(row: { relabelStatusCode?: string }) { return ['CUSTOMER_CONFIRM_PENDING', 'PROCESSING'].includes(row.relabelStatusCode ?? '') } +function canReworkRelabel(row: LastMileOrderListItem) { return reworkRelabelApplications(row).length > 0 } function hasRelabelActions(row: LastMileOrderListItem) { return access.can(permission.relabelOrderStatus) && Boolean(row.relabelOrderNo) @@ -986,7 +991,7 @@ function lastMileRowActions(row: LastMileOrderListItem): RowActionItem[] { { key: 'hold', label: row.detained ? '解除暂扣' : '暂扣订单', priority: 300, tone: 'warning', visible: access.can(permission.lastMileOrderTransfer) && (row.detained || row.currentStatusCode === 'INBOUND_COMPLETED') }, { key: 'manual-nodes', label: '人工修改节点', priority: 200, visible: access.can(permission.lastMileOrderTransfer) }, { key: 'confirm-relabel', label: '换标完成确认', priority: 150, visible: access.can(permission.relabelOrderStatus) && Boolean(row.relabelOrderNo) && canConfirmRelabel(row) }, - { key: 'rework-relabel', label: '重新换标', priority: 100, tone: 'danger', divided: true, visible: access.can(permission.relabelOrderStatus) && Boolean(row.relabelOrderNo) && canReworkRelabel(row) }, + { key: 'rework-relabel', label: '换标退回重做', priority: 100, tone: 'danger', divided: true, visible: access.can(permission.relabelOrderStatus) && canReworkRelabel(row) }, ] } function handleLastMileRowAction(command: string, row: LastMileOrderListItem) { @@ -1011,16 +1016,26 @@ async function confirmRelabel(row: { relabelOrderNo?: string }) { await load() } catch (error) { if (error !== 'cancel' && error !== 'close') ElMessage.error(getApiErrorDetails(error, '换标完成确认失败').message) } } -async function reworkRelabel(row: { relabelOrderNo?: string }) { - const relabelNo = row.relabelOrderNo - if (!relabelNo) return +function reworkRelabel(row: LastMileOrderListItem) { + reworkOptions.value = reworkRelabelApplications(row) + if (!reworkOptions.value.length) return + reworkForm.relabelNo = reworkOptions.value[0].relabelNo + reworkForm.remark = '' + reworkOpen.value = true +} +async function submitReworkRelabel() { + if (reworkSaving.value || !reworkForm.relabelNo || !reworkForm.remark.trim()) return + const relabelNo = reworkForm.relabelNo + reworkSaving.value = true try { const task = await getRelabelReviewTask(relabelNo) - const { value } = await ElMessageBox.prompt('填写退回原因,仓库将重新执行换标并上传照片。', '重新换标', { customClass: 'admin-density-confirm', inputType: 'textarea', inputValidator: (value) => Boolean(value?.trim()) && value.trim().length <= 1000 || '请填写 1 至 1000 字原因', confirmButtonText: '确认重新换标', cancelButtonText: '取消' }) - await returnRelabelForRework(relabelNo, task.version, value.trim(), crypto.randomUUID()) + if (task.taskStatus !== 'WAIT_REVIEW') { ElMessage.warning('仓库尚未提交完工复核,暂不能退回重做'); return } + await returnRelabelForRework(relabelNo, task.version, reworkForm.remark.trim(), crypto.randomUUID()) ElMessage.success('已退回重新换标') + reworkOpen.value = false await load() - } catch (error) { if (error !== 'cancel' && error !== 'close') ElMessage.error(getApiErrorDetails(error, '重新换标失败').message) } + } catch (error) { ElMessage.error(getApiErrorDetails(error, '重新换标失败').message) } + finally { reworkSaving.value = false } } function openDetail(source: object) { const row = source as LastMileOrderListItem @@ -1255,6 +1270,12 @@ onMounted(() => { void load() })
节点节点时间
{{ node.label }}
+ + + + + +