diff --git a/app/Http/Controllers/Api/DialogController.php b/app/Http/Controllers/Api/DialogController.php index 92bcf1caf..be61f423e 100755 --- a/app/Http/Controllers/Api/DialogController.php +++ b/app/Http/Controllers/Api/DialogController.php @@ -1022,6 +1022,10 @@ class DialogController extends AbstractController * @apiName msg__todo * * @apiParam {Number} msg_id 消息ID + * @apiParam {String} type 设待办对象 + * - all: 会话全部成员(默认) + * - user: 会话指定成员 + * @apiParam {Array} userids 会员ID组(type=user有效,格式: [userid1, userid2, userid3]) * * @apiSuccess {Number} ret 返回状态码(1正确、0错误) * @apiSuccess {String} msg 返回信息(错误描述) @@ -1032,6 +1036,16 @@ class DialogController extends AbstractController $user = User::auth(); // $msg_id = intval(Request::input("msg_id")); + $type = trim(Request::input("type", "all")); + $userids = Request::input('userids'); + // + if ($type === 'user') { + if (empty($userids)) { + return Base::retError("选择指定成员"); + } + } else { + $userids = []; + } // $msg = WebSocketDialogMsg::whereId($msg_id)->first(); if (empty($msg)) { @@ -1039,7 +1053,7 @@ class DialogController extends AbstractController } WebSocketDialog::checkDialog($msg->dialog_id); // - return $msg->toggleTodoMsg($user->userid); + return $msg->toggleTodoMsg($user->userid, $userids); } /** diff --git a/app/Http/Controllers/Api/UsersController.php b/app/Http/Controllers/Api/UsersController.php index 3f2fa84c0..d6a523e2d 100755 --- a/app/Http/Controllers/Api/UsersController.php +++ b/app/Http/Controllers/Api/UsersController.php @@ -351,6 +351,7 @@ class UsersController extends AbstractController * - keys.disable 0-排除禁止(默认),1-含禁止,2-仅禁止 * - keys.project_id 在指定项目ID * - keys.no_project_id 不在指定项目ID + * - keys.dialog_id 在指定对话ID * @apiParam {Object} sorts 排序方式 * - sorts.az 按字母:asc|desc * @apiParam {Number} updated_time 在这个时间戳之后更新的 @@ -401,6 +402,11 @@ class UsersController extends AbstractController $query->select('userid')->from('project_users')->where('project_id', $keys['no_project_id']); }); } + if (intval($keys['dialog_id']) > 0) { + $builder->whereIn('userid', function ($query) use ($keys) { + $query->select('userid')->from('web_socket_dialog_users')->where('dialog_id', $keys['dialog_id']); + }); + } if (in_array($sorts['az'], ['asc', 'desc'])) { $builder->orderBy('az', $sorts['az']); } diff --git a/app/Models/WebSocketDialogMsg.php b/app/Models/WebSocketDialogMsg.php index 0ba6d8d22..e7cfab683 100644 --- a/app/Models/WebSocketDialogMsg.php +++ b/app/Models/WebSocketDialogMsg.php @@ -301,9 +301,10 @@ class WebSocketDialogMsg extends AbstractModel /** * 设待办、取消待办 * @param int $sender 设待办的会员ID + * @param array $userids 设置给指定会员 * @return mixed */ - public function toggleTodoMsg($sender) + public function toggleTodoMsg($sender, $userids = []) { if (in_array($this->type, ['tag', 'todo', 'notice'])) { return Base::retError('此消息不支持社待办'); @@ -328,6 +329,7 @@ class WebSocketDialogMsg extends AbstractModel 'id' => $this->id, 'type' => $this->type, 'msg' => $this->msg, + 'userids' => implode(",", $userids), ] ], $sender); if (Base::isSuccess($res)) { @@ -336,8 +338,11 @@ class WebSocketDialogMsg extends AbstractModel $dialog->pushMsg('update', array_merge($resData, ['dialog_id' => $this->dialog_id])); // if ($this->todo) { - $userids = $dialog->dialogUser->pluck('userid')->toArray(); - foreach ($userids as $userid) { + $useridList = $dialog->dialogUser->pluck('userid')->toArray(); + foreach ($useridList as $userid) { + if ($userids && !in_array($userid, $userids)) { + continue; + } WebSocketDialogMsgTodo::createInstance([ 'dialog_id' => $this->dialog_id, 'msg_id' => $this->id, diff --git a/resources/assets/js/components/UserInput.vue b/resources/assets/js/components/UserInput.vue index f5ac4b443..6d9bd38cd 100755 --- a/resources/assets/js/components/UserInput.vue +++ b/resources/assets/js/components/UserInput.vue @@ -86,6 +86,10 @@ type: Number, default: 0 }, + dialogId: { + type: Number, + default: 0 + }, }, data() { return { @@ -161,6 +165,7 @@ key, project_id: this.projectId, no_project_id: this.noProjectId, + dialog_id: this.dialogId, }, take: 50 }, diff --git a/resources/assets/js/pages/manage/components/DialogItem.vue b/resources/assets/js/pages/manage/components/DialogItem.vue index 79c1c1040..c7c1b3eac 100644 --- a/resources/assets/js/pages/manage/components/DialogItem.vue +++ b/resources/assets/js/pages/manage/components/DialogItem.vue @@ -9,6 +9,13 @@