import { GetRoomUser } from '@/api/Meeting'; import { role } from '@/config/role'; import styles from '@/page/Meeting/ShareScreenWindow/index.module.scss' import { storage } from '@/utils'; import ImageUrl from '@/utils/package/imageUrl'; import { CaretDownOutlined, CaretUpOutlined } from '@ant-design/icons'; import { Button } from 'antd'; import dayjs from 'dayjs'; import { useEffect, useState } from "react"; const { setInterval, clearInterval } = require('timers'); const ShareScreenWindow: React.FC = () => { const [footerLists, setFooterLists] = useState([ { title: '静音', icon: ImageUrl.icon22, iconActive: ImageUrl.icon22Active, active: false, select: false, }, { title: '关闭视频', icon: ImageUrl.icon23, iconActive: ImageUrl.icon23Active, active: false, select: false, }, { title: '成员', icon: ImageUrl.icon30, iconSelect: ImageUrl.icon30Select, active: false, select: false, }, { title: '聊天', icon: ImageUrl.icon31, iconSelect: ImageUrl.icon31Select, active: false, select: false, }, { title: '录制', icon: ImageUrl.icon27, iconSelect: ImageUrl.icon27Select, iconActive: ImageUrl.icon27Active, active: false, select: false, }, ]) const [timeStr, setTimeStr] = useState(0) const [isExpand, setIsExpand] = useState(false) const [roomUserLists, setRoomUserLists] = useState([]) const channel = new BroadcastChannel('meeting_channel'); const userInfo = JSON.parse(storage.getItem('user') as string) let timeout: NodeJS.Timeout; useEffect(() => { getRoomUser() if (!role.ID.includes(userInfo.roleId)) { setFooterLists((res: any) => { return res.splice(4, 1) }) } channel.onmessage = function (event) { let { type, time } = event.data; switch (type) { case 'time': setTimeStr(time) timeout = setInterval(() => { setTimeStr(time++) }, 1000) break; } } channel.postMessage({ type: 'shareScreenWindowGetTime' }); window.electron.windowHandleMessageCallBack((_e: any, data: any) => { switch (data.parmes.type) { case 'currentSpeakUserMe': let domMe = document.getElementById(`micr-item-${userInfo.uid}`) as HTMLDivElement; if (domMe) { domMe.style.height = `${data.parmes.currentSpeakUserMe}%` } break; case 'footerList': const footerListTemplate = [...footerLists]; footerListTemplate[0].title = data.parmes.footerList[0][0].active ? '解除静音' : '静音'; footerListTemplate[0].active = data.parmes.footerList[0][0].active; footerListTemplate[1].title = data.parmes.footerList[0][1].active ? '开启视频' : '关闭视频'; footerListTemplate[1].active = data.parmes.footerList[0][1].active; if (role.ID.includes(userInfo.roleId)) { footerListTemplate[4].title = data.parmes.footerList[1][3].active ? '录制中' : '录制'; footerListTemplate[4].active = data.parmes.footerList[1][3].active; } setFooterLists(footerListTemplate) break; case 'roomUserList': setRoomUserLists(data.parmes.roomUserList) break; } }) return () => { clearInterval(timeout) channel.close(); }; }, []); const changeCurrentSeconds = (time: number): string => { const duration = dayjs.duration(time, 'seconds'); const hours = duration.hours(); // 整数小时 const minutes = duration.minutes(); // 整数分钟 const secondsRemaining = duration.seconds(); // 剩余的秒数 return `${hours > 9 ? hours : '0' + hours}:${minutes > 9 ? minutes : '0' + minutes}:${secondsRemaining > 9 ? secondsRemaining : '0' + secondsRemaining}` } // 获取房间用户 const getRoomUser = async (): Promise => { const data = JSON.parse(storage.getItem('stateInfo') as string) await GetRoomUser(data.channelId).then(res => { if (res.code === 200) { res.data.forEach((item: any) => { item.isShow = true; item.isRoom = true; item.isAdmin = role.ID.includes(item.roleId) || item.isRoomManager }) setRoomUserLists(res.data) channel.postMessage({ type: 'shareScreenWindowGetFooterLists', }); } }) } // 底部按钮点击效果 const changeFooterListSelect = (item: any, index: number, bool: boolean): void => { let arr = ['静音', '解除静音', '关闭视频', '开启视频'] if (arr.indexOf(item.title) === -1) { const footerListTemplate = [...footerLists] footerListTemplate[index].select = bool; setFooterLists(footerListTemplate) } } return ( <>
{changeCurrentSeconds(timeStr)} 共享中 {isExpand ? { channel.postMessage({ type: 'shareScreenWindowClose', shareScreenWindowClose: timeStr }); }}>结束共享 : 结束共享}
{isExpand ? null :
{footerLists.map((item: any, index: number) => { return (
changeFooterListSelect(item, index, true)} onMouseUp={() => changeFooterListSelect(item, index, false)} onMouseLeave={() => changeFooterListSelect(item, index, false)} onClick={async () => { switch (item.title) { case '静音': case '解除静音': case '关闭视频': case '开启视频': case '录制': case '录制中': channel.postMessage({ type: 'shareScreenWindowfooterListsTitle', shareScreenWindowfooterListsTitle: item.title }); break; case '聊天': window.electron.setChildWindowShow({ key: 'chatBigWindow', }) break; case '成员': window.electron.setChildWindowShow({ key: 'userListWindow', }) break; } }} key={index}>
{!item.active ?
: ''} {item.select ? : }
{item.title}{item.title === '成员' ? `(${roomUserLists.filter((item: any) => item.isRoom).length})` : ''}
) })}
}
{ setIsExpand(!isExpand) window.electron.setChildWindow({ width: isExpand ? 440 : 440 / 2, key: 'shareScreenWindow', }) }}> {isExpand ? '展开' : '收起'} {isExpand ? : }
) } export default ShareScreenWindow