|
|
|
|
@ -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();
|
|
|
|
|
|