diff --git a/src/option/settlement/formalSettlementTable.js b/src/option/settlement/formalSettlementTable.js index 83e9f1f..390c4e1 100644 --- a/src/option/settlement/formalSettlementTable.js +++ b/src/option/settlement/formalSettlementTable.js @@ -35,8 +35,8 @@ export const sourceColumns = [ ]; export const detailColumns = [ - { label: '单据号', prop: 'documentNo', minWidth: 180 }, - { label: '运单号', prop: 'waybillNo', minWidth: 160 }, + { label: '单据号', prop: 'documentNo', minWidth: 180, link: true }, + { label: '运单号', prop: 'waybillNo', minWidth: 160, link: true }, { label: '车号', prop: 'vehicleNo', minWidth: 130 }, { label: '发货地址', prop: 'departureAddress', minWidth: 180 }, { label: '到货地址', prop: 'arrivalAddress', minWidth: 180 }, diff --git a/src/option/settlement/preSettlementTable.js b/src/option/settlement/preSettlementTable.js index b383b92..01ab798 100644 --- a/src/option/settlement/preSettlementTable.js +++ b/src/option/settlement/preSettlementTable.js @@ -40,7 +40,7 @@ export const settlementSummaryColumns = [ export const settlementDetailColumns = [ { label: '单据号', prop: 'documentNo', minWidth: 180, link: true }, - { label: '运单号', prop: 'waybillNo', minWidth: 160 }, + { label: '运单号', prop: 'waybillNo', minWidth: 160, link: true }, { label: '车号', prop: 'vehicleNo', minWidth: 130 }, { label: '发货地址', prop: 'departureAddress', minWidth: 180 }, { label: '到货地址', prop: 'arrivalAddress', minWidth: 180 }, diff --git a/src/utils/settlement-detail-link.js b/src/utils/settlement-detail-link.js new file mode 100644 index 0000000..d218711 --- /dev/null +++ b/src/utils/settlement-detail-link.js @@ -0,0 +1,51 @@ +import { getList as getReceivablePayableDetailList } from '@/api/settlement/receivable-payable-detail'; +import { getList as getWaybillList } from '@/api/business/waybill-manage'; + +// 结算明细的「单据号」是应收应付明细单据号(应收 YS…/应付 YF…),按结算类型落到对应菜单页 +const SETTLEMENT_DETAIL_PATHS = { + receivable: '/settlement/receivable-detail', + payable: '/settlement/payable-detail', +}; + +const unwrapPage = response => { + const body = response?.data || response || {}; + return body?.data || body; +}; + +const firstRecordId = data => (Array.isArray(data) ? data : data?.records || [])[0]?.id || ''; + +export const settlementDetailPath = settlementType => + SETTLEMENT_DETAIL_PATHS[settlementType] || SETTLEMENT_DETAIL_PATHS.payable; + +/** + * 结算明细行「单据号」对应的应收应付明细ID:已落库的明细自带 sourceDetailId,未落库的行按单据号回查。 + */ +export const resolveReceivablePayableDetailId = async (row = {}, settlementType) => { + if (row.sourceDetailId) return row.sourceDetailId; + if (!row.documentNo) return ''; + try { + const data = unwrapPage( + await getReceivablePayableDetailList(1, 1, { + documentNo: row.documentNo, + settlementType, + }) + ); + return firstRecordId(data); + } catch (error) { + return ''; + } +}; + +/** + * 结算明细行「运单号」对应的运单ID:总单来源的明细没有 waybillId(运单号列存的是总单号),按运单号回查。 + */ +export const resolveWaybillId = async (row = {}) => { + if (row.waybillId) return row.waybillId; + if (!row.waybillNo) return ''; + try { + const data = unwrapPage(await getWaybillList(1, 1, { waybillNo: row.waybillNo })); + return firstRecordId(data); + } catch (error) { + return ''; + } +}; diff --git a/src/views/settlement/components/formal-settlement-editor.vue b/src/views/settlement/components/formal-settlement-editor.vue index bdaee89..b9d29d3 100644 --- a/src/views/settlement/components/formal-settlement-editor.vue +++ b/src/views/settlement/components/formal-settlement-editor.vue @@ -259,7 +259,14 @@ show-overflow-tooltip >