From 6579a592079afc5ab52a7dd0e5308d00521505e5 Mon Sep 17 00:00:00 2001 From: kuaifan Date: Sun, 6 Jun 2021 20:07:22 +0800 Subject: [PATCH] no message --- app/Http/Controllers/Api/DialogController.php | 11 +++++++ app/Models/WebSocketDialogMsg.php | 1 + app/Tasks/WebSocketDialogMsgTask.php | 1 + resources/assets/js/pages/manage.vue | 29 +++++++++++++++++-- .../pages/manage/components/DialogWrapper.vue | 16 ++++++++++ .../pages/manage/components/ProjectDialog.vue | 2 +- .../assets/js/pages/manage/messenger.vue | 13 +++++---- resources/assets/js/pages/manage/project.vue | 2 +- resources/assets/js/store/mutations.js | 25 +++++++++++++++- resources/assets/js/store/state.js | 6 ++-- resources/assets/sass/main.scss | 7 +---- 11 files changed, 93 insertions(+), 20 deletions(-) diff --git a/app/Http/Controllers/Api/DialogController.php b/app/Http/Controllers/Api/DialogController.php index 4356b459..db5b9033 100755 --- a/app/Http/Controllers/Api/DialogController.php +++ b/app/Http/Controllers/Api/DialogController.php @@ -111,6 +111,17 @@ class DialogController extends AbstractController return Base::retSuccess('success', $data); } + /** + * 未读消息 + */ + public function msg__unread() + { + $unread = WebSocketDialogMsgRead::whereUserid(User::token2userid())->whereReadAt(null)->count(); + return Base::retSuccess('success', [ + 'unread' => $unread, + ]); + } + /** * 发送消息 * diff --git a/app/Models/WebSocketDialogMsg.php b/app/Models/WebSocketDialogMsg.php index 899acf5e..02f0a547 100644 --- a/app/Models/WebSocketDialogMsg.php +++ b/app/Models/WebSocketDialogMsg.php @@ -119,6 +119,7 @@ class WebSocketDialogMsg extends AbstractModel 'userid' => $this->userid, 'msg' => [ 'type' => 'dialog', + 'mode' => 'up', 'data' => $this->toArray(), ] ]); diff --git a/app/Tasks/WebSocketDialogMsgTask.php b/app/Tasks/WebSocketDialogMsgTask.php index 1483bc72..f3d97b82 100644 --- a/app/Tasks/WebSocketDialogMsgTask.php +++ b/app/Tasks/WebSocketDialogMsgTask.php @@ -64,6 +64,7 @@ class WebSocketDialogMsgTask extends AbstractTask 'userid' => $pushIds, 'msg' => [ 'type' => 'dialog', + 'mode' => 'add', 'data' => $this->dialogMsgArray, ] ]); diff --git a/resources/assets/js/pages/manage.vue b/resources/assets/js/pages/manage.vue index af1cab5b..f6b4dc80 100644 --- a/resources/assets/js/pages/manage.vue +++ b/resources/assets/js/pages/manage.vue @@ -17,6 +17,7 @@
  • +
  • @@ -141,10 +142,15 @@ margin-top: -1px; } .menu-title { + flex: 1; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } + .menu-badge { + margin-left: 12px; + transform: scale(0.9); + } &.menu-project { display: flex; flex-direction: column; @@ -251,20 +257,39 @@ export default { columns: [], } }, + mounted() { this.$store.commit('getUserInfo'); }, + deactivated() { this.addShow = false; }, + computed: { - ...mapState(['projectList']), + ...mapState(['wsMsg', 'dialogShow', 'dialogMsgUnread', 'projectList']), }, + watch: { '$route' (route) { this.curPath = route.path; - } + }, + + /** + * 收到新消息 + * @param msg + */ + wsMsg(msg) { + const {type, mode} = msg; + if (type === "dialog" && mode === "add") { + if (this.dialogShow) { + return; + } + this.$store.state.dialogMsgUnread++; + } + }, }, + methods: { initLanguage() { this.columns = [{ diff --git a/resources/assets/js/pages/manage/components/DialogWrapper.vue b/resources/assets/js/pages/manage/components/DialogWrapper.vue index 23011084..de250eca 100644 --- a/resources/assets/js/pages/manage/components/DialogWrapper.vue +++ b/resources/assets/js/pages/manage/components/DialogWrapper.vue @@ -65,6 +65,22 @@ export default { } }, + mounted() { + this.$store.state.dialogShow = true; + }, + + destroyed() { + this.$store.state.dialogShow = false; + }, + + activated() { + this.$store.state.dialogShow = true; + }, + + deactivated() { + this.$store.state.dialogShow = false; + }, + computed: { ...mapState(['userId', 'dialogId', 'dialogDetail', 'dialogMsgLoad', 'dialogMsgList']), diff --git a/resources/assets/js/pages/manage/components/ProjectDialog.vue b/resources/assets/js/pages/manage/components/ProjectDialog.vue index 10f216b3..f528f2d4 100644 --- a/resources/assets/js/pages/manage/components/ProjectDialog.vue +++ b/resources/assets/js/pages/manage/components/ProjectDialog.vue @@ -108,7 +108,7 @@ export default { methods: { getMsg() { if (this.projectChatShow && this.projectDetail.dialog_id) { - this.$store.commit('getDialogMsg', this.projectDetail.dialog_id); + this.$store.commit('getDialogMsgList', this.projectDetail.dialog_id); } } } diff --git a/resources/assets/js/pages/manage/messenger.vue b/resources/assets/js/pages/manage/messenger.vue index a60d9501..9d06aa19 100644 --- a/resources/assets/js/pages/manage/messenger.vue +++ b/resources/assets/js/pages/manage/messenger.vue @@ -74,7 +74,7 @@ export default { }, computed: { - ...mapState(['dialogId', 'wsMsg']), + ...mapState(['dialogId', 'dialogShow', 'wsMsg']), dialogLists() { const {dialogKey} = this; @@ -99,9 +99,9 @@ export default { * @param msg */ wsMsg(msg) { - const {type, data} = msg; - if (type === "dialog") { - if (this.dialogId == data.dialog_id) { + const {type, mode, data} = msg; + if (type === "dialog" && mode === "add") { + if (this.dialogShow && this.dialogId == data.dialog_id) { return; } let dialog = this.dialogList.find(({id}) => id == data.dialog_id); @@ -120,7 +120,8 @@ export default { */ dialogId(dialog_id) { let dialog = this.dialogList.find(({id}) => id == dialog_id); - if (dialog) { + if (dialog && dialog.unread > 0) { + this.$store.state.dialogMsgUnread-= dialog.unread; this.$set(dialog, 'unread', 0); } } @@ -128,7 +129,7 @@ export default { methods: { openDialog(dialog) { - this.$store.commit('getDialogMsg', dialog.id); + this.$store.commit('getDialogMsgList', dialog.id); }, getDialogLists() { diff --git a/resources/assets/js/pages/manage/project.vue b/resources/assets/js/pages/manage/project.vue index 2230e373..bb5c3a02 100644 --- a/resources/assets/js/pages/manage/project.vue +++ b/resources/assets/js/pages/manage/project.vue @@ -2,7 +2,7 @@
    {{ $L('项目面板') }} - +
    diff --git a/resources/assets/js/store/mutations.js b/resources/assets/js/store/mutations.js index 60b38c68..a7833118 100644 --- a/resources/assets/js/store/mutations.js +++ b/resources/assets/js/store/mutations.js @@ -64,6 +64,7 @@ export default { state.userToken = userInfo.token; state.userIsAdmin = state.method.inArray('admin', userInfo.identity); state.method.setStorage('userInfo', state.userInfo); + this.commit('getDialogMsgUnread'); this.commit('getProjectList'); this.commit('wsConnection'); }, @@ -215,7 +216,7 @@ export default { * @param state * @param dialog_id */ - getDialogMsg(state, dialog_id) { + getDialogMsgList(state, dialog_id) { if (state.method.runNum(dialog_id) === 0) { return; } @@ -273,6 +274,28 @@ export default { }); }, + /** + * 获取未读信息 + * @param state + */ + getDialogMsgUnread(state) { + const unread = state.dialogMsgUnread; + $A.apiAjax({ + url: 'dialog/msg/unread', + success: ({ret, data, msg}) => { + if (ret === 1) { + if (unread === state.dialogMsgUnread) { + state.dialogMsgUnread = data.unread; + } else { + setTimeout(() => { + this.commit('getDialogMsgUnread'); + }, 200); + } + } + } + }); + }, + /** * 根据消息ID 删除 或 替换 对话数据 * @param state diff --git a/resources/assets/js/store/state.js b/resources/assets/js/store/state.js index 8f6d5a58..6be5eeb4 100644 --- a/resources/assets/js/store/state.js +++ b/resources/assets/js/store/state.js @@ -144,9 +144,7 @@ const method = { }; // 方法类 -const state = { - method -}; +const state = { method }; // Boolean变量 [ @@ -188,9 +186,11 @@ state.projectMsgUnread = 0; // 会话消息 state.dialogId = 0; +state.dialogShow = false; state.dialogDetail = {}; state.dialogMsgLoad = 0; state.dialogMsgList = []; +state.dialogMsgUnread = 0; // 任务优先级 state.taskPriority = []; diff --git a/resources/assets/sass/main.scss b/resources/assets/sass/main.scss index fd82731f..14325589 100755 --- a/resources/assets/sass/main.scss +++ b/resources/assets/sass/main.scss @@ -1122,12 +1122,7 @@ body { top: 10px; left: 42px; font-size: 12px; - .ivu-badge-count { - height: 18px; - min-width: 18px; - line-height: 16px; - padding: 0 4px; - } + transform: scale(0.8); } } }