import { ref, onUnmounted } from 'vue'; import { ElNotification } from 'element-plus'; import emitter from "@/utils/eventBus.js"; import useConferenceControlModule from '@/views/consultation/sdk/conferenceControl'; import store from '@/store' const sdkConfernceControlModule = useConferenceControlModule(); // 通知时长 const duration = 5 * 1000; const lockCallbackId = ref(''); const activeConfigChangeCallbackId = ref(''); const memberJoinCallbackId = ref(''); const memberLeftCallbackId = ref(''); const updateSubjecCallbackId = ref(''); const updateMemberNickCallbackId = ref(''); const inviteMemberCallbackId = ref(''); const memberCameraCallbackId = ref(''); const memberProhibitionCallbackId = ref(''); const allMemberProhibitionCallbackId = ref(''); const memberMuteCallbackId = ref(''); const memberSpeakCallbackId = ref(''); const voiceStimulationCallbackId = ref(''); const memberSpeakingStateCallbackId = ref(''); const setLayoutTypenCallbackId = ref(''); const setMemberRoleCallbackId = ref(''); const cancelMemberSpeakCallbackId = ref(''); const addMemberCallbackId = ref(''); const deleteMemberCallbackId = ref(''); const screenSharingCallbackId = ref(''); const deviceListChangegCallbackId = ref(''); // 移除事件注册 const unRegisterConferenceControldata = () => { sdkConfernceControlModule.removeLockListener(lockCallbackId.value); sdkConfernceControlModule.removeActiveConfigChangeListener( activeConfigChangeCallbackId.value ); sdkConfernceControlModule.removeMemberJoinListener( memberJoinCallbackId.value ); sdkConfernceControlModule.removeMemberLeftListener( memberLeftCallbackId.value ); sdkConfernceControlModule.removeUpdateSubjectListener( updateSubjecCallbackId.value ); sdkConfernceControlModule.removeModifyMemberNickListener( updateMemberNickCallbackId.value ); sdkConfernceControlModule.removeInviteMemberListener( inviteMemberCallbackId.value ); sdkConfernceControlModule.removeMemberCameraListener( memberCameraCallbackId.value ); sdkConfernceControlModule.removeMemberProhibitionListener( memberProhibitionCallbackId.value ); sdkConfernceControlModule.removeAllMemberProhibitionListener( allMemberProhibitionCallbackId.value ); sdkConfernceControlModule.removeMemberMuteListener( memberMuteCallbackId.value ); sdkConfernceControlModule.removeAssignMemberSpeakListener( memberSpeakCallbackId.value ); sdkConfernceControlModule.removeVoiceStimulationListener( voiceStimulationCallbackId.value ); sdkConfernceControlModule.removeMemberSpeakingStateListener( memberSpeakingStateCallbackId.value ); sdkConfernceControlModule.removeSetLayoutTypeListener( setLayoutTypenCallbackId.value ); sdkConfernceControlModule.removeSetMemberRoleListener( setMemberRoleCallbackId.value ); sdkConfernceControlModule.removeCancelMemberSpeakListener( cancelMemberSpeakCallbackId.value ); sdkConfernceControlModule.removeAddMemberListener(addMemberCallbackId.value); sdkConfernceControlModule.removeDeleteMemberListener( deleteMemberCallbackId.value ); sdkConfernceControlModule.removeScreenSharingListener( screenSharingCallbackId.value ); sdkConfernceControlModule.removeDeviceListChangeListener( deviceListChangegCallbackId.value ); }; /* 会控管理相关 */ export default ({ onDeviceListChange }) => { // 初始化清除回调事件,避免外部重复调用注册方法导致事件重复 unRegisterConferenceControldata(); const globalStore = store.state.useGlobalStore; // 事件注册方便任意位置调用 emitter.on('unRegisterConferenceControldata', unRegisterConferenceControldata); // 组件卸载时自动移除 onUnmounted(() => { unRegisterConferenceControldata(); }); /** * 当前进行中会议配置信息变化通知 * */ activeConfigChangeCallbackId.value = sdkConfernceControlModule.addActiveConfigChangeListener((config) => { store.dispatch("setActiveConfig",config); }); /** * 会议室锁定通知 * */ lockCallbackId.value = sdkConfernceControlModule.addLockListener((data) => { console.log('+++++++++ 会议室锁定通知 ++++++++++', data); const descMap = { 0: '解锁', 1: '锁定', }; ElNotification.info({ id: `${Date.now()}`, title: '会议室锁定通知', message: `【${data.operator.alias}】${descMap[data.status]}会议室`, }); }); /** * 增加会议成员通知 * */ addMemberCallbackId.value = sdkConfernceControlModule.addAddMemberListener( (data) => { console.log('+++++++++ 【会控】增加会议成员通知 ++++++++++', data); const name = data.members.map((v) => v.alias || v.number).join('; '); ElNotification.info({ id: `${Date.now()}`, title: '【会控】增加会议成员通知', message: `【${name}】已成为【会议:${data.meeting.number}】的会议成员!`, }); } ); /** * 删除会议成员通知 * */ deleteMemberCallbackId.value = sdkConfernceControlModule.addDeleteMemberListener((data) => { console.log('+++++++++ 【会控】删除会议成员通知 ++++++++++', data); const name = data.member.alias || data.member.number; ElNotification.info({ id: `${Date.now()}`, title: '【会控】删除会议成员通知', message: `【${name}】已不属于【会议:${data.meeting.number}】的会议成员!`, }); }); /** * 成员入会通知 * */ memberJoinCallbackId.value = sdkConfernceControlModule.addMemberJoinListener( (data) => { console.log('+++++++++ 成员入会通知 ++++++++++', data); const name = data.member.alias || data.member.number; ElNotification.info({ id: `${Date.now()}`, title: '成员入会通知', message: `【${name}】加入了【会议:${data.meeting.number}】!`, }); // 自己入会,展示会议面板 if ( data.member.basedata_id === sessionStorage.getItem('user_basedata_id') ) { // 展示会议面板 globalStore.setShowConfencePanel(true); } } ); /** * 成员离会通知 * */ memberLeftCallbackId.value = sdkConfernceControlModule.addMemberLeftListener( (data) => { console.log('+++++++++ 成员离会通知 ++++++++++', data); const name = data.member.alias || data.member.number; ElNotification.info({ id: `${Date.now()}`, title: '成员离会通知', message: `【${name}】离开了【会议:${data.meeting.number}】!`, }); // 不是自己,不需处理 if ( data.member.basedata_id !== sessionStorage.getItem('user_basedata_id') ) { return; } } ); /** * 更新会议主题通知 * */ updateSubjecCallbackId.value = sdkConfernceControlModule.addUpdateSubjectListener((data) => { console.log('+++++++++ 更新会议主题通知 ++++++++++', data); ElNotification.info({ id: `${Date.now()}`, title: '更新会议主题通知', message: `【${data.operator.alias}】修改了会议主题!`, }); }); /** * 设置成员角色通知 * */ setMemberRoleCallbackId.value = sdkConfernceControlModule.addSetMemberRoleListener((data) => { console.log('+++++++++ 设置成员角色通知 ++++++++++', data); const roleDesc = { 0: '成员', 1: '主席', 2: '创建者', }; ElNotification.info({ id: `${Date.now()}`, title: '设置成员角色通知', message: `${data.operator.alias} 将 ${data.member.alias} 设置为了【${ roleDesc[data.member_role] }】`, }); }); /** * 修改会议成员昵称通知 * */ updateMemberNickCallbackId.value = sdkConfernceControlModule.addModifyMemberNickListener((data) => { console.log('+++++++++ 修改会议成员昵称通知 ++++++++++', data); ElNotification.info({ id: `${Date.now()}`, title: '修改会议成员昵称通知', message: `【${data.operator.alias}】修改了会议成员昵称为【${data.nickname}】!`, }); }); /** * 呼叫未入会成员通知 * */ inviteMemberCallbackId.value = sdkConfernceControlModule.addInviteMemberListener((data) => { console.log('+++++++++ 呼叫未入会成员通知 ++++++++++', data); ElNotification.info({ id: `${Date.now()}`, title: '呼叫未入会成员通知', message: `收到会议号【${data.meeting.number}】的入会通知!`, }); }); /** * 摄像头开关通知 * */ memberCameraCallbackId.value = sdkConfernceControlModule.addMemberCameraListener((data) => { console.log('+++++++++ 摄像头开关通知 ++++++++++', data); const cameraDesc = { 0: '已关闭', 1: '已开启', 2: '无', }; ElNotification.info({ id: `${Date.now()}`, title: '摄像头开关通知', message: `${data.operator.alias}【${cameraDesc[data.status]}】${ data.member.alias } 的摄像头`, }); }); /** * 禁言通知 * */ memberProhibitionCallbackId.value = sdkConfernceControlModule.addMemberProhibitionListener((data) => { console.log('+++++++++ 禁言通知 ++++++++++', data); const prohibitioDesc = { 0: '解除禁言', 1: '禁言', }; const name = data.member.alias || data.member.number; ElNotification.info({ id: `${Date.now()}`, title: '禁言通知', message: `${data.operator.alias} 对【${name}】${ prohibitioDesc[data.status] }!`, }); }); /** * 全部禁言通知 * */ allMemberProhibitionCallbackId.value = sdkConfernceControlModule.addAllMemberProhibitionListener((data) => { console.log('+++++++++ 全部禁言通知 ++++++++++', data); const prohibitioDesc = { 0: '解除全部禁言', 1: '开启全部禁言', }; ElNotification.info({ id: `${Date.now()}`, title: '全部禁言通知', message: `${data.operator.alias} ${prohibitioDesc[data.status]}!`, }); }); /** * 静音通知 * */ memberMuteCallbackId.value = sdkConfernceControlModule.addMemberMuteListener( (data) => { console.log('+++++++++ 静音通知 ++++++++++', data); const muteDesc = { 0: '取消静音', 1: '静音', 2: '无音频', }; const name = data.member.alias || data.member.number; ElNotification.info({ id: `${Date.now()}`, title: '静音通知', message: `${data.operator.alias} 对【${name}】${ muteDesc[data.status] }!`, }); } ); /** * 设备列表变化通知 * */ deviceListChangegCallbackId.value = sdkConfernceControlModule.addDeviceListChangeListener((data) => { console.log('+++++++++ 设备列表变化通知 ++++++++++', data); if (onDeviceListChange) { onDeviceListChange(data); } }); /** * 指定成员讲话通知 * */ memberSpeakCallbackId.value = sdkConfernceControlModule.addAssignMemberSpeakListener((data) => { console.log('+++++++++ 指定成员讲话通知 ++++++++++', data); const name = data.member.alias || data.member.number; ElNotification.info({ id: `${Date.now()}`, title: '指定成员讲话通知', message: `${data.operator.alias} 指定【${name}】讲话!`, }); }); /** * 取消指定成员讲话通知 * */ cancelMemberSpeakCallbackId.value = sdkConfernceControlModule.addCancelMemberSpeakListener((data) => { console.log('+++++++++ 取消成员讲话通知 ++++++++++', data); const name = data.member.alias || data.member.number; ElNotification.info({ id: `${Date.now()}`, title: '取消成员讲话通知', message: `${data.operator.alias} 取消【${name}】讲话!`, }); }); /** * 成员讲话状态通知 * */ memberSpeakingStateCallbackId.value = sdkConfernceControlModule.addMemberSpeakingStateListener((data) => { console.log('+++++++++ 成员讲话状态通知 ++++++++++', data); }); /** * 语音激励成员讲话状态通知 * */ voiceStimulationCallbackId.value = sdkConfernceControlModule.addVoiceStimulationListener((data) => { console.log('+++++++++ 语音激励成员讲话状态通知 ++++++++++', data); }); /** * 修改布局通知 * */ setLayoutTypenCallbackId.value = sdkConfernceControlModule.addSetLayoutTypeListener((data) => { console.log('+++++++++ 修改布局通知 ++++++++++', data); ElNotification.info({ id: `${Date.now()}`, title: '修改布局通知', message: `修改布局通知`, }); }); /** * 屏幕共享通知 * */ screenSharingCallbackId.value = sdkConfernceControlModule.addScreenSharingListener((data) => { console.log('+++++++++ 屏幕共享通知 ++++++++++', data); const descMap = { 0: '取消共享', //(未共享) 1: '共享屏幕', //(已共享) }; ElNotification.info({ id: `${Date.now()}`, title: '屏幕共享通知', message: `【${data.member.alias}】${descMap[data.sharing_status]}`, }); }); };