service = $service; $this->validate = $validate; $this->currentUser = Container::make(CurrentUser::class); } #[OA\Get( path: '/article/index', summary: '内容中心列表', tags: ['article-content'] )] #[Permission(code: 'article:list', description: '内容中心列表')] #[PageResponse(schema: [], example: [])] public function index(Request $request): \support\Response { return parent::index($request); } #[OA\Get( path: '/article/index/{id}', summary: '内容中心详情', tags: ['article-content'], x: [ SchemaConstants::X_PROPERTY_IN => 'id', SchemaConstants::X_SCHEMA_REQUEST => IdRequest::class, ] )] #[Permission(code: 'article:read', description: '内容中心详情')] #[SimpleResponse(schema: [], example: [])] public function show(Request $request): \support\Response { return parent::show($request); } #[OA\Post( path: '/article/index', summary: '创建内容', tags: ['article-content'] )] #[Permission(code: 'article:create', description: '创建内容')] #[SimpleResponse(schema: [], example: [])] public function store(Request $request): \support\Response { return parent::store($request); } #[OA\Put( path: '/article/index/{id}', summary: '更新内容', tags: ['article-content'], x: [ SchemaConstants::X_PROPERTY_IN => 'id', SchemaConstants::X_SCHEMA_REQUEST => IdRequest::class, ] )] #[Permission(code: 'article:update', description: '更新内容')] #[SimpleResponse(schema: [], example: [])] public function update(Request $request): \support\Response { return parent::update($request); } #[OA\Post( path: '/article/index/export', summary: '导出内容', tags: ['article-content'] )] #[Permission(code: 'article:list', description: '导出内容')] #[SimpleResponse(schema: [], example: [])] public function export(Request $request): \support\Response { return parent::export($request); } protected function selectInput(Request $request, ?array $config = null): array { $result = parent::selectInput($request, $config); if (empty($result[4])) { $result[4] = 'published_at desc,id desc'; } return $result; } protected function insertInput(Request $request): array { return $this->inputFilter($request->all(), ['tag_ids']); } #[OA\Delete( path: '/article/index/{id}', summary: '删除内容', tags: ['article-content'], x: [ SchemaConstants::X_PROPERTY_IN => 'id', SchemaConstants::X_SCHEMA_REQUEST => IdRequest::class, ] )] #[Permission(code: 'article:delete', description: '删除内容')] #[SimpleResponse(schema: [], example: [])] public function destroy(Request $request): \support\Response { return $this->deleteContents($request); } #[OA\Delete( path: '/article/index', summary: '批量删除内容', tags: ['article-content'], x: [SchemaConstants::X_SCHEMA_REQUEST => BatchDeleteRequest::class] )] #[Permission(code: 'article:delete', description: '批量删除内容')] #[SimpleResponse(schema: [], example: [])] public function batchDelete(Request $request): \support\Response { return $this->deleteContents($request); } protected function deleteContents(Request $request): \support\Response { try { $ids = $this->getDeleteIds($request); if (empty($ids)) { throw new \Exception('删除参数不能为空'); } $result = $this->service->transaction(function () use ($ids) { $data = is_array($ids) ? $ids : explode(',', $ids); $deletedIds = []; $currentUserId = $this->currentUser->id(); foreach ($data as $id) { $item = Content::query()->find($id); if (!$item) { continue; } if ($currentUserId && $item->isFillable('updated_by')) { $item->setAttribute('updated_by', $currentUserId); $item->save(); } $item->delete(); $deletedIds[] = $item->id; } return $deletedIds; }); return Json::success('ok', $result); } catch (\Throwable $e) { return Json::fail($e->getMessage()); } } }