Release/test 合并上生产 #2
@@ -12,7 +12,7 @@ import ListPageLayout from '@/shared/components/ListPageLayout.vue'
|
||||
import LoadErrorState from '@/shared/components/LoadErrorState.vue'
|
||||
import OperationErrorToast from '@/shared/components/OperationErrorToast.vue'
|
||||
import QueryToolbar, { type QueryField, type QueryModel } from '@/shared/components/QueryToolbar.vue'
|
||||
import { convertLastMileOrderToInboundPlan, listLastMileOrders, setLastMileOrderDetained, setLastMileOrderPalletMergeRequired, transferLastMileOrders } from '../api/lastMileOrders'
|
||||
import { convertLastMileOrderToInboundPlan, listLastMileOrders, setLastMileOrderDetained, transferLastMileOrders } from '../api/lastMileOrders'
|
||||
import { useAccessPreviewStore } from '@/core/access/accessPreview'
|
||||
import { overseasWarehousePermissions as permission } from '../permissions'
|
||||
import { toLastMileOrderListItem } from '../lastMilePresentation'
|
||||
@@ -27,7 +27,6 @@ const page = ref(1)
|
||||
const pageSize = ref(10)
|
||||
const total = ref(0)
|
||||
const selectedRows = ref<LastMileOrderListItem[]>([])
|
||||
const cancellableMergeCount = computed(() => selectedRows.value.filter((row) => row.palletMergeFlag === 'REQUIRED').length)
|
||||
const actionLoading = ref(false)
|
||||
const actionError = ref<ApiErrorDetails | null>(null)
|
||||
const transferOpen = ref(false)
|
||||
@@ -65,8 +64,6 @@ const columns: DataTableColumn[] = [
|
||||
{ key: 'actions', label: '操作', width: 270, fixed: 'left', slotName: 'actions' },
|
||||
{ key: 'selection', type: 'selection', width: 48, fixed: 'left' },
|
||||
{ key: 'orderNo', prop: 'orderNo', label: '尾程单号', minWidth: 170 },
|
||||
{ key: 'consolidated', prop: 'consolidated', label: '合托标记', width: 100, hideable: false },
|
||||
{ key: 'palletMergeRelation', prop: 'palletMergeRelation', label: '合托关联订单', minWidth: 180, hideable: false },
|
||||
{ key: 'warning', prop: 'warning', label: '预警', width: 90 },
|
||||
{ key: 'orderType', prop: 'orderType', label: '订单类型', minWidth: 110 },
|
||||
{ key: 'rejectedAt', prop: 'rejectedAt', label: '拒收时间', minWidth: 150 },
|
||||
@@ -163,57 +160,6 @@ async function submitDetained() {
|
||||
} catch (error) { actionError.value = getApiErrorDetails(error, target.detained ? '解除暂扣失败,请重试' : '暂扣失败,请重试') }
|
||||
finally { actionLoading.value = false }
|
||||
}
|
||||
async function togglePalletMerge(row: LastMileOrderListItem) {
|
||||
const required = row.palletMergeFlag !== 'REQUIRED'
|
||||
try {
|
||||
await ElMessageBox.confirm(
|
||||
required ? `标记后,PDA扫描入仓码 ${row.inboundCode} 的箱唛时会显示合托提示。` : '确认取消该订单的PDA合托提示?',
|
||||
required ? '合托标记' : '取消合托标记',
|
||||
{ type: 'warning', confirmButtonText: required ? '确认标记' : '确认取消', cancelButtonText: '返回' },
|
||||
)
|
||||
} catch { return }
|
||||
actionLoading.value = true; actionError.value = null
|
||||
try {
|
||||
await setLastMileOrderPalletMergeRequired(row.id, { palletMergeRequired: required })
|
||||
ElMessage.success(required ? '已标记合托,PDA扫描箱唛时将显示提示' : '已取消合托标记')
|
||||
await load()
|
||||
} catch (error) { actionError.value = getApiErrorDetails(error, required ? '合托标记失败,请重试' : '取消合托标记失败,请重试') }
|
||||
finally { actionLoading.value = false }
|
||||
}
|
||||
async function batchPalletMerge() {
|
||||
const targets = selectedRows.value.filter((row) => row.palletMergeFlag !== 'MERGED')
|
||||
if (!targets.length) { ElMessage.warning('请选择至少 1 条未完成合托的尾程订单'); return }
|
||||
try {
|
||||
await ElMessageBox.confirm(
|
||||
`确定为选中的 ${targets.length} 条尾程订单标记合托吗?PDA扫描对应箱唛时将显示合托提示。`,
|
||||
'批量合托标记',
|
||||
{ type: 'warning', confirmButtonText: '确认标记', cancelButtonText: '返回' },
|
||||
)
|
||||
} catch { return }
|
||||
actionLoading.value = true; actionError.value = null
|
||||
try {
|
||||
await Promise.all(targets.map((row) => setLastMileOrderPalletMergeRequired(row.id, { palletMergeRequired: true })))
|
||||
selectedRows.value = []
|
||||
ElMessage.success(`已标记 ${targets.length} 条订单合托`)
|
||||
await load()
|
||||
} catch (error) { actionError.value = getApiErrorDetails(error, '批量合托标记失败,请重试') }
|
||||
finally { actionLoading.value = false }
|
||||
}
|
||||
async function cancelBatchPalletMerge() {
|
||||
const targets = selectedRows.value.filter((row) => row.palletMergeFlag === 'REQUIRED')
|
||||
if (!targets.length) { ElMessage.warning('请选择至少 1 条待合托订单'); return }
|
||||
try {
|
||||
await ElMessageBox.confirm(`确定取消选中的 ${targets.length} 条订单合托标记吗?`, '取消合托标记', { type: 'warning', confirmButtonText: '确认取消', cancelButtonText: '返回' })
|
||||
} catch { return }
|
||||
actionLoading.value = true; actionError.value = null
|
||||
try {
|
||||
await Promise.all(targets.map((row) => setLastMileOrderPalletMergeRequired(row.id, { palletMergeRequired: false })))
|
||||
selectedRows.value = []
|
||||
ElMessage.success(`已取消 ${targets.length} 条订单合托标记`)
|
||||
await load()
|
||||
} catch (error) { actionError.value = getApiErrorDetails(error, '取消合托标记失败,请重试') }
|
||||
finally { actionLoading.value = false }
|
||||
}
|
||||
async function submitTransfer() {
|
||||
if (!transferForm.warehouseId.trim() || !transferForm.warehouseCode.trim() || !transferForm.warehouseName.trim()) {
|
||||
ElMessage.warning('请填写目的仓 ID、代码和名称')
|
||||
@@ -261,7 +207,7 @@ onMounted(() => { void load() })
|
||||
</LoadErrorState>
|
||||
</template>
|
||||
<section v-if="!loadError" class="surface-panel table-panel"><DataTable v-model:page="page" v-model:page-size="pageSize" :data="rows" :columns="columns" :loading="loading" :total="total" preference-key="overseas-last-mile-orders" row-key="id" empty-text="暂无尾程订单" :row-class-name="({ row }: { row: LastMileOrderListItem }) => row.detained ? 'is-detained-row' : ''" @selection-change="onSelectionChange" @update:page="load()" @update:page-size="page = 1; load()">
|
||||
<template #toolbar-actions><el-button v-if="access.can(permission.lastMileOrderTransfer)" plain :disabled="!selectedRows.length || actionLoading" @click="openTransfer">转仓</el-button><el-button v-if="access.can(permission.lastMileOrderTransfer)" type="primary" plain :disabled="!selectedRows.length || actionLoading" @click="batchPalletMerge">合托标记</el-button><el-button v-if="access.can(permission.lastMileOrderTransfer)" type="warning" plain :disabled="!cancellableMergeCount || actionLoading" @click="cancelBatchPalletMerge">取消合托</el-button><el-button v-if="access.can(permission.inboundOrderCreate)" type="primary" plain :disabled="selectedRows.length !== 1 || actionLoading" @click="convertInboundPlan">生成入库计划</el-button></template>
|
||||
<template #toolbar-actions><el-button v-if="access.can(permission.lastMileOrderTransfer)" plain :disabled="!selectedRows.length || actionLoading" @click="openTransfer">转仓</el-button><el-button v-if="access.can(permission.inboundOrderCreate)" type="primary" plain :disabled="selectedRows.length !== 1 || actionLoading" @click="convertInboundPlan">生成入库计划</el-button></template>
|
||||
<template #actions="{ row }"><el-button size="small" plain type="primary" @click="openDetail(row)"><Eye :size="15" />查看</el-button><el-button v-if="access.can(permission.lastMileOrderTransfer)" size="small" plain :type="(row as LastMileOrderListItem).detained ? 'success' : 'danger'" :disabled="actionLoading" @click="openDetained(row as LastMileOrderListItem)">{{ (row as LastMileOrderListItem).detained ? '解除暂扣' : '暂扣' }}</el-button></template>
|
||||
<template #pagination-left>共 {{ total }} 条尾程订单 · 已选 {{ selectedRows.length }} 条</template>
|
||||
</DataTable></section>
|
||||
|
||||
@@ -330,7 +330,7 @@ describe('overseas warehouse first-batch prototype contract', () => {
|
||||
'actions', 'selection', 'orderNo', 'warning', 'orderType', 'rejectedAt', 'inboundCode', 'owner', 'warehouse',
|
||||
'transferWarehouse', 'fbaWarehouse', 'containerNo', 'abnormal', 'held', 'pallets',
|
||||
'cartons', 'volume', 'quantity', 'volumeWeight', 'portEta', 'portAta', 'warehouseEta', 'inboundOrderNo',
|
||||
'outboundOrderNo', 'dispatchOrderNo', 'relabelOrderNo', 'relabelStatus', 'consolidated', 'status',
|
||||
'outboundOrderNo', 'dispatchOrderNo', 'relabelOrderNo', 'relabelStatus', 'status',
|
||||
'createdAt', 'internalRemark', 'customerRemark', 'warehouseRemark',
|
||||
])
|
||||
expect(columnKeys('InboundOrdersView.vue')).toEqual([
|
||||
|
||||
Reference in New Issue
Block a user