From 1db5d3a3e055678a7a66150f424acb45ed34c967 Mon Sep 17 00:00:00 2001 From: kuaifan Date: Fri, 18 Nov 2022 17:22:27 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E6=94=AF=E6=8C=81=E9=80=89=E6=8B=A9?= =?UTF-8?q?=E5=B7=B2=E6=9C=89=E7=BE=A4=E4=B8=BA=E5=88=9B=E5=BB=BA=E9=83=A8?= =?UTF-8?q?=E9=97=A8=E7=BE=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Api/DialogController.php | 29 ++++++++++ app/Http/Controllers/Api/UsersController.php | 8 ++- app/Models/UserDepartment.php | 38 ++++++++++++- .../js/pages/manage/components/DialogItem.vue | 1 + .../manage/components/TeamManagement.vue | 55 ++++++++++++++++++- .../pages/components/team-management.scss | 13 +++++ 6 files changed, 137 insertions(+), 7 deletions(-) diff --git a/app/Http/Controllers/Api/DialogController.php b/app/Http/Controllers/Api/DialogController.php index fc9015fe4..1408304cc 100755 --- a/app/Http/Controllers/Api/DialogController.php +++ b/app/Http/Controllers/Api/DialogController.php @@ -1375,4 +1375,33 @@ class DialogController extends AbstractController $dialog->pushMsg("groupDelete"); return Base::retSuccess('解散成功'); } + + /** + * @api {get} api/dialog/group/searchuser 32. 搜索个人群(仅限管理员) + * + * @apiDescription 需要token身份,用于创建部门搜索个人群组 + * @apiVersion 1.0.0 + * @apiGroup dialog + * @apiName group__searchuser + * + * @apiParam {String} key 关键词 + * + * @apiSuccess {Number} ret 返回状态码(1正确、0错误) + * @apiSuccess {String} msg 返回信息(错误描述) + * @apiSuccess {Object} data 返回数据 + */ + public function group__searchuser() + { + User::auth('admin'); + // + $key = trim(Request::input('key')); + // + $builder = WebSocketDialog::whereType('group')->whereGroupType('user'); + if ($key) { + $builder->where('name', 'like', "%{$key}%"); + } + return Base::retSuccess('success', [ + 'list' => $builder->take(20)->get() + ]); + } } diff --git a/app/Http/Controllers/Api/UsersController.php b/app/Http/Controllers/Api/UsersController.php index b9dc866f2..f250aa4e2 100755 --- a/app/Http/Controllers/Api/UsersController.php +++ b/app/Http/Controllers/Api/UsersController.php @@ -1191,6 +1191,10 @@ class UsersController extends AbstractController * @apiParam {String} name 部门名称 * @apiParam {Number} [parent_id] 上级部门ID * @apiParam {Number} owner_userid 部门负责人ID + * @apiParam {String} [dialog_group] 部门群(仅创建部门时有效) + * - new: 创建(默认) + * - use: 使用现有群 + * @apiParam {Number} [dialog_useid] 使用现有群ID(dialog_group=use时有效) * * @apiSuccess {Number} ret 返回状态码(1正确、0错误) * @apiSuccess {String} msg 返回信息(错误描述) @@ -1204,6 +1208,8 @@ class UsersController extends AbstractController $name = trim(Request::input('name')); $parent_id = intval(Request::input('parent_id')); $owner_userid = intval(Request::input('owner_userid')); + $dialog_group = trim(Request::input('dialog_group')); + $dialog_useid = $dialog_group === 'use' ? intval(Request::input('dialog_useid')) : 0; // if (mb_strlen($name) < 2 || mb_strlen($name) > 20) { return Base::retError('部门名称长度限制2-20个字'); @@ -1244,7 +1250,7 @@ class UsersController extends AbstractController 'name' => $name, 'parent_id' => $parent_id, 'owner_userid' => $owner_userid, - ]); + ], $dialog_useid); // return Base::retSuccess($parent_id > 0 ? '保存成功' : '新建成功'); } diff --git a/app/Models/UserDepartment.php b/app/Models/UserDepartment.php index a1f485445..4fbdcbe54 100644 --- a/app/Models/UserDepartment.php +++ b/app/Models/UserDepartment.php @@ -31,9 +31,10 @@ class UserDepartment extends AbstractModel /** * 保存部门 * @param $data + * @param $dialogUseid */ - public function saveDepartment($data = []) { - AbstractModel::transaction(function () use ($data) { + public function saveDepartment($data = [], $dialogUseid = 0) { + AbstractModel::transaction(function () use ($dialogUseid, $data) { $oldUser = null; $newUser = null; if ($data['owner_userid'] !== $this->owner_userid) { @@ -43,13 +44,44 @@ class UserDepartment extends AbstractModel $this->updateInstance($data); // if ($this->dialog_id > 0) { + // 已有群 $dialog = WebSocketDialog::find($this->dialog_id); if ($dialog) { $dialog->name = $this->name; $dialog->owner_id = $this->owner_userid; - $dialog->save(); + if ($dialog->save()) { + $dialog->joinGroup($this->owner_userid, 0, true); + $dialog->pushMsg("groupUpdate", [ + 'id' => $dialog->id, + 'name' => $dialog->name, + 'owner_id' => $dialog->owner_id, + ]); + } } + } elseif ($dialogUseid > 0) { + // 使用现有群 + $dialog = WebSocketDialog::whereType('group')->whereGroupType('user')->find($dialogUseid); + if (empty($dialog)) { + throw new ApiException("选择现有聊天群不存在"); + } + $dialog->name = $this->name; + $dialog->owner_id = $this->owner_userid; + $dialog->group_type = 'department'; + if ($dialog->save()) { + $dialog->joinGroup($this->owner_userid, 0, true); + $dialog->pushMsg("groupUpdate", [ + 'id' => $dialog->id, + 'name' => $dialog->name, + 'owner_id' => $dialog->owner_id, + 'group_type' => $dialog->group_type, + ]); + WebSocketDialogMsg::sendMsg(null, $dialog->id, 'notice', [ + 'notice' => User::nickname() . " 将此群改为部门群" + ], User::userid(), true, true); + } + $this->dialog_id = $dialog->id; } else { + // 创建群 $dialog = WebSocketDialog::createGroup($this->name, [$this->owner_userid], 'department', $this->owner_userid); if (empty($dialog)) { throw new ApiException("创建群组失败"); diff --git a/resources/assets/js/pages/manage/components/DialogItem.vue b/resources/assets/js/pages/manage/components/DialogItem.vue index f6160d8f1..491b4b25f 100644 --- a/resources/assets/js/pages/manage/components/DialogItem.vue +++ b/resources/assets/js/pages/manage/components/DialogItem.vue @@ -26,6 +26,7 @@ :userid="source.userid" :tooltipDisabled="source.userid == userId" :show-icon-menu="dialogData.type == 'group'" + :open-delay="100" :size="30"/> +
@@ -262,9 +287,14 @@ export default { id: 0, name: '', parent_id: 0, - owner_userid: [] + owner_userid: [], + dialog_group: 'new', + dialog_useid: 0 }, departmentList: [], + + dialogLoad: false, + dialogList: [], } }, mounted() { @@ -766,7 +796,8 @@ export default { id: 0, name: '', parent_id: 0, - owner_userid: [] + owner_userid: [], + dialog_group: 'new' }, data || {}) this.departmentShow = true }, @@ -837,7 +868,25 @@ export default { }); } } - } + }, + + dialogRemote(key) { + if (key !== '') { + this.dialogLoad = true; + this.$store.dispatch("call", { + url: 'dialog/group/searchuser', + data: { + key, + }, + }).then(({data}) => { + this.dialogList = data.list; + }).finally(_ => { + this.dialogLoad = false; + }) + } else { + this.dialogList = []; + } + }, } } diff --git a/resources/assets/sass/pages/components/team-management.scss b/resources/assets/sass/pages/components/team-management.scss index 511a685b7..92c529d91 100644 --- a/resources/assets/sass/pages/components/team-management.scss +++ b/resources/assets/sass/pages/components/team-management.scss @@ -131,6 +131,19 @@ } } +.team-department-add-dialog-group { + display: flex; + align-items: center; + .dialog-name { + flex: 1; + width: 0; + padding-right: 12px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } +} + .team-table-department-warp { display: flex; align-items: center;