From 1b0ec71d93a578495d1f3afc890e5d9ace79f150 Mon Sep 17 00:00:00 2001 From: kuaifan Date: Sun, 10 Nov 2024 11:51:44 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E6=89=93=E5=BC=80?= =?UTF-8?q?=E4=BC=9A=E8=AE=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- electron/electron-preload.js | 3 +++ electron/electron.js | 21 +++++++++++++++++ resources/assets/js/App.vue | 22 ++++++++++-------- resources/assets/js/functions/eeui.js | 6 +++++ .../manage/components/MeetingManager.vue | 23 ++++++++++++++++--- .../pages/manage/components/MeetingPlayer.vue | 4 +++- resources/assets/js/pages/meeting.vue | 14 +++-------- resources/assets/js/store/state.js | 1 + .../pages/components/meeting-manager.scss | 19 +++++++++++---- 9 files changed, 85 insertions(+), 28 deletions(-) diff --git a/electron/electron-preload.js b/electron/electron-preload.js index 1dd57b5ed..649efe9fa 100644 --- a/electron/electron-preload.js +++ b/electron/electron-preload.js @@ -51,6 +51,9 @@ contextBridge.exposeInMainWorld( sendMessage: function (action, args) { ipcRenderer.send(action, args); }, + sendAsync: function (action, args) { + return ipcRenderer.invoke(action, args) + }, listenOnce: function (action, callback) { ipcRenderer.once(action, function (event, args) { callback(args); diff --git a/electron/electron.js b/electron/electron.js index 21b12e30e..950793217 100644 --- a/electron/electron.js +++ b/electron/electron.js @@ -705,6 +705,27 @@ ipcMain.on('updateChildWindow', (event, args) => { event.returnValue = "ok" }) +/** + * 获取路由窗口信息 + */ +ipcMain.handle('getChildWindow', (event, args) => { + let child; + if (!args) { + const browser = BrowserWindow.fromWebContents(event.sender); + child = childWindow.find(({browser: win}) => win === browser) + } else { + child = childWindow.find(({name}) => name === args) + } + if (child) { + return { + name: child.name, + id: child.browser.webContents.id, + url: child.browser.webContents.getURL() + } + } + return null; +}); + /** * 创建路由窗口(todo 已废弃) * @param args {path, ?} diff --git a/resources/assets/js/App.vue b/resources/assets/js/App.vue index 684b243e1..01cf21591 100755 --- a/resources/assets/js/App.vue +++ b/resources/assets/js/App.vue @@ -374,15 +374,15 @@ export default { }) } // 会议事件 - window.__onMeetingEvent = ({act,uuid,meetingid}) => { + window.__onMeetingEvent = ({act, uuid, meetingid, status}) => { switch (act) { // 获取用户信息 case "getInfo": - const isTourist = (uuid+'').indexOf('88888') !== -1; + const isTourist = (uuid + '').indexOf('88888') !== -1; this.$store.dispatch("call", { url: isTourist ? 'users/meeting/tourist' : 'users/basic', data: { - userid: isTourist ? uuid : (uuid+'').substring(6), + userid: isTourist ? uuid : (uuid + '').substring(6), tourist_id: uuid, } }).then(({data}) => { @@ -398,23 +398,27 @@ export default { $A.modalError(msg); }); break; - //加入成功 + // 加入成功 case "success": - this.$store.dispatch("closeMeetingWindow","add") + this.$store.dispatch("closeMeetingWindow", "add") break; // 邀请 case "invent": - this.$store.dispatch("showMeetingWindow",{ + this.$store.dispatch("showMeetingWindow", { type: "invitation", meetingid: meetingid }) break; - //结束会议 + // 结束会议 case "endMeeting": break; - //加入失败 + // 加入失败 case "error": - this.$store.dispatch("closeMeetingWindow","error") + this.$store.dispatch("closeMeetingWindow", "error") + break; + // 状态 + case "status": + this.$store.state.appMeetingShow = status break; default: break; diff --git a/resources/assets/js/functions/eeui.js b/resources/assets/js/functions/eeui.js index 8969d2d1e..090849498 100755 --- a/resources/assets/js/functions/eeui.js +++ b/resources/assets/js/functions/eeui.js @@ -68,6 +68,12 @@ return $A.eeuiModuleSync("eeui").rewriteUrl(val); }, + // 获取页面信息 + eeuiAppGetPageInfo(pageName) { + if (!$A.isEEUiApp) return; + return $A.eeuiModuleSync("eeui").getPageInfo(pageName); + }, + // 打开app新页面 eeuiAppOpenPage(object, callback) { if (!$A.isEEUiApp) return; diff --git a/resources/assets/js/pages/manage/components/MeetingManager.vue b/resources/assets/js/pages/manage/components/MeetingManager.vue index f5f7b6f1d..92654c8ff 100644 --- a/resources/assets/js/pages/manage/components/MeetingManager.vue +++ b/resources/assets/js/pages/manage/components/MeetingManager.vue @@ -179,7 +179,7 @@ export default { }, computed: { - ...mapState(['meetingWindow', 'formOptions', 'userToken']), + ...mapState(['meetingWindow', 'appMeetingShow', 'formOptions', 'userToken']), }, mounted() { @@ -300,11 +300,26 @@ export default { }); }, - onOpen(isDirect = false) { - if (this.meetingShow) { + async onOpen(isDirect = false) { + // 判断是否在会议中 + let isMeeting = false; + if ($A.isEEUiApp) { + isMeeting = this.appMeetingShow; + } else if ($A.Electron) { + const meetingWindow = await $A.Electron.sendAsync("getChildWindow", 'meeting-window') + if (meetingWindow) { + const currentWindow = await $A.Electron.sendAsync("getChildWindow", null) + isMeeting = currentWindow?.id !== meetingWindow.id; + } + } else { + isMeeting = this.meetingShow; + } + if (isMeeting) { $A.modalWarning("正在会议中,无法进入其他会议室"); return; } + + // 加载动画 const loader = (add) => { if (isDirect) { if (add) { @@ -320,6 +335,8 @@ export default { } } } + + // 加入会议 loader(true); this.$store.dispatch("call", { url: 'users/meeting/open', diff --git a/resources/assets/js/pages/manage/components/MeetingPlayer.vue b/resources/assets/js/pages/manage/components/MeetingPlayer.vue index 3995055c8..b7188e9a1 100644 --- a/resources/assets/js/pages/manage/components/MeetingPlayer.vue +++ b/resources/assets/js/pages/manage/components/MeetingPlayer.vue @@ -1,6 +1,8 @@