1、修复基础配置
2、修复业务模块 3、拆分页面代码
This commit is contained in:
@@ -239,16 +239,6 @@
|
||||
placeholder="请选择签订日期"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="结算类型" prop="settlementMode">
|
||||
<el-select v-model="form.settlementMode" placeholder="请选择结算类型">
|
||||
<el-option
|
||||
v-for="item in settlementModeOptions"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="合同格式" prop="contractFormat">
|
||||
<el-select v-model="form.contractFormat" placeholder="请选择合同格式">
|
||||
<el-option
|
||||
@@ -273,12 +263,39 @@
|
||||
><template #suffix>份</template></el-input
|
||||
>
|
||||
</el-form-item>
|
||||
<el-form-item label="回款账期(天)">
|
||||
<el-form-item label="结算币种" prop="settlementCurrency">
|
||||
<el-select v-model="form.settlementCurrency" placeholder="请选择结算币种" clearable>
|
||||
<el-option
|
||||
v-for="item in settlementCurrencyOptions"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="结算方式" prop="settlementMode">
|
||||
<el-select v-model="form.settlementMode" placeholder="请选择结算方式" clearable>
|
||||
<el-option
|
||||
v-for="item in settlementModeOptions"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="开票周期">
|
||||
<el-input
|
||||
v-model="form.invoiceCycle"
|
||||
placeholder="请输入"
|
||||
@input="value => positiveIntegerInput('invoiceCycle', value)"
|
||||
><template #suffix>天</template></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="回款账期">
|
||||
<el-input
|
||||
v-model="form.paymentDays"
|
||||
placeholder="请输入"
|
||||
@input="value => integerInput('paymentDays', value)"
|
||||
/>
|
||||
><template #suffix>天</template></el-input>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<el-form-item label="备注" prop="remark" class="contract-manage-form__remark">
|
||||
@@ -605,9 +622,6 @@
|
||||
<el-descriptions-item label="签订日期">{{
|
||||
detailValue('signDate')
|
||||
}}</el-descriptions-item>
|
||||
<el-descriptions-item label="结算类型">{{
|
||||
detailValue('settlementMode')
|
||||
}}</el-descriptions-item>
|
||||
<el-descriptions-item label="合同格式">{{
|
||||
detailValue('contractFormat')
|
||||
}}</el-descriptions-item>
|
||||
@@ -617,6 +631,15 @@
|
||||
<el-descriptions-item label="一式">{{
|
||||
detailUnitValue('copyCount', '份')
|
||||
}}</el-descriptions-item>
|
||||
<el-descriptions-item label="结算币种">{{
|
||||
detailDictionaryValue('settlementCurrency', settlementCurrencyOptions)
|
||||
}}</el-descriptions-item>
|
||||
<el-descriptions-item label="结算方式">{{
|
||||
detailDictionaryValue('settlementMode', settlementModeOptions)
|
||||
}}</el-descriptions-item>
|
||||
<el-descriptions-item label="开票周期">{{
|
||||
detailUnitValue('invoiceCycle', '天')
|
||||
}}</el-descriptions-item>
|
||||
<el-descriptions-item label="回款账期">{{
|
||||
detailUnitValue('paymentDays', '天')
|
||||
}}</el-descriptions-item>
|
||||
@@ -787,6 +810,8 @@ import * as api from '@/api/business/contract-manage';
|
||||
import { getList as getProjectList } from '@/api/business/project-apply';
|
||||
import { getList as getCustomerArchiveList } from '@/api/vehicle/customer-archive';
|
||||
import { getDeptTree } from '@/api/system/dept';
|
||||
import { getDictionary as getSystemDictionary } from '@/api/system/dict';
|
||||
import { getDictionary as getBizDictionary } from '@/api/system/dictbiz';
|
||||
import { config, option } from '@/option/business/contract-manage';
|
||||
import { getToken } from '@/utils/auth';
|
||||
import { downloadFileByUrl, downloadXls } from '@/utils/util';
|
||||
@@ -831,6 +856,8 @@ const defaultForm = () => ({
|
||||
contractFormat: '',
|
||||
legalSealFlag: 0,
|
||||
copyCount: '',
|
||||
settlementCurrency: '',
|
||||
invoiceCycle: '',
|
||||
paymentDays: '',
|
||||
startDate: '',
|
||||
endDate: '',
|
||||
@@ -1114,14 +1141,27 @@ export default {
|
||||
contractName: [{ required: true, message: '请输入合同名称', trigger: 'blur' }],
|
||||
contractCategory: [{ required: true, message: '请选择合同类别', trigger: 'change' }],
|
||||
signType: [{ required: true, message: '请选择签约类型', trigger: 'change' }],
|
||||
settlementCurrency: [{ required: true, message: '请选择结算币种', trigger: 'change' }],
|
||||
projectName: [{ required: true, message: '请选择所属项目', trigger: 'change' }],
|
||||
organizationName: [{ required: true, message: '请选择所属组织', trigger: 'change' }],
|
||||
partyA: [{ required: true, message: '请选择甲方', trigger: 'change' }],
|
||||
partyB: [{ required: true, message: '请选择乙方', trigger: 'change' }],
|
||||
signDate: [{ required: true, message: '请选择签订日期', trigger: 'change' }],
|
||||
settlementMode: [{ required: true, message: '请选择结算类型', trigger: 'change' }],
|
||||
settlementMode: [{ required: true, message: '请选择结算方式', trigger: 'change' }],
|
||||
contractFormat: [{ required: true, message: '请选择合同格式', trigger: 'change' }],
|
||||
legalSealFlag: [{ required: true, message: '请选择是否需要加盖法人章', trigger: 'change' }],
|
||||
invoiceCycle: [
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
if (value === '' || value === undefined || value === null) return callback();
|
||||
if (!/^\d+$/.test(String(value)) || Number(value) < 1) {
|
||||
return callback(new Error('开票周期只能输入正整数'));
|
||||
}
|
||||
callback();
|
||||
},
|
||||
trigger: 'blur',
|
||||
},
|
||||
],
|
||||
startDate: [{ required: true, message: '请选择开始日期', trigger: 'change' }],
|
||||
endDate: [{ required: true, message: '请选择结束日期', trigger: 'change' }],
|
||||
},
|
||||
@@ -1129,6 +1169,8 @@ export default {
|
||||
projectOptions: [],
|
||||
projectLoading: false,
|
||||
selectedProjectId: '',
|
||||
settlementCurrencyOptions: [],
|
||||
settlementModeDictOptions: [],
|
||||
contractPartyAOptions: [],
|
||||
contractPartyBOptions: [],
|
||||
contractPartyLoading: false,
|
||||
@@ -1223,7 +1265,9 @@ export default {
|
||||
return this.columnOptions('effectiveType');
|
||||
},
|
||||
settlementModeOptions() {
|
||||
return this.columnOptions('settlementMode');
|
||||
return this.settlementModeDictOptions.length
|
||||
? this.settlementModeDictOptions
|
||||
: this.columnOptions('settlementMode');
|
||||
},
|
||||
contractFormatOptions() {
|
||||
return this.columnOptions('contractFormat');
|
||||
@@ -1315,6 +1359,7 @@ export default {
|
||||
},
|
||||
created() {
|
||||
this.loadProjectOptions();
|
||||
this.loadSettlementDictionaries();
|
||||
this.loadOrganizationOptions();
|
||||
if (this.isFormPage) this.initFormPage();
|
||||
},
|
||||
@@ -1504,6 +1549,7 @@ export default {
|
||||
...defaultForm(),
|
||||
...detail,
|
||||
copyCount: normalizeOptionalInteger(detail.copyCount, ''),
|
||||
invoiceCycle: normalizeOptionalInteger(detail.invoiceCycle, ''),
|
||||
paymentDays: normalizeOptionalInteger(detail.paymentDays, ''),
|
||||
feeGenerationMode:
|
||||
detail.feeGenerationMode || (Number(detail.billingEnabled) === 0 ? 'manual' : 'system'),
|
||||
@@ -1548,6 +1594,10 @@ export default {
|
||||
this.$message.warning('请选择合同类别');
|
||||
return false;
|
||||
}
|
||||
if (!this.form.settlementCurrency) {
|
||||
this.$message.warning('请选择结算币种');
|
||||
return false;
|
||||
}
|
||||
if (['temporary', 'formal', 'edit'].includes(action) && !this.form.signType) {
|
||||
this.$message.warning('请选择签约类型');
|
||||
return false;
|
||||
@@ -1561,7 +1611,7 @@ export default {
|
||||
['startDate', '合同开始日期'],
|
||||
['endDate', '合同结束日期'],
|
||||
['signDate', '签订日期'],
|
||||
['settlementMode', '结算类型'],
|
||||
['settlementMode', '结算方式'],
|
||||
['contractFormat', '合同格式'],
|
||||
];
|
||||
const empty = required.find(([prop]) => !this.form[prop]);
|
||||
@@ -1580,6 +1630,7 @@ export default {
|
||||
return {
|
||||
...this.form,
|
||||
copyCount: normalizeOptionalInteger(this.form.copyCount),
|
||||
invoiceCycle: normalizeOptionalInteger(this.form.invoiceCycle),
|
||||
paymentDays: normalizeOptionalInteger(this.form.paymentDays),
|
||||
billingEnabled: this.form.feeGenerationMode === 'manual' ? 0 : 1,
|
||||
contractFileJson: JSON.stringify(this.contractFileRows),
|
||||
@@ -1656,6 +1707,29 @@ export default {
|
||||
this.projectLoading = false;
|
||||
});
|
||||
},
|
||||
loadSettlementDictionaries() {
|
||||
Promise.all([
|
||||
getSystemDictionary({ code: 'currency_type' }),
|
||||
getBizDictionary({ code: 'settle_method' }),
|
||||
]).then(([currencyRes, methodRes]) => {
|
||||
const records = response => {
|
||||
const data = response?.data?.data || response?.data || [];
|
||||
return Array.isArray(data) ? data : data.records || [];
|
||||
};
|
||||
this.settlementCurrencyOptions = records(currencyRes).map(item => ({
|
||||
label: `${item.dictKey} - ${item.dictValue}`,
|
||||
value: item.dictKey,
|
||||
}));
|
||||
this.settlementModeDictOptions = records(methodRes).map(item => ({
|
||||
label: item.dictValue,
|
||||
value: item.dictKey,
|
||||
}));
|
||||
['settlementMode'].forEach(prop => {
|
||||
const column = this.findColumn(this.tableOption.column, prop);
|
||||
if (column) column.dicData = this.settlementModeDictOptions;
|
||||
});
|
||||
});
|
||||
},
|
||||
syncCurrentProjectOption() {
|
||||
if (!this.form.projectId || !this.form.projectName) return;
|
||||
if (this.projectOptions.some(item => String(item.id) === String(this.form.projectId))) return;
|
||||
@@ -1664,12 +1738,13 @@ export default {
|
||||
handleProjectChange(projectId) {
|
||||
const project = this.projectOptions.find(item => String(item.id) === String(projectId));
|
||||
if (!project) {
|
||||
Object.assign(this.form, { projectId: '', projectName: '' });
|
||||
Object.assign(this.form, { projectId: '', projectName: '', settlementMode: '' });
|
||||
return;
|
||||
}
|
||||
Object.assign(this.form, {
|
||||
projectId: project.id,
|
||||
projectName: project.projectName || '',
|
||||
settlementMode: project.settlementMode || this.form.settlementMode || '',
|
||||
});
|
||||
},
|
||||
loadContractPartyOptions() {
|
||||
@@ -1806,6 +1881,10 @@ export default {
|
||||
integerInput(prop, value) {
|
||||
this.form[prop] = String(value || '').replace(/\D/g, '');
|
||||
},
|
||||
positiveIntegerInput(prop, value) {
|
||||
const normalized = String(value || '').replace(/\D/g, '').replace(/^0+/, '');
|
||||
this.form[prop] = normalized;
|
||||
},
|
||||
previewAttachment(row, rows = []) {
|
||||
const url = attachmentUrl(row);
|
||||
if (!url) {
|
||||
@@ -1996,6 +2075,7 @@ export default {
|
||||
this.detailRow = {
|
||||
...detail,
|
||||
copyCount: normalizeOptionalInteger(detail.copyCount),
|
||||
invoiceCycle: normalizeOptionalInteger(detail.invoiceCycle),
|
||||
paymentDays: normalizeOptionalInteger(detail.paymentDays),
|
||||
};
|
||||
this.detailContractFileRows = parseArray(detail.contractFileJson);
|
||||
@@ -2054,6 +2134,11 @@ export default {
|
||||
if (prop === 'feeGenerationMode') return value === 'manual' ? '手动生成' : '系统生成';
|
||||
return this.displayValue(value);
|
||||
},
|
||||
detailDictionaryValue(prop, options = []) {
|
||||
const value = this.detailRow[prop];
|
||||
if (value === undefined || value === null || value === '') return '-';
|
||||
return options.find(item => String(item.value) === String(value))?.label || value;
|
||||
},
|
||||
handleOperation(operation, row) {
|
||||
if (operation.action === 'startChange') {
|
||||
this.$router.push({ path: '/business/contract-manage/change', query: { id: row.id } });
|
||||
|
||||
Reference in New Issue
Block a user