From 883e5c26d96e050c04313f4c490fec200d1fa726 Mon Sep 17 00:00:00 2001 From: kuaifan Date: Fri, 8 Jul 2022 14:00:16 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E6=98=BE=E7=A4=BA=E5=BE=85=E5=8A=9E?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E6=95=B0=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Api/DialogController.php | 2 +- app/Models/WebSocketDialog.php | 2 +- .../assets/js/components/Mobile/Tabbar.vue | 13 ++++++++++-- resources/assets/js/pages/manage.vue | 20 +++++++++++++++---- .../pages/manage/components/DialogWrapper.vue | 6 +++++- .../assets/js/pages/manage/messenger.vue | 10 +++++----- resources/assets/js/store/actions.js | 4 ++-- 7 files changed, 41 insertions(+), 16 deletions(-) diff --git a/app/Http/Controllers/Api/DialogController.php b/app/Http/Controllers/Api/DialogController.php index 7ccb7bca0..1b4e5b8f5 100755 --- a/app/Http/Controllers/Api/DialogController.php +++ b/app/Http/Controllers/Api/DialogController.php @@ -403,7 +403,7 @@ class DialogController extends AbstractController // if ($reDialog) { $data['dialog'] = $dialog->formatData($user->userid, true); - $data['todo'] = $data['dialog']->has_todo ? WebSocketDialogMsgTodo::whereDialogId($dialog->id)->whereUserid($user->userid)->whereDoneAt(null)->orderByDesc('id')->take(50)->get() : []; + $data['todo'] = $data['dialog']->todo_num > 0 ? WebSocketDialogMsgTodo::whereDialogId($dialog->id)->whereUserid($user->userid)->whereDoneAt(null)->orderByDesc('id')->take(50)->get() : []; } return Base::retSuccess('success', $data); } diff --git a/app/Models/WebSocketDialog.php b/app/Models/WebSocketDialog.php index aca7c14ba..5b9c4f68b 100644 --- a/app/Models/WebSocketDialog.php +++ b/app/Models/WebSocketDialog.php @@ -81,7 +81,7 @@ class WebSocketDialog extends AbstractModel $builder = WebSocketDialogUser::whereDialogId($this->id); $this->people = $builder->count(); // 有待办 - $this->has_todo = WebSocketDialogMsgTodo::whereDialogId($this->id)->whereUserid($userid)->whereDoneAt(null)->exists(); + $this->todo_num = WebSocketDialogMsgTodo::whereDialogId($this->id)->whereUserid($userid)->whereDoneAt(null)->count(); } // 对方信息 $this->dialog_user = null; diff --git a/resources/assets/js/components/Mobile/Tabbar.vue b/resources/assets/js/components/Mobile/Tabbar.vue index 2091ede34..11ac498b0 100644 --- a/resources/assets/js/components/Mobile/Tabbar.vue +++ b/resources/assets/js/components/Mobile/Tabbar.vue @@ -88,8 +88,8 @@ export default { }, msgUnreadMention() { - if (this.cacheDialogs.find(item => item.has_todo)) { - return this.$L("待办") + if (this.msgTodoTotal) { + return this.msgTodoTotal } let num = 0; let mention = 0; @@ -112,6 +112,15 @@ export default { return String(num); }, + msgTodoTotal() { + let todoNum = this.cacheDialogs.reduce((total, current) => total + (current.todo_num || 0), 0) + if (todoNum > 0) { + if (todoNum > 99) todoNum = "99+" + return `${this.$L("待办")}${todoNum}` + } + return null; + }, + activeName() { if (this.isMore || ['manage-calendar', 'manage-file', 'manage-setting'].includes(this.routeName)) { return 'more'; diff --git a/resources/assets/js/pages/manage.vue b/resources/assets/js/pages/manage.vue index 3bf554dc3..2d4bd877a 100644 --- a/resources/assets/js/pages/manage.vue +++ b/resources/assets/js/pages/manage.vue @@ -510,8 +510,8 @@ export default { }, msgUnreadMention() { - if (this.cacheDialogs.find(item => item.has_todo)) { - return this.$L("待办") + if (this.msgTodoTotal) { + return this.msgTodoTotal } let num = 0; let mention = 0; @@ -542,8 +542,20 @@ export default { return num; }, + msgTodoTotal() { + let todoNum = this.cacheDialogs.reduce((total, current) => total + (current.todo_num || 0), 0) + if (todoNum > 0) { + if (todoNum > 9) todoNum = "9+" + return `${this.$L("待办")}${todoNum}` + } + return null; + }, + unreadTotal() { if (this.userId > 0) { + if (this.msgTodoTotal) { + return this.msgTodoTotal + } return this.msgAllUnread + this.dashboardTask.overdue_count + this.reportUnreadNumber } else { return 0 @@ -696,9 +708,9 @@ export default { }, unreadTotal: { - handler(num) { + handler(val) { if (this.$Electron) { - this.$Electron.sendMessage('setDockBadge', num); + this.$Electron.sendMessage('setDockBadge', val); } }, immediate: true diff --git a/resources/assets/js/pages/manage/components/DialogWrapper.vue b/resources/assets/js/pages/manage/components/DialogWrapper.vue index d5ea6986d..866e52ab9 100644 --- a/resources/assets/js/pages/manage/components/DialogWrapper.vue +++ b/resources/assets/js/pages/manage/components/DialogWrapper.vue @@ -579,7 +579,7 @@ export default { }, todoList() { - if (!this.dialogData.has_todo) { + if (!this.dialogData.todo_num) { return [] } return this.dialogTodos.filter(item => !item.done_at && item.dialog_id == this.dialogId).sort((a, b) => { @@ -1079,6 +1079,10 @@ export default { id: this.todoViewId, done_at: $A.formatDate("Y-m-d H:i:s") }) + this.$store.dispatch("saveDialog", { + id: this.dialogId, + todo_num: this.todoList.length + }) if (data.add) { this.sendSuccess(data.add) } diff --git a/resources/assets/js/pages/manage/messenger.vue b/resources/assets/js/pages/manage/messenger.vue index 1fee7ddc4..6f235f2cd 100644 --- a/resources/assets/js/pages/manage/messenger.vue +++ b/resources/assets/js/pages/manage/messenger.vue @@ -60,7 +60,7 @@
-
[{{$L('待办')}}]
+
[{{$L('待办')}}{{dialog.todo_num > 99 ? '99+' : dialog.todo_num}}]
[@{{$A.getDialogMention(dialog)}}]