From 2ca3e04221ffb7e60a2a640a4e3fe0ae8e044b36 Mon Sep 17 00:00:00 2001 From: kuaifan Date: Sun, 6 Jun 2021 22:58:01 +0800 Subject: [PATCH] no message --- app/Http/Controllers/Api/DialogController.php | 39 +++++++++++---- app/Models/WebSocketDialog.php | 12 +++-- app/Models/WebSocketDialogMsg.php | 47 ++----------------- resources/assets/js/components/UserAvatar.vue | 13 ++++- .../pages/manage/components/DialogWrapper.vue | 2 +- .../assets/js/pages/manage/messenger.vue | 5 +- resources/assets/js/store/mutations.js | 27 +++++++++++ resources/assets/sass/main.scss | 36 +++++++++++--- 8 files changed, 112 insertions(+), 69 deletions(-) diff --git a/app/Http/Controllers/Api/DialogController.php b/app/Http/Controllers/Api/DialogController.php index db5b9033..54301d33 100755 --- a/app/Http/Controllers/Api/DialogController.php +++ b/app/Http/Controllers/Api/DialogController.php @@ -72,6 +72,33 @@ class DialogController extends AbstractController return Base::retSuccess('success', $item); } + /** + * 打开会话 + * + * @apiParam {Number} userid 对话会员ID + */ + public function open__user() + { + $user = User::authE(); + if (Base::isError($user)) { + return $user; + } else { + $user = User::IDE($user['data']); + } + // + $userid = intval(Request::input('userid')); + // + $dialog = WebSocketDialog::checkUserDialog($user->userid, $userid); + if (empty($dialog)) { + return Base::retError('打开会话失败'); + } + $data = WebSocketDialog::formatData(WebSocketDialog::find($dialog->id), $user->userid); + if (empty($data)) { + return Base::retError('打开会话错误'); + } + return Base::retSuccess('success', $data); + } + /** * 消息列表 * @@ -162,11 +189,7 @@ class DialogController extends AbstractController 'text' => $text ]; // - if ($dialog->type == 'group') { - return WebSocketDialogMsg::addGroupMsg($dialog_id, 'text', $msg, $user->userid, $extra_int, $extra_str); - } else { - return WebSocketDialogMsg::addUserMsg($dialog_id, 'text', $msg, $user->userid, $extra_int, $extra_str); - } + return WebSocketDialogMsg::sendMsg($dialog_id, 'text', $msg, $user->userid, $extra_int, $extra_str); } /** @@ -260,11 +283,7 @@ class DialogController extends AbstractController $msg = $fileData; $msg['size'] *= 1024; // - if ($dialog->type == 'group') { - return WebSocketDialogMsg::addGroupMsg($dialog_id, 'file', $msg, $user->userid, $extra_int, $extra_str); - } else { - return WebSocketDialogMsg::addUserMsg($dialog_id, 'file', $msg, $user->userid, $extra_int, $extra_str); - } + return WebSocketDialogMsg::sendMsg($dialog_id, 'file', $msg, $user->userid, $extra_int, $extra_str); } } diff --git a/app/Models/WebSocketDialog.php b/app/Models/WebSocketDialog.php index 2f671d6f..00e29fa4 100644 --- a/app/Models/WebSocketDialog.php +++ b/app/Models/WebSocketDialog.php @@ -35,10 +35,13 @@ class WebSocketDialog extends AbstractModel * 格式化对话 * @param WebSocketDialog $dialog * @param int $userid 会员ID - * @return WebSocketDialog + * @return self|null */ public static function formatData(WebSocketDialog $dialog, $userid) { + if (empty($dialog)) { + return null; + } // 最后消息 $last_msg = WebSocketDialogMsg::whereDialogId($dialog->id)->orderByDesc('id')->first(); $dialog->last_msg = $last_msg; @@ -128,12 +131,12 @@ class WebSocketDialog extends AbstractModel } /** - * 获取聊天室对话 + * 获取对话 * @param int $userid 会员ID - * @param int $dialog_id 会话ID(即 聊天室ID) + * @param int $dialog_id 会话ID * @return self */ - public static function checkGroupDialog($userid, $dialog_id) + public static function checkDialog($userid, $dialog_id) { if ($userid == 0) { return self::whereId($dialog_id)->first(); @@ -141,7 +144,6 @@ class WebSocketDialog extends AbstractModel return self::select(['web_socket_dialogs.*']) ->join('web_socket_dialog_users', 'web_socket_dialog_users.dialog_id', '=', 'web_socket_dialogs.id') ->where('web_socket_dialogs.id', $dialog_id) - ->where('web_socket_dialogs.type', 'group') ->where('web_socket_dialog_users.userid', $userid) ->first(); } diff --git a/app/Models/WebSocketDialogMsg.php b/app/Models/WebSocketDialogMsg.php index 02f0a547..70bc9cfb 100644 --- a/app/Models/WebSocketDialogMsg.php +++ b/app/Models/WebSocketDialogMsg.php @@ -129,7 +129,7 @@ class WebSocketDialogMsg extends AbstractModel } /** - * 给会员添加并发送消息 + * 发送消息 * @param int $dialog_id 会话ID(即 聊天室ID) * @param string $type 消息类型 * @param array $msg 发送的消息 @@ -138,7 +138,7 @@ class WebSocketDialogMsg extends AbstractModel * @param string $extra_str * @return array */ - public static function addGroupMsg($dialog_id, $type, $msg, $sender = 0, $extra_int = 0, $extra_str = '') + public static function sendMsg($dialog_id, $type, $msg, $sender = 0, $extra_int = 0, $extra_str = '') { $dialogMsg = self::createInstance([ 'userid' => $sender ?: User::token2userid(), @@ -149,9 +149,9 @@ class WebSocketDialogMsg extends AbstractModel 'extra_str' => $extra_str, ]); return AbstractModel::transaction(function () use ($dialog_id, $msg, $dialogMsg) { - $dialog = WebSocketDialog::checkGroupDialog($dialogMsg->userid, $dialog_id); + $dialog = WebSocketDialog::checkDialog($dialogMsg->userid, $dialog_id); if (empty($dialog)) { - return Base::retError('不是聊天室成员'); + return Base::retError('获取会话失败'); } $dialog->last_at = Carbon::now(); $dialog->save(); @@ -167,43 +167,4 @@ class WebSocketDialogMsg extends AbstractModel }); } - - /** - * 给会员添加并发送消息 - * @param int $userid 接收的会员ID - * @param string $type 消息类型 - * @param array $msg 发送的消息 - * @param int $sender 发送的会员ID(默认自己,0为系统) - * @param int $extra_int - * @param string $extra_str - * @return array - */ - public static function addUserMsg($userid, $type, $msg, $sender = 0, $extra_int = 0, $extra_str = '') - { - $dialogMsg = self::createInstance([ - 'userid' => $sender ?: User::token2userid(), - 'type' => $type, - 'msg' => $msg, - 'read' => 0, - 'extra_int' => $extra_int, - 'extra_str' => $extra_str, - ]); - return AbstractModel::transaction(function () use ($userid, $msg, $dialogMsg) { - $dialog = WebSocketDialog::checkUserDialog($dialogMsg->userid, $userid); - if (empty($dialog)) { - return Base::retError('创建对话失败'); - } - $dialog->last_at = Carbon::now(); - $dialog->save(); - $dialogMsg->send = 1; - $dialogMsg->dialog_id = $dialog->id; - $dialogMsg->save(); - // - $task = new WebSocketDialogMsgTask($userid, $dialogMsg->toArray()); - Task::deliver($task); - // - return Base::retSuccess('发送成功', $dialogMsg); - }); - } - } diff --git a/resources/assets/js/components/UserAvatar.vue b/resources/assets/js/components/UserAvatar.vue index 0db64bcc..237348d6 100755 --- a/resources/assets/js/components/UserAvatar.vue +++ b/resources/assets/js/components/UserAvatar.vue @@ -4,9 +4,12 @@ :delay="600" :disabled="tooltipDisabled" :transfer="transfer"> -
+

{{$L('昵称')}}: {{user.nickname}}

{{$L('职位/职称')}}: {{user.profession || '-'}}

+
+ +
@@ -55,7 +58,7 @@ this.getData() }, computed: { - ...mapState(["userOnline"]), + ...mapState(["userId", "userOnline"]), showImg() { const {userimg} = this.user @@ -99,6 +102,12 @@ this.user = user; } }); + }, + + openDialog() { + this.$store.state.method.setStorage('messengerDialogId', 0) + this.$store.commit("openDialogUser", this.userid); + this.goForward({path: '/manage/messenger'}); } } }; diff --git a/resources/assets/js/pages/manage/components/DialogWrapper.vue b/resources/assets/js/pages/manage/components/DialogWrapper.vue index 9303c1d1..6aba37df 100644 --- a/resources/assets/js/pages/manage/components/DialogWrapper.vue +++ b/resources/assets/js/pages/manage/components/DialogWrapper.vue @@ -19,7 +19,7 @@
- +
diff --git a/resources/assets/js/pages/manage/messenger.vue b/resources/assets/js/pages/manage/messenger.vue index 3b7a425a..fc09bcc4 100644 --- a/resources/assets/js/pages/manage/messenger.vue +++ b/resources/assets/js/pages/manage/messenger.vue @@ -16,8 +16,9 @@ :key="key" :class="{active: dialog.id == dialogId}" @click="openDialog(dialog)"> - - + +
+
{{dialog.name}} diff --git a/resources/assets/js/store/mutations.js b/resources/assets/js/store/mutations.js index eaf72325..58e4280c 100644 --- a/resources/assets/js/store/mutations.js +++ b/resources/assets/js/store/mutations.js @@ -253,6 +253,33 @@ export default { }); }, + /** + * 打开个人对话 + * @param state + * @param userid + */ + openDialogUser(state, userid) { + $A.apiAjax({ + url: 'dialog/open/user', + data: { + userid, + }, + success: ({ret, data, msg}) => { + if (ret === 1) { + let index = state.dialogList.findIndex(({id}) => id == data.id); + if (index > -1) { + state.dialogList.splice(index, 1, data); + } else { + state.dialogList.unshift(data) + } + this.commit('getDialogMsgList', data.id); + } else { + $A.modalError(msg); + } + } + }); + }, + /** * 获取对话消息 * @param state diff --git a/resources/assets/sass/main.scss b/resources/assets/sass/main.scss index 14325589..5dd76152 100755 --- a/resources/assets/sass/main.scss +++ b/resources/assets/sass/main.scss @@ -505,6 +505,31 @@ body { } } } +.common-avatar-transfer { + padding: 4px 2px; + > p { + padding: 1px 2px; + } + .avatar-icons { + margin-top: 12px; + border-top: 1px solid #F4F4F5; + padding: 8px 0 2px; + display: flex; + align-items: center; + > i { + cursor: pointer; + font-size: 22px; + margin-right: 12px; + color: #F4F4F5; + &:last-child { + margin-right: 0; + } + &:hover { + color: #ffffff; + } + } + } +} .common-user-transfer { .user-input-option { @@ -1065,20 +1090,19 @@ body { &.active { background-color: #F4F5F7; } - .common-avatar { + .user-avatar, + .icon-avatar { + width: 46px; + height: 46px; flex-grow: 0; flex-shrink: 0; } - .group-avatar { - width: 46px; - height: 46px; + .icon-avatar { line-height: 46px; border-radius: 50%; font-size: 26px; background-color: #61B2F9; color: #ffffff; - flex-grow: 0; - flex-shrink: 0; } .dialog-box { flex: 1;