all(); $list = StudyLog::with('user')->where(function ($query) use ($all) { if (isset($all['keyword'])) { $query->where('content', 'like', '%' . $all['keyword'] . '%'); } })->orderBy($all['sort_name'] ?? 'id', $all['sort_type'] ?? 'desc') ->paginate($all['page_size'] ?? 20); return $this->success($list); } /** * @OA\Get( * path="/api/admin/studies/index", * tags={"学习内容管理"}, * summary="学习内容列表", * description="获取学习内容列表", * @OA\Parameter(name="is_export", in="query", @OA\Schema(type="string"), required=false, description="是否导出0否1是"), * @OA\Parameter(name="export_fields", in="query", @OA\Schema(type="string"), required=false, description="需要导出的字段数组"), * @OA\Parameter(name="filter", in="query", @OA\Schema(type="string"), required=false, description="查询条件。数组"), * @OA\Parameter(name="show_relation", in="query", @OA\Schema(type="string"), required=false, description="需要输出的关联关系数组,填写输出指定数据"), * @OA\Parameter(name="page_size", in="query", @OA\Schema(type="string"), required=false, description="每页显示的条数"), * @OA\Parameter(name="page", in="query", @OA\Schema(type="string"), required=false, description="页码"), * @OA\Parameter(name="sort_name", in="query", @OA\Schema(type="string"), required=false, description="排序字段名字"), * @OA\Parameter(name="sort_type", in="query", @OA\Schema(type="string"), required=false, description="排序类型"), * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), * @OA\Response( * response="200", * description="成功获取学习内容列表" * ) * ) */ public function index() { $all = request()->all(); $filter = $all['filter'] ?? []; $show_relation = $all['show_relation'] ?? []; $page_size = $all['page_size'] ?? 10; $page = $all['page'] ?? 1; $sort_name = $all['sort_name'] ?? 'id'; $sort_type = $all['sort_type'] ?? 'desc'; $query = $this->model->query(); // 应用过滤条件 if (!empty($filter)) { $query = $this->applyFilters($query, $filter); } // 应用排序 $query->orderBy($sort_name, $sort_type); // 加载关联关系 if (!empty($show_relation)) { $query->with($show_relation); } // 分页 $result = $query->paginate($page_size, ['*'], 'page', $page); return $this->success($result); } /** * @OA\Get( * path="/api/admin/studies/show", * tags={"学习内容管理"}, * summary="学习内容详情", * description="获取指定的学习内容详情", * @OA\Parameter(name="id", in="query", @OA\Schema(type="string"), required=true, description="学习内容ID"), * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), * @OA\Response( * response="200", * description="成功获取学习内容详情" * ) * ) */ public function show() { $all = request()->all(); $detail = $this->model->with(['studyAsks'])->find($all['id']); return $this->success($detail); } /** * @OA\Post( * path="/api/admin/studies/save", * tags={"学习内容管理"}, * summary="新增/更新学习内容", * description="创建或更新学习内容", * @OA\Parameter(name="id", in="query", @OA\Schema(type="string"), required=false, description="学习内容ID,更新时必填"), * @OA\Parameter(name="title", in="query", @OA\Schema(type="string"), required=true, description="标题"), * @OA\Parameter(name="type", in="query", @OA\Schema(type="string"), required=true, description="类型"), * @OA\Parameter(name="content", in="query", @OA\Schema(type="string"), required=false, description="内容"), * @OA\Parameter(name="file", in="query", @OA\Schema(type="string"), required=false, description="文件"), * @OA\Parameter(name="duration", in="query", @OA\Schema(type="string"), required=false, description="时长"), * @OA\Parameter(name="is_required", in="query", @OA\Schema(type="string"), required=false, description="是否必学"), * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), * @OA\Response( * response="200", * description="成功保存学习内容" * ) * ) */ public function save() { $formRequest = app(StudyRequest::class); DB::beginTransaction(); try { $all = request()->all(); $validator = Validator::make($all, $formRequest->rules(), $formRequest->messages(), method_exists($formRequest, 'attributes') ? $formRequest->attributes() : []); if ($validator->fails()) { return $this->fail([ResponseCode::ERROR_PARAMETER, implode(',', $validator->errors()->all())]); } $data = $validator->validated(); if (isset($all['id'])) { // 更新 $study = $this->model->find($all['id']); if (!$study) { return $this->fail([ResponseCode::ERROR_BUSINESS, __('study.not_found')]); } $study->update($data); $message = __('study.updated_successfully'); } else { // 新增 $study = $this->model->create($data); $message = __('study.created_successfully'); } DB::commit(); return $this->success($study); } catch (\Exception $exception) { DB::rollBack(); return $this->fail([$exception->getCode(), $exception->getMessage()]); } } /** * @OA\Get( * path="/api/admin/studies/destroy", * tags={"学习内容管理"}, * summary="删除学习内容", * description="删除指定的学习内容", * @OA\Parameter(name="id", in="query", @OA\Schema(type="string"), required=true, description="学习内容ID"), * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), * @OA\Response( * response="200", * description="成功删除学习内容" * ) * ) */ public function destroy() { $all = request()->all(); $study = $this->model->find($all['id']); if (!$study) { return $this->fail([ResponseCode::ERROR_BUSINESS, __('study.not_found')]); } DB::beginTransaction(); try { $study->delete(); DB::commit(); return $this->success(__('study.deleted_successfully')); } catch (\Exception $exception) { DB::rollBack(); return $this->fail([$exception->getCode(), $exception->getMessage()]); } } /** * 应用过滤条件 */ private function applyFilters($query, $filter) { foreach ($filter as $key => $value) { if (is_array($value)) { $query->whereIn($key, $value); } else { $query->where($key, $value); } } return $query; } }