crm 报价 商机 合同 三块整改
parent
112b15ed81
commit
2ff8f2a6ec
File diff suppressed because it is too large
Load Diff
|
|
@ -2,35 +2,41 @@ import request from '@/config/axios'
|
|||
import { TransferReqVO } from '@/api/crm/permission'
|
||||
|
||||
export interface ContractVO {
|
||||
id: number
|
||||
name: string
|
||||
no: string
|
||||
customerId: number
|
||||
customerName?: string
|
||||
businessId: number
|
||||
businessName: string
|
||||
contactLastTime: Date
|
||||
ownerUserId: number
|
||||
ownerUserName?: string
|
||||
ownerUserDeptName?: string
|
||||
processInstanceId: number
|
||||
auditStatus: number
|
||||
orderDate: Date
|
||||
startTime: Date
|
||||
endTime: Date
|
||||
totalProductPrice: number
|
||||
discountPercent: number
|
||||
totalPrice: number
|
||||
totalReceivablePrice: number
|
||||
signContactId: number
|
||||
signContactName?: string
|
||||
signUserId: number
|
||||
signUserName: string
|
||||
remark: string
|
||||
createTime?: Date
|
||||
creator: string
|
||||
creatorName: string
|
||||
updateTime?: Date
|
||||
id: number // 编号,主键自增
|
||||
name: string // 合同名称
|
||||
no: string // 合同编号
|
||||
customerId: number // 客户编号
|
||||
quotationId: number // 报价单编号
|
||||
invoiceTemplateId: number // 票据模板Id
|
||||
processInstanceId: string // 工作流编号
|
||||
auditStatus: number // 审批状态
|
||||
startTime: Date // 合同签订日期
|
||||
endTime: Date // 合同结束时间
|
||||
penaltyRate: number // 违约金比例
|
||||
latePaymentRate: number // 延期付款利率
|
||||
settleMethod: string // 财务结算方式 1按月 2按项目
|
||||
lastPayDate: Date // 最晚付款日期
|
||||
contractTerm: number // 合同期限(月)
|
||||
signUserId: number // 报价签约人
|
||||
signPhoneNumber: number // 签约人联系电话
|
||||
signEmail: string // 签约人Email
|
||||
signWechat: string // 签约人微信
|
||||
offlinePrice: number // 线下总金额,单位:元
|
||||
onlinePrice: number // 线上总金额,单位:元
|
||||
ownerUserId: number // 商机负责人
|
||||
expanderUserId: number // 拓展人
|
||||
pricingUserId: number // 方案报价人
|
||||
afterSaleUserId: number // 售后维护人
|
||||
collUserId: number // 协作人id
|
||||
totalPrice: number // 合同总金额
|
||||
contractBody: string // 合同正文
|
||||
contractAgreement: string // 合同补充协议
|
||||
creditMethod: number // 授信方式
|
||||
creditCalcCycle: number // 授信计算周期
|
||||
creditLimit: number // 授信额度
|
||||
partnerCompanyId: number // 合作主体 关联部门id
|
||||
deptId: number // 归属部门Id
|
||||
quotationTimes: number // 第几次报价
|
||||
products?: [
|
||||
{
|
||||
id: number
|
||||
|
|
@ -112,3 +118,30 @@ export const getAuditContractCount = async () => {
|
|||
export const getRemindContractCount = async () => {
|
||||
return await request.get({ url: '/crm/contract/remind-count' })
|
||||
}
|
||||
|
||||
// ==================== 子表(CRM 合同产品关联) ====================
|
||||
|
||||
// 获得CRM 合同产品关联列表
|
||||
export const getContractProductListByContractId = async (contractId) => {
|
||||
return await request.get({ url: `/crm/contract/contract-product/list-by-contract-id?contractId=` + contractId })
|
||||
}
|
||||
|
||||
// ==================== 子表(合同甲方关联单位) ====================
|
||||
|
||||
// 获得合同甲方关联单位列表
|
||||
export const getContractAAuthorizedCompanyListByContractId = async (contractId) => {
|
||||
return await request.get({ url: `/crm/contract/contract-A-authorized-company/list-by-contract-id?contractId=` + contractId })
|
||||
}
|
||||
// ==================== 子表(合同甲方授权人信息) ====================
|
||||
|
||||
// 获得合同甲方授权人信息列表
|
||||
export const getContractAAuthorizedPersonListByContractId = async (contractId) => {
|
||||
return await request.get({ url: `/crm/contract/contract-A-authorized-person/list-by-contract-id?contractId=` + contractId })
|
||||
}
|
||||
|
||||
// ==================== 子表(合同乙方授权人信息) ====================
|
||||
|
||||
// 获得合同乙方授权人信息列表
|
||||
export const getContractBAuthorizedPersonListByContractId = async (contractId) => {
|
||||
return await request.get({ url: `/crm/contract/contract-B-authorized-person/list-by-contract-id?contractId=` + contractId })
|
||||
}
|
||||
|
|
|
|||
|
|
@ -64,6 +64,20 @@
|
|||
</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
|
||||
check-strictly
|
||||
node-key="id"
|
||||
placeholder="请选择归属部门"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="8">
|
||||
|
|
@ -238,9 +252,12 @@ import * as BusinessApi from '@/api/crm/business'
|
|||
import * as BusinessStatusApi from '@/api/crm/business/status'
|
||||
import * as CustomerApi from '@/api/crm/customer'
|
||||
import * as UserApi from '@/api/system/user'
|
||||
import * as DeptApi from '@/api/system/dept'
|
||||
import { useUserStore } from '@/store/modules/user'
|
||||
import { defaultProps, handleTree } from '@/utils/tree'
|
||||
import BusinessProductForm from './components/BusinessProductForm.vue'
|
||||
import { erpPriceMultiply, erpPriceInputFormatter } from '@/utils'
|
||||
const deptTree = ref() // 部门树形结构
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
|
@ -257,6 +274,7 @@ const formData = ref({
|
|||
contactLastTime: undefined,
|
||||
contactNextTime: undefined,
|
||||
ownerUserId: undefined,
|
||||
deptId: undefined,
|
||||
requestorUserId: undefined,
|
||||
statusTypeId: undefined,
|
||||
statusId: undefined,
|
||||
|
|
@ -272,9 +290,7 @@ const formData = ref({
|
|||
creditMethod: undefined,
|
||||
creditCalcCycle: undefined,
|
||||
creditLimit: undefined,
|
||||
techSupport: undefined,
|
||||
remark: undefined,
|
||||
endRemark: undefined
|
||||
techSupport: undefined
|
||||
})
|
||||
const formRules = reactive({
|
||||
name: [{ required: true, message: '商机名称不能为空', trigger: 'blur' }],
|
||||
|
|
@ -338,6 +354,8 @@ const open = async (type: string, id?: number, customerId?: number, contactId?:
|
|||
statusTypeList.value = await BusinessStatusApi.getBusinessStatusTypeSimpleList()
|
||||
// 获得用户列表
|
||||
userOptions.value = await UserApi.getSimpleUserList()
|
||||
// 获得部门树
|
||||
deptTree.value = handleTree(await DeptApi.getSimpleDeptList())
|
||||
// 默认新建时选中自己
|
||||
if (formType.value === 'create') {
|
||||
formData.value.ownerUserId = useUserStore().getUser.id
|
||||
|
|
@ -381,10 +399,7 @@ const resetForm = () => {
|
|||
ownerUserId: undefined,
|
||||
statusTypeId: undefined,
|
||||
dealTime: undefined,
|
||||
discountPercent: 0,
|
||||
totalProductPrice: undefined,
|
||||
totalPrice: undefined,
|
||||
remark: undefined,
|
||||
products: [],
|
||||
contactId: undefined,
|
||||
customerDefault: false
|
||||
|
|
|
|||
|
|
@ -140,6 +140,127 @@
|
|||
<el-input v-model="formData.remark" placeholder="请输入备注" type="textarea" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-form-item label="合同名称" prop="name">
|
||||
<el-input v-model="formData.name" placeholder="请输入合同名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="合同编号" prop="no">
|
||||
<el-input v-model="formData.no" placeholder="请输入合同编号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="客户编号" prop="customerId">
|
||||
<el-input v-model="formData.customerId" placeholder="请输入客户编号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="报价单编号" prop="quotationId">
|
||||
<el-input v-model="formData.quotationId" placeholder="请输入报价单编号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="票据模板Id" prop="invoiceTemplateId">
|
||||
<el-input v-model="formData.invoiceTemplateId" placeholder="请输入票据模板Id" />
|
||||
</el-form-item>
|
||||
<el-form-item label="工作流编号" prop="processInstanceId">
|
||||
<el-input v-model="formData.processInstanceId" placeholder="请输入工作流编号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="审批状态" prop="auditStatus">
|
||||
<el-radio-group v-model="formData.auditStatus">
|
||||
<el-radio value="1">请选择字典生成</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="合同签订日期" prop="startTime">
|
||||
<el-date-picker
|
||||
v-model="formData.startTime"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择合同签订日期"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="合同结束时间" prop="endTime">
|
||||
<el-date-picker
|
||||
v-model="formData.endTime"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择合同结束时间"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="违约金比例" prop="penaltyRate">
|
||||
<el-input v-model="formData.penaltyRate" placeholder="请输入违约金比例" />
|
||||
</el-form-item>
|
||||
<el-form-item label="延期付款利率" prop="latePaymentRate">
|
||||
<el-input v-model="formData.latePaymentRate" placeholder="请输入延期付款利率" />
|
||||
</el-form-item>
|
||||
<el-form-item label="财务结算方式 1按月 2按项目" prop="settleMethod">
|
||||
<el-input v-model="formData.settleMethod" placeholder="请输入财务结算方式 1按月 2按项目" />
|
||||
</el-form-item>
|
||||
<el-form-item label="最晚付款日期" prop="lastPayDate">
|
||||
<el-date-picker
|
||||
v-model="formData.lastPayDate"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择最晚付款日期"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="合同期限(月)" prop="contractTerm">
|
||||
<el-input v-model="formData.contractTerm" placeholder="请输入合同期限(月)" />
|
||||
</el-form-item>
|
||||
<el-form-item label="报价签约人" prop="signUserId">
|
||||
<el-input v-model="formData.signUserId" placeholder="请输入报价签约人" />
|
||||
</el-form-item>
|
||||
<el-form-item label="签约人联系电话" prop="signPhoneNumber">
|
||||
<el-input v-model="formData.signPhoneNumber" placeholder="请输入签约人联系电话" />
|
||||
</el-form-item>
|
||||
<el-form-item label="签约人Email" prop="signEmail">
|
||||
<el-input v-model="formData.signEmail" placeholder="请输入签约人Email" />
|
||||
</el-form-item>
|
||||
<el-form-item label="签约人微信" prop="signWechat">
|
||||
<el-input v-model="formData.signWechat" placeholder="请输入签约人微信" />
|
||||
</el-form-item>
|
||||
<el-form-item label="线下总金额,单位:元" prop="offlinePrice">
|
||||
<el-input v-model="formData.offlinePrice" placeholder="请输入线下总金额,单位:元" />
|
||||
</el-form-item>
|
||||
<el-form-item label="线上总金额,单位:元" prop="onlinePrice">
|
||||
<el-input v-model="formData.onlinePrice" placeholder="请输入线上总金额,单位:元" />
|
||||
</el-form-item>
|
||||
<el-form-item label="商机负责人" prop="ownerUserId">
|
||||
<el-input v-model="formData.ownerUserId" placeholder="请输入商机负责人" />
|
||||
</el-form-item>
|
||||
<el-form-item label="拓展人" prop="expanderUserId">
|
||||
<el-input v-model="formData.expanderUserId" placeholder="请输入拓展人" />
|
||||
</el-form-item>
|
||||
<el-form-item label="方案报价人" prop="pricingUserId">
|
||||
<el-input v-model="formData.pricingUserId" placeholder="请输入方案报价人" />
|
||||
</el-form-item>
|
||||
<el-form-item label="售后维护人" prop="afterSaleUserId">
|
||||
<el-input v-model="formData.afterSaleUserId" placeholder="请输入售后维护人" />
|
||||
</el-form-item>
|
||||
<el-form-item label="协作人id" prop="collUserId">
|
||||
<el-input v-model="formData.collUserId" placeholder="请输入协作人id" />
|
||||
</el-form-item>
|
||||
<el-form-item label="合同总金额" prop="totalPrice">
|
||||
<el-input v-model="formData.totalPrice" placeholder="请输入合同总金额" />
|
||||
</el-form-item>
|
||||
<el-form-item label="合同正文" prop="contractBody">
|
||||
<el-input v-model="formData.contractBody" placeholder="请输入合同正文" />
|
||||
</el-form-item>
|
||||
<el-form-item label="合同补充协议" prop="contractAgreement">
|
||||
<el-input v-model="formData.contractAgreement" placeholder="请输入合同补充协议" />
|
||||
</el-form-item>
|
||||
<el-form-item label="授信方式" prop="creditMethod">
|
||||
<el-input v-model="formData.creditMethod" placeholder="请输入授信方式" />
|
||||
</el-form-item>
|
||||
<el-form-item label="授信计算周期" prop="creditCalcCycle">
|
||||
<el-input v-model="formData.creditCalcCycle" placeholder="请输入授信计算周期" />
|
||||
</el-form-item>
|
||||
<el-form-item label="授信额度" prop="creditLimit">
|
||||
<el-input v-model="formData.creditLimit" placeholder="请输入授信额度" />
|
||||
</el-form-item>
|
||||
<el-form-item label="合作主体 关联部门id" prop="partnerCompanyId">
|
||||
<el-input v-model="formData.partnerCompanyId" placeholder="请输入合作主体 关联部门id" />
|
||||
</el-form-item>
|
||||
<el-form-item label="归属部门Id" prop="deptId">
|
||||
<el-input v-model="formData.deptId" placeholder="请输入归属部门Id" />
|
||||
</el-form-item>
|
||||
<el-form-item label="第几次报价" prop="quotationTimes">
|
||||
<el-input v-model="formData.quotationTimes" placeholder="请输入第几次报价" />
|
||||
</el-form-item>
|
||||
|
||||
</el-row>
|
||||
<!-- 子表的表单 -->
|
||||
<ContentWrap>
|
||||
|
|
@ -151,6 +272,15 @@
|
|||
:disabled="disabled"
|
||||
/>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="合同甲方关联单位" name="contractAAuthorizedCompany">
|
||||
<ContractAAuthorizedCompanyForm ref="contractAAuthorizedCompanyFormRef" :contract-id="formData.id" />
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="合同甲方授权人信息" name="contractAAuthorizedPerson">
|
||||
<ContractAAuthorizedPersonForm ref="contractAAuthorizedPersonFormRef" :contract-id="formData.id" />
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="合同乙方授权人信息" name="contractBAuthorizedPerson">
|
||||
<ContractBAuthorizedPersonForm ref="contractBAuthorizedPersonFormRef" :contract-id="formData.id" />
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</ContentWrap>
|
||||
<el-row>
|
||||
|
|
@ -202,6 +332,10 @@ import * as BusinessApi from '@/api/crm/business'
|
|||
import { erpPriceMultiply, erpPriceInputFormatter } from '@/utils'
|
||||
import { useUserStore } from '@/store/modules/user'
|
||||
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'
|
||||
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
|
@ -212,19 +346,40 @@ const formLoading = ref(false) // 表单的加载中:1)修改时的数据加
|
|||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formData = ref({
|
||||
id: undefined,
|
||||
no: undefined,
|
||||
name: undefined,
|
||||
no: undefined,
|
||||
customerId: undefined,
|
||||
businessId: undefined,
|
||||
orderDate: 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,
|
||||
signContactId: undefined,
|
||||
signPhoneNumber: undefined,
|
||||
signEmail: undefined,
|
||||
signWechat: undefined,
|
||||
offlinePrice: undefined,
|
||||
onlinePrice: undefined,
|
||||
ownerUserId: undefined,
|
||||
discountPercent: 0,
|
||||
totalProductPrice: undefined,
|
||||
remark: 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,
|
||||
products: []
|
||||
})
|
||||
const formRules = reactive({
|
||||
|
|
@ -242,6 +397,9 @@ const contactList = ref<ContactApi.ContactVO[]>([])
|
|||
/** 子表的表单 */
|
||||
const subTabsName = ref('product')
|
||||
const productFormRef = ref()
|
||||
const contractAAuthorizedCompanyFormRef = ref()
|
||||
const contractAAuthorizedPersonFormRef = ref()
|
||||
const contractBAuthorizedPersonFormRef = ref()
|
||||
|
||||
/** 计算 discountPrice、totalPrice 价格 */
|
||||
watch(
|
||||
|
|
@ -305,6 +463,11 @@ const submitForm = async () => {
|
|||
productFormRef.value.validate()
|
||||
try {
|
||||
const data = unref(formData.value) as unknown as ContractApi.ContractVO
|
||||
// 拼接子表的数据
|
||||
data.contractProducts = contractProductFormRef.value.getData()
|
||||
data.contractAAuthorizedCompanys = contractAAuthorizedCompanyFormRef.value.getData()
|
||||
data.contractAAuthorizedPersons = contractAAuthorizedPersonFormRef.value.getData()
|
||||
data.contractBAuthorizedPersons = contractBAuthorizedPersonFormRef.value.getData()
|
||||
if (formType.value === 'create') {
|
||||
await ContractApi.createContract(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
|
|
@ -324,19 +487,40 @@ const submitForm = async () => {
|
|||
const resetForm = () => {
|
||||
formData.value = {
|
||||
id: undefined,
|
||||
no: undefined,
|
||||
name: undefined,
|
||||
no: undefined,
|
||||
customerId: undefined,
|
||||
businessId: undefined,
|
||||
orderDate: 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,
|
||||
signContactId: undefined,
|
||||
signPhoneNumber: undefined,
|
||||
signEmail: undefined,
|
||||
signWechat: undefined,
|
||||
offlinePrice: undefined,
|
||||
onlinePrice: undefined,
|
||||
ownerUserId: undefined,
|
||||
discountPercent: 0,
|
||||
totalProductPrice: undefined,
|
||||
remark: 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,
|
||||
products: []
|
||||
}
|
||||
formRef.value?.resetFields()
|
||||
|
|
|
|||
|
|
@ -0,0 +1,152 @@
|
|||
<template>
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
v-loading="formLoading"
|
||||
label-width="0px"
|
||||
:inline-message="true"
|
||||
>
|
||||
<el-table :data="formData" class="-mt-10px">
|
||||
<el-table-column label="序号" type="index" width="100" />
|
||||
<el-table-column label="单位名称" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.customerName`" :rules="formRules.customerName" class="mb-0px!">
|
||||
<el-input v-model="row.customerName" placeholder="请输入单位名称" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="统一社会信用代码" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.unifiedCreditCode`" :rules="formRules.unifiedCreditCode" class="mb-0px!">
|
||||
<el-input v-model="row.unifiedCreditCode" placeholder="请输入统一社会信用代码" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="开票地址" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.invoicingAddress`" :rules="formRules.invoicingAddress" class="mb-0px!">
|
||||
<el-input v-model="row.invoicingAddress" placeholder="请输入开票地址" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="开票电话" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.invoicingTelephone`" :rules="formRules.invoicingTelephone" class="mb-0px!">
|
||||
<el-input v-model="row.invoicingTelephone" placeholder="请输入开票电话" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="开户行" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.companyBank`" :rules="formRules.companyBank" class="mb-0px!">
|
||||
<el-input v-model="row.companyBank" placeholder="请输入开户行" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="开户账号" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.companyAccount`" :rules="formRules.companyAccount" class="mb-0px!">
|
||||
<el-input v-model="row.companyAccount" placeholder="请输入开户账号" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="通讯地址" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.companyAddress`" :rules="formRules.companyAddress" class="mb-0px!">
|
||||
<el-input v-model="row.companyAddress" placeholder="请输入通讯地址" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="删除标记:1-正常,-1-已删除" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.deletedFlag`" :rules="formRules.deletedFlag" class="mb-0px!">
|
||||
<el-input v-model="row.deletedFlag" placeholder="请输入删除标记:1-正常,-1-已删除" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" fixed="right" label="操作" width="60">
|
||||
<template #default="{ $index }">
|
||||
<el-button @click="handleDelete($index)" link>—</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form>
|
||||
<el-row justify="center" class="mt-3">
|
||||
<el-button @click="handleAdd" round>+ 添加合同甲方关联单位</el-button>
|
||||
</el-row>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import * as ContractApi from '@/api/crm/contract'
|
||||
|
||||
const props = defineProps<{
|
||||
contractId: undefined // 合同ID(主表的关联字段)
|
||||
}>()
|
||||
const formLoading = ref(false) // 表单的加载中
|
||||
const formData = ref([])
|
||||
const formRules = reactive({
|
||||
contractId: [{ required: true, message: '合同ID不能为空', trigger: 'blur' }],
|
||||
customerName: [{ required: true, message: '单位名称不能为空', trigger: 'blur' }],
|
||||
unifiedCreditCode: [{ required: true, message: '统一社会信用代码不能为空', trigger: 'blur' }],
|
||||
invoicingAddress: [{ required: true, message: '开票地址不能为空', trigger: 'blur' }],
|
||||
invoicingTelephone: [{ required: true, message: '开票电话不能为空', trigger: 'blur' }],
|
||||
companyBank: [{ required: true, message: '开户行不能为空', trigger: 'blur' }],
|
||||
companyAccount: [{ required: true, message: '开户账号不能为空', trigger: 'blur' }]
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 监听主表的关联字段的变化,加载对应的子表数据 */
|
||||
watch(
|
||||
() => props.contractId,
|
||||
async (val) => {
|
||||
// 1. 重置表单
|
||||
formData.value = []
|
||||
// 2. val 非空,则加载数据
|
||||
if (!val) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
formLoading.value = true
|
||||
formData.value = await ContractApi.getContractAAuthorizedCompanyListByContractId(val)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
},
|
||||
{ immediate: true }
|
||||
)
|
||||
|
||||
/** 新增按钮操作 */
|
||||
const handleAdd = () => {
|
||||
const row = {
|
||||
id: undefined,
|
||||
contractId: undefined,
|
||||
customerName: undefined,
|
||||
unifiedCreditCode: undefined,
|
||||
invoicingAddress: undefined,
|
||||
invoicingTelephone: undefined,
|
||||
companyBank: undefined,
|
||||
companyAccount: undefined,
|
||||
companyAddress: undefined,
|
||||
deletedFlag: undefined
|
||||
}
|
||||
row.contractId = props.contractId
|
||||
formData.value.push(row)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = (index) => {
|
||||
formData.value.splice(index, 1)
|
||||
}
|
||||
|
||||
/** 表单校验 */
|
||||
const validate = () => {
|
||||
return formRef.value.validate()
|
||||
}
|
||||
|
||||
/** 表单值 */
|
||||
const getData = () => {
|
||||
return formData.value
|
||||
}
|
||||
|
||||
defineExpose({ validate, getData })
|
||||
</script>
|
||||
|
|
@ -0,0 +1,151 @@
|
|||
<template>
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
v-loading="formLoading"
|
||||
label-width="0px"
|
||||
:inline-message="true"
|
||||
>
|
||||
<el-table :data="formData" class="-mt-10px">
|
||||
<el-table-column label="序号" type="index" width="100" />
|
||||
<el-table-column label="客户联系人ID" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.customerContactId`" :rules="formRules.customerContactId" class="mb-0px!">
|
||||
<el-input v-model="row.customerContactId" placeholder="请输入客户联系人ID" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="姓名" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.customerName`" :rules="formRules.customerName" class="mb-0px!">
|
||||
<el-input v-model="row.customerName" placeholder="请输入姓名" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="授权人类型" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.authPersonType`" :rules="formRules.authPersonType" class="mb-0px!">
|
||||
<el-select v-model="row.authPersonType" placeholder="请选择授权人类型">
|
||||
<el-option label="请选择字典生成" value="" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="手机号" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.phoneNumber`" :rules="formRules.phoneNumber" class="mb-0px!">
|
||||
<el-input v-model="row.phoneNumber" placeholder="请输入手机号" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="微信号" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.wechat`" :rules="formRules.wechat" class="mb-0px!">
|
||||
<el-input v-model="row.wechat" placeholder="请输入微信号" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="身份证号" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.idNumber`" :rules="formRules.idNumber" class="mb-0px!">
|
||||
<el-input v-model="row.idNumber" placeholder="请输入身份证号" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="电子邮箱" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.email`" :rules="formRules.email" class="mb-0px!">
|
||||
<el-input v-model="row.email" placeholder="请输入电子邮箱" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="删除标记:1-正常,-1-已删除" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.deletedFlag`" :rules="formRules.deletedFlag" class="mb-0px!">
|
||||
<el-input v-model="row.deletedFlag" placeholder="请输入删除标记:1-正常,-1-已删除" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" fixed="right" label="操作" width="60">
|
||||
<template #default="{ $index }">
|
||||
<el-button @click="handleDelete($index)" link>—</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form>
|
||||
<el-row justify="center" class="mt-3">
|
||||
<el-button @click="handleAdd" round>+ 添加合同甲方授权人信息</el-button>
|
||||
</el-row>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import * as ContractApi from '@/api/crm/contract'
|
||||
|
||||
const props = defineProps<{
|
||||
contractId: undefined // 合同ID(主表的关联字段)
|
||||
}>()
|
||||
const formLoading = ref(false) // 表单的加载中
|
||||
const formData = ref([])
|
||||
const formRules = reactive({
|
||||
contractId: [{ required: true, message: '合同ID不能为空', trigger: 'blur' }],
|
||||
customerContactId: [{ required: true, message: '客户联系人ID不能为空', trigger: 'blur' }],
|
||||
customerName: [{ required: true, message: '姓名不能为空', trigger: 'blur' }],
|
||||
phoneNumber: [{ required: true, message: '手机号不能为空', trigger: 'blur' }]
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 监听主表的关联字段的变化,加载对应的子表数据 */
|
||||
watch(
|
||||
() => props.contractId,
|
||||
async (val) => {
|
||||
// 1. 重置表单
|
||||
formData.value = []
|
||||
// 2. val 非空,则加载数据
|
||||
if (!val) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
formLoading.value = true
|
||||
formData.value = await ContractApi.getContractAAuthorizedPersonListByContractId(val)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
},
|
||||
{ immediate: true }
|
||||
)
|
||||
|
||||
/** 新增按钮操作 */
|
||||
const handleAdd = () => {
|
||||
const row = {
|
||||
id: undefined,
|
||||
contractId: undefined,
|
||||
customerContactId: undefined,
|
||||
customerName: undefined,
|
||||
authPersonType: undefined,
|
||||
phoneNumber: undefined,
|
||||
wechat: undefined,
|
||||
idNumber: undefined,
|
||||
email: undefined,
|
||||
deletedFlag: undefined
|
||||
}
|
||||
row.contractId = props.contractId
|
||||
formData.value.push(row)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = (index) => {
|
||||
formData.value.splice(index, 1)
|
||||
}
|
||||
|
||||
/** 表单校验 */
|
||||
const validate = () => {
|
||||
return formRef.value.validate()
|
||||
}
|
||||
|
||||
/** 表单值 */
|
||||
const getData = () => {
|
||||
return formData.value
|
||||
}
|
||||
|
||||
defineExpose({ validate, getData })
|
||||
</script>
|
||||
|
|
@ -0,0 +1,167 @@
|
|||
<template>
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
v-loading="formLoading"
|
||||
label-width="0px"
|
||||
:inline-message="true"
|
||||
>
|
||||
<el-table :data="formData" class="-mt-10px">
|
||||
<el-table-column label="序号" type="index" width="100" />
|
||||
<el-table-column label="用户ID" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.userId`" :rules="formRules.userId" class="mb-0px!">
|
||||
<el-input v-model="row.userId" placeholder="请输入用户ID" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="姓名" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.name`" :rules="formRules.name" class="mb-0px!">
|
||||
<el-input v-model="row.name" placeholder="请输入姓名" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="类别:商旅负责人、技术负责人、服务对接人" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.authType`" :rules="formRules.authType" class="mb-0px!">
|
||||
<el-select v-model="row.authType" placeholder="请选择类别:商旅负责人、技术负责人、服务对接人">
|
||||
<el-option label="请选择字典生成" value="" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="岗位" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.postId`" :rules="formRules.postId" class="mb-0px!">
|
||||
<el-input v-model="row.postId" placeholder="请输入岗位" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="职级" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.userRank`" :rules="formRules.userRank" class="mb-0px!">
|
||||
<el-input v-model="row.userRank" placeholder="请输入职级" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="权限说明" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.authDesc`" :rules="formRules.authDesc" class="mb-0px!">
|
||||
<el-input v-model="row.authDesc" placeholder="请输入权限说明" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="手机号" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.phoneNumber`" :rules="formRules.phoneNumber" class="mb-0px!">
|
||||
<el-input v-model="row.phoneNumber" placeholder="请输入手机号" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="微信号" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.wechat`" :rules="formRules.wechat" class="mb-0px!">
|
||||
<el-input v-model="row.wechat" placeholder="请输入微信号" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="电子邮箱" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.email`" :rules="formRules.email" class="mb-0px!">
|
||||
<el-input v-model="row.email" placeholder="请输入电子邮箱" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="删除标记:1-正常,-1-已删除" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.deletedFlag`" :rules="formRules.deletedFlag" class="mb-0px!">
|
||||
<el-input v-model="row.deletedFlag" placeholder="请输入删除标记:1-正常,-1-已删除" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" fixed="right" label="操作" width="60">
|
||||
<template #default="{ $index }">
|
||||
<el-button @click="handleDelete($index)" link>—</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form>
|
||||
<el-row justify="center" class="mt-3">
|
||||
<el-button @click="handleAdd" round>+ 添加合同乙方授权人信息</el-button>
|
||||
</el-row>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import * as ContractApi from '@/api/crm/contract'
|
||||
|
||||
const props = defineProps<{
|
||||
contractId: undefined // 合同ID(主表的关联字段)
|
||||
}>()
|
||||
const formLoading = ref(false) // 表单的加载中
|
||||
const formData = ref([])
|
||||
const formRules = reactive({
|
||||
contractId: [{ required: true, message: '合同ID不能为空', trigger: 'blur' }],
|
||||
userId: [{ required: true, message: '用户ID不能为空', trigger: 'blur' }],
|
||||
name: [{ required: true, message: '姓名不能为空', trigger: 'blur' }],
|
||||
phoneNumber: [{ required: true, message: '手机号不能为空', trigger: 'blur' }]
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 监听主表的关联字段的变化,加载对应的子表数据 */
|
||||
watch(
|
||||
() => props.contractId,
|
||||
async (val) => {
|
||||
// 1. 重置表单
|
||||
formData.value = []
|
||||
// 2. val 非空,则加载数据
|
||||
if (!val) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
formLoading.value = true
|
||||
formData.value = await ContractApi.getContractBAuthorizedPersonListByContractId(val)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
},
|
||||
{ immediate: true }
|
||||
)
|
||||
|
||||
/** 新增按钮操作 */
|
||||
const handleAdd = () => {
|
||||
const row = {
|
||||
id: undefined,
|
||||
contractId: undefined,
|
||||
userId: undefined,
|
||||
name: undefined,
|
||||
authType: undefined,
|
||||
postId: undefined,
|
||||
userRank: undefined,
|
||||
authDesc: undefined,
|
||||
phoneNumber: undefined,
|
||||
wechat: undefined,
|
||||
email: undefined,
|
||||
deletedFlag: undefined
|
||||
}
|
||||
row.contractId = props.contractId
|
||||
formData.value.push(row)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = (index) => {
|
||||
formData.value.splice(index, 1)
|
||||
}
|
||||
|
||||
/** 表单校验 */
|
||||
const validate = () => {
|
||||
return formRef.value.validate()
|
||||
}
|
||||
|
||||
/** 表单值 */
|
||||
const getData = () => {
|
||||
return formData.value
|
||||
}
|
||||
|
||||
defineExpose({ validate, getData })
|
||||
</script>
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<Dialog :title="dialogTitle" v-model="dialogVisible">
|
||||
<Dialog :title="dialogTitle" v-model="dialogVisible" width="1280">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
|
|
@ -7,39 +7,191 @@
|
|||
label-width="100px"
|
||||
v-loading="formLoading"
|
||||
>
|
||||
<el-form-item label="报价单编号" prop="no">
|
||||
<el-input v-model="formData.no" placeholder="请输入报价单编号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="客户" prop="customerId">
|
||||
<el-select v-model="formData.customerId" placeholder="请选择客户">
|
||||
<el-option
|
||||
v-for="item in customerList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
<el-row>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="报价单编号" prop="no">
|
||||
<el-input v-model="formData.no" placeholder="请输入报价单编号" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="选择商机" prop="businessId">
|
||||
<el-select v-model="formData.businessId" placeholder="请选择商机" @change="onBusinessChange">
|
||||
<el-option
|
||||
v-for="dict in businessList"
|
||||
:key="dict.id"
|
||||
:label="dict.name"
|
||||
:value="dict.id"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="选择商机" prop="businessId">
|
||||
<el-select v-model="formData.businessId" placeholder="请选择商机" @change="onBusinessChange">
|
||||
<el-option
|
||||
v-for="dict in businessList"
|
||||
:key="dict.id"
|
||||
:label="dict.name"
|
||||
:value="dict.id"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="票据模板" prop="invoiceTemplateId">
|
||||
<el-select v-model="formData.invoiceTemplateId" placeholder="请选择票据模板">
|
||||
<el-option
|
||||
v-for="dict in userOptions"
|
||||
:key="dict.id"
|
||||
:label="dict.nickname"
|
||||
:value="dict.id"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-select>
|
||||
</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 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="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="invoiceTemplateId">
|
||||
<el-select v-model="formData.invoiceTemplateId" 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="ownerUserId">
|
||||
<el-select v-model="formData.ownerUserId" placeholder="请选择商机负责人">
|
||||
<el-option
|
||||
|
|
@ -50,6 +202,8 @@
|
|||
/>
|
||||
</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
|
||||
|
|
@ -60,6 +214,8 @@
|
|||
/>
|
||||
</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
|
||||
|
|
@ -70,6 +226,8 @@
|
|||
/>
|
||||
</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
|
||||
|
|
@ -80,72 +238,82 @@
|
|||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="签约人联系电话" prop="signPhoneNumber">
|
||||
<el-input v-model="formData.signPhoneNumber" placeholder="请输入签约人联系电话" />
|
||||
</el-form-item>
|
||||
<el-form-item label="签约人Email" prop="signEmail">
|
||||
<el-input v-model="formData.signEmail" placeholder="请输入签约人Email" />
|
||||
</el-form-item>
|
||||
<el-form-item label="签约人微信" prop="signWechat">
|
||||
<el-input v-model="formData.signWechat" placeholder="请输入签约人微信" />
|
||||
</el-form-item>
|
||||
<el-form-item label="合同总金额" prop="totalPrice">
|
||||
<el-input v-model="formData.totalPrice" placeholder="" disabled="false" />
|
||||
</el-form-item>
|
||||
<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-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="totalPrice">
|
||||
<el-input v-model="formData.totalPrice" placeholder="" disabled="false" />
|
||||
</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="deptId">
|
||||
<el-tree-select
|
||||
v-model="formData.deptId"
|
||||
:data="deptTree"
|
||||
:props="defaultProps"
|
||||
filterable
|
||||
check-strictly
|
||||
node-key="id"
|
||||
placeholder="请选择归属部门"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<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-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-form-item label="授信额度" prop="creditLimit">
|
||||
<el-input v-model="formData.creditLimit" placeholder="请输入授信额度" />
|
||||
</el-form-item>
|
||||
<el-form-item label="合作主体" prop="partnerCompanyId">
|
||||
<el-select v-model="formData.partnerCompanyId" placeholder="请选择合作主体">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.SYSTEM_USER_SEX)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<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-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<!-- 子表的表单 -->
|
||||
<el-tabs v-model="subTabsName">
|
||||
|
|
@ -178,6 +346,8 @@ const customerList = ref([]) // 客户列表的数据
|
|||
const userOptions = ref<UserApi.UserVO[]>([]) // 用户列表
|
||||
const businessList = ref([])
|
||||
const deptTree = ref() // 部门树形结构
|
||||
const deptList = ref() // 部门
|
||||
|
||||
const invoiceTemplateList = ref([])
|
||||
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
|
|
@ -206,7 +376,28 @@ const formData = ref({
|
|||
deptId: undefined,
|
||||
creator: undefined,
|
||||
createTime: undefined,
|
||||
updater: undefined
|
||||
updater: 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({
|
||||
no: [{ required: true, message: '报价单编号不能为空', trigger: 'blur' }],
|
||||
|
|
@ -223,13 +414,65 @@ const quotationProductFormRef = ref()
|
|||
const onBusinessChange = async (businessId: string) => {
|
||||
if (!businessId) return
|
||||
try {
|
||||
formLoading.value = true;
|
||||
const res = await BusinessApi.getBusiness(businessId);
|
||||
formData.creditLimit = res.creditLimit; // 保存详情信息
|
||||
formData.ownerUserId = res.ownerUserId; // 保存详情信息
|
||||
formData.paymentTerm = res.paymentTerm;
|
||||
formData.creditMethod = res.creditMethod;
|
||||
formData.creditCalcCycle = res.creditCalcCycle;
|
||||
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.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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -256,6 +499,7 @@ const open = async (type: string, id?: number) => {
|
|||
businessList.value = await BusinessApi.getSimpleBusinessList()
|
||||
// 获得部门树
|
||||
deptTree.value = handleTree(await DeptApi.getSimpleDeptList())
|
||||
deptList.value = await DeptApi.getSimpleDeptList()
|
||||
}
|
||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||
|
||||
|
|
|
|||
|
|
@ -12,28 +12,28 @@
|
|||
<el-table-column label="产品编号" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.productId`" :rules="formRules.productId" class="mb-0px!">
|
||||
<el-input v-model="row.productId" placeholder="请输入产品编号" />
|
||||
<el-input v-model="row.productId" placeholder="请输入产品编号" disabled />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="产品名称" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.productName`" :rules="formRules.productName" class="mb-0px!">
|
||||
<el-input v-model="row.productName" placeholder="请输入产品名称" />
|
||||
<el-input v-model="row.productName" placeholder="请输入产品名称" disabled />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="产品分类编号" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.productCategoryId`" :rules="formRules.productCategoryId" class="mb-0px!">
|
||||
<el-input v-model="row.productCategoryId" placeholder="请输入产品分类编号" />
|
||||
<el-input v-model="row.productCategoryId" placeholder="请输入产品分类编号" disabled />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="产品单位" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.productUnit`" :rules="formRules.productUnit" class="mb-0px!">
|
||||
<el-input v-model="row.productUnit" placeholder="请输入产品单位" />
|
||||
<el-input v-model="row.productUnit" placeholder="请输入产品单位" disabled />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
|
|
|||
Loading…
Reference in New Issue