From af0ae031a5ae65a8deffb54eb8f9a9b0a6b792e6 Mon Sep 17 00:00:00 2001 From: zlwu Date: Thu, 3 Sep 2026 16:33:04 +0800 Subject: [PATCH] feat(web-admin): split archive qty vs price display flags Co-authored-by: Cursor --- .../index.vue | 25 +++--- .../PlPlanFormProductTable.vue | 81 ++++++++++--------- .../index.vue | 6 +- .../business/pl-plan-view-dialog/index.vue | 5 +- .../business/pl-plan-view-tabs/index.vue | 54 ++++++++----- 5 files changed, 105 insertions(+), 66 deletions(-) diff --git a/web-admin/src/components/business/pl-plan-archive-brand-view-block/index.vue b/web-admin/src/components/business/pl-plan-archive-brand-view-block/index.vue index ba7fe157d..97bdb0574 100644 --- a/web-admin/src/components/business/pl-plan-archive-brand-view-block/index.vue +++ b/web-admin/src/components/business/pl-plan-archive-brand-view-block/index.vue @@ -19,16 +19,16 @@ 品牌 实际数量 - 单价(元) - 金额(元) + 单价(元) + 金额(元) {{ brandRow.brandName || '—' }} {{ formatQty(brandRow.qty) }} - {{ formatPrice(brandRow.price) }} - + {{ formatPrice(brandRow.price) }} + {{ formatArchiveBrandAmount(brandRow.qty, brandRow.price) }} @@ -37,8 +37,8 @@ 合计 {{ formatQty(sumQty(item.rows)) }} - — - {{ formatAmountTotal(item.rows) }} + — + {{ formatAmountTotal(item.rows) }} @@ -55,9 +55,16 @@ } from '@/utils/pl-plan-archive-brand-view' import { useDictStore } from '@/store/modules/dict' - defineProps<{ - items: ArchiveBrandViewItem[] - }>() + withDefaults( + defineProps<{ + items: ArchiveBrandViewItem[] + /** 是否展示单价/金额列;默认 true */ + showPrice?: boolean + }>(), + { + showPrice: true + } + ) const dictStore = useDictStore() diff --git a/web-admin/src/components/business/pl-plan-form-dialog/PlPlanFormProductTable.vue b/web-admin/src/components/business/pl-plan-form-dialog/PlPlanFormProductTable.vue index 85abe95fa..6d9157ad9 100644 --- a/web-admin/src/components/business/pl-plan-form-dialog/PlPlanFormProductTable.vue +++ b/web-admin/src/components/business/pl-plan-form-dialog/PlPlanFormProductTable.vue @@ -173,7 +173,7 @@ () + const props = withDefaults( + defineProps<{ + products: PlanFormProductRow[] + showDelete?: boolean + showSelect?: boolean + /** 已加入运输计划的产品 ID,用于禁用合同预览中的「选择」按钮 */ + selectedProductIds?: string[] + editableRemark?: boolean + editableQty?: boolean + /** 产品信息区:别名 / 品牌可改 */ + editableAliasBrand?: boolean + /** 单位 / 包装规格 / 送货方式可下拉编辑(对齐报价单) */ + editablePackageDelivery?: boolean + /** 新增/编辑弹窗默认不展示实际数量 */ + showActualQty?: boolean + /** 展示归档品牌数量摘要(如:君正 12 / 红四方 13) */ + showBrandQty?: boolean + /** 仅实际数量可编辑,计划数量只读(归档弹窗) */ + editableActualQtyOnly?: boolean + /** 展示入库/出库数量列(不含价格) */ + showInboundOutboundQty?: boolean + /** 展示入库/出库数量、单价与计算金额列 */ + showArchiveIoFields?: boolean + /** 归档查看/表单:展示单价与金额列;默认 true(兼容旧用法) */ + showArchivePriceFields?: boolean + /** 入库/出库数量与价格可编辑(归档弹窗) */ + editableArchiveIoFields?: boolean + /** 归档:仅展示/编辑入库列(装货段) */ + archiveIoInboundOnly?: boolean + /** 归档:仅展示/编辑出库列(送货段) */ + archiveIoOutboundOnly?: boolean + /** 段次归档:入库/出库列统一展示为实际数量、单价、金额 */ + archiveSegmentLabels?: boolean + /** 归档段表单:仅保留产品名称、单位、计划数量与归档列 */ + archiveCompact?: boolean + }>(), + { + showArchivePriceFields: true + } + ) const emit = defineEmits<{ remove: [index: number] diff --git a/web-admin/src/components/business/pl-plan-transport-feedback-blocks/index.vue b/web-admin/src/components/business/pl-plan-transport-feedback-blocks/index.vue index 0db836632..eedb2a3aa 100644 --- a/web-admin/src/components/business/pl-plan-transport-feedback-blocks/index.vue +++ b/web-admin/src/components/business/pl-plan-transport-feedback-blocks/index.vue @@ -10,6 +10,7 @@ show-actual-qty show-brand-qty :show-archive-io-fields="showArchiveIoFields" + :show-archive-price-fields="showArchivePriceFields" :show-inbound-outbound-qty="!showArchiveIoFields" /> @@ -447,8 +448,10 @@ const props = withDefaults( defineProps<{ feedbackEditable?: boolean - /** 仅运输计划归档:展示入库/出库单价与金额 */ + /** 仅运输计划归档:展示入库/出库数量(及默认跟随的价格) */ showArchiveIoFields?: boolean + /** 归档查看:展示单价与金额;未传时跟随 showArchiveIoFields */ + showArchivePriceFields?: boolean /** 司机/出库单回传「实际数量」后展示仅供参考说明 */ showActualQtyDisclaimer?: boolean loading?: boolean @@ -494,6 +497,7 @@ { feedbackEditable: false, showArchiveIoFields: false, + showArchivePriceFields: undefined, showActualQtyDisclaimer: false, loading: false, canEditDriverFeedback: false, diff --git a/web-admin/src/components/business/pl-plan-view-dialog/index.vue b/web-admin/src/components/business/pl-plan-view-dialog/index.vue index 0cb9d79f7..b8c01cc52 100644 --- a/web-admin/src/components/business/pl-plan-view-dialog/index.vue +++ b/web-admin/src/components/business/pl-plan-view-dialog/index.vue @@ -36,6 +36,7 @@ :arrange-driver-url="driverUrl" :arrange-site-records="siteRecords" :show-archive-io-fields="showArchiveIoFields" + :show-archive-price-fields="showArchivePriceFields" :show-inbound-outbound-qty="showInboundOutboundQty" /> @@ -67,8 +68,10 @@ const props = defineProps<{ visible: boolean planId?: string - /** 仅运输计划归档:展示入库/出库单价与金额 */ + /** 仅运输计划归档:展示入库/出库数量(及默认跟随的价格) */ showArchiveIoFields?: boolean + /** 归档查看:展示单价与金额;未传时跟随 showArchiveIoFields */ + showArchivePriceFields?: boolean /** 计划概况产品表:展示入库/出库数量(不含单价与金额) */ showInboundOutboundQty?: boolean }>() 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 5742e1700..eae7cecf3 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 @@ -116,13 +116,14 @@ :products="loadView.products" compact show-stop-actual-qty - :show-stop-archive-price="showArchiveIoFields" + :show-stop-archive-price="effectiveShowArchivePrice" stop-archive-mode="load" />

暂无装货产品

暂无送货产品

props.showArchivePriceFields ?? props.showArchiveIoFields + ) + const emit = defineEmits<{ 'update:tab': [value: string] }>() @@ -1383,6 +1392,7 @@ const feedbackBlocksBind = computed(() => ({ feedbackEditable: props.feedbackEditable, showArchiveIoFields: props.showArchiveIoFields, + showArchivePriceFields: effectiveShowArchivePrice.value, showActualQtyDisclaimer: props.showActualQtyDisclaimer, loading: loading.value, canEditDriverFeedback: canEditDriverFeedback.value, @@ -1487,9 +1497,10 @@ const hasFreight = plan.value?.hasFreight === 1 const unit = freightUnitLabel.value const isByWeight = hasFreight && displayFreightType.value === 'by_weight' + const hideArchiveMoney = props.showArchiveIoFields && !effectiveShowArchivePrice.value // long: false — 强制七字段同一行展示 - return [ + const fields: ViewField[] = [ { label: '是否有运输费用', value: getPlYesNoLabel(plan.value?.hasFreight), long: false }, { label: '运输公里数', value: hasFreight ? displayDistanceKm.value : '—', long: false }, { @@ -1501,25 +1512,32 @@ label: `运输量(${unit})`, value: isByWeight ? displayTransportQty.value : '—', long: false - }, - { - label: `运输单价(元/${unit})`, - value: isByWeight ? displayFreightPrice.value : '—', - money: isByWeight, - long: false - }, - { - label: '运费金额(元)', - value: hasFreight ? displayFreightAmount.value : '—', - money: hasFreight, - long: false - }, + } + ] + if (!hideArchiveMoney) { + fields.push( + { + label: `运输单价(元/${unit})`, + value: isByWeight ? displayFreightPrice.value : '—', + money: isByWeight, + long: false + }, + { + label: '运费金额(元)', + value: hasFreight ? displayFreightAmount.value : '—', + money: hasFreight, + long: false + } + ) + } + fields.push( { label: '是否开票', value: hasFreight ? displayHasInvoiceLabel.value : '—', long: false }, { label: '运费备注', value: hasFreight ? plan.value?.freightRemark?.trim() || '—' : '—' } - ] + ) + return fields }) /** 危化证区域展示 CRM 标准名(productRows 已回填 standardProductName;库内 productName 可能是别名) */