pull/781/head
zy 2025-04-29 14:59:15 +08:00
parent a392f7d034
commit 54d277984e
6 changed files with 646 additions and 296 deletions

View File

@ -57,19 +57,12 @@
/>
</ContentWrap>
<!-- 关联商机选择弹框 -->
<BusinessListModal
ref="businessModalRef"
:customer-id="props.customerId"
@success="createContactBusinessList"
/>
</template>
<script setup lang="ts">
import * as BusinessApi from '@/api/crm/business'
import * as ContactApi from '@/api/crm/contact'
import BusinessForm from './../BusinessForm.vue'
import { BizTypeEnum } from '@/api/crm/permission'
import BusinessListModal from './BusinessListModal.vue'
import { erpPriceTableColumnFormatter } from '@/utils'
const message = useMessage() //

View File

@ -53,7 +53,6 @@
</el-col>
<!-- 表单弹窗添加/修改 -->
<BusinessForm ref="formRef" @success="getBusiness" />
<BusinessUpdateStatusForm ref="statusFormRef" @success="getBusiness" />
<CrmTransferForm ref="transferFormRef" :biz-type="BizTypeEnum.CRM_BUSINESS" @success="close" />
</template>

View File

@ -24,30 +24,6 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="合同名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入合同名称" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="报价单编号" prop="quotationId">
<el-select
@change="handleQuotationChange"
v-model="formData.quotationId"
class="w-1/1"
>
<el-option
v-for="item in quotationList"
:key="item.id"
:label="item.no"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="客户名称" prop="customerId">
<el-select
@ -65,56 +41,19 @@
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="合同签订日期" prop="startTime">
<el-date-picker
v-model="formData.startTime"
type="date"
value-format="x"
placeholder="选择合同签订日期"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="合同结束时间" prop="endTime">
<el-date-picker
v-model="formData.endTime"
type="date"
value-format="x"
placeholder="选择合同结束时间"
/>
<el-form-item label="协议编码" prop="name">
<el-input v-model="formData.name" disabled placeholder="协议编码" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="票据模板" prop="invoiceTemplateId">
<el-input v-model="formData.invoiceTemplateId" placeholder="请输入票据模板" disabled />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="违约金比例" prop="penaltyRate">
<el-input v-model="formData.penaltyRate" placeholder="请输入违约金比例" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="延期付款利率" prop="latePaymentRate">
<el-input v-model="formData.latePaymentRate" placeholder="请输入延期付款利率" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="财务结算方式" prop="settleMethod">
<el-select v-model="formData.settleMethod" placeholder="请选择财务结算方式">
<el-form-item label="合同状态" prop="quotationId">
<el-select v-model="formData.status" clearable placeholder="请选择合同状态">
<el-option
v-for="dict in getIntDictOptions('settle_method')"
v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
@ -122,235 +61,31 @@
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="最晚付款日期" prop="lastPayDate">
<el-form-item label="协议截止日期" prop="lastPayDate">
<el-date-picker
v-model="formData.lastPayDate"
type="date"
type="datetime"
value-format="x"
placeholder="选择最晚付款日期"
placeholder="请选择协议截止日期"
style="width: 100%"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="合同期限(月)" prop="contractTerm">
<el-input v-model="formData.contractTerm" placeholder="请输入合同期限(月)" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="报价签约人" prop="signUserId">
<el-select v-model="formData.signUserId" placeholder="请选择报价签约人" disabled >
<el-option
v-for="dict in userOptions"
:key="dict.id"
:label="dict.nickname"
:value="dict.id"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="签约人联系电话" prop="signPhoneNumber">
<el-input v-model="formData.signPhoneNumber" placeholder="请输入签约人联系电话" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="签约人Email" prop="signEmail">
<el-input v-model="formData.signEmail" placeholder="请输入签约人Email" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="签约人微信" prop="signWechat">
<el-input v-model="formData.signWechat" placeholder="请输入签约人微信" disabled />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="商机负责人" prop="ownerUserId">
<el-select v-model="formData.ownerUserId" placeholder="请选择商机负责人" disabled>
<el-option
v-for="dict in userOptions"
:key="dict.id"
:label="dict.nickname"
:value="dict.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="拓展人" prop="expanderUserId">
<el-select v-model="formData.expanderUserId" placeholder="请选择拓展人" disabled>
<el-option
v-for="dict in userOptions"
:key="dict.id"
:label="dict.nickname"
:value="dict.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="方案报价人" prop="pricingUserId">
<el-select v-model="formData.pricingUserId" placeholder="请选择方案报价人" disabled>
<el-option
v-for="dict in userOptions"
:key="dict.id"
:label="dict.nickname"
:value="dict.id"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="售后维护人" prop="afterSaleUserId">
<el-select v-model="formData.afterSaleUserId" placeholder="请选择售后维护人">
<el-option
v-for="dict in userOptions"
:key="dict.id"
:label="dict.nickname"
:value="dict.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="协作人" prop="collUserId">
<el-select v-model="formData.collUserId" placeholder="请选择协作人">
<el-option
v-for="dict in userOptions"
:key="dict.id"
:label="dict.nickname"
:value="dict.id"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="授信方式" prop="creditMethod" >
<el-select v-model="formData.creditMethod" placeholder="请选择授信方式" disabled>
<el-option
v-for="dict in getIntDictOptions('credit_method')"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="授信计算周期" prop="creditCalcCycle" >
<el-select v-model="formData.creditCalcCycle" placeholder="请选择授信计算周期" disabled>
<el-option
v-for="dict in getIntDictOptions('credit_calc_cycle')"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="授信额度" prop="creditLimit">
<el-input v-model="formData.creditLimit" placeholder="请输入授信额度" disabled />
</el-form-item>
</el-col>
</el-row>
变更项目
<el-row>
<el-col :span="8">
<el-form-item label="合作主体" prop="partnerCompanyId">
<el-select v-model="formData.partnerCompanyId" placeholder="请选择合作主体" disabled >
<el-option
v-for="dict in deptList"
:key="dict.id"
:label="dict.name"
:value="dict.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="归属部门" prop="deptId" >
<el-tree-select
v-model="formData.deptId"
:data="deptTree"
:props="defaultProps"
filterable
disabled
check-strictly
node-key="id"
placeholder="请选择归属部门"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="第几次报价" prop="quotationTimes">
<el-input v-model="formData.quotationTimes" placeholder="请输入第几次报价" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="合同正文" prop="contractBody">
<el-input v-model="formData.contractBody" placeholder="请输入合同正文" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="合同补充协议" prop="contractAgreement">
<el-input v-model="formData.contractAgreement" placeholder="请输入合同补充协议" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="线上总金额" prop="onlinePrice">
<el-input
disabled
v-model="formData.onlinePrice"
placeholder="请输入线上总金额,单位:元"
:formatter="erpPriceInputFormatter"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="线下总金额" prop="offlinePrice">
<el-input
disabled
v-model="formData.offlinePrice"
placeholder="请输入线下总金额,单位:元"
:formatter="erpPriceInputFormatter"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="总金额" prop="price">
<el-input
disabled
v-model="formData.totalPrice"
:formatter="erpPriceInputFormatter"
/>
</el-form-item>
</el-col>
</el-row>
<!-- 子表的表单 -->
<ContentWrap>
<el-tabs v-model="subTabsName" class="-mt-15px -mb-10px">
<el-tab-pane label="额度" name="limit">
<ContractChangeLimit
ref="limitFormRef"
:products="formData.products"
:disabled="disabled"
/>
</el-tab-pane>
<el-tab-pane label="产品清单" name="product">
<ContractProductForm
ref="productFormRef"
@ -385,6 +120,7 @@ import * as UserApi from '@/api/system/user'
import { QuotationApi,QuotationVO } from '@/api/crm/quotation'
import { erpPriceMultiply, erpPriceInputFormatter } from '@/utils'
import { useUserStore } from '@/store/modules/user'
import ContractChangeLimit from '@/views/crm/contract/components/ContractChangeLimit.vue'
import ContractProductForm from '@/views/crm/contract/components/ContractProductForm.vue'
import ContractAAuthorizedCompanyForm from './components/ContractAAuthorizedCompanyForm.vue'
import ContractAAuthorizedPersonForm from './components/ContractAAuthorizedPersonForm.vue'
@ -449,7 +185,7 @@ const quotationList = ref<QuotationVO[]>([])
const contactList = ref<ContactApi.ContactVO[]>([])
/** 子表的表单 */
const subTabsName = ref('product')
const subTabsName = ref('limit')
const productFormRef = ref()
const contractAAuthorizedCompanyFormRef = ref()
const contractAAuthorizedPersonFormRef = ref()

View File

@ -0,0 +1,626 @@
<template>
<ContentWrap class="mt-10px">
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-width="110px"
v-loading="formLoading"
>
<el-row>
<el-col :span="8">
<el-form-item label="合作类型" prop="cooperationType">
<el-select v-model="formData.cooperationType" filterable placeholder="请选择合作类型" class="w-1/1">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_COOPERATION_TYPE)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8" v-if="formType">
<el-form-item label="企业类型" prop="">
<el-input v-model="formData.no" disabled placeholder="自动获取" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="客户" prop="customerId">
<el-select v-model="formData.customerId" placeholder="请选择客户" @change="onCustomerChange">
<el-option
v-for="item in customerList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="合作类型" prop="cooperationType">
<el-input v-model="formData.cooperationType" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="公司类型" prop="companyType">
<el-input v-model="formData.companyType" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="上市情况" prop="listingStatus">
<el-input v-model="formData.listingStatus" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="融资信息" prop="financingInfo">
<el-input v-model="formData.financingInfo" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="实缴资金" prop="paidInCapital">
<el-input v-model="formData.paidInCapital" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="参保人数" prop="insuredCount">
<el-input v-model="formData.insuredCount" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="成立日期" prop="establishmentDate">
<el-input v-model="formData.establishmentDate" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="企业类型" prop="enterpriseType">
<el-input v-model="formData.enterpriseType" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="营业状态" prop="businessStatus">
<el-input v-model="formData.businessStatus" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="被告记录" prop="defendantRecord">
<el-radio-group v-model="formData.defendantRecord" :disabled="true">
<el-radio :label="true"></el-radio>
<el-radio :label="false"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="经营异常" prop="businessAbnormal">
<el-radio-group v-model="formData.businessAbnormal" :disabled="true">
<el-radio :label="true"></el-radio>
<el-radio :label="false"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="股权出质" prop="equityPledge">
<el-radio-group v-model="formData.equityPledge" :disabled="true">
<el-radio :label="true"></el-radio>
<el-radio :label="false"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="失信记录" prop="dishonestRecord">
<el-radio-group v-model="formData.dishonestRecord" :disabled="true">
<el-radio :label="true"></el-radio>
<el-radio :label="false"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="融资记录" prop="financingRecord">
<el-radio-group v-model="formData.financingRecord" :disabled="true">
<el-radio :label="true"></el-radio>
<el-radio :label="false"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="被执行记录" prop="enforcementRecord">
<el-radio-group v-model="formData.enforcementRecord" :disabled="true">
<el-radio :label="true"></el-radio>
<el-radio :label="false"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="合作主体" prop="partnerCompanyId">
<el-select v-model="formData.partnerCompanyId" placeholder="请选择合作主体" @change="onPartnerChange">
<el-option
v-for="dict in orgList"
:key="dict.id"
:label="dict.name"
:value="dict.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="开户行" prop="bBankName">
<el-input v-model="formData.bBankName" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="银行账号" prop="bBankAccount">
<el-input v-model="formData.bBankAccount" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="法人代表" prop="bLegalRepresentative">
<el-input v-model="formData.bLegalRepresentative" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="营业执照号" prop="bBusinessLicenseNumber">
<el-input v-model="formData.bBusinessLicenseNumber" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="营业执照" prop="bBusinessLicense">
<el-input v-model="formData.bBusinessLicense" disabled />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="归属部门" prop="deptId">
<el-tree-select
v-model="formData.deptId"
:data="deptTree"
:props="defaultProps"
filterable
check-strictly
node-key="id"
placeholder="请选择归属部门"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="商机负责人" prop="ownerUserId">
<el-select v-model="formData.ownerUserId" placeholder="请选择商机负责人">
<el-option
v-for="dict in userOptions"
:key="dict.id"
:label="dict.nickname"
:value="dict.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="拓展人" prop="expanderUserId">
<el-select v-model="formData.expanderUserId" placeholder="请选择拓展人">
<el-option
v-for="dict in userOptions"
:key="dict.id"
:label="dict.nickname"
:value="dict.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="方案报价人" prop="pricingUserId">
<el-select v-model="formData.pricingUserId" placeholder="请选择方案报价人">
<el-option
v-for="dict in userOptions"
:key="dict.id"
:label="dict.nickname"
:value="dict.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="报价签约人" prop="signUserId">
<el-select v-model="formData.signUserId" placeholder="请选择报价签约人">
<el-option
v-for="dict in userOptions"
:key="dict.id"
:label="dict.nickname"
:value="dict.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="签约人联系电话" prop="signPhoneNumber">
<el-input v-model="formData.signPhoneNumber" placeholder="请输入签约人联系电话" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="签约人Email" prop="signEmail">
<el-input v-model="formData.signEmail" placeholder="请输入签约人Email" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="签约人微信" prop="signWechat">
<el-input v-model="formData.signWechat" placeholder="请输入签约人微信" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="账期" prop="paymentTerm">
<el-select v-model="formData.paymentTerm" placeholder="请选择账期">
<el-option
v-for="dict in getStrDictOptions('payment_term')"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="授信方式" prop="creditMethod">
<el-select v-model="formData.creditMethod" placeholder="请选择授信方式">
<el-option
v-for="dict in getIntDictOptions('credit_method')"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="授信计算周期" prop="creditCalcCycle">
<el-select v-model="formData.creditCalcCycle" placeholder="请选择授信计算周期">
<el-option
v-for="dict in getIntDictOptions('credit_calc_cycle')"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="授信额度" prop="creditLimit">
<el-input v-model="formData.creditLimit" placeholder="请输入授信额度" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="票据模板" prop="invoiceTemplateId">
<el-select v-model="formData.invoiceTemplateId" placeholder="请选择票据模板">
<el-option
v-for="dict in templateOptions"
:key="dict.id"
:label="dict.name"
:value="dict.id"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="线上总金额" prop="onlinePrice">
<el-input
disabled
v-model="formData.onlinePrice"
:formatter="erpPriceInputFormatter"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="线下总金额" prop="offlinePrice">
<el-input
disabled
v-model="formData.offlinePrice"
:formatter="erpPriceInputFormatter"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="总金额" prop="totalPrice">
<el-input
disabled
v-model="formData.totalPrice"
:formatter="erpPriceInputFormatter"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<!-- 子表的表单 -->
<div style="text-align: right">
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="goBack"> </el-button>
</div>
</ContentWrap>
</template>
<script setup lang="ts">
import { getIntDictOptions, getStrDictOptions, DICT_TYPE } from '@/utils/dict'
import { QuotationApi, QuotationVO } from '@/api/crm/quotation'
import { defaultProps, handleTree } from '@/utils/tree'
import { BillTemplateApi, BillTemplateVO } from '@/api/crm/billtemplate'
import * as ContractApi from '@/api/crm/contract'
import * as CustomerApi from '@/api/crm/customer'
import * as UserApi from '@/api/system/user'
import * as DeptApi from '@/api/system/dept'
import * as BusinessApi from '@/api/crm/business'
/** CRM 方案报价 表单 */
defineOptions({ name: 'QuotationForm' })
const { t } = useI18n() //
const message = useMessage() //
const customerList = ref([]) //
const userOptions = ref<UserApi.UserVO[]>([]) //
const templateOptions = ref([])
const businessList = ref([])
const deptTree = ref() //
const deptList = ref() //
const orgList = ref([])
const invoiceTemplateList = ref([])
const { proxy }: any = getCurrentInstance();
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
const formLoading = ref(false) // 12
const formType = ref('') // create - update -
const formData = ref({
no: undefined,
customerId: undefined,
businessId: undefined,
invoiceTemplateId: undefined,
processInstanceId: undefined,
auditStatus: undefined,
ownerUserId: undefined,
expanderUserId: undefined,
pricingUserId: undefined,
signUserId: undefined,
signPhoneNumber: undefined,
signEmail: undefined,
signWechat: undefined,
paymentTerm: undefined,
creditMethod: undefined,
creditCalcCycle: undefined,
creditLimit: undefined,
partnerCompanyId: undefined,
deptId: undefined,
creator: undefined,
createTime: undefined,
updater: undefined,
onlinePrice: undefined,
offlinePrice: undefined,
totalPrice: undefined,
cooperationType: undefined, //
companyType: undefined, //
listingStatus: undefined, //
financingInfo: undefined, //
paidInCapital: undefined, //
insuredCount: undefined, //
establishmentDate: undefined, //
enterpriseType: undefined, //
businessStatus: undefined, //
defendantRecord: undefined, //
businessAbnormal: undefined, //
equityPledge: undefined, //
dishonestRecord: undefined, //
financingRecord: undefined, //
enforcementRecord: undefined, //
bBankName: undefined, //
bBankAccount: undefined, //
bLegalRepresentative: undefined, //
bBusinessLicenseNumber: undefined, //
bBusinessLicense: undefined //
})
const formRules = reactive({
cooperationType: [{ required: true, message: '合作类型不能为空', trigger: 'change' }],
no: [{ required: true, message: '报价单编号不能为空', trigger: 'blur' }],
customerId: [{ required: true, message: '客户id不能为空', trigger: 'change' }],
businessId: [{ required: true, message: '商机编号不能为空', trigger: 'change' }],
invoiceTemplateId: [{ required: true, message: '票据模板Id不能为空', trigger: 'change' }]
})
const formRef = ref() // Ref
/** 子表的表单 */
const subTabsName = ref('quotationProduct')
const quotationProductFormRef = ref()
const onBusinessChange = async (businessId: string) => {
if (!businessId) return
try {
formLoading.value = true;
const res = await BusinessApi.getBusiness(businessId);
formData.value.customerId = res.customerId;
formData.value.creditLimit = res.creditLimit; //
formData.value.ownerUserId = res.ownerUserId; //
formData.value.paymentTerm = res.paymentTerm;
formData.value.creditMethod = res.creditMethod;
formData.value.creditCalcCycle = res.creditCalcCycle;
formData.value.deptId = res.deptId;
formData.value.offlinePrice = res.offlinePrice;
formData.value.onlinePrice = res.onlinePrice;
formData.value.totalPrice = res.totalPrice;
// 🔁
await onCustomerChange(res.customerId);
} catch (err) {
} finally {
formLoading.value = false;
}
}
const onCustomerChange = async (customerId: string) => {
if (!customerId) return;
try {
formLoading.value = true;
const customerRes = await CustomerApi.getCustomer(customerId);
formData.value.cooperationType = customerRes.cooperationType;
formData.value.companyType = customerRes.companyType;
formData.value.listingStatus = customerRes.listingStatus;
formData.value.financingInfo = customerRes.financingInfo;
formData.value.paidInCapital = customerRes.paidInCapital;
formData.value.insuredCount = customerRes.insuredCount;
formData.value.establishmentDate = customerRes.establishmentDate;
formData.value.enterpriseType = customerRes.enterpriseType;
formData.value.businessStatus = customerRes.businessStatus;
formData.value.defendantRecord = customerRes.defendantRecord;
formData.value.businessAbnormal = customerRes.businessAbnormal;
formData.value.equityPledge = customerRes.equityPledge;
formData.value.dishonestRecord = customerRes.dishonestRecord;
formData.value.financingRecord = customerRes.financingRecord;
formData.value.enforcementRecord = customerRes.enforcementRecord;
} catch (err) {
console.error('获取客户详情失败:', err);
} finally {
formLoading.value = false;
}
}
const onPartnerChange = async (id: string) => {
if (!id) return
try {
formLoading.value = true;
const res = await DeptApi.getDept(id);
formData.value.bBankName = res.bankName;
formData.value.bBankAccount = res.bankAccount;
formData.value.bLegalRepresentative = res.legalRepresentative;
formData.value.bBusinessLicenseNumber = res.businessLicenseNumber;
formData.value.bBusinessLicense = res.businessLicense;
} catch (err) {
} finally {
formLoading.value = false;
}
}
/** 打开弹窗 */
const open = async (type: string) => {
formType.value = type
//
if (type) {
formLoading.value = true
try {
formData.value = await QuotationApi.getQuotation(type)
} finally {
formLoading.value = false
}
}
deptList.value = await DeptApi.getSimpleDeptList()
//
invoiceTemplateList.value = await BillTemplateApi.getSimpleList()
}
defineExpose({ open }) // open
/** 提交表单 */
const emit = defineEmits(['success']) // success
const submitForm = async () => {
//
await formRef.value.validate()
//
try {
await quotationProductFormRef.value.validate()
} catch (e) {
subTabsName.value = 'quotationProduct'
return
}
//
formLoading.value = true
try {
const data = formData.value as unknown as QuotationVO
//
data.quotationProducts = quotationProductFormRef.value.getData()
if (!formType.value) {
await QuotationApi.createQuotation(data)
message.success(t('common.createSuccess'))
} else {
await QuotationApi.updateQuotation(data)
message.success(t('common.updateSuccess'))
}
dialogVisible.value = false
//
emit('success')
goBack()
} finally {
formLoading.value = false
}
}
const goBack = ()=> {
proxy.$router.go(-1)
}
/** 重置表单 */
const resetForm = () => {
formData.value = {
no: undefined,
customerId: undefined,
businessId: undefined,
invoiceTemplateId: undefined,
processInstanceId: undefined,
auditStatus: undefined,
ownerUserId: undefined,
expanderUserId: undefined,
pricingUserId: undefined,
signUserId: undefined,
signPhoneNumber: undefined,
signEmail: undefined,
signWechat: undefined,
startTime: undefined,
totalPrice: undefined,
paymentTerm: undefined,
creditMethod: undefined,
creditCalcCycle: undefined,
creditLimit: undefined,
partnerCompanyId: undefined,
deptId: undefined,
creator: undefined,
createTime: undefined,
updater: undefined
}
formRef.value?.resetFields()
}
const route = useRoute();
onMounted(async () => {
console.log('%csrc/views/crm/quotation/QuotationForm.vue:596 route', 'color: #007acc;', route);
formType.value = route.query.id;
if (formType.value) open(formType.value)
//
customerList.value = await CustomerApi.getCustomerSimpleList()
//
userOptions.value = await UserApi.getSimpleUserList()
//
const data = await BillTemplateApi.getBillTemplatePage({
pageNo: 1,
pageSize: 1000,
})
templateOptions.value = data.list
businessList.value = await BusinessApi.getSimpleBusinessList()
//
deptTree.value = handleTree(await DeptApi.getSimpleDeptList())
const org = await ContractApi.getOrg({
pageNo: 1,
pageSize: 1000
})
orgList.value = org.list
});
</script>

View File

@ -54,12 +54,9 @@
/>
</ContentWrap>
<!-- 表单弹窗添加 -->
<ContractForm ref="formRef" @success="getList" />
</template>
<script setup lang="ts">
import * as ContractApi from '@/api/crm/contract'
import ContractForm from './../ContractForm.vue'
import { BizTypeEnum } from '@/api/crm/permission'
import { dateFormatter } from '@/utils/formatTime'
import { DICT_TYPE } from '@/utils/dict'
@ -116,7 +113,7 @@ const handleQuery = () => {
/** 添加 */
const formRef = ref()
const openForm = () => {
formRef.value.open('create')
push({ name: 'CrmContractAdd' })
}
/** 打开合同详情 */

View File

@ -603,7 +603,6 @@ const resetForm = () => {
const route = useRoute();
onMounted(async () => {
console.log('%csrc/views/crm/quotation/QuotationForm.vue:596 route', 'color: #007acc;', route);
formType.value = route.query.id;
if (formType.value) open(formType.value)