index.vue 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698
  1. <template>
  2. <StudyLayout>
  3. <div class="grid h-full w-full grid-cols-2 gap-6 overflow-hidden p-6">
  4. <div
  5. class="col-span-1 flex h-full flex-col overflow-hidden rounded-xl bg-white shadow-md"
  6. >
  7. <div class="bg-[var(--czr-main-color)]/80 p-4 text-white">
  8. <div class="flex items-center text-xl font-bold">
  9. <i class="fas fa-cubes mr-2"></i>
  10. 板块提升
  11. <div
  12. class="subject-questions-btn bg-subject-color ml-auto flex items-center rounded-full px-3 py-1 text-sm"
  13. @click="$router.push({ name: 'chinese-question' })"
  14. >
  15. <i class="fas fa-question-circle mr-1"></i>
  16. <span>更多</span>
  17. </div>
  18. </div>
  19. </div>
  20. <!-- 图表容器 -->
  21. <div
  22. class="flex flex-1 flex-col overflow-y-auto p-4"
  23. style="flex-wrap: unset"
  24. >
  25. <!-- 图表切换标签 -->
  26. <div class="mt-2 mb-4 flex space-x-2">
  27. <button
  28. :class="
  29. state.type === 1
  30. ? 'bg-[var(--czr-main-color)] text-white'
  31. : 'bg-gray-100 text-gray-600'
  32. "
  33. class="chart-tab rounded-full px-3 py-1 text-sm"
  34. @click="state.type = 1"
  35. >
  36. 知识点掌握
  37. </button>
  38. <button
  39. :class="
  40. state.type === 2
  41. ? 'bg-[var(--czr-main-color)] text-white'
  42. : 'bg-gray-100 text-gray-600'
  43. "
  44. class="chart-tab rounded-full px-3 py-1 text-sm"
  45. @click="state.type = 2"
  46. >
  47. 成绩趋势
  48. </button>
  49. <button
  50. :class="
  51. state.type === 3
  52. ? 'bg-[var(--czr-main-color)] text-white'
  53. : 'bg-gray-100 text-gray-600'
  54. "
  55. class="chart-tab rounded-full px-3 py-1 text-sm"
  56. @click="state.type = 3"
  57. >
  58. 练习完成度
  59. </button>
  60. </div>
  61. <!-- 知识点掌握情况图表 -->
  62. <div class="mb-6 flex-1">
  63. <chart1 v-if="state.type === 1" />
  64. <chart2 v-if="state.type === 2" />
  65. <chart3 v-if="state.type === 3" />
  66. </div>
  67. <!-- 统计卡片 -->
  68. <div class="mt-4 grid grid-cols-2 gap-4 md:grid-cols-4">
  69. <div
  70. class="stat-card rounded-lg border-l-4 border-blue-500 bg-gray-50 p-3"
  71. >
  72. <div class="text-xs text-gray-500">当前难度等级</div>
  73. <div class="mt-1 text-xl font-bold text-gray-800">S</div>
  74. </div>
  75. <div
  76. class="stat-card rounded-lg border-l-4 border-green-500 bg-gray-50 p-3"
  77. >
  78. <div class="text-xs text-gray-500">正确率</div>
  79. <div class="mt-1 text-xl font-bold text-gray-800">85%</div>
  80. </div>
  81. <div
  82. class="stat-card rounded-lg border-l-4 border-yellow-500 bg-gray-50 p-3"
  83. >
  84. <div class="text-xs text-gray-500">待提升板块</div>
  85. <div class="mt-1 text-xl font-bold text-gray-800">文言文</div>
  86. </div>
  87. <div
  88. class="stat-card rounded-lg border-l-4 border-purple-500 bg-gray-50 p-3"
  89. >
  90. <div class="text-xs text-gray-500">优秀板块</div>
  91. <div class="mt-1 text-xl font-bold text-gray-800">作文</div>
  92. </div>
  93. </div>
  94. <div class="flex items-center justify-between py-3">
  95. <div class="font-semibold text-gray-800">最近刷题记录</div>
  96. <div class="ml-auto">
  97. <q-input
  98. class="date w-[250px]"
  99. rounded
  100. standout="focus"
  101. :dense="true"
  102. v-model="dateStr"
  103. readonly
  104. >
  105. <template v-slot:prepend>
  106. <q-icon name="event" class="cursor-pointer" color="">
  107. <q-popup-proxy
  108. cover
  109. transition-show="scale"
  110. transition-hide="scale"
  111. >
  112. <q-date
  113. v-model="state.query.date"
  114. mask="YYYY-MM-DD"
  115. range
  116. >
  117. <div class="row items-center justify-end">
  118. <q-btn
  119. v-close-popup
  120. label="关闭"
  121. color="primary"
  122. flat
  123. />
  124. </div>
  125. </q-date>
  126. </q-popup-proxy>
  127. </q-icon>
  128. </template>
  129. <template v-slot:append>
  130. <q-icon
  131. v-if="dateStr"
  132. name="clear"
  133. class="cursor-pointer"
  134. @click="state.query.date = {}"
  135. />
  136. </template>
  137. </q-input>
  138. </div>
  139. </div>
  140. <div class="max-h-[120px] overflow-y-auto">
  141. <div
  142. class="record-item cursor-pointer rounded-lg border border-gray-100 p-2"
  143. @click="$router.push({ name: 'chinese-question' })"
  144. >
  145. <div class="flex items-center justify-between">
  146. <span class="text-sm font-medium">文言文阅读专项</span>
  147. </div>
  148. <div class="mt-1 text-xs text-gray-500">
  149. 2025-07-06 | 25题(<span class="text-red">5</span>/<span
  150. class="text-green"
  151. >20</span
  152. >) | 正确率80%
  153. </div>
  154. </div>
  155. <div
  156. class="record-item cursor-pointer rounded-lg border border-gray-100 p-2"
  157. @click="$router.push({ name: 'chinese-question' })"
  158. >
  159. <div class="flex items-center justify-between">
  160. <span class="text-sm font-medium">文言文阅读专项</span>
  161. </div>
  162. <div class="mt-1 text-xs text-gray-500">
  163. 2025-07-06 | 25题(<span class="text-red">5</span>/<span
  164. class="text-green"
  165. >20</span
  166. >) | 正确率80%
  167. </div>
  168. </div>
  169. <div
  170. class="record-item cursor-pointer rounded-lg border border-gray-100 p-2"
  171. @click="$router.push({ name: 'chinese-question' })"
  172. >
  173. <div class="flex items-center justify-between">
  174. <span class="text-sm font-medium">文言文阅读专项</span>
  175. </div>
  176. <div class="mt-1 text-xs text-gray-500">
  177. 2025-07-06 | 25题(<span class="text-red">5</span>/<span
  178. class="text-green"
  179. >20</span
  180. >) | 正确率80%
  181. </div>
  182. </div>
  183. <div
  184. class="record-item cursor-pointer rounded-lg border border-gray-100 p-2"
  185. @click="$router.push({ name: 'chinese-question' })"
  186. >
  187. <div class="flex items-center justify-between">
  188. <span class="text-sm font-medium">文言文阅读专项</span>
  189. </div>
  190. <div class="mt-1 text-xs text-gray-500">
  191. 2025-07-06 | 25题(<span class="text-red">5</span>/<span
  192. class="text-green"
  193. >20</span
  194. >) | 正确率80%
  195. </div>
  196. </div>
  197. <div
  198. class="record-item cursor-pointer rounded-lg border border-gray-100 p-2"
  199. @click="$router.push({ name: 'chinese-question' })"
  200. >
  201. <div class="flex items-center justify-between">
  202. <span class="text-sm font-medium">文言文阅读专项</span>
  203. </div>
  204. <div class="mt-1 text-xs text-gray-500">
  205. 2025-07-06 | 25题(<span class="text-red">5</span>/<span
  206. class="text-green"
  207. >20</span
  208. >) | 正确率80%
  209. </div>
  210. </div>
  211. <div
  212. class="record-item cursor-pointer rounded-lg border border-gray-100 p-2"
  213. @click="$router.push({ name: 'chinese-question' })"
  214. >
  215. <div class="flex items-center justify-between">
  216. <span class="text-sm font-medium">文言文阅读专项</span>
  217. </div>
  218. <div class="mt-1 text-xs text-gray-500">
  219. 2025-07-06 | 25题(<span class="text-red">5</span>/<span
  220. class="text-green"
  221. >20</span
  222. >) | 正确率80%
  223. </div>
  224. </div>
  225. </div>
  226. </div>
  227. </div>
  228. <div class="col-span-1 flex flex-col gap-6 overflow-hidden px-0.5">
  229. <div
  230. class="flex flex-1 flex-col overflow-hidden rounded-xl bg-white shadow-md"
  231. >
  232. <div class="bg-[var(--czr-main-color)]/80 p-4 text-white">
  233. <div class="relative flex items-center text-xl font-bold">
  234. <i class="fas fa-calendar-alt mr-2"></i>
  235. 考形训练
  236. <div class="absolute right-2 ml-auto flex">
  237. <q-select
  238. class="select ml-4 w-[120px]"
  239. rounded
  240. standout="focus"
  241. v-model="state.query.p1"
  242. :options="[
  243. { label: '近三个月', value: '近三个月' },
  244. { label: '本学期', value: '本学期' },
  245. { label: '上学期', value: '上学期' },
  246. { label: '本年度', value: '本年度' },
  247. { label: '全部', value: '全部' },
  248. ]"
  249. :dense="true"
  250. >
  251. </q-select>
  252. <q-select
  253. class="select ml-4 w-[120px]"
  254. rounded
  255. standout="focus"
  256. v-model="state.query.p2"
  257. :options="[
  258. { label: '全部类型', value: '全部类型' },
  259. { label: '周测', value: '周测' },
  260. { label: '月考', value: '月考' },
  261. { label: '期中考试', value: '期中考试' },
  262. { label: '期末考试', value: '期末考试' },
  263. ]"
  264. :dense="true"
  265. >
  266. </q-select>
  267. </div>
  268. </div>
  269. </div>
  270. <div class="h-[200px]">
  271. <chart4 />
  272. </div>
  273. <div class="flex-1 overflow-y-auto p-6">
  274. <div class="timeline-date">2023年12月</div>
  275. <div class="exam-item mb-3 rounded-lg border border-gray-300 p-3">
  276. <div class="mb-2 flex items-start justify-between">
  277. <div>
  278. <div class="flex items-center font-semibold">
  279. <span
  280. class="bg-exam-weekly mr-2 h-2 w-2 rounded-full"
  281. ></span>
  282. 周测
  283. </div>
  284. <div class="mt-0.5 text-sm text-gray-500">12月22日</div>
  285. </div>
  286. <span class="text-sm font-medium text-gray-800">88分</span>
  287. </div>
  288. <div class="mt-3 grid grid-cols-2 gap-3 text-sm md:grid-cols-4">
  289. <div class="rounded bg-gray-50 p-2 text-center">
  290. <div class="text-xs text-gray-500">试卷难度</div>
  291. <div class="font-medium text-gray-800">S</div>
  292. </div>
  293. <div class="rounded bg-gray-50 p-2 text-center">
  294. <div class="text-xs text-gray-500">用时</div>
  295. <div class="font-medium text-gray-800">45分钟</div>
  296. </div>
  297. <div class="rounded bg-gray-50 p-2 text-center">
  298. <div class="text-xs text-gray-500">得分</div>
  299. <div class="font-medium text-gray-800">96分</div>
  300. </div>
  301. <div class="rounded bg-gray-50 p-2 text-center">
  302. <div class="text-xs text-gray-500">错题</div>
  303. <div class="font-medium text-red-500">3题</div>
  304. </div>
  305. </div>
  306. <div class="mt-3">
  307. <div class="mb-1 text-xs text-gray-500">错题类型:</div>
  308. <div class="flex flex-wrap gap-2">
  309. <span
  310. class="mistake-tag rounded-full bg-red-100 px-2 py-0.5 text-xs text-red-800"
  311. >阅读理解(2)</span
  312. >
  313. <span
  314. class="mistake-tag rounded-full bg-red-100 px-2 py-0.5 text-xs text-red-800"
  315. >基础知识(1)</span
  316. >
  317. </div>
  318. </div>
  319. <div class="mt-3 flex justify-end">
  320. <button
  321. class="text-subject-color flex items-center text-xs hover:underline"
  322. @click="$router.push({ name: 'chinese-question' })"
  323. >
  324. <i class="fas fa-file-alt mr-1"></i>
  325. 查看详情
  326. </button>
  327. </div>
  328. </div>
  329. <div class="exam-item mb-3 rounded-lg border border-gray-300 p-3">
  330. <div class="mb-2 flex items-start justify-between">
  331. <div>
  332. <div class="flex items-center font-semibold">
  333. <span
  334. class="bg-exam-weekly mr-2 h-2 w-2 rounded-full"
  335. ></span>
  336. 期中
  337. </div>
  338. <div class="mt-0.5 text-sm text-gray-500">12月12日</div>
  339. </div>
  340. <span class="text-sm font-medium text-gray-800">88分</span>
  341. </div>
  342. <div class="mt-3 grid grid-cols-2 gap-3 text-sm md:grid-cols-4">
  343. <div class="rounded bg-gray-50 p-2 text-center">
  344. <div class="text-xs text-gray-500">试卷难度</div>
  345. <div class="font-medium text-gray-800">S</div>
  346. </div>
  347. <div class="rounded bg-gray-50 p-2 text-center">
  348. <div class="text-xs text-gray-500">用时</div>
  349. <div class="font-medium text-gray-800">45分钟</div>
  350. </div>
  351. <div class="rounded bg-gray-50 p-2 text-center">
  352. <div class="text-xs text-gray-500">得分</div>
  353. <div class="font-medium text-gray-800">96分</div>
  354. </div>
  355. <div class="rounded bg-gray-50 p-2 text-center">
  356. <div class="text-xs text-gray-500">错题</div>
  357. <div class="font-medium text-red-500">3题</div>
  358. </div>
  359. </div>
  360. <div class="mt-3">
  361. <div class="mb-1 text-xs text-gray-500">错题类型:</div>
  362. <div class="flex flex-wrap gap-2">
  363. <span
  364. class="mistake-tag rounded-full bg-red-100 px-2 py-0.5 text-xs text-red-800"
  365. >阅读理解(2)</span
  366. >
  367. <span
  368. class="mistake-tag rounded-full bg-red-100 px-2 py-0.5 text-xs text-red-800"
  369. >基础知识(1)</span
  370. >
  371. </div>
  372. </div>
  373. <div class="mt-3 flex justify-end">
  374. <button
  375. class="text-subject-color flex items-center text-xs hover:underline"
  376. @click="$router.push({ name: 'chinese-question' })"
  377. >
  378. <i class="fas fa-file-alt mr-1"></i>
  379. 查看详情
  380. </button>
  381. </div>
  382. </div>
  383. <div class="timeline-date">2023年11月</div>
  384. <div class="exam-item mb-3 rounded-lg border border-gray-300 p-3">
  385. <div class="mb-2 flex items-start justify-between">
  386. <div>
  387. <div class="flex items-center font-semibold">
  388. <span
  389. class="bg-exam-weekly mr-2 h-2 w-2 rounded-full"
  390. ></span>
  391. 周测
  392. </div>
  393. <div class="mt-0.5 text-sm text-gray-500">12月22日</div>
  394. </div>
  395. <span class="text-sm font-medium text-gray-800">88分</span>
  396. </div>
  397. <div class="mt-3 grid grid-cols-2 gap-3 text-sm md:grid-cols-4">
  398. <div class="rounded bg-gray-50 p-2 text-center">
  399. <div class="text-xs text-gray-500">试卷难度</div>
  400. <div class="font-medium text-gray-800">S</div>
  401. </div>
  402. <div class="rounded bg-gray-50 p-2 text-center">
  403. <div class="text-xs text-gray-500">用时</div>
  404. <div class="font-medium text-gray-800">45分钟</div>
  405. </div>
  406. <div class="rounded bg-gray-50 p-2 text-center">
  407. <div class="text-xs text-gray-500">得分</div>
  408. <div class="font-medium text-gray-800">96分</div>
  409. </div>
  410. <div class="rounded bg-gray-50 p-2 text-center">
  411. <div class="text-xs text-gray-500">错题</div>
  412. <div class="font-medium text-red-500">3题</div>
  413. </div>
  414. </div>
  415. <div class="mt-3">
  416. <div class="mb-1 text-xs text-gray-500">错题类型:</div>
  417. <div class="flex flex-wrap gap-2">
  418. <span
  419. class="mistake-tag rounded-full bg-red-100 px-2 py-0.5 text-xs text-red-800"
  420. >阅读理解(2)</span
  421. >
  422. <span
  423. class="mistake-tag rounded-full bg-red-100 px-2 py-0.5 text-xs text-red-800"
  424. >基础知识(1)</span
  425. >
  426. </div>
  427. </div>
  428. <div class="mt-3 flex justify-end">
  429. <button
  430. class="text-subject-color flex items-center text-xs hover:underline"
  431. @click="$router.push({ name: 'chinese-question' })"
  432. >
  433. <i class="fas fa-file-alt mr-1"></i>
  434. 查看详情
  435. </button>
  436. </div>
  437. </div>
  438. <div class="exam-item mb-3 rounded-lg border border-gray-300 p-3">
  439. <div class="mb-2 flex items-start justify-between">
  440. <div>
  441. <div class="flex items-center font-semibold">
  442. <span
  443. class="bg-exam-weekly mr-2 h-2 w-2 rounded-full"
  444. ></span>
  445. 期中
  446. </div>
  447. <div class="mt-0.5 text-sm text-gray-500">12月12日</div>
  448. </div>
  449. <span class="text-sm font-medium text-gray-800">88分</span>
  450. </div>
  451. <div class="mt-3 grid grid-cols-2 gap-3 text-sm md:grid-cols-4">
  452. <div class="rounded bg-gray-50 p-2 text-center">
  453. <div class="text-xs text-gray-500">试卷难度</div>
  454. <div class="font-medium text-gray-800">S</div>
  455. </div>
  456. <div class="rounded bg-gray-50 p-2 text-center">
  457. <div class="text-xs text-gray-500">用时</div>
  458. <div class="font-medium text-gray-800">45分钟</div>
  459. </div>
  460. <div class="rounded bg-gray-50 p-2 text-center">
  461. <div class="text-xs text-gray-500">得分</div>
  462. <div class="font-medium text-gray-800">96分</div>
  463. </div>
  464. <div class="rounded bg-gray-50 p-2 text-center">
  465. <div class="text-xs text-gray-500">错题</div>
  466. <div class="font-medium text-red-500">3题</div>
  467. </div>
  468. </div>
  469. <div class="mt-3">
  470. <div class="mb-1 text-xs text-gray-500">错题类型:</div>
  471. <div class="flex flex-wrap gap-2">
  472. <span
  473. class="mistake-tag rounded-full bg-red-100 px-2 py-0.5 text-xs text-red-800"
  474. >阅读理解(2)</span
  475. >
  476. <span
  477. class="mistake-tag rounded-full bg-red-100 px-2 py-0.5 text-xs text-red-800"
  478. >基础知识(1)</span
  479. >
  480. </div>
  481. </div>
  482. <div class="mt-3 flex justify-end">
  483. <button
  484. class="text-subject-color flex items-center text-xs hover:underline"
  485. @click="$router.push({ name: 'chinese-question' })"
  486. >
  487. <i class="fas fa-file-alt mr-1"></i>
  488. 查看详情
  489. </button>
  490. </div>
  491. </div>
  492. </div>
  493. </div>
  494. <div
  495. class="flex flex-col overflow-hidden rounded-xl bg-white shadow-md"
  496. >
  497. <div class="bg-[var(--czr-main-color)]/80 p-4 text-white">
  498. <div class="flex items-center text-xl font-bold">
  499. <i class="fas fa-clock mr-2"></i>
  500. 错题统计
  501. <div
  502. class="subject-questions-btn bg-subject-color ml-auto flex items-center rounded-full px-3 py-1 text-sm"
  503. @click="$router.push({ name: 'chinese-question' })"
  504. >
  505. <i class="fas fa-question-circle mr-1"></i>
  506. <span>查看详情</span>
  507. </div>
  508. </div>
  509. </div>
  510. <div class="flex flex-col p-4">
  511. <div class="grid grid-cols-3 gap-4">
  512. <div class="flex flex-1 items-center rounded-lg bg-gray-50 p-3">
  513. <div
  514. class="mr-3 flex h-10 w-10 items-center justify-center rounded-full bg-blue-100"
  515. >
  516. <i class="fas fa-clipboard-list text-blue-600"></i>
  517. </div>
  518. <div>
  519. <div class="text-sm text-gray-500">本学科总做题数</div>
  520. <div class="text-lg font-bold">246题</div>
  521. </div>
  522. </div>
  523. <div class="flex flex-1 items-center rounded-lg bg-gray-50 p-3">
  524. <div
  525. class="mr-3 flex h-10 w-10 items-center justify-center rounded-full bg-red-100"
  526. >
  527. <i class="fas fa-times-circle text-red-600"></i>
  528. </div>
  529. <div>
  530. <div class="text-sm text-gray-500">错题数</div>
  531. <div class="text-lg font-bold">59题</div>
  532. </div>
  533. </div>
  534. <div class="flex flex-1 items-center rounded-lg bg-gray-50 p-3">
  535. <div
  536. class="mr-3 flex h-10 w-10 items-center justify-center rounded-full bg-red-100"
  537. >
  538. <i class="fas fa-times-circle text-red-600"></i>
  539. </div>
  540. <div>
  541. <div class="text-sm text-gray-500">错误率</div>
  542. <div class="text-lg font-bold">23%</div>
  543. </div>
  544. </div>
  545. </div>
  546. <div class="mt-4 border-t border-gray-100 pt-4">
  547. <div class="mb-3 text-sm font-medium">错题最多的知识点</div>
  548. <div class="flex flex-wrap gap-2">
  549. <span
  550. class="mistake-tag rounded-full bg-red-100 px-2 py-1 text-xs text-red-800"
  551. >文言文虚词 (12题)</span
  552. >
  553. <span
  554. class="mistake-tag rounded-full bg-red-100 px-2 py-1 text-xs text-red-800"
  555. >现代文阅读理解 (9题)</span
  556. >
  557. <span
  558. class="mistake-tag rounded-full bg-red-100 px-2 py-1 text-xs text-red-800"
  559. >诗歌鉴赏 (7题)</span
  560. >
  561. </div>
  562. </div>
  563. </div>
  564. </div>
  565. </div>
  566. </div>
  567. </StudyLayout>
  568. </template>
  569. <script setup lang="ts">
  570. import { computed, onMounted, reactive } from 'vue'
  571. import StudyLayout from '@/views/study/components/study-layout.vue'
  572. import chart1 from './chart-1.vue'
  573. import chart2 from './chart-2.vue'
  574. import chart3 from './chart-3.vue'
  575. import chart4 from './chart-4.vue'
  576. const state: any = reactive({
  577. type: 1,
  578. query: {
  579. p1: '近三个月',
  580. p2: '全部类型',
  581. date: {},
  582. },
  583. })
  584. const dateStr = computed(() => {
  585. if (state.query.date.from && state.query.date.to) {
  586. return `${state.query.date.from} - ${state.query.date.to}`
  587. }
  588. return ''
  589. })
  590. onMounted(() => {})
  591. </script>
  592. <style lang="scss" scoped>
  593. .subject-questions-btn {
  594. transition: all 0.2s ease;
  595. }
  596. .subject-questions-btn:hover {
  597. background-color: var(--czr-main-color);
  598. transform: translateY(-2px);
  599. }
  600. .stat-card {
  601. transition: all 0.3s ease;
  602. }
  603. .stat-card:hover {
  604. transform: translateY(-5px);
  605. box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.1);
  606. }
  607. .exam-item {
  608. transition: all 0.2s ease;
  609. position: relative;
  610. }
  611. .exam-item:hover {
  612. background-color: rgba(67, 97, 238, 0.05);
  613. }
  614. .mistake-tag {
  615. cursor: pointer;
  616. transition: all 0.2s ease;
  617. }
  618. .mistake-tag:hover {
  619. background-color: rgba(239, 68, 68, 0.2);
  620. transform: scale(1.05);
  621. }
  622. .progress-ring {
  623. transform: rotate(-90deg);
  624. width: 40px;
  625. height: 40px;
  626. }
  627. .progress-ring-circle {
  628. stroke-dasharray: 100;
  629. stroke-dashoffset: 100;
  630. transition: stroke-dashoffset 0.5s ease;
  631. }
  632. /* 时间轴样式 */
  633. .timeline {
  634. position: relative;
  635. padding-left: 2rem;
  636. }
  637. .timeline::before {
  638. content: '';
  639. position: absolute;
  640. left: 0.5rem;
  641. top: 0;
  642. bottom: 0;
  643. width: 2px;
  644. background-color: #e5e7eb;
  645. }
  646. .timeline-date-group {
  647. margin-bottom: 1.5rem;
  648. }
  649. .timeline-date {
  650. font-weight: 600;
  651. color: #6b7280;
  652. margin-bottom: 0.5rem;
  653. display: flex;
  654. align-items: center;
  655. }
  656. .timeline-date::before {
  657. content: '';
  658. width: 1rem;
  659. height: 1rem;
  660. border-radius: 50%;
  661. background-color: white;
  662. border: 2px solid #4361ee;
  663. margin-right: 0.5rem;
  664. z-index: 10;
  665. position: relative;
  666. }
  667. :deep(.select) {
  668. .ellipsis {
  669. color: #ffffff;
  670. }
  671. .q-select__dropdown-icon {
  672. color: #ffffff;
  673. }
  674. .focus {
  675. background: rgba(0, 0, 0, 0.1);
  676. }
  677. }
  678. </style>