From c27a15fce2020c36eb7658dfda54b5c1f4eedd99 Mon Sep 17 00:00:00 2001 From: kuaifan Date: Sun, 5 Mar 2023 23:00:35 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E5=88=86=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../assets/js/pages/manage/messenger.vue | 90 +++++++++++++++++-- .../assets/sass/pages/page-messenger.scss | 64 ++++++++++--- 2 files changed, 135 insertions(+), 19 deletions(-) diff --git a/resources/assets/js/pages/manage/messenger.vue b/resources/assets/js/pages/manage/messenger.vue index 66160ebe1..d841486e3 100644 --- a/resources/assets/js/pages/manage/messenger.vue +++ b/resources/assets/js/pages/manage/messenger.vue @@ -15,13 +15,30 @@
+ +
+ + +
+ + +
+
+
+
- - +
@@ -166,6 +183,8 @@ import ScrollerY from "../../components/ScrollerY"; import longpress from "../../directives/longpress"; import {Store} from "le5le-store"; +const MessengerObject = {menuHistory: []}; + export default { components: {ScrollerY, DialogWrapper}, directives: {longpress}, @@ -179,12 +198,15 @@ export default { dialogSearch: [], dialogActive: '', - dialogType: [ + dialogMenus: [ {type: '', name: '全部'}, {type: 'project', name: '项目'}, {type: 'task', name: '任务'}, - {type: 'user', name: '个人'}, + {type: 'user', name: '单聊'}, + {type: 'group', name: '群聊'}, + {type: 'bot', name: '机器人'}, ], + dialogHistory: MessengerObject.menuHistory, contactsKey: '', contactsLoad: 0, @@ -201,6 +223,11 @@ export default { } }, + async beforeRouteEnter(to, from, next) { + MessengerObject.menuHistory = await $A.IDBArray("dialogMenuHistory") + next() + }, + mounted() { const id = $A.runNum(this.$route.query.dialog_id); if (id > 0) { @@ -239,6 +266,35 @@ export default { return this.$route.name }, + computedType() { + const {dialogActive, dialogMenus, dialogHistory} = this + const types = [] + if (this.dialogHistory.includes(dialogActive)) { + types.push(...this.dialogHistory) + } else { + types.push('') + if (dialogActive) { + types.push(dialogActive) + } + dialogHistory.some(item => { + if (!types.includes(item)) { + types.push(item) + } + }); + ['project', 'task'].some(item => { + if (!types.includes(item)) { + types.push(item) + } + }) + this.dialogHistory = types.slice(0, 4) + $A.IDBSave("dialogMenuHistory", this.dialogHistory) + } + // + return this.dialogHistory.map(type => { + return dialogMenus.find(item => item.type == type) + }) + }, + dialogList() { const {dialogActive, dialogKey, dialogSearch} = this; if (dialogActive == '' && dialogKey == '') { @@ -277,12 +333,22 @@ export default { switch (dialogActive) { case 'project': case 'task': - if (dialog.group_type != dialogActive) { + if (dialogActive != dialog.group_type) { return false; } break; case 'user': - if (dialog.type != 'user' || dialog.bot) { + if (dialogActive != dialog.type || dialog.bot) { + return false; + } + break; + case 'group': + if (dialogActive != dialog.type || ['project', 'task'].includes(dialog.group_type)) { + return false; + } + break; + case 'bot': + if (!dialog.bot) { return false; } break; @@ -381,6 +447,16 @@ export default { return false } break; + case 'group': + if (type != dialog.type || ['project', 'task'].includes(dialog.group_type)) { + return false + } + break; + case 'bot': + if (!dialog.bot) { + return false; + } + break; } num += $A.getDialogNum(dialog); }); diff --git a/resources/assets/sass/pages/page-messenger.scss b/resources/assets/sass/pages/page-messenger.scss index b2f36193e..7b98881ee 100644 --- a/resources/assets/sass/pages/page-messenger.scss +++ b/resources/assets/sass/pages/page-messenger.scss @@ -62,25 +62,37 @@ .messenger-nav { display: flex; align-items: center; - justify-content: space-evenly; - padding: 2px 0 12px; + padding: 2px 10px 12px; > div { - max-width: 25%; - position: relative; + flex: 1; + flex-shrink: 0; + display: flex; + align-items: center; + justify-content: center; line-height: 1; padding: 0 6px; color: #888888; cursor: pointer; - .nav-num { - position: absolute; - top: -12px; - right: -8px; - transform: scale(0.7); + &.nav-menu { + max-width: 46px; + } + .nav-icon { + font-size: 16px; } .nav-title { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; + position: relative; + > em { + font-style: normal; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + .nav-num { + position: absolute; + top: -12px; + right: -8px; + transform: scale(0.7); + } } &.active { color: #555555; @@ -540,6 +552,34 @@ } } +.messenger-nav-menu { + transform: translateX(-4px); + .popper__arrow { + transform: translateX(2px); + } + .messenger-nav-item { + display: flex; + align-items: center; + &.active { + .nav-title { + font-weight: bold; + } + } + .nav-title { + flex: 1; + max-width: 88px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + margin-right: 12px; + } + .nav-num { + transform: scale(0.7); + transform-origin: center right; + } + } +} + @media (max-width: 768px) { .page-messenger { .messenger-wrapper {