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;