index.vue 61 KB

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