From 2bd666efe7b4f2dc2bd250bcaf0b9abbf23b2584 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9F=A6=E8=8D=A3=E8=B6=85?= <302645122@qq.com> Date: Fri, 18 Feb 2022 10:10:17 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E6=B6=88=E6=81=AF=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E9=9C=80=E6=94=AF=E6=8C=81=E5=A4=9A=E4=B8=AA=E7=BD=AE=E9=A1=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Api/DialogController.php | 8 ++--- app/Models/WebSocketDialogUser.php | 1 + ...253_web_socket_dialog_users_add_top_at.php | 34 +++++++++++++++++++ .../assets/js/pages/manage/messenger.vue | 6 ++-- 4 files changed, 41 insertions(+), 8 deletions(-) create mode 100644 database/migrations/2022_02_18_095253_web_socket_dialog_users_add_top_at.php diff --git a/app/Http/Controllers/Api/DialogController.php b/app/Http/Controllers/Api/DialogController.php index 04102382..e10720c9 100755 --- a/app/Http/Controllers/Api/DialogController.php +++ b/app/Http/Controllers/Api/DialogController.php @@ -40,7 +40,7 @@ class DialogController extends AbstractController { $user = User::auth(); // - $list = WebSocketDialog::select(['web_socket_dialogs.*','u.top']) + $list = WebSocketDialog::select(['web_socket_dialogs.*','u.top','u.top_at']) ->join('web_socket_dialog_users as u', 'web_socket_dialogs.id', '=', 'u.dialog_id') ->where('u.userid', $user->userid) ->orderByDesc('u.top') @@ -500,12 +500,10 @@ class DialogController extends AbstractController if (!$dialogUser) { return Base::retError("会话不存在"); } - WebSocketDialogUser::whereUserid($user->userid) - ->update([ - 'top' => 0 - ]); $top = $dialogUser->top === 1 ? 0 : 1; + $topAt = $dialogUser->top === 1 ? null : Carbon::now(); $dialogUser->top = $top; + $dialogUser->top_at = $topAt; $dialogUser->save(); return Base::retSuccess("success", $dialogId); } diff --git a/app/Models/WebSocketDialogUser.php b/app/Models/WebSocketDialogUser.php index 9a0265fb..619a7e81 100644 --- a/app/Models/WebSocketDialogUser.php +++ b/app/Models/WebSocketDialogUser.php @@ -9,6 +9,7 @@ namespace App\Models; * @property int|null $dialog_id 对话ID * @property int|null $userid 会员ID * @property int|null $top 是否置顶:0否,1是 + * @property \Illuminate\Support\Carbon|null $top_at 置顶时间 * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * @method static \Illuminate\Database\Eloquent\Builder|WebSocketDialogUser newModelQuery() diff --git a/database/migrations/2022_02_18_095253_web_socket_dialog_users_add_top_at.php b/database/migrations/2022_02_18_095253_web_socket_dialog_users_add_top_at.php new file mode 100644 index 00000000..3e625d7d --- /dev/null +++ b/database/migrations/2022_02_18_095253_web_socket_dialog_users_add_top_at.php @@ -0,0 +1,34 @@ +timestamp('top_at')->nullable()->after('top')->comment('置顶时间'); + } + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('web_socket_dialog_users', function (Blueprint $table) { + $table->dropColumn("top_at"); + }); + } +} diff --git a/resources/assets/js/pages/manage/messenger.vue b/resources/assets/js/pages/manage/messenger.vue index 305f9abb..345714ef 100644 --- a/resources/assets/js/pages/manage/messenger.vue +++ b/resources/assets/js/pages/manage/messenger.vue @@ -159,7 +159,7 @@ export default { if (dialogActive == '' && dialogKey == '') { return this.cacheDialogs.filter(dialog => this.filterDialog(dialog)).sort((a, b) => { if (a.top || b.top) { - return b.top - a.top; + return $A.Date(b.top_at) - $A.Date(a.top_at); } return $A.Date(b.last_at) - $A.Date(a.last_at); }); @@ -195,7 +195,7 @@ export default { return true; }).sort((a, b) => { if (a.top || b.top) { - return b.top - a.top; + return $A.Date(b.top_at) - $A.Date(a.top_at); } return $A.Date(b.last_at) - $A.Date(a.last_at); }) @@ -311,7 +311,7 @@ export default { }, filterDialog(dialog) { - if (dialog.unread > 0 || dialog.id == this.dialogId) { + if (dialog.unread > 0 || dialog.id == this.dialogId || dialog.top === 1) { return true } if (dialog.name === undefined) {