From 15d3ec9d812257df23419bf10b82b989d47c2a60 Mon Sep 17 00:00:00 2001 From: kuaifan Date: Wed, 19 Mar 2025 22:01:07 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=20WebSocket=20?= =?UTF-8?q?=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../assets/js/pages/manage/approve/index.vue | 41 ++++++----- .../pages/manage/components/DialogWrapper.vue | 41 ++++------- .../pages/manage/components/FileContent.vue | 73 +++++++++---------- resources/assets/js/store/actions.js | 34 ++------- resources/assets/js/store/state.js | 2 - 5 files changed, 78 insertions(+), 113 deletions(-) diff --git a/resources/assets/js/pages/manage/approve/index.vue b/resources/assets/js/pages/manage/approve/index.vue index 89c8ed2ed..ddeefecc5 100644 --- a/resources/assets/js/pages/manage/approve/index.vue +++ b/resources/assets/js/pages/manage/approve/index.vue @@ -341,7 +341,7 @@ export default { } }, computed: { - ...mapState(['wsMsg', 'userInfo', 'userIsAdmin', 'windowWidth', 'formOptions']), + ...mapState(['userInfo', 'userIsAdmin', 'windowWidth', 'formOptions']), departmentList() { let departmentNames = (this.userInfo.department_name || '').split(','); return (this.userInfo.department || []).map((h, index) => { @@ -358,24 +358,6 @@ export default { this.init() } }, - wsMsg: { - handler(info) { - const {type, action, mode, data} = info; - switch (type) { - case 'approve': - if (action == 'unread') { - this.tabsClick(); - } - break; - case 'dialog': - if (mode == 'add' && data?.msg?.text?.indexOf('open-approve-details') != -1) { - this.tabsClick(); - } - break; - } - }, - deep: true, - }, addShow(val) { if (!val) { this.addData.other = "" @@ -396,6 +378,10 @@ export default { mounted() { this.tabsValue = "unread" this.init() + emitter.on('websocketMsg', this.onWebsocketMsg) + }, + beforeDestroy() { + emitter.off('websocketMsg', this.onWebsocketMsg) }, methods: { init() { @@ -409,6 +395,23 @@ export default { this.isShowIcon = this.windowWidth < 515 }, + // 收到websocket消息 + onWebsocketMsg(info) { + const {type, action, mode, data} = info; + switch (type) { + case 'approve': + if (action == 'unread') { + this.tabsClick(); + } + break; + case 'dialog': + if (mode == 'add' && data?.msg?.text?.indexOf('open-approve-details') != -1) { + this.tabsClick(); + } + break; + } + }, + // 获取流程列表 getProcdefList() { return new Promise((resolve, reject) => { diff --git a/resources/assets/js/pages/manage/components/DialogWrapper.vue b/resources/assets/js/pages/manage/components/DialogWrapper.vue index 1486d202d..50b974804 100644 --- a/resources/assets/js/pages/manage/components/DialogWrapper.vue +++ b/resources/assets/js/pages/manage/components/DialogWrapper.vue @@ -821,13 +821,13 @@ export default { }, mounted() { - this.subMsgListener() + emitter.on('websocketMsg', this.onWebsocketMsg); emitter.on('dialogMsgChange', this.onMsgChange); }, beforeDestroy() { emitter.off('dialogMsgChange', this.onMsgChange); - this.subMsgListener(true) + emitter.off('websocketMsg', this.onWebsocketMsg); this.generateUnreadData(this.dialogId) // if (!this.isChildComponent) { @@ -1522,29 +1522,6 @@ export default { this.waitUnreadData.set(dialog_id, $A.getLastSameElements(ids, ens)) }, - /** - * 订阅消息(用于独立窗口) - * @param unsubscribe - */ - subMsgListener(unsubscribe = false) { - if (!$A.isSubElectron) { - return - } - if (unsubscribe) { - this.$store.dispatch('websocketMsgListener', 'DialogWrapper') - } else { - this.$store.dispatch('websocketMsgListener', { - name: 'DialogWrapper', - callback: (msgDetail) => { - const {type, mode, data} = msgDetail; - if (type === 'dialog' && mode === 'add') { - this.tempMsgs.push(data) - } - } - }) - } - }, - /** * 发送数据处理 * @param data @@ -1920,6 +1897,20 @@ export default { } }, + /** + * 收到websocket消息 + * @param msgDetail + */ + onWebsocketMsg(msgDetail) { + if (!$A.isSubElectron) { + return + } + const {type, mode, data} = msgDetail; + if (type === 'dialog' && mode === 'add') { + this.tempMsgs.push(data) + } + }, + /** * 消息变化处理 * @param data diff --git a/resources/assets/js/pages/manage/components/FileContent.vue b/resources/assets/js/pages/manage/components/FileContent.vue index 5f9e48d4b..fea095b7b 100644 --- a/resources/assets/js/pages/manage/components/FileContent.vue +++ b/resources/assets/js/pages/manage/components/FileContent.vue @@ -125,9 +125,9 @@