diff --git a/app/Http/Controllers/Api/UsersController.php b/app/Http/Controllers/Api/UsersController.php index f00082be2..b99386e1b 100755 --- a/app/Http/Controllers/Api/UsersController.php +++ b/app/Http/Controllers/Api/UsersController.php @@ -8,6 +8,7 @@ use App\Models\Project; use App\Models\UmengAlias; use App\Models\User; use App\Models\UserDelete; +use App\Models\UserDepartment; use App\Models\UserEmailVerification; use App\Models\UserTransfer; use App\Models\WebSocket; @@ -1111,4 +1112,123 @@ class UsersController extends AbstractController } return Base::retSuccess('success', $user); } + + /** + * @api {get} api/users/department/list 20. 部门列表(限管理员) + * + * @apiDescription 需要token身份 + * @apiVersion 1.0.0 + * @apiGroup users + * @apiName department__list + * + * @apiSuccess {Number} ret 返回状态码(1正确、0错误) + * @apiSuccess {String} msg 返回信息(错误描述) + * @apiSuccess {Object} data 返回数据 + */ + public function department__list() + { + User::auth('admin'); + // + return Base::retSuccess('success', UserDepartment::orderBy('id')->get()); + } + + /** + * @api {get} api/users/department/add 21. 新建、修改部门(限管理员) + * + * @apiDescription 需要token身份 + * @apiVersion 1.0.0 + * @apiGroup users + * @apiName department__add + * + * @apiParam {Number} [id] 部门id,留空为创建部门 + * @apiParam {String} name 部门名称 + * @apiParam {Number} [parent_id] 上级部门ID + * @apiParam {Number} owner_userid 部门负责人ID + * + * @apiSuccess {Number} ret 返回状态码(1正确、0错误) + * @apiSuccess {String} msg 返回信息(错误描述) + * @apiSuccess {Object} data 返回数据 + */ + public function department__add() + { + User::auth('admin'); + // + $id = intval(Request::input('id')); + $name = trim(Request::input('name')); + $parent_id = intval(Request::input('parent_id')); + $owner_userid = intval(Request::input('owner_userid')); + // + if (mb_strlen($name) < 2 || mb_strlen($name) > 20) { + return Base::retError('部门名称长度限制2-20个字'); + } + // + if ($id > 0) { + $userDepartment = UserDepartment::find($id); + if (empty($userDepartment)) { + return Base::retError('部门不存在或已被删除'); + } + } else { + if (UserDepartment::count() > 200) { + return Base::retError('最多只能创建200个部门'); + } + $userDepartment = UserDepartment::createInstance(); + } + // + if ($parent_id > 0) { + $parentDepartment = UserDepartment::find($parent_id); + if (empty($parentDepartment)) { + return Base::retError('上级部门不存在或已被删除'); + } + if ($parentDepartment->parent_id > 0) { + return Base::retError('上级部门层级错误'); + } + if (UserDepartment::whereParentId($parent_id)->count() > 20) { + return Base::retError('每个部门最多只能创建20个子部门'); + } + if ($id > 0 && UserDepartment::whereParentId($id)->exists()) { + return Base::retError('含有子部门无法修改上级部门'); + } + } + if (empty($owner_userid) || !User::whereUserid($owner_userid)->exists()) { + return Base::retError('请选择正确的部门负责人'); + } + // + $userDepartment->updateInstance([ + 'name' => $name, + 'parent_id' => $parent_id, + 'owner_userid' => $owner_userid, + ]); + $userDepartment->saveDepartment(); + // + return Base::retSuccess($parent_id > 0 ? '保存成功' : '新建成功'); + } + + /** + * @api {get} api/users/department/del 22. 删除部门(限管理员) + * + * @apiDescription 需要token身份 + * @apiVersion 1.0.0 + * @apiGroup users + * @apiName department__del + * + * @apiParam {Number} id 部门id + * + * @apiSuccess {Number} ret 返回状态码(1正确、0错误) + * @apiSuccess {String} msg 返回信息(错误描述) + * @apiSuccess {Object} data 返回数据 + */ + public function department__del() + { + User::auth('admin'); + // + $id = intval(Request::input('id')); + // + $userDepartment = UserDepartment::find($id); + if (empty($userDepartment)) { + return Base::retError('部门不存在或已被删除'); + } + $userDepartment->deleteDepartment(); + // + return Base::retSuccess('删除成功'); + } } diff --git a/app/Models/UserDepartment.php b/app/Models/UserDepartment.php new file mode 100644 index 000000000..3c7cfa4bf --- /dev/null +++ b/app/Models/UserDepartment.php @@ -0,0 +1,51 @@ +save(); + } + + /** + * 删除部门 + * @return void + */ + public function deleteDepartment() { + $list = self::whereParentId($this->id)->get(); + foreach ($list as $item) { + $item->deleteDepartment(); + } + // todo 移动成员 + $this->delete(); + } +} diff --git a/database/migrations/2022_11_16_221259_create_user_departments_table.php b/database/migrations/2022_11_16_221259_create_user_departments_table.php new file mode 100644 index 000000000..4a0cee8e1 --- /dev/null +++ b/database/migrations/2022_11_16_221259_create_user_departments_table.php @@ -0,0 +1,35 @@ +bigIncrements('id'); + $table->string('name', 100)->nullable()->default('')->comment('部门名称'); + $table->bigInteger('dialog_id')->nullable()->default(0)->comment('聊天会话ID'); + $table->bigInteger('parent_id')->nullable()->default(0)->comment('上级部门'); + $table->bigInteger('owner_userid')->nullable()->default(0)->comment('部门负责人'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('user_departments'); + } +} diff --git a/resources/assets/js/pages/manage.vue b/resources/assets/js/pages/manage.vue index 6f747a258..070e92d2b 100644 --- a/resources/assets/js/pages/manage.vue +++ b/resources/assets/js/pages/manage.vue @@ -325,7 +325,7 @@ + :size="1380"> diff --git a/resources/assets/js/pages/manage/components/TeamManagement.vue b/resources/assets/js/pages/manage/components/TeamManagement.vue index f63e3db8f..05182e517 100644 --- a/resources/assets/js/pages/manage/components/TeamManagement.vue +++ b/resources/assets/js/pages/manage/components/TeamManagement.vue @@ -6,88 +6,163 @@ -
- -
-
- - +
+
+
    +
  • + +
    {{$L('默认部门')}}
    + + + + +
    {{$L('添加子部门')}}
    +
    +
    +
    +
  • +
  • + +

    {{$L('部门负责人')}}

    +
    +
    {{item.name}}
    + + + + +
    {{$L('添加子部门')}}
    +
    + +
    {{$L('编辑')}}
    +
    + +
    {{$L('删除')}}
    +
    +
    +
    +
  • +
+
+ +
+
+
+
+
    +
  • +
    + {{$L("关键词")}} +
    +
    + +
    +
  • +
  • +
    + {{$L("身份")}} +
    +
    + +
    +
  • +
  • +
    + {{$L("在职状态")}} +
    +
    + +
    +
  • +
  • +
    + {{$L("邮箱认证")}} +
    +
    + +
    +
  • +
  • + + +
    + + +
    +
    +
  • +
+
+
+
+ + + + + +
+ + + + + +
{{$L('含有子部门无法修改上级部门')}}
+
+ + + + +
+ + +
+
+