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 0fee5eb47..6edc7868a 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
@@ -171,81 +171,102 @@
-
现场回传信息
-
- 暂无现场链接
-
-
-
-
+ {{ ioOrder ? (ioOrder.kind === 'inbound' ? '入库单回传' : '出库单回传') : '现场回传信息' }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ row.unitLabel || row.unit || '—' }}
+
+
+
+
+
+
+
+
+
+
现场附件
+
-
-
-
-
-
- {{ row.businessType }}
-
- —
-
-
-
-
-
-
- —
-
-
-
-
-
-
- {{ rowHasSiteFeedback(row) ? '编辑' : '补充' }}
-
-
-
- 复制给现场
-
-
-
-
-
+ —
+
+
+
+
+ {{ ioOrderHasFeedback ? '编辑' : '补充' }}
+
+
+
+ 复制现场链接
+
+
+
+
+
+
+ 暂无现场链接
+
+
+
+
+
+
+
+
+
+ {{ row.businessType }}
+
+ —
+
+
+
+
+
+
+ —
+
+
+
+
+
+
+ {{ rowHasSiteFeedback(row) ? '编辑' : '补充' }}
+
+
+
+ 复制给现场
+
+
+
+
+
+
地磅单信息
@@ -455,6 +476,46 @@
:site-feedback-time="siteFeedbackTarget.siteFeedbackTime"
@success="handleFeedbackSaved"
/>
+
+
+
+
+
+
+
+
+ {{ row.unitLabel || row.unit || '—' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 取消
+ 确定
+
+
(null)
+ const ioOrderEditImagesCsv = ref('')
+
+ const ioOrderImageCsv = computed(() =>
+ Array.isArray(ioOrder.value?.siteFeedbackImages)
+ ? ioOrder.value!.siteFeedbackImages!.filter(Boolean).join(',')
+ : ''
+ )
+
+ const ioOrderHasFeedback = computed(() =>
+ Boolean(
+ ioOrder.value?.siteFeedbackRemark ||
+ (ioOrder.value?.siteFeedbackImages && ioOrder.value.siteFeedbackImages.length) ||
+ ioOrder.value?.siteFeedbackTime
+ )
+ )
+
+ const ioOrderViewFields = computed((): ViewField[] => {
+ if (!ioOrder.value) return []
+ const statusMap: Record = {
+ in_progress: '进行中',
+ completed: '已完成',
+ voided: '已作废'
+ }
+ const status = ioOrder.value.status
+ return [
+ { label: '单号', value: ioOrder.value.orderNo },
+ {
+ label: '状态',
+ value: statusMap[status] || status,
+ tagType:
+ status === 'completed' ? 'success' : status === 'voided' ? 'info' : 'warning'
+ },
+ { label: '计划号', value: ioOrder.value.planNo },
+ { label: '车牌', value: ioOrder.value.vehicleNo },
+ { label: '往来单位', value: ioOrder.value.partnerCompany },
+ {
+ label: '最近提交',
+ value: formatDateTime(ioOrder.value.siteFeedbackTime) || '—'
+ },
+ { label: '取货地址', value: ioOrder.value.pickupAddress, span: 'full' },
+ { label: '取货时间', value: formatDateTime(ioOrder.value.pickupTime) || '—' },
+ { label: '取货注意事项', value: ioOrder.value.pickupNotes, span: 'full' },
+ {
+ label: '送货地址',
+ value: ioOrder.value.destinationAddress || ioOrder.value.destinationName,
+ span: 'full'
+ },
+ { label: '送达时间', value: formatDateTime(ioOrder.value.deliveryTime) || '—' },
+ { label: '送货注意事项', value: ioOrder.value.destinationNotes, span: 'full' }
+ ]
+ })
+
+ function openIoOrderEditDialog() {
+ if (!ioOrder.value) return
+ ioOrderEditForm.value = {
+ ...ioOrder.value,
+ items: (ioOrder.value.items || []).map(it => ({ ...it }))
+ }
+ ioOrderEditImagesCsv.value = ioOrderImageCsv.value
+ ioOrderEditVisible.value = true
+ }
+
+ async function saveIoOrderEdit() {
+ if (!ioOrderEditForm.value) return
+ const api = ioOrderEditForm.value.kind === 'inbound' ? inboundOrderApi : outboundOrderApi
+ ioOrderSaving.value = true
+ try {
+ const images = ioOrderEditImagesCsv.value
+ ? ioOrderEditImagesCsv.value.split(',').map(s => s.trim()).filter(Boolean)
+ : []
+ await api.patch(ioOrderEditForm.value.id, {
+ siteFeedbackRemark: ioOrderEditForm.value.siteFeedbackRemark,
+ siteFeedbackImages: images,
+ items: (ioOrderEditForm.value.items || []).map(it => ({
+ id: it.id,
+ actualQty: it.actualQty
+ }))
+ })
+ ElMessage.success('保存成功')
+ ioOrderEditVisible.value = false
+ reload()
+ } catch (e) {
+ ElMessage.error(e instanceof Error ? e.message : '保存失败')
+ } finally {
+ ioOrderSaving.value = false
+ }
+ }
+
const feedbackImageList = computed(() => parsePlFeedbackImages(transport.value?.feedbackImages))
const feedbackImageCsv = computed(() => feedbackImageList.value.join(','))