From ec8d48292e6ec034344f9522bb8cf51a927f46ac Mon Sep 17 00:00:00 2001 From: kuaifan Date: Wed, 20 Nov 2024 20:35:01 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E9=98=85=E8=AF=BB=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pages/manage/components/DialogWrapper.vue | 59 +++++++++++-------- 1 file changed, 33 insertions(+), 26 deletions(-) diff --git a/resources/assets/js/pages/manage/components/DialogWrapper.vue b/resources/assets/js/pages/manage/components/DialogWrapper.vue index 06c5b439c..7442bb0c2 100644 --- a/resources/assets/js/pages/manage/components/DialogWrapper.vue +++ b/resources/assets/js/pages/manage/components/DialogWrapper.vue @@ -833,7 +833,7 @@ export default { scrollToBottomRefresh: false, // 滚动到底部重新获取消息 androidKeyboardVisible: false, // Android键盘是否可见 replyMsgAutoMention: false, // 允许回复消息后自动@ - waitUnreadData: {}, // 等待未读数据 + waitUnreadData: new Map(), // 等待未读数据 } }, @@ -844,6 +844,7 @@ export default { beforeDestroy() { this.subMsgListener(true) + this.generateUnreadData(this.dialogId) // if (!this.isChildComponent) { this.$store.dispatch('forgetInDialog', this._uid) @@ -1217,7 +1218,8 @@ export default { dialogId: { handler(dialog_id, old_id) { - this.getDialogBase(dialog_id, old_id) + this.getDialogBase(dialog_id) + this.generateUnreadData(old_id) // this.$store.dispatch('closeDialog', old_id) // @@ -1451,22 +1453,8 @@ export default { /** * 获取会话基本信息 * @param dialog_id - * @param old_id */ - getDialogBase(dialog_id, old_id = null) { - if (old_id) { - const ens = [] - const ids = this.allMsgs.filter(item => item.read_at === null && item.userid != this.userId).map(item => item.id) - const enters = this.$refs.scroller?.$el.querySelectorAll('.item-enter') || [] - for (const enter of enters) { - const id = $A.runNum(enter.querySelector(".dialog-view")?.getAttribute('data-id')); - if (id && !ids.includes(id)) { - ids.push(id) - } - } - this.waitUnreadData[old_id] = $A.getLastSameElements(ids, ens) - } - + getDialogBase(dialog_id) { if (!dialog_id) { return } @@ -1485,6 +1473,7 @@ export default { this.allMsgs = this.allMsgList this.errorId = 0 // + this.waitUnreadData.delete(dialog_id) this.getMsgs({ dialog_id, msg_id: this.msgId, @@ -1493,14 +1482,12 @@ export default { this.openId = dialog_id this.msgPrepared = true // - if (this.dialogId !== dialog_id) { - let unreadIds = this.waitUnreadData[dialog_id] || [] - if (unreadIds.length > 0) { - const ids = [...data.list.map(item => item.id)].reverse(); - $A.getLastSameElements(unreadIds, ids).forEach(id => { - this.$store.dispatch("dialogMsgRead", {id, dialog_id}) - }) - } + const unreadIds = this.waitUnreadData.get(dialog_id) || [] + if (unreadIds.length > 0) { + const ids = [...data.list.map(item => item.id)].reverse(); + $A.getLastSameElements(unreadIds, ids).forEach(id => { + this.$store.dispatch("dialogMsgRead", {id, dialog_id}) + }) } // setTimeout(_ => { @@ -1523,6 +1510,26 @@ export default { this.getUserApproveStatus() }, + /** + * 关闭会话前记录未读数据 + * @param dialog_id + */ + generateUnreadData(dialog_id) { + if (!dialog_id) { + return + } + const ens = [] + const ids = this.allMsgs.filter(item => item.read_at === null && item.userid != this.userId).map(item => item.id) + const enters = this.$refs.scroller?.$el.querySelectorAll('.item-enter') || [] + for (const enter of enters) { + const id = $A.runNum(enter.querySelector(".dialog-view")?.getAttribute('data-id')); + if (id && !ids.includes(id)) { + ids.push(id) + } + } + this.waitUnreadData.set(dialog_id, $A.getLastSameElements(ids, ens)) + }, + /** * 订阅消息(用于独立窗口) * @param unsubscribe @@ -2989,7 +2996,7 @@ export default { case "newTask": let content = $A.formatMsgBasic(this.operateItem.msg.text) - content = content.replace(/]*?src=(["'])(.*?)(_thumb\.(png|jpg|jpeg))*\1[^>]*?>/g, ``) + content = content.replace(/]*?src=(["'])([^"']+?)(_thumb\.(png|jpg|jpeg))?\1[^>]*?>/g, ``) content = content.replace(//g, `
  • `) content = content.replace(//g, `
  • `) content = content.replace(/]*>([\s\S]*?)<\/ol>/g, `
      $1
    `)