✨ MK公开页、预结算体验优化、地图选址与认证密码规则完善
This commit is contained in:
@@ -222,7 +222,7 @@
|
||||
Number(detailSettlementRule.autoGenerate) === 1 ? '开启' : '关闭'
|
||||
}}</el-descriptions-item>
|
||||
<template v-if="Number(detailSettlementRule.autoGenerate) === 1">
|
||||
<el-descriptions-item label="账单起始日期">{{
|
||||
<el-descriptions-item label="账单起始日">{{
|
||||
displayValue(detailSettlementRule.billStartDate)
|
||||
}}</el-descriptions-item>
|
||||
<el-descriptions-item label="结算类型">{{
|
||||
@@ -244,7 +244,7 @@
|
||||
}}</el-descriptions-item
|
||||
>
|
||||
<el-descriptions-item
|
||||
v-if="detailSettlementRule.settlementType === '固定天数周期结算'"
|
||||
v-if="isFixedCycleSettlementType(detailSettlementRule.settlementType)"
|
||||
label="周期天数"
|
||||
>{{
|
||||
detailObjectUnitValue(detailSettlementRule, 'cycleDays', '天')
|
||||
@@ -345,7 +345,7 @@
|
||||
</section>
|
||||
</div>
|
||||
<div class="contract-manage-page__footer">
|
||||
<el-button @click="closeDetail">关闭</el-button>
|
||||
<el-button v-if="!isPublicViewPage" @click="closeDetail">关闭</el-button>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -478,7 +478,7 @@
|
||||
type="date"
|
||||
format="YYYY-MM-DD"
|
||||
value-format="YYYY-MM-DD"
|
||||
placeholder="YYYY-MM-DD"
|
||||
placeholder="请输入"
|
||||
/>
|
||||
<span>至</span>
|
||||
<el-date-picker
|
||||
@@ -486,7 +486,7 @@
|
||||
type="date"
|
||||
format="YYYY-MM-DD"
|
||||
value-format="YYYY-MM-DD"
|
||||
placeholder="YYYY-MM-DD"
|
||||
placeholder="请输入"
|
||||
/>
|
||||
</div>
|
||||
</el-form-item>
|
||||
@@ -498,12 +498,12 @@
|
||||
><template #suffix>天</template></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="合同金额">
|
||||
<el-input-number
|
||||
v-model="form.contractAmount"
|
||||
:min="0"
|
||||
:precision="2"
|
||||
:controls="false"
|
||||
<el-input
|
||||
:model-value="contractAmountDisplay"
|
||||
placeholder="请输入"
|
||||
clearable
|
||||
@input="handleContractAmountInput"
|
||||
@clear="form.contractAmount = null"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="是否范本">
|
||||
@@ -593,11 +593,13 @@
|
||||
description
|
||||
attachment-type
|
||||
use-upload-dialog
|
||||
:attachment-location-options="contractAttachmentLocationOptions"
|
||||
:lock-approved="isAttachmentUploadMode || hasApprovedContractFiles"
|
||||
:mark-approved-on-upload="isAttachmentUploadMode"
|
||||
:rows="contractFileRows"
|
||||
:preview="previewAttachment"
|
||||
@update:rows="contractFileRows = $event"
|
||||
@upload-to-location="handleAttachmentUploadToLocation"
|
||||
/>
|
||||
|
||||
<section class="contract-manage-form__section contract-manage-form__section--panel">
|
||||
@@ -646,7 +648,7 @@
|
||||
content="开启时,系统根据配置规则归集运单,定时生成结算单"
|
||||
placement="top"
|
||||
>
|
||||
<el-icon class="settlement-switch-tip"><QuestionFilled /></el-icon>
|
||||
<el-icon class="contract-manage-form__fee-mode-tip"><QuestionFilled /></el-icon>
|
||||
</el-tooltip>
|
||||
<el-radio :label="0">关闭</el-radio>
|
||||
</el-radio-group>
|
||||
@@ -655,13 +657,13 @@
|
||||
v-if="settlementRuleEnabled"
|
||||
class="contract-manage-form__grid contract-manage-form__settlement-grid"
|
||||
>
|
||||
<el-form-item label="账单起始日期" required>
|
||||
<el-form-item label="账单起始日" required>
|
||||
<el-date-picker
|
||||
v-model="settlementRuleForm.billStartDate"
|
||||
type="date"
|
||||
format="YYYY-MM-DD"
|
||||
value-format="YYYY-MM-DD"
|
||||
placeholder="请选择账单起始日期"
|
||||
placeholder="请选择账单起始日"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="结算类型" required>
|
||||
@@ -813,10 +815,12 @@
|
||||
attachment-type
|
||||
use-upload-dialog
|
||||
attachment-location="其它附件"
|
||||
:attachment-location-options="contractAttachmentLocationOptions"
|
||||
:readonly="isAttachmentUploadMode"
|
||||
:rows="attachmentRows"
|
||||
:preview="previewAttachment"
|
||||
@update:rows="attachmentRows = $event"
|
||||
@upload-to-location="handleAttachmentUploadToLocation"
|
||||
/>
|
||||
|
||||
<section
|
||||
@@ -1027,6 +1031,7 @@ import NProgress from 'nprogress';
|
||||
import 'nprogress/nprogress.css';
|
||||
import { exportBlob } from '@/api/common';
|
||||
import * as api from '@/api/business/contract-manage';
|
||||
import { getMkPublicDetail } from '@/api/mk-process';
|
||||
import { getList as getProjectList } from '@/api/business/project-apply';
|
||||
import { getList as getCustomerArchiveList } from '@/api/vehicle/customer-archive';
|
||||
import { getDeptTree } from '@/api/system/dept';
|
||||
@@ -1058,7 +1063,15 @@ const normalizeOptionalInteger = (value, emptyValue = null) => {
|
||||
return Number.isFinite(number) ? Math.trunc(number) : emptyValue;
|
||||
};
|
||||
const normalizeOptionalAmount = (value, emptyValue = null) => {
|
||||
if (value === undefined || value === null || value === '') return emptyValue;
|
||||
if (
|
||||
value === undefined ||
|
||||
value === null ||
|
||||
value === '' ||
|
||||
Number(value) === -1 ||
|
||||
String(value) === '-1'
|
||||
) {
|
||||
return emptyValue;
|
||||
}
|
||||
const number = Number(value);
|
||||
return Number.isFinite(number) && number >= 0 ? Number(number.toFixed(2)) : emptyValue;
|
||||
};
|
||||
@@ -1100,7 +1113,7 @@ const defaultForm = () => ({
|
||||
settlementCurrency: '',
|
||||
invoiceCycle: '',
|
||||
paymentDays: '',
|
||||
contractAmount: '',
|
||||
contractAmount: null,
|
||||
templateFlag: 0,
|
||||
originalContractNo: '',
|
||||
electronicSealFlag: 0,
|
||||
@@ -1272,7 +1285,7 @@ export default {
|
||||
formalSettlementRuleForm: defaultSettlementRule(),
|
||||
paymentRatioRows: [],
|
||||
changeRecordRows: [],
|
||||
settlementTypeOptions: ['月结', '日结', '周结', '半月结', '固定天数周期结算'],
|
||||
settlementTypeOptions: ['现结', '日结', '周结', '月结', '按固定天数周期'],
|
||||
billCycleTypeOptions: ['固定截单日', '自然月', '自定义多周期'],
|
||||
detailLoading: false,
|
||||
detailRow: {},
|
||||
@@ -1316,7 +1329,12 @@ export default {
|
||||
return this.$route.path === '/business/contract-manage/form';
|
||||
},
|
||||
isDetailPage() {
|
||||
return this.$route.path === '/business/contract-manage/detail';
|
||||
return (
|
||||
this.$route.path === '/business/contract-manage/detail' || this.isPublicViewPage
|
||||
);
|
||||
},
|
||||
isPublicViewPage() {
|
||||
return this.$route.path === '/business/contract-manage/public-view';
|
||||
},
|
||||
formMode() {
|
||||
return this.$route.query.mode === 'edit' ? 'edit' : 'add';
|
||||
@@ -1331,6 +1349,23 @@ export default {
|
||||
isAttachmentUploadMode() {
|
||||
return this.$route.query.attachmentUpload === '1';
|
||||
},
|
||||
contractAttachmentLocationOptions() {
|
||||
if (this.isAttachmentUploadMode) return ['合同文件'];
|
||||
return ['合同文件', '其它附件'];
|
||||
},
|
||||
contractAmountDisplay() {
|
||||
const value = this.form.contractAmount;
|
||||
if (
|
||||
value === undefined ||
|
||||
value === null ||
|
||||
value === '' ||
|
||||
Number(value) === -1 ||
|
||||
String(value) === '-1'
|
||||
) {
|
||||
return '';
|
||||
}
|
||||
return value;
|
||||
},
|
||||
hasApprovedContractFiles() {
|
||||
return (this.contractFileRows || []).some(
|
||||
row =>
|
||||
@@ -1412,7 +1447,7 @@ export default {
|
||||
return this.showBillCycleType && this.settlementRuleForm.billCycleType === '自定义多周期';
|
||||
},
|
||||
showCycleDays() {
|
||||
return this.settlementRuleForm.settlementType === '固定天数周期结算';
|
||||
return this.isFixedCycleSettlementType(this.settlementRuleForm.settlementType);
|
||||
},
|
||||
billCutoffDayOptions() {
|
||||
return Array.from({ length: 31 }, (_, index) => ({
|
||||
@@ -1473,9 +1508,11 @@ export default {
|
||||
},
|
||||
},
|
||||
created() {
|
||||
this.loadProjectOptions();
|
||||
this.loadSettlementDictionaries();
|
||||
this.loadOrganizationOptions();
|
||||
if (!this.isPublicViewPage) {
|
||||
this.loadProjectOptions();
|
||||
this.loadSettlementDictionaries();
|
||||
this.loadOrganizationOptions();
|
||||
}
|
||||
if (this.isFormPage) this.initFormPage();
|
||||
if (this.isDetailPage) this.initDetailPage();
|
||||
},
|
||||
@@ -1675,7 +1712,7 @@ export default {
|
||||
copyCount: normalizeOptionalInteger(detail.copyCount, ''),
|
||||
invoiceCycle: normalizeOptionalInteger(detail.invoiceCycle, ''),
|
||||
paymentDays: normalizeOptionalInteger(detail.paymentDays, ''),
|
||||
contractAmount: normalizeOptionalAmount(detail.contractAmount, ''),
|
||||
contractAmount: normalizeOptionalAmount(detail.contractAmount, null),
|
||||
archiveStatus: detail.archiveStatus || '未归档',
|
||||
feeGenerationMode:
|
||||
detail.feeGenerationMode || (Number(detail.billingEnabled) === 0 ? 'manual' : 'system'),
|
||||
@@ -2118,6 +2155,13 @@ export default {
|
||||
integerInput(prop, value) {
|
||||
this.form[prop] = String(value || '').replace(/\D/g, '');
|
||||
},
|
||||
handleContractAmountInput(value) {
|
||||
const text = String(value || '').replace(/[^\d.]/g, '');
|
||||
const parts = text.split('.');
|
||||
const normalized =
|
||||
parts.length > 1 ? `${parts[0]}.${parts.slice(1).join('').slice(0, 2)}` : parts[0];
|
||||
this.form.contractAmount = normalized === '' ? null : normalized;
|
||||
},
|
||||
positiveIntegerInput(prop, value) {
|
||||
const normalized = String(value || '').replace(/\D/g, '').replace(/^0+/, '');
|
||||
this.form[prop] = normalized;
|
||||
@@ -2148,6 +2192,16 @@ export default {
|
||||
};
|
||||
this.attachmentDocumentPreviewVisible = true;
|
||||
},
|
||||
handleAttachmentUploadToLocation({ location, rows = [] }) {
|
||||
if (!rows.length) return;
|
||||
if (location === '合同文件') {
|
||||
this.contractFileRows = [...(this.contractFileRows || []), ...rows];
|
||||
return;
|
||||
}
|
||||
if (location === '其它附件') {
|
||||
this.attachmentRows = [...(this.attachmentRows || []), ...rows];
|
||||
}
|
||||
},
|
||||
handleAttachmentPreviewUnsupported() {
|
||||
this.$message.warning('当前文件暂不支持在线预览');
|
||||
},
|
||||
@@ -2206,8 +2260,12 @@ export default {
|
||||
}
|
||||
return true;
|
||||
},
|
||||
isFixedCycleSettlementType(value) {
|
||||
return value === '按固定天数周期' || value === '固定天数周期结算';
|
||||
},
|
||||
normalizeSettlementRule(rule = {}) {
|
||||
const next = { ...defaultSettlementRule(), ...rule };
|
||||
if (next.settlementType === '固定天数周期结算') next.settlementType = '按固定天数周期';
|
||||
if (next.settlementType !== '月结') {
|
||||
next.billCycleType = '';
|
||||
next.billCutoffDay = '';
|
||||
@@ -2222,7 +2280,7 @@ export default {
|
||||
} else {
|
||||
next.customPeriods = [];
|
||||
}
|
||||
if (next.settlementType !== '固定天数周期结算') next.cycleDays = '';
|
||||
if (!this.isFixedCycleSettlementType(next.settlementType)) next.cycleDays = '';
|
||||
return next;
|
||||
},
|
||||
syncSettlementConfig() {
|
||||
@@ -2245,7 +2303,7 @@ export default {
|
||||
this.settlementRuleForm.billCycleType = '';
|
||||
this.settlementRuleForm.billCutoffDay = '';
|
||||
this.settlementRuleForm.customPeriods = [];
|
||||
if (value !== '固定天数周期结算') this.settlementRuleForm.cycleDays = '';
|
||||
if (!this.isFixedCycleSettlementType(value)) this.settlementRuleForm.cycleDays = '';
|
||||
},
|
||||
handleBillCycleTypeChange(value) {
|
||||
if (value !== '固定截单日') this.settlementRuleForm.billCutoffDay = '';
|
||||
@@ -2336,7 +2394,7 @@ export default {
|
||||
validateSettlementRule(rule, label) {
|
||||
if (Number(rule.autoGenerate) !== 1) return true;
|
||||
if (!rule.billStartDate || !rule.settlementType) {
|
||||
this.$message.warning(`${label}:请完整填写账单起始日期和结算类型`);
|
||||
this.$message.warning(`${label}:请完整填写账单起始日和结算类型`);
|
||||
return false;
|
||||
}
|
||||
if (rule.settlementType === '月结' && !rule.billCycleType) {
|
||||
@@ -2354,7 +2412,7 @@ export default {
|
||||
if (rule.settlementType === '月结' && rule.billCycleType === '自定义多周期') {
|
||||
return this.validateCustomPeriods(rule.customPeriods, label);
|
||||
}
|
||||
if (rule.settlementType === '固定天数周期结算' && !rule.cycleDays) {
|
||||
if (this.isFixedCycleSettlementType(rule.settlementType) && !rule.cycleDays) {
|
||||
this.$message.warning(`${label}:请选择周期天数`);
|
||||
return false;
|
||||
}
|
||||
@@ -2406,8 +2464,10 @@ export default {
|
||||
if (!id) return;
|
||||
this.detailLoading = true;
|
||||
this.applyDetailState({});
|
||||
this.api
|
||||
.getDetail(id)
|
||||
const request = this.isPublicViewPage
|
||||
? getMkPublicDetail('contract-manage', id)
|
||||
: this.api.getDetail(id);
|
||||
request
|
||||
.then(res => {
|
||||
this.applyDetailState(res.data?.data || {});
|
||||
})
|
||||
@@ -2576,7 +2636,7 @@ export default {
|
||||
.join(',')}`
|
||||
);
|
||||
}
|
||||
if (config.billStartDate) parts.push(`账单起始日期:${config.billStartDate}`);
|
||||
if (config.billStartDate) parts.push(`账单起始日:${config.billStartDate}`);
|
||||
return parts.join(',');
|
||||
};
|
||||
if (normalized.preSettlementConfig || normalized.formalSettlementConfig) {
|
||||
@@ -2672,6 +2732,15 @@ export default {
|
||||
},
|
||||
detailValue(prop) {
|
||||
const value = this.detailRow[prop];
|
||||
if (prop === 'contractAmount') {
|
||||
return value === undefined ||
|
||||
value === null ||
|
||||
value === '' ||
|
||||
Number(value) === -1 ||
|
||||
String(value) === '-1'
|
||||
? '-'
|
||||
: value;
|
||||
}
|
||||
if (
|
||||
prop === 'contractStage' ||
|
||||
prop === 'approvalStatus' ||
|
||||
@@ -3018,13 +3087,6 @@ export default {
|
||||
align-items: center;
|
||||
gap: 20px;
|
||||
margin-bottom: 16px;
|
||||
|
||||
.settlement-switch-tip {
|
||||
margin: 0 4px;
|
||||
color: #a8abb2;
|
||||
cursor: help;
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
|
||||
&__settlement-grid {
|
||||
@@ -3082,11 +3144,19 @@ export default {
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
:deep(.el-input-number) {
|
||||
width: 360px;
|
||||
max-width: 100%;
|
||||
|
||||
.el-input__inner {
|
||||
text-align: left;
|
||||
}
|
||||
}
|
||||
|
||||
:deep(.el-input),
|
||||
:deep(.el-select),
|
||||
:deep(.el-cascader),
|
||||
:deep(.el-tree-select),
|
||||
:deep(.el-input-number),
|
||||
:deep(.el-date-editor) {
|
||||
width: 360px;
|
||||
max-width: 100%;
|
||||
|
||||
Reference in New Issue
Block a user