From 45e5093eb2416870454e9f64e4f73a9d95a8fd7a Mon Sep 17 00:00:00 2001
From: luohairen <3399054449@qq.com>
Date: 星期五, 01 十一月 2024 11:40:28 +0800
Subject: [PATCH] 作废改为作弊
---
src/views/meet/index.vue | 247 ++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 200 insertions(+), 47 deletions(-)
diff --git a/src/views/meet/index.vue b/src/views/meet/index.vue
index 01f3959..6fef657 100644
--- a/src/views/meet/index.vue
+++ b/src/views/meet/index.vue
@@ -1,33 +1,48 @@
<template>
<div>
- <div style="display: flex; flex-direction: row">
- <div id="meet" ref="meet"/>
- <div style="padding: 5px">
- <el-row :gutter="5">
- <el-col :span="22">
- <el-input placeholder="鎼滅储" size="small" v-model="searchForm.keyword"/>
- </el-col>
- <el-col :span="2">
- <el-button type="primary" size="small" @click="getRoomInfo">鎼滅储</el-button>
- </el-col>
- </el-row>
- <el-row>
+ <div style="display: flex; flex-direction: row;">
+ <div id="meet" ref="meet" style="flex-grow: 1;">
+ </div>
+ <div style="padding-top: 5px; padding-left: 5px;right: 15px">
+ <el-button type="success" size="small" @click="hiddenStudent">{{ getShowText() }}</el-button>
+ <el-row v-show="showStudent">
+ <el-row :gutter="5">
+ <el-col :span="12">
+ <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-row>
<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>
- <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-table :data="showStudentList" style="width: 100%">
+ <el-table-column prop="realName" label="瀛﹀憳濮撳悕"></el-table-column>
+ <el-table-column prop="id" label="鎿嶄綔" width="80px;">
+ <template slot-scope="scope">
+ <el-dropdown trigger="click" @command="handleCommand">
+ <i class="el-icon-more-outline" id="more"></i>
+ <el-dropdown-menu slot="dropdown">
+ <el-dropdown-item :command="{ command: 'openCamera', id: scope.row.id }">鎵撳紑/鍏抽棴鎽勫儚澶�</el-dropdown-item>
+ <el-dropdown-item :command="{ command: 'mute', id: scope.row.id }">闈欓煶/鍙栨秷闈欓煶</el-dropdown-item>
+ <el-dropdown-item :command="{ command: 'kickOut', id: scope.row.id }">韪㈠嚭</el-dropdown-item>
+ </el-dropdown-menu>
+ </el-dropdown>
+ </template>
+ </el-table-column>
+ <el-table-column prop="onlineStatus" label="鐘舵��" width="80px;">
+ <template slot-scope="scope">
+ <div :class="{ online: scope.row.onlineStatus === 1, outline: scope.row.onlineStatus === 0 }">
+ {{ getStatus(scope.row.onlineStatus) }}
+ </div>
+ </template>
+ </el-table-column>
+ </el-table>
+ <el-button class="link-left" type="primary" size="small" @click="muteEveryone">鍏ㄤ綋闈欓煶</el-button>
+ <el-button class="link-left" type="primary" size="small" @click="videoEveryone">鍏ㄤ綋鍏抽棴鎽勫儚澶�</el-button>
</el-row>
</div>
</div>
@@ -36,11 +51,16 @@
<script>
import { getStudentList } from '@/api/meet'
+import Cookies from 'js-cookie'
-let jitsiApi = null
export default {
- data() {
+ data () {
return {
+ ws: null,
+ jitsiApi: null,
+ width: 0,
+ height: 0,
+ showStudent: true,
intervalId: null,
meetId: null,
roomName: '',
@@ -48,21 +68,92 @@
searchForm: {
keyword: '',
// 0 鏈湪绾裤�� 1 鍦ㄧ嚎
- onlineStatus: 0,
+ onlineStatus: 0
},
studentList: [],
- showStudentList: [],
+ showStudentList: []
+ }
+ },
+ beforeDestroy () {
+ if (this.ws) {
+ this.ws.close()
}
},
methods: {
- getStatus(status) {
- if (status === 1) {
- return "鍦ㄧ嚎"
- } else if (status === 0) {
- return "绂荤嚎"
+ muteEveryone () {
+ this.jitsiApi.executeCommand('muteEveryone', 'audio')
+ const h = this.$createElement;
+
+ this.$notify({
+ title: '鎻愮ず',
+ message: h('i', { style: 'color: teal'}, '宸插叏浣撶闊�')
+ });
+ },
+ videoEveryone () {
+ this.jitsiApi.executeCommand('muteEveryone', 'video')
+ const h = this.$createElement;
+
+ this.$notify({
+ title: '鎻愮ず',
+ message: h('i', { style: 'color: teal'}, '宸插叧闂叏浣撹棰�')
+ });
+ },
+ handleCommand (command) {
+ this.sendMessage(JSON.stringify(command))
+ },
+ initWebSocket () {
+ this.ws = new WebSocket('wss://www.kgmeet.com:18080/websocket/' + JSON.parse(Cookies.get('adminUserInfo')).id)
+ let ws = this.ws
+ ws.onopen = () => {
+ console.log('WebSocket 杩炴帴鎴愬姛')
+ // 鍙戦�佸績璺虫暟鎹�
+ ws.send('ping')
+ }
+ ws.onmessage = (event) => {
+ console.log('鏀跺埌鏈嶅姟鍣ㄦ秷鎭�:', event.data)
+ // 澶勭悊鏈嶅姟鍣ㄥ彂鏉ョ殑娑堟伅
+ }
+ ws.onerror = (error) => {
+ console.error('WebSocket 杩炴帴鍑洪敊:', error)
+ }
+ ws.onclose = () => {
+ console.log('WebSocket 杩炴帴宸插叧闂�')
+ // 鍙互鍦ㄨ繖閲屽皾璇曢噸鏂拌繛鎺�
+ }
+
+ // 缁勪欢閿�姣佹椂鏂紑 WebSocket 杩炴帴
+ this.$once('hook:beforeDestroy', () => {
+ ws.close()
+ })
+ },
+ sendMessage (message) {
+ if (this.ws.readyState === WebSocket.OPEN) {
+ this.ws.send(message)
+ } else {
+ console.error('WebSocket 杩炴帴鏈墦寮�')
}
},
- handleTabChange(tab) {
+ hiddenStudent () {
+ this.showStudent = !this.showStudent
+ },
+ changeJitsiWindowSize (width, height) {
+ this.jitsiApi.resizeLargeVideo(width, height)
+ },
+ 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
@@ -70,17 +161,17 @@
},
getStudentList () {
let params = {
- keyword: this.keyword
+ keyword: this.searchForm.keyword
}
getStudentList(this.meetId, params).then(res => {
this.studentList = res.data.data
this.showStudentList = this.studentList.filter(student => {
- return student.onlineStatus === 0
+ return student.onlineStatus === this.searchForm.onlineStatus
})
})
},
getRoomInfo () {
- jitsiApi.getRoomsInfo().then(rooms => {
+ this.jitsiApi.getRoomsInfo().then(rooms => {
rooms.rooms.forEach(room => {
// 鎴块棿鐨刬d鏄竴涓瓙鍩熷悕锛屼笖@绗﹀墠鐨勪細璁悕绉版槸缁忚繃URL缂栫爜鐨�
let encodedPart = room.id.split('@')[0]
@@ -110,8 +201,7 @@
}
},
mounted () {
- const width = window.innerWidth * 0.7
- const height = window.innerHeight
+ this.height = window.innerHeight
this.meetId = this.$route.query.meetId
this.getStudentList()
const domain = this.$route.query.domain
@@ -121,8 +211,7 @@
const userInfo = userInfoStr ? JSON.parse(userInfoStr) : null
const options = {
roomName: roomName,
- width: width,
- height: height,
+ height: this.height,
parentNode: this.$refs.meet,
lang: 'zh_CN',
userInfo: userInfo,
@@ -130,22 +219,74 @@
prejoinConfig: {
enabled: false
},
+ // 绂佺敤閭�璇�
+ disableInviteFunctions: true,
+ // 绂佺敤閭
+ gravatar: {
+ disabled: true
+ },
+ // 绂佺敤鏀瑰悕
+ readOnlyName: true,
+ // 鑷畾涔夋寜閽�
+ toolbarButtons: [
+ // 鎽勫儚澶�
+ 'camera',
+ // 鑱婂ぉ
+ 'chat',
+ // 鍏变韩
+ 'desktop',
+ 'download',
+ 'fullscreen',
+ 'hangup',
+ // 'help',
+ 'highlight',
+ // 'invite',
+ 'linktosalesforce',
+ 'livestreaming',
+ 'microphone',
+ 'noisesuppression',
+ 'recording',
+ 'select-background',
+ 'settings',
+ 'shareaudio',
+ 'sharedvideo',
+ 'shortcuts',
+ 'stats',
+ 'tileview',
+ 'toggle-camera',
+ 'whiteboard',
+
+ // 'closedcaptions',
+ // 'embedmeeting',
+ // 'etherpad',
+ // 'feedback',
+ // 'filmstrip',
+ 'participants-pane',
+ // 'profile',
+ 'raisehand',
+ // 'security',
+ 'videoquality',
+ ],
whiteboard: {
enabled: true
}
- },
- toolbarButtons: ['whiteboard']
+ }
}
- jitsiApi = new window.JitsiMeetExternalAPI(domain, options)
+ this.jitsiApi = new window.JitsiMeetExternalAPI(domain, options)
- jitsiApi.addListener('readyToClose', () => {
+ this.jitsiApi.addListener('readyToClose', () => {
window.close()
})
+ // 鍒濆鍖�
+ this.initWebSocket()
// 姣忎笁绉掓洿瀛﹀憳鍦ㄧ嚎鐘舵��
this.intervalId = setInterval(() => {
this.getRoomInfo()
- }, 3000)
+ // 鍙戦�佸績璺虫暟鎹�
+ this.ws.send('ping')
+ }, 2500)
+
},
beforeDestroy () {
// 娓呴櫎瀹氭椂鍣紝閬垮厤鍐呭瓨娉勬紡
@@ -159,19 +300,31 @@
</script>
<style lang="scss" scoped>
+/deep/ thead {
+ display: none;
+}
+
+#more:hover {
+ cursor: pointer;
+}
+
#meet {
height: 100%;
}
+
.online {
color: #42b983;
}
+
.outline {
color: #aa1111;
}
+
.studentWarp {
display: flex;
- flex-display: row;
+ flex-direction: row;
}
+
.student-row {
margin-top: 8px;
padding-left: 3px;
--
Gitblit v1.8.0