no message
This commit is contained in:
parent
874689c6bf
commit
2ca3e04221
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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);
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -4,9 +4,12 @@
|
||||
:delay="600"
|
||||
:disabled="tooltipDisabled"
|
||||
:transfer="transfer">
|
||||
<div slot="content">
|
||||
<div slot="content" class="common-avatar-transfer">
|
||||
<p>{{$L('昵称')}}: {{user.nickname}}</p>
|
||||
<p>{{$L('职位/职称')}}: {{user.profession || '-'}}</p>
|
||||
<div v-if="userId != userid" class="avatar-icons">
|
||||
<Icon type="ios-chatbubbles" @click="openDialog"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="avatar-wrapper">
|
||||
<div :class="['avatar-box', user.online ? 'online' : '']">
|
||||
@ -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'});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
@ -19,7 +19,7 @@
|
||||
<div class="dialog-avatar">
|
||||
<UserAvatar :userid="item.userid" :tooltip-disabled="item.userid == userId" :size="30"/>
|
||||
</div>
|
||||
<DialogView :msg-data="item" dialog-type="group"/>
|
||||
<DialogView :msg-data="item" :dialog-type="dialogDetail.type"/>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
@ -16,8 +16,9 @@
|
||||
:key="key"
|
||||
:class="{active: dialog.id == dialogId}"
|
||||
@click="openDialog(dialog)">
|
||||
<Icon v-if="dialog.type=='group'" class="group-avatar" type="ios-people" />
|
||||
<UserAvatar v-else-if="dialog.dialog_user" :userid="dialog.dialog_user.userid" :size="46"/>
|
||||
<Icon v-if="dialog.type=='group'" class="icon-avatar" type="ios-people" />
|
||||
<div v-else-if="dialog.dialog_user" class="user-avatar"><UserAvatar :userid="dialog.dialog_user.userid" :size="46"/></div>
|
||||
<Icon v-else class="icon-avatar" type="md-person" />
|
||||
<div class="dialog-box">
|
||||
<div class="dialog-title">
|
||||
<span>{{dialog.name}}</span>
|
||||
|
27
resources/assets/js/store/mutations.js
vendored
27
resources/assets/js/store/mutations.js
vendored
@ -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
|
||||
|
36
resources/assets/sass/main.scss
vendored
36
resources/assets/sass/main.scss
vendored
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user