Browse Source

部门管理

wangchuanbao 1 year ago
parent
commit
3ddd3f0cad

+ 102 - 0
app/admin/controller/dept/Dept.php

@@ -0,0 +1,102 @@
+<?php
+
+namespace app\admin\controller\dept;
+
+use app\admin\service\dept\DeptService;
+use app\admin\validate\dept\DeptValidate;
+use app\model\SysDept;
+use support\Request;
+
+class Dept
+{
+    /**
+     * @Desc 部门列表
+     * @Author Gorden
+     * @Date 2024/2/21 10:29
+     *
+     * @param Request $request
+     * @return \support\Response
+     */
+    public function deptList(Request $request)
+    {
+        $page = $request->get('page', '1');
+        $limit = $request->get('limit', '10');
+        $keywords = format_string($request->get('keywords', ''));
+
+        return DeptService::deptList($page, $limit, $keywords);
+    }
+
+    /**
+     * @Desc 部门详情
+     * @Author Gorden
+     * @Date 2024/2/21 10:35
+     *
+     * @param $id
+     * @return \support\Response
+     */
+    public function deptInfo($id)
+    {
+        return DeptService::deptInfo($id);
+    }
+
+    /**
+     * @Desc 创建部门
+     * @Author Gorden
+     * @Date 2024/2/21 9:22
+     *
+     * @param Request $request
+     * @return \support\Response
+     */
+    public function addDept(Request $request)
+    {
+        $validate = new DeptValidate();
+        if (!$validate->scene('add')->check($request->post())) {
+            return json_fail($validate->getError());
+        }
+
+        return DeptService::insertDept($request->post());
+    }
+
+    /**
+     * @Desc 修改部门
+     * @Author Gorden
+     * @Date 2024/2/21 10:15
+     *
+     * @param $id
+     * @param Request $request
+     * @return \support\Response
+     */
+    public function updateDept($id, Request $request)
+    {
+        $validate = new DeptValidate();
+        if (!$validate->scene('update')->check($request->post())) {
+            return json_fail($validate->getError());
+        }
+
+        return DeptService::updateDept($id, $request->post());
+    }
+
+    /**
+     * @Desc 修改部门状态
+     * @Author Gorden
+     * @Date 2024/2/21 10:41
+     *
+     * @param $id
+     * @param $status
+     * @return \support\Response
+     */
+    public function updateStatus($id, Request $request)
+    {
+        $validate = new DeptValidate();
+        if (!$validate->scene('update_status')->check($request->post())) {
+            return json_fail($validate->getError());
+        }
+
+        return DeptService::updateStatus($id, $request->post('dept_status'));
+    }
+
+    public function delDept($id)
+    {
+        return DeptService::delDept($id);
+    }
+}

+ 3 - 3
app/admin/controller/role/Role.php

@@ -20,9 +20,9 @@ class Role
     {
         $page = intval($request->get('page', 1));
         $limit = intval($request->get('limit', 10));
-        $keyword = htmlspecialchars(strip_tags($request->get('$keyword', '')));
+        $keywords = format_string($request->get('keywords', ''));
 
-        return RoleService::roleList($page, $limit, $keyword);
+        return RoleService::roleList($page, $limit, $keywords);
     }
 
     /**
@@ -35,7 +35,7 @@ class Role
      */
     public function roleInfo($id)
     {
-        return RoleService::roleInfo(intval($id));
+        return RoleService::roleInfo($id);
     }
 
     /**

+ 198 - 0
app/admin/service/dept/DeptService.php

@@ -0,0 +1,198 @@
+<?php
+
+namespace app\admin\service\dept;
+
+use app\model\SysDept;
+use support\Db;
+
+class DeptService
+{
+    /**
+     * @Desc 部门列表
+     * @Author Gorden
+     * @Date 2024/2/21 10:28
+     *
+     * @param $page
+     * @param $limit
+     * @param $keywords
+     * @return \support\Response
+     */
+    public static function deptList($page, $limit, $keywords)
+    {
+        $list = SysDept::select('*')
+            ->when($keywords != '', function ($query) use ($keywords) {
+                $query->where('dept_name', 'like', '%' . $keywords . '%');
+            })
+            ->orderBy('dept_addtimes', 'DESC')
+            ->forPage($page, $limit)
+            ->get()
+            ->toArray();
+        $count = SysDept::when($keywords != '', function ($query) use ($keywords) {
+            $query->where('dept_name', 'like', '%' . $keywords . '%');
+        })->count();
+
+        return json_success('', compact('list', 'page', 'limit', 'count'));
+    }
+
+    /**
+     * @Desc 部门详情
+     * @Author Gorden
+     * @Date 2024/2/21 10:35
+     *
+     * @param $id
+     * @return \support\Response
+     */
+    public static function deptInfo($id)
+    {
+        $dept = SysDept::find($id);
+        if (!$dept) {
+            return json_fail('部门不存在');
+        }
+
+        $dept = $dept->toArray();
+        return json_success('', $dept);
+    }
+
+    /**
+     * @Desc 创建部门
+     * @Author Gorden
+     * @Date 2024/2/21 9:22
+     *
+     * @param $params
+     * @return \support\Response
+     */
+    public static function insertDept($params)
+    {
+        Db::beginTransaction();
+        try {
+            $data = [
+                'dept_super_id' => $params['dept_super_id'],
+                'dept_status' => $params['dept_status'],
+                'dept_category' => $params['dept_category'],
+                'dept_code' => $params['dept_code'],
+                'dept_city' => $params['dept_city'],
+                'dept_name' => $params['dept_name'],
+                'dept_telephone' => $params['dept_telephone'],
+                'dept_position' => $params['dept_position'],
+                'dept_address' => $params['dept_address'],
+                'dept_remark' => $params['dept_remark'],
+                'dept_extend_json' => !empty($params['dept_extend_json']) ? $params['dept_extend_json'] : '{}',
+                'dept_addtimes' => time()
+            ];
+
+            $deptId = SysDept::insertGetId($data);
+            if (!$deptId) {
+                throw new \Exception('创建部门失败');
+            }
+            // 获取上级部门path
+            $deptSuperPath = '/0/';
+            if ($params['dept_super_id'] != 0) {
+                $deptSuperPath = SysDept::where('dept_id', $params['dept_super_id'])->value('dept_super_path');
+            }
+            // 更新部门path
+            $path = $deptSuperPath . $deptId . '/';
+            if (!SysDept::where('dept_id', $deptId)->update(['dept_super_path' => $path])) {
+                throw new \Exception('创建部门失败');
+            }
+            // 事务提交
+            DB::commit();
+        } catch (\Exception $e) {
+            DB::rollBack();
+            return json_fail('创建部门失败');
+        }
+
+        return json_success('部门创建成功');
+    }
+
+    /**
+     * @Desc 修改部门
+     * @Author Gorden
+     * @Date 2024/2/21 10:15
+     *
+     * @param $id
+     * @param $params
+     * @return \support\Response
+     */
+    public static function updateDept($id, $params)
+    {
+        $dept = SysDept::where('dept_id', $id)->first();
+        if (!$dept) {
+            return json_fail('部门不存在');
+        }
+        // 上级部门是否变动
+        if ($dept->dept_super_id != $params['dept_super_id']) {
+            $deptSuperPath = SysDept::where('dept_id', $params['dept_super_id'])->value('dept_super_path');
+        }
+
+        try {
+            $data = [
+                'dept_status' => $params['dept_status'],
+                'dept_category' => $params['dept_category'],
+                'dept_code' => $params['dept_code'],
+                'dept_city' => $params['dept_city'],
+                'dept_name' => $params['dept_name'],
+                'dept_telephone' => $params['dept_telephone'],
+                'dept_position' => $params['dept_position'],
+                'dept_address' => $params['dept_address'],
+                'dept_remark' => $params['dept_remark'],
+                'dept_extend_json' => !empty($params['dept_extend_json']) ? $params['dept_extend_json'] : '{}',
+            ];
+            // 上级变动,更新
+            if (isset($deptSuperPath)) {
+                $data['dept_super_id'] = $params['dept_super_id'];
+                $data['dept_super_path'] = $deptSuperPath . $id . '/';
+            }
+            // 修改失败,异常
+            if (!SysDept::where('dept_id', $id)->update($data)) {
+                throw new \Exception('修改部门失败');
+            }
+        } catch (\Exception $e) {
+            return json_fail('修改部门失败');
+        }
+
+        return json_success('修改部门成功');
+    }
+
+    /**
+     * @Desc 修改部门状态
+     * @Author Gorden
+     * @Date 2024/2/21 10:41
+     *
+     * @param $id
+     * @param $status
+     * @return \support\Response
+     */
+    public static function updateStatus($id, $status)
+    {
+        try {
+            if (!SysDept::where('dept_id', $id)->update(['dept_status' => $status])) {
+                throw new \Exception('部门状态修改失败');
+            }
+        } catch (\Exception $e) {
+            return json_fail('部门状态修改失败');
+        }
+
+        return json_success('部门状态修改成功');
+    }
+
+    /**
+     * @Desc 删除部门
+     * @Author Gorden
+     * @Date 2024/2/21 10:48
+     *
+     * @param $id
+     * @return \support\Response
+     */
+    public static function delDept($id)
+    {
+        try {
+            if (!SysDept::where('dept_id', $id)->delete()) {
+                throw new \Exception('删除部门失败');
+            }
+        } catch (\Exception $e) {
+            return json_fail('删除部门失败');
+        }
+
+        return json_success('删除部门成功');
+    }
+}

+ 17 - 11
app/admin/service/role/RoleService.php

@@ -17,18 +17,18 @@ class RoleService
      * @param $keyword
      * @return \support\Response
      */
-    public static function roleList($page, $limit, $keyword)
+    public static function roleList($page, $limit, $keywords)
     {
         $list = SysRole::select('*')
-            ->when($keyword != '', function ($query) use ($keyword) {
-                $query->where('role_name', 'like', '%' . $keyword . '%');
+            ->when($keywords != '', function ($query) use ($keywords) {
+                $query->where('role_name', 'like', '%' . $keywords . '%');
             })
             ->orderBy('role_addtimes', 'DESC')
             ->forPage($page, $limit)
             ->get()
             ->toArray();
-        $count = SysRole::when($keyword != '', function ($query) use ($keyword) {
-            $query->where('role_name', 'like', '%' . $keyword . '%');
+        $count = SysRole::when($keywords != '', function ($query) use ($keywords) {
+            $query->where('role_name', 'like', '%' . $keywords . '%');
         })->count();
 
         return json_success('', compact('list', 'page', 'limit', 'count'));
@@ -74,7 +74,9 @@ class RoleService
             ];
 
             // 入库
-            SysRole::insert($data);
+            if (!SysRole::insert($data)) {
+                throw new \Exception('角色添加失败');
+            }
         } catch (\Exception $e) {
             return json_fail('角色添加失败');
         }
@@ -106,9 +108,10 @@ class RoleService
                 'role_remark' => $params['role_remark'] ? format_string($params['role_remark']) : null,
                 'role_extend_json' => $params['role_extend_json'],
             ];
-            SysRole::where('role_id', $id)->update($data);
+            if (!SysRole::where('role_id', $id)->update($data)) {
+                throw new \Exception('角色修改失败');
+            }
         } catch (\Exception $e) {
-            dd($e->getMessage());
             return json_fail('角色修改失败');
         }
 
@@ -126,7 +129,9 @@ class RoleService
     public static function delRole($id)
     {
         try {
-            SysRole::where('role_id', $id)->delete();
+            if (!SysRole::where('role_id', $id)->delete()) {
+                throw new \Exception('角色删除失败');
+            }
         } catch (\Exception $e) {
             return json_fail('角色删除失败');
         }
@@ -145,9 +150,10 @@ class RoleService
     public static function updateStatus($id, $roleStatus)
     {
         try {
-            SysRole::where('role_id', $id)->update(['role_status' => $roleStatus]);
+            if (!SysRole::where('role_id', $id)->update(['role_status' => $roleStatus])) {
+                throw new \Exception('角色状态修改失败');
+            }
         } catch (\Exception $e) {
-            dd($e->getMessage());
             return json_fail('角色状态修改失败');
         }
 

+ 30 - 0
app/admin/validate/dept/DeptValidate.php

@@ -0,0 +1,30 @@
+<?php
+
+namespace app\admin\validate\dept;
+
+use think\Validate;
+
+class DeptValidate extends Validate
+{
+    protected $rule = [
+        'dept_id'           => 'require|integer',
+        'dept_super_id'     => 'require|integer',
+        'dept_status'       => 'require|in:ACTIVED,DISABLED',
+        'dept_category'     => 'require|in:职能部门,财务部门,仓库货仓,外延部门,营业场所,其他',
+        'dept_code'         => 'require|alphaDash',
+        'dept_city'         => 'require|chsDash',
+        'dept_name'         => 'require|chsDash',
+        'dept_telephone'    => 'mobile',
+        'dept_position'     => 'regex:/^[0-9\.]+$/',
+        'dept_address'      => 'chsDash',
+        'dept_remark'       => 'chsDash'
+    ];
+
+    protected $message = [];
+
+    protected $scene = [
+        'add' => ['dept_super_id', 'dept_status', 'dept_category', 'dept_code', 'dept_city', 'dept_name', 'dept_telephone', 'dept_position', 'dept_address', 'dept_remark'],
+        'update' => ['dept_super_id', 'dept_status', 'dept_category', 'dept_code', 'dept_city', 'dept_name', 'dept_telephone', 'dept_position', 'dept_address', 'dept_remark'],
+        'update_status' => ['dept_status']
+    ];
+}

+ 15 - 0
app/model/SysDept.php

@@ -0,0 +1,15 @@
+<?php
+
+namespace app\model;
+
+use support\Model;
+
+class SysDept extends Model
+{
+    // 关联表
+    protected $table = 'sys_dept';
+
+    protected $primaryKey = 'dept_id';
+
+    public const UPDATED_AT = null;
+}

+ 15 - 4
route/api.php

@@ -2,11 +2,22 @@
 
 use Webman\Route;
 
+/* 角色管理 */
 Route::group('/role', function () {
     Route::get('/list', [\app\admin\controller\role\Role::class, 'roleList']);
-    Route::get('/info/{id}', [\app\admin\controller\role\Role::class, 'roleInfo']);
+    Route::get('/info/{id:\d}', [\app\admin\controller\role\Role::class, 'roleInfo']);
     Route::post('/add', [\app\admin\controller\role\Role::class, 'addRole']);
-    Route::post('/update/{id}', [\app\admin\controller\role\Role::class, 'updateRole']);
-    Route::delete('/delete/{id}', [\app\admin\controller\role\Role::class, 'delRole']);
-    Route::patch('/updateStatus/{id}', [\app\admin\controller\role\Role::class, 'updateStatus']);
+    Route::post('/update/{id:\d}', [\app\admin\controller\role\Role::class, 'updateRole']);
+    Route::delete('/delete/{id:\d}', [\app\admin\controller\role\Role::class, 'delRole']);
+    Route::post('/updateStatus/{id:\d}', [\app\admin\controller\role\Role::class, 'updateStatus']);
+});
+
+/* 部门管理 */
+Route::group('/dept', function () {
+    Route::get('/list', [\app\admin\controller\dept\Dept::class, 'deptList']);
+    Route::get('/info/{id:\d}', [\app\admin\controller\dept\Dept::class, 'deptInfo']);
+    Route::post('/add', [\app\admin\controller\dept\Dept::class, 'addDept']);
+    Route::post('/update/{id:\d}', [\app\admin\controller\dept\Dept::class, 'updateDept']);
+    Route::post('/updateStatus/{id:\d}', [\app\admin\controller\dept\Dept::class, 'updateStatus']);
+    Route::delete('/delete/{id:\d}', [\app\admin\controller\dept\Dept::class, 'delDept']);
 });