{{-- 页面标题区域 --}}

错题本

查看学生错题记录与AI分析,生成针对性练习

{{-- 选择器区域 --}}
@if(!$this->isTeacher)
@endif
{{-- 错误提示 --}} @if ($errorMessage)

加载错误

{{ $errorMessage }}

@endif @if ($actionMessage)

{{ $actionMessage }}

@endif {{-- 统计卡片 --}}

总错题

{{ $summary['total'] ?? 0 }}

本周新增

{{ $summary['this_week'] ?? 0 }}

待复习

{{ $summary['pending_review'] ?? 0 }}

%

掌握率

@php $rate = $summary['mastery_rate'] ?? null; @endphp

{{ $rate !== null ? number_format($rate * 100, 1) . '%' : '--' }}

{{-- 加载状态 --}} @if ($isLoading)

正在加载数据,请稍候...

@else {{-- 主内容区域 --}}
{{-- 左侧筛选 --}}

筛选条件

{{-- 时间范围 --}}
{{-- 错误类型 --}}
@foreach(['计算错误', '概念错误', '方法错误', '审题错误'] as $type) @endforeach
{{-- 右侧错题列表 --}}
{{-- 错题列表 --}}

错题列表 ({{ $total }})

@if(!empty($selectedMistakeIds)) @endif
@if(empty($mistakes))

暂无错题数据

请先选择学生后刷新数据

@else
@foreach($mistakes as $mistake)
{{-- 头部 --}}
{{-- 标签行 --}}
#{{ $mistake['id'] ?? '' }} @if(!empty($mistake['question']['question_number'])) 第{{ $mistake['question']['question_number'] }}题 @endif @php $createdAt = $mistake['created_at'] ?? null; if ($createdAt) { try { $date = \Carbon\Carbon::parse($createdAt); echo $date->format('Y-m-d H:i'); } catch (\Exception $e) { echo $createdAt; } } @endphp @if(!empty($mistake['error_type'])) {{ $mistake['error_type'] }} @endif @if(!empty($mistake['mistake_category'])) {{ $mistake['mistake_category'] }} @endif
{{-- 题干 --}} @if(!empty($mistake['question']['stem']))

题干

@endif {{-- 判卷结果 + 知识点 --}}
@if(!empty($mistake['mark_detected'])) 老师判卷: {{ $mistake['mark_detected'] }} @endif @if(isset($mistake['score']) && isset($mistake['full_score'])) @php $score = floatval($mistake['score'] ?? 0); $fullScore = floatval($mistake['full_score'] ?? 0); $isFullScore = $fullScore > 0 && $score >= $fullScore; @endphp 得分: {{ $mistake['score'] }}/{{ $mistake['full_score'] }} @if($isFullScore) ✓ @endif @endif @if(!empty($mistake['question']['kp_code'])) 知识点: {{ $mistake['question']['kp_code'] }} @endif @if(!empty($mistake['skill_ids'])) @foreach($mistake['skill_ids'] as $skillId) {{ $skillId }} @endforeach @endif
{{-- 作答对比与解题步骤 --}}
@if(!empty($mistake['student_answer']) && trim($mistake['student_answer']) !== '' && trim($mistake['student_answer']) !== '未作答')

学生作答 @if(!empty($mistake['answer_confidence'])) (置信度: {{ number_format($mistake['answer_confidence'] * 100, 1) }}%) @endif

{{ $mistake['student_answer'] }}

@elseif(!empty($mistake['mark_detected']) && trim($mistake['student_answer']) === '未作答') {{-- 老师已评分但学生未作答的题目,不显示学生作答区域 --}} @elseif(!empty($mistake['student_answer']) && trim($mistake['student_answer']) !== '')

学生作答 @if(!empty($mistake['answer_confidence'])) (置信度: {{ number_format($mistake['answer_confidence'] * 100, 1) }}%) @endif

{{ $mistake['student_answer'] }}

@endif @if(!empty($mistake['question']['solution']))

解题步骤

{{ $mistake['question']['solution'] }}
@endif @if(!empty($mistake['question']['answer']))

正确答案

{{ $mistake['question']['answer'] }}

@endif
{{-- AI分析 --}} @if(!empty($mistake['ai_analysis']['reason']) || !empty($mistake['ai_analysis']['solution']) || !empty($mistake['ai_analysis']['suggestions']))
查看AI分析 @if(!empty($mistake['ai_analysis']['model_used'])) ({{ $mistake['ai_analysis']['model_used'] }}) @endif
@if(!empty($mistake['ai_analysis']['reason']))

错因:{{ $mistake['ai_analysis']['reason'] }}

@endif @if(!empty($mistake['ai_analysis']['solution']))

解法:{{ $mistake['ai_analysis']['solution'] }}

@endif @if(!empty($mistake['ai_analysis']['suggestions']))

建议:{{ $mistake['ai_analysis']['suggestions'] }}

@endif @if(!empty($mistake['ai_analysis']['next_steps']))
下一步:
    @foreach($mistake['ai_analysis']['next_steps'] as $step)
  • {{ is_array($step) ? json_encode($step) : $step }}
  • @endforeach
@endif
@endif {{-- 操作按钮 --}}
@if(!empty($mistake['answer_area_crop_path'])) 查看作答图片 @endif
{{-- 关联题 --}} @if(!empty($relatedQuestions[$mistake['id'] ?? ''] ?? []))

关联题目

@foreach($relatedQuestions[$mistake['id']] as $related)

{{ $related['stem'] ?? '题目' }}

@endforeach
@endif
@endforeach
{{-- 分页 --}} @php $maxPage = (int) ceil($total / $perPage); @endphp @if($maxPage > 1)
共 {{ $total }} 条,第 {{ $page }}/{{ $maxPage }} 页
@for($i = max(1, $page - 2); $i <= min($maxPage, $page + 2); $i++) @endfor
@endif @endif
{{-- 推荐练习题 --}} @if(!empty($recommendations))

推荐练习题 ({{ count($recommendations) }})

@foreach($recommendations as $rec)

{{ $rec['stem'] ?? '推荐题目' }}

@if(!empty($rec['kp_codes'])) {{ is_array($rec['kp_codes']) ? implode(',', $rec['kp_codes']) : $rec['kp_codes'] }} @endif
@endforeach
@endif {{-- 错误分析 --}} @if(!empty($patterns['error_types']) || !empty($patterns['top_kps']))

错误分析

@if(!empty($patterns['error_types']))

错误类型分布

@foreach($patterns['error_types'] as $et)
{{ $et['type'] ?? '未知' }} {{ $et['count'] ?? 0 }}
@endforeach
@endif @if(!empty($patterns['top_kps']))

薄弱知识点

@foreach($patterns['top_kps'] as $kp)
{{ $kp['name'] ?? $kp['kp_code'] ?? '知识点' }} {{ $kp['mistake_count'] ?? 0 }}
@endforeach
@endif
@endif
@endif