This commit is contained in:
2026-09-17 13:36:31 +08:00
parent 5d00618c53
commit 9c9cb91593
18 changed files with 317 additions and 32 deletions
@@ -47,7 +47,7 @@ const selectedVehicle = ref('')
const query = reactive({
orderNo: '',
orderType: '',
sourceStage: 'RECEIVED' as '' | 'PLAN' | 'RECEIVED',
sourceStage: 'RECEIVED' as '' | 'PLAN' | 'RECEIVED' | 'RELABEL',
fbaWarehouseCode: '',
})
const warehouseTab = ref<'ALL' | 'LAX' | 'NYC'>('ALL')
@@ -105,6 +105,10 @@ function number(value: unknown, digits = 0) {
function dateTime(value: unknown) {
return formatOverseasDateTime(value)
}
function privateWarehouse(item: DispatchPalletCandidateDto) {
if (item.destinationType !== 'PRIVATE') return '—'
return [item.deliveryAddress, item.postalCode].map((value) => String(value || '').trim()).filter(Boolean).join(' · ') || '—'
}
function orderType(value: unknown) {
return (
(
@@ -158,7 +162,7 @@ async function load() {
loadError.value = null
try {
candidates.value = await listDispatchCandidates({
planIds: planIds.value.length ? planIds.value.join(',') : undefined,
planIds: query.sourceStage !== 'RELABEL' && planIds.value.length ? planIds.value.join(',') : undefined,
orderNo: query.orderNo.trim() || undefined,
fbaWarehouseCode: query.fbaWarehouseCode.trim() || undefined,
sourceStage: query.sourceStage || undefined,
@@ -295,7 +299,11 @@ async function submit() {
return
}
const relabelOrders = [...new Set(assigned.value.filter((item) => item.sourceStage === 'RELABEL')
.map((item) => String(item.orderNo || '').trim()).filter(Boolean))]
.map((item) => String(item.orderRefs || '').trim()).filter(Boolean))]
if (assigned.value.some((item) => item.sourceStage === 'RELABEL' && !String(item.orderRefs || '').trim())) {
ElMessage.warning('换标来源单号缺失,请刷新后重新选择')
return
}
if (relabelOrders.length && (relabelOrders.length !== 1 || assigned.value.some((item) => item.sourceStage !== 'RELABEL'))) {
ElMessage.warning('一张换标单的托盘需要单独排车')
return
@@ -363,13 +371,15 @@ watch([warehouseTab, () => query.orderType], () => {
<OperationErrorToast :details="mutationError" />
<AppDialog class="admin-density-dialog admin-density" :model-value="modelValue" title="智能排车" width="min(1800px, calc(100vw - 40px))" @update:model-value="close($event)">
<section class="dispatch-query" aria-label="智能排车筛选">
<el-input v-model="query.orderNo" clearable placeholder="订单号" @keyup.enter="load" />
<el-input v-model="query.orderNo" clearable :placeholder="query.sourceStage === 'RELABEL' ? '换标单号' : '订单号 / 换标单号'" @keyup.enter="load" />
<el-select v-model="query.orderType" clearable placeholder="全部订单类型"><el-option v-for="option in orderTypeOptions" :key="option.value" :label="option.label" :value="option.value" /></el-select>
<el-select v-model="query.sourceStage" clearable placeholder="全部状态"><el-option label="入库完成托盘" value="RECEIVED" /><el-option label="计划托盘" value="PLAN" /></el-select>
<el-select v-model="query.sourceStage" clearable placeholder="全部来源"><el-option label="已入库 / 待出库换标" value="RECEIVED" /><el-option label="待出库换标单" value="RELABEL" /><el-option label="计划托盘" value="PLAN" /></el-select>
<el-input v-model="query.fbaWarehouseCode" clearable placeholder="FBA仓库" @keyup.enter="load" />
<el-button type="primary" :loading="loading" @click="load">查询</el-button><el-button :disabled="loading" @click="reset">重置</el-button>
</section>
<p v-if="query.sourceStage === 'RELABEL'" class="dispatch-source-hint">仅展示客户已确认、卡车派送且尚未排车的换标单。沿用原入库库存和托盘,按本次换标箱唛及新目的仓排车,无需重新生成入库单。</p>
<nav class="warehouse-tabs density-tabs" aria-label="海外仓筛选">
<button
v-for="tab in [
@@ -425,6 +435,9 @@ watch([warehouseTab, () => query.orderType], () => {
>
<el-table-column label="目的地FBA" width="110"
><template #default="{ row }">{{ text(row.first.fbaWarehouseCode) }}</template></el-table-column
>
<el-table-column label="私人仓" min-width="220" show-overflow-tooltip
><template #default="{ row }">{{ privateWarehouse(row.first) }}</template></el-table-column
>
<el-table-column label="体积(m³)" width="100" align="right"
><template #default="{ row }">{{