From bf941b7ec46dc87223b69905b68901c99ff72fce Mon Sep 17 00:00:00 2001 From: kuaifan Date: Sun, 19 Feb 2023 17:39:18 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E6=95=B0=E9=87=8F=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../assets/js/components/Mobile/Tabbar.vue | 26 ++++++++----- resources/assets/js/functions/web.js | 24 ++++++++++-- resources/assets/js/pages/manage.vue | 14 +++++-- .../pages/manage/components/DialogWrapper.vue | 6 +-- .../pages/manage/components/FileContent.vue | 2 +- .../pages/manage/components/ProjectPanel.vue | 2 +- .../js/pages/manage/components/TaskDetail.vue | 2 +- .../assets/js/pages/manage/messenger.vue | 39 ++++++++----------- .../sass/pages/components/project-panel.scss | 1 + 9 files changed, 70 insertions(+), 46 deletions(-) diff --git a/resources/assets/js/components/Mobile/Tabbar.vue b/resources/assets/js/components/Mobile/Tabbar.vue index 8ad4777d2..7e6af0573 100644 --- a/resources/assets/js/components/Mobile/Tabbar.vue +++ b/resources/assets/js/components/Mobile/Tabbar.vue @@ -119,11 +119,11 @@ export default { num += $A.getDialogUnread(dialog, false); mention += $A.getDialogMention(dialog); }) - if (num > 99) { - num = "99+" + if (num > 999) { + num = "999+" } - if (mention > 99) { - mention = "99+" + if (mention > 999) { + mention = "999+" } const todoNum = this.msgTodoTotal // 待办 if (todoNum) { @@ -135,10 +135,16 @@ export default { } return todoNum; } - if (!num) { - return ""; + if (num) { + if (mention) { + return `${num}·@${mention}` + } + return String(num) } - return mention ? `${num}·@${mention}` : String(num); + if (mention) { + return `@${mention}` + } + return ""; }, /** @@ -148,7 +154,7 @@ export default { msgAllUnread() { let num = 0; this.cacheDialogs.some(dialog => { - num += $A.getDialogUnread(dialog, false); + num += $A.getDialogNum(dialog); }) return num; }, @@ -160,8 +166,8 @@ export default { msgTodoTotal() { let todoNum = this.cacheDialogs.reduce((total, current) => total + (current.todo_num || 0), 0) if (todoNum > 0) { - if (todoNum > 99) { - todoNum = "99+" + if (todoNum > 999) { + todoNum = "999+" } else if (todoNum === 1) { todoNum = "" } diff --git a/resources/assets/js/functions/web.js b/resources/assets/js/functions/web.js index 3dcd280d0..0c61004d4 100755 --- a/resources/assets/js/functions/web.js +++ b/resources/assets/js/functions/web.js @@ -629,15 +629,31 @@ return this.dialogTags(dialog).find(({color}) => color == 'success'); }, + /** + * 返回对话未读数量(不含免打扰,但如果免打扰中有@则返回@数量) + * @param dialog + * @returns {*|number} + */ + getDialogNum(dialog) { + if (!dialog) { + return 0 + } + const unread = !dialog.silence ? dialog.unread : 0 + return unread || dialog.mention || dialog.mark_unread || 0 + }, + /** * 返回对话未读数量 * @param dialog - * @param containSilence + * @param containSilence 是否包含免打扰消息(true:包含, false:不包含) * @returns {*|number} */ getDialogUnread(dialog, containSilence) { - const unread = containSilence || !dialog.silence ? dialog.unread : 0 - return dialog ? (unread || dialog.mark_unread || 0) : 0 + if (!dialog) { + return 0 + } + const unread = (containSilence || !dialog.silence) ? dialog.unread : 0 + return unread || dialog.mark_unread || 0 }, /** @@ -646,7 +662,7 @@ * @returns {*|number} */ getDialogMention(dialog) { - return dialog ? (dialog.mention || 0) : 0 + return dialog?.mention || 0 }, /** diff --git a/resources/assets/js/pages/manage.vue b/resources/assets/js/pages/manage.vue index b29722bbf..772e01c18 100644 --- a/resources/assets/js/pages/manage.vue +++ b/resources/assets/js/pages/manage.vue @@ -477,10 +477,16 @@ export default { } return todoNum; } - if (!num) { - return ""; + if (num) { + if (mention) { + return `${num}·@${mention}` + } + return String(num) } - return mention ? `${num}·@${mention}` : String(num); + if (mention) { + return `@${mention}` + } + return ""; }, /** @@ -490,7 +496,7 @@ export default { msgAllUnread() { let num = 0; this.cacheDialogs.some(dialog => { - num += $A.getDialogUnread(dialog, false); + num += $A.getDialogNum(dialog); }) return num; }, diff --git a/resources/assets/js/pages/manage/components/DialogWrapper.vue b/resources/assets/js/pages/manage/components/DialogWrapper.vue index e011fed9e..71ae7a117 100644 --- a/resources/assets/js/pages/manage/components/DialogWrapper.vue +++ b/resources/assets/js/pages/manage/components/DialogWrapper.vue @@ -726,13 +726,13 @@ export default { msgUnreadOnly() { let num = 0; this.cacheDialogs.some(dialog => { - num += $A.getDialogUnread(dialog, false); + num += $A.getDialogNum(dialog); }) if (num <= 0) { return ''; } - if (num > 99) { - num = "99+" + if (num > 999) { + num = "999+" } return String(num); }, diff --git a/resources/assets/js/pages/manage/components/FileContent.vue b/resources/assets/js/pages/manage/components/FileContent.vue index 8f4dcd24b..1987482fd 100644 --- a/resources/assets/js/pages/manage/components/FileContent.vue +++ b/resources/assets/js/pages/manage/components/FileContent.vue @@ -30,7 +30,7 @@
  • -
  • {{editUser.length > 99 ? '99+' : editUser.length}}
  • +
  • {{editUser.length > 999 ? '...' : editUser.length}}
  • diff --git a/resources/assets/js/pages/manage/components/ProjectPanel.vue b/resources/assets/js/pages/manage/components/ProjectPanel.vue index c3015a0b0..657bdaa67 100644 --- a/resources/assets/js/pages/manage/components/ProjectPanel.vue +++ b/resources/assets/js/pages/manage/components/ProjectPanel.vue @@ -592,7 +592,7 @@ export default { msgUnread() { const {cacheDialogs, projectData} = this; const dialog = cacheDialogs.find(({id}) => id === projectData.dialog_id); - return dialog ? $A.getDialogUnread(dialog, false) : 0; + return $A.getDialogNum(dialog); }, panelTask() { diff --git a/resources/assets/js/pages/manage/components/TaskDetail.vue b/resources/assets/js/pages/manage/components/TaskDetail.vue index 0402f4bbb..4d0566339 100644 --- a/resources/assets/js/pages/manage/components/TaskDetail.vue +++ b/resources/assets/js/pages/manage/components/TaskDetail.vue @@ -422,7 +422,7 @@
    diff --git a/resources/assets/js/pages/manage/messenger.vue b/resources/assets/js/pages/manage/messenger.vue index c4d81f37e..a1a4e29c4 100644 --- a/resources/assets/js/pages/manage/messenger.vue +++ b/resources/assets/js/pages/manage/messenger.vue @@ -350,27 +350,22 @@ export default { msgUnread() { return function (type) { - let num = 0; + let num = 0 this.cacheDialogs.some((dialog) => { - let unread = $A.getDialogUnread(dialog, false); - if (unread) { - switch (type) { - case 'project': - case 'task': - if (type == dialog.group_type) { - num += unread; - } - break; - case 'user': - if (type == dialog.type) { - num += unread; - } - break; - default: - num += unread; - break; - } + switch (type) { + case 'project': + case 'task': + if (type != dialog.group_type) { + return false + } + break; + case 'user': + if (type != dialog.type) { + return false + } + break; } + num += $A.getDialogNum(dialog); }); return num; } @@ -481,7 +476,7 @@ export default { onActive(type) { if (this.dialogActive == type) { // 再次点击滚动到未读条目 - const dialog = this.dialogList.find(dialog => $A.getDialogUnread(dialog, false) > 0) + const dialog = this.dialogList.find(dialog => $A.getDialogNum(dialog) > 0) if (dialog) { $A.scrollIntoViewIfNeeded(this.$refs[`dialog_${dialog.id}`][0]) } @@ -532,7 +527,7 @@ export default { }, filterDialog(dialog) { - if ($A.getDialogUnread(dialog, false) > 0 || dialog.id == this.dialogId || dialog.top_at || dialog.todo_num > 0) { + if ($A.getDialogNum(dialog) > 0 || dialog.id == this.dialogId || dialog.top_at || dialog.todo_num > 0) { return true } if (dialog.name === undefined || dialog.dialog_delete === 1) { @@ -643,7 +638,7 @@ export default { }, formatTodoNum(num) { - return num > 99 ? '99+' : (num > 1 ? num : '') + return num > 999 ? '999+' : (num > 1 ? num : '') }, formatMsgEmojiDesc(data) { diff --git a/resources/assets/sass/pages/components/project-panel.scss b/resources/assets/sass/pages/components/project-panel.scss index 16cfd87ae..3b7315587 100644 --- a/resources/assets/sass/pages/components/project-panel.scss +++ b/resources/assets/sass/pages/components/project-panel.scss @@ -105,6 +105,7 @@ position: absolute; top: -6px; left: 20px; + z-index: 1; transform: scale(0.8); } .search-input {