route('filament.admin.pages.dashboard'); }); Route::get('/test-math', function () { return view('test-math'); }); Route::get('/test-case', function () { return view('test-case'); }); Route::view('/knowledge-mindmap-public', 'public.knowledge-mindmap'); Route::get('/admin/intelligent-exam/pdf/{paper_id}', [\App\Http\Controllers\ExamPdfController::class, 'show'])->name('filament.admin.auth.intelligent-exam.pdf'); Route::get('/admin/intelligent-exam/grading/{paper_id}', [\App\Http\Controllers\ExamPdfController::class, 'showGrading'])->name('filament.admin.auth.intelligent-exam.grading'); Route::get('/admin/intelligent-exam/knowledge-explanation/{paper_id}', [\App\Http\Controllers\ExamPdfController::class, 'showKnowledgeExplanation'])->name('filament.admin.auth.intelligent-exam.knowledge-explanation'); // 服务端渲染预览(与 PDF 生成效果一致,用于调试) Route::get('/preview/exam/pdf-server/{paper_id}', [\App\Http\Controllers\ExamPdfController::class, 'showServerRendered'])->name('preview.exam.pdf-server'); Route::get('/preview/exam/grading-server/{paper_id}', [\App\Http\Controllers\ExamPdfController::class, 'showGradingServerRendered'])->name('preview.exam.grading-server'); Route::get('/admin/exam-analysis/pdf', [\App\Http\Controllers\ExamAnalysisPdfController::class, 'show'])->name('filament.admin.auth.exam-analysis.pdf'); // 检查通知的路由 Route::get('/admin/question-management/check-notifications', [NotificationController::class, 'checkNotifications']); // 菜单可见性切换路由 Route::post('/admin/toggle-menu-visibility', [MenuVisibilityController::class, 'toggle']) ->name('filament.admin.auth.toggle-menu-visibility'); // Livewire测试路由 Route::get('/test-livewire', function () { return view('test-livewire'); })->name('test.livewire'); // 教材删除路由 - 通过URL参数传递ID,完全绕过Filament的$record传递问题 // 使用GET方法避免CSRF问题 Route::get('/admin/textbooks/{id}/delete', [\App\Http\Controllers\TextbookController::class, 'delete']) ->name('filament.admin.resources.textbooks.delete'); Route::get('/admin/markdown-imports/stream', [ImportStreamController::class, 'stream']) ->name('filament.admin.markdown-imports.stream'); // 题目预览验证工具(公开访问,无需登录) Route::get('/tools/question-preview', [\App\Http\Controllers\QuestionPreviewController::class, 'index']) ->name('tools.question-preview'); Route::post('/tools/question-preview/pdf', [\App\Http\Controllers\QuestionPreviewController::class, 'generatePdf']) ->name('tools.question-preview.pdf'); // 知识点讲解模板本地预览(仅本地环境,避免影响线上) Route::get('/tools/knowledge-explanation-preview', function (Request $request, KnowledgeExplanationService $knowledgeExplanationService, KatexRenderer $katexRenderer) { abort_unless(app()->environment('local'), 404); $kpCodes = (string) $request->query('kp_codes', 'M04A'); $payload = [ 'kp_codes' => array_values(array_filter(array_map('trim', explode(',', $kpCodes)))), 'student_id' => (string) $request->query('student_id', '1764913911'), 'teacher_id' => (string) $request->query('teacher_id', '45'), 'difficulty_category' => $request->query('difficulty_category') !== null ? (int) $request->query('difficulty_category') : null, ]; $prepared = $knowledgeExplanationService->previewKnowledgeExplanation($payload); $knowledgeId = (string) ($prepared['knowledge_id'] ?? ''); $displayCode = (string) preg_replace('/^(knowledge_|paper_)/', '', $knowledgeId); $html = view('pdf.knowledge-explanation-standalone', [ 'knowledgeId' => $knowledgeId, 'knowledgePoints' => (array) ($prepared['knowledge_points'] ?? []), 'studentName' => (string) ($prepared['student_id'] ?? ''), 'teacherName' => (string) ($prepared['teacher_id'] ?? ''), 'generateDateTime' => now()->format('Y年m月d日 H:i:s'), 'pdfMeta' => ['header_title' => $displayCode !== '' ? $displayCode : $knowledgeId], 'examCode' => $displayCode !== '' ? $displayCode : $knowledgeId, ])->render(); // 与 PDF 生成链路一致:服务端 KaTeX 预渲染,避免预览页出现原始 $...$ 公式 $html = $katexRenderer->renderHtml($html); return response($html); })->name('tools.knowledge-explanation-preview');