diff --git a/web-admin/src/components/business/pl-plan-view-tabs/index.vue b/web-admin/src/components/business/pl-plan-view-tabs/index.vue index bd46ed76f..5f8efd61c 100644 --- a/web-admin/src/components/business/pl-plan-view-tabs/index.vue +++ b/web-admin/src/components/business/pl-plan-view-tabs/index.vue @@ -57,6 +57,21 @@ +
+ 本次安排 + + 司机 + {{ tripDriverDisplay }} + + + 押运员 + {{ tripEscortDisplay }} + +
+ + plan.value?.transportStatus === 'arranged' || Boolean(plan.value?.transportId) + ) + + function formatTripPerson(name?: string | null, phone?: string | null) { + const n = (name || '').trim() + const p = (phone || '').trim() + if (!n && !p) return '—' + if (n && p) return `${n} ${p}` + return n || p + } + + const tripDriverDisplay = computed(() => + formatTripPerson( + transport.value?.driverName || plan.value?.driverName, + transport.value?.driverPhone + ) + ) + + const tripEscortDisplay = computed(() => + formatTripPerson( + transport.value?.escortName || plan.value?.escortName, + transport.value?.escortPhone || plan.value?.escortPhone + ) + ) + const displayFreightType = computed(() => transport.value?.freightType || 'by_weight') const displayDistanceKm = computed(() => { @@ -1617,6 +1660,35 @@ } } + .pl-plan-trip-personnel { + display: flex; + align-items: center; + flex-wrap: wrap; + gap: 10px 16px; + padding: 10px 12px; + border: 1px solid #a7f3d0; + border-radius: 8px; + background: #ecfdf5; + } + + .pl-plan-trip-personnel__label { + font-size: 12px; + font-weight: 600; + color: #047857; + } + + .pl-plan-trip-personnel__item { + display: inline-flex; + align-items: center; + gap: 6px; + min-width: 0; + } + + .pl-plan-trip-personnel__value { + font-size: 13px; + color: #1e293b; + } + .pl-plan-view-stop-block { display: flex; flex-direction: column;