Skip to content

Commit 5d760d5

Browse files
YunaiVgitee-org
authored andcommitted
!297 feat: 调整 crm 客户表的字段
Merge pull request !297 from wanwan/master
2 parents 32b3c87 + 60d5312 commit 5d760d5

File tree

4 files changed

+137
-135
lines changed

4 files changed

+137
-135
lines changed

src/api/crm/customer/index.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,24 @@ import request from '@/config/axios'
33
export interface CustomerVO {
44
id: number
55
name: string
6+
industryId: number
7+
level: number
8+
source: number
69
followUpStatus: boolean
710
lockStatus: boolean
811
mobile: string
912
telephone: string
1013
website: string
14+
qq: string
15+
wechat: string
16+
email: string
17+
description: string
1118
remark: string
1219
ownerUserId: number
1320
roUserIds: string
1421
rwUserIds: string
1522
areaId: number
1623
detailAddress: string
17-
longitude: string
18-
latitude: string
1924
contactLastTime: Date
2025
contactNextTime: Date
2126
}

src/utils/dict.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,5 +188,8 @@ export enum DICT_TYPE {
188188

189189
// ========== CRM - 客户管理模块 ==========
190190
CRM_RECEIVABLE_CHECK_STATUS = 'crm_receivable_check_status',
191-
CRM_RETURN_TYPE = 'crm_return_type'
191+
CRM_RETURN_TYPE = 'crm_return_type',
192+
CRM_CUSTOMER_INDUSTRY = 'crm_customer_industry',
193+
CRM_CUSTOMER_LEVEL = 'crm_customer_level',
194+
CRM_CUSTOMER_SOURCE = 'crm_customer_source'
192195
}

src/views/crm/customer/CustomerForm.vue

Lines changed: 98 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -7,80 +7,92 @@
77
label-width="100px"
88
v-loading="formLoading"
99
>
10-
<el-form-item label="客户名称" prop="name">
11-
<el-input v-model="formData.name" placeholder="请输入客户名称" />
12-
</el-form-item>
13-
<el-form-item label="跟进状态" prop="followUpStatus">
14-
<el-radio-group v-model="formData.followUpStatus">
15-
<el-radio
16-
v-for="dict in getBoolDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)"
17-
:key="dict.value"
18-
:label="dict.value"
19-
>
20-
{{ dict.label }}
21-
</el-radio>
22-
</el-radio-group>
23-
</el-form-item>
24-
<el-form-item label="锁定状态" prop="lockStatus">
25-
<el-radio-group v-model="formData.lockStatus">
26-
<el-radio
27-
v-for="dict in getBoolDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)"
28-
:key="dict.value"
29-
:label="dict.value"
30-
>
31-
{{ dict.label }}
32-
</el-radio>
33-
</el-radio-group>
34-
</el-form-item>
35-
<el-form-item label="手机" prop="mobile">
36-
<el-input v-model="formData.mobile" placeholder="请输入手机" />
37-
</el-form-item>
38-
<el-form-item label="电话" prop="telephone">
39-
<el-input v-model="formData.telephone" placeholder="请输入电话" />
40-
</el-form-item>
41-
<el-form-item label="网址" prop="website">
42-
<el-input v-model="formData.website" placeholder="请输入网址" />
10+
<el-row>
11+
<el-form-item label="客户名称" prop="name">
12+
<el-input v-model="formData.name" placeholder="请输入客户名称" />
13+
</el-form-item>
14+
<el-form-item label="所属行业" prop="industryId">
15+
<el-select v-model="formData.industryId" placeholder="请选择所属行业">
16+
<el-option
17+
v-for="dict in getStrDictOptions(DICT_TYPE.CRM_CUSTOMER_INDUSTRY)"
18+
:key="dict.value"
19+
:label="dict.label"
20+
:value="dict.value"
21+
/>
22+
</el-select>
23+
</el-form-item>
24+
</el-row>
25+
<el-row>
26+
<el-form-item label="客户来源" prop="source">
27+
<el-select v-model="formData.source" placeholder="请选择客户来源">
28+
<el-option
29+
v-for="dict in getStrDictOptions(DICT_TYPE.CRM_CUSTOMER_SOURCE)"
30+
:key="dict.value"
31+
:label="dict.label"
32+
:value="dict.value"
33+
/>
34+
</el-select>
35+
</el-form-item>
36+
<el-form-item label="客户等级" prop="level">
37+
<el-select v-model="formData.level" placeholder="请选择客户等级">
38+
<el-option
39+
v-for="dict in getStrDictOptions(DICT_TYPE.CRM_CUSTOMER_LEVEL)"
40+
:key="dict.value"
41+
:label="dict.label"
42+
:value="dict.value"
43+
/>
44+
</el-select>
45+
</el-form-item>
46+
</el-row>
47+
<el-row>
48+
<el-form-item label="手机" prop="mobile">
49+
<el-input v-model="formData.mobile" placeholder="请输入手机" />
50+
</el-form-item>
51+
<el-form-item label="电话" prop="telephone">
52+
<el-input v-model="formData.telephone" placeholder="请输入电话" />
53+
</el-form-item>
54+
</el-row>
55+
<el-row>
56+
<el-form-item label="邮箱" prop="email">
57+
<el-input v-model="formData.email" placeholder="请输入邮箱" />
58+
</el-form-item>
59+
<el-form-item label="QQ" prop="qq">
60+
<el-input v-model="formData.qq" placeholder="请输入QQ" />
61+
</el-form-item>
62+
</el-row>
63+
<el-row>
64+
<el-form-item label="微信" prop="wechat">
65+
<el-input v-model="formData.wechat" placeholder="请输入微信" />
66+
</el-form-item>
67+
<el-form-item label="网址" prop="website">
68+
<el-input v-model="formData.website" placeholder="请输入网址" />
69+
</el-form-item>
70+
</el-row>
71+
<el-row>
72+
<el-form-item label="地区编号" prop="areaId">
73+
<el-input v-model="formData.areaId" placeholder="请输入地区编号" />
74+
</el-form-item>
75+
<el-form-item label="详细地址" prop="detailAddress">
76+
<el-input v-model="formData.detailAddress" placeholder="请输入详细地址" />
77+
</el-form-item>
78+
</el-row>
79+
<!-- TODO @Wanwan 少一个负责人字段,默认先选中自己 -->
80+
<el-row>
81+
<el-form-item label="下次联系时间" prop="contactNextTime">
82+
<el-date-picker
83+
v-model="formData.contactNextTime"
84+
type="date"
85+
value-format="x"
86+
placeholder="选择下次联系时间"
87+
/>
88+
</el-form-item>
89+
</el-row>
90+
<el-form-item label="客户描述" prop="description">
91+
<el-input v-model="formData.description" placeholder="请输入客户描述" />
4392
</el-form-item>
4493
<el-form-item label="备注" prop="remark">
4594
<el-input v-model="formData.remark" placeholder="请输入备注" />
4695
</el-form-item>
47-
<el-form-item label="负责人的用户编号" prop="ownerUserId">
48-
<el-input v-model="formData.ownerUserId" placeholder="请输入负责人的用户编号" />
49-
</el-form-item>
50-
<el-form-item label="只读权限的用户编号数组" prop="roUserIds">
51-
<el-input v-model="formData.roUserIds" placeholder="请输入只读权限的用户编号数组" />
52-
</el-form-item>
53-
<el-form-item label="读写权限的用户编号数组" prop="rwUserIds">
54-
<el-input v-model="formData.rwUserIds" placeholder="请输入读写权限的用户编号数组" />
55-
</el-form-item>
56-
<el-form-item label="地区编号" prop="areaId">
57-
<el-input v-model="formData.areaId" placeholder="请输入地区编号" />
58-
</el-form-item>
59-
<el-form-item label="详细地址" prop="detailAddress">
60-
<el-input v-model="formData.detailAddress" placeholder="请输入详细地址" />
61-
</el-form-item>
62-
<el-form-item label="地理位置经度" prop="longitude">
63-
<el-input v-model="formData.longitude" placeholder="请输入地理位置经度" />
64-
</el-form-item>
65-
<el-form-item label="地理位置维度" prop="latitude">
66-
<el-input v-model="formData.latitude" placeholder="请输入地理位置维度" />
67-
</el-form-item>
68-
<el-form-item label="最后跟进时间" prop="contactLastTime">
69-
<el-date-picker
70-
v-model="formData.contactLastTime"
71-
type="date"
72-
value-format="x"
73-
placeholder="选择最后跟进时间"
74-
/>
75-
</el-form-item>
76-
<el-form-item label="下次联系时间" prop="contactNextTime">
77-
<el-date-picker
78-
v-model="formData.contactNextTime"
79-
type="date"
80-
value-format="x"
81-
placeholder="选择下次联系时间"
82-
/>
83-
</el-form-item>
8496
</el-form>
8597
<template #footer>
8698
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
@@ -89,7 +101,7 @@
89101
</Dialog>
90102
</template>
91103
<script setup lang="ts">
92-
import { DICT_TYPE, getBoolDictOptions } from '@/utils/dict'
104+
import { DICT_TYPE, getStrDictOptions } from '@/utils/dict'
93105
import * as CustomerApi from '@/api/crm/customer'
94106
95107
const { t } = useI18n() // 国际化
@@ -102,26 +114,23 @@ const formType = ref('') // 表单的类型:create - 新增;update - 修改
102114
const formData = ref({
103115
id: undefined,
104116
name: undefined,
105-
followUpStatus: undefined,
106-
lockStatus: undefined,
107117
mobile: undefined,
118+
industryId: undefined,
119+
level: undefined,
120+
source: undefined,
108121
telephone: undefined,
109122
website: undefined,
123+
qq: undefined,
124+
wechat: undefined,
125+
email: undefined,
126+
description: undefined,
110127
remark: undefined,
111-
ownerUserId: undefined,
112-
roUserIds: undefined,
113-
rwUserIds: undefined,
114128
areaId: undefined,
115129
detailAddress: undefined,
116-
longitude: undefined,
117-
latitude: undefined,
118-
contactLastTime: undefined,
119130
contactNextTime: undefined
120131
})
121132
const formRules = reactive({
122-
name: [{ require: true, message: '跟进状态不能为空', trigger: 'blur' }],
123-
followUpStatus: [{ required: true, message: '跟进状态不能为空', trigger: 'blur' }],
124-
lockStatus: [{ required: true, message: '锁定状态不能为空', trigger: 'blur' }]
133+
name: [{ require: true, message: '客户名称不能为空', trigger: 'blur' }]
125134
})
126135
const formRef = ref() // 表单 Ref
127136
@@ -174,20 +183,19 @@ const resetForm = () => {
174183
formData.value = {
175184
id: undefined,
176185
name: undefined,
177-
followUpStatus: undefined,
178-
lockStatus: undefined,
179186
mobile: undefined,
187+
industryId: undefined,
188+
level: undefined,
189+
source: undefined,
180190
telephone: undefined,
181191
website: undefined,
192+
qq: undefined,
193+
wechat: undefined,
194+
email: undefined,
195+
description: undefined,
182196
remark: undefined,
183-
ownerUserId: undefined,
184-
roUserIds: undefined,
185-
rwUserIds: undefined,
186197
areaId: undefined,
187198
detailAddress: undefined,
188-
longitude: undefined,
189-
latitude: undefined,
190-
contactLastTime: undefined,
191199
contactNextTime: undefined
192200
}
193201
formRef.value?.resetFields()

src/views/crm/customer/index.vue

Lines changed: 28 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -26,24 +26,6 @@
2626
class="!w-240px"
2727
/>
2828
</el-form-item>
29-
<el-form-item label="电话" prop="telephone">
30-
<el-input
31-
v-model="queryParams.telephone"
32-
placeholder="请输入电话"
33-
clearable
34-
@keyup.enter="handleQuery"
35-
class="!w-240px"
36-
/>
37-
</el-form-item>
38-
<el-form-item label="网址" prop="website">
39-
<el-input
40-
v-model="queryParams.website"
41-
placeholder="请输入网址"
42-
clearable
43-
@keyup.enter="handleQuery"
44-
class="!w-240px"
45-
/>
46-
</el-form-item>
4729
<el-form-item>
4830
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
4931
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
@@ -67,38 +49,38 @@
6749
<ContentWrap>
6850
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
6951
<el-table-column label="编号" align="center" prop="id" />
70-
<el-table-column label="客户名称" align="center" prop="name" />
71-
<el-table-column label="跟进状态" align="center" prop="followUpStatus">
52+
<el-table-column label="客户名称" align="center" prop="name" width="160" />
53+
<el-table-column label="所属行业" align="center" prop="industryId" width="120">
7254
<template #default="scope">
73-
<dict-tag :type="DICT_TYPE.INFRA_BOOLEAN_STRING" :value="scope.row.followUpStatus" />
55+
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_INDUSTRY" :value="scope.row.industryId" />
7456
</template>
7557
</el-table-column>
76-
<el-table-column label="锁定状态" align="center" prop="lockStatus">
58+
<el-table-column label="客户来源" align="center" prop="source" width="100">
7759
<template #default="scope">
78-
<dict-tag :type="DICT_TYPE.INFRA_BOOLEAN_STRING" :value="scope.row.lockStatus" />
60+
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_SOURCE" :value="scope.row.source" />
7961
</template>
8062
</el-table-column>
81-
<el-table-column label="成交状态" align="center" prop="dealStatus">
63+
<el-table-column label="客户等级" align="center" prop="level" width="120">
8264
<template #default="scope">
83-
<dict-tag :type="DICT_TYPE.INFRA_BOOLEAN_STRING" :value="scope.row.dealStatus" />
65+
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_LEVEL" :value="scope.row.level" />
8466
</template>
8567
</el-table-column>
86-
<el-table-column label="手机" align="center" prop="mobile" />
87-
<el-table-column label="电话" align="center" prop="telephone" />
88-
<el-table-column label="网址" align="center" prop="website" />
89-
<el-table-column label="备注" align="center" prop="remark" />
90-
<el-table-column label="负责人的用户编号" align="center" prop="ownerUserId" />
91-
<el-table-column label="地区编号" align="center" prop="areaId" />
92-
<el-table-column label="详细地址" align="center" prop="detailAddress" />
93-
<el-table-column label="地理位置经度" align="center" prop="longitude" />
94-
<el-table-column label="地理位置维度" align="center" prop="latitude" />
68+
<el-table-column label="手机" align="center" prop="mobile" width="120" />
69+
<el-table-column label="详细地址" align="center" prop="detailAddress" width="200" />
70+
<!-- TODO @Wanwan 负责人回显,所属部门,创建人 -->
71+
<el-table-column label="负责人" align="center" prop="ownerUserId" />
9572
<el-table-column
96-
label="最后跟进时间"
73+
label="创建时间"
9774
align="center"
98-
prop="contactLastTime"
75+
prop="createTime"
9976
:formatter="dateFormatter"
10077
width="180px"
10178
/>
79+
<el-table-column label="成交状态" align="center" prop="dealStatus">
80+
<template #default="scope">
81+
<dict-tag :type="DICT_TYPE.INFRA_BOOLEAN_STRING" :value="scope.row.dealStatus" />
82+
</template>
83+
</el-table-column>
10284
<el-table-column
10385
label="下次联系时间"
10486
align="center"
@@ -107,13 +89,19 @@
10789
width="180px"
10890
/>
10991
<el-table-column
110-
label="创建时间"
92+
label="最后跟进时间"
11193
align="center"
112-
prop="createTime"
94+
prop="contactLastTime"
11395
:formatter="dateFormatter"
11496
width="180px"
11597
/>
116-
<el-table-column label="操作" align="center">
98+
<el-table-column label="锁定状态" align="center" prop="lockStatus">
99+
<template #default="scope">
100+
<dict-tag :type="DICT_TYPE.INFRA_BOOLEAN_STRING" :value="scope.row.lockStatus" />
101+
</template>
102+
</el-table-column>
103+
<!-- TODO @Wanwan 距进入公海天数 -->
104+
<el-table-column label="操作" align="center" width="160">
117105
<template #default="scope">
118106
<el-button
119107
link
@@ -166,9 +154,7 @@ const queryParams = reactive({
166154
pageNo: 1,
167155
pageSize: 10,
168156
name: null,
169-
mobile: null,
170-
telephone: null,
171-
website: null
157+
mobile: null
172158
})
173159
const queryFormRef = ref() // 搜索的表单
174160
const exportLoading = ref(false) // 导出的加载中

0 commit comments

Comments
 (0)