返回列表{{ detail?.bookingNo || '新增订舱' }}
{{ detail.customerName || '—' }} · {{ detail.pol || '—' }} → {{ detail.pod || '—' }}
-
-
{{ actionError.message }}
-
- 状态历史
{{ event.fromStatus || '—' }} → {{ event.toStatus }} · {{ event.operatorName || '—' }}
+
+
返回列表{{ detail?.bookingNo || '新增订舱' }}
{{ detail.customerName || '—' }} · {{ detail.pol || '—' }} → {{ detail.pod || '—' }}
{{ statusLabel(detail.status) }}
+
+
+ {{ actionError.message }}
+ 订舱信息
{{ statusLabel(nextStatus) }}保存
+ 状态历史
当前进度:{{ statusLabel(detail.status) }}
当前状态{{ statusLabel(event.fromStatus) }} → {{ statusLabel(event.toStatus) }}当前状态{{ event.operatorName || '系统' }}
-
+
diff --git a/src/modules/trucking/pages/TruckAppointmentCreateView.vue b/src/modules/trucking/pages/TruckAppointmentCreateView.vue
index 311d9f41..b3a014d9 100644
--- a/src/modules/trucking/pages/TruckAppointmentCreateView.vue
+++ b/src/modules/trucking/pages/TruckAppointmentCreateView.vue
@@ -2,15 +2,15 @@
import { reactive, ref } from 'vue'
import { useRouter } from 'vue-router'
import { ElMessage } from 'element-plus'
-import AppDrawer from '@/shared/components/AppDrawer.vue'
import ApiErrorMeta from '@/shared/components/ApiErrorMeta.vue'
import { getApiErrorDetails, type ApiErrorDetails } from '@/shared/api/http'
import TruckAppointmentForm from '../components/TruckAppointmentForm.vue'
import TruckAttachmentDialog from '../components/TruckAttachmentDialog.vue'
import { createTruckAppointment } from '../api/platformTrucking'
import type { SaveTruckAppointmentRequest } from '../types'
-const router = useRouter(); const open = ref(true); const saving = ref(false); const attachmentOpen = ref(false); const error = ref
(null)
+const router = useRouter(); const saving = ref(false); const attachmentOpen = ref(false); const error = ref(null)
const form = reactive({ expectedVersion: 0, plannedLoadingAt: null, payableAmount: '0.00', receivableAmount: '0.00', currency: 'RMB' })
async function submit() { saving.value = true; error.value = null; try { await createTruckAppointment({ ...form }); ElMessage.success('拖车预约已创建'); router.push({ name: 'trucking' }) } catch (err) { error.value = getApiErrorDetails(err, '创建失败,请稍后重试') } finally { saving.value = false } }
-
+返回列表
+
diff --git a/src/modules/trucking/pages/TruckAppointmentDetailView.vue b/src/modules/trucking/pages/TruckAppointmentDetailView.vue
index 3adc9c17..2209ea1d 100644
--- a/src/modules/trucking/pages/TruckAppointmentDetailView.vue
+++ b/src/modules/trucking/pages/TruckAppointmentDetailView.vue
@@ -2,7 +2,6 @@
import { computed, onMounted, reactive, ref } from 'vue'
import { useRoute, useRouter } from 'vue-router'
import { ElMessage, ElMessageBox } from 'element-plus'
-import AppDrawer from '@/shared/components/AppDrawer.vue'
import LoadErrorState from '@/shared/components/LoadErrorState.vue'
import ApiErrorMeta from '@/shared/components/ApiErrorMeta.vue'
import { getApiErrorDetails, type ApiErrorDetails } from '@/shared/api/http'
@@ -11,7 +10,7 @@ import { getTruckAppointment, listTruckAppointmentAttachments, listTruckAppointm
import TruckAppointmentForm from '../components/TruckAppointmentForm.vue'
import TruckAttachmentDialog from '../components/TruckAttachmentDialog.vue'
import { truckAppointmentStatusLabels, type SaveTruckAppointmentRequest, type TruckAppointmentResource, type TruckAppointmentStatus, type TruckAppointmentStatusHistory } from '../types'
-const route = useRoute(); const router = useRouter(); const open = ref(true); const loading = ref(false); const saving = ref(false); const statusSaving = ref(false); const attachmentOpen = ref(false); const resource = ref(null); const error = ref(null); const form = reactive({ expectedVersion: 0 })
+const route = useRoute(); const router = useRouter(); const loading = ref(false); const saving = ref(false); const statusSaving = ref(false); const attachmentOpen = ref(false); const resource = ref(null); const error = ref(null); const form = reactive({ expectedVersion: 0 })
const history = ref([])
const access = useAccessPreviewStore(); const editing = computed(() => route.query.edit === '1'); const id = computed(() => String(route.params.id)); const canEdit = computed(() => access.can('platform:firstleg:truck-appointment:edit') && !['COMPLETED','CANCELLED'].includes(resource.value?.status || '') && editing.value); const canChangeStatus = computed(() => access.can('platform:firstleg:truck-appointment:operate')); const canManageAttachments = computed(() => access.can('platform:firstleg:truck-appointment:edit'))
async function loadRelated() { if (!resource.value) return; const [attachments, histories] = await Promise.all([listTruckAppointmentAttachments(id.value), listTruckAppointmentHistory(id.value)]); resource.value.attachments = attachments; history.value = histories }
@@ -28,14 +27,15 @@ async function changeStatus(status: TruckAppointmentStatus) { if (!resource.valu
onMounted(load)
-
-
- 当前状态:{{ truckAppointmentStatusLabels[resource.status] }}{{ truckAppointmentStatusLabels[status] }}
状态历史
- {{ item.action }}{{ item.fromStatus || '—' }} → {{ item.toStatus || '—' }}{{ item.operatorName || item.operatorId || '系统' }} · {{ item.createdAt || item.occurredAt || '—' }} · {{ item.reason }}
-
+ 返回列表
+
+ 当前状态:{{ truckAppointmentStatusLabels[resource.status] }}{{ truckAppointmentStatusLabels[status] }}
状态历史
- {{ item.action }}{{ item.fromStatus || '—' }} → {{ item.toStatus || '—' }}{{ item.operatorName || item.operatorId || '系统' }} · {{ item.createdAt || item.occurredAt || '—' }} · {{ item.reason }}
+
diff --git a/src/modules/trucking/pages/TruckAppointmentsView.vue b/src/modules/trucking/pages/TruckAppointmentsView.vue
index 4c769194..aab5c801 100644
--- a/src/modules/trucking/pages/TruckAppointmentsView.vue
+++ b/src/modules/trucking/pages/TruckAppointmentsView.vue
@@ -46,12 +46,13 @@ async function load() { loading.value = true; loadError.value = null; try { cons
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)
+function openDetail(row: TruckAppointmentResource, edit = false) { router.push({ name: 'trucking-detail', params: { id: String(row.id) }, query: edit ? { edit: '1' } : undefined }) }
-
-
+ 拖车预约列表暂时无法加载{{ loadError.message }}
重新加载
+
拖车预约列表
共 {{ total }} 条
新增拖车
@@ -59,7 +60,7 @@ onMounted(load)
{{ row.driverName || '—' }}{{ row.driverPhone || '—' }}
{{ row.storeName || '—' }}
- 查看编辑
+
暂无拖车预约
@@ -67,6 +68,6 @@ onMounted(load)