From 0b1f433fe40d4a128851e107482dbd458610b77c Mon Sep 17 00:00:00 2001 From: ganzizi Date: Thu, 27 Apr 2023 19:19:01 +0800 Subject: [PATCH] =?UTF-8?q?feat=20=E6=96=B0=E5=A2=9E=E9=83=A8=E9=97=A8?= =?UTF-8?q?=E8=B4=9F=E8=B4=A3=E4=BA=BA=E6=A0=87=E8=AF=86=E5=B9=B6=E6=8E=92?= =?UTF-8?q?=E7=AC=AC=E4=B8=80=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Api/UsersController.php | 18 +++++++++++++++--- app/Models/User.php | 9 +++++++++ .../pages/manage/components/TeamManagement.vue | 7 +++++++ 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/Api/UsersController.php b/app/Http/Controllers/Api/UsersController.php index 231383fc3..64f629b08 100755 --- a/app/Http/Controllers/Api/UsersController.php +++ b/app/Http/Controllers/Api/UsersController.php @@ -707,7 +707,14 @@ class UsersController extends AbstractController $query->where("department", "")->orWhere("department", ",,"); }); } else { - $builder->where("department", "like", "%,{$keys['department']},%"); + // 关联user_departments表中owner_userid查询出负责人,重新排序,部门负责人始终在前面 + $builder->where(function($query) use ($keys) { + $query->where("department", "like", "%,{$keys['department']},%") + ->orWhereIn('userid', function ($query) use ($keys) { + $query->select('owner_userid')->from('user_departments')->where("id", "=", trim($keys['department'], ',')) + ->orderByRaw("FIELD(owner_userid,{$keys['department']}) DESC"); + }); + }); } } if ($getCheckinMac && isset($keys['checkin_mac'])) { @@ -719,11 +726,16 @@ class UsersController extends AbstractController $builder->whereNull('disable_at'); $builder->where('bot', 0); } - $list = $builder->orderByDesc('userid')->paginate(Base::getPaginate(50, 20)); + $builder = $keys['department'] == '0' ? $builder->orderByDesc('userid') : $builder; + $list = $builder->paginate(Base::getPaginate(50, 20)); // - if ($getCheckinMac) { + if ($getCheckinMac || isset($keys['department'])) { $list->transform(function (User $user) { $user->checkin_macs = UserCheckinMac::select(['id', 'mac', 'remark'])->whereUserid($user->userid)->orderBy('id')->get(); + // 当为部门负责人时,字段identity值为['dm'],表示部门负责人 + if ($user->isDepartmentOwner()) { + $user->identity = ['dm']; + } return $user; }); } diff --git a/app/Models/User.php b/app/Models/User.php index 40d63c24b..0e9e370c2 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -149,6 +149,15 @@ class User extends AbstractModel return implode(', ', $array); } + /** + * 判断是否为部门负责人 + */ + public function isDepartmentOwner() + { + return UserDepartment::where('owner_userid', $this->userid)->exists(); + } + + /** * 获取机器人所有者 * @return int|mixed diff --git a/resources/assets/js/pages/manage/components/TeamManagement.vue b/resources/assets/js/pages/manage/components/TeamManagement.vue index a7e1d51ba..e15e253db 100644 --- a/resources/assets/js/pages/manage/components/TeamManagement.vue +++ b/resources/assets/js/pages/manage/components/TeamManagement.vue @@ -342,6 +342,13 @@ export default { } })) } + if (identity.includes("dm")) { + arr.push(h('Tag', { + props: { + color: 'blue' + } + }, this.$L('负责人'))) + } if (identity.includes("ldap")) { arr.push(h('Tag', { props: {