CrmPermissionList.vue 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. <template>
  2. <!-- 操作栏 -->
  3. <el-row justify="end">
  4. <el-button type="primary" @click="openForm">
  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="handleDelete">
  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. <dict-tag :type="DICT_TYPE.CRM_PERMISSION_LEVEL" :value="row.level" />
  34. </template>
  35. </el-table-column>
  36. <el-table-column :formatter="dateFormatter" align="center" label="加入时间" prop="createTime" />
  37. </el-table>
  38. <CrmPermissionForm ref="permissionFormRef" @success="getList" />
  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. import { DICT_TYPE } from '@/utils/dict'
  48. defineOptions({ name: 'CrmPermissionList' })
  49. const message = useMessage() // 消息
  50. const props = defineProps<{
  51. bizType: number // 模块类型
  52. bizId: number // 模块数据编号
  53. }>()
  54. const loading = ref(true) // 列表的加载中
  55. const list = ref<PermissionApi.PermissionVO[]>([]) // 列表的数据
  56. /** 查询列表 */
  57. const getList = async () => {
  58. loading.value = true
  59. try {
  60. const data = await PermissionApi.getPermissionList({
  61. bizType: props.bizType,
  62. bizId: props.bizId
  63. })
  64. list.value = data
  65. } finally {
  66. loading.value = false
  67. }
  68. }
  69. const multipleSelection = ref<PermissionApi.PermissionVO[]>([]) // 选择的团队成员
  70. const handleSelectionChange = (val: PermissionApi.PermissionVO[]) => {
  71. multipleSelection.value = val
  72. }
  73. const permissionFormRef = ref<InstanceType<typeof CrmPermissionForm>>() // 权限表单 Ref
  74. /**
  75. * 编辑团队成员
  76. */
  77. const handleEdit = () => {
  78. if (multipleSelection.value?.length === 0) {
  79. message.warning('请先选择团队成员后操作!')
  80. return
  81. }
  82. const ids = multipleSelection.value?.map((item) => item.id)
  83. permissionFormRef.value?.open('update', props.bizType, props.bizId, ids)
  84. }
  85. /**
  86. * 移除团队成员
  87. */
  88. const handleDelete = async () => {
  89. if (multipleSelection.value?.length === 0) {
  90. message.warning('请先选择团队成员后操作!')
  91. return
  92. }
  93. await message.delConfirm()
  94. const ids = multipleSelection.value?.map((item) => item.id)
  95. await PermissionApi.deletePermission({
  96. bizType: props.bizType,
  97. bizId: props.bizId,
  98. ids
  99. })
  100. }
  101. /**
  102. * 添加团队成员
  103. */
  104. const openForm = () => {
  105. permissionFormRef.value?.open('create', props.bizType, props.bizId)
  106. }
  107. const userStore = useUserStoreWithOut() // 用户信息缓存
  108. /**
  109. * 退出团队
  110. */
  111. const handleQuit = async () => {
  112. const permission = list.value.find(
  113. (item) => item.userId === userStore.getUser.id && item.level === CrmPermissionLevelEnum.OWNER
  114. )
  115. if (permission) {
  116. message.warning('负责人不能退出团队!')
  117. return
  118. }
  119. const userPermission = list.value.find((item) => item.userId === userStore.getUser.id)
  120. await PermissionApi.quitTeam(userPermission?.id)
  121. }
  122. watch(
  123. () => props.bizId,
  124. () => {
  125. getList()
  126. },
  127. { immediate: true, deep: true }
  128. )
  129. </script>