From 14f8ebe30ac49fa29c44fc789a3a58657aed2abd Mon Sep 17 00:00:00 2001 From: LHD_HY <2872546851@qq.com> Date: Wed, 26 Nov 2025 17:56:45 +0800 Subject: [PATCH] =?UTF-8?q?bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/router/index.js | 14 +++ .../finance/components/FinanceForm.vue | 4 +- .../components/child/FinanceReportUpload.vue | 12 +-- .../components/child/FinancialStatement.vue | 81 +++++++++++++---- .../components/child/CompletionAndBidInfo.vue | 7 +- .../components/child/ContractInfo.vue | 8 +- .../components/child/ContractInfoDetail.vue | 2 +- .../components/QualificationForm.vue | 87 ++++++++++++------- .../child/QualificationFormChild.vue | 36 ++++---- .../enterpriseLibrary/qualification/index.vue | 57 ++++++------ .../components/RejectionItemForm.vue | 2 +- .../enterpriseLibrary/rejectionItem/index.vue | 3 +- .../components/AnalysisLabelItem.vue | 1 - .../components/child/ProjectFile.vue | 7 +- 14 files changed, 209 insertions(+), 112 deletions(-) diff --git a/src/router/index.js b/src/router/index.js index 0a045ec..84ccdfa 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -653,6 +653,20 @@ export const dynamicRoutes = [ } ] }, + { + path: '/analysisRule', + component: Layout, + hidden: true, + permissions: ['analysis:rule:list'], + children: [ + { + path: 'index', + component: () => import('@/views/template/templateInfo/components/AnalysisRule'), + name: 'AnalysisRule', + meta: { title: '解析规则', activeMenu: '/template', noCache: true } + } + ] + }, ] // 防止连续点击多次路由报错 diff --git a/src/views/enterpriseLibrary/finance/components/FinanceForm.vue b/src/views/enterpriseLibrary/finance/components/FinanceForm.vue index 81fed37..1a10838 100644 --- a/src/views/enterpriseLibrary/finance/components/FinanceForm.vue +++ b/src/views/enterpriseLibrary/finance/components/FinanceForm.vue @@ -133,7 +133,6 @@ export default { formData.files.push(...statementFiles) // 加入统一文件列表 } - console.log('123',formData.files) // 处理财务报表的删除文件列表 if (financialStatementData.delFileList && financialStatementData.delFileList.length) { @@ -141,10 +140,9 @@ export default { } if (this.type === 'add') { - console.log('asdad',formData) await addFinance(formData) } else { - console.log('年份编辑',formData) + console.log('编辑内容',formData) await updateFinance(formData) } diff --git a/src/views/enterpriseLibrary/finance/components/child/FinanceReportUpload.vue b/src/views/enterpriseLibrary/finance/components/child/FinanceReportUpload.vue index ad8386a..81b2a19 100644 --- a/src/views/enterpriseLibrary/finance/components/child/FinanceReportUpload.vue +++ b/src/views/enterpriseLibrary/finance/components/child/FinanceReportUpload.vue @@ -40,7 +40,7 @@ placeholder="文件上传后自动提取" class="form-control" show-word-limit - maxlength="32" + maxlength="64" > @@ -86,7 +86,8 @@ export default { }, rules: { fileList: [ - { required: true, message: '请上传财务报告附件', trigger: 'change' } + { required: true, message: '请上传财务报告附件', trigger: 'change' }, + { type: 'string', max: 64, message: '长度不能超过64个字符', trigger: 'blur' }, ], fileName: [ { required: true, message: '文件名需等待文件上传后自动提取', trigger: 'blur' } @@ -116,13 +117,8 @@ export default { methods: { handleUploadFail() { - - - // 将文件名和报告年份置空 this.formData.fileName = ''; this.formData.reportYear = ''; - - }, handleDocxContent(text) { @@ -176,7 +172,7 @@ export default { setFormData(data) { - // 财务报告文件:不手动生成uid + // 财务报告文件 const financeFiles = Array.isArray(data.fileList) ? data.fileList.filter(file => file && file.businessType === 'finance_report') .map(file => ({ diff --git a/src/views/enterpriseLibrary/finance/components/child/FinancialStatement.vue b/src/views/enterpriseLibrary/finance/components/child/FinancialStatement.vue index 3bfd2d2..f9e107d 100644 --- a/src/views/enterpriseLibrary/finance/components/child/FinancialStatement.vue +++ b/src/views/enterpriseLibrary/finance/components/child/FinancialStatement.vue @@ -40,6 +40,7 @@ class="form-control auto-input" show-word-limit maxlength="16" + @input="handleNumberInput('operatingIncome', 2)" > @@ -51,6 +52,7 @@ class="form-control auto-input" show-word-limit maxlength="16" + @input="handleNumberInput('currentAssets', 2)" > @@ -62,6 +64,7 @@ class="form-control auto-input" show-word-limit maxlength="16" + @input="handleNumberInput('currentLiabilities', 2)" > @@ -76,6 +79,7 @@ class="form-control auto-input" show-word-limit maxlength="16" + @input="handleNumberInput('currentRatio', 2)" > @@ -87,8 +91,7 @@ class="form-control auto-input" show-word-limit maxlength="16" - :precision="2" - @change="handleNumberInput('netProfit')" + @input="handleNumberInput('netProfit', 2)" > @@ -100,6 +103,7 @@ class="form-control auto-input" show-word-limit maxlength="16" + @input="handleNumberInput('shareholdersEquity', 2)" > @@ -114,6 +118,7 @@ class="form-control auto-input" show-word-limit maxlength="16" + @input="handleNumberInput('returnOnNetAssets', 2)" > @@ -125,6 +130,8 @@ class="form-control auto-input" show-word-limit maxlength="16" + @input="handleNumberInput('totalLiabilities', 2)" + > @@ -134,10 +141,9 @@ v-model="formData.totalAssets" placeholder="自动提取" class="form-control auto-input" - :precision="2" - @change="handleNumberInput('totalAssets')" show-word-limit maxlength="16" + @input="handleNumberInput('totalAssets', 2)" > @@ -152,6 +158,8 @@ class="form-control auto-input" show-word-limit maxlength="16" + @input="handleNumberInput('assetLiabilityRatio', 2)" + > @@ -204,37 +212,47 @@ export default { { required: true, message: '请上传财务报表附件', trigger: 'change' } ], operatingIncome: [ - { required: true, message: '营业收入为必填项', trigger: 'change' } + { required: true, message: '营业收入为必填项', trigger: 'change' }, + { type: 'string', max: 16, message: '长度不能超过16个字符', trigger: 'blur' }, ], netProfit: [ - { required: true, message: '净利润为必填项', trigger: 'change' } + { required: true, message: '净利润为必填项', trigger: 'change' }, + { type: 'string', max: 16, message: '长度不能超过16个字符', trigger: 'blur' }, ], returnOnNetAssets: [ { required: true, message: '净资产收益率为必填项', trigger: 'change' }, - { pattern: /^\d+(\.\d+)?%?$/, message: '请输入有效的净资产收益率(如1或1%)', trigger: 'blur' } + { pattern: /^\d+(\.\d+)?%?$/, message: '请输入有效的净资产收益率(如1或1%)', trigger: 'blur' }, + { type: 'string', max: 16, message: '长度不能超过16个字符', trigger: 'blur' }, ], currentAssets: [ - { required: true, message: '流动资产为必填项', trigger: 'blur' } + { required: true, message: '流动资产为必填项', trigger: 'blur' }, + { type: 'string', max: 16, message: '长度不能超过16个字符', trigger: 'blur' }, ], currentLiabilities: [ - { required: true, message: '流动负债为必填项', trigger: 'blur' } + { required: true, message: '流动负债为必填项', trigger: 'blur' }, + { type: 'string', max: 16, message: '长度不能超过16个字符', trigger: 'blur' }, ], currentRatio: [ { required: true, message: '流动比率为必填项', trigger: 'blur' }, - { pattern: /^\d+(\.\d+)?%?$/, message: '请输入有效的流动比率(如1或1%)', trigger: 'blur' } + { pattern: /^\d+(\.\d+)?%?$/, message: '请输入有效的流动比率(如1或1%)', trigger: 'blur' }, + { type: 'string', max: 16, message: '长度不能超过16个字符', trigger: 'blur' }, ], shareholdersEquity: [ - { required: true, message: '股东权益为必填项', trigger: 'blur' } + { required: true, message: '股东权益为必填项', trigger: 'blur' }, + { type: 'string', max: 16, message: '长度不能超过16个字符', trigger: 'blur' }, ], totalLiabilities: [ - { required: true, message: '负债总额为必填项', trigger: 'blur' } + { required: true, message: '负债总额为必填项', trigger: 'blur' }, + { type: 'string', max: 16, message: '长度不能超过16个字符', trigger: 'blur' }, ], totalAssets: [ - { required: true, message: '资产总额为必填项', trigger: 'blur' } + { required: true, message: '资产总额为必填项', trigger: 'blur' }, + { type: 'string', max: 16, message: '长度不能超过16个字符', trigger: 'blur' }, ], assetLiabilityRatio: [ { required: true, message: '资产负债率为必填项', trigger: 'blur' }, - { pattern: /^\d+(\.\d+)?%?$/, message: '请输入有效的资产负债率(如1或1%)', trigger: 'blur' } + { pattern: /^\d+(\.\d+)?%?$/, message: '请输入有效的资产负债率(如1或1%)', trigger: 'blur' }, + { type: 'string', max: 16, message: '长度不能超过16个字符', trigger: 'blur' }, ] }, isReplacingFile: false // 新增:标记是否正在替换文件 @@ -517,10 +535,39 @@ export default { * 处理数字输入框的change事件,确保格式正确 * @param {string} fieldName - 表单字段名 */ - handleNumberInput(fieldName) { - this.formData[fieldName] = this.formatToTwoDecimalPlaces(this.formData[fieldName]); - } + handleNumberInput(fieldName, decimalPlaces) { + let value = this.formData[fieldName]; + if (value === null || value === undefined) { + value = ''; + } + + // 1. 转为字符串并清除所有非数字和非小数点的字符 + // 对于允许输入百分比的字段,可以加上 %,如 /[^\d.%]/g + value = value.toString().replace(/[^\d.]/g, ''); + + // 2. 只保留第一个小数点 + const parts = value.split('.'); + if (parts.length > 2) { + value = parts[0] + '.' + parts.slice(1).join(''); + } + + // 3. 限制小数点后的位数 + if (decimalPlaces > 0 && parts.length === 2) { + value = parts[0] + '.' + parts[1].substring(0, decimalPlaces); + } else if (decimalPlaces === 0) { + // 如果不允许小数,则取整数部分 + value = parts[0]; + } + + // 4. 严格控制总长度不超过 maxlength (16) + if (value.length > 16) { + value = value.substring(0, 16); + } + + // 5. 将处理后的值赋回给 v-model + this.formData[fieldName] = value; + }, } } diff --git a/src/views/enterpriseLibrary/performance/components/child/CompletionAndBidInfo.vue b/src/views/enterpriseLibrary/performance/components/child/CompletionAndBidInfo.vue index 96c1272..8a9d8ff 100644 --- a/src/views/enterpriseLibrary/performance/components/child/CompletionAndBidInfo.vue +++ b/src/views/enterpriseLibrary/performance/components/child/CompletionAndBidInfo.vue @@ -81,6 +81,7 @@ diff --git a/src/views/enterpriseLibrary/rejectionItem/components/RejectionItemForm.vue b/src/views/enterpriseLibrary/rejectionItem/components/RejectionItemForm.vue index 0e4418d..9075f26 100644 --- a/src/views/enterpriseLibrary/rejectionItem/components/RejectionItemForm.vue +++ b/src/views/enterpriseLibrary/rejectionItem/components/RejectionItemForm.vue @@ -157,7 +157,7 @@ export default { } }).catch(error => { this.loading.close() - this.$modal.msgError('操作失败:' + error) + this.$modal.msgError('废标项已存在') }) } }) diff --git a/src/views/enterpriseLibrary/rejectionItem/index.vue b/src/views/enterpriseLibrary/rejectionItem/index.vue index 3080b4d..3e76c18 100644 --- a/src/views/enterpriseLibrary/rejectionItem/index.vue +++ b/src/views/enterpriseLibrary/rejectionItem/index.vue @@ -309,8 +309,9 @@ export default {