pull/781/head
zy 2025-05-29 23:55:49 +08:00
parent c6aeacc4f3
commit d5190812ad
18 changed files with 403 additions and 101 deletions

View File

@ -6,9 +6,10 @@ VITE_DEV=true
# 请求路径 # 请求路径
# VITE_BASE_URL='http://8.130.12.151:48080' # VITE_BASE_URL='http://8.130.12.151:48080'
# VITE_BASE_URL='http://lhy.free.idcfengye.com' # VITE_BASE_URL='http://lhy.free.idcfengye.com'
# VITE_BASE_URL='http://m94844f6.natappfree.cc' # VITE_BASE_URL='http://u82ba6cf.natappfree.cc'
VITE_BASE_URL='http://172.22.3.49:48080' # VITE_BASE_URL='http://172.22.3.49:48080'
# VITE_BASE_URL='http://172.22.3.203:48080' VITE_BASE_URL='http://172.22.3.203:48080'
# VITE_BASE_URL='http://172.22.3.168:48080'
# 文件上传类型server - 后端上传, client - 前端直连上传,仅支持 S3 服务 # 文件上传类型server - 后端上传, client - 前端直连上传,仅支持 S3 服务
VITE_UPLOAD_TYPE=server VITE_UPLOAD_TYPE=server

View File

@ -0,0 +1,44 @@
import request from '@/config/axios'
// 行业 VO
export interface IndustryVO {
id: number // 主键
industryId: string // 门类ID
name: string // 门类名称
parentId: string // 父门类ID
levelType: number // 门类级别
description: string // 描述
}
// 行业 API
export const IndustryApi = {
// 查询行业树
getIndustryPage: async (params: any) => {
return await request.get({ url: `/crm/industry/getTree`, params })
},
// 查询选中的树
getIndustry: async () => {
return await request.get({ url: `/crm/industry/getChooseTree` })
},
// 新增行业
createIndustry: async (data: IndustryVO) => {
return await request.post({ url: `/crm/industry/create`, data })
},
// 修改行业
updateIndustry: async (data: IndustryVO) => {
return await request.put({ url: `/crm/industry/update`, data })
},
// 删除行业
deleteIndustry: async (id: number) => {
return await request.delete({ url: `/crm/industry/delete?id=` + id })
},
// 导出行业 Excel
exportIndustry: async (params) => {
return await request.download({ url: `/crm/industry/export-excel`, params })
}
}

View File

@ -687,7 +687,6 @@ watch(
/** 弹出气泡卡 */ /** 弹出气泡卡 */
const openPopover = async (type: string) => { const openPopover = async (type: string) => {
if (type === 'approve') { if (type === 'approve') {
emit('updataData')
// //
const valid = await validateNormalForm() const valid = await validateNormalForm()
if (!valid) { if (!valid) {

View File

@ -483,8 +483,8 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="维护人" prop="afterSaleUserId"> <el-form-item label="维护人" prop="maintainer">
<el-select v-model="formData.afterSaleUserId" disabled placeholder="请选择售后维护人"> <el-select v-model="formData.maintainer" disabled placeholder="请选择售后维护人">
<el-option <el-option
v-for="dict in userOptions" v-for="dict in userOptions"
:key="dict.id" :key="dict.id"
@ -696,7 +696,7 @@ const formData = ref({
ownerUserId: undefined, ownerUserId: undefined,
clueDeveloper: undefined, clueDeveloper: undefined,
contractor: undefined, contractor: undefined,
afterSaleUserId: undefined, maintainer: undefined,
collUserId: undefined, collUserId: undefined,
totalPrice: undefined, totalPrice: undefined,
contractBody: undefined, contractBody: undefined,
@ -764,11 +764,11 @@ const open = async (type: string) => {
// formLoading.value = true // formLoading.value = true
try { try {
let data = await ContractApi.getContract(type) let data = await ContractApi.getContract(type)
data.legalPersonName = data.customerDO.legalPersonName // data.legalPersonName = data.customerDO.legalPersonName
data.creditNo = data.customerDO.creditNo // data.creditNo = data.customerDO.creditNo
data.registeredAddress = data.customerDO.registeredAddress // data.registeredAddress = data.customerDO.registeredAddress
data.actualCapital = data.customerDO.actualCapital // data.actualCapital = data.customerDO.actualCapital
data.socialEmployeeNum = data.customerDO.socialEmployeeNum // data.socialEmployeeNum = data.customerDO.socialEmployeeNum
handleQuotationChange(formData.value.quotationId) handleQuotationChange(formData.value.quotationId)
formData.value = data formData.value = data
} finally { } finally {
@ -870,7 +870,7 @@ const resetForm = () => {
ownerUserId: undefined, ownerUserId: undefined,
clueDeveloper: undefined, clueDeveloper: undefined,
contractor: undefined, contractor: undefined,
afterSaleUserId: undefined, maintainer: undefined,
collUserId: undefined, collUserId: undefined,
totalPrice: undefined, totalPrice: undefined,
contractBody: undefined, contractBody: undefined,
@ -966,7 +966,7 @@ const onCustomerChange = async (customerId: string) => {
formData.value.financingInfo = customerRes.financingInfo; formData.value.financingInfo = customerRes.financingInfo;
formData.value.socialEmployeeNum = customerRes.socialEmployeeNum; formData.value.socialEmployeeNum = customerRes.socialEmployeeNum;
formData.value.registeredAddress = customerRes.registeredAddress; formData.value.registeredAddress = customerRes.registeredAddress;
formData.value.afterSaleUserId = customerRes.maintainer; formData.value.maintainer = customerRes.maintainer;
formData.value.clueDeveloper = customerRes.clueDeveloper; formData.value.clueDeveloper = customerRes.clueDeveloper;
await handleQuotationChange(customerRes.quotationId); await handleQuotationChange(customerRes.quotationId);

View File

@ -80,6 +80,7 @@ const getList = async (val) => {
companyBank: v.companyBank, companyBank: v.companyBank,
companyAccount: v.companyAccount, companyAccount: v.companyAccount,
companyAddress: v.companyAddress, companyAddress: v.companyAddress,
id: v.id
}) })
}) })
formData.value = newList formData.value = newList

View File

@ -1,5 +1,4 @@
<template> <template>
<el-table :data="formData" class="-mt-10px"> <el-table :data="formData" class="-mt-10px">
<el-table-column label="序号" type="index" width="100" /> <el-table-column label="序号" type="index" width="100" />
<el-table-column label="是否授权人" prop="authPersonType" min-width="150" /> <el-table-column label="是否授权人" prop="authPersonType" min-width="150" />

View File

@ -131,6 +131,26 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
</template> </template>
<template #seriousIllegal>
<el-col :span="8">
<el-form-item label="严重违法" prop="seriousIllegal">
<el-radio-group v-model="formData.seriousIllegal" disabled>
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</template>
<template #liquidation>
<el-col :span="8">
<el-form-item label="清算信息" prop="liquidation">
<el-radio-group v-model="formData.liquidation" disabled>
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</template>
<template #creditAmount> <template #creditAmount>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="初始额度" prop="creditLimit"> <el-form-item label="初始额度" prop="creditLimit">

View File

@ -132,6 +132,26 @@
</el-col> </el-col>
</template> </template>
<template #seriousIllegal>
<el-col :span="8">
<el-form-item label="严重违法" prop="seriousIllegal">
<el-radio-group v-model="formData.seriousIllegal" disabled>
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</template>
<template #liquidation>
<el-col :span="8">
<el-form-item label="清算信息" prop="liquidation">
<el-radio-group v-model="formData.liquidation" disabled>
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</template>
<template #agreementDeadline> <template #agreementDeadline>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="协议截止日" prop="agreementDeadline"> <el-form-item label="协议截止日" prop="agreementDeadline">

View File

@ -163,6 +163,8 @@ const formFields = ref({
dishonestyRecord: 1, dishonestyRecord: 1,
financeRecord: 1, financeRecord: 1,
judgmentRecord: 1, judgmentRecord: 1,
seriousIllegal: 1,
liquidation: 1,
creditAmount: 1, creditAmount: 1,
creditLimit: 1, creditLimit: 1,
partnerCompanyId: 1, partnerCompanyId: 1,
@ -184,6 +186,7 @@ const formFields = ref({
afterAmount: 1, afterAmount: 1,
changeAmountDeadline: 1, changeAmountDeadline: 1,
contractAAuthorizedCompanysother: 1, contractAAuthorizedCompanysother: 1,
contractAAuthorizedCompanyscustomerName: 1,
contractAAuthorizedCompanysunifiedCreditCode: 1, contractAAuthorizedCompanysunifiedCreditCode: 1,
contractAAuthorizedCompanysinvoicingAddress: 1, contractAAuthorizedCompanysinvoicingAddress: 1,
contractAAuthorizedCompanysinvoicingTelephone: 1, contractAAuthorizedCompanysinvoicingTelephone: 1,
@ -309,7 +312,8 @@ const open = async (type: string) => {
formData.value.extensionDate = data.extensionDate formData.value.extensionDate = data.extensionDate
formData.value.note = data.note formData.value.note = data.note
formData.value.id = data.id formData.value.id = data.id
// formData.value.creditAmount = data.creditAmount formData.value.contractAAuthorizedCompanys = data.contractAAuthorizedCompanys
formData.value.creditAmount = data.creditAmount
formData.value.creditLimit = data.beforeAmount formData.value.creditLimit = data.beforeAmount
} finally { } finally {
formLoading.value = false formLoading.value = false
@ -408,6 +412,7 @@ if(contractFormRef.value) {
dataFormList.map(item => { dataFormList.map(item => {
ids.push(item.id) ids.push(item.id)
}) })
console.log('%csrc/views/crm/contract/detail/ContractChangeDetail.vue:415 ids', 'color: #007acc;', ids);
data.afterAuthorizerId = ids.join(',') data.afterAuthorizerId = ids.join(',')
} else if(formData.value.changeItem == 3) { } else if(formData.value.changeItem == 3) {
data.agreementDeadline = dataFormList.agreementDeadline data.agreementDeadline = dataFormList.agreementDeadline
@ -427,10 +432,11 @@ if(contractFormRef.value) {
} else if(formData.value.changeItem == 6) { } else if(formData.value.changeItem == 6) {
data.newContract = data data.newContract = data
} }
dialogVisible.value = false
return
await ContractApi.changeContractUpdate(data) await ContractApi.changeContractUpdate(data)
message.success(t('common.updateSuccess')) message.success(t('common.updateSuccess'))
dialogVisible.value = false
// //
} finally { } finally {
formLoading.value = false formLoading.value = false

View File

@ -220,10 +220,10 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
</template> </template>
<template #creditNo> <template #creditCode>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="统一信用代码" prop="creditNo"> <el-form-item label="统一信用代码" prop="creditCode">
<el-input v-model="formData.creditNo" placeholder="" disabled /> <el-input v-model="formData.creditCode" placeholder="" disabled />
</el-form-item> </el-form-item>
</el-col> </el-col>
</template> </template>
@ -576,10 +576,10 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
</template> </template>
<template #afterSaleUserId> <template #maintainer>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="维护人" prop="afterSaleUserId"> <el-form-item label="维护人" prop="maintainer">
<el-select v-model="formData.afterSaleUserId" :disabled="formFields.afterSaleUserId !== 2 || isTrue" placeholder=""> <el-select v-model="formData.maintainer" :disabled="formFields.maintainer !== 2 || isTrue" placeholder="">
<el-option <el-option
v-for="dict in userOptions" v-for="dict in userOptions"
:key="dict.id" :key="dict.id"
@ -590,14 +590,14 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
</template> </template>
<template #expanderUserId> <template #clueDeveloper>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="拓展人" prop="expanderUserId"> <el-form-item label="拓展人" prop="clueDeveloper">
<el-select <el-select
class="w-1/1" class="w-1/1"
placeholder="请选择拓展人" placeholder="请选择拓展人"
v-model="formData.expanderUserId" v-model="formData.clueDeveloper"
:disabled="formFields.expanderUserId !== 2 || isTrue" :disabled="formFields.clueDeveloper !== 2 || isTrue"
filterable filterable
> >
<el-option <el-option
@ -735,7 +735,7 @@ const formFields = ref({
other1: 1, other1: 1,
customerId1: 1, customerId1: 1,
legalPersonName: 1, legalPersonName: 1,
creditNo: 1, creditCode: 1,
regType: 1, regType: 1,
actualCapital: 1, actualCapital: 1,
socialEmployeeNum: 1, socialEmployeeNum: 1,
@ -762,8 +762,8 @@ const formFields = ref({
servicor: 1, servicor: 1,
technicalLead: 1, technicalLead: 1,
settlementLead: 1, settlementLead: 1,
afterSaleUserId: 1, maintainer: 1,
expanderUserId: 1, clueDeveloper: 1,
// collUserId: 1, // collUserId: 1,
// contractBody: 1, // contractBody: 1,
// contractAgreement: 1, // contractAgreement: 1,
@ -830,6 +830,7 @@ const formData = ref({
latePaymentRate: undefined, latePaymentRate: undefined,
settleMethod: undefined, settleMethod: undefined,
lastPayDate: undefined, lastPayDate: undefined,
creditCode: undefined,
contractTerm: undefined, contractTerm: undefined,
signUserId: undefined, signUserId: undefined,
signPhoneNumber: undefined, signPhoneNumber: undefined,
@ -838,9 +839,9 @@ const formData = ref({
offlinePrice: undefined, offlinePrice: undefined,
onlinePrice: undefined, onlinePrice: undefined,
ownerUserId: undefined, ownerUserId: undefined,
expanderUserId: undefined, clueDeveloper: undefined,
contractor: undefined, contractor: undefined,
afterSaleUserId: undefined, maintainer: undefined,
collUserId: undefined, collUserId: undefined,
totalPrice: undefined, totalPrice: undefined,
contractBody: undefined, contractBody: undefined,
@ -1002,9 +1003,9 @@ const resetForm = () => {
offlinePrice: undefined, offlinePrice: undefined,
onlinePrice: undefined, onlinePrice: undefined,
ownerUserId: undefined, ownerUserId: undefined,
expanderUserId: undefined, clueDeveloper: undefined,
contractor: undefined, contractor: undefined,
afterSaleUserId: undefined, maintainer: undefined,
collUserId: undefined, collUserId: undefined,
totalPrice: undefined, totalPrice: undefined,
contractBody: undefined, contractBody: undefined,
@ -1033,10 +1034,10 @@ const handleQuotationChange = async (quotationId: number) => {
formData.value.invoiceTemplateId = quotation.invoiceTemplateId; formData.value.invoiceTemplateId = quotation.invoiceTemplateId;
formData.value.ownerUserId = quotation.ownerUserId; formData.value.ownerUserId = quotation.ownerUserId;
// formData.value.clueDeveloper = quotation.clueDeveloper;
formData.value.ownerUserMobile = quotation.ownerUserMobile; formData.value.ownerUserMobile = quotation.ownerUserMobile;
formData.value.ownerUserWechat = quotation.ownerUserWechat; formData.value.ownerUserWechat = quotation.ownerUserWechat;
formData.value.ownerUserEmail = quotation.ownerUserEmail; formData.value.ownerUserEmail = quotation.ownerUserEmail;
formData.value.expanderUserId = quotation.expanderUserId;
formData.value.signUserId = quotation.signUserId; formData.value.signUserId = quotation.signUserId;
formData.value.signPhoneNumber = quotation.signPhoneNumber; formData.value.signPhoneNumber = quotation.signPhoneNumber;
formData.value.signEmail = quotation.signEmail; formData.value.signEmail = quotation.signEmail;
@ -1070,22 +1071,24 @@ const onCustomerChange = async (customerId: string) => {
try { try {
formLoading.value = true; formLoading.value = true;
const customerRes = await CustomerApi.getCustomer(customerId); const customerRes = await CustomerApi.getCustomer(customerId);
formData.value.cooperationType = customerRes.cooperationType; // formData.value.cooperationType = customerRes.cooperationType;
formData.value.companyType = customerRes.companyType; // formData.value.companyType = customerRes.companyType;
formData.value.listingStatus = customerRes.listingStatus; // formData.value.listingStatus = customerRes.listingStatus;
formData.value.financingInfo = customerRes.financingInfo; // formData.value.financingInfo = customerRes.financingInfo;
formData.value.paidInCapital = customerRes.paidInCapital; // formData.value.paidInCapital = customerRes.paidInCapital;
formData.value.insuredCount = customerRes.insuredCount; // formData.value.insuredCount = customerRes.insuredCount;
formData.value.establishmentDate = customerRes.establishmentDate; // formData.value.establishmentDate = customerRes.establishmentDate;
formData.value.enterpriseType = customerRes.enterpriseType; // formData.value.enterpriseType = customerRes.enterpriseType;
formData.value.actualCapital = customerRes.actualCapital;
// formData.value.partAddress = customerRes.partAddress;
// formData.value.listingStatus = customerRes.listingStatus;
formData.value.partAddress = customerRes.partAddress;
formData.value.listingStatus = customerRes.listingStatus;
formData.value.legalPersonName = customerRes.legalPersonName; formData.value.legalPersonName = customerRes.legalPersonName;
formData.value.creditCode = customerRes.creditCode; formData.value.creditCode = customerRes.creditCode;
formData.value.regType = customerRes.regType; formData.value.regType = customerRes.regType;
formData.value.financingInfo = customerRes.financingInfo; // formData.value.financingInfo = customerRes.financingInfo;//
formData.value.actualCapital = customerRes.actualCapital;
formData.value.socialEmployeeNum = customerRes.socialEmployeeNum; formData.value.socialEmployeeNum = customerRes.socialEmployeeNum;
formData.value.registeredAddress = customerRes.registeredAddress; formData.value.registeredAddress = customerRes.registeredAddress;
} catch (err) { } catch (err) {
@ -1102,6 +1105,7 @@ const onPartnerChange = async (id: string) => {
const res = await ContractApi.getOrgInfo(id); const res = await ContractApi.getOrgInfo(id);
formData.value.bankName = res.bankName; formData.value.bankName = res.bankName;
formData.value.bankAccount = res.bankAccount; formData.value.bankAccount = res.bankAccount;
formData.value.creditCode = res.creditCode;
formData.value.legalRepresentative = res.legalRepresentative; formData.value.legalRepresentative = res.legalRepresentative;
formData.value.businessLicenseNumber = res.businessLicenseNumber; formData.value.businessLicenseNumber = res.businessLicenseNumber;
formData.value.businessLicense = res.businessLicense; formData.value.businessLicense = res.businessLicense;

View File

@ -44,9 +44,9 @@
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="12"> <!-- <el-col :span="12">
<el-form-item label="公司类型" prop="cooperationType"> <el-form-item label="公司类型" prop="cooperationType">
<el-select v-model="formData.cooperationType" filterable placeholder="请选择合作类型" class="w-1/1"> <el-select v-model="formData.cooperationType" filterable placeholder="请选择公司类型" class="w-1/1">
<el-option <el-option
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_COOPERATION_TYPE)" v-for="dict in getIntDictOptions(DICT_TYPE.CRM_COOPERATION_TYPE)"
:key="dict.value" :key="dict.value"
@ -55,6 +55,18 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> -->
<el-col :span="12">
<el-form-item label="客户来源" prop="source">
<el-select v-model="formData.source" filterable placeholder="请选择客户来源" class="w-1/1">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_CUSTOMER_SOURCE)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="维护人" prop="maintainer"> <el-form-item label="维护人" prop="maintainer">
@ -73,19 +85,19 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <!-- <el-col :span="12">
<el-form-item label="客户来源" prop="source"> <el-form-item label="所属行业" prop="industryId">
<el-select v-model="formData.source" filterable placeholder="请选择客户来源" class="w-1/1"> <el-select v-model="formData.industryId" placeholder="请选择所属行业" >
<el-option <el-option
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_CUSTOMER_SOURCE)" v-for="dict in getIntDictOptions(DICT_TYPE.CRM_CUSTOMER_INDUSTRY)"
:key="dict.value" :key="dict.value"
:label="dict.label" :label="dict.label"
:value="dict.value" :value="dict.value"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col> -->
<el-col :span="12"> <el-col :span="12">
<el-form-item label="签约人" prop="contractor"> <el-form-item label="签约人" prop="contractor">
<el-select <el-select
class="w-1/1" class="w-1/1"
@ -102,18 +114,7 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12">
<el-form-item label="所属行业" prop="industryId">
<el-select v-model="formData.industryId" placeholder="请选择所属行业" >
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_CUSTOMER_INDUSTRY)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<!-- <el-col :span="12"> <!-- <el-col :span="12">
<el-form-item label="合作地区" prop="cooperationArea"> <el-form-item label="合作地区" prop="cooperationArea">
<el-select v-model="formData.cooperationArea" filterable placeholder="请选择合作地区" class="w-1/1"> <el-select v-model="formData.cooperationArea" filterable placeholder="请选择合作地区" class="w-1/1">
@ -144,8 +145,20 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="法人代表" prop="legalPersonName"> <el-form-item label="结算对接人" prop="settlementLead">
<el-input v-model="formData.legalPersonName" disabled placeholder="" /> <el-select
class="w-1/1"
placeholder="请选择结算对接人"
v-model="formData.settlementLead"
filterable
>
<el-option
v-for="item in userOptions"
:key="item.id"
:label="item.nickname"
:value="item.id"
/>
</el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
@ -274,21 +287,10 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12">
<el-form-item label="结算对接人" prop="settlementLead"> <el-col :span="12">
<el-select <el-form-item label="法人代表" prop="legalPersonName">
class="w-1/1" <el-input v-model="formData.legalPersonName" disabled placeholder="" />
placeholder="请选择结算对接人"
v-model="formData.settlementLead"
filterable
>
<el-option
v-for="item in userOptions"
:key="item.id"
:label="item.nickname"
:value="item.id"
/>
</el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">

View File

@ -34,7 +34,7 @@
<!-- <el-descriptions-item label="客户名称"> <!-- <el-descriptions-item label="客户名称">
{{ customer.name }} {{ customer.name }}
</el-descriptions-item> --> </el-descriptions-item> -->
<el-descriptions-item label="成交状态">{{ customer.dealStatus ? '已成交' : '未成交' }}</el-descriptions-item> <!-- <el-descriptions-item label="成交状态">{{ customer.dealStatus ? '已成交' : '未成交' }}</el-descriptions-item> -->
<el-descriptions-item label="客户来源"> <el-descriptions-item label="客户来源">
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_SOURCE" :value="customer.source" /> <dict-tag :type="DICT_TYPE.CRM_CUSTOMER_SOURCE" :value="customer.source" />
</el-descriptions-item> </el-descriptions-item>
@ -47,7 +47,8 @@
<!-- <el-descriptions-item label="合作地区">{{ getName(getIntDictOptions(DICT_TYPE.CRM_COOPERATION_AREA),customer.cooperationArea) }}</el-descriptions-item> --> <!-- <el-descriptions-item label="合作地区">{{ getName(getIntDictOptions(DICT_TYPE.CRM_COOPERATION_AREA),customer.cooperationArea) }}</el-descriptions-item> -->
<!-- <el-descriptions-item label="行业">{{ getName(getIntDictOptions(DICT_TYPE.CRM_CUSTOMER_INDUSTRY),customer.industryId) }}</el-descriptions-item> --> <!-- <el-descriptions-item label="行业">{{ getName(getIntDictOptions(DICT_TYPE.CRM_CUSTOMER_INDUSTRY),customer.industryId) }}</el-descriptions-item> -->
<el-descriptions-item label="所属行业"> <el-descriptions-item label="所属行业">
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_INDUSTRY" :value="customer.industryId" /> <!-- <dict-tag :type="DICT_TYPE.CRM_CUSTOMER_INDUSTRY" :value="customer.industryId" /> -->
{{customer.industry}}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="合作状态"> <el-descriptions-item label="合作状态">
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_STSTUS" :value="customer.customerStatus" /> <dict-tag :type="DICT_TYPE.CRM_CUSTOMER_STSTUS" :value="customer.customerStatus" />

View File

@ -31,7 +31,7 @@
分配 分配
</el-button> </el-button>
<el-button <el-button
v-if="customer.clueDeveloper && !customer.dealStatus" v-if="customer.clueDeveloper && customer.customerStatus != 4"
@click="handlePutPool" @click="handlePutPool"
> >
放入公海 放入公海

View File

@ -29,7 +29,7 @@
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
/> />
</el-form-item> --> </el-form-item> -->
<el-form-item label="所属行业" prop="industryId"> <!-- <el-form-item label="所属行业" prop="industryId">
<el-select <el-select
v-model="queryParams.industryId" v-model="queryParams.industryId"
class="!w-240px" class="!w-240px"
@ -43,7 +43,7 @@
:value="dict.value" :value="dict.value"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item> -->
<el-form-item label="合作状态" prop="customerStatus"> <el-form-item label="合作状态" prop="customerStatus">
<el-select <el-select
v-model="queryParams.customerStatus" v-model="queryParams.customerStatus"
@ -145,11 +145,11 @@
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_SOURCE" :value="scope.row.source" /> <dict-tag :type="DICT_TYPE.CRM_CUSTOMER_SOURCE" :value="scope.row.source" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column align="center" label="所属行业" prop="industryId" width="100"> <el-table-column align="center" label="所属行业" prop="industry" width="100" />
<template #default="scope"> <!-- <template #default="scope">
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_INDUSTRY" :value="scope.row.industryId" /> <dict-tag :type="DICT_TYPE.CRM_CUSTOMER_INDUSTRY" :value="scope.row.industryId" />
</template> </template> -->
</el-table-column> <!-- </el-table-column> -->
<!-- <el-table-column align="center" label="线索人" prop="clueDeveloperName" width="120"> <!-- <el-table-column align="center" label="线索人" prop="clueDeveloperName" width="120">
<template #default="scope"> <template #default="scope">
{{scope.row.clueDeveloperName || '暂无'}} {{scope.row.clueDeveloperName || '暂无'}}

View File

@ -0,0 +1,162 @@
<template>
<ContentWrap>
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-width="160px"
v-loading="formLoading"
>
<el-card shadow="never">
<!-- 操作 -->
<template #header>
<div class="flex items-center justify-between">
<CardTitle title="行业设置" />
<el-button type="primary" @click="onSubmit" v-hasPermi="['crm:contract-config:update']">
保存
</el-button>
</div>
</template>
<!-- 表单 -->
<el-form-item label="提前提醒设置" prop="notifyEnabled">
<el-tree
ref="treeRef"
v-model="formData.deptId"
:data="list"
:props="props"
filterable
@check="nodeClick"
:cache-data="cacheData"
node-key="id"
multiple
:render-after-expand="false"
show-checkbox
placeholder="请选择归属部门"
/>
</el-form-item>
</el-card>
</el-form>
</ContentWrap>
</template>
<script setup lang="ts">
import download from '@/utils/download'
import { IndustryApi, IndustryVO } from '@/api/crm/industry'
import IndustryForm from './IndustryForm.vue'
import { defaultProps, handleTree } from '@/utils/tree'
/** 行业 列表 */
defineOptions({ name: 'Industry' })
const message = useMessage() //
const { t } = useI18n() //
const formData = reactive({
deptId: undefined
})
const loading = ref(true) //
const list = ref<IndustryVO[]>([]) //
const total = ref(0) //
const props = ref({
label: 'name',
children: 'children',
isLeaf: 'isLeaf'
})
const queryParams = reactive({
pageNo: 1,
pageSize: 10,
industryId: undefined,
name: undefined,
parentId: undefined,
levelType: undefined
})
const queryFormRef = ref() //
const exportLoading = ref(false) //
const treeRef = ref('')
const cacheDataList = ref([])
const formLoading = ref(false)
const load = (node, resolve) => {
if (!!node.data && !node.data.children) return resolve([])
let arr = []
node.data.children.map(item => {
if (!item.children.length) item.isLeaf = true
arr.push(item)
})
setTimeout(() => {
resolve(node.data.children)
}, 400)
}
const nodeClick = (checkedNodes,checkedKeys,halfCheckedNodes,halfCheckedKeys) => {
// console.log('%csrc/views/crm/industry/index.vue:96 node', 'color: #007acc;', checkedKeys);
cacheDataList.value = [...checkedKeys.checkedKeys, ...checkedKeys.halfCheckedKeys]
}
/** 查询列表 */
const getList = async () => {
formLoading.value = true
try {
list.value = await IndustryApi.getIndustryPage()
// getIds(list.value)
} finally {
formLoading.value = false
}
}
//
const getCheckNodes = async () => {
let data = await IndustryApi.getIndustry()
setCheckedKeys(data.chooseIds)
}
const onSubmit = async () => {
try {
await IndustryApi.updateIndustry({
ids: cacheDataList.value
})
message.success(t('common.updateSuccess'))
} finally {
}
}
// const getIds = (data) => {
// let arr = []
// if(data && data.length) {
// for(let i = 0; i < data.length; i++) {
// if(data[i]['flag'])
// }
// }
// }
const setCheckedKeys = (data) => {
treeRef.value!.setCheckedKeys(data, false)
}
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value.resetFields()
handleQuery()
}
/** 添加/修改操作 */
const formRef = ref()
const openForm = (type: string, id?: number) => {
formRef.value.open(type, id)
}
/** 初始化 **/
onMounted(async() => {
await getList()
await getCheckNodes()
})
// onActivated(()=>{
// getList()
// })
</script>

View File

@ -198,6 +198,26 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
</template> </template>
<template #seriousIllegal>
<el-col :span="8">
<el-form-item label="严重违法" prop="seriousIllegal">
<el-radio-group v-model="formData.seriousIllegal" disabled>
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</template>
<template #liquidation>
<el-col :span="8">
<el-form-item label="清算信息" prop="liquidation">
<el-radio-group v-model="formData.liquidation" disabled>
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</template>
<div class="page-break"></div> <div class="page-break"></div>
<template #other1> <template #other1>
<el-col :span="24"> <el-col :span="24">
@ -666,6 +686,8 @@ const formFields = ref({ //字段显示隐藏权限控制,字段顺序就是显
dishonestyRecord: 1, dishonestyRecord: 1,
financeRecord: 1, financeRecord: 1,
judgmentRecord: 1, judgmentRecord: 1,
seriousIllegal: 1,
liquidation: 1,
other1: 1, other1: 1,
partnerCompanyId: 1, partnerCompanyId: 1,
creditCode: 1, creditCode: 1,

View File

@ -113,6 +113,7 @@
<el-input v-model="formData.startDate" disabled placeholder="" clearable /> <el-input v-model="formData.startDate" disabled placeholder="" clearable />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<!-- <el-col :span="8"> <!-- <el-col :span="8">
@ -173,6 +174,22 @@
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8">
<el-form-item label="严重违法" prop="seriousIllegal">
<el-radio-group v-model="formData.seriousIllegal" disabled>
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="清算信息" prop="liquidation">
<el-radio-group v-model="formData.liquidation" disabled>
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row> </el-row>
<ContentWrap style="border: none; font-weight: 700">需求信息</ContentWrap> <ContentWrap style="border: none; font-weight: 700">需求信息</ContentWrap>
@ -609,6 +626,8 @@ const formData = ref({
signEmail: undefined, signEmail: undefined,
signWechat: undefined, signWechat: undefined,
paymentTerm: undefined, paymentTerm: undefined,
seriousIllegal: undefined,
liquidation: undefined,
creditMethod: undefined, creditMethod: undefined,
creditCalcCycle: undefined, creditCalcCycle: undefined,
creditLimit: undefined, creditLimit: undefined,
@ -841,6 +860,8 @@ const onCustomerChange = async (customerId: string) => {
formData.value.dishonestyRecord = customerRes.dishonestyRecord; formData.value.dishonestyRecord = customerRes.dishonestyRecord;
formData.value.financeRecord = customerRes.financeRecord; formData.value.financeRecord = customerRes.financeRecord;
formData.value.judgmentRecord = customerRes.judgmentRecord; formData.value.judgmentRecord = customerRes.judgmentRecord;
formData.value.seriousIllegal = customerRes.seriousIllegal;
formData.value.liquidation = customerRes.liquidation;
formData.value.creditAmount = customerRes.creditAmount || 0; formData.value.creditAmount = customerRes.creditAmount || 0;
formData.value.creditLimit = ((formData.value.creditAmount || 0) + (formData.value.creditLimitNum || 0)).toFixed(2) formData.value.creditLimit = ((formData.value.creditAmount || 0) + (formData.value.creditLimitNum || 0)).toFixed(2)

View File

@ -291,12 +291,12 @@
> >
客户确认 客户确认
</el-dropdown-item> </el-dropdown-item>
<el-dropdown-item <!-- <el-dropdown-item
command="handleEnter" command="handleEnter"
v-if="scope.row.confirmStatus == 0" v-if="scope.row.confirmStatus == 0"
> >
打印 打印
</el-dropdown-item> </el-dropdown-item> -->
<el-dropdown-item <el-dropdown-item
command="handleProcessDetail" command="handleProcessDetail"
v-if="scope.row.auditStatus == 1 || scope.row.auditStatus == 3" v-if="scope.row.auditStatus == 1 || scope.row.auditStatus == 3"