|
@@ -11,36 +11,9 @@
|
|
|
<i class="iconfont"></i>
|
|
|
</div>
|
|
|
<div class="memberList">
|
|
|
- <div class="memberItem">
|
|
|
- <!-- <div class="userMsg">
|
|
|
- <div class="avatar">
|
|
|
- <img :src="currentListUser?.Avatar || avatarSmall" alt="" />
|
|
|
- </div>
|
|
|
- <div class="name" v-if="currentListUser?.Role == 'leader'">
|
|
|
- {{ currentListUser?.Nickname }} (主持人,我)
|
|
|
- </div>
|
|
|
- <div class="name" v-else>
|
|
|
- {{ currentListUser?.Nickname }} (我)
|
|
|
- </div>
|
|
|
- </div> -->
|
|
|
-
|
|
|
- <!-- <div class="button" v-if="user_info.Role == 'leader'">
|
|
|
- <div
|
|
|
- @click="setAllMuted(!all_mute_mic)"
|
|
|
- class="micBtn mute_all_mic"
|
|
|
- :class="{ open_all_mic: all_mute_mic }"
|
|
|
- ></div>
|
|
|
- </div> -->
|
|
|
- </div>
|
|
|
-
|
|
|
- <div
|
|
|
- v-show="currentListUser?.UserId != i.UserId && i.Role != 'leader'"
|
|
|
- class="memberItem"
|
|
|
- v-for="(i, idx) in data"
|
|
|
- :key="idx"
|
|
|
- >
|
|
|
+ <div class="memberItem" v-for="(i, idx) in data" :key="idx">
|
|
|
<div class="userMsg">
|
|
|
- <div class="avatar">
|
|
|
+ <div class="avatar" :class="`${role}`">
|
|
|
<img
|
|
|
:src="
|
|
|
i?.Avatar ||
|
|
@@ -48,19 +21,25 @@
|
|
|
"
|
|
|
alt=""
|
|
|
/>
|
|
|
+ <div class="avatar-crown" v-show="i.Role === 'leader'"></div>
|
|
|
</div>
|
|
|
<div class="name">{{ i.Nickname }}</div>
|
|
|
</div>
|
|
|
- <div class="button" v-if="currentListUser?.Role == 'leader'">
|
|
|
+ <div class="button">
|
|
|
+ {{ i?.Role }}
|
|
|
<div
|
|
|
class="micBtn"
|
|
|
+ v-if="i?.Role !== 'leader'"
|
|
|
:class="i.IsWords ? 'ban_speak_on' : 'ban_speak_off'"
|
|
|
:wo="i.IsWords"
|
|
|
- @click="userCanSpeak(i)"
|
|
|
+ @click="isNativeLeader && userCanSpeak(i)"
|
|
|
></div>
|
|
|
+ <!-- mic -->
|
|
|
<div
|
|
|
- class="micBtn mute_one_mic_on"
|
|
|
- ></div>
|
|
|
+ class="micBtn mute_one_mic_on"
|
|
|
+ v-if="i?.Role == 'leader'"
|
|
|
+ ></div>
|
|
|
+ <!-- mic -->
|
|
|
<!-- <div
|
|
|
class="micBtn"
|
|
|
:class="i.IsMuted ? 'mute_one_mic_off' : 'mute_one_mic_on'"
|
|
@@ -76,10 +55,14 @@
|
|
|
|
|
|
<script lang="ts" setup>
|
|
|
import { propTypes } from "/@/utils/propTypes";
|
|
|
-import { UserInfoType } from "/@/store/modules/rtc";
|
|
|
-import avatarSmall from "/@/assets/images/rtcLive/avatar_small@2x.png";
|
|
|
-import { watchEffect } from "vue";
|
|
|
+import { UserInfoType, useRtcStore } from "/@/store/modules/rtc";
|
|
|
+// import avatarSmall from "/@/assets/images/rtcLive/avatar_small@2x.png";
|
|
|
+import { computed, watchEffect } from "vue";
|
|
|
+import { useSocket } from "/@/hooks/userSocket";
|
|
|
+const rtcStore = useRtcStore();
|
|
|
|
|
|
+const role = computed(() => rtcStore.role);
|
|
|
+const isNativeLeader = computed(() => rtcStore.isLeader);
|
|
|
// const animateActive = ref(false);
|
|
|
const props = defineProps({
|
|
|
show: propTypes.bool.def(false),
|
|
@@ -102,8 +85,14 @@ const emit = defineEmits(["openMember", "closeMember"]);
|
|
|
function closeMember(): void {
|
|
|
emit("closeMember");
|
|
|
}
|
|
|
-function userCanSpeak(member) {
|
|
|
-
|
|
|
+function userCanSpeak(member: UserInfoType) {
|
|
|
+ const socket = useSocket();
|
|
|
+ member.IsWords = !member.IsWords;
|
|
|
+ socket.emit("action", {
|
|
|
+ type: "users-words",
|
|
|
+ words: member.IsWords,
|
|
|
+ userId: member.UserId,
|
|
|
+ });
|
|
|
}
|
|
|
</script>
|
|
|
|