From 9ca7237741f0a1b62adb4a7f6ff05d1fc8e8be17 Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Sat, 8 Aug 2026 15:05:37 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pages/OceanBookingsView.vue | 107 +++++++++++++++--- src/modules/trucking/api/platformTrucking.ts | 1 + .../components/TruckAppointmentForm.vue | 5 + .../pages/TruckAppointmentsView.test.ts | 2 +- .../trucking/pages/TruckAppointmentsView.vue | 34 +++--- src/modules/trucking/types.ts | 1 + 6 files changed, 118 insertions(+), 32 deletions(-) diff --git a/src/modules/ocean-bookings/pages/OceanBookingsView.vue b/src/modules/ocean-bookings/pages/OceanBookingsView.vue index 2f0a4fd4..28d23f5e 100644 --- a/src/modules/ocean-bookings/pages/OceanBookingsView.vue +++ b/src/modules/ocean-bookings/pages/OceanBookingsView.vue @@ -1,22 +1,101 @@ -海运订舱维护订舱申请、船期及放舱信息新增订舱查看编辑{{ row.vesselName || '—' }} / {{ row.voyageNo }} - + + + + 订舱列表维护海运订舱申请、船期及放舱信息 + + + + + 订舱列表共 {{ total }} 条 + 新增订舱 + 查看编辑 + {{ row.status === 'RELEASED' ? '是' : '否' }} + {{ row.vesselName || '—' }}{{ row.voyageNo }} + + + + 暂无订舱记录 + + + + diff --git a/src/modules/trucking/api/platformTrucking.ts b/src/modules/trucking/api/platformTrucking.ts index cebe9840..2055f872 100644 --- a/src/modules/trucking/api/platformTrucking.ts +++ b/src/modules/trucking/api/platformTrucking.ts @@ -41,6 +41,7 @@ export async function listTruckAppointments(query: TruckAppointmentQuery = {}) { keyword: query.keyword?.trim() || undefined, status: query.status || undefined, containerBookingId: query.containerBookingId || undefined, + containerType: query.containerType || undefined, }, }) return normalizePage(unwrapApiResponse(response)) diff --git a/src/modules/trucking/components/TruckAppointmentForm.vue b/src/modules/trucking/components/TruckAppointmentForm.vue index f4a0a1cd..c8630f3d 100644 --- a/src/modules/trucking/components/TruckAppointmentForm.vue +++ b/src/modules/trucking/components/TruckAppointmentForm.vue @@ -22,12 +22,15 @@ defineExpose({ validate }) 关联资源:{{ relationText }};柜型由关联柜体返回(只读) + 关联资源 + + 运输与时间计划 @@ -43,12 +46,14 @@ defineExpose({ validate }) + 费用信息 RMB RMB + 门店信息与备注 diff --git a/src/modules/trucking/pages/TruckAppointmentsView.test.ts b/src/modules/trucking/pages/TruckAppointmentsView.test.ts index 808079fc..9ed040c2 100644 --- a/src/modules/trucking/pages/TruckAppointmentsView.test.ts +++ b/src/modules/trucking/pages/TruckAppointmentsView.test.ts @@ -25,7 +25,7 @@ describe('TruckAppointmentsView', () => { it('loads the real list and renders relationship snapshots', async () => { const wrapper = mount(TruckAppointmentsView, { global: { plugins: [ElementPlus] } }) await flushPromises() - expect(listTruckAppointments).toHaveBeenCalledWith({ page: 1, size: 20, keyword: '', status: '', containerBookingId: '' }) + expect(listTruckAppointments).toHaveBeenCalledWith({ page: 1, size: 20, keyword: '', status: '', containerBookingId: '', containerType: '' }) expect(wrapper.text()).toContain('TA-9001') expect(wrapper.text()).toContain('柜体 77') expect(wrapper.text()).toContain('宁波运输') diff --git a/src/modules/trucking/pages/TruckAppointmentsView.vue b/src/modules/trucking/pages/TruckAppointmentsView.vue index f475b5d3..68797086 100644 --- a/src/modules/trucking/pages/TruckAppointmentsView.vue +++ b/src/modules/trucking/pages/TruckAppointmentsView.vue @@ -14,22 +14,25 @@ import { TRUCK_APPOINTMENT_STATUSES, truckAppointmentStatusLabels, type TruckApp const router = useRouter(); const rows = ref([]); const loading = ref(false); const loaded = ref(false); const page = ref(1); const pageSize = ref(20); const total = ref(0); const loadError = ref(null) const access = useAccessPreviewStore() -const filters = ref({ keyword: '', status: '' as TruckAppointmentStatus | '', containerBookingId: '' }); const applied = ref({ ...filters.value }) +const filters = ref({ keyword: '', status: '' as TruckAppointmentStatus | '', containerBookingId: '', containerType: '' }); const applied = ref({ ...filters.value }) const fields = computed(() => [ - { key: 'keyword', type: 'input', label: '关键词', placeholder: '委托单位、预约单号、车牌' }, + { key: 'keyword', type: 'input', label: '关键词', placeholder: '委托单位、派车单号、车牌号' }, { key: 'status', type: 'select', label: '状态', placeholder: '全部状态', options: TRUCK_APPOINTMENT_STATUSES.map((value) => ({ value, label: truckAppointmentStatusLabels[value] })) }, - { key: 'containerBookingId', type: 'input', label: '柜体 ID', placeholder: '按关联柜体筛选' }, + { key: 'containerType', type: 'select', label: '柜型', placeholder: '全部柜型', options: [ + { value: '20GP', label: '20GP' }, { value: '40GP', label: '40GP' }, { value: '40HC', label: '40HC' }, + ] }, ]) const columns: DataTableColumn[] = [ { key: 'actions', label: '操作', width: 150, fixed: 'left', slotName: 'actions' }, - { key: 'appointmentNo', prop: 'appointmentNo', label: '预约单号', minWidth: 170 }, - { key: 'relation', label: '关联资源', minWidth: 220, slotName: 'relation' }, - { key: 'company', label: '承运商', minWidth: 150, slotName: 'company' }, - { key: 'driver', label: '司机/车头', minWidth: 150, slotName: 'driver' }, - { key: 'store', label: '门店', minWidth: 130, slotName: 'store' }, - { key: 'plannedLoadingAt', label: '预计装箱时间', minWidth: 170, formatter: (row: TruckAppointmentResource) => formatDateTime(row.plannedLoadingAt) }, + { key: 'appointmentNo', prop: 'appointmentNo', label: '派车单号', minWidth: 170 }, + { key: 'containerBookingId', prop: 'containerBookingId', label: '关联柜体', minWidth: 130, formatter: (row: TruckAppointmentResource) => row.containerBookingId || '—' }, + { key: 'company', label: '运输公司', minWidth: 160, slotName: 'company' }, + { key: 'driver', label: '司机', minWidth: 130, slotName: 'driver' }, + { key: 'vehicleNo', prop: 'vehicleNo', label: '车头号', minWidth: 120, formatter: (row: TruckAppointmentResource) => row.vehicleNo || '—' }, + { key: 'store', label: '门店', minWidth: 140, slotName: 'store' }, { key: 'payableAmount', label: '应付拖车费', minWidth: 130, formatter: (row: TruckAppointmentResource) => row.payableAmount ? `¥${row.payableAmount}` : '—' }, { key: 'receivableAmount', label: '应收拖车费', minWidth: 130, formatter: (row: TruckAppointmentResource) => row.receivableAmount ? `¥${row.receivableAmount}` : '—' }, + { key: 'plannedLoadingAt', label: '预计装箱日期', minWidth: 170, formatter: (row: TruckAppointmentResource) => formatDateTime(row.plannedLoadingAt) }, { key: 'status', label: '状态', width: 130, slotName: 'status' }, { key: 'attachments', label: '附件', width: 90, formatter: (row: TruckAppointmentResource) => String(row.attachments?.length || 0) }, ] @@ -40,22 +43,20 @@ function statusLabel(value: unknown) { : String(value || '—') } async function load() { loading.value = true; loadError.value = null; try { const result = await listTruckAppointments({ page: page.value, size: pageSize.value, ...applied.value } as TruckAppointmentQuery); rows.value = result.records; total.value = result.total; loaded.value = true } catch (error) { rows.value = []; total.value = 0; loadError.value = getApiErrorDetails(error, '拖车预约加载失败,请稍后重试') } finally { loading.value = false } } -function search(model: QueryModel) { applied.value = { keyword: String(model.keyword || ''), status: (model.status || '') as TruckAppointmentStatus | '', containerBookingId: String(model.containerBookingId || '') }; page.value = 1; void load() } -function reset() { filters.value = { keyword: '', status: '', containerBookingId: '' }; search(filters.value) } +function search(model: QueryModel) { applied.value = { keyword: String(model.keyword || ''), status: (model.status || '') as TruckAppointmentStatus | '', containerBookingId: '', containerType: String(model.containerType || '') }; page.value = 1; void load() } +function reset() { filters.value = { keyword: '', status: '', containerBookingId: '', containerType: '' }; search(filters.value) } onMounted(load) - 拖车预约维护拖车预约、关联资源与派车状态 拖车预约列表共 {{ total }} 条 新增拖车 - {{ row.customerName || '—' }}{{ row.entrustingPartyName || '委托单位待关联' }} · 出仓单 {{ row.outboundOrderId || '—' }} · 柜体 {{ row.containerBookingId || '—' }}柜型 {{ row.relatedContainerType || '由关联资源返回' }} {{ row.carrierName || row.carrierId || '—' }} - {{ row.driverName || '—' }}{{ row.vehicleNo || '—' }} + {{ row.driverName || '—' }}{{ row.driverPhone || '—' }} {{ row.storeName || '—' }} 查看编辑 @@ -66,8 +67,7 @@ onMounted(load) diff --git a/src/modules/trucking/types.ts b/src/modules/trucking/types.ts index 90026d89..d4a18c86 100644 --- a/src/modules/trucking/types.ts +++ b/src/modules/trucking/types.ts @@ -125,6 +125,7 @@ export interface TruckAppointmentQuery { keyword?: string status?: TruckAppointmentStatus | '' containerBookingId?: string | '' + containerType?: string | '' } export interface TruckAppointmentPage {
维护订舱申请、船期及放舱信息
维护海运订舱申请、船期及放舱信息
维护拖车预约、关联资源与派车状态