Merge remote-tracking branch 'origin/master'
commit
e7f020d3df
|
|
@ -61,6 +61,11 @@ export const getSimpleBusinessList = async () => {
|
|||
return await request.get({ url: `/crm/business/simple-all-list` })
|
||||
}
|
||||
|
||||
// 获得 CRM 我的商机列表
|
||||
export const getSelfSimpleBusinessList = async () => {
|
||||
return await request.get({ url: `/crm/business/self-simple-list` })
|
||||
}
|
||||
|
||||
// 新增 CRM 商机
|
||||
export const createBusiness = async (data: BusinessVO) => {
|
||||
return await request.post({ url: `/crm/business/create`, data })
|
||||
|
|
|
|||
|
|
@ -101,6 +101,11 @@ export const getCustomerSimpleList = async () => {
|
|||
return await request.get({ url: `/crm/customer/simple-list` })
|
||||
}
|
||||
|
||||
// 我的客户列表
|
||||
export const getSelfCustomerSimpleList = async () => {
|
||||
return await request.get({ url: `/crm/customer/self-simple-list` })
|
||||
}
|
||||
|
||||
// 模糊查询公司
|
||||
export const getCompanyList = async (params) => {
|
||||
return await request.get({ url: `/crm/customer/fuzzyQueryCompany`, params })
|
||||
|
|
|
|||
|
|
@ -432,7 +432,7 @@ onMounted(async () => {
|
|||
formData.value.ownerUserId = customerId ? '' : useUserStore().getUser.id;
|
||||
formType.value = route.query.id || route.params.id;
|
||||
if (formType.value) open(formType.value, customerId)
|
||||
customerList.value = await CustomerApi.getCustomerSimpleList();
|
||||
customerList.value = await CustomerApi.getSelfCustomerSimpleList();
|
||||
statusTypeList.value = await BusinessStatusApi.getBusinessStatusTypeSimpleList();
|
||||
userOptions.value = await UserApi.getSimpleUserList();
|
||||
deptTree.value = handleTree(await DeptApi.getSimpleDeptList());
|
||||
|
|
|
|||
|
|
@ -56,10 +56,10 @@
|
|||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="方案签约人" prop="quotationId">
|
||||
<el-form-item label="方案签约人" prop="pricingUserId">
|
||||
<el-select
|
||||
@change="handleQuotationChange"
|
||||
v-model="formData.quotationId"
|
||||
v-model="formData.pricingUserId"
|
||||
class="w-1/1"
|
||||
>
|
||||
<el-option
|
||||
|
|
@ -181,11 +181,11 @@
|
|||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<!-- <el-col :span="8">
|
||||
<el-form-item label="客户编号" prop="customerId">
|
||||
<el-input v-model="formData.customerId" disabled placeholder="客户编号" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-col> -->
|
||||
<el-col :span="8">
|
||||
<el-form-item label="法人代表" prop="legalRepresentative">
|
||||
<el-input v-model="formData.legalRepresentative" placeholder="法人代表" disabled />
|
||||
|
|
@ -237,7 +237,7 @@
|
|||
<el-option
|
||||
v-for="dict in orgList"
|
||||
:key="dict.id"
|
||||
:label="dict.name"
|
||||
:label="dict.orgName"
|
||||
:value="dict.id"
|
||||
/>
|
||||
</el-select>
|
||||
|
|
@ -295,8 +295,8 @@
|
|||
<el-tree-select
|
||||
v-model="formData.deptId"
|
||||
:data="deptTree"
|
||||
:props="defaultProps"
|
||||
disabled
|
||||
:props="defaultProps"
|
||||
check-strictly
|
||||
node-key="id"
|
||||
placeholder="归属部门"
|
||||
|
|
@ -344,8 +344,8 @@
|
|||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="账单日" prop="statement">
|
||||
<el-select v-model="formData.statement" placeholder="请选择账单日" >
|
||||
<el-form-item label="账单日" prop="statementDate">
|
||||
<el-select v-model="formData.statementDate" placeholder="请选择账单日" >
|
||||
<el-option
|
||||
v-for="(dict, index) in statement"
|
||||
:key="index"
|
||||
|
|
@ -356,8 +356,8 @@
|
|||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="最晚付款日" prop="contractTerm">
|
||||
<el-select v-model="formData.partnerCompanyId" placeholder="请选择最晚付款日" >
|
||||
<el-form-item label="最晚付款日" prop="lastPayDate">
|
||||
<el-select v-model="formData.lastPayDate" placeholder="请选择最晚付款日" >
|
||||
<el-option
|
||||
v-for="(dict, index) in statement"
|
||||
:key="index"
|
||||
|
|
@ -391,8 +391,8 @@
|
|||
</ContentWrap>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="合同类型" prop="financeRecord">
|
||||
<el-radio-group v-model="formData.financeRecord">
|
||||
<el-form-item label="财务结算方式" prop="settleMethod">
|
||||
<el-radio-group v-model="formData.settleMethod">
|
||||
<el-radio :label="1">按月结算</el-radio>
|
||||
<el-radio :label="0">按项目结算</el-radio>
|
||||
</el-radio-group>
|
||||
|
|
@ -480,6 +480,8 @@ import ContractAAuthorizedPersonForm from './components/ContractAAuthorizedPerso
|
|||
import ContractBAuthorizedPersonForm from './components/ContractBAuthorizedPersonForm.vue'
|
||||
import { propTypes } from '@/utils/propTypes'
|
||||
import { getIntDictOptions, getStrDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { defaultProps, handleTree } from '@/utils/tree'
|
||||
import * as DeptApi from '@/api/system/dept'
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
|
@ -493,12 +495,14 @@ const dialogVisible = ref(false) // 弹窗的是否展示
|
|||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const deptTree = ref() // 部门树形结构
|
||||
const formData = ref({
|
||||
id: undefined,
|
||||
name: undefined,
|
||||
no: undefined,
|
||||
customerId: undefined,
|
||||
partyName: undefined,
|
||||
lastPayDate: undefined,
|
||||
partAddress: undefined,
|
||||
secPartyPerson: undefined,
|
||||
wechat: undefined,
|
||||
|
|
@ -533,6 +537,7 @@ const formData = ref({
|
|||
partnerCompanyId: undefined,
|
||||
deptId: undefined,
|
||||
quotationTimes: undefined,
|
||||
statementDate: undefined,
|
||||
products: []
|
||||
})
|
||||
const formRules = reactive({
|
||||
|
|
@ -541,7 +546,7 @@ const formRules = reactive({
|
|||
quotationId: [{ required: true, message: '报价单编号不能为空', trigger: 'blur' }],
|
||||
orderDate: [{ required: true, message: '下单日期不能为空', trigger: 'blur' }],
|
||||
ownerUserId: [{ required: true, message: '负责人不能为空', trigger: 'blur' }],
|
||||
statement: [{ required: true, message: '账单日不能为空', trigger: 'change' }],
|
||||
statementDate: [{ required: true, message: '账单日不能为空', trigger: 'change' }],
|
||||
contractType: [{ required: true, message: '合同类型不能为空', trigger: 'change' }],
|
||||
penaltyRate: [{ required: true, message: '违约金比例不能为空', trigger: 'blur' }],
|
||||
latePaymentRate: [{ required: true, message: '延期付款利率不能为空', trigger: 'blur' }],
|
||||
|
|
@ -695,6 +700,7 @@ const resetForm = () => {
|
|||
partnerCompanyId: undefined,
|
||||
deptId: undefined,
|
||||
quotationTimes: undefined,
|
||||
paymentTerm: undefined,
|
||||
products: []
|
||||
}
|
||||
formRef.value?.resetFields()
|
||||
|
|
@ -713,11 +719,10 @@ const handleQuotationChange = async (quotationId: number) => {
|
|||
|
||||
formData.value.ownerUserId = quotation.ownerUserId;
|
||||
formData.value.expanderUserId = quotation.expanderUserId;
|
||||
formData.value.pricingUserId = quotation.pricingUserId;
|
||||
formData.value.signUserId = quotation.signUserId;
|
||||
formData.value.signPhoneNumber = quotation.signPhoneNumber;
|
||||
formData.value.signEmail = quotation.signEmail;
|
||||
formData.value.signWechat = quotation.signWechat;
|
||||
formData.value.paymentTerm = quotation.paymentTerm;
|
||||
|
||||
formData.value.partnerCompanyId = quotation.partnerCompanyId;
|
||||
|
||||
|
|
@ -732,6 +737,7 @@ const handleQuotationChange = async (quotationId: number) => {
|
|||
|
||||
// 🔁 自动加载客户详情
|
||||
await onCustomerChange(quotation.customerId);
|
||||
await onPartnerChange(quotation.partnerCompanyId);
|
||||
} catch (err) {
|
||||
} finally {
|
||||
|
||||
|
|
@ -753,13 +759,15 @@ const onCustomerChange = async (customerId: string) => {
|
|||
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;
|
||||
formData.value.actualCapital = customerRes.actualCapital;
|
||||
|
||||
formData.value.partAddress = customerRes.partAddress;
|
||||
formData.value.listingStatus = customerRes.listingStatus;
|
||||
formData.value.legalRepresentative = customerRes.legalRepresentative;
|
||||
formData.value.creditCode = customerRes.creditCode;
|
||||
formData.value.regType = customerRes.regType;
|
||||
formData.value.financingInfo = customerRes.financingInfo;
|
||||
formData.value.socialEmployeeNum = customerRes.socialEmployeeNum;
|
||||
} catch (err) {
|
||||
console.error('获取客户详情失败:', err);
|
||||
} finally {
|
||||
|
|
@ -767,6 +775,23 @@ const onCustomerChange = async (customerId: string) => {
|
|||
}
|
||||
}
|
||||
|
||||
const onPartnerChange = async (id: string) => {
|
||||
if (!id) return
|
||||
try {
|
||||
formLoading.value = true;
|
||||
const res = await ContractApi.getOrgInfo(id);
|
||||
formData.value.bankName = res.bankName;
|
||||
formData.value.bankAccount = res.bankAccount;
|
||||
formData.value.legalRepresentative = res.legalRepresentative;
|
||||
formData.value.businessLicenseNumber = res.businessLicenseNumber;
|
||||
formData.value.businessLicense = res.businessLicense;
|
||||
// formData.value.partnerCompanyId = res.partnerCompanyId;
|
||||
} catch (err) {
|
||||
} finally {
|
||||
formLoading.value = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/** 动态获取客户联系人 */
|
||||
const getContactOptions = computed(() =>
|
||||
|
|
@ -793,6 +818,10 @@ onMounted(async () => {
|
|||
pageSize: 1000,
|
||||
})
|
||||
templateOptions.value = tempData.list
|
||||
|
||||
|
||||
// 获得部门树
|
||||
deptTree.value = handleTree(await DeptApi.getSimpleDeptList())
|
||||
// 默认新建时选中自己
|
||||
// if (formType.value === 'create') {
|
||||
// formData.value.ownerUserId = useUserStore().getUser.id
|
||||
|
|
|
|||
|
|
@ -9,20 +9,20 @@
|
|||
>
|
||||
<el-table :data="formData" class="-mt-10px">
|
||||
<el-table-column label="序号" type="index" width="100" />
|
||||
<el-table-column label="客户联系人ID" min-width="150">
|
||||
<el-table-column label="授权人姓名" 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">
|
||||
<!-- <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> -->
|
||||
<el-table-column label="授权人类型" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.authPersonType`" :rules="formRules.authPersonType" class="mb-0px!">
|
||||
|
|
@ -37,7 +37,7 @@
|
|||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="手机号" min-width="150">
|
||||
<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="请输入手机号" />
|
||||
|
|
|
|||
|
|
@ -9,20 +9,13 @@
|
|||
>
|
||||
<el-table :data="formData" class="-mt-10px">
|
||||
<el-table-column label="序号" type="index" width="100" />
|
||||
<el-table-column label="用户" min-width="150">
|
||||
<!-- <el-table-column label="用户" 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="请输入用户" />
|
||||
</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> -->
|
||||
<el-table-column label="类别" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.authType`" :rules="formRules.authType" class="mb-0px!">
|
||||
|
|
@ -37,10 +30,18 @@
|
|||
</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" disabled placeholder="请输入姓名" />
|
||||
</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-input v-model="row.postId" disabled placeholder="请输入岗位" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
|
|
|||
|
|
@ -10,13 +10,13 @@
|
|||
>
|
||||
<el-table :data="formData" class="-mt-10px">
|
||||
<el-table-column label="序号" type="index" width="100" />
|
||||
<el-table-column label="产品编号" min-width="150">
|
||||
<!-- <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="请输入产品编号" disabled />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</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!">
|
||||
|
|
|
|||
|
|
@ -662,7 +662,7 @@ onMounted(async () => {
|
|||
pageSize: 1000,
|
||||
})
|
||||
templateOptions.value = data.list
|
||||
businessList.value = await BusinessApi.getSimpleBusinessList()
|
||||
businessList.value = await BusinessApi.getSelfSimpleBusinessList()
|
||||
// 获得部门树
|
||||
deptTree.value = handleTree(await DeptApi.getSimpleDeptList())
|
||||
const org = await ContractApi.getOrg({
|
||||
|
|
|
|||
Loading…
Reference in New Issue