input('name', ''); $code = $request->input('code', ''); $status = $request->input('status', null); $page = $request->input('page', 1); $pageSize = $request->input('page_size', 10); // 获取当前登录用户信息 $user = auth()->user(); $isAdmin = false; $userDeptId = null; if ($user) { // 检查是否是管理员(这里假设is_admin字段在users表中) $isAdmin = isset($user->is_admin) && $user->is_admin == 1; if (!$isAdmin && isset($user->department_id)) { $userDeptId = $user->department_id; } } // 构建查询 $query = DB::table('department') ->where('deleted', 0); // 添加查询条件 if (!empty($name)) { $query->where('name', 'like', '%' . $name . '%'); } if (!empty($code)) { $query->where('code', 'like', '%' . $code . '%'); } if ($status !== null && $status !== '') { $query->where('status', $status); } // 非管理员只能查看自己的科室 if (!$isAdmin && $userDeptId) { $query->where('id', $userDeptId); } // 计算总数 $total = $query->count(); // 分页查询 $departments = $query->orderBy('id', 'desc') ->skip(($page - 1) * $pageSize) ->take($pageSize) ->get(); // 统计每个科室的资源数量和资源名称列表 foreach ($departments as $department) { $resources = DB::table('department_resource') ->where('department_id', $department->id) ->where('deleted', 0) ->select('name') ->get(); $department->resource_count = count($resources); $department->resource_names = $resources->pluck('name')->toArray(); // 统计科室下的用户 $users = DB::table('sys_user') ->where('dept_id', $department->id) ->where('deleted', 0) ->select('id', 'nickname') ->get(); $department->user_count = count($users); $department->user_list = $users->map(function($u) { return ['id' => $u->id, 'nickname' => $u->nickname]; })->toArray(); } // 构造返回数据 $data = [ 'list' => $departments, 'total' => $total, 'page' => $page, 'page_size' => $pageSize, 'total_pages' => ceil($total / $pageSize) ]; return Rs::success($data); } /** * 获取所有可用科室(不分页) * @param Request $request * @return \Illuminate\Http\JsonResponse */ public function getAll(Request $request) { $status = $request->input('status', null); // 获取当前登录用户信息 $user = auth()->user(); $isAdmin = false; $userDeptId = null; if ($user) { // 检查是否是管理员 $isAdmin = isset($user->is_admin) && $user->is_admin == 1; if (!$isAdmin && isset($user->department_id)) { $userDeptId = $user->department_id; } } // 构建查询 $query = DB::table('department') ->where('deleted', 0); // 添加查询条件 if ($status !== null && $status !== '') { $query->where('status', $status); } // 非管理员只能查看自己的科室 if (!$isAdmin && $userDeptId) { $query->where('id', $userDeptId); } // 查询所有数据,不分页 $departments = $query->orderBy('id', 'asc')->get(); return Rs::success($departments); } /** * 保存科室信息 * @param Request $request * @return \Illuminate\Http\JsonResponse */ public function Save(Request $request) { $data = $request->validate([ 'id' => 'required|integer', 'name' => 'required|string|max:50', 'code' => [ 'required', 'string', 'max:50', Rule::unique('department', 'code')->ignore($request->id, 'id'), ], 'status' => 'required|integer|in:0,1', ]); $conditions = ['id' => $data['id']]; $values = [ 'name' => $data['name'], 'code' => $data['code'], 'status' => $data['status'], ]; $updated = DB::table('department')->updateOrInsert($conditions, $values); if ($updated) { return Rs::success(); } return Rs::error('操作失败'); } /** * 删除科室 * @param Request $request * @return \Illuminate\Http\JsonResponse */ public function Delete(Request $request) { $data = $request->validate([ 'id' => 'required|integer', ]); // 检查是否有关联的科室资源 $hasResources = DB::table('department_resource') ->where('department_id', $data['id']) ->where('deleted', 0) ->exists(); if ($hasResources) { return Rs::error('该科室下存在科室资源,无法删除'); } $deleted = DB::table('department')->where('id', $data['id'])->update(['deleted' => 1]); if ($deleted) { return Rs::success(); } return Rs::error('删除失败'); } }