all(); $validator = $this->validator->validateQuery($data); if ($validator->fails()) { throw new BusinessException(400, $validator->errors()->first()); } $query = Campus::query(); if (! empty($data['id'])) { $query->where('id', $data['id']); } if (! empty($data['name'])) { $query->where('name', 'like', "%{$data['name']}%"); } if (isset($data['parent_id'])) { $query->where('parent_id', $data['parent_id']); } if (isset($data['level'])) { $query->where('level', $data['level']); } if (! empty($data['province'])) { $query->where('province', $data['province']); } if (! empty($data['city'])) { $query->where('city', $data['city']); } if (isset($data['status'])) { $query->where('status', $data['status']); } $page = $data['page'] ?? 1; $size = $data['size'] ?? 20; $total = $query->count(); $list = $query->forPage($page, $size)->get()->toArray(); return AetherResponse::success([ 'total' => $total, 'page' => $page, 'size' => $size, 'list' => $list, ]); } /** * 获取省份列表. */ #[GetMapping(path: '/campus/provinces')] public function provinces(): array { $provinces = Campus::level(1) ->enabled() ->orderBy('name') ->get(['id', 'name', 'province']) ->toArray(); return AetherResponse::success($provinces); } /** * 获取城市列表. */ #[GetMapping(path: '/campus/cities')] public function cities(RequestInterface $request): array { $province = $request->input('province'); if (empty($province)) { throw new BusinessException(400, '省份不能为空'); } $cities = Campus::level(2) ->province($province) ->enabled() ->orderBy('name') ->get(['id', 'name', 'city']) ->toArray(); return AetherResponse::success($cities); } /** * 创建校区. */ #[PostMapping(path: '/campus')] public function create(RequestInterface $request): array { $data = $request->all(); $validator = $this->validator->validateCreate($data); if ($validator->fails()) { throw new BusinessException(400, $validator->errors()->first()); } $campus = new Campus(); $campus->fill($data); $campus->save(); return AetherResponse::success($campus->toArray(), '校区创建成功'); } /** * 获取校区详情. */ #[GetMapping(path: '/campus/{id}')] public function get(int $id): array { $campus = Campus::find($id); if (! $campus) { throw new BusinessException(10001); } return AetherResponse::success($campus->toArray()); } /** * 更新校区. */ #[PutMapping(path: '/campus/{id}')] public function update(int $id, RequestInterface $request): array { $data = $request->all(); $data['id'] = $id; $validator = $this->validator->validateUpdate($data); if ($validator->fails()) { throw new BusinessException(400, $validator->errors()->first()); } $campus = Campus::find($id); if (! $campus) { throw new BusinessException(10001); } $campus->fill($data); $campus->save(); return AetherResponse::success($campus->toArray(), '校区更新成功'); } /** * 删除校区. * @throws Exception */ #[DeleteMapping(path: '/campus/{id}')] public function delete(int $id): array { $campus = Campus::find($id); if (! $campus) { throw new BusinessException(10001); } $campus->delete(); return AetherResponse::success(null, '校区删除成功'); } }