CrmTeamList.vue 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. <template>
  2. <!-- 操作栏 -->
  3. <el-row justify="end">
  4. <el-button type="primary" @click="handleAdd">
  5. <Icon class="mr-5px" icon="ep:plus" />
  6. 新增
  7. </el-button>
  8. <el-button @click="handleEdit">
  9. <Icon class="mr-5px" icon="ep:edit" />
  10. 编辑
  11. </el-button>
  12. <el-button @click="handleRemove">
  13. <Icon class="mr-5px" icon="ep:delete" />
  14. 移除
  15. </el-button>
  16. <el-button type="danger" @click="handleQuit"> 退出团队</el-button>
  17. </el-row>
  18. <!-- 团队成员展示 -->
  19. <el-table
  20. v-loading="loading"
  21. :data="list"
  22. :show-overflow-tooltip="true"
  23. :stripe="true"
  24. class="mt-20px"
  25. @selection-change="handleSelectionChange"
  26. >
  27. <el-table-column type="selection" width="55" />
  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">
  32. <template #default="{ row }">
  33. <el-tag>{{ getLevelName(row.level) }}</el-tag>
  34. </template>
  35. </el-table-column>
  36. <el-table-column :formatter="dateFormatter" align="center" label="加入时间" prop="createTime" />
  37. </el-table>
  38. <CrmPermissionForm ref="crmPermissionFormRef" />
  39. </template>
  40. <script lang="ts" setup>
  41. import { dateFormatter } from '@/utils/formatTime'
  42. import { ElTable } from 'element-plus'
  43. import * as PermissionApi from '@/api/crm/permission'
  44. import { useUserStoreWithOut } from '@/store/modules/user'
  45. import CrmPermissionForm from './CrmPermissionForm.vue'
  46. import { CrmPermissionLevelEnum } from './index'
  47. defineOptions({ name: 'CrmTeam' })
  48. const props = defineProps<{
  49. bizType: number
  50. bizId: number
  51. }>()
  52. const loading = ref(true) // 列表的加载中
  53. const list = ref<PermissionApi.PermissionVO[]>([
  54. // TODO 测试数据
  55. {
  56. id: 1, // 数据权限编号
  57. userId: 1, // 用户编号
  58. bizType: 1, // Crm 类型
  59. bizId: 1, // Crm 类型数据编号
  60. level: 1, // 权限级别
  61. deptName: '研发部门', // 部门名称
  62. nickname: '芋道源码', // 用户昵称
  63. postNames: '全栈开发工程师', // 岗位名称数组
  64. createTime: new Date()
  65. }
  66. ]) // 列表的数据
  67. const getList = async () => {
  68. loading.value = true
  69. try {
  70. const res = await PermissionApi.getPermissionList({
  71. bizType: props.bizType,
  72. bizId: props.bizId
  73. })
  74. list.value = res
  75. } finally {
  76. loading.value = false
  77. }
  78. }
  79. /**
  80. * 获得权限级别名称
  81. * @param level 权限级别
  82. */
  83. const getLevelName = computed(() => (level: number) => {
  84. switch (level) {
  85. case CrmPermissionLevelEnum.OWNER:
  86. return '负责人'
  87. case CrmPermissionLevelEnum.READ:
  88. return '只读'
  89. case CrmPermissionLevelEnum.WRITE:
  90. return '读写'
  91. default:
  92. break
  93. }
  94. })
  95. const multipleSelection = ref<PermissionApi.PermissionVO[]>([])
  96. const handleSelectionChange = (val: PermissionApi.PermissionVO[]) => {
  97. multipleSelection.value = val
  98. }
  99. const message = useMessage()
  100. const crmPermissionFormRef = ref<InstanceType<typeof CrmPermissionForm>>()
  101. const handleEdit = () => {
  102. if (multipleSelection.value?.length === 0) {
  103. message.warning('请先选择团队成员后操作!')
  104. return
  105. }
  106. const ids = multipleSelection.value?.map((item) => item.id)
  107. crmPermissionFormRef.value?.open('update', props.bizType, props.bizId, ids)
  108. }
  109. const handleRemove = async () => {
  110. if (multipleSelection.value?.length === 0) {
  111. message.warning('请先选择团队成员后操作!')
  112. return
  113. }
  114. await message.delConfirm()
  115. const ids = multipleSelection.value?.map((item) => item.id)
  116. await PermissionApi.deletePermission({
  117. bizType: props.bizType,
  118. bizId: props.bizId,
  119. ids
  120. })
  121. }
  122. const handleAdd = () => {
  123. crmPermissionFormRef.value?.open('create', props.bizType, props.bizId)
  124. }
  125. const userStore = useUserStoreWithOut()
  126. const handleQuit = async () => {
  127. const permission = list.value.find(
  128. (item) => item.userId === userStore.getUser.id && item.level === CrmPermissionLevelEnum.OWNER
  129. )
  130. if (permission) {
  131. message.warning('负责人不能退出团队!')
  132. return
  133. }
  134. const userPermission = list.value.find((item) => item.userId === userStore.getUser.id)
  135. await PermissionApi.quitTeam(userPermission?.id)
  136. }
  137. watch(
  138. () => props.bizId,
  139. () => {
  140. getList()
  141. },
  142. { immediate: true, deep: true }
  143. )
  144. </script>