group-all.vue 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. <template>
  2. <div class="w-full h-[100vh]">
  3. <ChatHeader title="全部群成员" />
  4. <ChatSearch v-model:searchString="showName" @search="search" />
  5. <ChatEmpty
  6. v-if="!groupMember?.length && !loading"
  7. image="search"
  8. :title="`没有找到&quot;${showName}&quot;相关成员`"
  9. />
  10. <div
  11. v-if="groupMember?.length && !showName"
  12. class="box-border w-full min-h-400 mt-16 mb-12 pt-12 pl-12"
  13. >
  14. <van-row>
  15. <van-col
  16. style="width: 54px"
  17. v-for="(item, index) in groupMember"
  18. :key="index"
  19. span="4"
  20. class="mb-12 mr-10"
  21. >
  22. <div class="w-40 h-40 rounded-full mx-auto overflow-hidden mb-4">
  23. <img class="w-full h-full object-cover" :src="item?.headImageUrl" alt="" />
  24. </div>
  25. <p class="w-full line-clamp-1 lin text-sm text-center text-black-6">
  26. {{ item?.showName }}
  27. </p>
  28. </van-col>
  29. <van-col span="4" class="mb-12 mr-10" @click="navigateTo('/chat/group-add')">
  30. <div
  31. class="w-40 h-40 rounded-full flex justify-center items-center bg-[#F3F3F3] border mx-auto overflow-hidden mb-4"
  32. >
  33. <van-icon name="plus" size="20" />
  34. </div>
  35. <p class="w-full line-clamp-1 lin text-sm text-center text-black-6">添加成员</p>
  36. </van-col>
  37. <van-col v-if="isRankAndFiler(setData?.groupRole)" span="4 mb-12 mr-10">
  38. <div
  39. @click="navigateTo(`/chat/group-member?group=${setData?.id}`)"
  40. class="w-40 h-40 rounded-full flex justify-center items-center bg-[#F3F3F3] border mx-auto overflow-hidden mb-4"
  41. >
  42. <van-icon name="minus" size="20" />
  43. </div>
  44. <p class="w-full line-clamp-1 lin text-sm text-center text-black-6">删除成员</p>
  45. </van-col>
  46. </van-row>
  47. </div>
  48. <!-- 搜索后的结果 -->
  49. <div v-if="searchMember?.length && showName" class="w-full border-box min-h-400 pl-16">
  50. <van-cell
  51. v-for="(item, index) in searchMember"
  52. :key="item?.id"
  53. center
  54. clickable
  55. size="large"
  56. class="border-b-[1px]"
  57. :title="item?.nickname"
  58. >
  59. <template #icon>
  60. <div class="w-40 h-40 rounded-full mr-12 overflow-hidden">
  61. <img class="w-full h-full object-cover" :src="item?.avatar" alt="" />
  62. </div>
  63. </template>
  64. </van-cell>
  65. </div>
  66. </div>
  67. </template>
  68. <script setup>
  69. const userInfoStore = useUserInfoStore()
  70. const { userInfo } = storeToRefs(userInfoStore)
  71. const route = useRoute()
  72. const queryParams = reactive({
  73. groupRole: computed(() => route.query?.groupRole ?? '')
  74. })
  75. const loading = ref(false)
  76. const showName = ref('')
  77. onMounted(() => {
  78. getList()
  79. })
  80. // 全部成员
  81. const groupMember = ref([])
  82. // 搜索的成员
  83. const searchMember = ref([])
  84. const setData = ref(null)
  85. // 搜索
  86. const search = () => {
  87. searchMember.value = groupMember.value.filter((el) => el.showName == showName.value)
  88. // getList()
  89. }
  90. // 获取群设置的配置信息
  91. const getList = async () => {
  92. try {
  93. loading.value = true
  94. let { data } = await request('/website/tourGroup/getGroupInfoAndMemberByGroupId', {
  95. query: {
  96. groupId: route.query.groupId
  97. }
  98. })
  99. if (Array.isArray(data?.memberList) && data.memberList?.length) {
  100. searchMember.value = data?.memberList
  101. groupMember.value = data?.memberList
  102. } else {
  103. searchMember.value = []
  104. groupMember.value = []
  105. }
  106. loading.value = false
  107. } catch (err) {
  108. } finally {
  109. loading.value = false
  110. }
  111. }
  112. // 是否是普通成员
  113. const isRankAndFiler = (role) => {
  114. return role == 1 || role == 2 ? true : false
  115. }
  116. definePageMeta({
  117. layout: false
  118. })
  119. useSeoMeta({
  120. title: '群成员'
  121. })
  122. </script>
  123. <style lang="scss" scoped></style>