service = $service; $this->validate = $validate; } #[OA\Get(path: '/feedback', summary: '问题反馈列表', tags: ['问题反馈'], x: [SchemaConstants::X_SCHEMA_REQUEST => FeedbackQueryRequest::class])] #[Permission(code: 'setting:feedback:list')] #[PageResponse(schema: FeedbackResponse::class, example: [])] public function index(Request $request): \support\Response { return parent::index($request); } #[OA\Get(path: '/feedback/{id}', summary: '问题反馈详情', tags: ['问题反馈'], x: [SchemaConstants::X_PROPERTY_IN => 'id', SchemaConstants::X_SCHEMA_REQUEST => IdRequest::class])] #[Permission(code: 'setting:feedback:read')] #[SimpleResponse(schema: FeedbackResponse::class, example: ['code' => 0, 'message' => 'success', 'data' => []])] public function show(Request $request): \support\Response { return parent::show($request); } #[OA\Post(path: '/feedback', summary: '创建问题反馈', tags: ['问题反馈'], x: [SchemaConstants::X_SCHEMA_REQUEST => FeedbackFormRequest::class])] #[Permission(code: 'setting:feedback:create')] #[SimpleResponse(example: ['code' => 0, 'message' => 'success', 'data' => []])] public function store(Request $request): \support\Response { return parent::store($request); } #[OA\Put(path: '/feedback/{id}', summary: '更新问题反馈', tags: ['问题反馈'], x: [SchemaConstants::X_SCHEMA_REQUEST => FeedbackFormRequest::class])] #[OA\Parameter(name: 'id', description: '反馈ID', in: 'path', required: true, schema: new OA\Schema(type: 'string'))] #[Permission(code: 'setting:feedback:update')] #[SimpleResponse(example: ['code' => 0, 'message' => 'success', 'data' => []])] public function update(Request $request): \support\Response { return parent::update($request); } #[OA\Post( path: '/feedback/{id}/reply', summary: '回复问题反馈', tags: ['问题反馈'], parameters: [new OA\Parameter(name: 'id', description: '反馈ID', in: 'path', required: true, schema: new OA\Schema(type: 'string'))], requestBody: new OA\RequestBody( required: true, content: new OA\JsonContent( required: ['reply_content'], properties: [new OA\Property(property: 'reply_content', description: '回复内容', type: 'string', maxLength: 2000)] ) ) )] #[Permission(code: 'setting:feedback:reply')] #[SimpleResponse(schema: FeedbackResponse::class, example: ['code' => 0, 'message' => '回复成功', 'data' => []])] public function reply(Request $request): \support\Response { try { $data = [ 'id' => $request->route->param('id'), 'reply_content' => trim((string)$request->input('reply_content')), ]; $this->validate->scene('reply')->check($data); if ($data['reply_content'] === '') { return Json::fail('请填写回复内容'); } $feedback = $this->service->get($data['id']); if (!$feedback) { return Json::fail('反馈记录不存在'); } $adminId = Container::make(CurrentUser::class)->id(); if (!$adminId) { return Json::fail('登录状态已失效'); } $this->service->update($data['id'], [ 'reply_content' => $data['reply_content'], 'reply_by' => $adminId, 'reply_at' => time(), ]); return Json::success('回复成功', $this->service->get($data['id'])?->toArray()); } catch (\Throwable $e) { return Json::fail($e->getMessage()); } } #[OA\Delete(path: '/feedback/{id}', summary: '删除问题反馈', tags: ['问题反馈'], x: [SchemaConstants::X_PROPERTY_IN => 'id', SchemaConstants::X_SCHEMA_REQUEST => IdRequest::class])] #[Permission(code: 'setting:feedback:delete')] #[SimpleResponse(example: ['code' => 0, 'message' => 'success', 'data' => []])] public function destroy(Request $request): \support\Response { return parent::destroy($request); } #[OA\Delete(path: '/feedback', summary: '批量删除问题反馈', tags: ['问题反馈'], x: [SchemaConstants::X_SCHEMA_REQUEST => BatchDeleteRequest::class])] #[Permission(code: 'setting:feedback:delete')] #[SimpleResponse(example: ['code' => 0, 'message' => 'success', 'data' => []])] public function batchDelete(Request $request): \support\Response { return parent::destroy($request); } }