✨ CRM:优化客户的详情、更新成交状态
parent
ac9a77e6e4
commit
4362251b59
|
@ -50,6 +50,11 @@ export const updateCustomer = async (data: CustomerVO) => {
|
|||
return await request.put({ url: `/crm/customer/update`, data })
|
||||
}
|
||||
|
||||
// 更新客户的成交状态
|
||||
export const updateCustomerDealStatus = async (id: number, dealStatus: boolean) => {
|
||||
return await request.put({ url: `/crm/customer/update-deal-status`, params: { id, dealStatus } })
|
||||
}
|
||||
|
||||
// 删除客户
|
||||
export const deleteCustomer = async (id: number) => {
|
||||
return await request.delete({ url: `/crm/customer/delete?id=` + id })
|
||||
|
|
|
@ -102,12 +102,14 @@
|
|||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="地址" prop="areaId">
|
||||
<el-tree-select
|
||||
<el-cascader
|
||||
v-model="formData.areaId"
|
||||
:data="areaList"
|
||||
:options="areaList"
|
||||
:props="defaultProps"
|
||||
:render-after-expand="true"
|
||||
class="w-1/1"
|
||||
clearable
|
||||
filterable
|
||||
placeholder="请选择城市"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
|
|
@ -35,7 +35,7 @@ import { DICT_TYPE } from '@/utils/dict'
|
|||
import * as ClueApi from '@/api/crm/clue'
|
||||
import { formatDate } from '@/utils/formatTime'
|
||||
|
||||
defineOptions({ name: 'ClueDetailsHeader' })
|
||||
defineOptions({ name: 'CrmClueDetailsHeader' })
|
||||
defineProps<{
|
||||
clue: ClueApi.ClueVO // 线索信息
|
||||
loading: boolean // 加载中
|
||||
|
|
|
@ -62,7 +62,7 @@ import * as ClueApi from '@/api/crm/clue'
|
|||
import { DICT_TYPE } from '@/utils/dict'
|
||||
import { formatDate } from '@/utils/formatTime'
|
||||
|
||||
defineOptions({ name: 'ClueDetailsInfo' })
|
||||
defineOptions({ name: 'CrmClueDetailsInfo' })
|
||||
const { clue } = defineProps<{
|
||||
clue: ClueApi.ClueVO // 线索明细
|
||||
}>()
|
||||
|
|
|
@ -102,12 +102,14 @@
|
|||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="地址" prop="areaId">
|
||||
<el-tree-select
|
||||
<el-cascader
|
||||
v-model="formData.areaId"
|
||||
:data="areaList"
|
||||
:options="areaList"
|
||||
:props="defaultProps"
|
||||
:render-after-expand="true"
|
||||
class="w-1/1"
|
||||
clearable
|
||||
filterable
|
||||
placeholder="请选择城市"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
@ -117,7 +119,6 @@
|
|||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<!-- TODO 芋艿:待整理 -->
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="下次联系时间" prop="contactNextTime">
|
||||
|
|
|
@ -24,18 +24,18 @@
|
|||
{{ customer.dealStatus ? '已成交' : '未成交' }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="负责人">{{ customer.ownerUserName }}</el-descriptions-item>
|
||||
<!-- TODO wanwan 首要联系人? -->
|
||||
<el-descriptions-item label="首要联系人" />
|
||||
<!-- TODO wanwan 首要联系人电话? -->
|
||||
<el-descriptions-item label="首要联系人电话">{{ customer.mobile }}</el-descriptions-item>
|
||||
<el-descriptions-item label="创建时间">
|
||||
{{ formatDate(customer.createTime) }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</ContentWrap>
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import { DICT_TYPE } from '@/utils/dict'
|
||||
import * as CustomerApi from '@/api/crm/customer'
|
||||
import { formatDate } from '@/utils/formatTime'
|
||||
|
||||
defineOptions({ name: 'CustomerDetailsHeader' })
|
||||
defineOptions({ name: 'CrmCustomerDetailsHeader' })
|
||||
defineProps<{
|
||||
customer: CustomerApi.CustomerVO // 客户信息
|
||||
loading: boolean // 加载中
|
||||
|
|
|
@ -9,36 +9,26 @@
|
|||
<el-descriptions-item label="客户名称">
|
||||
{{ customer.name }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="所属行业">
|
||||
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_INDUSTRY" :value="customer.industryId" />
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="客户来源">
|
||||
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_SOURCE" :value="customer.source" />
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="客户级别">
|
||||
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_LEVEL" :value="customer.level" />
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="手机">{{ customer.mobile }}</el-descriptions-item>
|
||||
<el-descriptions-item label="电话">{{ customer.telephone }}</el-descriptions-item>
|
||||
<el-descriptions-item label="邮箱">{{ customer.email }}</el-descriptions-item>
|
||||
<el-descriptions-item label="地址">
|
||||
{{ customer.areaName }} {{ customer.detailAddress }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="QQ">{{ customer.qq }}</el-descriptions-item>
|
||||
<el-descriptions-item label="微信">{{ customer.wechat }}</el-descriptions-item>
|
||||
<el-descriptions-item label="网址">{{ customer.website }}</el-descriptions-item>
|
||||
<el-descriptions-item label="所在地">{{ customer.areaName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="详细地址"
|
||||
>{{ customer.detailAddress }}
|
||||
<el-descriptions-item label="客户行业">
|
||||
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_INDUSTRY" :value="customer.industryId" />
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="客户级别">
|
||||
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_LEVEL" :value="customer.level" />
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="下次联系时间">
|
||||
{{
|
||||
customer.contactNextTime ? formatDate(customer.contactNextTime, 'YYYY-MM-DD') : '空'
|
||||
}}
|
||||
{{ formatDate(customer.contactNextTime) }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="最后跟进时间">
|
||||
{{ customer.contactLastTime ? formatDate(customer.contactLastTime) : '空' }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
<el-descriptions :column="1">
|
||||
<el-descriptions-item label="客户描述">{{ customer.description }}</el-descriptions-item>
|
||||
<el-descriptions-item label="备注">{{ customer.remark }}</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-collapse-item>
|
||||
|
@ -46,14 +36,21 @@
|
|||
<template #title>
|
||||
<span class="text-base font-bold">系统信息</span>
|
||||
</template>
|
||||
<el-descriptions :column="2">
|
||||
<el-descriptions :column="4">
|
||||
<el-descriptions-item label="负责人">{{ customer.ownerUserName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="最后跟进记录">
|
||||
{{ customer.contactLastContent }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="最后跟进时间">
|
||||
{{ formatDate(customer.contactLastTime) }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label=""> </el-descriptions-item>
|
||||
<el-descriptions-item label="创建人">{{ customer.creatorName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="创建时间">
|
||||
{{ customer.createTime ? formatDate(customer.createTime) : '空' }}
|
||||
{{ formatDate(customer.createTime) }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="更新时间">
|
||||
{{ customer.updateTime ? formatDate(customer.updateTime) : '空' }}
|
||||
{{ formatDate(customer.updateTime) }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-collapse-item>
|
||||
|
@ -65,7 +62,7 @@ import * as CustomerApi from '@/api/crm/customer'
|
|||
import { DICT_TYPE } from '@/utils/dict'
|
||||
import { formatDate } from '@/utils/formatTime'
|
||||
|
||||
defineOptions({ name: 'CustomerDetailsInfo' })
|
||||
defineOptions({ name: 'CrmCustomerDetailsInfo' })
|
||||
const { customer } = defineProps<{
|
||||
customer: CustomerApi.CustomerVO // 客户明细
|
||||
}>()
|
||||
|
|
|
@ -11,7 +11,9 @@
|
|||
<el-button v-if="permissionListRef?.validateOwnerUser" type="primary" @click="transfer">
|
||||
转移
|
||||
</el-button>
|
||||
<el-button v-if="permissionListRef?.validateWrite">更改成交状态</el-button>
|
||||
<el-button v-if="permissionListRef?.validateWrite" @click="handleUpdateDealStatus">
|
||||
更改成交状态
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="customer.lockStatus && permissionListRef?.validateOwnerUser"
|
||||
@click="handleUnlock"
|
||||
|
@ -72,7 +74,7 @@
|
|||
|
||||
<!-- 表单弹窗:添加/修改 -->
|
||||
<CustomerForm ref="formRef" @success="getCustomer" />
|
||||
<CrmTransferForm ref="crmTransferFormRef" @success="close" />
|
||||
<CrmTransferForm ref="transferFormRef" @success="close" />
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import { useTagsViewStore } from '@/store/modules/tagsView'
|
||||
|
@ -120,10 +122,24 @@ const openForm = () => {
|
|||
formRef.value?.open('update', customerId.value)
|
||||
}
|
||||
|
||||
/** 更新成交状态操作 */
|
||||
const handleUpdateDealStatus = async () => {
|
||||
const dealStatus = !customer.value.dealStatus
|
||||
try {
|
||||
// 更新状态的二次确认
|
||||
await message.confirm(`确定更新成交状态为【${dealStatus ? '已成交' : '未成交'}】吗?`)
|
||||
// 发起更新
|
||||
await CustomerApi.updateCustomerDealStatus(customerId.value, dealStatus)
|
||||
message.success(`更新成交状态成功`)
|
||||
// 刷新数据
|
||||
await getCustomer()
|
||||
} catch {}
|
||||
}
|
||||
|
||||
/** 客户转移 */
|
||||
const crmTransferFormRef = ref<InstanceType<typeof CrmTransferForm>>() // 客户转移表单 ref
|
||||
const transferFormRef = ref<InstanceType<typeof CrmTransferForm>>() // 客户转移表单 ref
|
||||
const transfer = () => {
|
||||
crmTransferFormRef.value?.open('客户转移', customerId.value, CustomerApi.transferCustomer)
|
||||
transferFormRef.value?.open('客户转移', customerId.value, CustomerApi.transferCustomer)
|
||||
}
|
||||
|
||||
/** 锁定客户 */
|
||||
|
|
Loading…
Reference in New Issue