You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

214 lines
6.0 KiB
PHP

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
namespace App\Http\Controllers\API\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Lib\Rs;
use Illuminate\Support\Facades\DB;
use Illuminate\Validation\Rule;
class DepartmentController extends Controller
{
/**
* 获取科室列表
* @param Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function list(Request $request)
{
// 获取查询参数
$name = $request->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('删除失败');
}
}