2022-05-05 19:48:27 +08:00
|
|
|
|
<template>
|
2022-05-30 17:33:59 +08:00
|
|
|
|
<div id="app-container" ref="appContainerRef">
|
|
|
|
|
<!-- zoom 会议组件 -->
|
|
|
|
|
<div id="meeting-chat-row">
|
2022-06-06 17:32:42 +08:00
|
|
|
|
<div class="fullscreen-wrap" ref="fullscreenWrapRef">
|
2022-05-30 17:33:59 +08:00
|
|
|
|
<div
|
2022-06-06 17:32:42 +08:00
|
|
|
|
id="meeting-container"
|
|
|
|
|
ref="meetingContainerRef"
|
|
|
|
|
:class="{
|
|
|
|
|
fullscreen: isFullScreen && !isVerticalFullScreen,
|
|
|
|
|
verticalFullScreen: isVerticalFullScreen,
|
|
|
|
|
}"
|
|
|
|
|
>
|
|
|
|
|
<div
|
|
|
|
|
id="video-element"
|
|
|
|
|
:class="`layout-template-${templateId}`"
|
|
|
|
|
ref="videoElementRef"
|
|
|
|
|
></div>
|
|
|
|
|
<el-button
|
|
|
|
|
v-if="!isFullScreen"
|
|
|
|
|
:icon="FullScreen"
|
|
|
|
|
circle
|
|
|
|
|
@click="setFullScreen"
|
|
|
|
|
></el-button>
|
|
|
|
|
<el-button
|
|
|
|
|
v-else
|
|
|
|
|
:icon="CloseBold"
|
|
|
|
|
circle
|
|
|
|
|
@click="quitFullScreen"
|
|
|
|
|
></el-button>
|
|
|
|
|
</div>
|
2022-05-18 17:25:43 +08:00
|
|
|
|
</div>
|
2022-05-30 17:33:59 +08:00
|
|
|
|
<div id="right-chat">
|
|
|
|
|
<Chat
|
|
|
|
|
:is-rich="route.name === 'Host'"
|
|
|
|
|
place="right"
|
|
|
|
|
:account="joinName"
|
|
|
|
|
:message-list="messages"
|
|
|
|
|
@send="sendMessage"
|
|
|
|
|
/>
|
2022-05-18 17:25:43 +08:00
|
|
|
|
</div>
|
2022-05-05 19:48:27 +08:00
|
|
|
|
</div>
|
|
|
|
|
<el-tabs class="tabs" type="border-card">
|
|
|
|
|
<el-tab-pane label="会议介绍">
|
|
|
|
|
<div class="meeting-info meeting-note" v-html="meetingNote"></div>
|
|
|
|
|
</el-tab-pane>
|
|
|
|
|
<el-tab-pane label="会议日程"
|
|
|
|
|
><div
|
|
|
|
|
class="meeting-info meeting-schedule"
|
|
|
|
|
v-html="meetingSchedule"
|
|
|
|
|
></div
|
|
|
|
|
></el-tab-pane>
|
|
|
|
|
<el-tab-pane label="专家介绍"
|
|
|
|
|
><div class="meeting-info expert-info" v-html="expertInfo"></div
|
|
|
|
|
></el-tab-pane>
|
2022-05-31 17:46:07 +08:00
|
|
|
|
<el-tab-pane label="聊天" class="chat-pane" v-if="screenWidth < 900">
|
2022-05-30 17:33:59 +08:00
|
|
|
|
<Chat
|
|
|
|
|
:is-rich="route.name === 'Host'"
|
|
|
|
|
place="bottom"
|
|
|
|
|
:account="joinName"
|
|
|
|
|
:message-list="messages"
|
|
|
|
|
@send="sendMessage"
|
|
|
|
|
/>
|
|
|
|
|
</el-tab-pane>
|
2022-05-05 19:48:27 +08:00
|
|
|
|
</el-tabs>
|
|
|
|
|
|
|
|
|
|
<el-dialog
|
|
|
|
|
v-model="showSignDialog"
|
|
|
|
|
:close-on-click-modal="false"
|
|
|
|
|
title="签到"
|
|
|
|
|
width="30%"
|
|
|
|
|
>
|
|
|
|
|
<span>是否确认签到</span>
|
|
|
|
|
<template #footer>
|
|
|
|
|
<span class="dialog-footer">
|
|
|
|
|
<el-button type="primary" @click="submitSign">确定</el-button>
|
|
|
|
|
<el-button type="primary" @click="showSignDialog = false"
|
|
|
|
|
>取消</el-button
|
|
|
|
|
>
|
|
|
|
|
</span>
|
|
|
|
|
</template>
|
|
|
|
|
</el-dialog>
|
2022-06-06 17:32:42 +08:00
|
|
|
|
|
|
|
|
|
<el-dialog
|
|
|
|
|
custom-class="check-media"
|
2022-06-07 00:49:44 +08:00
|
|
|
|
destroy-on-close
|
2022-06-06 17:32:42 +08:00
|
|
|
|
v-model="showCheckMediaVideo"
|
|
|
|
|
:close-on-click-modal="false"
|
|
|
|
|
title="摄像头和麦克风"
|
|
|
|
|
:fullscreen="screenWidth < 900"
|
|
|
|
|
width="60%"
|
|
|
|
|
>
|
|
|
|
|
<el-alert
|
|
|
|
|
v-if="isVideoAvailable === undefined || isAudioAvailable === undefined"
|
|
|
|
|
>检测中。</el-alert
|
|
|
|
|
>
|
|
|
|
|
<el-alert
|
|
|
|
|
v-else-if="isVideoAvailable === true && isAudioAvailable === true"
|
|
|
|
|
type="success"
|
|
|
|
|
>摄像头工作正常,麦克风工作正常。</el-alert
|
|
|
|
|
>
|
|
|
|
|
<el-alert
|
|
|
|
|
v-else-if="isVideoAvailable === true && isAudioAvailable === false"
|
|
|
|
|
type="warning"
|
|
|
|
|
>摄像头工作正常,麦克风无法正常工作。</el-alert
|
|
|
|
|
>
|
|
|
|
|
<el-alert
|
|
|
|
|
v-else-if="isVideoAvailable === false && isAudioAvailable === true"
|
|
|
|
|
type="warning"
|
|
|
|
|
>摄像头无法正常工作,麦克风工作正常。</el-alert
|
|
|
|
|
>
|
|
|
|
|
<el-alert v-else type="error"
|
|
|
|
|
>摄像头无法正常工作,麦克风无法正常工作。</el-alert
|
|
|
|
|
>
|
|
|
|
|
<!-- <div id="row"> -->
|
|
|
|
|
<div id="check-media-wrap" ref="checkMediaWrapRef">
|
|
|
|
|
<video id="check-media-video" ref="checkMediaVideoRef"></video>
|
|
|
|
|
<!-- <el-icon class="microphone-icon" :size="50"> -->
|
|
|
|
|
<Microphone
|
|
|
|
|
v-if="isAudioAvailable === undefined"
|
|
|
|
|
class="microphone-loading"
|
|
|
|
|
/>
|
|
|
|
|
<Microphone
|
|
|
|
|
v-else-if="isAudioAvailable === true"
|
|
|
|
|
class="microphone-on"
|
|
|
|
|
/>
|
|
|
|
|
<Mute v-else class="microphone-off" />
|
|
|
|
|
<!-- </el-icon> -->
|
|
|
|
|
</div>
|
|
|
|
|
<!-- </div> -->
|
|
|
|
|
<template #footer>
|
|
|
|
|
<span class="dialog-footer">
|
|
|
|
|
<el-button type="primary" @click="showCheckMediaVideo = false"
|
|
|
|
|
>关闭</el-button
|
|
|
|
|
>
|
|
|
|
|
</span>
|
|
|
|
|
</template>
|
|
|
|
|
</el-dialog>
|
|
|
|
|
|
2022-05-05 19:48:27 +08:00
|
|
|
|
<questions
|
|
|
|
|
mode="1"
|
2022-05-30 17:33:59 +08:00
|
|
|
|
@stage="getStageExamAnswer"
|
|
|
|
|
v-if="showExamDialog && route.name !== 'Host'"
|
2022-05-05 19:48:27 +08:00
|
|
|
|
:showDialog="showExamDialog"
|
|
|
|
|
@close="showExamDialog = $event"
|
|
|
|
|
></questions>
|
|
|
|
|
|
|
|
|
|
<questions
|
|
|
|
|
mode="2"
|
2022-05-30 17:33:59 +08:00
|
|
|
|
@state="getStageQuestionnaireAnswer"
|
|
|
|
|
v-if="showQuestionnaireDialog && route.name !== 'Host'"
|
2022-05-05 19:48:27 +08:00
|
|
|
|
:showDialog="showQuestionnaireDialog"
|
|
|
|
|
@close="showQuestionnaireDialog = $event"
|
|
|
|
|
></questions>
|
2022-06-06 17:32:42 +08:00
|
|
|
|
<el-dialog v-model="showHorizontalScreen" fullscreen :show-close="false">
|
|
|
|
|
<el-result icon="warning" title="无法全屏" sub-title="请先将手机横过来">
|
|
|
|
|
<template #icon>
|
|
|
|
|
<svg class="icon" aria-hidden="true">
|
|
|
|
|
<use xlink:href="#icon-hengping"></use>
|
|
|
|
|
</svg>
|
|
|
|
|
</template>
|
|
|
|
|
</el-result>
|
|
|
|
|
</el-dialog>
|
2022-05-05 19:48:27 +08:00
|
|
|
|
</div>
|
|
|
|
|
</template>
|
2022-05-30 17:33:59 +08:00
|
|
|
|
|
2022-05-05 19:48:27 +08:00
|
|
|
|
<script setup>
|
2022-06-01 17:34:55 +08:00
|
|
|
|
import {
|
|
|
|
|
computed,
|
|
|
|
|
nextTick,
|
|
|
|
|
onMounted,
|
|
|
|
|
onUnmounted,
|
|
|
|
|
reactive,
|
|
|
|
|
ref,
|
|
|
|
|
watch,
|
|
|
|
|
} from "vue";
|
2022-05-05 19:48:27 +08:00
|
|
|
|
import { useStore } from "vuex";
|
2022-05-30 17:33:59 +08:00
|
|
|
|
import { useRoute } from "vue-router";
|
2022-05-29 13:30:19 +08:00
|
|
|
|
|
2022-05-05 19:48:27 +08:00
|
|
|
|
import dayjs from "dayjs";
|
2022-05-30 17:33:59 +08:00
|
|
|
|
import { uniqueId } from "lodash";
|
2022-05-05 19:48:27 +08:00
|
|
|
|
import ZoomMtgEmbedded from "@zoomus/websdk/embedded";
|
2022-05-18 17:25:43 +08:00
|
|
|
|
import ReconnectingWebSocket from "reconnecting-websocket";
|
2022-05-31 17:46:07 +08:00
|
|
|
|
import { ElMessage, ElMessageBox } from "element-plus";
|
2022-06-06 17:32:42 +08:00
|
|
|
|
import {
|
|
|
|
|
FullScreen,
|
|
|
|
|
CloseBold,
|
|
|
|
|
Microphone,
|
|
|
|
|
Mute,
|
|
|
|
|
} from "@element-plus/icons-vue";
|
2022-05-30 17:33:59 +08:00
|
|
|
|
import { signMeeting, generateSignature } from "@/api/meeting";
|
|
|
|
|
import Chat from "@/components/chat";
|
|
|
|
|
import questions from "@/components/questions";
|
|
|
|
|
import {
|
|
|
|
|
getQuestionsList,
|
|
|
|
|
commitQuestionnaire,
|
|
|
|
|
commitExam,
|
|
|
|
|
} from "@/api/meeting";
|
|
|
|
|
|
2022-05-05 19:48:27 +08:00
|
|
|
|
const store = useStore();
|
2022-05-30 17:33:59 +08:00
|
|
|
|
const route = useRoute();
|
2022-05-25 17:31:14 +08:00
|
|
|
|
|
2022-05-18 17:25:43 +08:00
|
|
|
|
const meetingNote = computed(() => store.getters.meetingNote); // 会议介绍
|
|
|
|
|
const meetingSchedule = computed(() => store.getters.meetingSchedule); // 会议日程
|
|
|
|
|
const expertInfo = computed(() => store.getters.expertInfo); // 专家信息
|
2022-06-07 17:36:04 +08:00
|
|
|
|
const screenWidth = ref(0);
|
|
|
|
|
screenWidth.value = window.screen.width;
|
2022-05-30 17:33:59 +08:00
|
|
|
|
const joinName = ref(""); // 显示昵称
|
|
|
|
|
const joinAccount = ref(""); // 用于连接 websocket,提交考试
|
2022-05-25 17:31:14 +08:00
|
|
|
|
joinAccount.value =
|
|
|
|
|
store.getters.icCard || store.getters.phone || store.getters.nickname;
|
|
|
|
|
joinName.value =
|
|
|
|
|
store.getters.nickname || store.getters.phone || store.getters.icCard;
|
|
|
|
|
|
2022-05-30 17:33:59 +08:00
|
|
|
|
const meetingContainerRef = ref(null); // 会议组件容器,包含背景和会议组件
|
|
|
|
|
const videoElementRef = ref(null); // zoom会议组件
|
|
|
|
|
const meetingWidth = ref(0); // 视频和共享屏幕宽度
|
|
|
|
|
const meetingHeight = ref(0); // 视频和共享屏幕高度
|
|
|
|
|
const isMeetingLoading = ref(false);
|
2022-06-01 17:34:55 +08:00
|
|
|
|
const templateId = ref(0);
|
|
|
|
|
templateId.value = store.getters.templateId;
|
2022-05-30 17:33:59 +08:00
|
|
|
|
/* 会议配置 */
|
2022-05-05 19:48:27 +08:00
|
|
|
|
const meetingConfig = reactive({
|
|
|
|
|
client: ZoomMtgEmbedded.createClient(),
|
2022-05-25 17:31:14 +08:00
|
|
|
|
sdkKey: "99Spa64AWHYVZD95imUpVyMD0KF9CpEIrIb1",
|
2022-05-26 17:33:16 +08:00
|
|
|
|
meetingNumber: store.getters.meetingNumber,
|
|
|
|
|
passWord: store.state.password,
|
2022-05-30 17:33:59 +08:00
|
|
|
|
role: route.name === "Host" ? 1 : 0,
|
2022-05-26 17:33:16 +08:00
|
|
|
|
userEmail: store.getters.email,
|
|
|
|
|
userName: joinName.value,
|
2022-05-30 17:33:59 +08:00
|
|
|
|
registrantToken: route.name === "Host" ? "" : store.getters.token,
|
2022-05-05 19:48:27 +08:00
|
|
|
|
});
|
2022-05-18 17:25:43 +08:00
|
|
|
|
|
2022-05-30 17:33:59 +08:00
|
|
|
|
// 开始会议
|
2022-06-01 17:34:55 +08:00
|
|
|
|
const isJoinFirstTime = ref(true);
|
2022-05-30 17:33:59 +08:00
|
|
|
|
const startMeeting = async () => {
|
2022-05-06 23:11:47 +08:00
|
|
|
|
const { sign } = await generateSignature({
|
|
|
|
|
meetingNumber: store.getters.meetingNumber,
|
2022-05-18 17:25:43 +08:00
|
|
|
|
role: meetingConfig.role,
|
2022-05-06 23:11:47 +08:00
|
|
|
|
});
|
2022-05-05 19:48:27 +08:00
|
|
|
|
let meetingSDKElement = document.getElementById("video-element");
|
2022-05-31 17:46:07 +08:00
|
|
|
|
|
2022-05-18 17:25:43 +08:00
|
|
|
|
try {
|
2022-05-31 17:46:07 +08:00
|
|
|
|
await meetingConfig.client.init({
|
|
|
|
|
// debug: true,
|
2022-05-18 17:25:43 +08:00
|
|
|
|
zoomAppRoot: meetingSDKElement,
|
|
|
|
|
language: "zh-CN",
|
|
|
|
|
customize: {
|
|
|
|
|
video: {
|
2022-06-01 17:34:55 +08:00
|
|
|
|
isResizable: false,
|
2022-05-18 17:25:43 +08:00
|
|
|
|
popper: {
|
|
|
|
|
disableDraggable: true,
|
|
|
|
|
},
|
|
|
|
|
viewSizes: {
|
|
|
|
|
default: {
|
|
|
|
|
width: meetingWidth.value,
|
2022-05-30 17:33:59 +08:00
|
|
|
|
height: meetingHeight.value, // 不包括顶部toolbar和底部按钮高度
|
2022-05-18 17:25:43 +08:00
|
|
|
|
},
|
2022-05-05 19:48:27 +08:00
|
|
|
|
},
|
|
|
|
|
},
|
2022-06-01 17:34:55 +08:00
|
|
|
|
// meetingInfo: [
|
|
|
|
|
// "topic",
|
|
|
|
|
// "host",
|
|
|
|
|
// "mn",
|
|
|
|
|
// "pwd",
|
|
|
|
|
// "telPwd",
|
|
|
|
|
// "invite",
|
|
|
|
|
// "participant",
|
|
|
|
|
// "dc",
|
|
|
|
|
// "enctype",
|
|
|
|
|
// ],
|
2022-05-05 19:48:27 +08:00
|
|
|
|
},
|
2022-05-18 17:25:43 +08:00
|
|
|
|
});
|
2022-05-31 17:46:07 +08:00
|
|
|
|
|
|
|
|
|
console.log(meetingWidth.value, meetingHeight.value);
|
2022-05-18 17:25:43 +08:00
|
|
|
|
await meetingConfig.client.join({
|
|
|
|
|
sdkKey: meetingConfig.sdkKey,
|
2022-05-30 17:33:59 +08:00
|
|
|
|
signature: sign,
|
2022-05-18 17:25:43 +08:00
|
|
|
|
meetingNumber: meetingConfig.meetingNumber,
|
|
|
|
|
password: meetingConfig.passWord,
|
|
|
|
|
userName: meetingConfig.userName,
|
|
|
|
|
userEmail: meetingConfig.userEmail,
|
|
|
|
|
tk: meetingConfig.registrantToken,
|
|
|
|
|
});
|
2022-06-01 17:34:55 +08:00
|
|
|
|
isJoinFirstTime.value = false;
|
2022-05-30 17:33:59 +08:00
|
|
|
|
console.log(meetingConfig.client.getAttendeeslist());
|
2022-05-29 13:30:19 +08:00
|
|
|
|
document.querySelector("#suspension-view-tab-thumbnail-gallery").click();
|
2022-05-30 17:33:59 +08:00
|
|
|
|
|
2022-06-06 17:32:42 +08:00
|
|
|
|
// 自动点击允许共享屏幕 //TODO:自动点击按钮
|
2022-05-30 17:33:59 +08:00
|
|
|
|
if (route.name === "Host") {
|
|
|
|
|
const safeButton = document.querySelector('button[title="安全"]');
|
|
|
|
|
if (safeButton) {
|
|
|
|
|
safeButton.click();
|
|
|
|
|
const allowScreenShare = document.querySelectorAll(
|
|
|
|
|
".zmwebsdk-MuiButtonBase-root.zmwebsdk-MuiListItem-root.zmwebsdk-MuiMenuItem-root.zmwebsdk-MuiMenuItem-gutters.zmwebsdk-MuiListItem-gutters.zmwebsdk-MuiListItem-button"
|
|
|
|
|
)[1];
|
|
|
|
|
if (allowScreenShare.childElementCount === 0) {
|
|
|
|
|
allowScreenShare.click();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2022-05-18 17:25:43 +08:00
|
|
|
|
isMeetingLoading.value = false;
|
|
|
|
|
} catch (error) {
|
|
|
|
|
isMeetingLoading.value = false;
|
|
|
|
|
}
|
2022-05-05 19:48:27 +08:00
|
|
|
|
};
|
2022-06-06 17:32:42 +08:00
|
|
|
|
|
|
|
|
|
const setSize = () => {
|
|
|
|
|
meetingWidth.value = meetingContainerRef.value.offsetWidth * 0.9;
|
|
|
|
|
meetingHeight.value = (meetingWidth.value * 9) / 16;
|
|
|
|
|
|
2022-06-07 00:49:44 +08:00
|
|
|
|
// videoElementRef.value.style.width = `${meetingWidth.value}px`;
|
2022-06-06 17:32:42 +08:00
|
|
|
|
videoElementRef.value.style.height = `${meetingHeight.value + 42}px`;
|
|
|
|
|
|
|
|
|
|
document.querySelector(
|
|
|
|
|
"#video-element> div> .zmwebsdk-MuiPaper-root> .zmwebsdk-MuiPaper-root:nth-child(1)"
|
|
|
|
|
).style.width = `${meetingWidth.value}px`;
|
|
|
|
|
|
|
|
|
|
document
|
|
|
|
|
.querySelectorAll(
|
|
|
|
|
'div[id*="suspension-view-tabpanel"] > .zmwebsdk-MuiBox-root.zmwebsdk-MuiBox-root'
|
|
|
|
|
)
|
|
|
|
|
.forEach((el) => {
|
|
|
|
|
el.style.height = `${meetingHeight.value}px`;
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
|
2022-05-31 17:46:07 +08:00
|
|
|
|
window.client = meetingConfig.client;
|
|
|
|
|
window.startMeeting = startMeeting;
|
2022-06-01 17:34:55 +08:00
|
|
|
|
|
2022-06-06 17:32:42 +08:00
|
|
|
|
const checkMediaVideoRef = ref(null);
|
|
|
|
|
const checkMediaWrapRef = ref(null);
|
|
|
|
|
const showCheckMediaVideo = ref(true);
|
|
|
|
|
const isVideoAvailable = ref(undefined);
|
|
|
|
|
const isAudioAvailable = ref(undefined);
|
2022-06-07 17:36:04 +08:00
|
|
|
|
// TODO:可能有摄像头占用问题。
|
2022-06-06 17:32:42 +08:00
|
|
|
|
onMounted(() => {
|
|
|
|
|
nextTick(() => {
|
|
|
|
|
const videoWidth = checkMediaWrapRef.value.offsetWidth;
|
|
|
|
|
const videoHeight = checkMediaWrapRef.value.offsetHeight;
|
|
|
|
|
console.log(checkMediaVideoRef.value);
|
|
|
|
|
navigator.mediaDevices
|
|
|
|
|
.getUserMedia({ video: { width: videoWidth, height: videoHeight } })
|
|
|
|
|
.then((stream) => {
|
|
|
|
|
checkMediaVideoRef.value.srcObject = stream;
|
|
|
|
|
checkMediaVideoRef.value.play();
|
|
|
|
|
isVideoAvailable.value = true;
|
|
|
|
|
})
|
|
|
|
|
.catch((err) => {
|
|
|
|
|
console.log(err);
|
|
|
|
|
isVideoAvailable.value = false;
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
navigator.mediaDevices
|
|
|
|
|
.getUserMedia({ audio: true })
|
|
|
|
|
.then((stream) => {
|
|
|
|
|
console.log(stream);
|
|
|
|
|
isAudioAvailable.value = true;
|
|
|
|
|
})
|
|
|
|
|
.catch((err) => {
|
|
|
|
|
console.log(err);
|
|
|
|
|
isAudioAvailable.value = false;
|
|
|
|
|
});
|
|
|
|
|
});
|
2022-05-30 17:33:59 +08:00
|
|
|
|
|
|
|
|
|
// 设置文本标签
|
|
|
|
|
const setTextLabel = () => {
|
|
|
|
|
document.querySelectorAll(".text-tag").forEach((el) => {
|
|
|
|
|
el.remove();
|
|
|
|
|
});
|
|
|
|
|
store.getters.textLabelList.forEach((item) => {
|
|
|
|
|
const labelObj = JSON.parse(item.textLabel);
|
|
|
|
|
const textEl = document.createElement("div");
|
|
|
|
|
textEl.id = `${uniqueId("tag-")}`;
|
|
|
|
|
textEl.innerHTML = labelObj.content;
|
|
|
|
|
textEl.className = "text-tag";
|
|
|
|
|
textEl.style.backgroundColor = labelObj.backgroundColor;
|
|
|
|
|
textEl.style.visibility =
|
|
|
|
|
labelObj.visibility === "1" ? "visible" : "hidden";
|
|
|
|
|
textEl.style.left = `${labelObj.x}`;
|
|
|
|
|
textEl.style.top = `${labelObj.y}`;
|
|
|
|
|
meetingContainerRef.value.appendChild(textEl);
|
|
|
|
|
});
|
2022-05-05 19:48:27 +08:00
|
|
|
|
};
|
2022-05-30 17:33:59 +08:00
|
|
|
|
|
|
|
|
|
const switchToVideoOn = () => {
|
|
|
|
|
const prevBtn = document.querySelector(
|
|
|
|
|
"#suspension-view-tabpanel-ribbon>div>div:last-child>.zmwebsdk-MuiBox-root>button:first-child"
|
2022-05-29 13:30:19 +08:00
|
|
|
|
);
|
2022-05-30 17:33:59 +08:00
|
|
|
|
const nextBtn = document.querySelector(
|
|
|
|
|
"#suspension-view-tabpanel-ribbon>div>div:last-child>.zmwebsdk-MuiBox-root>button:last-child"
|
|
|
|
|
);
|
2022-06-02 00:24:31 +08:00
|
|
|
|
if (!prevBtn || !nextBtn) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
2022-05-30 17:33:59 +08:00
|
|
|
|
let isNextBtnHidden = nextBtn.className.includes(
|
|
|
|
|
"zmwebsdk-makeStyles-hidePaginationIcon"
|
|
|
|
|
);
|
|
|
|
|
let isPrevBtnHidden = prevBtn.className.includes(
|
|
|
|
|
"zmwebsdk-makeStyles-hidePaginationIcon"
|
|
|
|
|
);
|
|
|
|
|
while (!isPrevBtnHidden) {
|
|
|
|
|
prevBtn.click();
|
|
|
|
|
isPrevBtnHidden = prevBtn.className.includes(
|
|
|
|
|
"zmwebsdk-makeStyles-hidePaginationIcon"
|
|
|
|
|
);
|
2022-05-05 19:48:27 +08:00
|
|
|
|
}
|
2022-05-30 17:33:59 +08:00
|
|
|
|
let timer = setInterval(() => {
|
|
|
|
|
const displayLiEl = document.querySelector(
|
|
|
|
|
'ul[class^="zmwebsdk-makeStyles-avatarList"]>li'
|
|
|
|
|
);
|
|
|
|
|
console.log(displayLiEl);
|
|
|
|
|
if (displayLiEl.className.includes("videoOn")) {
|
|
|
|
|
console.log("开启了视频");
|
|
|
|
|
clearInterval(timer);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
nextBtn.click();
|
|
|
|
|
isNextBtnHidden = nextBtn.className.includes(
|
|
|
|
|
"zmwebsdk-makeStyles-hidePaginationIcon"
|
|
|
|
|
);
|
|
|
|
|
if (isNextBtnHidden) {
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
const displayLiEl = document.querySelector(
|
|
|
|
|
'ul[class^="zmwebsdk-makeStyles-avatarList"]>li'
|
|
|
|
|
);
|
|
|
|
|
console.log(displayLiEl);
|
|
|
|
|
}, 100);
|
|
|
|
|
clearInterval(timer);
|
|
|
|
|
}
|
|
|
|
|
}, 100);
|
2022-06-02 00:24:31 +08:00
|
|
|
|
// console.log(isNextBtnHidden);
|
2022-05-30 17:33:59 +08:00
|
|
|
|
};
|
2022-05-05 19:48:27 +08:00
|
|
|
|
|
2022-05-30 17:33:59 +08:00
|
|
|
|
const inSharing = ref(false); // 共享屏幕是否开启
|
|
|
|
|
const attendeeslist = ref("");
|
2022-05-29 13:30:19 +08:00
|
|
|
|
setInterval(() => {
|
2022-06-07 17:36:04 +08:00
|
|
|
|
screenWidth.value = window.screen.width;
|
2022-05-30 17:33:59 +08:00
|
|
|
|
// 共享屏幕状态变化
|
|
|
|
|
const screenShareEl = document.querySelector(
|
|
|
|
|
`div[class*="zmwebsdk-makeStyles-inSharing"]`
|
2022-05-29 13:30:19 +08:00
|
|
|
|
);
|
2022-05-30 17:33:59 +08:00
|
|
|
|
inSharing.value = screenShareEl ? true : false;
|
|
|
|
|
// ------
|
|
|
|
|
|
|
|
|
|
// 检测是否是ribbon视图, 如果是, 则切换到gallery view, 当观众被设为嘉宾或嘉宾被设为观众时需要切换视图.
|
|
|
|
|
const isRibbon = document.querySelector(
|
2022-05-29 13:30:19 +08:00
|
|
|
|
"#suspension-view-tab-thumbnail-ribbon.zmwebsdk-MuiTab-selected"
|
|
|
|
|
);
|
2022-05-30 17:33:59 +08:00
|
|
|
|
if (isRibbon && !inSharing.value) {
|
2022-05-29 13:30:19 +08:00
|
|
|
|
const galleryViewButton = document.querySelector(
|
|
|
|
|
"#suspension-view-tab-thumbnail-gallery"
|
|
|
|
|
);
|
|
|
|
|
if (galleryViewButton) galleryViewButton.click();
|
|
|
|
|
}
|
2022-05-30 17:33:59 +08:00
|
|
|
|
// ------
|
2022-05-29 13:30:19 +08:00
|
|
|
|
|
2022-06-06 17:32:42 +08:00
|
|
|
|
// TODO:
|
2022-05-30 17:33:59 +08:00
|
|
|
|
// 检测是否存在"同意被设为嘉宾按钮",存在则自动点击
|
2022-05-29 13:30:19 +08:00
|
|
|
|
const isSetAsGuest = document.querySelector(
|
|
|
|
|
".zmwebsdk-MuiButtonBase-root.zmwebsdk-MuiButton-root.zmwebsdk-MuiButton-contained.zmwebsdk-MuiButton-containedPrimary.zmwebsdk-MuiButton-containedSizeSmall.zmwebsdk-MuiButton-sizeSmall.zmwebsdk-MuiButton-disableElevation"
|
|
|
|
|
);
|
2022-06-06 17:32:42 +08:00
|
|
|
|
const setAsGuestLabel = document.querySelector(
|
|
|
|
|
".zmwebsdk-MuiButtonBase-root.zmwebsdk-MuiButton-root.zmwebsdk-MuiButton-contained.zmwebsdk-MuiButton-containedPrimary.zmwebsdk-MuiButton-containedSizeSmall.zmwebsdk-MuiButton-sizeSmall.zmwebsdk-MuiButton-disableElevation>span"
|
|
|
|
|
);
|
|
|
|
|
if (isSetAsGuest && setAsGuestLabel.innerHTML === "以嘉宾身份加入") {
|
2022-05-29 13:30:19 +08:00
|
|
|
|
isSetAsGuest.click();
|
|
|
|
|
}
|
2022-05-30 17:33:59 +08:00
|
|
|
|
// -------
|
2022-06-07 17:36:04 +08:00
|
|
|
|
// 检测参会嘉宾及其摄像头开关状态
|
2022-05-30 17:33:59 +08:00
|
|
|
|
attendeeslist.value = meetingConfig.client
|
|
|
|
|
.getAttendeeslist()
|
2022-06-02 00:24:31 +08:00
|
|
|
|
.map((el) => JSON.stringify({ userId: el.userId, bVideoOn: el.bVideoOn }))
|
2022-05-30 17:33:59 +08:00
|
|
|
|
.join("$");
|
2022-06-07 17:36:04 +08:00
|
|
|
|
// -------
|
2022-06-02 00:24:31 +08:00
|
|
|
|
// 检测共享屏幕canvas距离父元素顶部距离
|
|
|
|
|
const shareScreenCanvasEl = document.querySelector(
|
|
|
|
|
'div[id*="suspension-view-tabpanel"]>.zmwebsdk-MuiBox-root.zmwebsdk-MuiBox-root>div[class*="inSharing"]>div:first-child'
|
|
|
|
|
);
|
2022-06-07 17:36:04 +08:00
|
|
|
|
// console.log(shareScreenCanvasEl);
|
2022-06-02 00:24:31 +08:00
|
|
|
|
if (shareScreenCanvasEl) {
|
2022-06-06 17:32:42 +08:00
|
|
|
|
if (templateId.value == 3 || templateId.value == 4 || screen.width < 900) {
|
|
|
|
|
document.querySelector(
|
|
|
|
|
`div[id*="suspension-view-tabpanel"] > .zmwebsdk-MuiBox-root.zmwebsdk-MuiBox-root > div[class*="inSharing"] + div`
|
|
|
|
|
).style.top = `${shareScreenCanvasEl.offsetTop}px`;
|
|
|
|
|
} else {
|
|
|
|
|
document.querySelector(
|
|
|
|
|
`div[id*="suspension-view-tabpanel"] > .zmwebsdk-MuiBox-root.zmwebsdk-MuiBox-root > div[class*="inSharing"] + div`
|
|
|
|
|
).style.top = "";
|
|
|
|
|
}
|
2022-06-02 00:24:31 +08:00
|
|
|
|
}
|
2022-05-29 13:30:19 +08:00
|
|
|
|
}, 500);
|
|
|
|
|
|
2022-05-30 17:33:59 +08:00
|
|
|
|
// 监听共享屏幕状态
|
|
|
|
|
watch(inSharing, (val) => {
|
|
|
|
|
console.log(val);
|
|
|
|
|
if (val) {
|
2022-06-01 17:34:55 +08:00
|
|
|
|
// setLayout(templateId.value);
|
2022-06-02 00:24:31 +08:00
|
|
|
|
// makeVideoTop();
|
2022-05-05 19:48:27 +08:00
|
|
|
|
} else {
|
|
|
|
|
const galleryViewButton = document.querySelector(
|
|
|
|
|
"#suspension-view-tab-thumbnail-gallery"
|
|
|
|
|
);
|
2022-05-29 13:30:19 +08:00
|
|
|
|
if (galleryViewButton) galleryViewButton.click();
|
2022-06-07 17:36:04 +08:00
|
|
|
|
|
|
|
|
|
/* 在手机上,关闭共享屏幕时,未能把去掉摄像头的top样式 (?), 需要在此处再次清除top样式 */
|
|
|
|
|
document
|
|
|
|
|
.querySelectorAll(
|
|
|
|
|
`div[id*="suspension-view-tabpanel"] > .zmwebsdk-MuiBox-root.zmwebsdk-MuiBox-root>div:last-child`
|
|
|
|
|
)
|
|
|
|
|
.forEach((el) => {
|
|
|
|
|
el.style.top = "";
|
|
|
|
|
});
|
2022-05-05 19:48:27 +08:00
|
|
|
|
}
|
|
|
|
|
});
|
2022-05-06 23:11:47 +08:00
|
|
|
|
|
2022-06-06 17:32:42 +08:00
|
|
|
|
// 监听参会人员videoOn状态变化,自动切换到已开启摄像头的用户
|
2022-05-30 17:33:59 +08:00
|
|
|
|
watch(attendeeslist, (val) => {
|
|
|
|
|
console.log(val);
|
|
|
|
|
if (inSharing.value) {
|
2022-06-02 00:24:31 +08:00
|
|
|
|
switchToVideoOn();
|
2022-05-30 17:33:59 +08:00
|
|
|
|
}
|
|
|
|
|
});
|
2022-05-31 17:46:07 +08:00
|
|
|
|
|
|
|
|
|
// 点击进入全屏模式
|
2022-06-06 17:32:42 +08:00
|
|
|
|
const fullscreenWrapRef = ref(null);
|
|
|
|
|
const isVerticalFullScreen = ref(false);
|
|
|
|
|
const showHorizontalScreen = ref(false);
|
2022-05-31 17:46:07 +08:00
|
|
|
|
const setFullScreen = async () => {
|
2022-06-06 17:32:42 +08:00
|
|
|
|
// if (window.orientation === 0) {
|
|
|
|
|
// // ElMessageBox.prompt("请将手机横过来");
|
|
|
|
|
// showHorizontalScreen.value = true;
|
|
|
|
|
// setTimeout(() => {
|
|
|
|
|
// showHorizontalScreen.value = false;
|
|
|
|
|
// }, 1500);
|
|
|
|
|
// return;
|
|
|
|
|
// }
|
2022-06-07 17:36:04 +08:00
|
|
|
|
try {
|
|
|
|
|
document.querySelector(".fullscreen-wrap").requestFullscreen();
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.log(error);
|
|
|
|
|
document.querySelector(".fullscreen-wrap").webkitRequestFullscreen();
|
|
|
|
|
}
|
2022-06-07 00:49:44 +08:00
|
|
|
|
|
2022-06-01 17:34:55 +08:00
|
|
|
|
isFullScreen.value = true;
|
2022-06-06 17:32:42 +08:00
|
|
|
|
nextTick(() => {
|
|
|
|
|
meetingWidth.value = meetingContainerRef.value.offsetWidth * 0.9;
|
|
|
|
|
meetingHeight.value = (meetingWidth.value * 9) / 16;
|
2022-06-07 00:49:44 +08:00
|
|
|
|
// 当手机竖屏时
|
2022-06-06 17:32:42 +08:00
|
|
|
|
if (window.orientation === 0) {
|
|
|
|
|
isVerticalFullScreen.value = true;
|
2022-06-07 00:49:44 +08:00
|
|
|
|
videoElementRef.value.style.height = `${
|
|
|
|
|
screen.width - screen.height * 0.08
|
|
|
|
|
}px`;
|
2022-06-06 17:32:42 +08:00
|
|
|
|
nextTick(() => {
|
|
|
|
|
document
|
|
|
|
|
.querySelectorAll(
|
2022-06-07 00:49:44 +08:00
|
|
|
|
"div[id*=suspension-view-tabpanel]>.zmwebsdk-MuiBox-root.zmwebsdk-MuiBox-root"
|
2022-06-06 17:32:42 +08:00
|
|
|
|
)
|
|
|
|
|
.forEach((el) => {
|
2022-06-07 00:49:44 +08:00
|
|
|
|
el.style.height = `${screen.width - screen.height * 0.08}px`;
|
2022-06-06 17:32:42 +08:00
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
}
|
2022-06-07 00:49:44 +08:00
|
|
|
|
|
|
|
|
|
videoElementRef.value.style.height = `${
|
|
|
|
|
screen.height - screen.width * 0.08
|
|
|
|
|
}px`;
|
2022-06-07 17:36:04 +08:00
|
|
|
|
console.log(`${screen.height - screen.width * 0.08}px`);
|
2022-06-06 17:32:42 +08:00
|
|
|
|
document
|
|
|
|
|
.querySelectorAll(
|
|
|
|
|
"div[id*=suspension-view-tabpanel]>.zmwebsdk-MuiBox-root.zmwebsdk-MuiBox-root"
|
|
|
|
|
)
|
|
|
|
|
.forEach((el) => {
|
2022-06-07 00:49:44 +08:00
|
|
|
|
el.style.height = `${screen.height - screen.width * 0.08}px`;
|
2022-06-06 17:32:42 +08:00
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
const quitFullScreen = () => {
|
|
|
|
|
document.exitFullscreen();
|
2022-05-31 17:46:07 +08:00
|
|
|
|
};
|
2022-05-30 17:33:59 +08:00
|
|
|
|
// 是否显示考试和问卷弹窗
|
|
|
|
|
const showExamDialog = ref(false);
|
|
|
|
|
const showQuestionnaireDialog = ref(false);
|
2022-05-31 17:46:07 +08:00
|
|
|
|
const examStarted = ref(false); //考试是否开始
|
2022-05-30 17:33:59 +08:00
|
|
|
|
/* 签到功能 */
|
|
|
|
|
// 提交签到
|
|
|
|
|
const showSignDialog = ref(false); //是否显示签到窗口
|
|
|
|
|
const submitSign = async () => {
|
|
|
|
|
await signMeeting({
|
|
|
|
|
meetingId: store.getters.meetingId,
|
|
|
|
|
signTime: dayjs().format("YYYY-MM-DD HH:mm:ss"),
|
|
|
|
|
account: joinAccount.value,
|
|
|
|
|
});
|
|
|
|
|
showSignDialog.value = false;
|
|
|
|
|
ElMessage.success("签到成功");
|
|
|
|
|
};
|
2022-05-31 17:46:07 +08:00
|
|
|
|
// 当考试和问卷弹框未能正确弹出时,(即考试开始时,未加入会议),加载题目列表
|
2022-05-30 17:33:59 +08:00
|
|
|
|
const loadQuestionsList = async (mode) => {
|
|
|
|
|
const { data } = await getQuestionsList({
|
|
|
|
|
meetingId: store.getters.meetingId,
|
|
|
|
|
type: mode,
|
|
|
|
|
});
|
|
|
|
|
return data.map((item) => {
|
|
|
|
|
return {
|
|
|
|
|
...item,
|
|
|
|
|
choiceAnswerIdStr: [],
|
|
|
|
|
};
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 当会议结束时,如果没有手动点击提交则自动提交试卷
|
|
|
|
|
const submitQuestion = async (mode) => {
|
|
|
|
|
if (mode == "1") {
|
|
|
|
|
await commitExam({
|
|
|
|
|
meetingId: store.getters.meetingId,
|
|
|
|
|
userAccount: joinAccount.value,
|
|
|
|
|
commitExamList: examQuestionsList.value.map((item) => {
|
|
|
|
|
return {
|
|
|
|
|
questionId: item.id,
|
|
|
|
|
choiceAnswerIdStr: item.choiceAnswerIdStr.join(",") + ",",
|
|
|
|
|
};
|
|
|
|
|
}),
|
|
|
|
|
});
|
|
|
|
|
ElMessage.success("提交考试成功");
|
|
|
|
|
} else if (mode == "2") {
|
|
|
|
|
await commitQuestionnaire({
|
|
|
|
|
meetingId: store.getters.meetingId,
|
|
|
|
|
userAccount: joinAccount.value,
|
|
|
|
|
commitExamList: questionnaireQuestionsList.value.map((item) => {
|
|
|
|
|
return {
|
|
|
|
|
questionId: item.id,
|
|
|
|
|
choiceAnswerIdStr: item.choiceAnswerIdStr.join(",") + ",",
|
|
|
|
|
};
|
|
|
|
|
}),
|
|
|
|
|
});
|
|
|
|
|
ElMessage.success("提交问卷成功");
|
|
|
|
|
}
|
2022-05-31 17:46:07 +08:00
|
|
|
|
// closeDialog();
|
2022-05-30 17:33:59 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// loadQuestionsList("1");
|
2022-05-18 17:25:43 +08:00
|
|
|
|
let socket = reactive({});
|
|
|
|
|
const initWebSocket = () => {
|
|
|
|
|
// 建立websocket连接
|
|
|
|
|
socket = new ReconnectingWebSocket(
|
|
|
|
|
`wss://meeting.chuhuankj.com/wss/websocket/meeting/${store.getters.meetingId}/${joinAccount.value}`
|
|
|
|
|
);
|
|
|
|
|
socket.addEventListener("open", () => {
|
|
|
|
|
console.log("websocket,已连接");
|
|
|
|
|
});
|
2022-05-05 19:48:27 +08:00
|
|
|
|
|
2022-05-18 17:25:43 +08:00
|
|
|
|
// 监听websocket消息
|
|
|
|
|
socket.addEventListener("message", async (event) => {
|
|
|
|
|
const data = JSON.parse(JSON.parse(event.data));
|
|
|
|
|
console.log(data);
|
|
|
|
|
// 会议信息更新时
|
|
|
|
|
if (data.type === "isRefreshMeeting") {
|
|
|
|
|
await store.dispatch("getMeetingInfo", store.getters.meetingId);
|
2022-06-01 17:34:55 +08:00
|
|
|
|
meetingContainerRef.value.style.background = `url(${store.getters.templateBackgroundPic}) 0% 0% / cover no-repeat`;
|
2022-05-18 17:25:43 +08:00
|
|
|
|
templateId.value = store.getters.templateId;
|
2022-06-01 17:34:55 +08:00
|
|
|
|
// setLayout(templateId.value);
|
2022-05-18 17:25:43 +08:00
|
|
|
|
setTextLabel();
|
|
|
|
|
}
|
|
|
|
|
// 收到聊天消息时
|
|
|
|
|
else if (data.type === "isChat") {
|
2022-05-30 17:33:59 +08:00
|
|
|
|
console.log(data.content);
|
2022-05-26 17:33:16 +08:00
|
|
|
|
console.log(JSON.parse(JSON.parse(JSON.parse(data.content).msg)));
|
2022-05-18 17:25:43 +08:00
|
|
|
|
messages.value.push({
|
2022-05-26 17:33:16 +08:00
|
|
|
|
...JSON.parse(JSON.parse(JSON.parse(data.content).msg)),
|
2022-05-30 17:33:59 +08:00
|
|
|
|
id: uniqueId(),
|
2022-05-18 17:25:43 +08:00
|
|
|
|
time: dayjs().format("YYYY-MM-DD HH:mm:ss"),
|
|
|
|
|
});
|
|
|
|
|
}
|
2022-05-30 17:33:59 +08:00
|
|
|
|
// 开始签到时
|
2022-06-06 17:32:42 +08:00
|
|
|
|
else if (data.type === "isStartSign" && route.name === "Meeting") {
|
2022-05-30 17:33:59 +08:00
|
|
|
|
showSignDialog.value = true;
|
|
|
|
|
}
|
|
|
|
|
// 签到结束时
|
2022-06-06 17:32:42 +08:00
|
|
|
|
else if (data.type === "isEndSign" && route.name === "Meeting") {
|
2022-05-30 17:33:59 +08:00
|
|
|
|
showSignDialog.value = false;
|
|
|
|
|
}
|
2022-05-18 17:25:43 +08:00
|
|
|
|
// 开始考试时
|
2022-06-06 17:32:42 +08:00
|
|
|
|
else if (data.type === "isStartExam" && route.name === "Meeting") {
|
2022-05-18 17:25:43 +08:00
|
|
|
|
showExamDialog.value = true;
|
|
|
|
|
}
|
|
|
|
|
// 开始问卷时
|
2022-06-06 17:32:42 +08:00
|
|
|
|
else if (data.type === "isStartQuestionnaire" && route.name === "Meeting") {
|
2022-05-18 17:25:43 +08:00
|
|
|
|
showQuestionnaireDialog.value = true;
|
|
|
|
|
}
|
|
|
|
|
// 会议结束时
|
|
|
|
|
else if (data.type === "isCloseMeeting") {
|
|
|
|
|
showExamDialog.value = false;
|
|
|
|
|
showQuestionnaireDialog.value = false;
|
|
|
|
|
ElMessageBox.alert("会议已结束");
|
|
|
|
|
socket.close();
|
2022-05-30 17:33:59 +08:00
|
|
|
|
if (store.getters.bankId && !store.state.joinUser.examSubmited) {
|
|
|
|
|
if (examQuestionsList.value.length === 0) {
|
|
|
|
|
examQuestionsList.value = await loadQuestionsList("1");
|
|
|
|
|
}
|
|
|
|
|
submitQuestion("1");
|
|
|
|
|
}
|
|
|
|
|
if (
|
|
|
|
|
store.getters.questionnaireId &&
|
|
|
|
|
!store.state.joinUser.questionnaireSubmited
|
|
|
|
|
) {
|
|
|
|
|
if (questionnaireQuestionsList.value.length === 0) {
|
|
|
|
|
questionnaireQuestionsList.value = await loadQuestionsList("2");
|
|
|
|
|
}
|
|
|
|
|
submitQuestion("2");
|
|
|
|
|
}
|
2022-05-18 17:25:43 +08:00
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
socket.addEventListener("close", (event) => {
|
|
|
|
|
console.log(event, "close");
|
|
|
|
|
});
|
|
|
|
|
socket.addEventListener("error", (event) => {
|
|
|
|
|
console.log(event, "error");
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
initWebSocket();
|
2022-05-05 19:48:27 +08:00
|
|
|
|
|
2022-05-30 17:33:59 +08:00
|
|
|
|
// 消息列表
|
|
|
|
|
const messages = ref([]);
|
|
|
|
|
const sendMessage = (msgObj) => {
|
|
|
|
|
console.log(JSON.stringify(JSON.stringify(msgObj)));
|
2022-05-26 17:33:16 +08:00
|
|
|
|
socket.send(
|
|
|
|
|
JSON.stringify(
|
|
|
|
|
JSON.stringify({
|
|
|
|
|
account: joinName.value,
|
2022-05-30 17:33:59 +08:00
|
|
|
|
msg: msgObj.msg,
|
2022-05-26 17:33:16 +08:00
|
|
|
|
})
|
|
|
|
|
)
|
|
|
|
|
);
|
2022-05-30 17:33:59 +08:00
|
|
|
|
messages.value.push(msgObj);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const examQuestionsList = ref([]);
|
|
|
|
|
const getStageExamAnswer = (val) => {
|
|
|
|
|
examQuestionsList.value = val.map((el) => el);
|
|
|
|
|
};
|
|
|
|
|
const questionnaireQuestionsList = ref([]);
|
|
|
|
|
const getStageQuestionnaireAnswer = (val) => {
|
|
|
|
|
questionnaireQuestionsList.value = val.map((el) => el);
|
2022-05-05 19:48:27 +08:00
|
|
|
|
};
|
|
|
|
|
|
2022-06-01 17:34:55 +08:00
|
|
|
|
const isFullScreen = ref(false);
|
2022-05-30 17:33:59 +08:00
|
|
|
|
onMounted(() => {
|
|
|
|
|
meetingContainerRef.value.style.background = ` url(${store.getters.templateBackgroundPic}) 0% 0% / cover no-repeat`;
|
|
|
|
|
meetingWidth.value = meetingContainerRef.value.offsetWidth * 0.9;
|
|
|
|
|
meetingHeight.value = (meetingWidth.value * 9) / 16;
|
2022-06-07 00:49:44 +08:00
|
|
|
|
|
2022-05-30 17:33:59 +08:00
|
|
|
|
videoElementRef.value.style.height = `${meetingHeight.value + 42}px`;
|
2022-06-01 17:34:55 +08:00
|
|
|
|
|
2022-06-07 17:36:04 +08:00
|
|
|
|
const handleFullscreenChange = () => {
|
2022-06-01 17:34:55 +08:00
|
|
|
|
if (document.fullscreenElement) {
|
|
|
|
|
isFullScreen.value = true;
|
|
|
|
|
} else {
|
|
|
|
|
isFullScreen.value = false;
|
2022-06-06 17:32:42 +08:00
|
|
|
|
isVerticalFullScreen.value = false;
|
2022-06-01 17:34:55 +08:00
|
|
|
|
nextTick(() => {
|
|
|
|
|
meetingWidth.value = meetingContainerRef.value.offsetWidth * 0.9;
|
|
|
|
|
meetingHeight.value = (meetingWidth.value * 9) / 16;
|
2022-06-07 00:49:44 +08:00
|
|
|
|
// videoElementRef.value.style.width = `${meetingWidth.value}px`;
|
2022-06-01 17:34:55 +08:00
|
|
|
|
videoElementRef.value.style.height = `${meetingHeight.value + 42}px`;
|
|
|
|
|
document
|
|
|
|
|
.querySelectorAll(
|
|
|
|
|
"div[id*=suspension-view-tabpanel]>.zmwebsdk-MuiBox-root.zmwebsdk-MuiBox-root"
|
|
|
|
|
)
|
|
|
|
|
.forEach((el) => {
|
2022-06-06 17:32:42 +08:00
|
|
|
|
console.log(`${meetingHeight.value}px`);
|
2022-06-07 00:49:44 +08:00
|
|
|
|
// el.style.height = `${meetingHeight.value}px`;
|
|
|
|
|
el.style.height = "";
|
2022-06-01 17:34:55 +08:00
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
}
|
2022-06-07 17:36:04 +08:00
|
|
|
|
};
|
|
|
|
|
// 当全屏状态改变时
|
|
|
|
|
fullscreenWrapRef.value.addEventListener(
|
|
|
|
|
"fullscreenchange",
|
|
|
|
|
handleFullscreenChange
|
|
|
|
|
);
|
|
|
|
|
fullscreenWrapRef.value.addEventListener(
|
|
|
|
|
"onwebkitfullscreenchange",
|
|
|
|
|
handleFullscreenChange
|
|
|
|
|
);
|
2022-05-30 17:33:59 +08:00
|
|
|
|
setTextLabel();
|
|
|
|
|
startMeeting();
|
|
|
|
|
});
|
2022-06-07 00:49:44 +08:00
|
|
|
|
// 当修改窗口尺寸时
|
2022-06-06 17:32:42 +08:00
|
|
|
|
window.addEventListener("resize", (e) => {
|
|
|
|
|
console.log(e);
|
|
|
|
|
meetingWidth.value = meetingContainerRef.value.offsetWidth * 0.9;
|
|
|
|
|
meetingHeight.value = (meetingWidth.value * 9) / 16;
|
2022-06-07 17:36:04 +08:00
|
|
|
|
if (!document.fullscreenElement) {
|
|
|
|
|
videoElementRef.value.style.height = `${meetingHeight.value + 42}px`;
|
|
|
|
|
}
|
2022-06-06 17:32:42 +08:00
|
|
|
|
});
|
|
|
|
|
window.addEventListener("orientationchange", function () {
|
2022-06-07 17:36:04 +08:00
|
|
|
|
if (window.orientation === 90) {
|
|
|
|
|
if (isFullScreen.value === true) {
|
|
|
|
|
isVerticalFullScreen.value = false;
|
|
|
|
|
videoElementRef.value.style.height = ``;
|
|
|
|
|
nextTick(() => {
|
|
|
|
|
document
|
|
|
|
|
.querySelectorAll(
|
|
|
|
|
"div[id*=suspension-view-tabpanel]>.zmwebsdk-MuiBox-root.zmwebsdk-MuiBox-root"
|
|
|
|
|
)
|
|
|
|
|
.forEach((el) => {
|
|
|
|
|
el.style.height = ``;
|
|
|
|
|
});
|
|
|
|
|
setFullScreen();
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
} else if (window.orientation === 0) {
|
|
|
|
|
if (isFullScreen.value === true) {
|
|
|
|
|
setFullScreen();
|
|
|
|
|
}
|
|
|
|
|
}
|
2022-06-06 17:32:42 +08:00
|
|
|
|
});
|
2022-05-30 17:33:59 +08:00
|
|
|
|
window.getCurrentUser = meetingConfig.client.getCurrentUser;
|
|
|
|
|
window.getAttendeeslist = meetingConfig.client.getAttendeeslist;
|
|
|
|
|
window.getCurrentMeetingInfo = meetingConfig.client.getCurrentMeetingInfo;
|
|
|
|
|
window.checkSystemRequirements = meetingConfig.client.checkSystemRequirements;
|
2022-05-18 17:25:43 +08:00
|
|
|
|
const leaveConference = () => {
|
|
|
|
|
meetingConfig.client.leaveMeeting();
|
|
|
|
|
};
|
|
|
|
|
window.addEventListener("beforeunload", leaveConference);
|
|
|
|
|
onUnmounted(() => {
|
|
|
|
|
window.removeEventListener("beforeunload", leaveConference);
|
|
|
|
|
});
|
2022-05-05 19:48:27 +08:00
|
|
|
|
</script>
|
2022-05-30 17:33:59 +08:00
|
|
|
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
|
|
$meetingComponentWitdh: 80vw * 0.9;
|
|
|
|
|
$meetingComponentHeight: $meetingComponentWitdh * 9 / 16;
|
|
|
|
|
|
2022-06-06 17:32:42 +08:00
|
|
|
|
:deep(#right-chat .chat-container .message-list) {
|
|
|
|
|
height: $meetingComponentWitdh * 9 / 16;
|
|
|
|
|
overflow-y: scroll;
|
|
|
|
|
}
|
|
|
|
|
|
2022-05-05 19:48:27 +08:00
|
|
|
|
#app-container {
|
2022-05-30 17:33:59 +08:00
|
|
|
|
#meeting-chat-row {
|
|
|
|
|
display: flex;
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
#meeting-container {
|
2022-06-07 17:36:04 +08:00
|
|
|
|
box-sizing: border-box;
|
2022-05-30 17:33:59 +08:00
|
|
|
|
padding-top: calc(80vw * 0.08);
|
|
|
|
|
display: flex;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
width: 80vw;
|
|
|
|
|
position: relative;
|
2022-06-07 00:49:44 +08:00
|
|
|
|
#video-element {
|
|
|
|
|
width: 72vw;
|
2022-06-07 17:36:04 +08:00
|
|
|
|
:deep(div[id*="suspension-view-tabpanel"]
|
|
|
|
|
> .zmwebsdk-MuiBox-root.zmwebsdk-MuiBox-root
|
|
|
|
|
> div[class*="inSharing"]
|
|
|
|
|
> div) {
|
|
|
|
|
padding-top: 6px;
|
|
|
|
|
}
|
2022-06-07 00:49:44 +08:00
|
|
|
|
}
|
2022-05-31 17:46:07 +08:00
|
|
|
|
.el-button {
|
|
|
|
|
position: absolute;
|
2022-06-06 17:32:42 +08:00
|
|
|
|
right: 1vw;
|
|
|
|
|
bottom: 1vw;
|
2022-05-31 17:46:07 +08:00
|
|
|
|
}
|
2022-05-30 17:33:59 +08:00
|
|
|
|
:deep(.text-tag) {
|
|
|
|
|
position: absolute;
|
|
|
|
|
z-index: 999;
|
|
|
|
|
border-radius: 4px;
|
|
|
|
|
padding: 5px;
|
|
|
|
|
background-color: #fff;
|
|
|
|
|
* {
|
|
|
|
|
margin: 0;
|
|
|
|
|
padding: 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#right-chat {
|
|
|
|
|
width: 20vw;
|
2022-05-05 19:48:27 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2022-05-18 17:25:43 +08:00
|
|
|
|
|
2022-05-30 17:33:59 +08:00
|
|
|
|
.layout-template-1 {
|
2022-06-02 00:24:31 +08:00
|
|
|
|
:deep(div[id*="suspension-view-tabpanel"]
|
2022-05-31 17:46:07 +08:00
|
|
|
|
> .zmwebsdk-MuiBox-root.zmwebsdk-MuiBox-root
|
|
|
|
|
> div[class*="inSharing"]
|
|
|
|
|
+ div) {
|
2022-05-30 17:33:59 +08:00
|
|
|
|
width: $meetingComponentWitdh * 0.5;
|
2022-06-06 17:32:42 +08:00
|
|
|
|
height: $meetingComponentWitdh * 0.5 * 9 / 16;
|
|
|
|
|
align-self: center;
|
2022-05-30 17:33:59 +08:00
|
|
|
|
}
|
2022-05-05 19:48:27 +08:00
|
|
|
|
}
|
2022-05-30 17:33:59 +08:00
|
|
|
|
.layout-template-2 {
|
2022-06-02 00:24:31 +08:00
|
|
|
|
:deep(div[id*="suspension-view-tabpanel"]
|
2022-05-31 17:46:07 +08:00
|
|
|
|
> .zmwebsdk-MuiBox-root.zmwebsdk-MuiBox-root
|
|
|
|
|
> div[class*="inSharing"]
|
|
|
|
|
+ div) {
|
2022-05-30 17:33:59 +08:00
|
|
|
|
width: $meetingComponentWitdh * 0.5;
|
2022-06-06 17:32:42 +08:00
|
|
|
|
height: $meetingComponentWitdh * 0.5 * 9 / 16;
|
|
|
|
|
align-self: center;
|
2022-05-18 17:25:43 +08:00
|
|
|
|
}
|
2022-05-30 17:33:59 +08:00
|
|
|
|
:deep(#suspension-view-tabpanel-ribbon
|
2022-05-31 17:46:07 +08:00
|
|
|
|
> .zmwebsdk-MuiBox-root.zmwebsdk-MuiBox-root),
|
|
|
|
|
:deep(#suspension-view-tabpanel-speaker
|
2022-05-30 17:33:59 +08:00
|
|
|
|
> .zmwebsdk-MuiBox-root.zmwebsdk-MuiBox-root) {
|
|
|
|
|
flex-direction: row-reverse;
|
2022-05-18 17:25:43 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-05-30 17:33:59 +08:00
|
|
|
|
.layout-template-3 {
|
2022-06-02 00:24:31 +08:00
|
|
|
|
:deep(div[id*="suspension-view-tabpanel"]
|
2022-05-31 17:46:07 +08:00
|
|
|
|
> .zmwebsdk-MuiBox-root.zmwebsdk-MuiBox-root
|
|
|
|
|
> div[class*="inSharing"]
|
|
|
|
|
+ div) {
|
2022-05-30 17:33:59 +08:00
|
|
|
|
width: $meetingComponentWitdh * 0.2;
|
|
|
|
|
height: $meetingComponentWitdh * 0.2 * 9 / 16;
|
2022-06-02 00:24:31 +08:00
|
|
|
|
position: relative;
|
2022-05-18 17:25:43 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
2022-05-30 17:33:59 +08:00
|
|
|
|
.layout-template-4 {
|
2022-06-02 00:24:31 +08:00
|
|
|
|
:deep(div[id*="suspension-view-tabpanel"]
|
2022-05-31 17:46:07 +08:00
|
|
|
|
> .zmwebsdk-MuiBox-root.zmwebsdk-MuiBox-root
|
|
|
|
|
> div[class*="inSharing"]
|
|
|
|
|
+ div) {
|
2022-05-30 17:33:59 +08:00
|
|
|
|
width: $meetingComponentWitdh * 0.2;
|
|
|
|
|
height: $meetingComponentWitdh * 0.2 * 9 / 16;
|
2022-06-02 00:24:31 +08:00
|
|
|
|
position: relative;
|
2022-05-30 17:33:59 +08:00
|
|
|
|
}
|
|
|
|
|
:deep(#suspension-view-tabpanel-ribbon
|
2022-05-31 17:46:07 +08:00
|
|
|
|
> .zmwebsdk-MuiBox-root.zmwebsdk-MuiBox-root),
|
|
|
|
|
:deep(#suspension-view-tabpanel-speaker
|
2022-05-30 17:33:59 +08:00
|
|
|
|
> .zmwebsdk-MuiBox-root.zmwebsdk-MuiBox-root) {
|
|
|
|
|
flex-direction: row-reverse;
|
|
|
|
|
}
|
2022-05-05 19:48:27 +08:00
|
|
|
|
}
|
|
|
|
|
|
2022-05-30 17:33:59 +08:00
|
|
|
|
:deep(.zmwebsdk-MuiToolbar-root.zmwebsdk-MuiToolbar-regular) {
|
|
|
|
|
display: none; // 隐藏顶部 toolbar
|
2022-05-05 19:48:27 +08:00
|
|
|
|
}
|
2022-05-30 17:33:59 +08:00
|
|
|
|
:deep(div[class*="zmwebsdk-makeStyles-singleView"]) {
|
|
|
|
|
padding: 0; // 去掉会议组件边距
|
2022-05-18 17:25:43 +08:00
|
|
|
|
}
|
2022-05-30 17:33:59 +08:00
|
|
|
|
:deep(#video-element
|
|
|
|
|
> div
|
|
|
|
|
> .zmwebsdk-MuiPaper-root
|
|
|
|
|
> .zmwebsdk-MuiPaper-root:nth-child(1)) {
|
|
|
|
|
width: calc(80vw * 0.9);
|
|
|
|
|
}
|
|
|
|
|
:deep(#video-element
|
|
|
|
|
> div
|
|
|
|
|
> .zmwebsdk-MuiPaper-root
|
|
|
|
|
> .zmwebsdk-MuiPaper-root:nth-child(2)) {
|
|
|
|
|
width: 270px;
|
|
|
|
|
background: #ccc;
|
|
|
|
|
}
|
2022-06-02 00:24:31 +08:00
|
|
|
|
:deep(div[id*="suspension-view-tabpanel"]
|
2022-05-30 17:33:59 +08:00
|
|
|
|
> .zmwebsdk-MuiBox-root.zmwebsdk-MuiBox-root) {
|
|
|
|
|
height: calc(80vw * 0.9 * 9 / 16);
|
|
|
|
|
}
|
2022-05-31 17:46:07 +08:00
|
|
|
|
|
2022-05-18 17:25:43 +08:00
|
|
|
|
:deep(.zmwebsdk-MuiPaper-root) {
|
2022-05-05 19:48:27 +08:00
|
|
|
|
background: transparent;
|
|
|
|
|
box-shadow: 0 0;
|
|
|
|
|
}
|
2022-06-06 17:32:42 +08:00
|
|
|
|
// 隐藏共享屏幕上方提示
|
|
|
|
|
:deep(div[id*="suspension-view-tabpanel"]
|
|
|
|
|
div[class*="inSharing"]
|
|
|
|
|
> .zmwebsdk-MuiBox-root) {
|
|
|
|
|
display: none;
|
|
|
|
|
}
|
|
|
|
|
:deep(.check-media) {
|
|
|
|
|
.el-dialog__body {
|
|
|
|
|
text-align: center;
|
|
|
|
|
#check-media-wrap {
|
|
|
|
|
display: inline-block;
|
|
|
|
|
margin: 1vw auto;
|
|
|
|
|
border-radius: 1vw;
|
|
|
|
|
overflow: hidden;
|
|
|
|
|
width: 36vw;
|
|
|
|
|
height: 24vw;
|
|
|
|
|
background-color: #000;
|
|
|
|
|
position: relative;
|
2022-06-07 17:36:04 +08:00
|
|
|
|
// #check-media-video {
|
|
|
|
|
// width: 100%;
|
|
|
|
|
// height: 100%;
|
|
|
|
|
// }
|
2022-06-06 17:32:42 +08:00
|
|
|
|
svg {
|
|
|
|
|
position: absolute;
|
|
|
|
|
left: 1vw;
|
|
|
|
|
bottom: 1vw;
|
|
|
|
|
width: 3vw;
|
|
|
|
|
height: 3vw;
|
|
|
|
|
}
|
|
|
|
|
.microphone-loading {
|
|
|
|
|
color: #fff;
|
|
|
|
|
}
|
|
|
|
|
.microphone-on {
|
|
|
|
|
color: springgreen;
|
|
|
|
|
}
|
|
|
|
|
.microphone-off {
|
|
|
|
|
color: indianred;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2022-06-02 00:24:31 +08:00
|
|
|
|
// 适配移动端 屏幕宽度小于 900px
|
2022-05-31 17:46:07 +08:00
|
|
|
|
@media screen and (max-width: 900px) {
|
2022-06-07 17:36:04 +08:00
|
|
|
|
$meetingComponentWitdh: 90vw;
|
2022-06-07 00:49:44 +08:00
|
|
|
|
// $meetingComponentHeight: $meetingComponentWitdh * 9 / 16;
|
|
|
|
|
|
|
|
|
|
#app-container {
|
|
|
|
|
#meeting-chat-row {
|
|
|
|
|
#meeting-container {
|
2022-06-07 17:36:04 +08:00
|
|
|
|
padding-top: calc(100vw * 0.08);
|
2022-06-07 00:49:44 +08:00
|
|
|
|
width: 100vw;
|
|
|
|
|
#video-element {
|
|
|
|
|
width: 90vw;
|
2022-06-07 17:36:04 +08:00
|
|
|
|
:deep(div[id*="suspension-view-tabpanel"]
|
|
|
|
|
> .zmwebsdk-MuiBox-root.zmwebsdk-MuiBox-root
|
|
|
|
|
> div[class*="inSharing"]
|
|
|
|
|
+ div) {
|
|
|
|
|
width: $meetingComponentWitdh * 0.2;
|
|
|
|
|
height: $meetingComponentWitdh * 0.2 * 9 / 14.5;
|
|
|
|
|
position: relative;
|
|
|
|
|
align-self: initial;
|
|
|
|
|
}
|
|
|
|
|
// width: 72vw;
|
|
|
|
|
:deep(div[id*="suspension-view-tabpanel"]
|
|
|
|
|
> .zmwebsdk-MuiBox-root.zmwebsdk-MuiBox-root
|
|
|
|
|
> div[class*="inSharing"]
|
|
|
|
|
> div) {
|
|
|
|
|
padding-top: initial;
|
|
|
|
|
}
|
|
|
|
|
:deep(div[id*="suspension-view-tabpanel"]
|
|
|
|
|
> .zmwebsdk-MuiBox-root.zmwebsdk-MuiBox-root) {
|
|
|
|
|
height: calc(100vw * 0.9 * 9 / 16);
|
|
|
|
|
}
|
2022-06-07 00:49:44 +08:00
|
|
|
|
}
|
|
|
|
|
:deep(#video-element
|
|
|
|
|
> div
|
|
|
|
|
> .zmwebsdk-MuiPaper-root
|
|
|
|
|
> .zmwebsdk-MuiPaper-root:nth-child(1)) {
|
|
|
|
|
width: 90vw;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2022-05-30 17:33:59 +08:00
|
|
|
|
}
|
|
|
|
|
#right-chat {
|
|
|
|
|
display: none !important;
|
|
|
|
|
}
|
2022-05-31 17:46:07 +08:00
|
|
|
|
|
2022-06-06 17:32:42 +08:00
|
|
|
|
:deep(.check-media) {
|
2022-06-07 00:49:44 +08:00
|
|
|
|
.el-dialog__body {
|
|
|
|
|
#check-media-wrap {
|
|
|
|
|
margin: 2vw auto;
|
|
|
|
|
width: 80vw;
|
|
|
|
|
height: 54vw;
|
|
|
|
|
svg {
|
|
|
|
|
width: 6vw;
|
|
|
|
|
height: 6vw;
|
|
|
|
|
}
|
2022-06-06 17:32:42 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2022-05-31 17:46:07 +08:00
|
|
|
|
}
|
|
|
|
|
|
2022-06-02 00:24:31 +08:00
|
|
|
|
// 全屏样式
|
2022-06-07 00:49:44 +08:00
|
|
|
|
#app-container {
|
|
|
|
|
#meeting-chat-row {
|
|
|
|
|
.fullscreen-wrap {
|
|
|
|
|
width: 80vw;
|
2022-06-06 17:32:42 +08:00
|
|
|
|
|
2022-06-07 00:49:44 +08:00
|
|
|
|
#meeting-container.fullscreen {
|
2022-06-07 17:36:04 +08:00
|
|
|
|
$meetingComponentWitdh: 90vw;
|
|
|
|
|
padding-top: calc(80vw * 0.08);
|
2022-06-07 00:49:44 +08:00
|
|
|
|
width: 100vw;
|
2022-06-07 17:36:04 +08:00
|
|
|
|
height: 100vh;
|
2022-06-07 00:49:44 +08:00
|
|
|
|
#video-element {
|
|
|
|
|
width: 90vw;
|
|
|
|
|
}
|
|
|
|
|
.layout-template-1 {
|
|
|
|
|
:deep(div[id*="suspension-view-tabpanel"]
|
|
|
|
|
> .zmwebsdk-MuiBox-root.zmwebsdk-MuiBox-root
|
|
|
|
|
> div[class*="inSharing"]
|
|
|
|
|
+ div) {
|
|
|
|
|
width: $meetingComponentWitdh * 0.5;
|
|
|
|
|
height: $meetingComponentWitdh * 0.5 * 9 / 16;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.layout-template-2 {
|
|
|
|
|
:deep(div[id*="suspension-view-tabpanel"]
|
|
|
|
|
> .zmwebsdk-MuiBox-root.zmwebsdk-MuiBox-root
|
|
|
|
|
> div[class*="inSharing"]
|
|
|
|
|
+ div) {
|
|
|
|
|
width: $meetingComponentWitdh * 0.5;
|
|
|
|
|
height: $meetingComponentWitdh * 0.5 * 9 / 16;
|
|
|
|
|
}
|
|
|
|
|
}
|
2022-05-31 17:46:07 +08:00
|
|
|
|
|
2022-06-07 00:49:44 +08:00
|
|
|
|
.layout-template-3 {
|
|
|
|
|
:deep(div[id*="suspension-view-tabpanel"]
|
|
|
|
|
> .zmwebsdk-MuiBox-root.zmwebsdk-MuiBox-root
|
|
|
|
|
> div[class*="inSharing"]
|
|
|
|
|
+ div) {
|
|
|
|
|
width: $meetingComponentWitdh * 0.2;
|
|
|
|
|
height: $meetingComponentWitdh * 0.2 * 9 / 16;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.layout-template-4 {
|
|
|
|
|
:deep(div[id*="suspension-view-tabpanel"]
|
|
|
|
|
> .zmwebsdk-MuiBox-root.zmwebsdk-MuiBox-root
|
|
|
|
|
> div[class*="inSharing"]
|
|
|
|
|
+ div) {
|
|
|
|
|
width: $meetingComponentWitdh * 0.2;
|
|
|
|
|
height: $meetingComponentWitdh * 0.2 * 9 / 16;
|
|
|
|
|
}
|
|
|
|
|
}
|
2022-06-07 17:36:04 +08:00
|
|
|
|
|
2022-06-07 00:49:44 +08:00
|
|
|
|
:deep(#video-element
|
|
|
|
|
> div
|
|
|
|
|
> .zmwebsdk-MuiPaper-root
|
|
|
|
|
> .zmwebsdk-MuiPaper-root:nth-child(1)) {
|
|
|
|
|
width: 90vw;
|
|
|
|
|
}
|
|
|
|
|
:deep(#video-element
|
|
|
|
|
> div
|
|
|
|
|
> .zmwebsdk-MuiPaper-root
|
|
|
|
|
> .zmwebsdk-MuiPaper-root:nth-child(2)) {
|
|
|
|
|
display: none;
|
|
|
|
|
}
|
|
|
|
|
// :deep(div[id*="suspension-view-tabpanel"]
|
|
|
|
|
// > .zmwebsdk-MuiBox-root.zmwebsdk-MuiBox-root) {
|
|
|
|
|
// height: calc(100vw * 0.9 * 9 / 16);
|
|
|
|
|
// }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#meeting-container.verticalFullScreen {
|
2022-06-07 17:36:04 +08:00
|
|
|
|
$meetingComponentWitdh: 90vh;
|
2022-06-07 00:49:44 +08:00
|
|
|
|
$meetingComponentHeight: $meetingComponentWitdh * 9 / 16;
|
2022-06-07 17:36:04 +08:00
|
|
|
|
padding-top: calc(80vh * 0.08);
|
2022-06-07 00:49:44 +08:00
|
|
|
|
position: absolute;
|
|
|
|
|
transform-origin: 0% 0%;
|
|
|
|
|
transform: rotate(90deg);
|
|
|
|
|
top: 0;
|
|
|
|
|
left: 100vw;
|
|
|
|
|
width: 100vh !important;
|
2022-06-07 17:36:04 +08:00
|
|
|
|
height: 100vw;
|
2022-06-07 00:49:44 +08:00
|
|
|
|
#video-element {
|
|
|
|
|
width: 90vh;
|
|
|
|
|
:deep(div[id*="suspension-view-tabpanel"]
|
|
|
|
|
> .zmwebsdk-MuiBox-root.zmwebsdk-MuiBox-root
|
|
|
|
|
> div[class*="inSharing"]
|
|
|
|
|
+ div) {
|
|
|
|
|
width: $meetingComponentWitdh * 0.2;
|
|
|
|
|
height: $meetingComponentWitdh * 0.2 * 9 / 14.5;
|
|
|
|
|
}
|
2022-06-07 17:36:04 +08:00
|
|
|
|
:deep(div[id*="suspension-view-tabpanel"]
|
|
|
|
|
> .zmwebsdk-MuiBox-root.zmwebsdk-MuiBox-root
|
|
|
|
|
> div[class*="inSharing"]
|
|
|
|
|
> div) {
|
|
|
|
|
padding-top: initial;
|
|
|
|
|
}
|
2022-06-07 00:49:44 +08:00
|
|
|
|
}
|
|
|
|
|
:deep(#video-element
|
|
|
|
|
> div
|
|
|
|
|
> .zmwebsdk-MuiPaper-root
|
|
|
|
|
> .zmwebsdk-MuiPaper-root:nth-child(1)) {
|
|
|
|
|
// width: calc(100vh * 0.9) !important;
|
|
|
|
|
width: 90vh;
|
|
|
|
|
}
|
|
|
|
|
:deep(#video-element
|
|
|
|
|
> div
|
|
|
|
|
> .zmwebsdk-MuiPaper-root
|
|
|
|
|
> .zmwebsdk-MuiPaper-root:nth-child(2)) {
|
|
|
|
|
display: none;
|
|
|
|
|
}
|
|
|
|
|
// :deep(div[id*="suspension-view-tabpanel"]
|
|
|
|
|
// > .zmwebsdk-MuiBox-root.zmwebsdk-MuiBox-root) {
|
|
|
|
|
// height: calc(100vh * 0.9 * 9 / 16) !important;
|
|
|
|
|
// }
|
|
|
|
|
}
|
2022-06-06 17:32:42 +08:00
|
|
|
|
}
|
2022-05-30 17:33:59 +08:00
|
|
|
|
}
|
2022-05-18 17:25:43 +08:00
|
|
|
|
}
|
2022-05-05 19:48:27 +08:00
|
|
|
|
</style>
|