From 2362fabee5042379bbd35126d3565456b947fd65 Mon Sep 17 00:00:00 2001 From: yj <1336058017@qq.com> Date: Wed, 13 Nov 2024 16:25:39 +0800 Subject: [PATCH] =?UTF-8?q?=E6=88=BF=E9=97=B4=E5=86=85=E7=AD=BE=E5=88=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/Meeting/index.ts | 13 ++++ src/assets/icon52-select.png | Bin 0 -> 3923 bytes src/assets/icon52.png | Bin 0 -> 2915 bytes src/components/SingIn/index.module.scss | 32 ++++++++++ src/components/SingIn/index.tsx | 77 ++++++++++++++++++++++++ src/page/Meeting/index.tsx | 39 +++++++++++- src/utils/package/imageUrl.ts | 4 ++ 7 files changed, 163 insertions(+), 2 deletions(-) create mode 100644 src/assets/icon52-select.png create mode 100644 src/assets/icon52.png create mode 100644 src/components/SingIn/index.module.scss create mode 100644 src/components/SingIn/index.tsx diff --git a/src/api/Meeting/index.ts b/src/api/Meeting/index.ts index 1c2ba98..3733fae 100644 --- a/src/api/Meeting/index.ts +++ b/src/api/Meeting/index.ts @@ -134,4 +134,17 @@ export const GetPolling = (roomNum: string, count: string) => request({ url: `/room/polling?roomNum=${roomNum}&count=${count}`, method: 'get' + }) + +export const GetRoomSingnIn = () => + request({ + url: `/room/sign-in`, + method: 'get' + }) + +export const PostRoomSingnIn = (data: any) => + request({ + url: `/room/sign-in`, + method: 'post', + data }) \ No newline at end of file diff --git a/src/assets/icon52-select.png b/src/assets/icon52-select.png new file mode 100644 index 0000000000000000000000000000000000000000..38f3e0c5d8eb184f14909dbdb90cd0a626c2b387 GIT binary patch literal 3923 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 { + display: flex; + align-items: center; + justify-content: space-between; + border-bottom: 1px #363636 solid; + padding-bottom: 10px; + + >span { + flex-grow: 1; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + font-size: 16px; + color: white; + } + } + } + + .singInModalFooter { + flex-shrink: 0; + display: flex; + justify-content: center; + } +} \ No newline at end of file diff --git a/src/components/SingIn/index.tsx b/src/components/SingIn/index.tsx new file mode 100644 index 0000000..d37dbf7 --- /dev/null +++ b/src/components/SingIn/index.tsx @@ -0,0 +1,77 @@ +import { GetRoomSingnIn, PostRoomSingnIn } from '@/api/Meeting'; +import styles from '@/components/SingIn/index.module.scss' +import { storage } from '@/utils'; +import { Button, message, Modal } from 'antd'; +import { useState, useImperativeHandle, forwardRef } from "react"; +const SingIn = forwardRef((props: any, ref: any) => { + useImperativeHandle(ref, () => ({ + changeModal: () => { + setSingInModal(true) + getRoomSingnIn() + }, + getModal: () => { + return new Promise((resolve, reject) => { + setSingInModal(bool => { + resolve(bool) + return bool + }) + }) + }, + })) + const [singInModal, setSingInModal] = useState(false); + const [singInList, setSingInList] = useState([]); + const getRoomSingnIn = async (): Promise => { + await GetRoomSingnIn().then(res => { + if (res.code === 200) { + setSingInList(res.data.map((item: any) => { + return { + ...item, + active: true + } + })) + } + }) + } + return ( + <> + setSingInModal(false)} + centered + width={'300px'} + > +
+
+ {singInList.map((item: any, index: number) => { + return
+ {item.signInName} + {item.active ? + + : } +
+ })} +
+
+ +
+
+
+ + ) +}) + +export default SingIn \ No newline at end of file diff --git a/src/page/Meeting/index.tsx b/src/page/Meeting/index.tsx index 862083d..993ec24 100644 --- a/src/page/Meeting/index.tsx +++ b/src/page/Meeting/index.tsx @@ -23,6 +23,7 @@ import { role } from '@/config/role'; import { fixWebmDuration } from "webm-duration-fix-buffer"; import { getKeyOpenChildWindow, setKeyOpenChildWindow } from '@/utils/package/public'; import MeetingDisconnected from '@/components/MeetingDisconnected'; +import SingIn from '@/components/SingIn'; const { confirm } = Modal; const { exec } = require('child_process'); const fs = require('fs').promises; @@ -36,6 +37,7 @@ const Meeting: React.FC = () => { const stupWizardRef = useRef(); const equipmentManagementRef = useRef(); const meetingDisconnectedRef = useRef(); + const singInRef = useRef(); const [isClicked, setIsClicked] = useState(false); const [statusList, setStatusList] = useState({ userList: false, @@ -102,6 +104,13 @@ const Meeting: React.FC = () => { active: false, select: false, }, + { + title: '签到', + icon: ImageUrl.icon52, + iconSelect: ImageUrl.icon52Select, + active: false, + select: false, + }, { title: '设置', icon: ImageUrl.icon28, @@ -432,8 +441,18 @@ const Meeting: React.FC = () => { } else { message.error('当前不在会议室!') } + singInRef.current.getModal().then((res: boolean) => { + if (!res) { + singInRef.current.changeModal() + } + }) }, onCancel() { + singInRef.current.getModal().then((res: boolean) => { + if (!res) { + singInRef.current.changeModal() + } + }) } }) } @@ -1455,7 +1474,6 @@ const Meeting: React.FC = () => { await getUserRoomInfo().then(async (res) => { stupWizardRef.current.changeModal(0, res) }) - break; case '邀请人员': await getUserRoomInfo().then(async (res) => { @@ -1559,6 +1577,9 @@ const Meeting: React.FC = () => { storage.setItem('noViewChatList', 0) setNoViewChatList(0) break; + case '签到': + singInRef.current.changeModal() + break; } } // 停止录制 @@ -2705,10 +2726,23 @@ const Meeting: React.FC = () => { {row.title} + case '签到': + if (!role.ID.includes(user.roleId)) { + return
changeStatusList(row, itemIndex, rowIndex)} + onMouseDown={() => changeFooterListSelect(row, itemIndex, rowIndex, true)} + onMouseUp={() => changeFooterListSelect(row, itemIndex, rowIndex, false)} + onMouseLeave={() => changeFooterListSelect(row, itemIndex, rowIndex, false)} + key={rowIndex}> + {row.select ? : } + {row.title} +
+ } + return null case '申请发言': // if (!role.ID.includes(user.roleId)) { // return
changeStatusList(row, itemIndex, rowIndex)} key={rowIndex}> - // + // {row.select ? : } // {row.title} //
// } @@ -2917,6 +2951,7 @@ const Meeting: React.FC = () => { + ) } diff --git a/src/utils/package/imageUrl.ts b/src/utils/package/imageUrl.ts index 2722e37..3b8e6dc 100644 --- a/src/utils/package/imageUrl.ts +++ b/src/utils/package/imageUrl.ts @@ -79,6 +79,8 @@ import virtualBackground3 from '@/assets/virtualBackground/3.png' import virtualBackground4 from '@/assets/virtualBackground/4.png' import virtualBackground5 from '@/assets/virtualBackground/5.png' import virtualBackground6 from '@/assets/virtualBackground/6.png' +import icon52 from '@/assets/icon52.png' +import icon52Select from '@/assets/icon52-select.png' export default { loading, icon, @@ -161,4 +163,6 @@ export default { virtualBackground4, virtualBackground5, virtualBackground6, + icon52, + icon52Select } \ No newline at end of file