From e157d8350c0c978ff5c10f605a378f0d37d538d0 Mon Sep 17 00:00:00 2001 From: yj <1336058017@qq.com> Date: Thu, 17 Oct 2024 17:32:45 +0800 Subject: [PATCH] =?UTF-8?q?=E6=97=B6=E9=97=B4=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/page/Meeting/ShareScreenWindow/index.tsx | 27 ++++++++++++++++---- src/page/Meeting/index.tsx | 13 +++++++--- 2 files changed, 31 insertions(+), 9 deletions(-) diff --git a/src/page/Meeting/ShareScreenWindow/index.tsx b/src/page/Meeting/ShareScreenWindow/index.tsx index 8024848..5c0a6ae 100644 --- a/src/page/Meeting/ShareScreenWindow/index.tsx +++ b/src/page/Meeting/ShareScreenWindow/index.tsx @@ -6,6 +6,7 @@ import ImageUrl from '@/utils/package/imageUrl'; import { getKeyOpenChildWindow, setKeyOpenChildWindow } from '@/utils/package/public'; import { CaretDownOutlined, CaretUpOutlined } from '@ant-design/icons'; import { Button } from 'antd'; +import dayjs from 'dayjs'; import { useEffect, useState } from "react"; const ShareScreenWindow: React.FC = () => { const [footerLists, setFooterLists] = useState([ @@ -46,19 +47,23 @@ const ShareScreenWindow: React.FC = () => { select: false, }, ]) - const [time, setTime] = useState('') + 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() channel.onmessage = function (event) { - const { type, time, roomUserList, footerList, currentSpeakUserMe } = event.data; + let { type, time, roomUserList, footerList, currentSpeakUserMe } = event.data; const footerListTemplate = [...footerLists]; switch (type) { case 'time': - setTime(time) + setTimeStr(time) + timeout = setInterval(() => { + setTimeStr(time++) + }, 1000) break; case 'roomUserList': setRoomUserLists(roomUserList) @@ -80,8 +85,20 @@ const ShareScreenWindow: React.FC = () => { break; } } + channel.postMessage({ + type: 'shareScreenWindowGetTime' + }); + return () => { + clearInterval(timeout) + }; }, []); - + 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) @@ -112,7 +129,7 @@ const ShareScreenWindow: React.FC = () => { <>
- {time} 共享中 + {changeCurrentSeconds(timeStr)} 共享中 {isExpand ? { channel.postMessage({ type: 'shareScreenWindowClose' diff --git a/src/page/Meeting/index.tsx b/src/page/Meeting/index.tsx index 3484f20..9894063 100644 --- a/src/page/Meeting/index.tsx +++ b/src/page/Meeting/index.tsx @@ -226,6 +226,15 @@ const Meeting: React.FC = () => { noticeWindowPostRoomManager } = event.data; switch (type) { + case 'shareScreenWindowGetTime': + setCurrentSeconds((res=>{ + channel.postMessage({ + type: 'time', + time: res, + }); + return res + })) + break; case 'shareScreenWindowClose': await stopScreenCapture() await allUserLook(userInfo.uid, userInfo.userName) @@ -351,10 +360,6 @@ const Meeting: React.FC = () => { } time = setInterval(() => { setCurrentSeconds(currentSeconds++) - channel.postMessage({ - type: 'time', - time: changeCurrentSeconds(), - }); }, 1000) // 首次加载图标更新 const firstFooterList = [...footerList]