1.1.36 合同付款方式、甲方公司、乙方公司必填,合同变更同步合同信息

dev
yinq 4 weeks ago
parent e85482ac73
commit 9620de170f

@ -21,7 +21,7 @@
<template #header>
<span>{{ isEdit ? '编辑合同变更' : '合同变更申请' }}</span>
</template>
<el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
<el-form ref="formRef" :model="form" :rules="changeFormRules" label-width="120px">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="变更编号" prop="changeCode">
@ -97,10 +97,9 @@
<template #header>
<div style="text-align: left; font-weight: bold; font-size: 18px">变更后合同信息</div>
</template>
<el-form :model="form.changeInfo" label-width="120px">
<el-row :gutter="20">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="合同编号">
<el-form-item label="合同编号" prop="changeInfo.contractCode">
<el-input v-model="form.changeInfo.contractCode" placeholder="请输入合同编号" :disabled="isFormDisabled">
<template #append>
<el-button
@ -115,26 +114,55 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="合同名称">
<el-form-item label="合同名称" prop="changeInfo.contractName">
<el-input v-model="form.changeInfo.contractName" placeholder="请输入合同名称" :disabled="isFormDisabled" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="合同大类">
<el-form-item label="合同大类" prop="changeInfo.contractCategory">
<el-select v-model="form.changeInfo.contractCategory" placeholder="请选择合同大类" disabled style="width: 100%">
<el-option v-for="dict in contract_category" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12" v-if="form.changeInfo.contractCategory !== '3'">
<el-form-item label="关联框架合同" prop="changeInfo.isFrameworkContract">
<el-radio-group v-model="form.changeInfo.isFrameworkContract" :disabled="isFormDisabled">
<el-radio v-for="dict in is_framework_contract" :key="dict.value" :value="dict.value">{{ dict.label }}</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12" v-if="form.changeInfo.contractCategory === '3'">
<el-form-item label="框架合同有效期" prop="changeInfo.frameworkValidPeriod">
<el-date-picker
v-model="form.changeInfo.frameworkValidPeriod"
type="date"
value-format="YYYY-MM-DD HH:mm:ss"
placeholder="请选择框架合同有效期"
:disabled="isFormDisabled"
style="width: 100%"
clearable
/>
</el-form-item>
</el-col>
<el-col :span="12" v-if="form.changeInfo.contractCategory !== '3' && form.changeInfo.isFrameworkContract === '1'">
<el-form-item label="关联框架合同" prop="changeInfo.frameworkContractId">
<div class="flex gap-2 items-center" style="width: 100%">
<el-input :model-value="changeFrameworkContractDisplay" placeholder="请选择框架合同" readonly :disabled="isFormDisabled" />
<el-button type="primary" plain :disabled="isFormDisabled" @click="openChangeFrameworkContractDialog"></el-button>
<el-button :disabled="isFormDisabled || !form.changeInfo.frameworkContractId" @click="clearChangeFrameworkContract"></el-button>
</div>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="业务方向">
<el-form-item label="业务方向" prop="changeInfo.businessDirection">
<el-select v-model="form.changeInfo.businessDirection" placeholder="请选择业务方向" :disabled="isFormDisabled" style="width: 100%">
<el-option v-for="dict in business_direction" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="合同负责人">
<el-form-item label="合同负责人" prop="changeInfo.contractManagerId">
<el-select
v-model="form.changeInfo.contractManagerId"
placeholder="请选择该合同客户经理或签订人"
@ -147,51 +175,31 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="合同签订日期">
<el-date-picker
clearable
v-model="form.changeInfo.contractDate"
type="date"
value-format="YYYY-MM-DD HH:mm:ss"
placeholder="请选择合同时间"
:disabled="isFormDisabled"
style="width: 100%"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="付款账户">
<el-select v-model="form.changeInfo.paymentAccountId" placeholder="请选择付款账户" :disabled="isFormDisabled" clearable style="width: 100%">
<el-option v-for="item in paymentAccountList" :key="item.paymentAccountId" :label="`${item.accountType || ''} - ${item.accountNumber || ''}`" :value="item.paymentAccountId" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="甲方公司">
<el-form-item label="甲方公司" prop="changeInfo.oneCustomerId">
<el-select v-model="form.changeInfo.oneCustomerId" placeholder="请选择甲方公司" :disabled="isFormDisabled" filterable style="width: 100%">
<el-option v-for="item in customerInfoList" :key="item.customerId" :label="item.customerName" :value="item.customerId" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="乙方公司">
<el-form-item label="乙方公司" prop="changeInfo.twoCustomerId">
<el-select v-model="form.changeInfo.twoCustomerId" placeholder="请选择乙方公司" :disabled="isFormDisabled" filterable style="width: 100%">
<el-option v-for="item in customerInfoList" :key="item.customerId" :label="item.customerName" :value="item.customerId" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="甲方授权代表">
<el-form-item label="甲方授权代表" prop="changeInfo.oneRepresent">
<el-input v-model="form.changeInfo.oneRepresent" placeholder="请输入甲方法人或其授权代表" :disabled="isFormDisabled" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="乙方授权代表">
<el-form-item label="乙方授权代表" prop="changeInfo.twoRepresent">
<el-input v-model="form.changeInfo.twoRepresent" placeholder="请输入乙方法人或其授权代表" :disabled="isFormDisabled" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="甲方签字日期">
<el-form-item label="甲方签字日期" prop="changeInfo.oneDate">
<el-date-picker
clearable
v-model="form.changeInfo.oneDate"
@ -204,7 +212,7 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="乙方签字日期">
<el-form-item label="乙方签字日期" prop="changeInfo.twoDate">
<el-date-picker
clearable
v-model="form.changeInfo.twoDate"
@ -217,14 +225,68 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="合同模板标识">
<el-form-item label="合同签订日期" prop="changeInfo.contractDate">
<el-date-picker
clearable
v-model="form.changeInfo.contractDate"
type="date"
value-format="YYYY-MM-DD HH:mm:ss"
placeholder="请选择合同时间"
:disabled="isFormDisabled"
style="width: 100%"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="合同属地" prop="changeInfo.contractTerritorialFlag">
<div style="display: flex; align-items: center; width: 100%; gap: 12px">
<el-radio-group v-model="form.changeInfo.contractTerritorialFlag" :disabled="isFormDisabled">
<el-radio v-for="dict in contract_territorial_flag" :key="dict.value" :value="dict.value">{{ dict.label }}</el-radio>
</el-radio-group>
<el-select
v-if="form.changeInfo.contractTerritorialFlag === '2'"
v-model="form.changeInfo.contractTerritorialCountry"
placeholder="请选择国家/地区"
:disabled="isFormDisabled"
filterable
clearable
style="flex: 1"
>
<el-option v-for="dict in country_region" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</div>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="结算币种" prop="changeInfo.settlementCurrency">
<el-select v-model="form.changeInfo.settlementCurrency" placeholder="请选择结算币种" :disabled="isFormDisabled" clearable style="width: 100%">
<el-option v-for="dict in currency_type" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="付款账户" prop="changeInfo.paymentAccountId">
<el-select v-model="form.changeInfo.paymentAccountId" placeholder="请选择付款账户" :disabled="isFormDisabled" clearable style="width: 100%">
<el-option v-for="item in paymentAccountList" :key="item.paymentAccountId" :label="`${item.accountType || ''} - ${item.accountNumber || ''}`" :value="item.paymentAccountId" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="合同状态" prop="changeInfo.contractStatus">
<el-radio-group v-model="form.changeInfo.contractStatus" disabled>
<el-radio v-for="dict in contract_status" :key="dict.value" :value="dict.value">{{ dict.label }}</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="合同模板标识" prop="changeInfo.contractTemplateFlag">
<el-radio-group v-model="form.changeInfo.contractTemplateFlag" :disabled="isFormDisabled">
<el-radio v-for="dict in contract_template_flag" :key="dict.value" :value="dict.value">{{ dict.label }}</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12" v-show="form.changeInfo.contractTemplateFlag !== '1'">
<el-form-item label="合同模板">
<el-form-item label="合同模板" prop="changeInfo.templateId">
<div class="flex gap-2 items-center" style="width: 100%">
<el-select v-model="form.changeInfo.templateId" placeholder="请选择合同模板" :disabled="isFormDisabled" filterable style="flex: 1">
<el-option
@ -248,14 +310,7 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="合同总价">
<el-input v-model="form.changeInfo.totalPrice" placeholder="根据合同物料自动计算" disabled>
<template #append></template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="质保期描述">
<el-form-item label="质保期描述" prop="changeInfo.warrantyPeriodDescription">
<el-input
v-model="form.changeInfo.warrantyPeriodDescription"
placeholder="请完整输入质保期描述验收合格后12个月或发货后18个月等"
@ -264,7 +319,7 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="交货地点">
<el-form-item label="交货地点" prop="changeInfo.deliveryLocation">
<el-input
v-model="form.changeInfo.deliveryLocation"
placeholder="请输入交货地点(如:甲方指定仓库/项目现场等)"
@ -273,7 +328,7 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="运输方式">
<el-form-item label="运输方式" prop="changeInfo.shipMethod">
<el-input
v-model="form.changeInfo.shipMethod"
placeholder="请输入运输方式(如:汽运、空运、海运等)"
@ -282,12 +337,12 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="签订地点">
<el-form-item label="签订地点" prop="changeInfo.signingPlace">
<el-input v-model="form.changeInfo.signingPlace" placeholder="请输入签订地点" :disabled="isFormDisabled" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="发货/交货期">
<el-form-item label="发货/交货期" prop="changeInfo.deliveryStart">
<el-input
v-model="form.changeInfo.deliveryStart"
type="textarea"
@ -299,7 +354,7 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="备注">
<el-form-item label="备注" prop="changeInfo.remark">
<el-input
v-model="form.changeInfo.remark"
type="textarea"
@ -309,32 +364,72 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="附件">
<FileUpload
v-model="changeInfoOssId"
:limit="5"
:fileSize="20"
:fileType="['doc', 'docx', 'pdf', 'xls', 'xlsx']"
:disabled="isFormDisabled"
:isShowTip="true"
/>
<el-form-item label="附件" prop="changeInfo.ossId">
<div style="display: flex; width: 100%; gap: 16px; align-items: flex-start">
<div style="flex: 1; min-width: 0">
<FileUpload
v-model="changeInfoOssId"
:limit="5"
:fileSize="20"
:fileType="['doc', 'docx', 'pdf', 'xls', 'xlsx']"
:disabled="isFormDisabled"
:isShowTip="true"
/>
</div>
<div style="width: 230px; display: flex; flex-direction: column; align-items: flex-start; padding-top: 2px">
<el-checkbox
v-model="form.changeInfo.effectiveCustomerOrderFlag"
true-value="1"
false-value="0"
:disabled="isFormDisabled"
>
<span style="font-weight: 600">已生效客户订单</span>
</el-checkbox>
<div style="color: #909399; font-size: 12px; line-height: 1.4; margin-top: 4px">
无需盖章或签字即刻生效的客户订单
</div>
</div>
</div>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="合同总价" prop="changeInfo.totalPrice">
<el-input v-model="form.changeInfo.totalPrice" placeholder="根据合同物料自动计算" disabled>
<template #append></template>
</el-input>
<div style="color: #909399; font-size: 12px; line-height: 1.4; margin-top: 4px">
由下方具体物料明细金额自动计算生成
</div>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
<!-- 变更后合同付款方式 -->
<el-card shadow="never" style="margin-top: 0">
<template #header>
<div style="text-align: left; font-weight: bold; font-size: 18px">合同付款方式</div>
<div
style="
display: flex;
align-items: center;
justify-content: space-between;
flex-wrap: wrap;
gap: 8px 16px;
width: 100%;
"
>
<div style="text-align: left; font-weight: bold; font-size: 18px">合同付款方式</div>
<div style="color: #e6a23c; font-size: 13px; line-height: 1.5; text-align: left; flex: 1; min-width: 220px">
请务必填写清楚付款节点及比例付款账期开票节点及比例
</div>
</div>
</template>
<div style="margin-bottom: 16px; display: flex; align-items: center; gap: 12px">
<el-button type="primary" icon="Plus" v-if="!isFormDisabled" @click="handleAddPaymentMethod"></el-button>
<el-form-item label="付款方式" prop="changeInfo.paymentMethod" style="margin-bottom: 0; width: 360px">
<el-form-item label="付款式" prop="changeInfo.paymentMethod" style="margin-bottom: 0; width: 360px">
<el-select
v-model="form.changeInfo.paymentMethod"
placeholder="请选择付款方式"
placeholder="请选择付款式"
:disabled="isFormDisabled"
clearable
style="width: 100%"
@ -527,6 +622,12 @@
</template>
</el-dialog>
<FrameworkContractSelectDialog
v-model:visible="changeFrameworkContractDialogVisible"
:current-contract-id="form.contractId"
@confirm="onChangeFrameworkContractConfirm"
/>
<SaleMaterialSelect ref="saleMaterialSelectRef" :multiple="false" @confirm-call-back="saleMaterialSelectCallBack" />
<ContractSelect ref="contractSelectRef" @confirm-call-back="contractSelectCallBack" />
@ -559,6 +660,7 @@ import SubmitVerify from '@/components/Process/submitVerify.vue';
import FileUpload from '@/components/FileUpload/index.vue';
import SaleMaterialSelect from '@/components/SaleMaterialSelect/index.vue';
import ContractSelect from '@/components/ContractSelect/index.vue';
import FrameworkContractSelectDialog from '@/views/oa/components/FrameworkContractSelectDialog.vue';
import { FlowCodeEnum, CodeRuleEnum } from '@/enums/OAEnum';
import { getRuleGenerateCode } from '@/api/system/codeRule';
@ -572,7 +674,12 @@ const {
contract_flag,
contract_template_flag,
material_flag,
seal_legal_entity
seal_legal_entity,
is_framework_contract,
contract_territorial_flag,
country_region,
currency_type,
contract_status
} = toRefs<any>(
proxy?.useDict(
'contract_change_type',
@ -581,7 +688,12 @@ const {
'contract_flag',
'contract_template_flag',
'material_flag',
'seal_legal_entity'
'seal_legal_entity',
'is_framework_contract',
'contract_territorial_flag',
'country_region',
'currency_type',
'contract_status'
)
);
@ -773,12 +885,144 @@ const form = ref<
sealLegalEntity: undefined
});
const rules = {
const changeFrameworkContractDialogVisible = ref(false);
const changeFrameworkContractDisplay = computed(() => {
const ci = form.value.changeInfo;
if (!ci) return '';
const code = ci.frameworkContractCode || '';
const name = ci.frameworkContractName || '';
return `${code} ${name}`.trim();
});
function openChangeFrameworkContractDialog() {
if (isFormDisabled.value) return;
changeFrameworkContractDialogVisible.value = true;
}
function onChangeFrameworkContractConfirm(selected: any) {
if (!form.value.changeInfo) return;
form.value.changeInfo.frameworkContractId = selected.contractId;
form.value.changeInfo.frameworkContractCode = selected.contractCode;
form.value.changeInfo.frameworkContractName = selected.contractName;
changeFrameworkContractDialogVisible.value = false;
}
function clearChangeFrameworkContract() {
if (!form.value.changeInfo) return;
form.value.changeInfo.frameworkContractId = undefined;
form.value.changeInfo.frameworkContractCode = undefined;
form.value.changeInfo.frameworkContractName = undefined;
}
watch(
() => form.value.changeInfo?.contractCategory,
(newVal) => {
if (newVal === '3' && form.value.changeInfo) {
form.value.changeInfo.isFrameworkContract = '0';
form.value.changeInfo.frameworkContractId = undefined;
form.value.changeInfo.frameworkContractCode = undefined;
form.value.changeInfo.frameworkContractName = undefined;
}
}
);
const baseRules = {
changeType: [{ required: true, message: '请选择变更类型', trigger: 'change' }],
contractId: [{ required: true, message: '请选择合同', trigger: 'change' }],
changeReason: [{ required: true, message: '请输入变更原因', trigger: 'blur' }]
};
const changeInfoRules: Record<string, any[]> = {
'changeInfo.contractCode': [{ required: true, message: '合同编号不能为空', trigger: 'blur' }],
'changeInfo.contractName': [{ required: true, message: '合同名称不能为空', trigger: 'blur' }],
'changeInfo.businessDirection': [{ required: true, message: '业务方向不能为空', trigger: 'blur' }],
'changeInfo.contractManagerId': [{ required: true, message: '合同负责人不能为空', trigger: 'blur' }],
'changeInfo.oneCustomerId': [{ required: true, message: '请选择甲方公司', trigger: 'change' }],
'changeInfo.twoCustomerId': [{ required: true, message: '请选择乙方公司', trigger: 'change' }],
'changeInfo.contractTerritorialFlag': [{ required: true, message: '合同属地标识不能为空', trigger: 'change' }],
'changeInfo.contractTerritorialCountry': [
{
validator: (_rule: any, _value: any, callback: (err?: Error) => void) => {
if (form.value.changeInfo?.contractTerritorialFlag === '2' && !form.value.changeInfo?.contractTerritorialCountry) {
callback(new Error('合同属地标识为“其他”时,国家/地区不能为空'));
return;
}
callback();
},
trigger: 'change'
}
],
'changeInfo.settlementCurrency': [{ required: true, message: '结算币种不能为空', trigger: 'change' }],
'changeInfo.ossId': [
{
validator: (_rule: any, _value: any, callback: (err?: Error) => void) => {
if (form.value.changeInfo?.effectiveCustomerOrderFlag === '1' && !form.value.changeInfo?.ossId) {
callback(new Error('已生效客户订单必须上传附件'));
return;
}
callback();
},
trigger: 'change'
}
],
'changeInfo.contractTemplateFlag': [{ required: true, message: '合同模板标识不能为空', trigger: 'blur' }],
'changeInfo.isFrameworkContract': [
{
validator: (_rule: any, _value: any, callback: (err?: Error) => void) => {
const ci = form.value.changeInfo;
if (!ci || ci.contractCategory === '3') {
callback();
return;
}
if (ci.isFrameworkContract == null || ci.isFrameworkContract === '') {
callback(new Error('请选择关联框架合同'));
return;
}
callback();
},
trigger: 'change'
}
],
'changeInfo.frameworkValidPeriod': [
{
validator: (_rule: any, _value: any, callback: (err?: Error) => void) => {
const ci = form.value.changeInfo;
if (!ci || ci.contractCategory !== '3') {
callback();
return;
}
if (!ci.frameworkValidPeriod) {
callback(new Error('请填写框架合同有效期'));
return;
}
callback();
},
trigger: 'change'
}
],
'changeInfo.frameworkContractId': [
{
validator: (_rule: any, _value: any, callback: (err?: Error) => void) => {
const ci = form.value.changeInfo;
if (ci && ci.contractCategory !== '3' && ci.isFrameworkContract === '1' && !ci.frameworkContractId) {
callback(new Error('请选择关联框架合同'));
return;
}
callback();
},
trigger: 'change'
}
]
};
const changeFormRules = computed(() => {
if (form.value.changeType === '1' && form.value.changeInfo) {
return { ...baseRules, ...changeInfoRules };
}
return { ...baseRules };
});
function goBack() {
proxy?.$tab.closePage(route);
router.push({ path: '/contract/contractChange' });
@ -894,7 +1138,18 @@ function mapContractToChangeInfo(c: any) {
'materialRemark',
'contractTemplateFlag',
'capitalizedAmount',
'remark'
'remark',
'isFrameworkContract',
'frameworkContractId',
'frameworkContractCode',
'frameworkContractName',
'frameworkValidPeriod',
'contractTerritorialFlag',
'contractTerritorialCountry',
'settlementCurrency',
'rmbExchangeRate',
'contractStatus',
'effectiveCustomerOrderFlag'
];
keys.forEach((k) => {
if (c[k] !== undefined) info[k] = c[k];
@ -902,6 +1157,7 @@ function mapContractToChangeInfo(c: any) {
info.changeInfoId = undefined;
info.contractChangeId = undefined;
if (info.contractTemplateFlag == null) info.contractTemplateFlag = '2';
if (info.effectiveCustomerOrderFlag == null || info.effectiveCustomerOrderFlag === '') info.effectiveCustomerOrderFlag = '0';
return info;
}
@ -1151,6 +1407,18 @@ function submitForm(status: string, _mode: boolean) {
proxy?.$modal.msgError('内容变更请先选择合同,以加载变更后合同信息');
return;
}
if (form.value.changeType === '1') {
const pay = form.value.changePaymentMethodList;
if (!Array.isArray(pay) || pay.length === 0) {
proxy?.$modal.msgWarning('请至少维护一条合同付款方式');
return;
}
const mat = form.value.changeMaterialList;
if (!Array.isArray(mat) || mat.length === 0) {
proxy?.$modal.msgWarning('请至少维护一条合同物料');
return;
}
}
if (status !== 'draft' && form.value.changeType === '1') {
const newCode = (form.value.changeInfo?.contractCode ?? '').trim();
const oldCode = (form.value.contractCode ?? '').trim();

@ -103,6 +103,62 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="甲方公司" prop="oneCustomerId">
<el-select v-model="form.oneCustomerId" placeholder="请选择甲方公司" :disabled="isFormDisabled"
filterable>
<el-option v-for="item in customerInfoList" :key="item.customerId" :label="item.customerName"
:value="item.customerId" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="乙方公司" prop="twoCustomerId">
<el-select v-model="form.twoCustomerId" placeholder="请选择乙方公司" :disabled="isFormDisabled"
filterable>
<el-option v-for="item in customerInfoList" :key="item.customerId" :label="item.customerName"
:value="item.customerId" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="甲方授权代表" prop="oneRepresent">
<el-input v-model="form.oneRepresent" placeholder="请输入甲方法人或其授权代表"
:disabled="isFormDisabled" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="乙方授权代表" prop="twoRepresent">
<el-input v-model="form.twoRepresent" placeholder="请输入乙方法人或其授权代表"
:disabled="isFormDisabled" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="甲方签字日期" prop="oneDate">
<el-date-picker
clearable
v-model="form.oneDate"
type="date"
value-format="YYYY-MM-DD HH:mm:ss"
placeholder="请选择甲方签字日期"
:disabled="isFormDisabled"
>
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="乙方签字日期" prop="twoDate">
<el-date-picker
clearable
v-model="form.twoDate"
type="date"
value-format="YYYY-MM-DD HH:mm:ss"
placeholder="请选择乙方签字日期"
:disabled="isFormDisabled"
>
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="合同签订日期" prop="contractDate">
<el-date-picker
@ -166,62 +222,6 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="甲方公司" prop="oneCustomerId">
<el-select v-model="form.oneCustomerId" placeholder="请选择甲方公司" :disabled="isFormDisabled"
filterable>
<el-option v-for="item in customerInfoList" :key="item.customerId" :label="item.customerName"
:value="item.customerId" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="乙方公司" prop="twoCustomerId">
<el-select v-model="form.twoCustomerId" placeholder="请选择乙方公司" :disabled="isFormDisabled"
filterable>
<el-option v-for="item in customerInfoList" :key="item.customerId" :label="item.customerName"
:value="item.customerId" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="甲方授权代表" prop="oneRepresent">
<el-input v-model="form.oneRepresent" placeholder="请输入甲方法人或其授权代表"
:disabled="isFormDisabled" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="乙方授权代表" prop="twoRepresent">
<el-input v-model="form.twoRepresent" placeholder="请输入乙方法人或其授权代表"
:disabled="isFormDisabled" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="甲方签字日期" prop="oneDate">
<el-date-picker
clearable
v-model="form.oneDate"
type="date"
value-format="YYYY-MM-DD HH:mm:ss"
placeholder="请选择甲方签字日期"
:disabled="isFormDisabled"
>
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="乙方签字日期" prop="twoDate">
<el-date-picker
clearable
v-model="form.twoDate"
type="date"
value-format="YYYY-MM-DD HH:mm:ss"
placeholder="请选择乙方签字日期"
:disabled="isFormDisabled"
>
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="合同状态" prop="contractStatus">
<el-radio-group v-model="form.contractStatus" disabled>
@ -273,13 +273,6 @@
<el-input v-model="form.capitalizedAmount" placeholder="请输入合同大写金额" />
</el-form-item>
</el-col> -->
<el-col :span="12">
<el-form-item label="合同总价" prop="totalPrice">
<el-input v-model="form.totalPrice" placeholder="根据合同物料自动计算" disabled>
<template #append></template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="质保期描述" prop="warrantyPeriodDescription">
<el-input
@ -359,6 +352,16 @@
</div>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="合同总价" prop="totalPrice">
<el-input v-model="form.totalPrice" placeholder="根据合同物料自动计算" disabled>
<template #append></template>
</el-input>
<div style="color: #909399; font-size: 12px; line-height: 1.4; margin-top: 4px">
由下方具体物料明细金额自动计算生成
</div>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
@ -386,10 +389,10 @@
<el-button type="primary" icon="Plus" v-if="!isFormDisabled" @click="handleAddPaymentMethod"
>新增付款方式
</el-button>
<el-form-item label="付款式" prop="paymentMethod" style="margin-bottom: 0; width: 360px">
<el-form-item label="付款式" prop="paymentMethod" style="margin-bottom: 0; width: 360px">
<el-select
v-model="form.paymentMethod"
placeholder="请选择付款式"
placeholder="请选择付款式"
:disabled="isFormDisabled"
clearable
style="width: 100%"
@ -479,7 +482,7 @@
<!-- 合同物料备注 -->
<el-form-item label="合同物料备注" prop="materialRemark" style="margin-bottom: 16px">
<el-input v-model="form.materialRemark" type="textarea" :rows="3" placeholder="请输入合同物料备注"
<el-input v-model="form.materialRemark" type="textarea" :rows="3" placeholder="请输入合同物料备注(如税率、是否包含安装调试等需要特殊注意的内容)"
:disabled="isFormDisabled" />
</el-form-item>
@ -1141,6 +1144,8 @@ const data = reactive<{ form: ContractInfoFormEx; rules: any }>({
contractName: [{ required: true, message: '合同名称不能为空', trigger: 'blur' }],
businessDirection: [{ required: true, message: '业务方向不能为空', trigger: 'blur' }],
contractManagerId: [{ required: true, message: '合同负责人不能为空', trigger: 'blur' }],
oneCustomerId: [{ required: true, message: '请选择甲方公司', trigger: 'change' }],
twoCustomerId: [{ required: true, message: '请选择乙方公司', trigger: 'change' }],
contractTerritorialFlag: [{ required: true, message: '合同属地标识不能为空', trigger: 'change' }],
contractTerritorialCountry: [
{
@ -1346,6 +1351,16 @@ const submitForm = (status: string, mode: boolean) => {
try {
contractInfoFormRef.value?.validate(async (valid: boolean) => {
if (valid) {
const paymentList = (form.value as any).contractPaymentMethodList;
if (!Array.isArray(paymentList) || paymentList.length === 0) {
proxy?.$modal.msgWarning('请维护合同付款方式');
return;
}
const materialList = (form.value as any).contractMaterialList;
if (!Array.isArray(materialList) || materialList.length === 0) {
proxy?.$modal.msgWarning('请维护合同物料');
return;
}
buttonLoading.value = true;
// 稿
if (status != 'draft') {

Loading…
Cancel
Save