crm 报价 商机 合同 三块整改

pull/781/head
quu 2025-04-25 20:57:08 +09:00
parent 112b15ed81
commit 2ff8f2a6ec
9 changed files with 18597 additions and 157 deletions

17494
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -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 })
}

View File

@ -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

View File

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

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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

View File

@ -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>