web.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <?php
  2. use App\Http\Controllers\ImportStreamController;
  3. use App\Http\Controllers\MenuVisibilityController;
  4. use App\Http\Controllers\NotificationController;
  5. use App\Services\KatexRenderer;
  6. use App\Services\KnowledgeExplanationService;
  7. use Illuminate\Http\Request;
  8. use Illuminate\Support\Facades\Route;
  9. Route::get('/', function () {
  10. return redirect()->route('filament.admin.pages.dashboard');
  11. });
  12. Route::get('/test-math', function () {
  13. return view('test-math');
  14. });
  15. Route::get('/test-case', function () {
  16. return view('test-case');
  17. });
  18. Route::view('/knowledge-mindmap-public', 'public.knowledge-mindmap');
  19. Route::get('/admin/intelligent-exam/pdf/{paper_id}', [\App\Http\Controllers\ExamPdfController::class, 'show'])->name('filament.admin.auth.intelligent-exam.pdf');
  20. Route::get('/admin/intelligent-exam/grading/{paper_id}', [\App\Http\Controllers\ExamPdfController::class, 'showGrading'])->name('filament.admin.auth.intelligent-exam.grading');
  21. Route::get('/admin/intelligent-exam/knowledge-explanation/{paper_id}', [\App\Http\Controllers\ExamPdfController::class, 'showKnowledgeExplanation'])->name('filament.admin.auth.intelligent-exam.knowledge-explanation');
  22. // 服务端渲染预览(与 PDF 生成效果一致,用于调试)
  23. Route::get('/preview/exam/pdf-server/{paper_id}', [\App\Http\Controllers\ExamPdfController::class, 'showServerRendered'])->name('preview.exam.pdf-server');
  24. Route::get('/preview/exam/grading-server/{paper_id}', [\App\Http\Controllers\ExamPdfController::class, 'showGradingServerRendered'])->name('preview.exam.grading-server');
  25. Route::get('/admin/exam-analysis/pdf', [\App\Http\Controllers\ExamAnalysisPdfController::class, 'show'])->name('filament.admin.auth.exam-analysis.pdf');
  26. // 检查通知的路由
  27. Route::get('/admin/question-management/check-notifications', [NotificationController::class, 'checkNotifications']);
  28. // 菜单可见性切换路由
  29. Route::post('/admin/toggle-menu-visibility', [MenuVisibilityController::class, 'toggle'])
  30. ->name('filament.admin.auth.toggle-menu-visibility');
  31. // Livewire测试路由
  32. Route::get('/test-livewire', function () {
  33. return view('test-livewire');
  34. })->name('test.livewire');
  35. // 教材删除路由 - 通过URL参数传递ID,完全绕过Filament的$record传递问题
  36. // 使用GET方法避免CSRF问题
  37. Route::get('/admin/textbooks/{id}/delete', [\App\Http\Controllers\TextbookController::class, 'delete'])
  38. ->name('filament.admin.resources.textbooks.delete');
  39. Route::get('/admin/markdown-imports/stream', [ImportStreamController::class, 'stream'])
  40. ->name('filament.admin.markdown-imports.stream');
  41. // 题目预览验证工具(公开访问,无需登录)
  42. Route::get('/tools/question-preview', [\App\Http\Controllers\QuestionPreviewController::class, 'index'])
  43. ->name('tools.question-preview');
  44. Route::post('/tools/question-preview/pdf', [\App\Http\Controllers\QuestionPreviewController::class, 'generatePdf'])
  45. ->name('tools.question-preview.pdf');
  46. // 知识点讲解模板本地预览(仅本地环境,避免影响线上)
  47. Route::get('/tools/knowledge-explanation-preview', function (Request $request, KnowledgeExplanationService $knowledgeExplanationService, KatexRenderer $katexRenderer) {
  48. abort_unless(app()->environment('local'), 404);
  49. $kpCodes = (string) $request->query('kp_codes', 'M04A');
  50. $payload = [
  51. 'kp_codes' => array_values(array_filter(array_map('trim', explode(',', $kpCodes)))),
  52. 'student_id' => (string) $request->query('student_id', '1764913911'),
  53. 'teacher_id' => (string) $request->query('teacher_id', '45'),
  54. 'difficulty_category' => $request->query('difficulty_category') !== null
  55. ? (int) $request->query('difficulty_category')
  56. : null,
  57. ];
  58. $prepared = $knowledgeExplanationService->previewKnowledgeExplanation($payload);
  59. $knowledgeId = (string) ($prepared['knowledge_id'] ?? '');
  60. $displayCode = (string) preg_replace('/^(knowledge_|paper_)/', '', $knowledgeId);
  61. $html = view('pdf.knowledge-explanation-standalone', [
  62. 'knowledgeId' => $knowledgeId,
  63. 'knowledgePoints' => (array) ($prepared['knowledge_points'] ?? []),
  64. 'studentName' => (string) ($prepared['student_id'] ?? ''),
  65. 'teacherName' => (string) ($prepared['teacher_id'] ?? ''),
  66. 'generateDateTime' => now()->format('Y年m月d日 H:i:s'),
  67. 'pdfMeta' => ['header_title' => $displayCode !== '' ? $displayCode : $knowledgeId],
  68. 'examCode' => $displayCode !== '' ? $displayCode : $knowledgeId,
  69. ])->render();
  70. // 与 PDF 生成链路一致:服务端 KaTeX 预渲染,避免预览页出现原始 $...$ 公式
  71. $html = $katexRenderer->renderHtml($html);
  72. return response($html);
  73. })->name('tools.knowledge-explanation-preview');