threeExam.ts 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750
  1. import { computed, onMounted, reactive, ref, watch, onBeforeUnmount } from "vue";
  2. import moment from 'moment';
  3. import audio from "@/utils/audio";
  4. import { useStore } from "vuex";
  5. import { message } from "ant-design-vue";
  6. import { threeApi } from "@/api/three/type";
  7. import router from "@/router";
  8. import api from "@/api";
  9. export const useThreeExam = (requestFn: Promise<threeApi.threeForceList>, config = {
  10. countDown: true,
  11. autoAnswer: true,
  12. recordUncomplete: true
  13. }) => {
  14. const store = useStore()
  15. let timerId = 0
  16. let examTimeMillSeconds = config.countDown ? 45 * 60 * 1000 : 0
  17. const falseNum = ref(0)
  18. const trueNum = ref(0)
  19. const list = ref<threeApi.threeForceList["rows"]>([{
  20. "id": 26950,
  21. "type": 1,
  22. "intnumber": "",
  23. "strtppe": "87",
  24. "strtypeL": "8701",
  25. "licensetype": "",
  26. "question": "下图时钟指示的时间是五点整。",
  27. "an1": "正确",
  28. "an2": "错误",
  29. "an3": "",
  30. "an4": "",
  31. "an5": "",
  32. "an6": "",
  33. "an7": "",
  34. "answertrue": "1",
  35. "explain": "图中时钟是五点整,因此本题正确。",
  36. "bestanswerid": "1334792674833649664",
  37. "kemu": 1,
  38. "jieshiFrom": "",
  39. "moretypes": "",
  40. "chapterid": 0,
  41. "sinaimg": "26950-1607070544975.webp",
  42. "videoUrl": "",
  43. "diffDegree": 1,
  44. "cityid": 0,
  45. "gs": "test",
  46. "keyword": "",
  47. "errorRate": 0,
  48. "mediaUrl": "https://t1-1305573081.file.myqcloud.com/yd/app/media/26950-1607070544975.webp",
  49. "showOptionType": 0,
  50. "questionSource": 1,
  51. "bestExplainNew": "图中时钟是五点整,因此本题正确。",
  52. "userAnswer": ''
  53. },
  54. {
  55. "id": 26971,
  56. "type": 1,
  57. "intnumber": "",
  58. "strtppe": "87",
  59. "strtypeL": "8701",
  60. "licensetype": "",
  61. "question": "下图中物体的颜色是红色。",
  62. "an1": "正确",
  63. "an2": "错误",
  64. "an3": "",
  65. "an4": "",
  66. "an5": "",
  67. "an6": "",
  68. "an7": "",
  69. "answertrue": "1",
  70. "explain": "图中玫瑰花的颜色是红色,题中说红色,因此本题正确。",
  71. "bestanswerid": "1334802770611470337",
  72. "kemu": 1,
  73. "jieshiFrom": "",
  74. "moretypes": "",
  75. "chapterid": 0,
  76. "sinaimg": "26971-1607070553838.webp",
  77. "videoUrl": "",
  78. "diffDegree": 2,
  79. "cityid": 0,
  80. "gs": "test",
  81. "keyword": "",
  82. "errorRate": 0,
  83. "mediaUrl": "https://t1-1305573081.file.myqcloud.com/yd/app/media/26971-1607070553838.webp",
  84. "showOptionType": 0,
  85. "questionSource": 1,
  86. "bestExplainNew": "图中玫瑰花的颜色是红色,题中说红色,因此本题正确。",
  87. "userAnswer": ''
  88. },
  89. {
  90. "id": 27355,
  91. "type": 1,
  92. "intnumber": "",
  93. "strtppe": "87",
  94. "strtypeL": "8701",
  95. "licensetype": "",
  96. "question": "注意观察图片:中间箭头的方向是向下。",
  97. "an1": "正确",
  98. "an2": "错误",
  99. "an3": "",
  100. "an4": "",
  101. "an5": "",
  102. "an6": "",
  103. "an7": "",
  104. "answertrue": "2",
  105. "explain": "图中箭头的方向依次是下、上、下、上、下、下、上,中间箭头的方向是上。",
  106. "bestanswerid": "1363676634208559104",
  107. "kemu": 1,
  108. "jieshiFrom": "",
  109. "moretypes": "",
  110. "chapterid": 0,
  111. "sinaimg": "27355-1613961310107.webp",
  112. "videoUrl": "",
  113. "diffDegree": 4,
  114. "cityid": 0,
  115. "gs": "test",
  116. "keyword": "",
  117. "errorRate": 1,
  118. "mediaUrl": "https://t1-1305573081.file.myqcloud.com/yd/app/media/27355-1613961310107.webp",
  119. "showOptionType": 0,
  120. "questionSource": 1,
  121. "bestExplainNew": "图中箭头的方向依次是下、上、下、上、下、下、上,中间箭头的方向是上。",
  122. "userAnswer": ''
  123. },
  124. {
  125. "id": 26969,
  126. "type": 1,
  127. "intnumber": "",
  128. "strtppe": "87",
  129. "strtypeL": "8701",
  130. "licensetype": "",
  131. "question": "下图时钟指示的时间是十二点整。",
  132. "an1": "正确",
  133. "an2": "错误",
  134. "an3": "",
  135. "an4": "",
  136. "an5": "",
  137. "an6": "",
  138. "an7": "",
  139. "answertrue": "2",
  140. "explain": "图中时钟是十一点整,因此本题错误。",
  141. "bestanswerid": "1334802442033872897",
  142. "kemu": 1,
  143. "jieshiFrom": "",
  144. "moretypes": "",
  145. "chapterid": 0,
  146. "sinaimg": "26969-1607070552164.webp",
  147. "videoUrl": "",
  148. "diffDegree": 3,
  149. "cityid": 0,
  150. "gs": "test",
  151. "keyword": "",
  152. "errorRate": 0,
  153. "mediaUrl": "https://t1-1305573081.file.myqcloud.com/yd/app/media/26969-1607070552164.webp",
  154. "showOptionType": 0,
  155. "questionSource": 1,
  156. "bestExplainNew": "图中时钟是十一点整,因此本题错误。",
  157. "userAnswer": ''
  158. },
  159. {
  160. "id": 26947,
  161. "type": 1,
  162. "intnumber": "",
  163. "strtppe": "87",
  164. "strtypeL": "8701",
  165. "licensetype": "",
  166. "question": "下图时钟指示的时间是一点整。",
  167. "an1": "正确",
  168. "an2": "错误",
  169. "an3": "",
  170. "an4": "",
  171. "an5": "",
  172. "an6": "",
  173. "an7": "",
  174. "answertrue": "1",
  175. "explain": "图中时钟是一点整,因此本题正确。",
  176. "bestanswerid": "1334788634762596352",
  177. "kemu": 1,
  178. "jieshiFrom": "",
  179. "moretypes": "",
  180. "chapterid": 0,
  181. "sinaimg": "26947-1607070542895.webp",
  182. "videoUrl": "",
  183. "diffDegree": 4,
  184. "cityid": 0,
  185. "gs": "test",
  186. "keyword": "",
  187. "errorRate": 0,
  188. "mediaUrl": "https://t1-1305573081.file.myqcloud.com/yd/app/media/26947-1607070542895.webp",
  189. "showOptionType": 0,
  190. "questionSource": 1,
  191. "bestExplainNew": "图中时钟是一点整,因此本题正确。",
  192. "userAnswer": ''
  193. },
  194. {
  195. "id": 27309,
  196. "type": 1,
  197. "intnumber": "",
  198. "strtppe": "87",
  199. "strtypeL": "8701",
  200. "licensetype": "",
  201. "question": "前进中的小粉猪在小黑猪的右后方。",
  202. "an1": "正确",
  203. "an2": "错误",
  204. "an3": "",
  205. "an4": "",
  206. "an5": "",
  207. "an6": "",
  208. "an7": "",
  209. "answertrue": "2",
  210. "explain": "图中前进中的小粉猪在小黑猪的左前方。",
  211. "bestanswerid": "1363676622615502848",
  212. "kemu": 1,
  213. "jieshiFrom": "",
  214. "moretypes": "",
  215. "chapterid": 0,
  216. "sinaimg": "27309-1613961215487.webp",
  217. "videoUrl": "",
  218. "diffDegree": 4,
  219. "cityid": 0,
  220. "gs": "test",
  221. "keyword": "",
  222. "errorRate": 0,
  223. "mediaUrl": "https://t1-1305573081.file.myqcloud.com/yd/app/media/27309-1613961215487.webp",
  224. "showOptionType": 0,
  225. "questionSource": 1,
  226. "bestExplainNew": "图中前进中的小粉猪在小黑猪的左前方。",
  227. "userAnswer": ''
  228. },
  229. {
  230. "id": 26997,
  231. "type": 1,
  232. "intnumber": "",
  233. "strtppe": "87",
  234. "strtypeL": "8701",
  235. "licensetype": "",
  236. "question": "下图左右两边物体数量相同。",
  237. "an1": "正确",
  238. "an2": "错误",
  239. "an3": "",
  240. "an4": "",
  241. "an5": "",
  242. "an6": "",
  243. "an7": "",
  244. "answertrue": "2",
  245. "explain": "图中左边数量为8,右边数量为7,因此本题错误。",
  246. "bestanswerid": "1334808346569539585",
  247. "kemu": 1,
  248. "jieshiFrom": "",
  249. "moretypes": "",
  250. "chapterid": 0,
  251. "sinaimg": "26997-1607070563554.webp",
  252. "videoUrl": "",
  253. "diffDegree": 2,
  254. "cityid": 0,
  255. "gs": "test",
  256. "keyword": "",
  257. "errorRate": 0,
  258. "mediaUrl": "https://t1-1305573081.file.myqcloud.com/yd/app/media/26997-1607070563554.webp",
  259. "showOptionType": 0,
  260. "questionSource": 1,
  261. "bestExplainNew": "图中左边数量为8,右边数量为7,因此本题错误。",
  262. "userAnswer": ''
  263. },
  264. {
  265. "id": 27385,
  266. "type": 1,
  267. "intnumber": "",
  268. "strtppe": "87",
  269. "strtypeL": "8701",
  270. "licensetype": "",
  271. "question": "注意观察图中苹果有3个。",
  272. "an1": "正确",
  273. "an2": "错误",
  274. "an3": "",
  275. "an4": "",
  276. "an5": "",
  277. "an6": "",
  278. "an7": "",
  279. "answertrue": "2",
  280. "explain": "图中从左到右是橘子、苹果、橘子、梨、苹果、橘子。所以本题错误。",
  281. "bestanswerid": "1363676641330487296",
  282. "kemu": 1,
  283. "jieshiFrom": "",
  284. "moretypes": "",
  285. "chapterid": 0,
  286. "sinaimg": "27385-1613961370577.webp",
  287. "videoUrl": "",
  288. "diffDegree": 5,
  289. "cityid": 0,
  290. "gs": "test",
  291. "keyword": "",
  292. "errorRate": 0,
  293. "mediaUrl": "https://t1-1305573081.file.myqcloud.com/yd/app/media/27385-1613961370577.webp",
  294. "showOptionType": 0,
  295. "questionSource": 1,
  296. "bestExplainNew": "图中从左到右是橘子、苹果、橘子、梨、苹果、橘子。所以本题错误。",
  297. "userAnswer": ''
  298. },
  299. {
  300. "id": 27202,
  301. "type": 1,
  302. "intnumber": "",
  303. "strtppe": "87",
  304. "strtypeL": "8701",
  305. "licensetype": "",
  306. "question": "注意图片中亮起的信号灯是黄色。",
  307. "an1": "正确",
  308. "an2": "错误",
  309. "an3": "",
  310. "an4": "",
  311. "an5": "",
  312. "an6": "",
  313. "an7": "",
  314. "answertrue": "2",
  315. "explain": "由图可知,图中亮起的信号灯是最左面的红灯。",
  316. "bestanswerid": "1347779221883215872",
  317. "kemu": 1,
  318. "jieshiFrom": "",
  319. "moretypes": "",
  320. "chapterid": 0,
  321. "sinaimg": "27202-1610171483156.webp",
  322. "videoUrl": "",
  323. "diffDegree": 1,
  324. "cityid": 0,
  325. "gs": "test",
  326. "keyword": "",
  327. "errorRate": 0,
  328. "mediaUrl": "https://t1-1305573081.file.myqcloud.com/yd/app/media/27202-1610171483156.webp",
  329. "showOptionType": 0,
  330. "questionSource": 1,
  331. "bestExplainNew": "由图可知,图中亮起的信号灯是最左面的红灯。",
  332. "userAnswer": ''
  333. },
  334. {
  335. "id": 26984,
  336. "type": 1,
  337. "intnumber": "",
  338. "strtppe": "87",
  339. "strtypeL": "8701",
  340. "licensetype": "",
  341. "question": "行驶中的红车在蓝车的正前方。",
  342. "an1": "正确",
  343. "an2": "错误",
  344. "an3": "",
  345. "an4": "",
  346. "an5": "",
  347. "an6": "",
  348. "an7": "",
  349. "answertrue": "1",
  350. "explain": "图中红车在蓝车的正前方。",
  351. "bestanswerid": "1334807100232089600",
  352. "kemu": 1,
  353. "jieshiFrom": "",
  354. "moretypes": "",
  355. "chapterid": 0,
  356. "sinaimg": "26984-1607070558596.webp",
  357. "videoUrl": "",
  358. "diffDegree": 1,
  359. "cityid": 0,
  360. "gs": "test",
  361. "keyword": "",
  362. "errorRate": 0,
  363. "mediaUrl": "https://t1-1305573081.file.myqcloud.com/yd/app/media/26984-1607070558596.webp",
  364. "showOptionType": 0,
  365. "questionSource": 1,
  366. "bestExplainNew": "图中红车在蓝车的正前方。",
  367. "userAnswer": ''
  368. }])
  369. const listIndex = ref(0)
  370. const listPageNum = ref('1')
  371. const countDown = ref('00:45:00')
  372. // const issueAutoRead = () => {
  373. // let redIssue = list.value[listIndex.value].question
  374. // if (store.state.sysConfig.autoRed) {
  375. // redIssue = redIssue.replace(list.value[listIndex.value].titlekeyword, '<span class="text-red-500">' + list.value[listIndex.value].titlekeyword + '</span>')
  376. // }
  377. // return redIssue
  378. // }
  379. const setPageNumToListIndex = (page: string | number) => {
  380. page = Number(page)
  381. listIndex.value = page - 1
  382. }
  383. const getProblemTypeName = (type: number) => {
  384. let name = "";
  385. switch (type) {
  386. case 1:
  387. name = "判断题";
  388. break;
  389. case 2:
  390. name = "选择题";
  391. break;
  392. case 3:
  393. name = "多选题";
  394. break;
  395. default:
  396. break;
  397. }
  398. return name;
  399. };
  400. const setPageToListIndex = (page: number | string) => {
  401. if (list.value.length < Number(page)) {
  402. message.error({
  403. content: '超过最大值'
  404. })
  405. return
  406. }
  407. else if (Number(page) < 1) {
  408. message.error({
  409. content: '低于最小值'
  410. })
  411. }
  412. else {
  413. listIndex.value = Number(page) - 1
  414. }
  415. }
  416. const nextProblem = () => {
  417. console.log("nextProblem");
  418. if (listIndex.value < list.value.length - 1) {
  419. listIndex.value++;
  420. return;
  421. }
  422. };
  423. const preProblem = () => {
  424. if (listIndex.value > 0) {
  425. listIndex.value = listIndex.value - 1;
  426. }
  427. };
  428. const setIsSkipWrong = (isSkipWrong: boolean) => {
  429. list.value[listIndex.value].isSkipWrong = !list.value[listIndex.value].isSkipWrong
  430. }
  431. const setUserAnswer = (answer: string) => {
  432. //没有多选题
  433. list.value[listIndex.value].userAnswer = answer;
  434. };
  435. //用于直接出结果
  436. const setUserAnswerAndRes = (userAnswer: string) => {
  437. if (list.value[listIndex.value].type == 3) {
  438. //三力测试没有多选题
  439. } else {
  440. list.value[listIndex.value].userAnswer = userAnswer;
  441. }
  442. //判断对错,以及是否自动下一题
  443. if (
  444. list.value[listIndex.value].type !== 3 &&
  445. list.value[listIndex.value].userAnswer.length
  446. ) {
  447. const userAnswer = list.value[listIndex.value].userAnswer as string;
  448. const answer = list.value[listIndex.value]['an' + list.value[listIndex.value].answertrue];
  449. if (answer == userAnswer) {
  450. list.value[listIndex.value].isComplete = true;
  451. list.value[listIndex.value].isError = false;
  452. trueNum.value++;
  453. //自动跳转下一题
  454. if (store.state.sysConfig.autoNext) {
  455. window.setTimeout(() => {
  456. nextProblem()
  457. }, 1500)
  458. }
  459. } else {
  460. list.value[listIndex.value].isComplete = true;
  461. list.value[listIndex.value].isError = true;
  462. falseNum.value++;
  463. }
  464. }
  465. //判断对错
  466. };
  467. const switchIndexByJudge = (index: number) => {
  468. let name = "";
  469. switch (index) {
  470. case 0:
  471. name = "√";
  472. break;
  473. case 1:
  474. name = "×";
  475. break;
  476. }
  477. return name;
  478. };
  479. const switchIndexBySelect = (index: number | string) => {
  480. let name = "";
  481. const i = Number(index)
  482. switch (i) {
  483. case 0:
  484. name = "A";
  485. break;
  486. case 1:
  487. name = "B";
  488. break;
  489. case 2:
  490. name = "C";
  491. break;
  492. case 3:
  493. name = "D";
  494. break;
  495. case 4:
  496. name = "E";
  497. break;
  498. case 5:
  499. name = "F";
  500. break;
  501. }
  502. return name;
  503. };
  504. const switchPageNumBySelect = (index: number | string) => {
  505. let name = "";
  506. const i = Number(index) - 1
  507. switch (i) {
  508. case 0:
  509. name = "A";
  510. break;
  511. case 1:
  512. name = "B";
  513. break;
  514. case 2:
  515. name = "C";
  516. break;
  517. case 3:
  518. name = "D";
  519. break;
  520. case 4:
  521. name = "E";
  522. break;
  523. case 5:
  524. name = "F";
  525. break;
  526. }
  527. return name;
  528. };
  529. const switchAnswerBySelect = (userAnswer: string, index: number) => {
  530. let select = "";
  531. for (let i = 1; i <= 6; i++) {
  532. if (userAnswer == '') {
  533. break;
  534. }
  535. if (userAnswer == list.value[index]['an' + i]) {
  536. select = String.fromCharCode(i + 64)
  537. }
  538. }
  539. return select;
  540. };
  541. watch(listIndex, (newVal, oldVal) => {
  542. if (config.autoAnswer) {
  543. //判断对错
  544. if (
  545. list.value[oldVal].type !== 3 &&
  546. !list.value[oldVal].isComplete &&
  547. list.value[oldVal].userAnswer.length
  548. ) {
  549. const userAnswer = list.value[oldVal].userAnswer as string;
  550. const answer = list.value[oldVal]['an' + list.value[oldVal].answertrue];
  551. if (answer == userAnswer) {
  552. list.value[oldVal].isComplete = true;
  553. list.value[oldVal].isError = false;
  554. trueNum.value++;
  555. } else {
  556. list.value[oldVal].isComplete = true;
  557. list.value[oldVal].isError = true;
  558. falseNum.value++;
  559. }
  560. }
  561. //判断对错
  562. //提示
  563. if (
  564. list.value[oldVal].isError &&
  565. list.value[oldVal].type !== 1 &&
  566. list.value[oldVal].isComplete
  567. ) {
  568. alert(
  569. "正确答案:" + (switchAnswerBySelect(list.value[oldVal]['an' + list.value[oldVal].answertrue], oldVal))
  570. );
  571. } else if (
  572. list.value[oldVal].isError &&
  573. list.value[oldVal].type === 1 &&
  574. list.value[oldVal].isComplete
  575. ) {
  576. alert("正确答案:" + (list.value[oldVal]['an' + list.value[oldVal].answertrue] == '正确' ? '√' : '×'));
  577. }
  578. }
  579. //提示
  580. });
  581. const getCorrectRate = () => {
  582. if (trueNum.value + falseNum.value) {
  583. Math.round((trueNum.value) / (trueNum.value + falseNum.value) * 100) / 100
  584. return
  585. }
  586. else {
  587. return 0
  588. }
  589. }
  590. const submitThreeExam = () => {
  591. setUserAnswerAndRes(list.value[listIndex.value].userAnswer)
  592. let score = 0
  593. const wrongTempList: threeApi.threeForceList["rows"] = [] //临时错题
  594. const wrongList: threeApi.threeForceList["rows"] = [] //永久错题
  595. const wrongListRes: string[] = []
  596. list.value.forEach((item, index) => {
  597. //题目正确加分
  598. if (item.isComplete && !item.isError && list.value[index].userAnswer.length > 0) {
  599. score = score + 1
  600. }
  601. else if (!item.isComplete && list.value[index].userAnswer.length == 0) {
  602. //没做的题目
  603. if (config.recordUncomplete) {
  604. wrongTempList.push(list.value[index])
  605. wrongListRes.push('0')
  606. }
  607. }
  608. else {
  609. //错误的题目
  610. let userAnswerIndex = 0
  611. for (let i = 1; i <= 6; i++) {
  612. if (list.value[index].userAnswer == '') {
  613. break;
  614. }
  615. if (list.value[index].userAnswer == list.value[index]['an' + i]) {
  616. userAnswerIndex = i
  617. }
  618. }
  619. //isSkipWrong是假值的时候才收集错题
  620. if (!list.value[listIndex.value].isSkipWrong) {
  621. wrongTempList.push(list.value[index])
  622. wrongListRes.push(String(userAnswerIndex))
  623. wrongList.push(list.value[index])
  624. }
  625. }
  626. })
  627. //保存临时错题
  628. window.sessionStorage.setItem('threeExam_temp_wrong_list', JSON.stringify(wrongTempList))
  629. //同步全部的错题
  630. api.question.questionthreeWrongWrongs({
  631. wrongs: wrongList.map(item => {
  632. return {
  633. id: item.id,
  634. timestamp: + new Date()
  635. }
  636. })
  637. }).then(res => {
  638. store.dispatch('AsyncThreeWrongList')
  639. router.push({
  640. path: '/threeExamAnaly',
  641. query: {
  642. wrongListRes: JSON.stringify(wrongListRes),
  643. score: score
  644. }
  645. })
  646. }).catch(err => {
  647. router.push({
  648. path: '/threeExamAnaly',
  649. query: {
  650. wrongListRes: JSON.stringify(wrongListRes),
  651. score: score
  652. }
  653. })
  654. })
  655. }
  656. onMounted(() => {
  657. message.loading('题目加载中', 0)
  658. requestFn.then(res => {
  659. res.rows.forEach(item => {
  660. item.userAnswer = ""
  661. })
  662. window.sessionStorage.setItem("threeExam_current_list", JSON.stringify(res.rows));
  663. list.value = res.rows;
  664. message.destroy()
  665. }).catch(err => {
  666. message.destroy()
  667. })
  668. timerId = window.setInterval(() => {
  669. if (examTimeMillSeconds === 0) {
  670. console.log('已经清除')
  671. window.clearInterval(timerId)
  672. return
  673. }
  674. examTimeMillSeconds = examTimeMillSeconds - 1000
  675. countDown.value = moment(examTimeMillSeconds).format('00:mm:ss')
  676. }, 1000)
  677. })
  678. onBeforeUnmount(() => {
  679. window.clearInterval(timerId)
  680. })
  681. return {
  682. falseNum,
  683. trueNum,
  684. list,
  685. listIndex,
  686. countDown,
  687. listPageNum,
  688. setUserAnswer,
  689. setUserAnswerAndRes,
  690. getProblemTypeName,
  691. getCorrectRate,
  692. nextProblem,
  693. preProblem,
  694. switchIndexByJudge,
  695. switchAnswerBySelect,
  696. switchIndexBySelect,
  697. setPageNumToListIndex,
  698. switchPageNumBySelect,
  699. submitThreeExam,
  700. setIsSkipWrong,
  701. setPageToListIndex
  702. }
  703. }