fix: 修复无法从任务页面打开聊天的情况

This commit is contained in:
kuaifan 2025-04-08 14:31:01 +08:00
parent dd59a1aebb
commit fb4373c83a
2 changed files with 23 additions and 20 deletions

View File

@ -241,17 +241,10 @@ class DialogController extends AbstractController
// //
$dialog_id = intval(Request::input('dialog_id')); $dialog_id = intval(Request::input('dialog_id'));
// //
$item = DB::table('web_socket_dialog_users as u') $dialog = WebSocketDialog::checkDialog($dialog_id);
->select(['d.*', 'u.top_at', 'u.last_at', 'u.mark_unread', 'u.silence', 'u.hide', 'u.color', 'u.updated_at as user_at']) $data = WebSocketDialog::synthesizeData($dialog, $user->userid);
->join('web_socket_dialogs as d', 'u.dialog_id', '=', 'd.id') //
->where('u.userid', $user->userid) return Base::retSuccess('success', $data);
->where('d.id', $dialog_id)
->whereNull('d.deleted_at')
->first();
if (empty($item)) {
return Base::retError('不在成员列表内');
}
return Base::retSuccess('success', WebSocketDialog::synthesizeData($item, $user->userid));
} }
/** /**

View File

@ -674,6 +674,9 @@ class WebSocketDialog extends AbstractModel
*/ */
public static function checkDialog($dialog_id, $checkOwner = false) public static function checkDialog($dialog_id, $checkOwner = false)
{ {
if ($dialog_id <= 0) {
throw new ApiException('参数错误');
}
$dialog = WebSocketDialog::find($dialog_id); $dialog = WebSocketDialog::find($dialog_id);
if (empty($dialog)) { if (empty($dialog)) {
throw new ApiException('对话不存在或已被删除', ['dialog_id' => $dialog_id], -4003); throw new ApiException('对话不存在或已被删除', ['dialog_id' => $dialog_id], -4003);
@ -687,18 +690,25 @@ class WebSocketDialog extends AbstractModel
throw new ApiException('仅限群主操作'); throw new ApiException('仅限群主操作');
} }
// //
if ($dialog->group_type === 'task') { switch ($dialog->group_type) {
// 任务群对话校验是否在项目内 case 'project':
$project_id = intval(ProjectTask::whereDialogId($dialog->id)->value('project_id')); case 'task':
if ($project_id > 0) { // 项目群、任务群对话校验是否在项目内
if (ProjectUser::whereProjectId($project_id)->whereUserid($userid)->exists()) { if ($dialog->group_type === 'project') {
$projectId = intval(Project::whereDialogId($dialog->id)->value('id'));
} else {
$projectId = intval(ProjectTask::whereDialogId($dialog->id)->value('project_id'));
}
if ($projectId > 0 && ProjectUser::whereProjectId($projectId)->whereUserid($userid)->exists()) {
return $dialog; return $dialog;
} }
} break;
}
if ($dialog->group_type == 'okr') { case 'okr':
return $dialog; // OKR群对话不用校验
return $dialog;
} }
//
if (!WebSocketDialogUser::whereDialogId($dialog->id)->whereUserid($userid)->exists()) { if (!WebSocketDialogUser::whereDialogId($dialog->id)->whereUserid($userid)->exists()) {
WebSocketDialogMsgRead::forceRead($dialog_id, $userid); WebSocketDialogMsgRead::forceRead($dialog_id, $userid);
throw new ApiException('不在成员列表内', ['dialog_id' => $dialog_id], -4003); throw new ApiException('不在成员列表内', ['dialog_id' => $dialog_id], -4003);