manual-questions.blade.php 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. {{-- 手动评分题目显示组件 --}}
  2. <div class="space-y-4">
  3. <div class="flex items-center justify-between">
  4. <h2 class="text-2xl font-bold">题目与作答</h2>
  5. <div class="badge badge-info badge-lg">共 {{ count($questions) }} 题</div>
  6. </div>
  7. @if(count($questions) > 0)
  8. <div class="space-y-4">
  9. @foreach($questions as $question)
  10. <div class="card bg-base-100 shadow-xl">
  11. <div class="card-body">
  12. {{-- 题目标题 --}}
  13. <div class="flex items-center gap-2 mb-3">
  14. <span class="badge badge-primary badge-lg">第 {{ $question['question_number'] }} 题</span>
  15. <span class="badge badge-outline">{{ $question['question_type'] ?? '未知类型' }}</span>
  16. <span class="badge badge-ghost">{{ $question['score'] ?? 0 }}分</span>
  17. {{-- 评分结果 --}}
  18. <div class="ml-auto flex items-center gap-2">
  19. @if(isset($question['is_correct']))
  20. @if($question['is_correct'])
  21. <div class="badge badge-success badge-lg gap-2">
  22. <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
  23. <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path>
  24. </svg>
  25. 正确
  26. </div>
  27. @else
  28. <div class="badge badge-error badge-lg gap-2">
  29. <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
  30. <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"></path>
  31. </svg>
  32. 错误
  33. </div>
  34. @endif
  35. @endif
  36. @if(isset($question['actual_score']))
  37. <div class="text-2xl font-bold">
  38. {{ $question['actual_score'] }}<span class="text-sm opacity-70">/{{ $question['score'] }}</span>
  39. </div>
  40. @endif
  41. </div>
  42. </div>
  43. <div class="divider my-2"></div>
  44. {{-- 题目内容 --}}
  45. <div class="mb-3">
  46. <div class="font-semibold mb-2 flex items-center gap-2">
  47. <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
  48. <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8.228 9c.549-1.165 2.03-2 3.772-2 2.21 0 4 1.343 4 3 0 1.4-1.278 2.575-3.006 2.907-.542.104-.994.54-.994 1.093m0 3h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path>
  49. </svg>
  50. 题目
  51. </div>
  52. <div class="prose max-w-none pl-6">
  53. @math($question['content'] ?? '题目内容缺失')
  54. </div>
  55. </div>
  56. {{-- 学生答案 --}}
  57. <div class="alert alert-info mb-3">
  58. <svg class="w-5 h-5 shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
  59. <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 3.536L6.5 21.036H3v-3.572L16.732 3.732z"></path>
  60. </svg>
  61. <div class="w-full">
  62. <div class="font-semibold">学生答案</div>
  63. <div class="mt-1">
  64. @if(isset($question['student_answer']) && $question['student_answer'])
  65. @math($question['student_answer'])
  66. @else
  67. <span class="opacity-70 italic">未作答</span>
  68. @endif
  69. </div>
  70. </div>
  71. </div>
  72. {{-- 正确答案 --}}
  73. <div class="alert alert-success">
  74. <svg class="w-5 h-5 shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
  75. <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"></path>
  76. </svg>
  77. <div class="w-full">
  78. <div class="font-semibold">正确答案</div>
  79. <div class="mt-1">@math($question['answer'] ?? '答案缺失')</div>
  80. </div>
  81. </div>
  82. {{-- AI分析解析 --}}
  83. @if(isset($question['ai_analysis']) && $question['ai_analysis'])
  84. <div class="card bg-gradient-to-r from-blue-50 to-indigo-50 border border-blue-200">
  85. <div class="card-body p-4">
  86. <div class="flex items-center gap-2 mb-3">
  87. <div class="badge badge-info badge-lg gap-2">
  88. <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
  89. <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9.663 17h4.673M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z"></path>
  90. </svg>
  91. AI智能解析
  92. </div>
  93. @if(isset($question['ai_analysis']['confidence_score']))
  94. <div class="badge badge-ghost badge-sm">
  95. 置信度: {{ number_format($question['ai_analysis']['confidence_score'] * 100, 1) }}%
  96. </div>
  97. @endif
  98. @if(isset($question['ai_analysis']['ai_model']))
  99. <div class="badge badge-ghost badge-sm">
  100. 模型: {{ $question['ai_analysis']['ai_model'] }}
  101. </div>
  102. @endif
  103. </div>
  104. <div class="space-y-3">
  105. {{-- 知识点分析 --}}
  106. @if(isset($question['ai_analysis']['knowledge_points']) && !empty($question['ai_analysis']['knowledge_points']))
  107. <div class="bg-white rounded-lg p-3">
  108. <div class="font-semibold text-sm mb-2 flex items-center gap-1">
  109. <svg class="w-4 h-4 text-blue-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
  110. <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 6.253v13m0-13C10.832 5.477 9.246 5 7.5 5S4.168 5.477 3 6.253v13C4.168 18.477 5.754 18 7.5 18s3.332.477 4.5 1.253m0-13C13.168 5.477 14.754 5 16.5 5c1.747 0 3.332.477 4.5 1.253v13C19.832 18.477 18.247 18 16.5 18c-1.746 0-3.332.477-4.5 1.253"></path>
  111. </svg>
  112. 知识点
  113. </div>
  114. <div class="flex flex-wrap gap-1">
  115. @foreach($question['ai_analysis']['knowledge_points'] as $kp)
  116. <span class="badge badge-primary badge-sm">{{ $kp }}</span>
  117. @endforeach
  118. </div>
  119. </div>
  120. @endif
  121. {{-- 薄弱点分析 --}}
  122. @if(isset($question['ai_analysis']['weak_points']) && !empty($question['ai_analysis']['weak_points']))
  123. <div class="bg-yellow-50 rounded-lg p-3 border border-yellow-200">
  124. <div class="font-semibold text-sm mb-2 flex items-center gap-1">
  125. <svg class="w-4 h-4 text-yellow-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
  126. <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"></path>
  127. </svg>
  128. 薄弱点识别
  129. </div>
  130. <div class="text-sm text-gray-700">
  131. {{ is_array($question['ai_analysis']['weak_points']) ? implode('、', $question['ai_analysis']['weak_points']) : $question['ai_analysis']['weak_points'] }}
  132. </div>
  133. </div>
  134. @endif
  135. {{-- 掌握度分析 --}}
  136. @if(isset($question['ai_analysis']['mastery_scores']) && !empty($question['ai_analysis']['mastery_scores']))
  137. <div class="bg-green-50 rounded-lg p-3 border border-green-200">
  138. <div class="font-semibold text-sm mb-2 flex items-center gap-1">
  139. <svg class="w-4 h-4 text-green-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
  140. <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"></path>
  141. </svg>
  142. 掌握度分析
  143. </div>
  144. @if(is_array($question['ai_analysis']['mastery_scores']))
  145. <div class="space-y-1">
  146. @foreach($question['ai_analysis']['mastery_scores'] as $point => $score)
  147. <div class="flex justify-between items-center text-sm">
  148. <span>{{ $point }}:</span>
  149. <span class="badge badge-{{ $score >= 0.8 ? 'success' : ($score >= 0.6 ? 'warning' : 'error') }} badge-sm">
  150. {{ number_format($score * 100, 1) }}%
  151. </span>
  152. </div>
  153. @endforeach
  154. </div>
  155. @else
  156. <div class="text-sm text-gray-700">
  157. {{ $question['ai_analysis']['mastery_scores'] }}
  158. </div>
  159. @endif
  160. </div>
  161. @endif
  162. {{-- 稳定性分析 --}}
  163. @if(isset($question['ai_analysis']['stability_scores']) && !empty($question['ai_analysis']['stability_scores']))
  164. <div class="bg-purple-50 rounded-lg p-3 border border-purple-200">
  165. <div class="font-semibold text-sm mb-2 flex items-center gap-1">
  166. <svg class="w-4 h-4 text-purple-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
  167. <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M7 12l3-3 3 3 4-4M8 21l4-4 4 4M3 4h18M4 4h16v12a1 1 0 01-1 1H5a1 1 0 01-1-1V4z"></path>
  168. </svg>
  169. 稳定性分析
  170. </div>
  171. @if(is_array($question['ai_analysis']['stability_scores']))
  172. <div class="space-y-1">
  173. @foreach($question['ai_analysis']['stability_scores'] as $point => $score)
  174. <div class="flex justify-between items-center text-sm">
  175. <span>{{ $point }}:</span>
  176. <span class="badge badge-{{ $score >= 0.8 ? 'success' : ($score >= 0.6 ? 'warning' : 'error') }} badge-sm">
  177. {{ number_format($score * 100, 1) }}%
  178. </span>
  179. </div>
  180. @endforeach
  181. </div>
  182. @else
  183. <div class="text-sm text-gray-700">
  184. {{ $question['ai_analysis']['stability_scores'] }}
  185. </div>
  186. @endif
  187. </div>
  188. @endif
  189. </div>
  190. </div>
  191. </div>
  192. @endif
  193. </div>
  194. </div>
  195. @endforeach
  196. </div>
  197. @else
  198. <div class="card bg-base-100 shadow-xl">
  199. <div class="card-body">
  200. <div class="text-center py-12">
  201. <svg class="w-16 h-16 mx-auto mb-4 opacity-30" fill="none" stroke="currentColor" viewBox="0 0 24 24">
  202. <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"></path>
  203. </svg>
  204. <p class="text-lg opacity-70">暂无题目数据</p>
  205. </div>
  206. </div>
  207. </div>
  208. @endif
  209. </div>