|
|
<?php
|
|
|
|
|
|
namespace App\Http\Controllers\Admin;
|
|
|
|
|
|
use App\Http\Requests\StudyRequest;
|
|
|
use App\Models\Study;
|
|
|
use App\Models\StudyAsk;
|
|
|
use App\Helpers\ResponseCode;
|
|
|
use Illuminate\Http\Request;
|
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
|
|
/**
|
|
|
* @OA\Tag(
|
|
|
* name="学习内容管理",
|
|
|
* description="学习内容相关接口"
|
|
|
* )
|
|
|
*/
|
|
|
class StudyController extends BaseController
|
|
|
{
|
|
|
public function __construct()
|
|
|
{
|
|
|
parent::__construct(new Study());
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @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()
|
|
|
{
|
|
|
$request = new StudyRequest();
|
|
|
$request->setContainer(app());
|
|
|
$request->setRedirector(app('redirect'));
|
|
|
|
|
|
DB::beginTransaction();
|
|
|
try {
|
|
|
$data = $request->validated();
|
|
|
$all = request()->all();
|
|
|
|
|
|
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;
|
|
|
}
|
|
|
} |