memberList.vue 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. <template>
  2. <div class="layer" v-if="show" @click.self="closeMember">
  3. <div
  4. class="memberContent animated"
  5. :class="animateActive ? 'fadeInUpBig' : 'fadeOutDownBig'"
  6. >
  7. <div class="blurBox"></div>
  8. <div class="content">
  9. <div class="memberHeader">
  10. <span> 成员管理({{ data?.length }})</span>
  11. <i class="iconfont"></i>
  12. </div>
  13. <div class="memberList">
  14. <div class="memberItem">
  15. <div class="userMsg">
  16. <div class="avatar">
  17. <img :src="currentListUser?.Avatar || avatarSmall" alt="" />
  18. </div>
  19. <div class="name" v-if="currentListUser?.Role == 'leader'">
  20. {{ currentListUser?.Nickname }} (主持人,我)
  21. </div>
  22. <div class="name" v-else>
  23. {{ currentListUser?.Nickname }} (我)
  24. </div>
  25. </div>
  26. <!-- <div class="button" v-if="user_info.Role == 'leader'">
  27. <div
  28. @click="setAllMuted(!all_mute_mic)"
  29. class="micBtn mute_all_mic"
  30. :class="{ open_all_mic: all_mute_mic }"
  31. ></div>
  32. </div> -->
  33. </div>
  34. <div
  35. v-show="currentListUser?.UserId != i.UserId && i.Role != 'leader'"
  36. class="memberItem"
  37. v-for="(i, idx) in data"
  38. :key="idx"
  39. >
  40. <div class="userMsg">
  41. <div class="avatar">
  42. <img
  43. :src="
  44. i?.Avatar ||
  45. require('@/assets/images/rtcLive/avatar_small@2x.png')
  46. "
  47. alt=""
  48. />
  49. </div>
  50. <div class="name">{{ i.Nickname }}</div>
  51. </div>
  52. <div class="button" v-if="currentListUser?.Role == 'leader'">
  53. <div
  54. class="micBtn"
  55. :class="i.IsWords ? 'ban_speak_on' : 'ban_speak_off'"
  56. :wo="i.IsWords"
  57. @click="userCanSpeak(i)"
  58. ></div>
  59. <!-- <div
  60. class="micBtn"
  61. :class="i.IsMuted ? 'mute_one_mic_off' : 'mute_one_mic_on'"
  62. @click="onMemberMuted(i)"
  63. ></div> -->
  64. </div>
  65. </div>
  66. </div>
  67. </div>
  68. </div>
  69. </div>
  70. </template>
  71. <script lang="ts" setup>
  72. import { propTypes } from "/@/utils/propTypes";
  73. import { UserInfoType } from "/@/store/modules/rtc";
  74. import avatarSmall from "/@/assets/images/rtcLive/avatar_small@2x.png";
  75. import { watchEffect } from "vue";
  76. // const animateActive = ref(false);
  77. const props = defineProps({
  78. show: propTypes.bool.def(false),
  79. animateActive: propTypes.bool.def(false),
  80. data: {
  81. type: Array as PropType<UserInfoType[]>,
  82. default: () => [],
  83. },
  84. currentListUser: {
  85. type: Object as PropType<UserInfoType>,
  86. default: () => {},
  87. },
  88. });
  89. watchEffect(() => {
  90. console.log("memberList", props.data);
  91. });
  92. const emit = defineEmits(["openMember", "closeMember"]);
  93. function closeMember(): void {
  94. emit("closeMember");
  95. }
  96. function userCanSpeak() {}
  97. </script>
  98. <style lang="scss">
  99. @import "./chatroom.scss";
  100. </style>