Release/test 合并上生产 #2

Merged
admin merged 736 commits from release/test into main 2026-09-17 11:50:56 +08:00
4 changed files with 24 additions and 1 deletions
Showing only changes of commit f6cd60ec61 - Show all commits
@@ -72,6 +72,9 @@ export interface LastMileOrderSummaryDto {
relabelOrderNo?: string | null
relabelStatus?: string | null
palletMergeFlag?: string | null
/** Optional grouping facts returned by newer last-leg services. */
palletMergeBatchId?: string | null
palletMergeOrderNos?: string[] | null
currentStatus?: string | null
privateRemark?: string | null
customerRemark?: string | null
@@ -99,6 +99,9 @@ export function toLastMileOrderListItem(dto: LastMileOrderSummaryDto): LastMileO
relabelStatus: lastMileStatusLabel(dto.relabelStatus),
consolidated: palletMergeLabel(dto.palletMergeFlag),
palletMergeFlag: String(dto.palletMergeFlag ?? '').trim(),
palletMergeRelation: Array.isArray(dto.palletMergeOrderNos) && dto.palletMergeOrderNos.length
? dto.palletMergeOrderNos.map((value) => text(value)).join('、')
: dto.palletMergeBatchId ? `批次 ${text(dto.palletMergeBatchId)}` : '—',
status: lastMileStatusLabel(dto.currentStatus),
internalRemark: text(dto.privateRemark),
customerRemark: text(dto.customerRemark),
@@ -89,6 +89,7 @@ const columns: DataTableColumn[] = [
{ key: 'relabelOrderNo', prop: 'relabelOrderNo', label: '换标单号', minWidth: 150 },
{ key: 'relabelStatus', prop: 'relabelStatus', label: '换标状态', width: 110 },
{ key: 'consolidated', prop: 'consolidated', label: '合托标记', width: 100 },
{ key: 'palletMergeRelation', prop: 'palletMergeRelation', label: '合托关联订单', minWidth: 180 },
{ key: 'status', prop: 'status', label: '当前状态', width: 110 },
{ key: 'createdAt', prop: 'createdAt', label: '创建时间', minWidth: 170 },
{ key: 'internalRemark', prop: 'internalRemark', label: '备注(仅自己)', minWidth: 160 },
@@ -197,6 +198,21 @@ async function batchPalletMerge() {
} 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、代码和名称')
@@ -244,7 +260,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.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.lastMileOrderTransfer)" type="primary" plain :disabled="!selectedRows.length || actionLoading" @click="batchPalletMerge">合托标记</el-button><el-button v-if="access.can(permission.lastMileOrderTransfer)" type="warning" plain :disabled="!selectedRows.length || 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 #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>
+1
View File
@@ -37,6 +37,7 @@ export interface LastMileOrderListItem {
relabelStatus: string
consolidated: string
palletMergeFlag: string
palletMergeRelation: string
status: string
internalRemark: string
customerRemark: string