diff --git a/app/Http/Controllers/Api/DialogController.php b/app/Http/Controllers/Api/DialogController.php index 16189f74a..c5202dc79 100755 --- a/app/Http/Controllers/Api/DialogController.php +++ b/app/Http/Controllers/Api/DialogController.php @@ -1417,8 +1417,9 @@ class DialogController extends AbstractController * @apiGroup dialog * @apiName group__add * + * @apiParam {String} [avatar] 群头像 + * @apiParam {String} [chat_name] 群名称 * @apiParam {Array} userids 群成员,格式: [userid1, userid2, userid3] - * @apiParam {String} chat_name 群名称 * * @apiSuccess {Number} ret 返回状态码(1正确、0错误) * @apiSuccess {String} msg 返回信息(错误描述) @@ -1428,8 +1429,10 @@ class DialogController extends AbstractController { $user = User::auth(); // - $userids = Request::input('userids'); + $avatar = Request::input('avatar'); + $avatar = $avatar ? Base::unFillUrl(is_array($avatar) ? $avatar[0]['path'] : $avatar) : ''; $chatName = trim(Request::input('chat_name')); + $userids = Request::input('userids'); // if (!is_array($userids)) { return Base::retError('请选择群成员'); @@ -1458,6 +1461,10 @@ class DialogController extends AbstractController if (empty($dialog)) { return Base::retError('创建群组失败'); } + if ($avatar) { + $dialog->avatar = $avatar; + $dialog->save(); + } $data = WebSocketDialog::find($dialog->id)?->formatData($user->userid); $userids = array_values(array_diff($userids, [$user->userid])); $dialog->pushMsg("groupAdd", null, $userids); @@ -1473,7 +1480,9 @@ class DialogController extends AbstractController * @apiName group__edit * * @apiParam {Number} dialog_id 会话ID - * @apiParam {String} chat_name 群名称 + * @apiParam {String} [avatar] 群头像 + * @apiParam {String} [chat_name] 群名称 + * @apiParam {Number} [admin] 系统管理员操作(1:只判断是不是系统管理员,否则判断是否群管理员) * * @apiSuccess {Number} ret 返回状态码(1正确、0错误) * @apiSuccess {String} msg 返回信息(错误描述) @@ -1484,23 +1493,43 @@ class DialogController extends AbstractController $user = User::auth(); // $dialog_id = intval(Request::input('dialog_id')); - $chatName = trim(Request::input('chat_name')); + $admin = intval(Request::input('admin')); // - if (mb_strlen($chatName) < 2) { - return Base::retError('群名称至少2个字'); - } - if (mb_strlen($chatName) > 100) { - return Base::retError('群名称最长限制100个字'); + if ($admin === 1) { + $user->checkAdmin(); + $dialog = WebSocketDialog::find($dialog_id); + if (empty($dialog)) { + return Base::retError('对话不存在或已被删除', ['dialog_id' => $dialog_id], -4003); + } + } else { + $dialog = WebSocketDialog::checkDialog($dialog_id, true); } // - $dialog = WebSocketDialog::checkDialog($dialog_id, true); + $data = ['id' => $dialog->id]; + $array = []; + if (Request::exists('avatar')) { + $avatar = Request::input('avatar'); + $avatar = $avatar ? Base::unFillUrl(is_array($avatar) ? $avatar[0]['path'] : $avatar) : ''; + $data['avatar'] = Base::fillUrl($array['avatar'] = $avatar); + } + if (Request::exists('chat_name') && $dialog->group_type === 'user') { + $chatName = trim(Request::input('chat_name')); + if (mb_strlen($chatName) < 2) { + return Base::retError('群名称至少2个字'); + } + if (mb_strlen($chatName) > 100) { + return Base::retError('群名称最长限制100个字'); + } + $data['name'] = $array['name'] = $chatName; + } // - $dialog->name = $chatName; - $dialog->save(); - return Base::retSuccess('修改成功', [ - 'id' => $dialog->id, - 'name' => $dialog->name, - ]); + if ($array) { + $dialog->updateInstance($array); + $dialog->save(); + WebSocketDialogUser::whereDialogId($dialog->id)->update(['updated_at' => Carbon::now()]); + } + // + return Base::retSuccess('修改成功', $data); } /** diff --git a/app/Models/WebSocketDialog.php b/app/Models/WebSocketDialog.php index 8475ef25b..3ab0081ed 100644 --- a/app/Models/WebSocketDialog.php +++ b/app/Models/WebSocketDialog.php @@ -17,6 +17,7 @@ use Illuminate\Database\Eloquent\SoftDeletes; * @property string|null $type 对话类型 * @property string|null $group_type 聊天室类型 * @property string|null $name 对话名称 + * @property string|null $avatar 头像(群) * @property string|null $last_at 最后消息时间 * @property int|null $owner_id 群主用户ID * @property \Illuminate\Support\Carbon|null $created_at @@ -28,6 +29,7 @@ use Illuminate\Database\Eloquent\SoftDeletes; * @method static \Illuminate\Database\Eloquent\Builder|WebSocketDialog newQuery() * @method static \Illuminate\Database\Query\Builder|WebSocketDialog onlyTrashed() * @method static \Illuminate\Database\Eloquent\Builder|WebSocketDialog query() + * @method static \Illuminate\Database\Eloquent\Builder|WebSocketDialog whereAvatar($value) * @method static \Illuminate\Database\Eloquent\Builder|WebSocketDialog whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|WebSocketDialog whereDeletedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|WebSocketDialog whereGroupType($value) @@ -45,6 +47,16 @@ class WebSocketDialog extends AbstractModel { use SoftDeletes; + /** + * 头像地址 + * @param $value + * @return string + */ + public function getAvatarAttribute($value) + { + return $value ? Base::fillUrl($value) : $value; + } + /** * @return \Illuminate\Database\Eloquent\Relations\HasMany */ diff --git a/database/migrations/2023_03_04_234016_add_web_socket_dialogs_avatar.php b/database/migrations/2023_03_04_234016_add_web_socket_dialogs_avatar.php new file mode 100644 index 000000000..e3a78492b --- /dev/null +++ b/database/migrations/2023_03_04_234016_add_web_socket_dialogs_avatar.php @@ -0,0 +1,34 @@ +string('avatar', 255)->nullable()->default('')->after('name')->comment('头像(群)'); + } + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('web_socket_dialogs', function (Blueprint $table) { + $table->dropColumn("avatar"); + }); + } +} diff --git a/resources/assets/js/pages/manage/components/DialogWrapper.vue b/resources/assets/js/pages/manage/components/DialogWrapper.vue index 4cb072ec3..6598af7b7 100644 --- a/resources/assets/js/pages/manage/components/DialogWrapper.vue +++ b/resources/assets/js/pages/manage/components/DialogWrapper.vue @@ -20,7 +20,8 @@