question-details.blade.php 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284
  1. @props(['questions'])
  2. @if(isset($questions) && !empty($questions))
  3. <div class="bg-white rounded-lg shadow-sm border border-gray-200">
  4. <div class="p-6 border-b border-gray-200 bg-gradient-to-r from-blue-50 to-indigo-50">
  5. <div class="flex items-center justify-between">
  6. <h2 class="text-xl font-bold text-gray-900">📋 题目深度分析</h2>
  7. <p class="text-sm text-gray-600">重点关注解题过程与知识点关联</p>
  8. </div>
  9. </div>
  10. <div class="divide-y divide-gray-200">
  11. @foreach($questions as $index => $question)
  12. <div class="p-6 hover:bg-gray-50 transition-colors duration-150">
  13. <!-- 题目头部信息 -->
  14. <div class="flex items-center justify-between mb-4">
  15. <div class="flex items-center space-x-3">
  16. <span class="inline-flex items-center justify-center w-8 h-8 rounded-full bg-blue-100 text-blue-600 font-semibold text-sm">
  17. 第{{ $question['question_number'] ?? 'N/A' }}题
  18. </span>
  19. @if(!empty($question['kp_code']))
  20. <span class="px-3 py-1 bg-blue-100 text-blue-800 text-sm rounded-full font-medium">
  21. {{ $question['knowledge_point']['name'] ?? $question['kp_code'] }}
  22. </span>
  23. @endif
  24. @if(isset($question['question_type']) && $question['question_type'])
  25. <span class="px-2 py-1 bg-gray-100 text-gray-700 text-xs rounded">{{ $question['question_type'] }}</span>
  26. @endif
  27. </div>
  28. <div class="flex items-center space-x-3">
  29. @if(isset($question['score_total']) && $question['score_total'] !== null)
  30. <div class="text-right">
  31. <p class="text-xs text-gray-500">得分</p>
  32. <p class="text-lg font-bold {{ ($question['score_obtained'] ?? 0) == $question['score_total'] ? 'text-green-600' : 'text-red-600' }}">
  33. {{ $question['score_obtained'] ?? 0 }} / {{ $question['score_total'] }}
  34. </p>
  35. </div>
  36. @endif
  37. @if(($question['is_correct'] ?? false))
  38. <span class="inline-flex items-center px-3 py-1 rounded-full text-sm font-medium bg-green-100 text-green-800">
  39. <svg class="w-4 h-4 mr-1" fill="currentColor" viewBox="0 0 20 20">
  40. <path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clip-rule="evenodd"></path>
  41. </svg>
  42. 正确
  43. </span>
  44. @elseif(!empty($question['student_answer']) && $question['student_answer'] !== '未作答')
  45. <span class="inline-flex items-center px-3 py-1 rounded-full text-sm font-medium bg-red-100 text-red-800">
  46. <svg class="w-4 h-4 mr-1" fill="currentColor" viewBox="0 0 20 20">
  47. <path fill-rule="evenodd" d="M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z" clip-rule="evenodd"></path>
  48. </svg>
  49. 错误
  50. </span>
  51. @else
  52. <span class="inline-flex items-center px-3 py-1 rounded-full text-sm font-medium bg-gray-100 text-gray-600">
  53. <svg class="w-4 h-4 mr-1" fill="currentColor" viewBox="0 0 20 20">
  54. <path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z" clip-rule="evenodd"></path>
  55. </svg>
  56. 未作答
  57. </span>
  58. @endif
  59. </div>
  60. </div>
  61. <!-- 题目内容 -->
  62. <div class="mb-6">
  63. <h3 class="text-lg font-semibold text-gray-900 mb-3 flex items-center">
  64. <svg class="w-5 h-5 mr-2 text-gray-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
  65. <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>
  66. </svg>
  67. 题目内容
  68. </h3>
  69. <div class="bg-gradient-to-br from-gray-50 to-gray-100 rounded-lg p-4 border border-gray-200">
  70. <p class="text-gray-800 leading-relaxed">{{ $question['question_text'] ?? 'N/A' }}</p>
  71. </div>
  72. </div>
  73. <!-- 解题分析区 -->
  74. <div class="grid grid-cols-1 lg:grid-cols-2 gap-6 mb-6">
  75. <!-- 正确答案与解题过程 -->
  76. <div class="space-y-4">
  77. <h3 class="text-lg font-semibold text-gray-900 flex items-center">
  78. <svg class="w-5 h-5 mr-2 text-green-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
  79. <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>
  80. </svg>
  81. 正确答案与解题过程
  82. </h3>
  83. @if(isset($question['answer']) && !empty($question['answer']))
  84. <div class="bg-green-50 border border-green-200 rounded-lg p-4">
  85. <p class="text-sm font-semibold text-green-800 mb-2">标准答案</p>
  86. <p class="text-green-700 font-medium">{{ $question['answer'] }}</p>
  87. </div>
  88. @endif
  89. @if(isset($question['solution']) && !empty($question['solution']))
  90. <div class="bg-blue-50 border border-blue-200 rounded-lg p-4">
  91. <p class="text-sm font-semibold text-blue-800 mb-2">解题步骤</p>
  92. <div class="text-blue-700 space-y-2">
  93. {{ $question['solution'] }}
  94. </div>
  95. </div>
  96. @endif
  97. @if(isset($question['ai_analysis']['correct_solution']) && !empty($question['ai_analysis']['correct_solution']))
  98. <div class="bg-indigo-50 border border-indigo-200 rounded-lg p-4">
  99. <p class="text-sm font-semibold text-indigo-800 mb-2">详细解析</p>
  100. <div class="text-indigo-700 text-sm leading-relaxed">
  101. {{ $question['ai_analysis']['correct_solution'] }}
  102. </div>
  103. </div>
  104. @endif
  105. </div>
  106. <!-- 学生作答对比 -->
  107. <div class="space-y-4">
  108. <h3 class="text-lg font-semibold text-gray-900 flex items-center">
  109. <svg class="w-5 h-5 mr-2 text-orange-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
  110. <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path>
  111. </svg>
  112. 作答分析
  113. </h3>
  114. <div class="bg-orange-50 border border-orange-200 rounded-lg p-4">
  115. <p class="text-sm font-semibold text-orange-800 mb-2">学生答案</p>
  116. <p class="text-orange-700">{{ $question['student_answer'] ?? '未作答' }}</p>
  117. </div>
  118. @if(isset($question['answer_comparison']))
  119. <div class="bg-red-50 border border-red-200 rounded-lg p-4">
  120. <p class="text-sm font-semibold text-red-800 mb-2">答案对比</p>
  121. <div class="space-y-2 text-sm">
  122. <div class="flex">
  123. <span class="font-medium text-gray-600 w-20">学生答案:</span>
  124. <span class="text-red-700">{{ $question['answer_comparison']['student'] }}</span>
  125. </div>
  126. <div class="flex">
  127. <span class="font-medium text-gray-600 w-20">正确答案:</span>
  128. <span class="text-green-700 font-medium">{{ $question['answer_comparison']['correct'] }}</span>
  129. </div>
  130. </div>
  131. </div>
  132. @endif
  133. </div>
  134. </div>
  135. <!-- AI深度分析 -->
  136. @if(isset($question['ai_analysis']) && !empty($question['ai_analysis']))
  137. <div class="mb-6">
  138. <h3 class="text-lg font-semibold text-gray-900 mb-4 flex items-center">
  139. <svg class="w-5 h-5 mr-2 text-purple-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
  140. <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>
  141. </svg>
  142. AI智能分析
  143. </h3>
  144. <div class="bg-gradient-to-br from-purple-50 to-pink-50 border border-purple-200 rounded-lg p-5">
  145. @if($question['ai_analysis']['analysis'])
  146. <div class="mb-4">
  147. <p class="text-sm font-semibold text-purple-800 mb-2">综合分析</p>
  148. <p class="text-gray-700 leading-relaxed">{{ $question['ai_analysis']['analysis'] }}</p>
  149. </div>
  150. @endif
  151. @if(!$question['is_correct'] && ($question['ai_analysis']['mistake_type'] || $question['ai_analysis']['mistake_category']))
  152. <div class="grid grid-cols-1 md:grid-cols-2 gap-4 mb-4">
  153. @if($question['ai_analysis']['mistake_type'])
  154. <div class="bg-white/60 rounded-lg p-3">
  155. <p class="text-xs font-semibold text-red-700 mb-1">错误类型</p>
  156. <p class="text-sm text-red-600">{{ $question['ai_analysis']['mistake_type'] }}</p>
  157. </div>
  158. @endif
  159. @if($question['ai_analysis']['mistake_category'])
  160. <div class="bg-white/60 rounded-lg p-3">
  161. <p class="text-xs font-semibold text-red-700 mb-1">错误类别</p>
  162. <p class="text-sm text-red-600">{{ $question['ai_analysis']['mistake_category'] }}</p>
  163. </div>
  164. @endif
  165. </div>
  166. @endif
  167. @if(isset($question['ai_analysis']['suggestions']) && !empty($question['ai_analysis']['suggestions']))
  168. <div>
  169. <p class="text-sm font-semibold text-purple-800 mb-2">学习建议</p>
  170. <ul class="space-y-2">
  171. @foreach($question['ai_analysis']['suggestions'] as $suggestion)
  172. @if($suggestion)
  173. <li class="flex items-start">
  174. <svg class="w-5 h-5 mr-2 text-purple-500 flex-shrink-0 mt-0.5" fill="currentColor" viewBox="0 0 20 20">
  175. <path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"></path>
  176. </svg>
  177. <span class="text-sm text-gray-700">{{ $suggestion }}</span>
  178. </li>
  179. @endif
  180. @endforeach
  181. </ul>
  182. </div>
  183. @endif
  184. </div>
  185. </div>
  186. @endif
  187. <!-- 知识点与技能点关联 -->
  188. <div class="mb-6">
  189. <h3 class="text-lg font-semibold text-gray-900 mb-4 flex items-center">
  190. <svg class="w-5 h-5 mr-2 text-blue-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
  191. <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10"></path>
  192. </svg>
  193. 知识点与技能点
  194. </h3>
  195. @if(isset($question['knowledge_point']))
  196. <div class="bg-blue-50 border border-blue-200 rounded-lg p-4 mb-4">
  197. <div class="grid grid-cols-1 md:grid-cols-2 gap-4">
  198. <div>
  199. <p class="text-sm font-semibold text-blue-800 mb-2">知识点信息</p>
  200. <div class="space-y-2">
  201. <div class="flex items-center justify-between">
  202. <span class="text-sm text-gray-600">名称:</span>
  203. <span class="text-sm font-medium text-gray-900">{{ $question['knowledge_point']['name'] }}</span>
  204. </div>
  205. <div class="flex items-center justify-between">
  206. <span class="text-sm text-gray-600">编码:</span>
  207. <span class="text-sm font-medium text-gray-900">{{ $question['kp_code'] }}</span>
  208. </div>
  209. @if(!empty($question['knowledge_point']['phase']))
  210. <div class="flex items-center justify-between">
  211. <span class="text-sm text-gray-600">学段:</span>
  212. <span class="text-sm text-gray-900">{{ $question['knowledge_point']['phase'] }}</span>
  213. </div>
  214. @endif
  215. @if(!empty($question['knowledge_point']['grade']))
  216. <div class="flex items-center justify-between">
  217. <span class="text-sm text-gray-600">年级:</span>
  218. <span class="text-sm text-gray-900">{{ $question['knowledge_point']['grade'] }}</span>
  219. </div>
  220. @endif
  221. </div>
  222. </div>
  223. <div>
  224. <p class="text-sm font-semibold text-green-800 mb-2">掌握程度</p>
  225. <div class="flex items-center space-x-3">
  226. <div class="flex-1">
  227. <div class="w-full bg-gray-200 rounded-full h-2">
  228. <div class="bg-gradient-to-r from-green-400 to-green-600 h-2 rounded-full" style="width: {{ ($question['is_correct'] ?? false) ? '100%' : '30%' }}"></div>
  229. </div>
  230. </div>
  231. <span class="text-sm font-medium {{ ($question['is_correct'] ?? false) ? 'text-green-700' : 'text-orange-700' }}">
  232. {{ ($question['is_correct'] ?? false) ? '已掌握' : '需加强' }}
  233. </span>
  234. </div>
  235. </div>
  236. </div>
  237. @if(isset($question['knowledge_point']['skills']) && !empty($question['knowledge_point']['skills']))
  238. <div class="mt-4 pt-4 border-t border-blue-200">
  239. <p class="text-sm font-semibold text-purple-800 mb-2">相关技能点</p>
  240. <div class="flex flex-wrap gap-2">
  241. @foreach($question['knowledge_point']['skills'] as $skill)
  242. <span class="inline-flex items-center px-2 py-1 rounded-md text-xs font-medium bg-purple-100 text-purple-800">
  243. {{ $skill['name'] }}
  244. </span>
  245. @endforeach
  246. </div>
  247. </div>
  248. @endif
  249. </div>
  250. @else
  251. <div class="bg-gray-50 border border-gray-200 rounded-lg p-4">
  252. <p class="text-sm text-gray-600">暂无关联知识点信息</p>
  253. </div>
  254. @endif
  255. </div>
  256. <!-- 相似题目推荐 -->
  257. <x-exam-analysis.similar-questions
  258. :kpCode="$question['kp_code'] ?? null"
  259. :currentQuestion="$question"
  260. />
  261. </div>
  262. @endforeach
  263. </div>
  264. </div>
  265. @endif