index.vue 56 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539
  1. <template>
  2. <div class="bank-explain">
  3. <section class="section">
  4. <div class="section__header">
  5. <el-breadcrumb separator="/">
  6. <el-breadcrumb-item
  7. v-for="(item, index) in $route.matched"
  8. :key="index"
  9. :to="{ path: item.path }"
  10. >{{ item.name }}</el-breadcrumb-item
  11. >
  12. </el-breadcrumb>
  13. </div>
  14. <div class="section__body">
  15. <div class="explain-record">
  16. <div class="explain-record__header">
  17. <el-tabs :value="activeName" @tab-click="tabChange">
  18. <el-tab-pane label="对题记录" name="1"></el-tab-pane>
  19. <el-tab-pane label="错题记录" name="2"></el-tab-pane>
  20. </el-tabs>
  21. </div>
  22. <div class="explain-record__body">
  23. <div class="left-box">
  24. <div class="left-box__body">
  25. <template v-for="(question, questionIndex) in questionList">
  26. <div
  27. class="question"
  28. v-if="question.type == 1 && current == questionIndex"
  29. :key="questionIndex"
  30. >
  31. <div class="question__title">
  32. {{ questionIndex + 1 }}、单选题
  33. </div>
  34. <div class="question__desc" v-html="question.content"></div>
  35. <div class="question__content">
  36. <div class="question-list" v-if="!question.ques">
  37. <div
  38. class="radio"
  39. v-for="(item, index) in question.jsonStr"
  40. :key="index"
  41. >
  42. <div>{{ ast[index] }}. {{ item.content }}</div>
  43. </div>
  44. </div>
  45. <div class="question-list" v-if="question.ques">
  46. <div
  47. class="radio"
  48. :class="{
  49. right:
  50. item.optionsId == question.ques ||
  51. item.optionsId == question.ans,
  52. wrong:
  53. item.optionsId == question.ques &&
  54. question.ques != question.ans,
  55. }"
  56. v-for="(item, index) in question.jsonStr"
  57. :key="index"
  58. >
  59. <div>{{ ast[index] }}. {{ item.content }}</div>
  60. </div>
  61. </div>
  62. <div class="answer-list" v-if="question.ques">
  63. <div class="answer-list__left">
  64. 正确答案:{{ ast[question.ans - 1] }}
  65. </div>
  66. <!-- <div class="answer-list__left">
  67. 我的答案:{{ ast[question.ques - 1] }}
  68. </div> -->
  69. </div>
  70. <div class="explain-list" v-if="question.ques">
  71. <div class="explain-list__header">答案解析:</div>
  72. <div
  73. class="explain-list__body"
  74. v-html="question.analysisContent"
  75. ></div>
  76. </div>
  77. </div>
  78. <div class="question__btns"></div>
  79. </div>
  80. <div
  81. class="question"
  82. v-if="question.type == 2 && current == questionIndex"
  83. :key="questionIndex"
  84. >
  85. <div class="question__title">
  86. {{ questionIndex + 1 }}、多选题
  87. </div>
  88. <div class="question__desc" v-html="question.content"></div>
  89. <div class="question__content">
  90. <div class="question-list" v-if="!question.ques">
  91. <el-checkbox
  92. class="checkbox"
  93. v-for="(item, index) in question.jsonStr"
  94. :key="index"
  95. :label="item.optionsId"
  96. v-model="item.checked"
  97. >
  98. <div>{{ ast[index] }}. {{ item.content }}</div>
  99. </el-checkbox>
  100. </div>
  101. <div class="question-list" v-if="question.ques">
  102. <el-checkbox
  103. disabled
  104. class="checkbox"
  105. :class="{
  106. right:
  107. question.ques.indexOf(item.optionsId) != -1 ||
  108. question.ans.indexOf(item.optionsId) != -1,
  109. wrong:
  110. question.ques.indexOf(item.optionsId) != -1 &&
  111. question.ans.indexOf(item.optionsId) == -1,
  112. }"
  113. v-for="(item, index) in question.jsonStr"
  114. :key="index"
  115. :label="item.optionsId"
  116. v-model="item.checked"
  117. >
  118. <div>{{ ast[index] }}. {{ item.content }}</div>
  119. </el-checkbox>
  120. </div>
  121. <div class="answer-list" v-if="question.ques">
  122. <div class="answer-list__left">
  123. 正确答案:
  124. <template v-for="ansItem in question.ans">{{
  125. ast[ansItem - 1]
  126. }}</template>
  127. </div>
  128. <!-- <div class="answer-list__left">
  129. 我的答案:
  130. <template v-for="quesItem in question.ques">{{
  131. ast[quesItem - 1]
  132. }}</template>
  133. </div> -->
  134. </div>
  135. <div class="explain-list" v-if="question.ques">
  136. <div class="explain-list__header">答案解析:</div>
  137. <div
  138. class="explain-list__body"
  139. v-if="question.analysisContent"
  140. ></div>
  141. </div>
  142. </div>
  143. <div class="question__btns"></div>
  144. </div>
  145. <div
  146. class="question"
  147. v-if="question.type == 3 && current == questionIndex"
  148. :key="questionIndex"
  149. >
  150. <div class="question__title">
  151. {{ questionIndex + 1 }}、判断题
  152. </div>
  153. <div class="question__desc" v-html="question.content"></div>
  154. <div class="question__content">
  155. <div class="question-list" v-if="!question.ques">
  156. <div
  157. class="radio"
  158. v-for="(item, index) in judge"
  159. :key="index"
  160. >
  161. <div>{{ ast[index] }}. {{ item }}</div>
  162. </div>
  163. </div>
  164. <div class="question-list" v-if="question.ques">
  165. <div
  166. class="radio"
  167. :class="{
  168. right:
  169. index == question.ques || index == question.ans,
  170. wrong:
  171. index == question.ques &&
  172. question.ques != question.ans,
  173. }"
  174. v-for="(item, index) in judge"
  175. :key="index"
  176. >
  177. <div>{{ ast[index] }}. {{ item }}</div>
  178. </div>
  179. </div>
  180. <div class="answer-list" v-if="question.ques">
  181. <div class="answer-list__left">
  182. 正确答案:{{ ast[question.ans] }}
  183. </div>
  184. <!-- <div class="answer-list__left">
  185. 我的答案:{{ ast[question.ques] }}
  186. </div> -->
  187. </div>
  188. <div class="explain-list" v-if="question.ques">
  189. <div class="explain-list__header">答案解析:</div>
  190. <div
  191. class="explain-list__body"
  192. v-html="question.analysisContent"
  193. ></div>
  194. </div>
  195. </div>
  196. <div class="question__btns"></div>
  197. </div>
  198. <div
  199. class="question"
  200. v-if="question.type == 4 && current == questionIndex"
  201. :key="questionIndex"
  202. >
  203. <div class="question__title">
  204. {{ questionIndex + 1 }}、案例题
  205. </div>
  206. <div class="question__content">
  207. <el-tabs v-model="question.tabIndex">
  208. <el-tab-pane
  209. v-for="(json, jsonIndex) in question.jsonStr"
  210. :label="'问题' + (jsonIndex + 1)"
  211. :name="jsonIndex + ''"
  212. :key="jsonIndex"
  213. >
  214. <div
  215. class="question"
  216. v-if="json.type == 1"
  217. :key="questionIndex"
  218. >
  219. <div class="question__title">
  220. {{ jsonIndex + 1 }}、单选题
  221. </div>
  222. <div
  223. class="question__desc"
  224. v-html="json.content"
  225. ></div>
  226. <div class="question__content">
  227. <div
  228. class="question-list"
  229. v-if="!question.ques[jsonIndex]"
  230. >
  231. <div
  232. class="radio"
  233. v-for="(item, index) in json.optionsList"
  234. :key="index"
  235. >
  236. <div>
  237. {{ ast[index] }}. {{ item.content }}
  238. </div>
  239. </div>
  240. </div>
  241. <div
  242. class="question-list"
  243. v-if="question.ques[jsonIndex]"
  244. >
  245. <div
  246. class="radio"
  247. :class="{
  248. right:
  249. item.optionsId ==
  250. question.ques[jsonIndex] ||
  251. item.optionsId == question.ans[jsonIndex],
  252. wrong:
  253. item.optionsId ==
  254. question.ques[jsonIndex] &&
  255. question.ques[jsonIndex] !=
  256. question.ans[jsonIndex],
  257. }"
  258. v-for="(item, index) in json.optionsList"
  259. :key="index"
  260. >
  261. <div>
  262. {{ ast[index] }}. {{ item.content }}
  263. </div>
  264. </div>
  265. </div>
  266. <div
  267. class="answer-list"
  268. v-if="question.ques[jsonIndex]"
  269. >
  270. <div class="answer-list__left">
  271. 正确答案:{{
  272. ast[question.ans[jsonIndex] - 1]
  273. }}
  274. </div>
  275. <!-- <div class="answer-list__left">
  276. 我的答案:{{
  277. ast[question.ques[jsonIndex] - 1]
  278. }}
  279. </div> -->
  280. </div>
  281. <div
  282. class="explain-list"
  283. v-if="question.ques[jsonIndex]"
  284. >
  285. <div class="explain-list__header">
  286. 答案解析:
  287. </div>
  288. <div
  289. class="explain-list__body"
  290. v-html="json.analysisContent"
  291. ></div>
  292. </div>
  293. </div>
  294. <div class="question__btns"></div>
  295. </div>
  296. <div
  297. class="question"
  298. v-if="json.type == 2"
  299. :key="jsonIndex"
  300. >
  301. <div class="question__title">
  302. {{ jsonIndex + 1 }}、多选题
  303. </div>
  304. <div
  305. class="question__desc"
  306. v-html="json.content"
  307. ></div>
  308. <div class="question__content">
  309. <div
  310. class="question-list"
  311. v-if="!question.ques[jsonIndex]"
  312. >
  313. <el-checkbox
  314. class="checkbox"
  315. v-for="(item, index) in json.optionsList"
  316. :key="index"
  317. :label="item.optionsId"
  318. v-model="item.checked"
  319. >
  320. <div>
  321. {{ ast[index] }}. {{ item.content }}
  322. </div>
  323. </el-checkbox>
  324. </div>
  325. <div
  326. class="question-list"
  327. v-if="question.ques[jsonIndex]"
  328. >
  329. <el-checkbox
  330. disabled
  331. class="checkbox"
  332. :class="{
  333. right:
  334. question.ques[jsonIndex].indexOf(
  335. item.optionsId
  336. ) != -1 ||
  337. question.ans[jsonIndex].indexOf(
  338. item.optionsId
  339. ) != -1,
  340. wrong:
  341. question.ques[jsonIndex].indexOf(
  342. item.optionsId
  343. ) != -1 &&
  344. question.ans[jsonIndex].indexOf(
  345. item.optionsId
  346. ) == -1,
  347. }"
  348. v-for="(item, index) in json.optionsList"
  349. :key="index"
  350. :label="item.optionsId"
  351. v-model="item.checked"
  352. >
  353. <div>
  354. {{ ast[index] }}. {{ item.content }}
  355. </div>
  356. </el-checkbox>
  357. </div>
  358. <div
  359. class="answer-list"
  360. v-if="question.ques[jsonIndex]"
  361. >
  362. <div class="answer-list__left">
  363. 正确答案:
  364. <template
  365. v-for="ansItem in question.ans[jsonIndex]"
  366. >{{ ast[ansItem - 1] }}</template
  367. >
  368. </div>
  369. <!-- <div class="answer-list__left">
  370. 我的答案:
  371. <template
  372. v-for="quesItem in question.ques[jsonIndex]"
  373. >{{ ast[quesItem - 1] }}</template
  374. >
  375. </div> -->
  376. </div>
  377. <div
  378. class="explain-list"
  379. v-if="question.ques[jsonIndex]"
  380. >
  381. <div class="explain-list__header">
  382. 答案解析:
  383. </div>
  384. <div
  385. class="explain-list__body"
  386. v-html="json.analysisContent"
  387. ></div>
  388. </div>
  389. </div>
  390. <div class="question__btns">
  391. <div
  392. v-if="!question.ques[jsonIndex]"
  393. class="submit"
  394. >
  395. 确认答案
  396. </div>
  397. </div>
  398. </div>
  399. <div
  400. class="question"
  401. v-if="json.type == 3"
  402. :key="jsonIndex"
  403. >
  404. <div class="question__title">
  405. {{ jsonIndex + 1 }}、判断题
  406. </div>
  407. <div
  408. class="question__desc"
  409. v-html="json.content"
  410. ></div>
  411. <div class="question__content">
  412. <div
  413. class="question-list"
  414. v-if="!question.ques[jsonIndex]"
  415. >
  416. <div
  417. class="radio"
  418. v-for="(item, index) in judge"
  419. :key="index"
  420. >
  421. <div>{{ ast[index] }}. {{ item }}</div>
  422. </div>
  423. </div>
  424. <div
  425. class="question-list"
  426. v-if="question.ques[jsonIndex]"
  427. >
  428. <div
  429. class="radio"
  430. :class="{
  431. right:
  432. index == question.ques[jsonIndex] ||
  433. index == question.ans[jsonIndex],
  434. wrong:
  435. index == question.ques[jsonIndex] &&
  436. question.ques[jsonIndex] !=
  437. question.ans[jsonIndex],
  438. }"
  439. v-for="(item, index) in judge"
  440. :key="index"
  441. >
  442. <div>{{ ast[index] }}. {{ item }}</div>
  443. </div>
  444. </div>
  445. <div
  446. class="answer-list"
  447. v-if="question.ques[jsonIndex]"
  448. >
  449. <div class="answer-list__left">
  450. 正确答案:{{ ast[question.ans[jsonIndex]] }}
  451. </div>
  452. <!-- <div class="answer-list__left">
  453. 我的答案:{{ ast[question.ques[jsonIndex]] }}
  454. </div> -->
  455. </div>
  456. <div
  457. class="explain-list"
  458. v-if="question.ques[jsonIndex]"
  459. >
  460. <div class="explain-list__header">
  461. 答案解析:
  462. </div>
  463. <div
  464. class="explain-list__body"
  465. v-html="json.analysisContent"
  466. ></div>
  467. </div>
  468. </div>
  469. <div class="question__btns"></div>
  470. </div>
  471. <div
  472. class="question"
  473. v-if="json.type == 5"
  474. :key="jsonIndex"
  475. >
  476. <div class="question__title">
  477. {{ jsonIndex }}、简答题
  478. </div>
  479. <div
  480. class="question__desc"
  481. v-html="json.content"
  482. ></div>
  483. <div class="question__content">
  484. <div
  485. class="question-list textarea"
  486. v-if="
  487. !(
  488. question.ques[jsonIndex] &&
  489. (question.ques[jsonIndex].imageList
  490. .length ||
  491. question.ques[jsonIndex].text)
  492. )
  493. "
  494. >
  495. <el-input
  496. type="textarea"
  497. rows="5"
  498. v-model="json.ansText.text"
  499. resize="none"
  500. ></el-input>
  501. <div class="upload clearfix">
  502. <div
  503. class="upload__imgs"
  504. v-for="(img, imgIndex) in json.ansText
  505. .imageList"
  506. :key="imgIndex"
  507. >
  508. <img
  509. :src="$tools.splitImgHost(img, true)"
  510. alt=""
  511. />
  512. </div>
  513. <div class="upload__btn">
  514. <i class="el-icon-plus icon"></i>
  515. <p>上传图片</p>
  516. </div>
  517. </div>
  518. </div>
  519. <div
  520. class="explain-list"
  521. v-if="
  522. question.ques[jsonIndex] &&
  523. (question.ques[jsonIndex].imageList.length ||
  524. question.ques[jsonIndex].text)
  525. "
  526. >
  527. <!-- <div class="explain-list__header">
  528. 我的答案:
  529. </div>
  530. <div class="explain-list__body">
  531. <div>
  532. {{ question.ques[jsonIndex].text }}
  533. </div>
  534. <div class="upload clearfix">
  535. <div
  536. class="upload__imgs"
  537. v-for="(img, imgIndex) in question.ques[
  538. jsonIndex
  539. ].imageList"
  540. :key="imgIndex"
  541. >
  542. <img
  543. :src="$tools.splitImgHost(img, true)"
  544. alt=""
  545. />
  546. </div>
  547. </div>
  548. </div> -->
  549. <div class="explain-list__header">
  550. 答案解析:
  551. </div>
  552. <div
  553. class="explain-list__body"
  554. v-html="question.analysisContent"
  555. ></div>
  556. </div>
  557. </div>
  558. <div class="question__btns"></div>
  559. </div>
  560. </el-tab-pane>
  561. </el-tabs>
  562. </div>
  563. <div class="question__btns"></div>
  564. </div>
  565. <div
  566. class="question"
  567. v-if="question.type == 5 && current == questionIndex"
  568. :key="questionIndex"
  569. >
  570. <div class="question__title">
  571. {{ questionIndex }}、简答题
  572. </div>
  573. <div class="question__desc" v-html="question.content"></div>
  574. <div class="question__content">
  575. <div
  576. class="question-list textarea"
  577. v-if="
  578. !question.ques.imageList.length && !question.ques.text
  579. "
  580. >
  581. <el-input
  582. type="textarea"
  583. rows="5"
  584. v-model="question.ansText.text"
  585. resize="none"
  586. ></el-input>
  587. <div class="upload clearfix">
  588. <div
  589. class="upload__imgs"
  590. v-for="(img, imgIndex) in question.ansText
  591. .imageList"
  592. :key="imgIndex"
  593. >
  594. <img :src="$tools.splitImgHost(img, true)" alt="" />
  595. </div>
  596. <div class="upload__btn">
  597. <i class="el-icon-plus icon"></i>
  598. <p>上传图片</p>
  599. </div>
  600. </div>
  601. </div>
  602. <div
  603. class="explain-list"
  604. v-if="
  605. question.ques.imageList.length || question.ques.text
  606. "
  607. >
  608. <!-- <div class="explain-list__header">我的答案:</div>
  609. <div class="explain-list__body">
  610. <div>{{ question.ques.text }}</div>
  611. <div class="upload clearfix">
  612. <div
  613. class="upload__imgs"
  614. v-for="(img, imgIndex) in question.ques.imageList"
  615. :key="imgIndex"
  616. >
  617. <img
  618. :src="$tools.splitImgHost(img, true)"
  619. alt=""
  620. />
  621. </div>
  622. </div>
  623. </div> -->
  624. <div class="explain-list__header">答案解析:</div>
  625. <div
  626. class="explain-list__body"
  627. v-html="question.analysisContent"
  628. ></div>
  629. </div>
  630. </div>
  631. <div class="question__btns"></div>
  632. </div>
  633. </template>
  634. </div>
  635. <div class="left-box__footer">
  636. <div class="btn" @click="prevQuestion">上一题</div>
  637. <div class="btn" @click="nextQuestion">下一题</div>
  638. </div>
  639. </div>
  640. <div class="right-box">
  641. <div class="right-box__header">答题卡</div>
  642. <div class="right-box__body">
  643. <div class="card">
  644. <div class="card__note">
  645. <div class="item">
  646. <div class="box green"></div>
  647. 正确
  648. </div>
  649. <div class="item">
  650. <div class="box red"></div>
  651. 错误
  652. </div>
  653. <div class="item">
  654. <div class="box blue"></div>
  655. 已做未评改
  656. </div>
  657. <div class="item">
  658. <div class="box white"></div>
  659. 未做
  660. </div>
  661. </div>
  662. <div class="card__content">
  663. <ul class="list">
  664. <li
  665. class="item white"
  666. v-for="(item, index) in questionList"
  667. :key="index"
  668. :class="{
  669. green: isRight(item, index),
  670. red: isWrong(item, index),
  671. blue: isOver(item, index),
  672. }"
  673. @click="changeIndex(index)"
  674. >
  675. {{ index + 1 }}
  676. </li>
  677. </ul>
  678. </div>
  679. </div>
  680. </div>
  681. <div class="right-box__footer"></div>
  682. </div>
  683. </div>
  684. </div>
  685. </div>
  686. </section>
  687. </div>
  688. </template>
  689. <script>
  690. export default {
  691. name: "BankExplain",
  692. components: {},
  693. data() {
  694. return {
  695. current: 0,
  696. questionList: [],
  697. activeName: "1",
  698. goodsId: "",
  699. orderGoodsId: "",
  700. examId: "",
  701. judge: ["错误", "正确"],
  702. ast: ["A", "B", "C", "D", "E", "F", "G"],
  703. };
  704. },
  705. mounted() {
  706. this.orderGoodsId = this.$route.query.orderGoodsId;
  707. this.examId = this.$route.query.examId;
  708. this.goodsId = this.$route.params.goodsId;
  709. if (this.activeName == "1") {
  710. this.examRecordRightList();
  711. } else {
  712. this.examRecordWrongList();
  713. }
  714. },
  715. methods: {
  716. tabChange(e) {
  717. if (this.activeName == e.name) return;
  718. this.activeName = e.name;
  719. if (this.activeName == "1") {
  720. this.examRecordRightList();
  721. } else {
  722. this.examRecordWrongList();
  723. }
  724. },
  725. /**
  726. * 获取错题列表
  727. */
  728. examRecordWrongList() {
  729. this.$request
  730. .examRecordWrongList({
  731. examId: this.examId,
  732. orderGoodsId: this.orderGoodsId,
  733. })
  734. .then((res) => {
  735. res.rows.forEach((item, index) => {
  736. if (typeof item.jsonStr == "string") {
  737. item.jsonStr = JSON.parse(item.jsonStr);
  738. if (item.type == 2) {
  739. //多选
  740. item.jsonStr.forEach((str) => {
  741. str.optionsId = "" + str.optionsId;
  742. });
  743. let arr = item.answerQuestion.split(",");
  744. arr.forEach((a, i) => {
  745. arr[i] = "" + a;
  746. });
  747. item.ans = arr;
  748. item.ques = item.ans;
  749. return;
  750. } else if (item.type == 5) {
  751. item.ansText = {
  752. text: "",
  753. imageList: [],
  754. };
  755. item.ques = {
  756. text: item.analysisContent,
  757. imageList: [],
  758. };
  759. return;
  760. } else if (item.type == 4) {
  761. console.log(item.jsonStr);
  762. item.ques = [];
  763. item.current = 0;
  764. let ansArr = [];
  765. item.jsonStr.forEach((json, index) => {
  766. if (json.type == 1) {
  767. ansArr[index] = json.answerQuestion;
  768. } else if (json.type == 2) {
  769. json.optionsList.forEach((str) => {
  770. str.optionsId = "" + str.optionsId;
  771. });
  772. let arr = json.answerQuestion.split(",");
  773. arr.forEach((a, i) => {
  774. arr[i] = "" + a;
  775. });
  776. ansArr[index] = arr;
  777. } else if (json.type == 3) {
  778. ansArr[index] = json.answerQuestion;
  779. } else if (json.type == 5) {
  780. ansArr[index] = {
  781. text: "",
  782. imageList: [],
  783. };
  784. json.ansText = {
  785. text: "",
  786. imageList: [],
  787. };
  788. }
  789. });
  790. item.ans = ansArr;
  791. item.ques = item.ans;
  792. return;
  793. }
  794. item.ans = item.answerQuestion;
  795. item.ques = item.ans;
  796. } else {
  797. item.ques = item.ans;
  798. }
  799. });
  800. this.current = 0;
  801. this.questionList = res.rows;
  802. });
  803. },
  804. /**
  805. * 获取对题列表
  806. */
  807. examRecordRightList() {
  808. this.$request
  809. .examRecordRightList({
  810. examId: this.examId,
  811. orderGoodsId: this.orderGoodsId,
  812. })
  813. .then((res) => {
  814. res.rows.forEach((item, index) => {
  815. if (typeof item.jsonStr == "string") {
  816. item.jsonStr = JSON.parse(item.jsonStr);
  817. if (item.type == 2) {
  818. //多选
  819. item.jsonStr.forEach((str) => {
  820. str.optionsId = "" + str.optionsId;
  821. });
  822. let arr = item.answerQuestion.split(",");
  823. arr.forEach((a, i) => {
  824. arr[i] = "" + a;
  825. });
  826. item.ans = arr;
  827. item.ques = item.ans;
  828. return;
  829. } else if (item.type == 5) {
  830. item.ansText = {
  831. text: "",
  832. imageList: [],
  833. };
  834. item.ques = {
  835. text: item.analysisContent,
  836. imageList: [],
  837. };
  838. return;
  839. } else if (item.type == 4) {
  840. console.log(item.jsonStr);
  841. item.ques = [];
  842. item.current = 0;
  843. let ansArr = [];
  844. item.jsonStr.forEach((json, index) => {
  845. if (json.type == 1) {
  846. ansArr[index] = json.answerQuestion;
  847. } else if (json.type == 2) {
  848. json.optionsList.forEach((str) => {
  849. str.optionsId = "" + str.optionsId;
  850. });
  851. let arr = json.answerQuestion.split(",");
  852. arr.forEach((a, i) => {
  853. arr[i] = "" + a;
  854. });
  855. ansArr[index] = arr;
  856. } else if (json.type == 3) {
  857. ansArr[index] = json.answerQuestion;
  858. } else if (json.type == 5) {
  859. ansArr[index] = {
  860. text: "",
  861. imageList: [],
  862. };
  863. json.ansText = {
  864. text: "",
  865. imageList: [],
  866. };
  867. }
  868. });
  869. item.ans = ansArr;
  870. item.ques = item.ans;
  871. return;
  872. }
  873. item.ans = item.answerQuestion;
  874. item.ques = item.ans;
  875. } else {
  876. item.ques = item.ans;
  877. }
  878. });
  879. this.current = 0;
  880. this.questionList = res.rows;
  881. });
  882. },
  883. changeQuestion(index) {
  884. this.questionIndex = index;
  885. },
  886. nextQuestion() {
  887. if (this.current >= this.questionList.length - 1) {
  888. this.$message({
  889. type: "warning",
  890. message: "已经是最后一题了!",
  891. });
  892. return;
  893. }
  894. this.current++;
  895. },
  896. prevQuestion() {
  897. if (this.current == 0) {
  898. this.$message({
  899. type: "warning",
  900. message: "已经是第一题了!",
  901. });
  902. return;
  903. } else {
  904. this.current--;
  905. }
  906. },
  907. isRight(item, index) {
  908. //单选
  909. if (this.questionList[index].ques) {
  910. if (item.type == 1) {
  911. console.log(
  912. this.questionList[index].ques == this.questionList[index].ans
  913. );
  914. return this.questionList[index].ques == this.questionList[index].ans;
  915. //多选
  916. } else if (item.type == 2) {
  917. //每一项都相等
  918. return this.questionList[index].ans.every((item, i) => {
  919. return item == this.questionList[index].ques[i];
  920. });
  921. //判断
  922. } else if (item.type == 3) {
  923. return this.questionList[index].ques == this.questionList[index].ans;
  924. } else {
  925. return false;
  926. }
  927. } else {
  928. return false;
  929. }
  930. },
  931. isWrong(item, index) {
  932. if (this.questionList[index].ques) {
  933. //单选
  934. if (item.type == 1) {
  935. return this.questionList[index].ques != this.questionList[index].ans;
  936. //多选
  937. } else if (item.type == 2) {
  938. //每一项都相等
  939. return this.questionList[index].ans.some((item, i) => {
  940. return item != this.questionList[index].ques[i];
  941. });
  942. //判断
  943. } else if (item.type == 3) {
  944. return this.questionList[index].ques != this.questionList[index].ans;
  945. } else {
  946. return false;
  947. }
  948. } else {
  949. return false;
  950. }
  951. },
  952. right(bankIndex, ansIndex, option) {
  953. if (
  954. this.questionList[bankIndex].ques[ansIndex] &&
  955. this.questionList[bankIndex].ans[ansIndex]
  956. ) {
  957. if (
  958. this.questionList[bankIndex].ques[ansIndex].indexOf(
  959. option.optionsId
  960. ) != -1 ||
  961. this.questionList[bankIndex].ans[ansIndex].indexOf(
  962. option.optionsId
  963. ) != -1
  964. ) {
  965. return true;
  966. } else {
  967. return false;
  968. }
  969. } else {
  970. return false;
  971. }
  972. },
  973. wrong(bankIndex, ansIndex, option) {
  974. if (
  975. this.questionList[bankIndex].ques[ansIndex] &&
  976. this.questionList[bankIndex].ans[ansIndex]
  977. ) {
  978. if (
  979. this.questionList[bankIndex].ques[ansIndex].indexOf(
  980. option.optionsId
  981. ) != -1 &&
  982. this.questionList[bankIndex].ans[ansIndex].indexOf(
  983. option.optionsId
  984. ) == -1
  985. ) {
  986. return true;
  987. } else {
  988. return false;
  989. }
  990. } else {
  991. return false;
  992. }
  993. },
  994. isOver(item, index) {
  995. if (this.questionList[index].ques) {
  996. if (item.type == 4) {
  997. //案例题
  998. let isOver = item.jsonStr.every((jsonItem, indexs) => {
  999. if (
  1000. jsonItem.type == 1 ||
  1001. jsonItem.type == 2 ||
  1002. jsonItem.type == 3
  1003. ) {
  1004. if (item.ques[indexs]) {
  1005. return true;
  1006. } else {
  1007. return false;
  1008. }
  1009. } else if (jsonItem.type == 5) {
  1010. if (
  1011. item.ques[indexs] &&
  1012. (item.ques[indexs].text || item.ques[indexs].imageList.length)
  1013. ) {
  1014. console.log("chil");
  1015. return true;
  1016. } else {
  1017. return false;
  1018. }
  1019. }
  1020. });
  1021. if (isOver) {
  1022. return true;
  1023. } else {
  1024. return false;
  1025. }
  1026. } else if (item.type == 5) {
  1027. //简答题
  1028. //每一项都相等
  1029. if (item.ques && (item.ques.imageList.length || item.ques.text)) {
  1030. return true;
  1031. }
  1032. //判断
  1033. } else {
  1034. return false;
  1035. }
  1036. } else {
  1037. return false;
  1038. }
  1039. },
  1040. },
  1041. };
  1042. </script>
  1043. <!-- Add "scoped" attribute to limit CSS to this component only -->
  1044. <style scoped lang="scss">
  1045. .bank-explain {
  1046. .section {
  1047. overflow: hidden;
  1048. &__header {
  1049. height: 20px;
  1050. margin-top: 20px;
  1051. }
  1052. &__body {
  1053. .explain-record {
  1054. &__header {
  1055. }
  1056. &__body {
  1057. .left-box {
  1058. float: left;
  1059. width: 810px;
  1060. border-right: 1px solid #eee;
  1061. &__header {
  1062. height: 40px;
  1063. padding-left: 12px;
  1064. border-bottom: 1px solid #eeeeee;
  1065. display: flex;
  1066. align-items: center;
  1067. .progress {
  1068. width: 636px;
  1069. }
  1070. .text {
  1071. margin-left: 15px;
  1072. font-size: 16px;
  1073. span {
  1074. font-family: Microsoft YaHei;
  1075. font-weight: bold;
  1076. color: #3f8dfd;
  1077. line-height: 24px;
  1078. }
  1079. }
  1080. }
  1081. &__body {
  1082. height: 490px;
  1083. border-bottom: 1px solid #eee;
  1084. .question {
  1085. padding: 12px 0 0 12px;
  1086. display: flex;
  1087. flex-direction: column;
  1088. height: 100%;
  1089. &__title {
  1090. padding-left: 12px;
  1091. font-size: 16px;
  1092. font-family: Microsoft YaHei;
  1093. font-weight: bold;
  1094. color: #333333;
  1095. line-height: 24px;
  1096. }
  1097. &__desc {
  1098. padding-left: 12px;
  1099. margin-top: 20px;
  1100. font-size: 16px;
  1101. font-family: Microsoft YaHei;
  1102. font-weight: 400;
  1103. color: #666666;
  1104. line-height: 24px;
  1105. /deep/ img {
  1106. max-width: 100% !important;
  1107. max-height: 400px !important;
  1108. }
  1109. }
  1110. &__content {
  1111. flex: 1;
  1112. overflow-y: scroll;
  1113. &::-webkit-scrollbar {
  1114. width: 6px;
  1115. }
  1116. &::-webkit-scrollbar-track {
  1117. background-color: #fff;
  1118. -webkit-border-radius: 2em;
  1119. -moz-border-radius: 2em;
  1120. border-radius: 2em;
  1121. }
  1122. &::-webkit-scrollbar-thumb {
  1123. background-color: #eeeeee;
  1124. -webkit-border-radius: 2em;
  1125. -moz-border-radius: 2em;
  1126. border-radius: 2em;
  1127. }
  1128. /deep/ .el-tabs__item {
  1129. padding: 0 20px !important;
  1130. height: 40px;
  1131. line-height: 40px;
  1132. }
  1133. .question__content {
  1134. height: auto;
  1135. overflow: auto;
  1136. }
  1137. .question-list {
  1138. padding: 24px 0 0 24px;
  1139. .checkbox,
  1140. .radio {
  1141. cursor: pointer;
  1142. margin-right: 24px;
  1143. padding: 0 24px;
  1144. display: flex;
  1145. align-items: center;
  1146. margin-top: 2px;
  1147. min-height: 40px;
  1148. padding-top: 10px;
  1149. padding-bottom: 10px;
  1150. background: #f5f9ff;
  1151. border-radius: 8px;
  1152. box-sizing: border-box;
  1153. &.right {
  1154. background: #37c65b;
  1155. }
  1156. &.wrong {
  1157. background: #ff3a30;
  1158. }
  1159. }
  1160. &.textarea {
  1161. margin-right: 12px;
  1162. .upload {
  1163. margin-top: 10px;
  1164. &__imgs {
  1165. margin-right: 10px;
  1166. width: 80px;
  1167. height: 80px;
  1168. background: #ffffff;
  1169. border: 1px solid #eeeeee;
  1170. border-radius: 4px;
  1171. position: relative;
  1172. display: flex;
  1173. float: left;
  1174. align-items: center;
  1175. justify-content: center;
  1176. img {
  1177. max-width: 100%;
  1178. max-height: 100%;
  1179. }
  1180. }
  1181. &__btn {
  1182. margin-right: 10px;
  1183. width: 80px;
  1184. height: 80px;
  1185. background: #ffffff;
  1186. border: 1px solid #eeeeee;
  1187. border-radius: 4px;
  1188. position: relative;
  1189. display: flex;
  1190. float: left;
  1191. align-items: center;
  1192. justify-content: center;
  1193. flex-direction: column;
  1194. .icon {
  1195. font-size: 20px;
  1196. color: #3f8dfd;
  1197. }
  1198. p {
  1199. font-size: 12px;
  1200. font-family: Microsoft YaHei;
  1201. font-weight: 400;
  1202. color: #999999;
  1203. line-height: 24px;
  1204. }
  1205. input {
  1206. position: absolute;
  1207. left: 0;
  1208. top: 0;
  1209. display: block;
  1210. width: 100%;
  1211. height: 100%;
  1212. opacity: 0;
  1213. }
  1214. }
  1215. }
  1216. }
  1217. /deep/ .el-checkbox {
  1218. white-space: pre-wrap;
  1219. }
  1220. }
  1221. .answer-list {
  1222. height: 40px;
  1223. border-top: 1px solid #eee;
  1224. border-bottom: 1px solid #eee;
  1225. margin-top: 24px;
  1226. display: flex;
  1227. align-items: center;
  1228. justify-content: space-between;
  1229. padding: 0 24px;
  1230. &__left {
  1231. font-size: 16px;
  1232. font-family: Microsoft YaHei;
  1233. font-weight: 400;
  1234. color: #333333;
  1235. line-height: 24px;
  1236. }
  1237. &__right {
  1238. font-size: 16px;
  1239. font-family: Microsoft YaHei;
  1240. font-weight: 400;
  1241. color: #333333;
  1242. line-height: 24px;
  1243. }
  1244. }
  1245. .explain-list {
  1246. padding: 12px 24px;
  1247. &__header {
  1248. font-size: 16px;
  1249. font-family: Microsoft YaHei;
  1250. font-weight: bold;
  1251. color: #666666;
  1252. line-height: 24px;
  1253. }
  1254. &__body {
  1255. margin-top: 12px;
  1256. font-size: 16px;
  1257. font-family: Microsoft YaHei;
  1258. font-weight: 400;
  1259. color: #666666;
  1260. line-height: 24px;
  1261. }
  1262. .upload {
  1263. margin-top: 10px;
  1264. &__imgs {
  1265. margin-right: 10px;
  1266. width: 80px;
  1267. height: 80px;
  1268. background: #ffffff;
  1269. border: 1px solid #eeeeee;
  1270. border-radius: 4px;
  1271. position: relative;
  1272. display: flex;
  1273. float: left;
  1274. align-items: center;
  1275. justify-content: center;
  1276. img {
  1277. max-width: 100%;
  1278. max-height: 100%;
  1279. }
  1280. }
  1281. }
  1282. }
  1283. }
  1284. &__btns {
  1285. position: relative;
  1286. height: 32px;
  1287. .submit {
  1288. cursor: pointer;
  1289. margin: 0 auto;
  1290. width: 140px;
  1291. height: 32px;
  1292. background: #3f8dfd;
  1293. box-shadow: 0px 0px 6px 0px rgba(0, 0, 0, 0.2);
  1294. border-radius: 16px;
  1295. text-align: center;
  1296. line-height: 32px;
  1297. color: #fff;
  1298. font-size: 16px;
  1299. }
  1300. .collect {
  1301. cursor: pointer;
  1302. position: absolute;
  1303. right: 0;
  1304. top: 5px;
  1305. font-size: 12px;
  1306. font-family: Microsoft YaHei;
  1307. font-weight: 400;
  1308. color: #3f8dfd;
  1309. line-height: 24px;
  1310. }
  1311. }
  1312. }
  1313. }
  1314. &__footer {
  1315. height: 40px;
  1316. display: flex;
  1317. justify-content: space-around;
  1318. align-items: center;
  1319. .btn {
  1320. cursor: pointer;
  1321. width: 140px;
  1322. height: 32px;
  1323. background: #ffffff;
  1324. border: 1px solid #3f8dfd;
  1325. border-radius: 16px;
  1326. line-height: 32px;
  1327. text-align: center;
  1328. color: #3f8dfd;
  1329. }
  1330. }
  1331. }
  1332. .right-box {
  1333. float: right;
  1334. width: 300px;
  1335. &__header {
  1336. height: 40px;
  1337. line-height: 40px;
  1338. font-size: 16px;
  1339. font-family: Microsoft YaHei;
  1340. font-weight: bold;
  1341. color: #333333;
  1342. text-align: center;
  1343. border-bottom: 1px solid #eeeeee;
  1344. }
  1345. &__body {
  1346. height: 490px;
  1347. border-bottom: 1px solid #eee;
  1348. .card {
  1349. &__note {
  1350. display: flex;
  1351. height: 40px;
  1352. align-items: center;
  1353. border-bottom: 1px solid #eee;
  1354. .item {
  1355. display: flex;
  1356. align-items: center;
  1357. margin-left: 10px;
  1358. .box {
  1359. margin-right: 5px;
  1360. width: 16px;
  1361. height: 16px;
  1362. border-radius: 4px;
  1363. &.white {
  1364. background: #ffffff;
  1365. border: 1px solid #eeeeee;
  1366. }
  1367. &.green {
  1368. background: #37c65b;
  1369. }
  1370. &.red {
  1371. background: #ff3a30;
  1372. }
  1373. &.blue {
  1374. background: #3f8dfd;
  1375. }
  1376. }
  1377. }
  1378. }
  1379. &__content {
  1380. height: 440px;
  1381. overflow-y: scroll;
  1382. &::-webkit-scrollbar {
  1383. width: 6px;
  1384. }
  1385. &::-webkit-scrollbar-track {
  1386. background-color: #fff;
  1387. -webkit-border-radius: 2em;
  1388. -moz-border-radius: 2em;
  1389. border-radius: 2em;
  1390. }
  1391. &::-webkit-scrollbar-thumb {
  1392. background-color: #eeeeee;
  1393. -webkit-border-radius: 2em;
  1394. -moz-border-radius: 2em;
  1395. border-radius: 2em;
  1396. }
  1397. .list {
  1398. display: flex;
  1399. flex-wrap: wrap;
  1400. .item {
  1401. width: 40px;
  1402. height: 40px;
  1403. border-radius: 10px;
  1404. text-align: center;
  1405. line-height: 40px;
  1406. margin-left: 16px;
  1407. margin-top: 16px;
  1408. cursor: pointer;
  1409. &.white {
  1410. line-height: 38px;
  1411. color: #333333;
  1412. background: #ffffff;
  1413. border: 1px solid #eeeeee;
  1414. }
  1415. &.green {
  1416. color: #fff;
  1417. background: #37c65b;
  1418. }
  1419. &.red {
  1420. color: #fff;
  1421. background: #ff3a30;
  1422. }
  1423. &.blue {
  1424. border: 1rpx solid #eeeeee;
  1425. color: #fff;
  1426. background: #3f8dfd;
  1427. }
  1428. &.disabled {
  1429. cursor: not-allowed;
  1430. line-height: 38px;
  1431. color: #eeeeee;
  1432. background: #ffffff;
  1433. border: 1px solid #eeeeee;
  1434. }
  1435. }
  1436. }
  1437. }
  1438. }
  1439. }
  1440. &__footer {
  1441. height: 40px;
  1442. display: flex;
  1443. align-items: center;
  1444. justify-content: center;
  1445. .submit {
  1446. cursor: pointer;
  1447. width: 140px;
  1448. height: 32px;
  1449. background: #3f8dfd;
  1450. box-shadow: 0px 0px 6px 0px rgba(0, 0, 0, 0.2);
  1451. border-radius: 16px;
  1452. line-height: 32px;
  1453. text-align: center;
  1454. color: #fff;
  1455. font-size: 16px;
  1456. }
  1457. }
  1458. }
  1459. }
  1460. }
  1461. }
  1462. }
  1463. }
  1464. </style>