Skip to content

Commit 5f26c4a

Browse files
committed
crm:完善数据权限的界面
1 parent 7de0e93 commit 5f26c4a

File tree

15 files changed

+263
-244
lines changed

15 files changed

+263
-244
lines changed

src/api/crm/contact/index.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,7 @@ export const exportContact = async (params) => {
6161
return await request.download({ url: `/crm/contact/export-excel`, params })
6262
}
6363

64-
export const simpleAllList = async () => {
64+
// 获得 CRM 联系人列表(精简)
65+
export const getSimpleContactList = async () => {
6566
return await request.get({ url: `/crm/contact/simple-all-list` })
6667
}
67-
68-
//

src/api/crm/permission/index.ts

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,11 @@ export interface PermissionVO {
1212
createTime?: Date
1313
}
1414

15+
/**
16+
* CRM 业务类型枚举
17+
*
18+
* @author HUIHUI
19+
*/
1520
export enum BizTypeEnum {
1621
CRM_LEADS = 1, // 线索
1722
CRM_CUSTOMER = 2, // 客户
@@ -20,36 +25,47 @@ export enum BizTypeEnum {
2025
CRM_CONTRACT = 6 // 合同
2126
}
2227

23-
// 查询团队成员列表
28+
/**
29+
* CRM 数据权限级别枚举
30+
*/
31+
export enum PermissionLevelEnum {
32+
OWNER = 1, // 负责人
33+
READ = 2, // 只读
34+
WRITE = 3 // 读写
35+
}
36+
37+
// 获得数据权限列表(查询团队成员列表)
2438
export const getPermissionList = async (params) => {
2539
return await request.get({ url: `/crm/permission/list`, params })
2640
}
2741

28-
// 新增团队成员
42+
// 创建数据权限(新增团队成员
2943
export const createPermission = async (data: PermissionVO) => {
3044
return await request.post({ url: `/crm/permission/create`, data })
3145
}
3246

33-
// 修改团队成员权限级别
47+
// 编辑数据权限(修改团队成员权限级别
3448
export const updatePermission = async (data) => {
3549
return await request.put({ url: `/crm/permission/update`, data })
3650
}
3751

38-
// 删除团队成员
39-
export const deletePermission = async (params) => {
52+
// 删除数据权限(删除团队成员
53+
export const deletePermissionBatch = async (params) => {
4054
return await request.delete({ url: '/crm/permission/delete', params })
4155
}
4256

43-
// 退出团队
44-
export const quitTeam = async (id) => {
57+
// 删除自己的数据权限(退出团队
58+
export const deleteSelfPermission = async (id) => {
4559
return await request.delete({ url: '/crm/permission/quit-team?id=' + id })
4660
}
4761

62+
// TODO @puhui999:调整下位置
4863
// 领取公海数据
4964
export const receive = async (data: { bizType: number; bizId: number }) => {
5065
return await request.put({ url: `/crm/permission/receive`, data })
5166
}
5267

68+
// TODO @puhui999:调整下位置
5369
// 数据放入公海
5470
export const putPool = async (data: { bizType: number; bizId: number }) => {
5571
return await request.put({ url: `/crm/permission/put-pool`, data })

src/utils/dict.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,6 @@ export enum DICT_TYPE {
198198
CRM_PRODUCT_STATUS = 'crm_product_status',
199199

200200
// ========== CRM - 数据权限模块 ==========
201-
CRM_BIZ_TYPE = 'crm_biz_type', // 数据模块类型
202-
CRM_PERMISSION_LEVEL = 'crm_permission_level' // 用户数据权限类型
201+
CRM_BIZ_TYPE = 'crm_biz_type', // CRM 业务类型
202+
CRM_PERMISSION_LEVEL = 'crm_permission_level' // CRM 数据权限的级别
203203
}

src/views/crm/components/index.ts

Lines changed: 0 additions & 16 deletions
This file was deleted.

src/views/crm/contact/ContactForm.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ const open = async (type: string, id?: number) => {
235235
dialogTitle.value = t('action.' + type)
236236
formType.value = type
237237
resetForm()
238-
allContactList.value = await ContactApi.simpleAllList()
238+
allContactList.value = await ContactApi.getSimpleContactList()
239239
userList.value = await UserApi.getSimpleUserList()
240240
customerList.value = await CustomerApi.queryAllList()
241241
areaList.value = await AreaApi.getAreaTree()

src/views/crm/contact/components/ContactList.vue

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
<template>
22
<!-- 操作栏 -->
33
<el-row justify="end">
4-
<el-button class="mb-10px">
4+
<el-button>
55
<Icon class="mr-5px" icon="system-uicons:contacts" />
66
创建联系人
77
</el-button>
88
</el-row>
99

1010
<!-- 列表 -->
11-
<ContentWrap>
11+
<ContentWrap class="mt-10px">
1212
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
1313
<el-table-column label="姓名" fixed="left" align="center" prop="name">
1414
<template #default="scope">
@@ -136,6 +136,7 @@ const openDetail = (id: number) => {
136136
push({ name: 'CrmContactDetail', params: { id } })
137137
}
138138
139+
/** 监听打开的 bizId + bizType,从而加载最新的列表 */
139140
watch(
140141
() => [props.bizId, props.bizType],
141142
() => {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,10 +90,10 @@ import ContactBasicInfo from '@/views/crm/contact/detail/ContactBasicInfo.vue'
9090
import ContactDetails from '@/views/crm/contact/detail/ContactDetails.vue'
9191
import ContactForm from '@/views/crm/contact/ContactForm.vue'
9292
import { formatDate } from '@/utils/formatTime'
93-
import * as CustomerApi from '@/api/crm/customer'
9493
// TODO 芋艿:后面在 review 么?
9594
96-
defineOptions({ name: 'ContactDetail' })
95+
defineOptions({ name: 'CrmContactDetail' })
96+
9797
const { delView } = useTagsViewStore() // 视图操作
9898
const route = useRoute()
9999
const { currentRoute } = useRouter() // 路由

src/views/crm/contact/index.vue

Lines changed: 115 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,98 @@
11
<template>
22
<ContentWrap>
33
<!-- 搜索工作栏 -->
4-
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
4+
<el-form
5+
class="-mb-15px"
6+
:model="queryParams"
7+
ref="queryFormRef"
8+
:inline="true"
9+
label-width="68px"
10+
>
511
<el-form-item label="客户" prop="customerId">
612
<el-select
7-
v-model="queryParams.customerId" placeholder="请选择客户" value-key="id" lable-key="name"
8-
@keyup.enter="handleQuery" clearable>
9-
<el-option v-for="item in customerList" :key="item.id" :label="item.name" :value="item.id" />
13+
v-model="queryParams.customerId"
14+
placeholder="请选择客户"
15+
value-key="id"
16+
lable-key="name"
17+
@keyup.enter="handleQuery"
18+
clearable
19+
>
20+
<el-option
21+
v-for="item in customerList"
22+
:key="item.id"
23+
:label="item.name"
24+
:value="item.id"
25+
/>
1026
</el-select>
1127
</el-form-item>
1228
<el-form-item label="姓名" prop="name">
13-
<el-input v-model="queryParams.name" placeholder="请输入姓名" clearable @keyup.enter="handleQuery" class="!w-240px" />
29+
<el-input
30+
v-model="queryParams.name"
31+
placeholder="请输入姓名"
32+
clearable
33+
@keyup.enter="handleQuery"
34+
class="!w-240px"
35+
/>
1436
</el-form-item>
1537
<el-form-item label="手机号" prop="mobile">
1638
<el-input
17-
v-model="queryParams.mobile" placeholder="请输入手机号" clearable @keyup.enter="handleQuery"
18-
class="!w-240px" />
39+
v-model="queryParams.mobile"
40+
placeholder="请输入手机号"
41+
clearable
42+
@keyup.enter="handleQuery"
43+
class="!w-240px"
44+
/>
1945
</el-form-item>
2046
<el-form-item label="座机" prop="telephone">
2147
<el-input
22-
v-model="queryParams.telephone" placeholder="请输入电话" clearable @keyup.enter="handleQuery"
23-
class="!w-240px" />
48+
v-model="queryParams.telephone"
49+
placeholder="请输入电话"
50+
clearable
51+
@keyup.enter="handleQuery"
52+
class="!w-240px"
53+
/>
2454
</el-form-item>
2555

2656
<el-form-item label="QQ" prop="qq">
27-
<el-input v-model="queryParams.qq" placeholder="请输入QQ" clearable @keyup.enter="handleQuery" class="!w-240px" />
57+
<el-input
58+
v-model="queryParams.qq"
59+
placeholder="请输入QQ"
60+
clearable
61+
@keyup.enter="handleQuery"
62+
class="!w-240px"
63+
/>
2864
</el-form-item>
2965
<el-form-item label="微信" prop="wechat">
3066
<el-input
31-
v-model="queryParams.wechat" placeholder="请输入微信" clearable @keyup.enter="handleQuery"
32-
class="!w-240px" />
67+
v-model="queryParams.wechat"
68+
placeholder="请输入微信"
69+
clearable
70+
@keyup.enter="handleQuery"
71+
class="!w-240px"
72+
/>
3373
</el-form-item>
3474
<el-form-item label="电子邮箱" prop="email">
3575
<el-input
36-
v-model="queryParams.email" placeholder="请输入电子邮箱" clearable @keyup.enter="handleQuery"
37-
class="!w-240px" />
76+
v-model="queryParams.email"
77+
placeholder="请输入电子邮箱"
78+
clearable
79+
@keyup.enter="handleQuery"
80+
class="!w-240px"
81+
/>
3882
</el-form-item>
3983
<el-form-item>
40-
<el-button @click="handleQuery">
41-
<Icon icon="ep:search" class="mr-5px" /> 搜索
42-
</el-button>
43-
<el-button @click="resetQuery">
44-
<Icon icon="ep:refresh" class="mr-5px" /> 重置
45-
</el-button>
84+
<el-button @click="handleQuery"> <Icon icon="ep:search" class="mr-5px" /> 搜索 </el-button>
85+
<el-button @click="resetQuery"> <Icon icon="ep:refresh" class="mr-5px" /> 重置 </el-button>
4686
<el-button type="primary" @click="openForm('create')" v-hasPermi="['crm:contact:create']">
4787
<Icon icon="ep:plus" class="mr-5px" /> 新增
4888
</el-button>
4989
<el-button
50-
type="success" plain @click="handleExport" :loading="exportLoading"
51-
v-hasPermi="['crm:contact:export']">
90+
type="success"
91+
plain
92+
@click="handleExport"
93+
:loading="exportLoading"
94+
v-hasPermi="['crm:contact:export']"
95+
>
5296
<Icon icon="ep:download" class="mr-5px" /> 导出
5397
</el-button>
5498
</el-form-item>
@@ -60,9 +104,9 @@ type="success" plain @click="handleExport" :loading="exportLoading"
60104
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
61105
<el-table-column label="姓名" fixed="left" align="center" prop="name">
62106
<template #default="scope">
63-
<el-link type="primary" :underline="false" @click="openDetail(scope.row.id)">{{
64-
scope.row.name
65-
}}</el-link>
107+
<el-link type="primary" :underline="false" @click="openDetail(scope.row.id)">
108+
{{ scope.row.name }}
109+
</el-link>
66110
</template>
67111
</el-table-column>
68112
<el-table-column label="客户" fixed="left" align="center" prop="customerName" />
@@ -84,17 +128,41 @@ type="success" plain @click="handleExport" :loading="exportLoading"
84128
<el-table-column label="微信" align="center" prop="wechat" />
85129
<el-table-column label="邮箱" align="center" prop="email" />
86130
<el-table-column label="地址" align="center" prop="address" />
87-
<el-table-column label="下次联系时间" align="center" prop="nextTime" width="180px" :formatter="dateFormatter" />
131+
<el-table-column
132+
label="下次联系时间"
133+
align="center"
134+
prop="nextTime"
135+
width="180px"
136+
:formatter="dateFormatter"
137+
/>
88138
<el-table-column label="备注" align="center" prop="remark" />
89-
<el-table-column label="最后跟进时间" align="center" prop="lastTime" :formatter="dateFormatter" width="180px" />
139+
<el-table-column
140+
label="最后跟进时间"
141+
align="center"
142+
prop="lastTime"
143+
:formatter="dateFormatter"
144+
width="180px"
145+
/>
90146
<el-table-column label="负责人" align="center" prop="ownerUserId">
91147
<template #default="scope">
92148
{{ scope.row.ownerUserName }}
93149
</template>
94150
</el-table-column>
95151
<!-- <el-table-column label="所属部门" align="center" prop="ownerUserId" /> -->
96-
<el-table-column label="更新时间" align="center" prop="updateTime" :formatter="dateFormatter" width="180px" />
97-
<el-table-column label="创建时间" align="center" prop="createTime" :formatter="dateFormatter" width="180px" />
152+
<el-table-column
153+
label="更新时间"
154+
align="center"
155+
prop="updateTime"
156+
:formatter="dateFormatter"
157+
width="180px"
158+
/>
159+
<el-table-column
160+
label="创建时间"
161+
align="center"
162+
prop="createTime"
163+
:formatter="dateFormatter"
164+
width="180px"
165+
/>
98166
<!-- <el-table-column
99167
label="创建人"
100168
align="center"
@@ -108,19 +176,32 @@ type="success" plain @click="handleExport" :loading="exportLoading"
108176
</el-table-column> -->
109177
<el-table-column label="操作" align="center" fixed="right" width="200">
110178
<template #default="scope">
111-
<el-button plain type="primary" @click="openForm('update', scope.row.id)" v-hasPermi="['crm:contact:update']">
179+
<el-button
180+
plain
181+
type="primary"
182+
@click="openForm('update', scope.row.id)"
183+
v-hasPermi="['crm:contact:update']"
184+
>
112185
编辑
113186
</el-button>
114-
<el-button plain type="danger" @click="handleDelete(scope.row.id)" v-hasPermi="['crm:contact:delete']">
187+
<el-button
188+
plain
189+
type="danger"
190+
@click="handleDelete(scope.row.id)"
191+
v-hasPermi="['crm:contact:delete']"
192+
>
115193
删除
116194
</el-button>
117195
</template>
118196
</el-table-column>
119197
</el-table>
120198
<!-- 分页 -->
121199
<Pagination
122-
:total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize"
123-
@pagination="getList" />
200+
:total="total"
201+
v-model:page="queryParams.pageNo"
202+
v-model:limit="queryParams.pageSize"
203+
@pagination="getList"
204+
/>
124205
</ContentWrap>
125206

126207
<!-- 表单弹窗:添加/修改 -->
@@ -208,7 +289,7 @@ const handleDelete = async (id: number) => {
208289
message.success(t('common.delSuccess'))
209290
// 刷新列表
210291
await getList()
211-
} catch { }
292+
} catch {}
212293
}
213294
214295
/** 导出按钮操作 */
@@ -232,7 +313,6 @@ const openDetail = (id: number) => {
232313
push({ name: 'CrmContactDetail', params: { id } })
233314
}
234315
235-
236316
/** 初始化 **/
237317
onMounted(async () => {
238318
await getList()

0 commit comments

Comments
 (0)