diff --git a/.workbuddy/memory/MEMORY.md b/.workbuddy/memory/MEMORY.md index ef1ee3f..0784184 100644 --- a/.workbuddy/memory/MEMORY.md +++ b/.workbuddy/memory/MEMORY.md @@ -66,7 +66,7 @@ ## 表单 / 自检 / 导出 - placeholder 只写 `请输入`/`请选择`;例外:`请输入或选择车辆`、日期区间 `起`/`止`、示例值。校验 message 须带字段名。 - `business-crud-page.vue`:option 经 `cloneOption` 克隆,独立表单页走 `PageAvueForm`。 -- 自检:`curl "localhost:2889/src/xxx.vue"` 与 `"...?vue&type=style&index=0&scoped=true&lang.scss"`(200 / 500)。`vite build` 在 `facelogin.vue` 被沙箱中断,不能作唯一校验。dev `VITE_APP_API=/api` 代理 `172.16.203.228:8000`。 +- 自检:`curl "localhost:2888/src/xxx.vue"` 与 `"...?vue&type=style&index=0&scoped=true&lang.scss"`(200 / 500)。`vite build` 在 `facelogin.vue` 被沙箱中断,不能作唯一校验。dev `VITE_APP_API=/api` 代理 `172.16.203.228:8000`。 - 导出:前端 `exportColumns` 后端未用,以 `XxxExportExcel.java` 为准;BladeX `BeanUtil` 类型不兼容静默跳过(`Date` → `LocalDateTime` 丢值,用 `DateUtil.fromDate`)。 ## Element Plus 图标两种用法的机制差异(易误判) diff --git a/src/api/settlement/preSettlement.js b/src/api/settlement/preSettlement.js index bb61417..e35f2a6 100644 --- a/src/api/settlement/preSettlement.js +++ b/src/api/settlement/preSettlement.js @@ -24,6 +24,8 @@ export const getContractList = (current, size, params) => export const getFeeOptions = () => request({ url: `${baseUrl}/fee-options`, method: 'get' }); +export const getNextNo = () => request({ url: `${baseUrl}/next-no`, method: 'get' }); + export const getCandidateDetails = (current, size, params) => request({ url: `${baseUrl}/candidate-details`, 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/business/master-order.vue b/src/views/business/master-order.vue index 225ed98..7be51d6 100644 --- a/src/views/business/master-order.vue +++ b/src/views/business/master-order.vue @@ -79,7 +79,7 @@
{{ timeRange(row) }}
{{ goodsSummary(row) }}
创建人:{{ row.createUserName || '-' }}
-创建时间:{{ row.createTime || '-' }}
+创建时间:{{ formatDate(row.createTime) }}