From 1a9cd55d66f0fe7c79dc5d56f6937c0fc3b5771d Mon Sep 17 00:00:00 2001 From: b2894lxlx <517289602@qq.com> Date: Thu, 10 Sep 2026 22:50:18 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E8=B0=83=E6=95=B4=E5=AF=BC=E5=85=A5?= =?UTF-8?q?=E8=BF=90=E5=8D=95=202=E3=80=81=E8=B0=83=E6=95=B4=E5=AF=B9?= =?UTF-8?q?=E8=B4=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/business/waybill-manage.js | 1 + src/api/settlement/transportReconciliation.js | 4 +- src/option/business/common.js | 5 + src/option/business/project-apply.js | 21 +- .../settlement/receivable-payable-detail.js | 4 +- src/option/transportCapacity/driver.js | 5 + .../transportCapacity/transport-vehicle.js | 15 +- .../components/waybill-import-dialog.vue | 19 +- src/views/business/contract-manage-change.vue | 31 ++- src/views/business/project-apply.vue | 44 ++-- src/views/business/voucher-manage.vue | 12 +- .../components/pre-settlement-editor.vue | 27 +-- .../transport-reconciliation-editor.vue | 58 ++++-- .../settlement/receivable-payable-detail.vue | 42 +++- src/views/transportCapacity/driver.vue | 10 +- src/views/transportCapacity/vehicle.vue | 28 +-- src/views/vehicle/customer-archive.vue | 197 ++++++++++++++---- 17 files changed, 374 insertions(+), 149 deletions(-) diff --git a/src/api/business/waybill-manage.js b/src/api/business/waybill-manage.js index 2786ce6..78d93e9 100644 --- a/src/api/business/waybill-manage.js +++ b/src/api/business/waybill-manage.js @@ -36,6 +36,7 @@ export const roadLoading = ids => }); export const getImportBatches = params => request({ url: `${baseUrl}/import-batch/list`, method: 'get', params }); +export const getImportBatchNextCode = () => request({ url: `${baseUrl}/import-batch/next-code`, method: 'get' }); export const getImportDetails = params => request({ url: `${baseUrl}/import-batch/details`, method: 'get', params }); export const removeImportBatches = ids => request({ url: `${baseUrl}/import-batch/remove`, method: 'post', params: { ids } }); export const getImportOptions = () => request({ url: `${baseUrl}/import-batch/options`, method: 'get' }); diff --git a/src/api/settlement/transportReconciliation.js b/src/api/settlement/transportReconciliation.js index ac9d0f5..296d71e 100644 --- a/src/api/settlement/transportReconciliation.js +++ b/src/api/settlement/transportReconciliation.js @@ -29,8 +29,8 @@ export const complete = id => request({ url: `${baseUrl}/complete`, method: 'post', params: { id } }); export const completeWithData = data => request({ url: `${baseUrl}/complete-with-data`, method: 'post', data }); -export const template = mode => - request({ url: `${baseUrl}/template`, method: 'get', params: { mode }, responseType: 'blob' }); +export const template = (mode, params) => + request({ url: `${baseUrl}/template`, method: 'get', params: { mode, ...params }, responseType: 'blob' }); const importFile = (url, id, file) => { const data = new FormData(); diff --git a/src/option/business/common.js b/src/option/business/common.js index b418ada..7d07f95 100644 --- a/src/option/business/common.js +++ b/src/option/business/common.js @@ -97,6 +97,11 @@ export const businessTypeOptions = [ { label: '普通业务', value: '普通业务' }, ]; +export const businessModeOptions = [ + { label: '国内运输', value: '国内运输' }, + { label: '跨境运输', value: '跨境运输' }, +]; + export const settlementModeOptions = [ { label: '先票后款', value: '先票后款' }, { label: '先款后票', value: '先款后票' }, diff --git a/src/option/business/project-apply.js b/src/option/business/project-apply.js index f4cfa61..399287b 100644 --- a/src/option/business/project-apply.js +++ b/src/option/business/project-apply.js @@ -1,5 +1,6 @@ import { auditColumns, + businessModeOptions, businessTypeOptions, createCrudOption, nonNegativeRule, @@ -129,7 +130,7 @@ export const option = createCrudOption([ hide: true, minWidth: 140, maxlength: 20, - rules: textRule('项目简称', 20, true), + rules: textRule('项目简称', 20), }, { label: '项目类型', @@ -305,6 +306,15 @@ export const option = createCrudOption([ hide: true, minWidth: 130, }, + { + label: '业务模式', + prop: 'businessMode', + type: 'select', + dicData: businessModeOptions, + hide: true, + minWidth: 120, + rules: [selectRule('业务模式')], + }, { label: '项目规模(万元)', prop: 'projectScale', @@ -323,6 +333,15 @@ export const option = createCrudOption([ minWidth: 150, rules: [nonNegativeRule('预计利润')], }, + { + label: '利润率(%)', + prop: 'profitRate', + type: 'number', + precision: 2, + hide: true, + minWidth: 120, + rules: [nonNegativeRule('利润率')], + }, { label: '资金需求(万元)', prop: 'fundDemand', diff --git a/src/option/settlement/receivable-payable-detail.js b/src/option/settlement/receivable-payable-detail.js index 745ca2e..7987665 100644 --- a/src/option/settlement/receivable-payable-detail.js +++ b/src/option/settlement/receivable-payable-detail.js @@ -67,9 +67,7 @@ export const feeDetailBaseColumns = [ ]; export const feeDetailTailColumns = [ - { label: '原总金额', prop: 'originalAmountText', minWidth: 120 }, - { label: '调整金额', prop: 'adjustAmountText', minWidth: 120 }, - { label: '调整后总金额', prop: 'afterAmountText', minWidth: 140 }, + { label: '结算金额', prop: 'originalAmountText', minWidth: 120 }, { label: '备注', prop: 'remark', minWidth: 160 }, { label: '最后录入人', prop: 'updateUserName', minWidth: 120 }, { label: '最后录入时间', prop: 'updateTime', minWidth: 170 }, diff --git a/src/option/transportCapacity/driver.js b/src/option/transportCapacity/driver.js index 25c004c..415cabe 100644 --- a/src/option/transportCapacity/driver.js +++ b/src/option/transportCapacity/driver.js @@ -76,6 +76,11 @@ export const option = { prop: 'posts', minWidth: 150, }, + { + label: '驾驶车辆', + prop: 'drivingVehicle', + minWidth: 130, + }, { label: '所属组织', prop: 'organizationName', diff --git a/src/option/transportCapacity/transport-vehicle.js b/src/option/transportCapacity/transport-vehicle.js index 50247ad..50038c1 100644 --- a/src/option/transportCapacity/transport-vehicle.js +++ b/src/option/transportCapacity/transport-vehicle.js @@ -21,7 +21,7 @@ export const option = { label: '车牌号', prop: 'plateNo', search: true, - searchOrder: 6, + searchOrder: 7, slot: true, minWidth: 120, }, @@ -29,7 +29,7 @@ export const option = { label: '业务关系', prop: 'businessRelation', search: true, - searchOrder: 5, + searchOrder: 6, searchValue: '', type: 'select', dicData: [ @@ -50,11 +50,18 @@ export const option = { slot: true, minWidth: 150, }, + { + label: '使用部门', + prop: 'useDepartment', + search: true, + searchOrder: 3, + minWidth: 140, + }, { label: '车辆类型', prop: 'vehicleType', search: true, - searchOrder: 4, + searchOrder: 5, type: 'select', dicData: [ { label: '全部', value: '' }, @@ -108,7 +115,7 @@ export const option = { label: '车辆状态', prop: 'status', search: true, - searchOrder: 3, + searchOrder: 4, type: 'select', slot: true, dicData: [ diff --git a/src/views/business/components/waybill-import-dialog.vue b/src/views/business/components/waybill-import-dialog.vue index e15d170..33585a8 100644 --- a/src/views/business/components/waybill-import-dialog.vue +++ b/src/views/business/components/waybill-import-dialog.vue @@ -655,23 +655,10 @@ const extractRecords = res => { if (Array.isArray(data?.data?.records)) return data.data.records; return []; }; -// 批次号规则:PC + 导入日期 + 当日批次流水号(4 位),如 PC202606010001。 -const batchNoPrefix = 'PC'; -const batchNoSequenceLength = 4; +// 批次号由后端按 PC + 导入日期 + 当日流水生成,已删除数据也计入流水,避免唯一索引冲突。 const generateBatchNo = async () => { - const prefix = `${batchNoPrefix}${dayjs().format('YYYYMMDD')}`; - let maxSequence = 0; - try { - const res = await api.getImportBatches({ current: 1, size: 9999 }); - extractRecords(res).forEach(item => { - const no = String(item.batchNo || '').trim(); - if (!no.startsWith(prefix)) return; - maxSequence = Math.max(maxSequence, Number(no.slice(prefix.length)) || 0); - }); - } catch (error) { - maxSequence = 0; - } - return `${prefix}${String(maxSequence + 1).padStart(batchNoSequenceLength, '0')}`; + const res = await api.getImportBatchNextCode(); + return res?.data?.data || ''; }; // 承运商合同的承运商固定取合同乙方,与运单管理(waybill-manage-page)保持一致。 const getCarrierContractPartyName = (contract = {}) => diff --git a/src/views/business/contract-manage-change.vue b/src/views/business/contract-manage-change.vue index c0e0fcb..c654141 100644 --- a/src/views/business/contract-manage-change.vue +++ b/src/views/business/contract-manage-change.vue @@ -92,7 +92,7 @@
其它附件
批量下载
- + 上传附件
@@ -171,8 +171,33 @@ export default { savePlan(value, index) { if (index < 0) this.plans.push(value); else this.plans.splice(index, 1, value); if (value.defaultPlan) this.plans.forEach((item, current) => { if (current !== (index < 0 ? this.plans.length - 1 : index)) item.defaultPlan = false; }); }, handleSettlementTypeChange(value) { if (value !== '月结') { this.settlementRule.billCycleType = ''; this.settlementRule.billCutoffDay = ''; } else if (!this.settlementRule.billCycleType) this.settlementRule.billCycleType = '固定截单日'; if (value !== '固定天数周期结算') this.settlementRule.cycleDays = ''; }, handleCycleTypeChange(value) { if (value === '固定截单日' && !this.settlementRule.billCutoffDay) this.settlementRule.billCutoffDay = 25; if (value !== '固定截单日') this.settlementRule.billCutoffDay = ''; }, - handleAttachment(event) { const raw = event.raw; if (!raw) return; if (raw.size > 50 * 1024 * 1024) { this.$message.warning('单个文件大小不能超过50M'); return; } this.attachments.push({ name: raw.name, size: `${Math.ceil(raw.size / 1024)}KB`, uploadTime: this.$dayjs().format('YYYY-MM-DD HH:mm:ss') }); }, - handleContractFileChange(list) { this.contractFileRows = (list || []).map(item => ({ ...item, uploadTime: item.uploadTime || this.$dayjs().format('YYYY-MM-DD HH:mm:ss') })); }, + currentUploadUserName() { + const userInfo = this.$store.getters.userInfo || {}; + return userInfo.realName || userInfo.userName || ''; + }, + handleAttachment(event) { + const raw = event.raw; + if (!raw) return; + if (raw.size > 50 * 1024 * 1024) { + this.$message.warning('单个文件大小不能超过50M'); + return; + } + this.attachments.push({ + name: raw.name, + size: `${Math.ceil(raw.size / 1024)}KB`, + uploadUserName: this.currentUploadUserName(), + uploadTime: this.$dayjs().format('YYYY-MM-DD HH:mm:ss'), + }); + }, + handleContractFileChange(list) { + const uploadUserName = this.currentUploadUserName(); + const uploadTime = this.$dayjs().format('YYYY-MM-DD HH:mm:ss'); + this.contractFileRows = (list || []).map(item => ({ + ...item, + uploadUserName: item.uploadUserName || uploadUserName, + uploadTime: item.uploadTime || uploadTime, + })); + }, attachmentUrl(row = {}) { return row.url || row.link || row.fileUrl || row.downloadUrl || row.domain || ''; }, attachmentName(row = {}) { return row.originalName || row.name || row.fileName || '附件'; }, attachmentExtension(row = {}) { const source = String(this.attachmentName(row) || this.attachmentUrl(row)).split('?')[0]; const index = source.lastIndexOf('.'); return index > -1 ? source.slice(index + 1).toLowerCase() : ''; }, diff --git a/src/views/business/project-apply.vue b/src/views/business/project-apply.vue index 96f3623..d417b91 100644 --- a/src/views/business/project-apply.vue +++ b/src/views/business/project-apply.vue @@ -384,6 +384,16 @@ /> + + + + + 万元 + + + + +