QuestionPreviewController.php 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Services\ExamPdfExportService;
  4. use Illuminate\Http\Request;
  5. class QuestionPreviewController extends Controller
  6. {
  7. /**
  8. * 显示预览工具页面
  9. */
  10. public function index()
  11. {
  12. return view('tools.question-preview');
  13. }
  14. /**
  15. * 生成 PDF 预览
  16. */
  17. public function generatePdf(Request $request)
  18. {
  19. $request->validate([
  20. 'stem' => 'required|string',
  21. 'options' => 'nullable|array',
  22. 'answer' => 'nullable|string',
  23. 'solution' => 'nullable|string',
  24. ]);
  25. try {
  26. $service = app(ExamPdfExportService::class);
  27. // 过滤空选项
  28. $options = array_filter($request->input('options', []), fn($v) => !empty($v));
  29. // 构建题目数据数组
  30. $questionData = [
  31. 'stem' => $request->input('stem'),
  32. 'options' => $options,
  33. 'answer' => $request->input('answer'),
  34. 'solution' => $request->input('solution'),
  35. ];
  36. $result = $service->generatePreviewPdf($questionData);
  37. if (!$result || empty($result['url'])) {
  38. throw new \Exception('PDF 生成失败');
  39. }
  40. return response()->json([
  41. 'success' => true,
  42. 'url' => $result['url'],
  43. ]);
  44. } catch (\Exception $e) {
  45. return response()->json([
  46. 'success' => false,
  47. 'error' => $e->getMessage(),
  48. ], 500);
  49. }
  50. }
  51. }