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 @@