From e9c4997aa45f64643e3026ac3845fc86d2793680 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期五, 12 七月 2024 14:20:46 +0800
Subject: [PATCH] 显示隐藏在线情况
---
src/views/meet/index.vue | 195 +++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 180 insertions(+), 15 deletions(-)
diff --git a/src/views/meet/index.vue b/src/views/meet/index.vue
index 8b6e996..d66df30 100644
--- a/src/views/meet/index.vue
+++ b/src/views/meet/index.vue
@@ -1,24 +1,189 @@
<template>
- <body><div id="meet" /></body>
+ <div>
+ <div style="display: flex; flex-direction: row; position: relative">
+ <div id="meet" ref="meet"/>
+ <div style="padding: 5px;position: absolute;right: 0">
+ <el-button type="primary" size="small" @click="showStudent = ! showStudent" style="float: right">{{getShowText()}}</el-button>
+ <el-row v-show="showStudent">
+ <el-row :gutter="5">
+ <el-col :span="22">
+ <el-input placeholder="鎼滅储" size="small" clearable @input="getStudentList" @clear="getStudentList" v-model="searchForm.keyword"/>
+ </el-col>
+ <el-col :span="2">
+ <el-button type="primary" size="small" @click="getStudentList">鎼滅储</el-button>
+ </el-col>
+ <el-tabs v-model="searchForm.onlineStatus" @tab-click="handleTabChange" style="margin-left: 3px">
+ <el-tab-pane label="鍦ㄧ嚎瀛﹀憳" name="1"></el-tab-pane>
+ <el-tab-pane label="绂荤嚎瀛﹀憳" name="0"></el-tab-pane>
+ </el-tabs>
+ <el-row :gutter="20" v-for="student in showStudentList" :key="student.id" class="student-row">
+ <el-col :span="18">
+ <div>
+ {{student.realName}}
+ </div>
+ </el-col>
+ <el-col :span="6">
+ <div :class="{online: student.onlineStatus === 1, outline: student.onlineStatus === 0}">
+ {{getStatus(student.onlineStatus)}}
+ </div>
+ </el-col>
+ </el-row>
+ </el-row>
+ </el-row>
+ </div>
+ </div>
+ </div>
</template>
-<script src='https://ycl.easyblog.vip:8443/external_api.js'></script>
<script>
-let api
-const initIframeAPI = () => {
- const domain = 'ycl.easyblog.vip:8443'
- const options = {
- roomName: 'test',
- width: 700,
- height: 700,
- parentNode: document.querySelector('#meet')
+import { getStudentList } from '@/api/meet'
+
+let jitsiApi = null
+export default {
+ data () {
+ return {
+ showStudent: true,
+ intervalId: null,
+ meetId: null,
+ roomName: '',
+ joinList: [],
+ searchForm: {
+ keyword: '',
+ // 0 鏈湪绾裤�� 1 鍦ㄧ嚎
+ onlineStatus: 0
+ },
+ studentList: [],
+ showStudentList: []
+ }
+ },
+ methods: {
+ getShowText() {
+ if (this.showStudent) {
+ return '闅愯棌鍦ㄧ嚎鎯呭喌'
+ } else {
+ return '灞曠ず鍦ㄧ嚎鎯呭喌'
+ }
+ },
+ getStatus (status) {
+ if (status === 1) {
+ return '鍦ㄧ嚎'
+ } else if (status === 0) {
+ return '绂荤嚎'
+ }
+ },
+ handleTabChange (tab) {
+ let status = parseInt(tab.name)
+ this.showStudentList = this.studentList.filter(student => {
+ return student.onlineStatus === status
+ })
+ },
+ getStudentList () {
+ let params = {
+ keyword: this.searchForm.keyword
+ }
+ getStudentList(this.meetId, params).then(res => {
+ this.studentList = res.data.data
+ this.showStudentList = this.studentList.filter(student => {
+ return student.onlineStatus === this.searchForm.onlineStatus
+ })
+ })
+ },
+ getRoomInfo () {
+ jitsiApi.getRoomsInfo().then(rooms => {
+ rooms.rooms.forEach(room => {
+ // 鎴块棿鐨刬d鏄竴涓瓙鍩熷悕锛屼笖@绗﹀墠鐨勪細璁悕绉版槸缁忚繃URL缂栫爜鐨�
+ let encodedPart = room.id.split('@')[0]
+ let decodedPart = decodeURIComponent(encodedPart)
+ if (this.roomName === decodedPart) {
+ room.participants.forEach(user => {
+ // 浣跨敤'_'浣滀负鍒嗛殧绗﹀垎鍓插瓧绗︿覆锛岃幏鍙栧埌userId
+ const parts = user.displayName.split('_')
+ let userId = null
+ if (parts.length > 1) {
+ userId = parseInt(parts[1])
+ // 璁剧疆瀛﹀憳鐘舵�佷负鍦ㄧ嚎
+ this.studentList.forEach(student => {
+ console.log(student.id === userId)
+ if (student.id === userId) {
+ student.onlineStatus = 1
+ }
+ })
+ }
+ })
+ }
+ })
+ this.showStudentList = this.studentList.filter(student => {
+ return student.onlineStatus === parseInt(this.searchForm.onlineStatus)
+ })
+ })
+ }
+ },
+ mounted () {
+ const width = window.innerWidth * 0.8
+ const height = window.innerHeight
+ this.meetId = this.$route.query.meetId
+ this.getStudentList()
+ const domain = this.$route.query.domain
+ const roomName = this.$route.query.roomName
+ this.roomName = roomName
+ const userInfoStr = this.$route.query.userInfoStr
+ const userInfo = userInfoStr ? JSON.parse(userInfoStr) : null
+ const options = {
+ roomName: roomName,
+ width: width,
+ height: height,
+ parentNode: this.$refs.meet,
+ lang: 'zh_CN',
+ userInfo: userInfo,
+ configOverwrite: {
+ prejoinConfig: {
+ enabled: false
+ },
+ whiteboard: {
+ enabled: true
+ }
+ },
+ toolbarButtons: ['whiteboard']
+ }
+
+ jitsiApi = new window.JitsiMeetExternalAPI(domain, options)
+
+ jitsiApi.addListener('readyToClose', () => {
+ window.close()
+ })
+ // 姣忎笁绉掓洿瀛﹀憳鍦ㄧ嚎鐘舵��
+ this.intervalId = setInterval(() => {
+ this.getRoomInfo()
+ }, 2500)
+ },
+ beforeDestroy () {
+ // 娓呴櫎瀹氭椂鍣紝閬垮厤鍐呭瓨娉勬紡
+ if (this.intervalId) {
+ clearInterval(this.intervalId)
+ this.intervalId = null
+ }
}
- api = new JitsiMeetExternalAPI(domain, options)
}
-window.onload = () => {
- initIframeAPI()
-}
</script>
-<style lang="scss" scoped></style>
+<style lang="scss" scoped>
+#meet {
+ height: 100%;
+}
+.online {
+ color: #42b983;
+}
+.outline {
+ color: #aa1111;
+}
+.studentWarp {
+ display: flex;
+ flex-direction: row;
+}
+.student-row {
+ margin-top: 8px;
+ padding-left: 3px;
+ color: #565b5e;
+}
+</style>
--
Gitblit v1.8.0