PreviewDialogueNPC.vue 52 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588
  1. <!-- -->
  2. <template>
  3. <div
  4. v-if="cur"
  5. class="NPC-Big-Book-preview adult-book-preview-sty"
  6. :class="['NPC-Big-Book-preview-' + themeColor]"
  7. >
  8. <div
  9. v-if="
  10. cur.classTopic && cur.classTopic.length > 0 && cur.classTopic[0].con
  11. "
  12. class="classTopic-box"
  13. >
  14. <span
  15. v-for="(item, index) in cur.classTopic"
  16. :key="index"
  17. :class="item.font"
  18. >
  19. {{ item.con }}
  20. </span>
  21. </div>
  22. <div v-if="cur" class="NNPE-Book-content-inner">
  23. <template v-for="(item, index) in cur.cur_fn_data">
  24. <div
  25. v-if="item.showPreview"
  26. :key="index"
  27. class="title-box-preview"
  28. :class="[
  29. !previewType ||
  30. previewType == 'previewCheck' ||
  31. (previewType == 'previewCheckShow' && item.previewShow) ||
  32. JSON.parse(previewGroupId).length == 0
  33. ? 'NNPE-Book-content-item'
  34. : '',
  35. ]"
  36. >
  37. <div v-for="(itemJ, indexJ) in judgeAnswersList" :key="indexJ">
  38. <el-checkbox
  39. class="NNPE-Book-content-item-checkbox"
  40. :label="item.group_id"
  41. v-if="
  42. previewType && previewType == 'previewCheck' && item.group_id
  43. "
  44. v-model="groupCheckList[index]"
  45. @change="forupdata(index)"
  46. ><br
  47. /></el-checkbox>
  48. <template
  49. v-if="
  50. !previewType ||
  51. previewType == 'previewCheck' ||
  52. (previewType == 'previewCheckShow' && item.previewShow) ||
  53. JSON.parse(previewGroupId).length == 0
  54. "
  55. >
  56. <template v-if="itemJ != 'standardAnswer'">
  57. <div
  58. v-if="item.number || item.z_title || item.f_title"
  59. class="title-big"
  60. >
  61. <b v-if="item.number">{{ item.number }}</b>
  62. <div
  63. class="title-box-right"
  64. :class="[item.is_textIndex ? 'title-box-right-index' : '']"
  65. >
  66. <h2 v-if="item.z_title" v-html="item.z_title" />
  67. <h3
  68. v-if="item.f_title"
  69. :style="{ marginTop: item.z_title ? '8px' : '0' }"
  70. v-html="item.f_title"
  71. />
  72. </div>
  73. </div>
  74. <div
  75. class="title-little"
  76. :class="[
  77. item.little_title_number || item.little_title
  78. ? 'marginTop'
  79. : '',
  80. ]"
  81. >
  82. <b v-html="item.little_title_number" />
  83. <p v-html="item.little_title" />
  84. </div>
  85. </template>
  86. <div
  87. :class="[
  88. 'NNPE-tableList',
  89. item.is_bg ? 'NNPE-tableList-hasBg' : '',
  90. ]"
  91. >
  92. <h6
  93. v-if="itemJ == 'userAnswer' || itemJ == 'studentAnswer'"
  94. class="standardTitle"
  95. >
  96. {{
  97. itemJ == "userAnswer" ? "Your answer" : "Student answers"
  98. }}
  99. </h6>
  100. <h6
  101. v-if="itemJ == 'standardAnswer' && item.ShowstandardAnswer"
  102. class="standardTitle"
  103. >
  104. Standard answer
  105. </h6>
  106. <div
  107. v-for="(items, indexs) in item.table_list"
  108. :key="indexs"
  109. class="NNPE-tableList-tr"
  110. :class="[
  111. indexs === item.table_list.length - 1
  112. ? 'NNPE-tableList-tr-last'
  113. : '',
  114. ]"
  115. >
  116. <div
  117. v-for="(itemss, indexss) in items"
  118. :key="indexss"
  119. :class="[
  120. 'NNPE-tableList-item',
  121. items.length == 1
  122. ? 'NNPE-tableList-item-noMargin'
  123. : 'NNPE-tableList-item' + items.length,
  124. ]"
  125. >
  126. <template v-if="itemss.data">
  127. <template v-if="itemss.type == 'ligature_chs'">
  128. <Ligature
  129. :cur-que="itemss.data"
  130. :theme-color="themeColor"
  131. :task-model="TaskModel"
  132. :number="
  133. index +
  134. '_' +
  135. indexs +
  136. '_' +
  137. indexss +
  138. '_' +
  139. currentTreeID
  140. "
  141. :judgeAnswer="itemJ"
  142. />
  143. </template>
  144. <template v-if="itemss.data.type == 'image'">
  145. <Picture
  146. v-if="refresh"
  147. :cur-que="itemss.data"
  148. :child-type="itemss.type"
  149. :theme-color="themeColor"
  150. :task-model="TaskModel"
  151. :judgeAnswer="itemJ"
  152. />
  153. </template>
  154. <template
  155. v-if="
  156. itemss.type == 'phrase_chs' &&
  157. itemJ != 'standardAnswer'
  158. "
  159. >
  160. <WordPhrase
  161. v-if="refresh"
  162. :cur-que="itemss.data"
  163. :theme-color="themeColor"
  164. :task-model="TaskModel"
  165. :indexStr="
  166. index +
  167. '_' +
  168. indexs +
  169. '_' +
  170. indexss +
  171. '_' +
  172. currentTreeID
  173. "
  174. :judgeAnswer="itemJ"
  175. />
  176. </template>
  177. <template
  178. v-if="
  179. itemss.type == 'NewWord_chs' &&
  180. itemJ != 'standardAnswer'
  181. "
  182. >
  183. <WordPhrase
  184. v-if="refresh"
  185. :cur-que="itemss.data"
  186. :theme-color="themeColor"
  187. :current-tree-i-d="currentTreeID"
  188. :indexs="indexs"
  189. :indexss="indexss"
  190. :task-model="TaskModel"
  191. :indexStr="
  192. index +
  193. '_' +
  194. indexs +
  195. '_' +
  196. indexss +
  197. '_' +
  198. currentTreeID
  199. "
  200. :judgeAnswer="itemJ"
  201. />
  202. </template>
  203. <template
  204. v-if="
  205. itemss.type == 'annotation_chs' &&
  206. itemJ != 'standardAnswer'
  207. "
  208. >
  209. <WordPhrase
  210. v-if="refresh"
  211. :cur-que="itemss.data"
  212. :theme-color="themeColor"
  213. :task-model="TaskModel"
  214. :indexStr="
  215. index +
  216. '_' +
  217. indexs +
  218. '_' +
  219. indexss +
  220. '_' +
  221. currentTreeID
  222. "
  223. :judgeAnswer="itemJ"
  224. />
  225. </template>
  226. <template
  227. v-if="
  228. itemss.type == 'notes_chs' &&
  229. itemJ != 'standardAnswer'
  230. "
  231. >
  232. <Notes
  233. v-if="refresh"
  234. :cur-que="itemss.data"
  235. :theme-color="themeColor"
  236. :task-model="TaskModel"
  237. :judgeAnswer="itemJ"
  238. />
  239. </template>
  240. <template
  241. v-if="
  242. itemss.type == 'article_chs' &&
  243. itemJ != 'standardAnswer'
  244. "
  245. >
  246. <ArticleTemChs
  247. v-if="refresh"
  248. :cur-que="itemss.data"
  249. :n-n-p-e-new-word-list="NNPENewWordList"
  250. :n-n-p-e-new-phrase-list="NNPENewPhraseList"
  251. :n-n-p-e-annotation-list="NNPEAnnotationList"
  252. :theme-color="themeColor"
  253. :current-tree-i-d="currentTreeID"
  254. :task-model="TaskModel"
  255. :judgeAnswer="itemJ"
  256. />
  257. </template>
  258. <!-- <template v-if="itemss.type == 'sentence_segword_chs'">
  259. <SentenceSegWordViewChs
  260. :cur-que="itemss.data"
  261. :theme-color="themeColor"
  262. v-if="refresh"
  263. />
  264. </template> -->
  265. <template
  266. v-if="
  267. itemss.type == 'dialogue_article_chs' &&
  268. itemJ != 'standardAnswer'
  269. "
  270. >
  271. <DialogueArticleViewChs
  272. v-if="refresh"
  273. :cur-que="itemss.data"
  274. :n-n-p-e-new-word-list="NNPENewWordList"
  275. :n-n-p-e-new-phrase-list="NNPENewPhraseList"
  276. :n-n-p-e-annotation-list="NNPEAnnotationList"
  277. :color-box="colorBox"
  278. :theme-color="themeColor"
  279. :current-tree-i-d="currentTreeID"
  280. :task-model="TaskModel"
  281. :judgeAnswer="itemJ"
  282. />
  283. </template>
  284. <template v-if="itemss.type == 'dialogue_answer_chs'">
  285. <DialogueAnswerViewChs
  286. v-if="refresh"
  287. :cur-que="itemss.data"
  288. :color-box="colorBox"
  289. :theme-color="themeColor"
  290. :task-model="TaskModel"
  291. :judgeAnswer="itemJ"
  292. />
  293. </template>
  294. <template v-if="itemss.type == 'input_record_chs'">
  295. <InputHasRecord
  296. v-if="refresh"
  297. :cur-que="itemss.data"
  298. :theme-color="themeColor"
  299. :task-model="TaskModel"
  300. :judgeAnswer="itemJ"
  301. />
  302. </template>
  303. <template v-if="itemss.type == 'recordHZ_inputPY_chs'">
  304. <TextInputRecord
  305. v-if="refresh"
  306. :cur-que="itemss.data"
  307. :theme-color="themeColor"
  308. :task-model="TaskModel"
  309. :judgeAnswer="itemJ"
  310. />
  311. </template>
  312. <template
  313. v-if="
  314. itemss.type == 'inputItem_chs' ||
  315. itemss.type == 'sentence_input_chs' ||
  316. itemss.type == 'sentence_judge_chs' ||
  317. itemss.type == 'sentence_record_chs' ||
  318. itemss.type == 'sentence_input_record_chs'
  319. "
  320. >
  321. <SentenceInput
  322. v-if="refresh"
  323. :cur-que="itemss.data"
  324. :theme-color="themeColor"
  325. :task-model="TaskModel"
  326. :judgeAnswer="itemJ"
  327. />
  328. </template>
  329. <template v-if="itemss.type == 'NumberCombination_chs'">
  330. <NumberSelectHasRecord
  331. v-if="refresh"
  332. :cur-que="itemss.data"
  333. :theme-color="themeColor"
  334. :task-model="TaskModel"
  335. :judgeAnswer="itemJ"
  336. />
  337. </template>
  338. <template
  339. v-if="
  340. itemss.type === 'voice_matrix' &&
  341. itemJ != 'standardAnswer'
  342. "
  343. >
  344. <voice-matrix
  345. v-if="refresh"
  346. :cur-que="itemss.data"
  347. :theme-color="themeColor"
  348. :task-model="TaskModel"
  349. :judgeAnswer="itemJ"
  350. />
  351. </template>
  352. <template v-if="itemss.type === 'select_drag'">
  353. <select-drag
  354. v-if="refresh"
  355. :cur-que="itemss.data"
  356. :theme-color="themeColor"
  357. :task-model="TaskModel"
  358. :judgeAnswer="itemJ"
  359. />
  360. </template>
  361. <template v-if="itemss.type === 'fill_drag'">
  362. <fill-drag
  363. v-if="refresh"
  364. :cur-que="itemss.data"
  365. :theme-color="themeColor"
  366. :task-model="TaskModel"
  367. :judgeAnswer="itemJ"
  368. />
  369. </template>
  370. <template v-if="itemss.type === 'config_table'">
  371. <configurable-table
  372. v-if="refresh"
  373. :cur-que="itemss.data"
  374. :theme-color="themeColor"
  375. :task-model="TaskModel"
  376. :judgeAnswer="itemJ"
  377. />
  378. </template>
  379. <template v-if="itemss.type === 'header_separate'">
  380. <header-separate
  381. v-if="refresh"
  382. :cur-que="itemss.data"
  383. :theme-color="themeColor"
  384. :task-model="TaskModel"
  385. :judgeAnswer="itemJ"
  386. />
  387. </template>
  388. <template v-if="itemss.type == 'toneSelect_chs'">
  389. <SelectTone
  390. v-if="refresh"
  391. :cur-que="itemss.data"
  392. :theme-color="themeColor"
  393. :task-model="TaskModel"
  394. :judgeAnswer="itemJ"
  395. />
  396. </template>
  397. <template v-if="itemss.type == 'sudoku_chs'">
  398. <Soduko
  399. v-if="refresh"
  400. :cur-que="itemss.data"
  401. :theme-color="themeColor"
  402. :task-model="TaskModel"
  403. :judgeAnswer="itemJ"
  404. />
  405. </template>
  406. <template v-if="itemss.type == 'single_chs'">
  407. <Single
  408. v-if="refresh"
  409. :cur-que="itemss.data"
  410. :theme-color="themeColor"
  411. :task-model="TaskModel"
  412. :judgeAnswer="itemJ"
  413. />
  414. </template>
  415. <template v-if="itemss.type == 'text_problem_chs'">
  416. <TextProblem
  417. v-if="refresh"
  418. :cur-que="itemss.data"
  419. :theme-color="themeColor"
  420. :task-model="TaskModel"
  421. :judgeAnswer="itemJ"
  422. />
  423. </template>
  424. <template
  425. v-if="
  426. itemss.type == 'newWord_preview_chs' &&
  427. itemJ != 'standardAnswer'
  428. "
  429. >
  430. <NewWordShow
  431. v-if="refresh"
  432. :cur-que="itemss.data"
  433. :theme-color="themeColor"
  434. :index-str="index + '_' + indexs + '_' + indexss"
  435. :task-model="TaskModel"
  436. :judgeAnswer="itemJ"
  437. />
  438. </template>
  439. <template
  440. v-if="
  441. itemss.type == 'listen_record_single_syllable_chs'
  442. "
  443. >
  444. <SelectYinjie
  445. v-if="refresh"
  446. :cur-que="itemss.data"
  447. :theme-color="themeColor"
  448. :task-model="TaskModel"
  449. :judgeAnswer="itemJ"
  450. />
  451. </template>
  452. <template
  453. v-if="itemss.type == 'sentence_listen_read_chs'"
  454. >
  455. <SentenceListenRead
  456. v-if="refresh"
  457. :cur-que="itemss.data"
  458. :theme-color="themeColor"
  459. :task-model="TaskModel"
  460. :judgeAnswer="itemJ"
  461. />
  462. </template>
  463. <template v-if="itemss.type == 'sort_chs'">
  464. <SentenceSortQP
  465. v-if="refresh"
  466. :cur-que="itemss.data"
  467. :theme-color="themeColor"
  468. :task-model="TaskModel"
  469. :judgeAnswer="itemJ"
  470. />
  471. </template>
  472. <template
  473. v-if="itemss.type == 'checkbox_self_assessment_chs'"
  474. >
  475. <Checkbox
  476. v-if="refresh"
  477. :cur-que="itemss.data"
  478. :theme-color="themeColor"
  479. :task-model="TaskModel"
  480. :judgeAnswer="itemJ"
  481. />
  482. </template>
  483. <template
  484. v-if="
  485. (itemss.type == 'record_control_mini' ||
  486. itemss.type == 'record_control_normal' ||
  487. itemss.type == 'record_control_pro' ||
  488. itemss.type == 'record_control_promax') &&
  489. itemJ != 'standardAnswer'
  490. "
  491. >
  492. <RecordModule
  493. v-if="refresh"
  494. :cur-que="itemss.data"
  495. :theme-color="themeColor"
  496. :task-model="TaskModel"
  497. :judgeAnswer="itemJ"
  498. />
  499. </template>
  500. <template
  501. v-if="
  502. (itemss.type == 'upload_control_chs' ||
  503. itemss.type == 'upload_control_preview_chs') &&
  504. itemJ != 'standardAnswer'
  505. "
  506. >
  507. <UploadControlView
  508. v-if="refresh"
  509. :cur-que="itemss.data"
  510. :type="itemss.type"
  511. :theme-color="themeColor"
  512. :task-model="TaskModel"
  513. :judgeAnswer="itemJ"
  514. />
  515. </template>
  516. <template
  517. v-if="
  518. itemss.type == 'CourseStart_chs' &&
  519. itemJ != 'standardAnswer'
  520. "
  521. >
  522. <CourseStart
  523. v-if="refresh"
  524. :cur-que="itemss.data"
  525. :handle-n-n-p-enext="handleNNPEnext"
  526. :theme-color="themeColor"
  527. :task-model="TaskModel"
  528. :judgeAnswer="itemJ"
  529. />
  530. </template>
  531. <template
  532. v-if="
  533. itemss.type == 'tinydemo_chs' &&
  534. itemJ != 'standardAnswer'
  535. "
  536. >
  537. <Tinydemo
  538. v-if="refresh"
  539. :cur-que="itemss.data"
  540. :theme-color="themeColor"
  541. :task-model="TaskModel"
  542. :judgeAnswer="itemJ"
  543. />
  544. </template>
  545. <template
  546. v-if="
  547. itemss.type == 'video_chs' &&
  548. itemJ != 'standardAnswer'
  549. "
  550. >
  551. <VideoControl
  552. v-if="refresh"
  553. :cur-que="itemss.data"
  554. :type="itemss.type"
  555. :theme-color="themeColor"
  556. :index-str="
  557. index +
  558. '_' +
  559. indexs +
  560. '_' +
  561. indexss +
  562. '_' +
  563. currentTreeID
  564. "
  565. :task-model="TaskModel"
  566. :judgeAnswer="itemJ"
  567. />
  568. </template>
  569. <template v-if="itemss.type == 'table_chs'">
  570. <TableView
  571. v-if="refresh"
  572. :cur-que="itemss.data"
  573. :type="itemss.type"
  574. :theme-color="themeColor"
  575. :task-model="TaskModel"
  576. :judgeAnswer="itemJ"
  577. />
  578. </template>
  579. <template
  580. v-if="
  581. itemss.type == 'play_record_chs' &&
  582. itemJ != 'standardAnswer'
  583. "
  584. >
  585. <PlayRecordView
  586. v-if="refresh"
  587. :cur-que="itemss.data"
  588. :type="itemss.type"
  589. :theme-color="themeColor"
  590. :task-model="TaskModel"
  591. :judgeAnswer="itemJ"
  592. />
  593. </template>
  594. <template
  595. v-if="
  596. itemss.type == 'upload_pdf_chs' &&
  597. itemJ != 'standardAnswer'
  598. "
  599. >
  600. <PdfView
  601. v-if="refresh"
  602. :cur-que="itemss.data"
  603. :type="itemss.type"
  604. :theme-color="themeColor"
  605. :task-model="TaskModel"
  606. :judgeAnswer="itemJ"
  607. />
  608. </template>
  609. <template v-if="itemss.type == 'sentence_segtemp_chs'">
  610. <SentenceModule
  611. v-if="refresh"
  612. :cur-que="itemss.data"
  613. :type="itemss.type"
  614. :theme-color="themeColor"
  615. :task-model="TaskModel"
  616. :judgeAnswer="itemJ"
  617. />
  618. </template>
  619. <template
  620. v-if="
  621. itemss.type == 'options_list_chs' &&
  622. itemJ != 'standardAnswer'
  623. "
  624. >
  625. <OptionsList
  626. v-if="refresh"
  627. :cur-que="itemss.data"
  628. :theme-color="themeColor"
  629. :index-str="index + '_' + indexs + '_' + indexss"
  630. :task-model="TaskModel"
  631. :judgeAnswer="itemJ"
  632. />
  633. </template>
  634. </template>
  635. </div>
  636. </div>
  637. </div>
  638. </template>
  639. </div>
  640. </div>
  641. </template>
  642. </div>
  643. <div v-if="isShowSave || isShowTitle" class="NNPE-title NNPE-title-gray">
  644. <!-- 页眉 v-if="isShowSave"-->
  645. <a class="submitAnswer" @click="submitUserAnswerNPC">提交</a>
  646. <div v-if="isShowTitle" class="NNPE-operate">
  647. <a
  648. class="btn-prev"
  649. :class="[preClick ? '' : 'btn-prev-disabled']"
  650. @click="handleNNPEprev"
  651. />
  652. <a
  653. class="btn-next"
  654. :class="[nextClick ? '' : 'btn-next-disabled']"
  655. @click="handleNNPEnext"
  656. />
  657. </div>
  658. </div>
  659. </div>
  660. </template>
  661. <script>
  662. import Picture from "./Picture.vue"; // 图片模板
  663. import Record from "./Record.vue"; // 音频播放
  664. import Soundrecord from "./Soundrecord.vue"; // 录音模板
  665. import ArticleTemChs from "./ArticleViewChs/index.vue"; // 文章模板
  666. import DialogueArticleViewChs from "./DialogueArticleViewChs/index.vue"; // 文章模板
  667. import SentenceSegWordViewChs from "./SentenceSegWordViewChs.vue"; // 句子分词
  668. import WordPhrase from "./WordPhrase.vue"; // 生词短语
  669. import Notes from "./Notes.vue"; // 注释
  670. import Ligature from "./Ligature.vue";
  671. import InputHasRecord from "./InputHasRecord.vue"; // 输入加录音
  672. import TextInputRecord from "./TextInputRecord.vue"; // 文本+输入+录音
  673. import SentenceInput from "./SentenceInput.vue"; // 输入选项
  674. import NumberSelectHasRecord from "./NumberSelectHasRecord.vue"; // 数字组合
  675. import SelectTone from "./SelectTone.vue"; // 选择声调
  676. import Soduko from "./Soduko.vue"; // 数独
  677. import Single from "./Single.vue"; // 单选
  678. import TextProblem from "./TextProblem.vue"; // 课文上方的问题
  679. import NewWordShow from "./NewWordShow.vue"; // 生字展示
  680. import SelectYinjie from "./SelectYinjie.vue"; // 选择音节
  681. import SentenceListenRead from "./SentenceListenRead.vue"; // 听并朗读
  682. import SentenceSortQP from "./SentenceSortQP.vue"; // 句子拖拽排序
  683. import Checkbox from "./CheckBoxModule.vue"; // 问卷调查-多选题
  684. import VoiceMatrix from "./VoiceMatrix.vue"; // 语音矩阵
  685. import SelectDrag from "./SelectDrag.vue"; // 选择 -> 拖拽
  686. import FillDrag from "./FillDrag.vue"; // 填空 -> 拖拽
  687. import ConfigurableTable from "./ConfigurableTable.vue"; // 可配置表格
  688. import HeaderSeparate from "./HeaderSparate/index.vue"; // 表头分离表格
  689. import RecordModule from "./RecordModule.vue"; // 录音组件
  690. import UploadControlView from "./UploadControlView.vue"; // 预览控件
  691. import DialogueAnswerViewChs from "./DialogueArticleViewChs/DialogueAnswerViewChs.vue"; // 文章模板
  692. import CourseStart from "./CourseStart.vue"; // 封面
  693. import Tinydemo from "./TinyModule.vue"; // 富文本
  694. import VideoControl from "./VideoControl.vue"; // 视频控件
  695. import TableView from "./TableView.vue"; // 视频控件
  696. import PdfView from "./PdfView.vue"; // 视频控件
  697. import SentenceModule from "./SentenceModule.vue"; // 图片模板
  698. import PlayRecordView from "./PlayRecordView.vue";
  699. import OptionsList from "./OptionsList.vue"; // 选项模板
  700. import { getToken } from "../../../utils/auth";
  701. export default {
  702. name: "PreviewDialogueNPC",
  703. components: {
  704. Picture,
  705. Record,
  706. Soundrecord,
  707. ArticleTemChs,
  708. DialogueArticleViewChs,
  709. SentenceSegWordViewChs,
  710. WordPhrase,
  711. Notes,
  712. Ligature,
  713. InputHasRecord,
  714. TextInputRecord,
  715. SentenceInput,
  716. NumberSelectHasRecord,
  717. SelectTone,
  718. Soduko,
  719. Single,
  720. TextProblem,
  721. NewWordShow,
  722. SelectYinjie,
  723. SentenceListenRead,
  724. SentenceSortQP,
  725. Checkbox,
  726. VoiceMatrix,
  727. FillDrag,
  728. SelectDrag,
  729. ConfigurableTable,
  730. HeaderSeparate,
  731. RecordModule,
  732. UploadControlView,
  733. DialogueAnswerViewChs,
  734. CourseStart,
  735. Tinydemo,
  736. VideoControl,
  737. TableView,
  738. PdfView,
  739. PlayRecordView,
  740. SentenceModule,
  741. OptionsList,
  742. },
  743. props: [
  744. "context",
  745. "fatherName",
  746. "currentTreeID",
  747. "FatherTreeData",
  748. "changeId",
  749. "themeColor",
  750. "isShowTitle",
  751. "bookAnswerContent",
  752. "TaskModel",
  753. "isShowSave",
  754. "previewType",
  755. "previewGroupId",
  756. ],
  757. data() {
  758. return {
  759. contextData: null,
  760. answerData: [], // 获取的答案数据
  761. queIndex: -1, // 题目的索引
  762. cur: null, // 当前的题目
  763. watchIndex: -1, // 监听的值
  764. queList: [],
  765. queTotal: 0, // 题目总数
  766. NNPENewWordList: [], // 存放文章的生词
  767. NNPENewPhraseList: [], // 存放文章的短语
  768. NNPEAnnotationList: [], // 存放文章注释
  769. height: "", // 总体的高度
  770. colorBox: [
  771. {
  772. touxiang: "#72B51D",
  773. bg: "#E9F0DF",
  774. },
  775. {
  776. touxiang: "#DE4444",
  777. bg: "rgba(222, 68, 68, 0.1)",
  778. },
  779. {
  780. touxiang: "#A7A7A7",
  781. bg: "#ffffff",
  782. },
  783. {
  784. touxiang: "#4D91F6",
  785. bg: "#F1F7FF",
  786. },
  787. {
  788. touxiang: "#FF8A00",
  789. bg: "rgba(255, 138, 0, 0.1)",
  790. },
  791. ],
  792. chsFhList: [",", "。", "“", ":", "》", "《", "?", "!", ";"],
  793. noFont: ["~", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")"], // 对应不要拼音字体
  794. idArr: [], // 当前的pid
  795. oldCurrentTreeID: "",
  796. refresh: true,
  797. preClick: false, // 上一页是否可点
  798. nextClick: false, // 下一页是否可点
  799. answerTime: 0,
  800. answerTimeInterval: null, // 计时器
  801. groupIndexList: [], // 勾选groupid数组
  802. groupCheckList: [], // checkbox 是否选中
  803. judgeAnswersList: ["userAnswer", "standardAnswer"],
  804. visiblePreviewDialog: false,
  805. };
  806. },
  807. computed: {},
  808. watch: {
  809. context: {
  810. handler(val, oldVal) {
  811. const _this = this;
  812. _this.refresh = false;
  813. if (val) {
  814. _this.initContextData();
  815. if (_this.FatherTreeData) {
  816. _this.idArr = [];
  817. _this.FatherTreeData.forEach((item, itemIndex) => {
  818. this.seekCurrentTree(item);
  819. });
  820. }
  821. _this.handleTitleData();
  822. if (_this.queIndex == _this.queTotal - 1) {
  823. this.idArr.forEach((item, i) => {
  824. if (item == _this.currentTreeID) {
  825. if (i == 0) {
  826. _this.preClick = false;
  827. _this.nextClick = true;
  828. } else if (i == this.idArr.length - 1) {
  829. _this.nextClick = false;
  830. _this.preClick = true;
  831. } else {
  832. _this.nextClick = true;
  833. _this.preClick = true;
  834. }
  835. }
  836. });
  837. }
  838. _this.$nextTick(() => {
  839. // 重新渲染组件
  840. _this.refresh = true;
  841. });
  842. }
  843. },
  844. // 深度观察监听
  845. deep: true,
  846. },
  847. },
  848. // 生命周期 - 创建完成(可以访问当前this实例)
  849. created() {},
  850. // 生命周期 - 挂载完成(可以访问DOM元素)
  851. mounted() {
  852. const _this = this;
  853. if (_this.context) {
  854. _this.initContextData();
  855. _this.handleTitleData();
  856. }
  857. if (_this.FatherTreeData) {
  858. _this.idArr = [];
  859. _this.FatherTreeData.forEach((item, itemIndex) => {
  860. this.seekCurrentTree(item);
  861. });
  862. if (_this.queIndex == _this.queTotal - 1) {
  863. this.idArr.forEach((item, i) => {
  864. if (item == _this.currentTreeID) {
  865. if (i == 0) {
  866. _this.preClick = false;
  867. _this.nextClick = true;
  868. } else if (i == this.idArr.length - 1) {
  869. _this.nextClick = false;
  870. _this.preClick = true;
  871. } else {
  872. _this.nextClick = true;
  873. _this.preClick = true;
  874. }
  875. }
  876. });
  877. }
  878. }
  879. },
  880. beforeCreate() {}, // 生命周期 - 创建之前
  881. beforeMount() {}, // 生命周期 - 挂载之前
  882. beforeUpdate() {}, // 生命周期 - 更新之前
  883. updated() {}, // 生命周期 - 更新之后
  884. beforeDestroy() {}, // 生命周期 - 销毁之前
  885. destroyed() {}, // 生命周期 - 销毁完成
  886. activated() {},
  887. // 方法集合
  888. methods: {
  889. // 处理数据
  890. handleTitleData() {
  891. let _this = this;
  892. let curQue = JSON.parse(JSON.stringify(this.cur));
  893. curQue.detailList.forEach((dItem, dIndex) => {
  894. let paraArr = [];
  895. if (dItem.detail) {
  896. dItem.detail.wordsList.forEach((sItem, sIndex) => {
  897. let obj = {
  898. pinyin: sItem.pinyin,
  899. chs: sItem.chs,
  900. isShow: true,
  901. };
  902. paraArr.push(obj);
  903. });
  904. this.$set(_this.cur.detailList[dIndex].detail, "resArr", paraArr);
  905. }
  906. });
  907. },
  908. initContextData() {
  909. const _this = this;
  910. // _this.$root.isRecording = false;
  911. _this.contextData = JSON.parse(JSON.stringify(_this.context));
  912. _this.queIndex = 0;
  913. _this.NNPENewWordList = [];
  914. _this.NNPENewPhraseList = [];
  915. _this.NNPEAnnotationList = [];
  916. _this.watchIndex = _this.queIndex + new Date().getTime();
  917. this.groupCheckList = [];
  918. let selectGropuIdList = this.previewGroupId
  919. ? JSON.parse(this.previewGroupId)
  920. : [];
  921. this.groupCheckList = [];
  922. if (_this.contextData) {
  923. // const list = _this.contextData;
  924. // if (list && list.length > 0) {
  925. // _this.queList = list;
  926. // _this.cur = list[_this.queIndex];
  927. _this.queTotal = 1;
  928. // _this.cur.cur_fn_data.forEach((item) => {
  929. // item.table_list.forEach((items) => {
  930. // items.forEach((itemss) => {
  931. // if (itemss.data && itemss.data.type == "NewWord_chs") {
  932. // _this.NNPENewWordList = _this.NNPENewWordList.concat(
  933. // itemss.data.option
  934. // );
  935. // } else if (itemss.data && itemss.data.type == "notes_chs") {
  936. // _this.NNPEAnnotationList = _this.NNPEAnnotationList.concat(
  937. // itemss.data.option
  938. // );
  939. // }
  940. // });
  941. // });
  942. // });
  943. // }
  944. _this.cur = _this.contextData;
  945. _this.cur.cur_fn_data.forEach((item, index) => {
  946. this.groupCheckList.push(false);
  947. selectGropuIdList.forEach((itemId) => {
  948. itemId.forEach((itemIds) => {
  949. if (item.group_id && itemIds.indexOf(item.group_id[0]) > -1) {
  950. item.previewShow = true;
  951. }
  952. });
  953. });
  954. item.showSubmit = false;
  955. item.table_list.forEach((items, indexs) => {
  956. items.forEach((itemss, indexss) => {
  957. if (itemss.data && itemss.data.type) {
  958. if (
  959. this.previewType &&
  960. this.previewType == "previewCheckShow" &&
  961. (JSON.parse(this.previewGroupId).length == 0 ||
  962. this.previewGroupId.indexOf(item.group_id[0]) > -1)
  963. ) {
  964. item.showSubmit = true;
  965. } else if (
  966. !this.previewType ||
  967. this.previewType != "previewCheckShow"
  968. ) {
  969. item.showSubmit = true;
  970. }
  971. }
  972. if (itemss.data && itemss.data.type == "NewWord_chs") {
  973. _this.NNPENewWordList = _this.NNPENewWordList.concat(
  974. itemss.data.option
  975. );
  976. } else if (itemss.data && itemss.data.type == "notes_chs") {
  977. _this.NNPEAnnotationList = _this.NNPEAnnotationList.concat(
  978. itemss.data.option
  979. );
  980. }
  981. // let Bookanswer = localStorage.getItem("Bookanswer");
  982. let Bookanswer = this.bookAnswerContent;
  983. // if (_this.TaskModel == "lookAnswer" && _this.bookAnswerContent) {
  984. if (Bookanswer) {
  985. let answerData = JSON.parse(Bookanswer);
  986. if (answerData && itemss.data) {
  987. itemss.data.Bookanswer =
  988. answerData.length > 0 &&
  989. answerData[index].table_list &&
  990. answerData[index].table_list.length > 0 &&
  991. answerData[index].table_list[indexs].length > 0 &&
  992. answerData[index].table_list[indexs][indexss].data
  993. ? answerData[index].table_list[indexs][indexss].data
  994. .Bookanswer
  995. : [];
  996. }
  997. }
  998. });
  999. });
  1000. item.ShowstandardAnswer = JSON.stringify(item.table_list).match(
  1001. /\[JUDGE##F##JUDGE\]/g
  1002. )
  1003. ? true
  1004. : false;
  1005. });
  1006. }
  1007. this.$forceUpdate();
  1008. },
  1009. // 上一页
  1010. handleNNPEprev() {
  1011. let _this = this;
  1012. _this.puaseAudio();
  1013. if (_this.queIndex == 0) {
  1014. this.idArr.forEach((item, i) => {
  1015. if (item == _this.currentTreeID) {
  1016. if (i == 0) {
  1017. _this.preClick = false;
  1018. _this.nextClick = true;
  1019. } else {
  1020. _this.changeId(this.idArr[i - 1]);
  1021. _this.preClick = true;
  1022. _this.nextClick = true;
  1023. }
  1024. }
  1025. });
  1026. } else {
  1027. _this.queIndex -= 1;
  1028. _this.watchIndex = _this.queIndex + new Date().getTime();
  1029. _this.cur = _this.queList[_this.queIndex];
  1030. }
  1031. },
  1032. // 递归寻找相同的目录并保存目录的pid
  1033. seekCurrentTree(item) {
  1034. if (item.is_courseware == "true") {
  1035. this.idArr.push(item.id);
  1036. }
  1037. if (item.children) {
  1038. item.children.forEach((it, index) => {
  1039. if (it.is_courseware == "true") {
  1040. this.idArr.push(it.id);
  1041. }
  1042. if (it.children) {
  1043. this.seekCurrentTree(it);
  1044. }
  1045. });
  1046. }
  1047. },
  1048. puaseAudio() {
  1049. let audio = document.getElementsByTagName("audio");
  1050. if(audio&&audio.length>0&&window.location.href.indexOf('GCLS-Learn')==-1){
  1051. audio.forEach((item) => {
  1052. item.pause();
  1053. });
  1054. }
  1055. let video = document.getElementsByTagName("video");
  1056. if(video&&video.length>0&&window.location.href.indexOf('GCLS-Learn')==-1){
  1057. video.forEach((item) => {
  1058. item.pause();
  1059. });
  1060. }
  1061. },
  1062. // 下一页
  1063. handleNNPEnext() {
  1064. const _this = this;
  1065. _this.puaseAudio();
  1066. if (_this.queIndex == _this.queTotal - 1) {
  1067. this.idArr.forEach((item, i) => {
  1068. if (item == _this.currentTreeID) {
  1069. if (i == this.idArr.length - 1) {
  1070. _this.nextClick = false;
  1071. _this.preClick = true;
  1072. } else {
  1073. _this.changeId(this.idArr[i + 1]);
  1074. _this.nextClick = true;
  1075. _this.preClick = true;
  1076. }
  1077. }
  1078. });
  1079. } else {
  1080. _this.queIndex += 1;
  1081. _this.watchIndex = _this.queIndex + new Date().getTime();
  1082. _this.cur = _this.queList[_this.queIndex];
  1083. }
  1084. },
  1085. submitUserAnswerNPC() {
  1086. this.handleAnswerTimeEnd();
  1087. let contextDataStr = JSON.stringify(this.contextData);
  1088. if (!contextDataStr) {
  1089. return;
  1090. }
  1091. let userErrorNumberTotal = 0;
  1092. let userRightNumberTotal = 0;
  1093. let errReg = /\[JUDGE##F##JUDGE\]/g,
  1094. rightReg = /\[JUDGE##T##JUDGE\]/g;
  1095. if (errReg.test(contextDataStr)) {
  1096. let errorArr = contextDataStr.match(/\[JUDGE##F##JUDGE\]/g);
  1097. userErrorNumberTotal = errorArr.length;
  1098. }
  1099. if (rightReg.test(contextDataStr)) {
  1100. let rightArr = contextDataStr.match(/\[JUDGE##T##JUDGE\]/g);
  1101. userRightNumberTotal = rightArr.length;
  1102. }
  1103. let contextData = JSON.parse(contextDataStr);
  1104. let result = [];
  1105. contextData.cur_fn_data.forEach((item, index) => {
  1106. result[index] = {
  1107. table_list: [],
  1108. };
  1109. item.table_list.forEach((items, indexs) => {
  1110. result[index].table_list[indexs] = [];
  1111. items.forEach((itemss, indexss) => {
  1112. if (itemss.data) {
  1113. let Bookanswer = itemss.data.Bookanswer;
  1114. let obj = {
  1115. data: {
  1116. Bookanswer,
  1117. },
  1118. };
  1119. result[index].table_list[indexs][indexss] = obj;
  1120. } else {
  1121. result[index].table_list[indexs][indexss] = {
  1122. data: null,
  1123. };
  1124. }
  1125. });
  1126. });
  1127. });
  1128. this.$emit(
  1129. "finishTaskMaterial",
  1130. JSON.stringify(result),
  1131. this.answerTime,
  1132. userRightNumberTotal,
  1133. userErrorNumberTotal
  1134. );
  1135. },
  1136. // 开始计算答题用时
  1137. handleAnswerTimeStart() {
  1138. this.answerTime = 0;
  1139. window.clearInterval(this.answerTimeInterval);
  1140. this.answerTimeInterval = window.setInterval(() => {
  1141. this.answerTime++;
  1142. }, 1000);
  1143. },
  1144. // 结束计算答题用时
  1145. handleAnswerTimeEnd() {
  1146. window.clearInterval(this.answerTimeInterval);
  1147. },
  1148. // 提交选中groupid
  1149. submitPreviewGroupId() {
  1150. return JSON.stringify(this.groupIndexList);
  1151. },
  1152. forupdata(indexI) {
  1153. if (
  1154. this.groupIndexList
  1155. .toString()
  1156. .indexOf(this.cur.cur_fn_data[indexI].group_id.toString()) == -1
  1157. ) {
  1158. this.groupIndexList.push(this.cur.cur_fn_data[indexI].group_id);
  1159. } else {
  1160. this.groupIndexList.forEach((items, indexs) => {
  1161. if (
  1162. items.toString() == this.cur.cur_fn_data[indexI].group_id.toString()
  1163. ) {
  1164. this.groupIndexList.splice(indexs, 1);
  1165. return false;
  1166. }
  1167. });
  1168. }
  1169. this.groupCheckList.forEach((item, index) => {
  1170. this.groupCheckList[index] = false;
  1171. });
  1172. this.cur.cur_fn_data.forEach((item, index) => {
  1173. if (
  1174. this.groupIndexList.toString().indexOf(item.group_id.toString()) > -1
  1175. ) {
  1176. this.groupCheckList[index] = true;
  1177. }
  1178. });
  1179. this.$forceUpdate();
  1180. },
  1181. }, // 如果页面有keep-alive缓存功能,这个函数会触发
  1182. };
  1183. </script>
  1184. <style lang="scss" scoped>
  1185. //@import url(); 引入公共css类
  1186. .NPC-Big-Book-preview {
  1187. width: 860px;
  1188. margin: 0 auto;
  1189. position: relative;
  1190. padding-bottom: 120px;
  1191. .NNPE-title {
  1192. background: #e35454;
  1193. border-radius: 0px 0px 16px 16px;
  1194. padding: 7px 24px;
  1195. position: relative;
  1196. height: 64px;
  1197. display: flex;
  1198. align-items: center;
  1199. &.NNPE-title-gray {
  1200. background: #eeeeee;
  1201. border-radius: 0;
  1202. margin-top: 24px;
  1203. .NNPE-operate {
  1204. position: absolute;
  1205. top: 10px;
  1206. right: 20px;
  1207. a {
  1208. background: #fff
  1209. url("../../../assets/newImage/common/btn-pre-black.png") center
  1210. no-repeat;
  1211. background-size: 24px;
  1212. &.btn-next {
  1213. background: #fff
  1214. url("../../../assets/newImage/common/btn-next-black.png") center
  1215. no-repeat;
  1216. background-size: 24px;
  1217. }
  1218. &:hover {
  1219. background-color: #fff;
  1220. }
  1221. &:active {
  1222. background-color: #fff;
  1223. }
  1224. &.btn-prev-disabled,
  1225. &.btn-next-disabled {
  1226. background-color: rgba(0, 0, 0, 0.25);
  1227. }
  1228. }
  1229. }
  1230. }
  1231. h1 {
  1232. color: #ffffff;
  1233. font-weight: bold;
  1234. font-size: 16px;
  1235. line-height: 150%;
  1236. margin: 0;
  1237. }
  1238. .NNPE-title-left {
  1239. display: flex;
  1240. color: #ffffff;
  1241. font-size: 18px;
  1242. line-height: 18px;
  1243. align-items: center;
  1244. .NNPE-title-item {
  1245. margin-right: 12px;
  1246. }
  1247. .content-con {
  1248. margin: 4px 0;
  1249. font-family: "robot";
  1250. &.hasCn,
  1251. &.hanzi {
  1252. font-family: "FZJCGFKTK";
  1253. }
  1254. }
  1255. .content-en {
  1256. font-weight: normal;
  1257. line-height: 18px;
  1258. font-family: "robot";
  1259. }
  1260. .NNPE-title-item-en {
  1261. font-weight: normal;
  1262. line-height: 12px;
  1263. font-family: "robot";
  1264. font-size: 12px;
  1265. margin: 0;
  1266. }
  1267. .con-box {
  1268. display: flex;
  1269. flex-flow: wrap;
  1270. justify-content: center;
  1271. .con-item {
  1272. text-align: center;
  1273. padding: 0 1px;
  1274. }
  1275. span {
  1276. display: block;
  1277. }
  1278. .pinyin {
  1279. font-family: "GB-PINYINOK-B";
  1280. font-size: 12px;
  1281. line-height: 12px;
  1282. height: 12px;
  1283. &.noFont {
  1284. font-family: initial;
  1285. }
  1286. }
  1287. .synthesis-box {
  1288. display: flex;
  1289. }
  1290. }
  1291. }
  1292. .NNPE-operate {
  1293. position: absolute;
  1294. top: 10px;
  1295. right: 20px;
  1296. a {
  1297. background: #e35454 url("../../../assets/newImage/common/btn-pre.png")
  1298. center no-repeat;
  1299. background-size: 24px;
  1300. border-radius: 4px;
  1301. width: 44px;
  1302. height: 44px;
  1303. display: inline-block;
  1304. margin: 0 4px;
  1305. &.btn-next {
  1306. background: #e35454
  1307. url("../../../assets/newImage/common/btn-next.png") center no-repeat;
  1308. background-size: 24px;
  1309. }
  1310. &:hover {
  1311. background-color: #f76565;
  1312. }
  1313. &:active {
  1314. background-color: #d24444;
  1315. }
  1316. &.btn-prev-disabled,
  1317. &.btn-next-disabled {
  1318. background-color: rgba(0, 0, 0, 0.25);
  1319. cursor: not-allowed;
  1320. }
  1321. }
  1322. }
  1323. }
  1324. .classTopic-box {
  1325. background: #e35454;
  1326. border-radius: 8px;
  1327. width: 780px;
  1328. margin: 24px auto 0 auto;
  1329. text-align: center;
  1330. padding: 8px 24px;
  1331. span {
  1332. font-size: 16px;
  1333. line-height: 150%;
  1334. color: #ffffff;
  1335. padding: 0 1px;
  1336. &.cn {
  1337. font-family: "FZJCGFKTK";
  1338. }
  1339. &.en {
  1340. font-family: "robot";
  1341. }
  1342. &.pinyin {
  1343. font-family: "GB-PINYINOK-B";
  1344. }
  1345. }
  1346. }
  1347. .NNPE-Book-content-inner {
  1348. padding: 0 40px;
  1349. .NNPE-Book-content-item {
  1350. position: relative;
  1351. }
  1352. .NNPE-Book-content-item-checkbox {
  1353. position: absolute;
  1354. left: -30px;
  1355. top: 36px;
  1356. }
  1357. > div.title-box-preview {
  1358. padding-top: 32px;
  1359. .title-big {
  1360. display: flex;
  1361. b {
  1362. min-width: 39px;
  1363. height: 24px;
  1364. background: #e35454;
  1365. border-radius: 8px;
  1366. color: #ffffff;
  1367. font-family: "robot";
  1368. display: inline-block;
  1369. text-align: center;
  1370. font-size: 16px;
  1371. line-height: 150%;
  1372. margin-right: 12px;
  1373. padding: 0 4px;
  1374. }
  1375. h2 {
  1376. color: #e35454;
  1377. font-size: 16px;
  1378. line-height: 150%;
  1379. font-weight: bold;
  1380. margin: 0;
  1381. }
  1382. h3 {
  1383. color: #000000;
  1384. font-size: 16px;
  1385. line-height: 150%;
  1386. font-weight: normal;
  1387. margin: 0;
  1388. white-space: pre-wrap;
  1389. word-break: break-word;
  1390. }
  1391. .title-box-right-index {
  1392. padding-left: 51px;
  1393. }
  1394. }
  1395. .title-little {
  1396. display: flex;
  1397. margin-bottom: 24px;
  1398. &.marginTop {
  1399. margin-top: 24px;
  1400. }
  1401. b,
  1402. p {
  1403. color: #000000;
  1404. font-size: 16px;
  1405. line-height: 150%;
  1406. font-weight: normal;
  1407. margin: 0;
  1408. white-space: pre-wrap;
  1409. word-break: break-word;
  1410. padding-right: 3px;
  1411. }
  1412. }
  1413. }
  1414. .NNPE-tableList {
  1415. background: #fff;
  1416. border-radius: 8px;
  1417. // padding: 12px 8px;
  1418. &.NNPE-tableList-hasBg {
  1419. background: #f7f7f7;
  1420. border: 1px solid rgba(0, 0, 0, 0.1);
  1421. box-sizing: border-box;
  1422. border-radius: 8px;
  1423. }
  1424. .NNPE-tableList-tr {
  1425. display: flex;
  1426. justify-content: space-between;
  1427. // flex-flow: wrap;
  1428. .NNPE-tableList-item {
  1429. width: 100%;
  1430. // margin: 12px 16px;
  1431. // padding: 16px;
  1432. // background: #FFFFFF;
  1433. // border-radius: 4px;
  1434. display: flex;
  1435. flex-flow: wrap;
  1436. justify-content: center;
  1437. &.NNPE-tableList-item-noMargin {
  1438. margin: 0;
  1439. }
  1440. &.NNPE-tableList-item2 {
  1441. width: 378px;
  1442. }
  1443. &.NNPE-tableList-item3 {
  1444. width: 244px;
  1445. }
  1446. &.NNPE-tableList-item4 {
  1447. width: 195px;
  1448. }
  1449. }
  1450. }
  1451. }
  1452. }
  1453. .submitAnswer {
  1454. width: 160px;
  1455. height: 44px;
  1456. border-radius: 4px;
  1457. font-size: 16px;
  1458. line-height: 44px;
  1459. text-align: center;
  1460. font-family: robot;
  1461. background: #e35454;
  1462. color: #fff;
  1463. margin-left: 16px;
  1464. &:hover {
  1465. background-color: #f76565;
  1466. }
  1467. &:active {
  1468. background-color: #d24444;
  1469. }
  1470. }
  1471. }
  1472. .NPC-Big-Book-preview-green {
  1473. .NNPE-title {
  1474. background: #24b99e;
  1475. .NNPE-operate {
  1476. a {
  1477. background: #24b99e url("../../../assets/newImage/common/btn-pre.png")
  1478. center no-repeat;
  1479. background-size: 24px;
  1480. &.btn-next {
  1481. background: #24b99e
  1482. url("../../../assets/newImage/common/btn-next.png") center no-repeat;
  1483. background-size: 24px;
  1484. }
  1485. &:hover {
  1486. background-color: #3dd4b8;
  1487. }
  1488. &:active {
  1489. background-color: #1fa189;
  1490. }
  1491. }
  1492. }
  1493. }
  1494. .submitAnswer {
  1495. background: #24b99e;
  1496. &:hover {
  1497. background-color: #3dd4b8;
  1498. }
  1499. &:active {
  1500. background-color: #1fa189;
  1501. }
  1502. }
  1503. .classTopic-box {
  1504. background: #24b99e;
  1505. }
  1506. .NNPE-Book-content-inner {
  1507. > div.title-box-preview {
  1508. .title-big {
  1509. b {
  1510. background: #24b99e;
  1511. }
  1512. h2 {
  1513. color: #24b99e;
  1514. }
  1515. }
  1516. }
  1517. }
  1518. }
  1519. .NPC-Big-Book-preview-brown {
  1520. .NNPE-title {
  1521. background: #bd8865;
  1522. .NNPE-operate {
  1523. a {
  1524. background: #bd8865 url("../../../assets/newImage/common/btn-pre.png")
  1525. center no-repeat;
  1526. background-size: 24px;
  1527. &.btn-next {
  1528. background: #bd8865
  1529. url("../../../assets/newImage/common/btn-next.png") center no-repeat;
  1530. background-size: 24px;
  1531. }
  1532. &:hover {
  1533. background-color: #d6a687;
  1534. }
  1535. &:active {
  1536. background-color: #a37557;
  1537. }
  1538. }
  1539. }
  1540. }
  1541. .submitAnswer {
  1542. background: #bd8865;
  1543. &:hover {
  1544. background-color: #d6a687;
  1545. }
  1546. &:active {
  1547. background-color: #a37557;
  1548. }
  1549. }
  1550. .classTopic-box {
  1551. background: #bd8865;
  1552. }
  1553. .NNPE-Book-content-inner {
  1554. > div.title-box-preview {
  1555. .title-big {
  1556. b {
  1557. background: #bd8865;
  1558. }
  1559. h2 {
  1560. color: #bd8865;
  1561. }
  1562. }
  1563. }
  1564. }
  1565. }
  1566. </style>
  1567. <style lang="scss">
  1568. .NNPE-Book-content-item-checkbox {
  1569. .el-checkbox__inner {
  1570. border: 2px solid #4a99ea;
  1571. width: 24px;
  1572. height: 24px;
  1573. }
  1574. .el-checkbox__inner::after {
  1575. border-width: 2px;
  1576. height: 11px;
  1577. left: 8px;
  1578. top: 2px;
  1579. }
  1580. }
  1581. </style>