admin-vue3/src/views/crm/contract/detail/ContractDetail.vue

867 lines
30 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<ContentWrap class="mt-10px">
<el-form
ref="formRef"
v-loading="formLoading"
:model="formData"
:rules="formRules"
label-width="120px"
>
<ContentWrap style="border: none;font-weight: 700">
基础信息
</ContentWrap>
<el-row>
<el-col :span="8">
<el-form-item label="合同名称" prop="name">
<el-input v-model="formData.name" disabled placeholder="" />
</el-form-item>
</el-col>
<el-col :span="8" v-if="formType">
<el-form-item label="合同编号" prop="no">
<el-input v-model="formData.no" disabled placeholder="" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="报价单编号" prop="quotationId">
<el-select
@change="handleQuotationChange"
v-model="formData.quotationId"
placeholder=""
disabled
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
v-model="formData.customerId"
disabled=""
placeholder=""
class="w-1/1"
>
<el-option
v-for="item in contactList"
: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="pricingUserId">
<el-select
@change="handleQuotationChange"
v-model="formData.pricingUserId"
disabled
placeholder=""
class="w-1/1"
>
<el-option
v-for="item in userOptions"
:key="item.id"
:label="item.nickname"
:value="item.id"
/>
</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-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="quotationTimes">
<el-input v-model="formData.quotationTimes" disabled placeholder="" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="账期" prop="paymentTerm">
<el-select v-model="formData.paymentTerm" disabled 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="invoiceTemplateId">
<el-select v-model="formData.invoiceTemplateId" disabled 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"
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
placeholder=""
v-model="formData.totalPrice"
:formatter="erpPriceInputFormatter"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<ContentWrap style="border: none;font-weight: 700">
甲方基本信息
</ContentWrap>
</el-col>
<el-col :span="8">
<el-form-item label="甲方名称" prop="partyName">
<el-select
v-model="formData.customerId"
disabled=""
placeholder=""
class="w-1/1"
>
<el-option
v-for="item in contactList"
: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="customerId">
<el-input v-model="formData.customerId" disabled placeholder="客户编号" />
</el-form-item>
</el-col> -->
<el-col :span="8">
<el-form-item label="法人代表" prop="legalPersonName">
<el-input v-model="formData.legalPersonName" placeholder="" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="统一信用代码" prop="creditNo">
<el-input v-model="formData.creditNo" placeholder="" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="企业类型" prop="regType">
<el-input v-model="formData.regType" placeholder="" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<!-- <el-form-item label="融资信息" prop="financingInfo">
<el-input v-model="formData.financingInfo" placeholder="融资信息" disabled />
</el-form-item> -->
</el-col>
<el-col :span="8">
<el-form-item label="实缴资金" prop="actualCapital">
<el-input v-model="formData.actualCapital" placeholder="" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="参保人数" prop="socialEmployeeNum">
<el-input v-model="formData.socialEmployeeNum" placeholder="" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<!-- <el-form-item label="上市情况" prop="listingStatus">
<el-input v-model="formData.listingStatus" placeholder="上市情况" disabled />
</el-form-item> -->
</el-col>
<el-col :span="8">
<el-form-item label="注册地址" prop="registeredAddress">
<el-input v-model="formData.registeredAddress" placeholder="" disabled />
</el-form-item>
</el-col>
<el-col :span="24">
<ContentWrap style="border: none;font-weight: 700">
乙方基本信息
</ContentWrap>
</el-col>
<el-col :span="8">
<el-form-item label="合作主体" prop="partnerCompanyId">
<el-select v-model="formData.partnerCompanyId" placeholder="" disabled >
<el-option
v-for="dict in orgList"
:key="dict.id"
:label="dict.orgName"
:value="dict.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="开户行" prop="bankName">
<el-input v-model="formData.bankName" placeholder="" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="银行账号" prop="bankAccount">
<el-input v-model="formData.bankAccount" placeholder="" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="法人代表" prop="legalRepresentative">
<el-input v-model="formData.legalRepresentative" placeholder="" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="商务负责人" prop="ownerUserId">
<el-input v-model="formData.ownerUserId" placeholder="" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="手机号" prop="mobile">
<el-input
v-model="formData.ownerUserMobile"
placeholder=""
disabled
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="E-mail" prop="email">
<el-input
v-model="formData.ownerUserEmail"
placeholder=""
disabled
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="微信号" prop="wechat">
<el-input
v-model="formData.ownerUserWechat"
placeholder=""
disabled
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="归属部门" prop="deptId">
<el-tree-select
v-model="formData.deptId"
:data="deptTree"
disabled
:props="defaultProps"
check-strictly
node-key="id"
placeholder=""
/>
</el-form-item>
</el-col>
<el-col :span="24">
<ContentWrap style="border: none;font-weight: 700">
合同信息
</ContentWrap>
</el-col>
<el-col :span="8">
<el-form-item label="合同类型" prop="contractType">
<el-radio-group v-model="formData.contractType" disabled>
<el-radio :label="1">单次合同</el-radio>
<el-radio :label="2">框架合同</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="合同签订日期" prop="startTime">
<el-date-picker
v-model="formData.startTime"
disabled
type="date"
value-format="x"
placeholder=""
style="width: 100%"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="合同结束时间" prop="endTime">
<el-date-picker
v-model="formData.endTime"
type="date"
disabled
value-format="x"
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" disabled oninput = "value=value.replace(/[^\d]/g,'')" placeholder="" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="账单日" prop="statementDate">
<el-select v-model="formData.statementDate" disabled placeholder="" >
<el-option
v-for="(dict, index) in statement"
:key="index"
:label="index + 1"
:value="index + 1"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="最晚付款日" prop="lastPayDate">
<el-select v-model="formData.lastPayDate" disabled placeholder="" >
<el-option
v-for="(dict, index) in statement"
:key="index"
:label="index + 1"
:value="index + 1"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="违约金比例" prop="penaltyRate">
<el-input v-model="formData.penaltyRate" disabled placeholder="" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="延期付款利率" prop="latePaymentRate">
<el-input v-model="formData.latePaymentRate" disabled placeholder="" />
</el-form-item>
</el-col>
<!-- <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="24">
<ContentWrap style="border: none;font-weight: 700">
财务与客服对接信息
</ContentWrap>
</el-col>
<el-col :span="8">
<el-form-item label="财务结算方式" prop="settleMethod">
<el-radio-group v-model="formData.settleMethod" disabled>
<el-radio :label="1">按月结算</el-radio>
<el-radio :label="0">按项目结算</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="售后维护人" prop="afterSaleUserId">
<el-select v-model="formData.afterSaleUserId" disabled 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" disabled 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="24">
<el-form-item label="合同正文" prop="contractBody">
<el-input v-model="formData.contractBody" disabled type="textarea" rows="5" placeholder="" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="合同补充协议" prop="contractAgreement">
<el-input v-model="formData.contractAgreement" disabled type="textarea" rows="5" placeholder="" />
</el-form-item>
</el-col>
</el-row>
<!-- 子表的表单 -->
<ContentWrap style="border: none;font-weight:700">
产品清单
</ContentWrap>
<ContentWrap>
<ContractProductForm
:type="1"
ref="productFormRef"
:products="formData.products"
:disabled="disabled"
/>
</ContentWrap>
<ContentWrap style="border: none;font-weight:700">
合同甲方关联单位
</ContentWrap>
<ContentWrap>
<ContractAAuthorizedCompanyForm :type="1" ref="contractAAuthorizedCompanyFormRef" :data="formData.contractAAuthorizedCompanys" :contract-id="formData.id" />
</ContentWrap>
<ContentWrap style="border: none;font-weight:700">
合同甲方授权人信息
</ContentWrap>
<ContentWrap>
<ContractAAuthorizedPersonForm :type="1" ref="contractAAuthorizedPersonFormRef" :contract-id="formData.id" />
</ContentWrap>
<ContentWrap style="border: none;font-weight:700">
</ContentWrap>
<ContentWrap>
<ContractBAuthorizedPersonForm :type="1" ref="contractBAuthorizedPersonFormRef" :userOptions="userOptions" :contract-id="formData.id" />
</ContentWrap>
</el-form>
<!-- 显示在其他页面时的判断type -->
</ContentWrap>
</template>
<script lang="ts" setup>
import * as CustomerApi from '@/api/crm/customer'
import * as ContractApi from '@/api/crm/contract'
import * as ContactApi from '@/api/crm/contact'
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 { BillTemplateApi, BillTemplateVO } from '@/api/crm/billtemplate'
import ContractProductForm from '@/views/crm/contract/components/ContractProductForm.vue'
import ContractAAuthorizedCompanyForm from '../components/ContractAAuthorizedCompanyForm.vue'
import ContractAAuthorizedPersonForm from '../components/ContractAAuthorizedPersonForm.vue'
import ContractBAuthorizedPersonForm from '../components/ContractBAuthorizedPersonForm.vue'
import { propTypes } from '@/utils/propTypes'
import { getIntDictOptions, getStrDictOptions, DICT_TYPE } from '@/utils/dict'
import { defaultProps, handleTree } from '@/utils/tree'
import * as DeptApi from '@/api/system/dept'
const { t } = useI18n() // 国际化
const message = useMessage() // 消息弹窗
const { proxy }: any = getCurrentInstance();
const props = defineProps({
id: propTypes.number.def(undefined),
type: propTypes.number.def(undefined),
})
const templateOptions = ref([])
const dialogVisible = ref(false) // 弹窗的是否展示
const dialogTitle = ref('') // 弹窗的标题
const formLoading = ref(false) // 表单的加载中1修改时的数据加载2提交的按钮禁用
const formType = ref('') // 表单的类型create - 新增update - 修改
const deptTree = ref() // 部门树形结构
const formData = ref({
id: undefined,
name: undefined,
no: undefined,
customerId: undefined,
partyName: undefined,
lastPayDate: undefined,
partAddress: undefined,
secPartyPerson: undefined,
wechat: undefined,
quotationId: undefined,
invoiceTemplateId: undefined,
processInstanceId: undefined,
auditStatus: undefined,
startTime: undefined,
endTime: undefined,
penaltyRate: undefined,
latePaymentRate: undefined,
settleMethod: undefined,
lastPayDate: undefined,
contractTerm: undefined,
signUserId: undefined,
signPhoneNumber: undefined,
signEmail: undefined,
signWechat: undefined,
offlinePrice: undefined,
onlinePrice: undefined,
ownerUserId: undefined,
expanderUserId: undefined,
pricingUserId: undefined,
afterSaleUserId: undefined,
collUserId: undefined,
totalPrice: undefined,
contractBody: undefined,
contractAgreement: undefined,
creditMethod: undefined,
creditCalcCycle: undefined,
creditLimit: undefined,
partnerCompanyId: undefined,
deptId: undefined,
quotationTimes: undefined,
statementDate: undefined,
products: []
})
const formRules = reactive({
name: [{ required: true, message: '合同名称不能为空', trigger: 'blur' }],
customerId: [{ required: true, message: '客户不能为空', trigger: 'blur' }],
quotationId: [{ required: true, message: '报价单编号不能为空', trigger: 'blur' }],
orderDate: [{ required: true, message: '下单日期不能为空', trigger: 'blur' }],
// ownerUserId: [{ required: true, message: '负责人不能为空', trigger: 'blur' }],
statementDate: [{ required: true, message: '账单日不能为空', trigger: 'change' }],
contractType: [{ required: true, message: '合同类型不能为空', trigger: 'change' }],
penaltyRate: [{ required: true, message: '违约金比例不能为空', trigger: 'blur' }],
latePaymentRate: [{ required: true, message: '延期付款利率不能为空', trigger: 'blur' }],
collUserId: [{ required: true, message: '协作人不能为空', trigger: 'blur' }],
})
const formRef = ref() // 表单 Ref
const userOptions = ref<UserApi.UserVO[]>([]) // 用户列表
const customerList = ref([]) // 客户列表的数据
const quotationList = ref<QuotationVO[]>([])
const contactList = ref<ContactApi.ContactVO[]>([])
const orgList = ref([])
const statement = ref(new Array(31).fill(null))
/** 子表的表单 */
const subTabsName = ref('product')
const productFormRef = ref()
const contractAAuthorizedCompanyFormRef = ref()
const contractAAuthorizedPersonFormRef = ref()
const contractBAuthorizedPersonFormRef = ref()
/** 计算 discountPrice、totalPrice 价格 */
watch(
() => formData.value,
(val) => {
if (!val) {
return
}
// const totalPrice = val.products.reduce((prev, curr) => prev + curr.totalPrice, 0)
// 赋值
// formData.value.totalPrice = totalPrice
},
{ deep: true }
)
/** 打开弹窗 */
const open = async (type: string) => {
if (type) {
// formLoading.value = true
try {
formData.value = await ContractApi.getContract(type)
} finally {
formLoading.value = false
}
}
}
/** 表单校验 */
const validate = () => {
return formRef.value.validate()
}
/** 表单值 */
const getData = () => {
return formData.value
}
defineExpose({ open, validate, getData }) // 提供 open 方法,用于打开弹窗
/** 提交表单 */
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
const submitForm = async () => {
// 校验表单
if (!formRef) return
const valid = await formRef.value.validate()
if (!valid) return
// 提交请求
if(contractAAuthorizedCompanyFormRef.value.getData().length) {
const contractAAuthorizedCompanyValid = await contractAAuthorizedCompanyFormRef.value.validate()
if (!contractAAuthorizedCompanyValid) return message.warning('请完善合同甲方关联单位')
} else {
return message.warning('请完善合同甲方关联单位')
}
if(contractAAuthorizedPersonFormRef.value.getData().length) {
const contractAAuthorizedPerson = await contractAAuthorizedPersonFormRef.value.validate()
if (!contractAAuthorizedPerson) return message.warning('请完善合同甲方授权人信息')
} else {
return message.warning('请完善合同甲方授权人信息')
}
if(contractBAuthorizedPersonFormRef.value.getData().length) {
const contractBAuthorizedPersonPerson = await contractBAuthorizedPersonFormRef.value.validate()
if (!contractBAuthorizedPersonPerson) return message.warning('请完善合同乙方授权人信息')
} else {
return message.warning('请完善合同乙方授权人信息')
}
return
formLoading.value = true
try {
const data = unref(formData.value) as unknown as ContractApi.ContractVO
// 拼接子表的数据
data.contractAAuthorizedCompanys = contractAAuthorizedCompanyFormRef.value.getData()
data.contractAAuthorizedPersons = contractAAuthorizedPersonFormRef.value.getData()
data.contractBAuthorizedPersons = contractBAuthorizedPersonFormRef.value.getData()
if (!formType.value ) {
await ContractApi.createContract(data)
message.success(t('common.createSuccess'))
} else {
await ContractApi.updateContract(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 = {
id: undefined,
name: undefined,
no: undefined,
customerId: undefined,
quotationId: undefined,
invoiceTemplateId: undefined,
processInstanceId: undefined,
auditStatus: undefined,
startTime: undefined,
endTime: undefined,
penaltyRate: undefined,
latePaymentRate: undefined,
settleMethod: undefined,
lastPayDate: undefined,
contractTerm: undefined,
signUserId: undefined,
signPhoneNumber: undefined,
signEmail: undefined,
signWechat: undefined,
offlinePrice: undefined,
onlinePrice: undefined,
ownerUserId: undefined,
expanderUserId: undefined,
pricingUserId: undefined,
afterSaleUserId: undefined,
collUserId: undefined,
totalPrice: undefined,
contractBody: undefined,
contractAgreement: undefined,
creditMethod: undefined,
creditCalcCycle: undefined,
creditLimit: undefined,
partnerCompanyId: undefined,
deptId: undefined,
quotationTimes: undefined,
paymentTerm: undefined,
products: []
}
formRef.value?.resetFields()
}
/** 处理商机变化 */
const handleQuotationChange = async (quotationId: number) => {
if (!quotationId) return
try {
const quotation = await QuotationApi.getQuotation(quotationId)
formData.value.products = quotation.products;
formData.value.customerId = quotation.customerId;
formData.value.invoiceTemplateId = quotation.invoiceTemplateId;
formData.value.ownerUserId = quotation.ownerUserId;
formData.value.ownerUserMobile = quotation.ownerUserMobile;
formData.value.ownerUserWechat = quotation.ownerUserWechat;
formData.value.ownerUserEmail = quotation.ownerUserEmail;
formData.value.expanderUserId = quotation.expanderUserId;
formData.value.signUserId = quotation.signUserId;
formData.value.signPhoneNumber = quotation.signPhoneNumber;
formData.value.signEmail = quotation.signEmail;
formData.value.paymentTerm = quotation.paymentTerm;
formData.value.partnerCompanyId = quotation.partnerCompanyId;
formData.value.creditLimit = quotation.creditLimit;
formData.value.creditMethod = quotation.creditMethod;
formData.value.creditCalcCycle = quotation.creditCalcCycle;
formData.value.deptId = quotation.deptId;
formData.value.offlinePrice = quotation.offlinePrice;
formData.value.onlinePrice = quotation.onlinePrice;
formData.value.totalPrice = quotation.totalPrice;
const customerRes = await ContractApi.quotationTimes(quotation.id);
formData.value.quotationTimes = customerRes.quotationTimes;
await onCustomerChange(quotation.customerId);
await onPartnerChange(quotation.partnerCompanyId);
} catch (err) {
} finally {
}
}
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.actualCapital = customerRes.actualCapital;
formData.value.partAddress = customerRes.partAddress;
formData.value.listingStatus = customerRes.listingStatus;
formData.value.legalPersonName = customerRes.legalPersonName;
formData.value.creditCode = customerRes.creditCode;
formData.value.regType = customerRes.regType;
formData.value.financingInfo = customerRes.financingInfo;
formData.value.socialEmployeeNum = customerRes.socialEmployeeNum;
formData.value.registeredAddress = customerRes.registeredAddress;
} catch (err) {
console.error('获取客户详情失败:', err);
} finally {
formLoading.value = false;
}
}
const onPartnerChange = async (id: string) => {
if (!id) return
try {
formLoading.value = true;
const res = await ContractApi.getOrgInfo(id);
formData.value.bankName = res.bankName;
formData.value.bankAccount = res.bankAccount;
formData.value.legalRepresentative = res.legalRepresentative;
formData.value.businessLicenseNumber = res.businessLicenseNumber;
formData.value.businessLicense = res.businessLicense;
// formData.value.partnerCompanyId = res.partnerCompanyId;
} catch (err) {
} finally {
formLoading.value = false;
}
}
const onPrintContract = async (id: string) => {
if (!id) return
try {
formLoading.value = true;
const res = await ContractApi.printContract(id);
} catch (err) {
} finally {
formLoading.value = false;
}
}
/** 动态获取客户联系人 */
const getContactOptions = computed(() =>
contactList.value.filter((item) => item.customerId == formData.value.customerId)
)
const route = useRoute();
onMounted(async () => {
formType.value = props.id || route.query.id
if (formType.value) await open(formType.value)
// 获得客户列表
customerList.value = await CustomerApi.getCustomerSimpleList()
// 获得用户列表
userOptions.value = await UserApi.getSimpleUserList()
// 获得报价列表
quotationList.value = await QuotationApi.getSimpleQuotationList()
//票据
const tempData = await BillTemplateApi.getBillTemplatePage({
pageNo: 1,
pageSize: 1000,
})
templateOptions.value = tempData.list
// 获得部门树
deptTree.value = handleTree(await DeptApi.getSimpleDeptList())
// 默认新建时选中自己
// if (formType.value === 'create') {
// formData.value.ownerUserId = useUserStore().getUser.id
// }
// 获取联系人
contactList.value = await ContactApi.getSimpleContactList()
const data = await ContractApi.getOrg({
pageNo: 1,
pageSize: 1000
})
orgList.value = data.list
});
</script>