Skip to content

Commit 015a164

Browse files
author
puhui999
committed
crm-团队成员:完善团队成员通用组件封装
1 parent 27c9a0f commit 015a164

File tree

4 files changed

+65
-39
lines changed

4 files changed

+65
-39
lines changed

src/api/crm/permission/index.ts

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import request from '@/config/axios'
22

33
export interface PermissionVO {
4-
id: number // 数据权限编号
5-
userId: number // 用户编号
6-
bizType: number // Crm 类型
7-
bizId: number // Crm 类型数据编号
8-
level: number // 权限级别
9-
deptName: string // 部门名称
10-
nickname: string // 用户昵称
11-
postNames: string // 岗位名称数组
4+
id?: number // 数据权限编号
5+
userId: number | undefined // 用户编号
6+
bizType: number | undefined // Crm 类型
7+
bizId: number | undefined // Crm 类型数据编号
8+
level: number | undefined // 权限级别
9+
deptName?: string // 部门名称
10+
nickname?: string // 用户昵称
11+
postNames?: string // 岗位名称数组
1212
}
1313

1414
// 查询团队成员列表
@@ -21,12 +21,27 @@ export const createPermission = async (data: PermissionVO) => {
2121
return await request.post({ url: `/crm/permission/add`, data })
2222
}
2323

24-
// 修改团队成员
25-
export const updatePermission = async (data: PermissionVO) => {
24+
// 修改团队成员权限级别
25+
export const updatePermission = async (data) => {
2626
return await request.put({ url: `/crm/permission/update`, data })
2727
}
2828

2929
// 删除团队成员
3030
export const deletePermission = async (params) => {
3131
return await request.delete({ url: '/crm/permission/delete', params })
3232
}
33+
34+
// 退出团队
35+
export const quitTeam = async (id) => {
36+
return await request.delete({ url: '/crm/permission/quit-team?id=' + id })
37+
}
38+
39+
// 领取公海数据
40+
export const receive = async (data: { bizType: number; bizId: number }) => {
41+
return await request.put({ url: `/crm/permission/receive`, data })
42+
}
43+
44+
// 数据放入公海
45+
export const putPool = async (data: { bizType: number; bizId: number }) => {
46+
return await request.put({ url: `/crm/permission/put-pool`, data })
47+
}

src/views/crm/components/CrmPermissionForm.vue

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<template>
2-
<Dialog v-model="dialogVisible" :title="dialogTitle">
2+
<Dialog v-model="dialogVisible" :title="dialogTitle" width="30%">
33
<el-form
44
ref="formRef"
55
v-loading="formLoading"
@@ -11,16 +11,16 @@
1111
<el-select v-model="formData.userId">
1212
<el-option
1313
v-for="item in userOptions"
14-
:key="parseInt(item.id)"
14+
:key="item.id"
1515
:label="item.nickname"
16-
:value="parseInt(item.id)"
16+
:value="item.id"
1717
/>
1818
</el-select>
1919
</el-form-item>
2020
<el-form-item label="权限级别" prop="level">
2121
<el-radio-group v-model="formData.level">
22-
<el-radio label="2">只读</el-radio>
23-
<el-radio label="3">读写</el-radio>
22+
<el-radio :label="CrmPermissionLevelEnum.READ">只读</el-radio>
23+
<el-radio :label="CrmPermissionLevelEnum.WRITE">读写</el-radio>
2424
</el-radio-group>
2525
</el-form-item>
2626
</el-form>
@@ -32,6 +32,8 @@
3232
</template>
3333
<script lang="ts" setup>
3434
import * as UserApi from '@/api/system/user'
35+
import * as PermissionApi from '@/api/crm/permission'
36+
import { CrmPermissionLevelEnum } from './index'
3537
3638
defineOptions({ name: 'CrmPermissionForm' })
3739
const { t } = useI18n() // 国际化
@@ -42,7 +44,7 @@ const dialogTitle = ref('') // 弹窗的标题
4244
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
4345
const formType = ref('') // 表单的类型:create - 新增;update - 修改
4446
const userOptions = ref<UserApi.UserVO[]>([]) // 用户列表
45-
const formData = ref({
47+
const formData = ref<PermissionApi.PermissionVO & { ids?: number[] }>({
4648
userId: undefined, // 用户编号
4749
bizType: undefined, // Crm 类型
4850
bizId: undefined, // Crm 类型数据编号
@@ -55,17 +57,15 @@ const formRules = reactive({
5557
const formRef = ref() // 表单 Ref
5658
5759
/** 打开弹窗 */
58-
const open = async (type: 'create' | 'update', bizType: number, bizId: number, id?: number) => {
60+
const open = async (type: 'create' | 'update', bizType: number, bizId: number, ids?: number[]) => {
5961
dialogVisible.value = true
6062
dialogTitle.value = t('action.' + type) + '团队成员'
6163
formType.value = type
6264
resetForm(bizType, bizId)
6365
// 修改时,设置数据
64-
if (id) {
65-
formData.value.id = id
66+
if (ids) {
67+
formData.value.ids = ids
6668
}
67-
// 获得用户列表
68-
userOptions.value = await UserApi.getSimpleUserList()
6969
}
7070
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
7171
@@ -81,8 +81,10 @@ const submitForm = async () => {
8181
try {
8282
const data = formData.value
8383
if (formType.value === 'create') {
84+
await PermissionApi.createPermission(unref(data))
8485
message.success(t('common.createSuccess'))
8586
} else {
87+
await PermissionApi.updatePermission(unref(data))
8688
message.success(t('common.updateSuccess'))
8789
}
8890
dialogVisible.value = false
@@ -95,12 +97,16 @@ const submitForm = async () => {
9597
9698
/** 重置表单 */
9799
const resetForm = (bizType: number, bizId: number) => {
100+
formRef.value?.resetFields()
98101
formData.value = {
99102
userId: undefined, // 用户编号
100103
bizType, // Crm 类型
101104
bizId, // Crm 类型数据编号
102105
level: undefined // 权限级别
103106
}
104-
formRef.value?.resetFields()
105107
}
108+
onMounted(async () => {
109+
// 获得用户列表
110+
userOptions.value = await UserApi.getSimpleUserList()
111+
})
106112
</script>

src/views/crm/components/CrmTeamList.vue

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@
2525
@selection-change="handleSelectionChange"
2626
>
2727
<el-table-column type="selection" width="55" />
28-
<el-table-column align="center" label="姓名" prop="mobile" />
29-
<el-table-column align="center" label="部门" prop="detailAddress" />
30-
<el-table-column align="center" label="岗位" prop="detailAddress" />
31-
<el-table-column align="center" label="权限级别" prop="creatorName" />
28+
<el-table-column align="center" label="姓名" prop="nickname" />
29+
<el-table-column align="center" label="部门" prop="deptName" />
30+
<el-table-column align="center" label="岗位" prop="postNames" />
31+
<el-table-column align="center" label="权限级别" prop="level" />
3232
<el-table-column :formatter="dateFormatter" align="center" label="加入时间" prop="createTime" />
3333
</el-table>
3434
<CrmPermissionForm ref="crmPermissionFormRef" />
@@ -39,6 +39,7 @@ import { ElTable } from 'element-plus'
3939
import * as PermissionApi from '@/api/crm/permission'
4040
import { useUserStoreWithOut } from '@/store/modules/user'
4141
import CrmPermissionForm from './CrmPermissionForm.vue'
42+
import { CrmPermissionLevelEnum } from './index'
4243
4344
defineOptions({ name: 'CrmTeam' })
4445
const props = defineProps<{
@@ -65,14 +66,14 @@ const handleSelectionChange = (val: PermissionApi.PermissionVO[]) => {
6566
multipleSelection.value = val
6667
}
6768
const message = useMessage()
68-
const crmPermissionFormRef = ref<InstanceType<typeof CrmPermissionForm | null>>(null)
69+
const crmPermissionFormRef = ref<InstanceType<typeof CrmPermissionForm>>()
6970
const handleEdit = () => {
7071
if (multipleSelection.value?.length === 0) {
7172
message.warning('请先选择团队成员后操作!')
7273
return
7374
}
7475
const ids = multipleSelection.value?.map((item) => item.id)
75-
crmPermissionFormRef.value?.open('update', props.bizType, props.bizId, ids[0])
76+
crmPermissionFormRef.value?.open('update', props.bizType, props.bizId, ids)
7677
}
7778
const handleRemove = async () => {
7879
if (multipleSelection.value?.length === 0) {
@@ -81,28 +82,27 @@ const handleRemove = async () => {
8182
}
8283
await message.delConfirm()
8384
const ids = multipleSelection.value?.map((item) => item.id)
84-
ids?.forEach((id) => {
85-
// TODO 还不确定要不要搞个批量删除,还是一次只能删除一个,先用循环弄一下
86-
PermissionApi.deletePermission({
87-
bizType: props.bizType,
88-
bizId: props.bizId,
89-
id
90-
})
85+
await PermissionApi.deletePermission({
86+
bizType: props.bizType,
87+
bizId: props.bizId,
88+
ids
9189
})
9290
}
9391
const handleAdd = () => {
9492
crmPermissionFormRef.value?.open('create', props.bizType, props.bizId)
9593
}
9694
9795
const userStore = useUserStoreWithOut()
98-
const handleQuit = () => {
96+
const handleQuit = async () => {
9997
const permission = list.value.find(
100-
(item) => item.userId === userStore.getUser.id && item.level === 1
98+
(item) => item.userId === userStore.getUser.id && item.level === CrmPermissionLevelEnum.OWNER
10199
)
102100
if (permission) {
103101
message.warning('负责人不能退出团队!')
104102
return
105103
}
104+
const userPermission = list.value.find((item) => item.userId === userStore.getUser.id)
105+
await PermissionApi.quitTeam(userPermission?.id)
106106
}
107107
108108
watch(
@@ -113,4 +113,3 @@ watch(
113113
{ immediate: true, deep: true }
114114
)
115115
</script>
116-
<style lang="scss" scoped></style>

src/views/crm/components/index.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,10 @@ enum CrmBizTypeEnum {
88
CRM_CONTRACT = 6 // 合同
99
}
1010

11-
export { CrmTeam, CrmBizTypeEnum }
11+
enum CrmPermissionLevelEnum {
12+
OWNER = 1, // 负责人
13+
READ = 2, // 读
14+
WRITE = 3 // 写
15+
}
16+
17+
export { CrmTeam, CrmBizTypeEnum, CrmPermissionLevelEnum }

0 commit comments

Comments
 (0)