Skip to content

Commit 4362251

Browse files
committed
✨ CRM:优化客户的详情、更新成交状态
1 parent ac9a77e commit 4362251

File tree

8 files changed

+62
-41
lines changed

8 files changed

+62
-41
lines changed

src/api/crm/customer/index.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,11 @@ export const updateCustomer = async (data: CustomerVO) => {
5050
return await request.put({ url: `/crm/customer/update`, data })
5151
}
5252

53+
// 更新客户的成交状态
54+
export const updateCustomerDealStatus = async (id: number, dealStatus: boolean) => {
55+
return await request.put({ url: `/crm/customer/update-deal-status`, params: { id, dealStatus } })
56+
}
57+
5358
// 删除客户
5459
export const deleteCustomer = async (id: number) => {
5560
return await request.delete({ url: `/crm/customer/delete?id=` + id })

src/views/crm/clue/ClueForm.vue

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,12 +102,14 @@
102102
<el-row>
103103
<el-col :span="12">
104104
<el-form-item label="地址" prop="areaId">
105-
<el-tree-select
105+
<el-cascader
106106
v-model="formData.areaId"
107-
:data="areaList"
107+
:options="areaList"
108108
:props="defaultProps"
109-
:render-after-expand="true"
110109
class="w-1/1"
110+
clearable
111+
filterable
112+
placeholder="请选择城市"
111113
/>
112114
</el-form-item>
113115
</el-col>

src/views/crm/clue/detail/ClueDetailsHeader.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ import { DICT_TYPE } from '@/utils/dict'
3535
import * as ClueApi from '@/api/crm/clue'
3636
import { formatDate } from '@/utils/formatTime'
3737
38-
defineOptions({ name: 'ClueDetailsHeader' })
38+
defineOptions({ name: 'CrmClueDetailsHeader' })
3939
defineProps<{
4040
clue: ClueApi.ClueVO // 线索信息
4141
loading: boolean // 加载中

src/views/crm/clue/detail/ClueDetailsInfo.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ import * as ClueApi from '@/api/crm/clue'
6262
import { DICT_TYPE } from '@/utils/dict'
6363
import { formatDate } from '@/utils/formatTime'
6464
65-
defineOptions({ name: 'ClueDetailsInfo' })
65+
defineOptions({ name: 'CrmClueDetailsInfo' })
6666
const { clue } = defineProps<{
6767
clue: ClueApi.ClueVO // 线索明细
6868
}>()

src/views/crm/customer/CustomerForm.vue

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -102,12 +102,14 @@
102102
<el-row>
103103
<el-col :span="12">
104104
<el-form-item label="地址" prop="areaId">
105-
<el-tree-select
105+
<el-cascader
106106
v-model="formData.areaId"
107-
:data="areaList"
107+
:options="areaList"
108108
:props="defaultProps"
109-
:render-after-expand="true"
110109
class="w-1/1"
110+
clearable
111+
filterable
112+
placeholder="请选择城市"
111113
/>
112114
</el-form-item>
113115
</el-col>
@@ -117,7 +119,6 @@
117119
</el-form-item>
118120
</el-col>
119121
</el-row>
120-
<!-- TODO 芋艿:待整理 -->
121122
<el-row>
122123
<el-col :span="12">
123124
<el-form-item label="下次联系时间" prop="contactNextTime">

src/views/crm/customer/detail/CustomerDetailsHeader.vue

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,18 +24,18 @@
2424
{{ customer.dealStatus ? '已成交' : '未成交' }}
2525
</el-descriptions-item>
2626
<el-descriptions-item label="负责人">{{ customer.ownerUserName }}</el-descriptions-item>
27-
<!-- TODO wanwan 首要联系人? -->
28-
<el-descriptions-item label="首要联系人" />
29-
<!-- TODO wanwan 首要联系人电话? -->
30-
<el-descriptions-item label="首要联系人电话">{{ customer.mobile }}</el-descriptions-item>
27+
<el-descriptions-item label="创建时间">
28+
{{ formatDate(customer.createTime) }}
29+
</el-descriptions-item>
3130
</el-descriptions>
3231
</ContentWrap>
3332
</template>
3433
<script lang="ts" setup>
3534
import { DICT_TYPE } from '@/utils/dict'
3635
import * as CustomerApi from '@/api/crm/customer'
36+
import { formatDate } from '@/utils/formatTime'
3737
38-
defineOptions({ name: 'CustomerDetailsHeader' })
38+
defineOptions({ name: 'CrmCustomerDetailsHeader' })
3939
defineProps<{
4040
customer: CustomerApi.CustomerVO // 客户信息
4141
loading: boolean // 加载中

src/views/crm/customer/detail/CustomerDetailsInfo.vue

Lines changed: 20 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -9,51 +9,48 @@
99
<el-descriptions-item label="客户名称">
1010
{{ customer.name }}
1111
</el-descriptions-item>
12-
<el-descriptions-item label="所属行业">
13-
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_INDUSTRY" :value="customer.industryId" />
14-
</el-descriptions-item>
1512
<el-descriptions-item label="客户来源">
1613
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_SOURCE" :value="customer.source" />
1714
</el-descriptions-item>
18-
<el-descriptions-item label="客户级别">
19-
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_LEVEL" :value="customer.level" />
20-
</el-descriptions-item>
2115
<el-descriptions-item label="手机">{{ customer.mobile }}</el-descriptions-item>
2216
<el-descriptions-item label="电话">{{ customer.telephone }}</el-descriptions-item>
2317
<el-descriptions-item label="邮箱">{{ customer.email }}</el-descriptions-item>
18+
<el-descriptions-item label="地址">
19+
{{ customer.areaName }} {{ customer.detailAddress }}
20+
</el-descriptions-item>
2421
<el-descriptions-item label="QQ">{{ customer.qq }}</el-descriptions-item>
2522
<el-descriptions-item label="微信">{{ customer.wechat }}</el-descriptions-item>
26-
<el-descriptions-item label="网址">{{ customer.website }}</el-descriptions-item>
27-
<el-descriptions-item label="所在地">{{ customer.areaName }}</el-descriptions-item>
28-
<el-descriptions-item label="详细地址"
29-
>{{ customer.detailAddress }}
23+
<el-descriptions-item label="客户行业">
24+
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_INDUSTRY" :value="customer.industryId" />
3025
</el-descriptions-item>
31-
<el-descriptions-item label="下次联系时间">
32-
{{
33-
customer.contactNextTime ? formatDate(customer.contactNextTime, 'YYYY-MM-DD') : '空'
34-
}}
26+
<el-descriptions-item label="客户级别">
27+
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_LEVEL" :value="customer.level" />
3528
</el-descriptions-item>
36-
<el-descriptions-item label="最后跟进时间">
37-
{{ customer.contactLastTime ? formatDate(customer.contactLastTime) : '空' }}
29+
<el-descriptions-item label="下次联系时间">
30+
{{ formatDate(customer.contactNextTime) }}
3831
</el-descriptions-item>
39-
</el-descriptions>
40-
<el-descriptions :column="1">
41-
<el-descriptions-item label="客户描述">{{ customer.description }}</el-descriptions-item>
4232
<el-descriptions-item label="备注">{{ customer.remark }}</el-descriptions-item>
4333
</el-descriptions>
4434
</el-collapse-item>
4535
<el-collapse-item name="systemInfo">
4636
<template #title>
4737
<span class="text-base font-bold">系统信息</span>
4838
</template>
49-
<el-descriptions :column="2">
39+
<el-descriptions :column="4">
5040
<el-descriptions-item label="负责人">{{ customer.ownerUserName }}</el-descriptions-item>
41+
<el-descriptions-item label="最后跟进记录">
42+
{{ customer.contactLastContent }}
43+
</el-descriptions-item>
44+
<el-descriptions-item label="最后跟进时间">
45+
{{ formatDate(customer.contactLastTime) }}
46+
</el-descriptions-item>
47+
<el-descriptions-item label="">&nbsp;</el-descriptions-item>
5148
<el-descriptions-item label="创建人">{{ customer.creatorName }}</el-descriptions-item>
5249
<el-descriptions-item label="创建时间">
53-
{{ customer.createTime ? formatDate(customer.createTime) : '空' }}
50+
{{ formatDate(customer.createTime) }}
5451
</el-descriptions-item>
5552
<el-descriptions-item label="更新时间">
56-
{{ customer.updateTime ? formatDate(customer.updateTime) : '空' }}
53+
{{ formatDate(customer.updateTime) }}
5754
</el-descriptions-item>
5855
</el-descriptions>
5956
</el-collapse-item>
@@ -65,7 +62,7 @@ import * as CustomerApi from '@/api/crm/customer'
6562
import { DICT_TYPE } from '@/utils/dict'
6663
import { formatDate } from '@/utils/formatTime'
6764
68-
defineOptions({ name: 'CustomerDetailsInfo' })
65+
defineOptions({ name: 'CrmCustomerDetailsInfo' })
6966
const { customer } = defineProps<{
7067
customer: CustomerApi.CustomerVO // 客户明细
7168
}>()

src/views/crm/customer/detail/index.vue

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@
1111
<el-button v-if="permissionListRef?.validateOwnerUser" type="primary" @click="transfer">
1212
转移
1313
</el-button>
14-
<el-button v-if="permissionListRef?.validateWrite">更改成交状态</el-button>
14+
<el-button v-if="permissionListRef?.validateWrite" @click="handleUpdateDealStatus">
15+
更改成交状态
16+
</el-button>
1517
<el-button
1618
v-if="customer.lockStatus && permissionListRef?.validateOwnerUser"
1719
@click="handleUnlock"
@@ -72,7 +74,7 @@
7274

7375
<!-- 表单弹窗:添加/修改 -->
7476
<CustomerForm ref="formRef" @success="getCustomer" />
75-
<CrmTransferForm ref="crmTransferFormRef" @success="close" />
77+
<CrmTransferForm ref="transferFormRef" @success="close" />
7678
</template>
7779
<script lang="ts" setup>
7880
import { useTagsViewStore } from '@/store/modules/tagsView'
@@ -120,10 +122,24 @@ const openForm = () => {
120122
formRef.value?.open('update', customerId.value)
121123
}
122124
125+
/** 更新成交状态操作 */
126+
const handleUpdateDealStatus = async () => {
127+
const dealStatus = !customer.value.dealStatus
128+
try {
129+
// 更新状态的二次确认
130+
await message.confirm(`确定更新成交状态为【${dealStatus ? '已成交' : '未成交'}】吗?`)
131+
// 发起更新
132+
await CustomerApi.updateCustomerDealStatus(customerId.value, dealStatus)
133+
message.success(`更新成交状态成功`)
134+
// 刷新数据
135+
await getCustomer()
136+
} catch {}
137+
}
138+
123139
/** 客户转移 */
124-
const crmTransferFormRef = ref<InstanceType<typeof CrmTransferForm>>() // 客户转移表单 ref
140+
const transferFormRef = ref<InstanceType<typeof CrmTransferForm>>() // 客户转移表单 ref
125141
const transfer = () => {
126-
crmTransferFormRef.value?.open('客户转移', customerId.value, CustomerApi.transferCustomer)
142+
transferFormRef.value?.open('客户转移', customerId.value, CustomerApi.transferCustomer)
127143
}
128144
129145
/** 锁定客户 */

0 commit comments

Comments
 (0)