Preview.vue 71 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167
  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 class="NNPE-title">
  9. <!-- 页眉 -->
  10. <div class="NNPE-title-left">
  11. <div
  12. v-for="(item, index) in cur.detailList"
  13. :key="index"
  14. class="NNPE-title-item"
  15. >
  16. <template
  17. v-if="
  18. item.detail &&
  19. item.detail.wordsList &&
  20. item.detail.wordsList.length == 0
  21. "
  22. >
  23. <p
  24. v-if="item.detail.sentence"
  25. :class="[
  26. 'content-con',
  27. /^[\u4e00-\u9fa5]/.test(item.detail.sentence) ? 'hasCn' : ''
  28. ]"
  29. v-html="item.detail.sentence"
  30. />
  31. </template>
  32. <template v-else>
  33. <div v-if="item.detail && item.detail.resArr" class="con-box">
  34. <div
  35. v-for="(itemCon, indexCon) in item.detail.resArr"
  36. v-show="itemCon.isShow"
  37. :key="indexCon"
  38. :class="['con-item', indexCon === 0 ? 'con-item-0' : '']"
  39. >
  40. <template
  41. v-if="
  42. item.detail &&
  43. item.detail.wordsList &&
  44. item.detail.wordsList[indexCon + 1] &&
  45. item.detail.wordsList[indexCon + 1].chs &&
  46. chsFhList.indexOf(
  47. item.detail.wordsList[indexCon + 1].chs
  48. ) > -1
  49. "
  50. >
  51. <div class="synthesis-box">
  52. <div>
  53. <span
  54. v-if="itemCon.pinyin"
  55. class="pinyin"
  56. :class="[
  57. noFont.indexOf(itemCon.pinyin) > -1 ? 'noFont' : ''
  58. ]"
  59. >{{ itemCon.pinyin }}</span
  60. >
  61. <span
  62. class="content-con"
  63. :class="
  64. [/^[0-9]*$/.test(itemCon.chs)]
  65. ? /^[\u4e00-\u9fa5]/.test(itemCon.chs)
  66. ? 'hanzi'
  67. : 'en'
  68. : ''
  69. "
  70. >{{ itemCon.chs }}</span
  71. >
  72. </div>
  73. <div
  74. v-if="item.detail.wordsList[indexCon + 1]"
  75. style="text-align: left"
  76. >
  77. <span
  78. v-if="item.detail.wordsList[indexCon + 1].pinyin"
  79. class="pinyin"
  80. :class="[
  81. noFont.indexOf(
  82. item.detail.wordsList[indexCon + 1].pinyin
  83. ) > -1
  84. ? 'noFont'
  85. : ''
  86. ]"
  87. >{{ item.detail.wordsList[indexCon + 1].pinyin }}</span
  88. >
  89. <span
  90. class="content-con"
  91. :class="
  92. [
  93. /^[0-9]*$/.test(
  94. item.detail.wordsList[indexCon + 1].chs
  95. )
  96. ]
  97. ? /^[\u4e00-\u9fa5]/.test(
  98. item.detail.wordsList[indexCon + 1].chs
  99. )
  100. ? 'hanzi'
  101. : 'en'
  102. : ''
  103. "
  104. >{{ item.detail.wordsList[indexCon + 1].chs }}</span
  105. >
  106. </div>
  107. </div>
  108. </template>
  109. <template v-else>
  110. <span
  111. v-if="
  112. item.detail &&
  113. !(
  114. item.detail.wordsList &&
  115. item.detail.wordsList[indexCon - 1] &&
  116. item.detail.wordsList[indexCon - 1].chs &&
  117. chsFhList.indexOf(
  118. item.detail.wordsList[indexCon - 1].chs
  119. ) == -1 &&
  120. chsFhList.indexOf(itemCon.chs) > -1
  121. ) &&
  122. itemCon.pinyin
  123. "
  124. class="pinyin"
  125. :class="[
  126. noFont.indexOf(itemCon.pinyin) > -1 ? 'noFont' : ''
  127. ]"
  128. >{{ itemCon.pinyin }}</span
  129. >
  130. <span
  131. v-if="
  132. item.detail &&
  133. !(
  134. item.detail.wordsList &&
  135. item.detail.wordsList[indexCon - 1] &&
  136. item.detail.wordsList[indexCon - 1].chs &&
  137. chsFhList.indexOf(
  138. item.detail.wordsList[indexCon - 1].chs
  139. ) == -1 &&
  140. chsFhList.indexOf(itemCon.chs) > -1
  141. )
  142. "
  143. class="content-con"
  144. :class="
  145. [/^[0-9]*$/.test(itemCon.chs)]
  146. ? /^[\u4e00-\u9fa5]/.test(itemCon.chs)
  147. ? 'hanzi'
  148. : 'en'
  149. : ''
  150. "
  151. >{{ itemCon.chs }}</span
  152. >
  153. </template>
  154. </div>
  155. </div>
  156. </template>
  157. <p class="NNPE-title-item-en" v-html="item.en" />
  158. </div>
  159. </div>
  160. <div v-if="isShowTitle" class="NNPE-operate">
  161. <a
  162. class="btn-prev"
  163. :class="[preClick ? '' : 'btn-prev-disabled']"
  164. @click="handleNNPEprev"
  165. />
  166. <a
  167. class="btn-next"
  168. :class="[nextClick ? '' : 'btn-next-disabled']"
  169. @click="handleNNPEnext"
  170. />
  171. </div>
  172. </div>
  173. <div
  174. v-if="
  175. cur.classTopic && cur.classTopic.length > 0 && cur.classTopic[0].con
  176. "
  177. class="classTopic-box"
  178. >
  179. <span
  180. v-for="(item, index) in cur.classTopic"
  181. :key="index"
  182. :class="item.font"
  183. >
  184. {{ item.con }}
  185. </span>
  186. </div>
  187. <el-checkbox
  188. v-if="previewType && previewType == 'previewCheck'"
  189. v-model="checkAllNPC"
  190. class="NNPE-Book-content-item-checkbox"
  191. :indeterminate="isIndeterminate"
  192. style="margin:20px 0 0 10px"
  193. @change="handleCheckAllChangeNPC"
  194. >全选</el-checkbox
  195. >
  196. <div v-if="cur" class="NNPE-Book-content-inner">
  197. <div
  198. v-for="(item, index) in cur.cur_fn_data"
  199. :key="index"
  200. class="title-box-preview"
  201. :class="[
  202. !previewType ||
  203. previewType == 'previewCheck' ||
  204. (previewType == 'previewCheckShow' && item.previewShow) ||
  205. JSON.parse(previewGroupId).length == 0
  206. ? 'NNPE-Book-content-item'
  207. : ''
  208. ]"
  209. >
  210. <div v-for="(itemJ, indexJ) in judgeAnswersList" :key="indexJ">
  211. <el-checkbox
  212. v-if="previewType && previewType == 'previewCheck' && item.group_id"
  213. v-model="groupCheckList[index]"
  214. class="NNPE-Book-content-item-checkbox"
  215. :label="item.group_id"
  216. @change="forupdata(index)"
  217. ><br
  218. /></el-checkbox>
  219. <template
  220. v-if="
  221. !previewType ||
  222. previewType == 'previewCheck' ||
  223. (previewType == 'previewCheckShow' && item.previewShow) ||
  224. JSON.parse(previewGroupId).length == 0
  225. "
  226. >
  227. <template v-if="itemJ != 'standardAnswer'">
  228. <div
  229. v-if="
  230. item.number ||
  231. item.z_title ||
  232. item.f_title ||
  233. (item.z_title_detail && item.z_title_detail.sentence) ||
  234. (item.f_title_detail && item.f_title_detail.sentence)
  235. "
  236. class="title-big"
  237. >
  238. <b v-if="item.number">{{ item.number }}</b>
  239. <div
  240. class="title-box-right"
  241. :class="[item.is_textIndex ? 'title-box-right-index' : '']"
  242. >
  243. <template
  244. v-if="item.z_title_detail && item.z_title_detail.sentence"
  245. >
  246. <div class="item-intro">
  247. <OneSentenceTemp
  248. :detail="item.z_title_detail"
  249. :task-model="TaskModel"
  250. :bookanswer="[]"
  251. :correct-answer="[]"
  252. :is-input="false"
  253. :fn_check_list="[]"
  254. :py-number="0"
  255. :record_check="[]"
  256. :max-fontsize="'16'"
  257. />
  258. </div>
  259. </template>
  260. <h2 v-else-if="item.z_title" v-html="item.z_title" />
  261. <template v-if="item.hasOwnProperty('f_title_detail')">
  262. <div v-if="item.f_title_detail.sentence" class="item-intro">
  263. <OneSentenceTemp
  264. :detail="item.f_title_detail"
  265. :task-model="TaskModel"
  266. :bookanswer="[]"
  267. :correct-answer="[]"
  268. :is-input="false"
  269. :fn_check_list="[]"
  270. :py-number="0"
  271. :record_check="[]"
  272. :max-fontsize="'16'"
  273. :style="{
  274. marginTop:
  275. item.z_title ||
  276. (item.z_title_detail &&
  277. item.z_title_detail.sentence)
  278. ? '8px'
  279. : '0'
  280. }"
  281. />
  282. </div>
  283. </template>
  284. <h3
  285. v-else-if="item.f_title"
  286. :style="{
  287. marginTop:
  288. item.z_title ||
  289. (item.z_title_detail && item.z_title_detail.sentence)
  290. ? '8px'
  291. : '0'
  292. }"
  293. v-html="item.f_title"
  294. />
  295. </div>
  296. </div>
  297. <div
  298. class="title-little"
  299. :class="[
  300. (item.little_title_number ||
  301. item.little_title ||
  302. (item.l_title_detail && item.l_title_detail.sentence)) &&
  303. (item.f_title ||
  304. (item.f_title_detail && item.f_title_detail.sentence))
  305. ? 'marginTop'
  306. : 'marginTop-8'
  307. ]"
  308. >
  309. <b v-html="item.little_title_number" />
  310. <template
  311. v-if="item.l_title_detail && item.l_title_detail.sentence"
  312. >
  313. <div class="item-intro">
  314. <OneSentenceTemp
  315. :detail="item.l_title_detail"
  316. :task-model="TaskModel"
  317. :bookanswer="[]"
  318. :correct-answer="[]"
  319. :is-input="false"
  320. :fn_check_list="[]"
  321. :py-number="0"
  322. :record_check="[]"
  323. :max-fontsize="'16'"
  324. />
  325. </div>
  326. </template>
  327. <p v-else-if="item.little_title" v-html="item.little_title" />
  328. </div>
  329. </template>
  330. <div
  331. :class="[
  332. 'NNPE-tableList',
  333. item.is_bg ? 'NNPE-tableList-hasBg' : ''
  334. ]"
  335. >
  336. <h6
  337. v-if="itemJ == 'userAnswer' || itemJ == 'studentAnswer'"
  338. class="standardTitle"
  339. >
  340. {{ itemJ == "userAnswer" ? "Your answer" : "Student answers" }}
  341. </h6>
  342. <h6
  343. v-if="itemJ == 'standardAnswer' && item.ShowstandardAnswer"
  344. class="standardTitle"
  345. >
  346. Standard answer
  347. </h6>
  348. <div
  349. v-for="(items, indexs) in item.table_list"
  350. :key="indexs"
  351. class="NNPE-tableList-tr"
  352. :class="[
  353. indexs === item.table_list.length - 1
  354. ? 'NNPE-tableList-tr-last'
  355. : ''
  356. ]"
  357. >
  358. <div
  359. v-for="(itemss, indexss) in items"
  360. :key="indexss"
  361. :class="[
  362. 'NNPE-tableList-item',
  363. items.length == 1
  364. ? 'NNPE-tableList-item-noMargin'
  365. : 'NNPE-tableList-item' + items.length
  366. ]"
  367. >
  368. <template v-if="itemss.data">
  369. <template v-if="itemss.type == 'ligature_chs'">
  370. <Ligature
  371. :cur-que="itemss.data"
  372. :theme-color="themeColor"
  373. :task-model="TaskModel"
  374. :number="
  375. index +
  376. '_' +
  377. indexs +
  378. '_' +
  379. indexss +
  380. '_' +
  381. currentTreeID
  382. "
  383. :judge-answer="itemJ"
  384. />
  385. </template>
  386. <template v-if="itemss.data.type == 'image'">
  387. <Picture
  388. v-if="refresh"
  389. :cur-que="itemss.data"
  390. :child-type="itemss.type"
  391. :theme-color="themeColor"
  392. :task-model="TaskModel"
  393. :judge-answer="itemJ"
  394. />
  395. </template>
  396. <template
  397. v-if="
  398. itemss.type == 'phrase_chs' && itemJ != 'standardAnswer'
  399. "
  400. >
  401. <WordPhrase
  402. v-if="refresh"
  403. :cur-que="itemss.data"
  404. :theme-color="themeColor"
  405. :task-model="TaskModel"
  406. :index-str="
  407. index +
  408. '_' +
  409. indexs +
  410. '_' +
  411. indexss +
  412. '_' +
  413. currentTreeID
  414. "
  415. :judge-answer="itemJ"
  416. />
  417. </template>
  418. <template
  419. v-if="
  420. itemss.type == 'NewWord_chs' &&
  421. itemJ != 'standardAnswer'
  422. "
  423. >
  424. <WordPhrase
  425. v-if="refresh"
  426. :cur-que="itemss.data"
  427. :theme-color="themeColor"
  428. :current-tree-i-d="currentTreeID"
  429. :indexs="indexs"
  430. :indexss="indexss"
  431. :task-model="TaskModel"
  432. :index-str="
  433. index +
  434. '_' +
  435. indexs +
  436. '_' +
  437. indexss +
  438. '_' +
  439. currentTreeID
  440. "
  441. :judge-answer="itemJ"
  442. />
  443. </template>
  444. <template
  445. v-if="
  446. itemss.type == 'annotation_chs' &&
  447. itemJ != 'standardAnswer'
  448. "
  449. >
  450. <WordPhrase
  451. v-if="refresh"
  452. :cur-que="itemss.data"
  453. :theme-color="themeColor"
  454. :task-model="TaskModel"
  455. :index-str="
  456. index +
  457. '_' +
  458. indexs +
  459. '_' +
  460. indexss +
  461. '_' +
  462. currentTreeID
  463. "
  464. :judge-answer="itemJ"
  465. />
  466. </template>
  467. <template
  468. v-if="
  469. itemss.type == 'notes_chs' && itemJ != 'standardAnswer'
  470. "
  471. >
  472. <Notes
  473. v-if="refresh"
  474. :cur-que="itemss.data"
  475. :theme-color="themeColor"
  476. :task-model="TaskModel"
  477. :judge-answer="itemJ"
  478. />
  479. </template>
  480. <template
  481. v-if="
  482. itemss.type == 'article_chs' &&
  483. itemJ != 'standardAnswer'
  484. "
  485. >
  486. <ArticleTemChs
  487. v-if="refresh"
  488. :cur-que="itemss.data"
  489. :n-n-p-e-new-word-list="NNPENewWordList"
  490. :n-n-p-e-new-phrase-list="NNPENewPhraseList"
  491. :n-n-p-e-annotation-list="NNPEAnnotationList"
  492. :theme-color="themeColor"
  493. :current-tree-i-d="currentTreeID"
  494. :task-model="TaskModel"
  495. :judge-answer="itemJ"
  496. :col-length="items.length"
  497. :NpcNewWordMp3="NpcNewWordMp3"
  498. />
  499. </template>
  500. <!-- <template v-if="itemss.type == 'sentence_segword_chs'">
  501. <SentenceSegWordViewChs
  502. :cur-que="itemss.data"
  503. :theme-color="themeColor"
  504. v-if="refresh"
  505. />
  506. </template> -->
  507. <template
  508. v-if="
  509. itemss.type == 'dialogue_article_chs' &&
  510. itemJ != 'standardAnswer'
  511. "
  512. >
  513. <DialogueArticleViewChs
  514. v-if="refresh"
  515. :cur-que="itemss.data"
  516. :n-n-p-e-new-word-list="NNPENewWordList"
  517. :n-n-p-e-new-phrase-list="NNPENewPhraseList"
  518. :n-n-p-e-annotation-list="NNPEAnnotationList"
  519. :color-box="colorBox"
  520. :theme-color="themeColor"
  521. :current-tree-i-d="currentTreeID"
  522. :task-model="TaskModel"
  523. :judge-answer="itemJ"
  524. :col-length="items.length"
  525. :NpcNewWordMp3="NpcNewWordMp3"
  526. />
  527. </template>
  528. <template v-if="itemss.type == 'dialogue_answer_chs'">
  529. <DialogueAnswerViewChs
  530. v-if="refresh"
  531. :cur-que="itemss.data"
  532. :color-box="colorBox"
  533. :theme-color="themeColor"
  534. :task-model="TaskModel"
  535. :judge-answer="itemJ"
  536. />
  537. </template>
  538. <template v-if="itemss.type == 'input_record_chs'">
  539. <InputHasRecord
  540. v-if="refresh"
  541. :cur-que="itemss.data"
  542. :theme-color="themeColor"
  543. :task-model="TaskModel"
  544. :judge-answer="itemJ"
  545. />
  546. </template>
  547. <template v-if="itemss.type == 'recordHZ_inputPY_chs'">
  548. <TextInputRecord
  549. v-if="refresh"
  550. :cur-que="itemss.data"
  551. :theme-color="themeColor"
  552. :task-model="TaskModel"
  553. :judge-answer="itemJ"
  554. />
  555. </template>
  556. <template
  557. v-if="
  558. itemss.type == 'inputItem_chs' ||
  559. itemss.type == 'sentence_input_chs' ||
  560. itemss.type == 'sentence_judge_chs' ||
  561. itemss.type == 'sentence_record_chs' ||
  562. itemss.type == 'sentence_input_record_chs'
  563. "
  564. >
  565. <SentenceInput
  566. v-if="refresh"
  567. :cur-que="itemss.data"
  568. :theme-color="themeColor"
  569. :task-model="TaskModel"
  570. :judge-answer="itemJ"
  571. :type="itemss.type"
  572. />
  573. </template>
  574. <template v-if="itemss.type == 'NumberCombination_chs'">
  575. <NumberSelectHasRecord
  576. v-if="refresh"
  577. :cur-que="itemss.data"
  578. :theme-color="themeColor"
  579. :task-model="TaskModel"
  580. :judge-answer="itemJ"
  581. />
  582. </template>
  583. <template
  584. v-if="
  585. itemss.type === 'voice_matrix' &&
  586. itemJ != 'standardAnswer'
  587. "
  588. >
  589. <voice-matrix
  590. v-if="refresh"
  591. :cur-que="itemss.data"
  592. :theme-color="themeColor"
  593. :task-model="TaskModel"
  594. :judge-answer="itemJ"
  595. />
  596. </template>
  597. <template v-if="itemss.type === 'select_drag'">
  598. <select-drag
  599. v-if="refresh"
  600. :cur-que="itemss.data"
  601. :theme-color="themeColor"
  602. :task-model="TaskModel"
  603. :judge-answer="itemJ"
  604. />
  605. </template>
  606. <template v-if="itemss.type === 'fill_drag'">
  607. <fill-drag
  608. v-if="refresh"
  609. :cur-que="itemss.data"
  610. :theme-color="themeColor"
  611. :task-model="TaskModel"
  612. :judge-answer="itemJ"
  613. />
  614. </template>
  615. <template v-if="itemss.type === 'config_table'">
  616. <configurable-table
  617. v-if="refresh"
  618. :cur-que="itemss.data"
  619. :theme-color="themeColor"
  620. :task-model="TaskModel"
  621. :judge-answer="itemJ"
  622. />
  623. </template>
  624. <template v-if="itemss.type === 'header_separate'">
  625. <header-separate
  626. v-if="refresh"
  627. :cur-que="itemss.data"
  628. :theme-color="themeColor"
  629. :task-model="TaskModel"
  630. :judge-answer="itemJ"
  631. />
  632. </template>
  633. <template v-if="itemss.type == 'toneSelect_chs'">
  634. <SelectTone
  635. v-if="refresh"
  636. :cur-que="itemss.data"
  637. :theme-color="themeColor"
  638. :task-model="TaskModel"
  639. :judge-answer="itemJ"
  640. />
  641. </template>
  642. <template v-if="itemss.type == 'sudoku_chs'">
  643. <Soduko
  644. v-if="refresh"
  645. :cur-que="itemss.data"
  646. :theme-color="themeColor"
  647. :task-model="TaskModel"
  648. :judge-answer="itemJ"
  649. />
  650. </template>
  651. <template v-if="itemss.type == 'single_chs'">
  652. <Single
  653. v-if="refresh"
  654. :cur-que="itemss.data"
  655. :theme-color="themeColor"
  656. :task-model="TaskModel"
  657. :judge-answer="itemJ"
  658. />
  659. </template>
  660. <template v-if="itemss.type == 'text_problem_chs'">
  661. <TextProblem
  662. v-if="refresh"
  663. :cur-que="itemss.data"
  664. :theme-color="themeColor"
  665. :task-model="TaskModel"
  666. :judge-answer="itemJ"
  667. />
  668. </template>
  669. <template
  670. v-if="
  671. itemss.type == 'newWord_preview_chs' &&
  672. itemJ != 'standardAnswer'
  673. "
  674. >
  675. <NewWordShow
  676. v-if="refresh"
  677. :cur-que="itemss.data"
  678. :theme-color="themeColor"
  679. :index-str="index + '_' + indexs + '_' + indexss"
  680. :task-model="TaskModel"
  681. :judge-answer="itemJ"
  682. />
  683. </template>
  684. <template
  685. v-if="itemss.type == 'listen_record_single_syllable_chs'"
  686. >
  687. <SelectYinjie
  688. v-if="refresh"
  689. :cur-que="itemss.data"
  690. :theme-color="themeColor"
  691. :task-model="TaskModel"
  692. :judge-answer="itemJ"
  693. />
  694. </template>
  695. <template v-if="itemss.type == 'sentence_listen_read_chs'">
  696. <SentenceListenRead
  697. v-if="refresh"
  698. :cur-que="itemss.data"
  699. :theme-color="themeColor"
  700. :task-model="TaskModel"
  701. :judge-answer="itemJ"
  702. />
  703. </template>
  704. <template v-if="itemss.type == 'sort_chs'">
  705. <SentenceSortQP
  706. v-if="refresh"
  707. :cur-que="itemss.data"
  708. :theme-color="themeColor"
  709. :task-model="TaskModel"
  710. :judge-answer="itemJ"
  711. />
  712. </template>
  713. <template
  714. v-if="itemss.type == 'checkbox_self_assessment_chs'"
  715. >
  716. <Checkbox
  717. v-if="refresh"
  718. :cur-que="itemss.data"
  719. :theme-color="themeColor"
  720. :task-model="TaskModel"
  721. :judge-answer="itemJ"
  722. />
  723. </template>
  724. <template
  725. v-if="
  726. (itemss.type == 'record_control_mini' ||
  727. itemss.type == 'record_control_normal' ||
  728. itemss.type == 'record_control_pro' ||
  729. itemss.type == 'record_control_promax') &&
  730. itemJ != 'standardAnswer'
  731. "
  732. >
  733. <RecordModule
  734. v-if="refresh"
  735. :cur-que="itemss.data"
  736. :theme-color="themeColor"
  737. :task-model="TaskModel"
  738. :judge-answer="itemJ"
  739. />
  740. </template>
  741. <template
  742. v-if="
  743. (itemss.type == 'upload_control_chs' ||
  744. itemss.type == 'upload_control_preview_chs') &&
  745. itemJ != 'standardAnswer'
  746. "
  747. >
  748. <UploadControlView
  749. v-if="refresh"
  750. :cur-que="itemss.data"
  751. :type="itemss.type"
  752. :theme-color="themeColor"
  753. :task-model="TaskModel"
  754. :judge-answer="itemJ"
  755. />
  756. </template>
  757. <template
  758. v-if="
  759. itemss.type == 'CourseStart_chs' &&
  760. itemJ != 'standardAnswer'
  761. "
  762. >
  763. <CourseStart
  764. v-if="refresh"
  765. :cur-que="itemss.data"
  766. :handle-n-n-p-enext="handleNNPEnext"
  767. :theme-color="themeColor"
  768. :task-model="TaskModel"
  769. :judge-answer="itemJ"
  770. />
  771. </template>
  772. <template
  773. v-if="
  774. itemss.type == 'tinydemo_chs' &&
  775. itemJ != 'standardAnswer'
  776. "
  777. >
  778. <Tinydemo
  779. v-if="refresh"
  780. :cur-que="itemss.data"
  781. :theme-color="themeColor"
  782. :task-model="TaskModel"
  783. :judge-answer="itemJ"
  784. />
  785. </template>
  786. <template
  787. v-if="
  788. itemss.type == 'video_chs' && itemJ != 'standardAnswer'
  789. "
  790. >
  791. <VideoControl
  792. v-if="refresh"
  793. :cur-que="itemss.data"
  794. :type="itemss.type"
  795. :theme-color="themeColor"
  796. :index-str="
  797. index +
  798. '_' +
  799. indexs +
  800. '_' +
  801. indexss +
  802. '_' +
  803. currentTreeID
  804. "
  805. :task-model="TaskModel"
  806. :judge-answer="itemJ"
  807. />
  808. </template>
  809. <template v-if="itemss.type == 'table_chs'">
  810. <TableView
  811. v-if="refresh"
  812. :cur-que="itemss.data"
  813. :type="itemss.type"
  814. :theme-color="themeColor"
  815. :task-model="TaskModel"
  816. :judge-answer="itemJ"
  817. />
  818. </template>
  819. <template v-if="itemss.type == 'play_record_chs'">
  820. <PlayRecordView
  821. v-if="refresh"
  822. :cur-que="itemss.data"
  823. :type="itemss.type"
  824. :theme-color="themeColor"
  825. :task-model="TaskModel"
  826. :judge-answer="itemJ"
  827. />
  828. </template>
  829. <template
  830. v-if="
  831. itemss.type == 'upload_pdf_chs' &&
  832. itemJ != 'standardAnswer'
  833. "
  834. >
  835. <PdfView
  836. v-if="refresh"
  837. :cur-que="itemss.data"
  838. :type="itemss.type"
  839. :theme-color="themeColor"
  840. :task-model="TaskModel"
  841. :judge-answer="itemJ"
  842. />
  843. </template>
  844. <template v-if="itemss.type == 'sentence_segtemp_chs'">
  845. <SentenceModule
  846. v-if="refresh"
  847. :cur-que="itemss.data"
  848. :type="itemss.type"
  849. :theme-color="themeColor"
  850. :task-model="TaskModel"
  851. :judge-answer="itemJ"
  852. />
  853. </template>
  854. <template
  855. v-if="
  856. itemss.type == 'options_list_chs' &&
  857. itemJ != 'standardAnswer'
  858. "
  859. >
  860. <OptionsList
  861. v-if="refresh"
  862. :cur-que="itemss.data"
  863. :theme-color="themeColor"
  864. :index-str="index + '_' + indexs + '_' + indexss"
  865. :task-model="TaskModel"
  866. :judge-answer="itemJ"
  867. />
  868. </template>
  869. <template v-if="itemss.type == 'sentence_single_chs'">
  870. <SentenceMulModule
  871. v-if="refresh"
  872. :cur-que="itemss.data"
  873. :type="itemss.type"
  874. :theme-color="themeColor"
  875. :task-model="TaskModel"
  876. :judge-answer="itemJ"
  877. />
  878. </template>
  879. </template>
  880. </div>
  881. </div>
  882. <div
  883. v-if="isAnswerItemShow && item.showSubmit"
  884. style="text-align: right; padding: 10px 0px 40px 0"
  885. >
  886. <a class="submitLookAnswer" @click="submitLookAnswer(index)">{{
  887. submitCn ? submitCn : "查看答案"
  888. }}</a>
  889. </div>
  890. </div>
  891. </template>
  892. </div>
  893. </div>
  894. </div>
  895. <div v-if="isShowSave || isShowTitle" class="NNPE-title NNPE-title-gray">
  896. <!-- 页眉 v-if="isShowSave"-->
  897. <a v-if="isShowSave" class="submitAnswer" @click="submitUserAnswerNPC"
  898. >提交</a
  899. >
  900. <div v-if="isShowTitle" class="NNPE-operate">
  901. <a
  902. class="btn-prev"
  903. :class="[preClick ? '' : 'btn-prev-disabled']"
  904. @click="handleNNPEprev"
  905. />
  906. <a
  907. class="btn-next"
  908. :class="[nextClick ? '' : 'btn-next-disabled']"
  909. @click="handleNNPEnext"
  910. />
  911. </div>
  912. </div>
  913. <el-dialog
  914. title=""
  915. :close-on-click-modal="false"
  916. :modal-append-to-body="false"
  917. :show-close="false"
  918. append-to-body
  919. :visible.sync="visiblePreviewDialog"
  920. width="890px"
  921. height="80%"
  922. class="previewDialog"
  923. >
  924. <div class="previewDialog-title">
  925. <h2>Reference answer</h2>
  926. <a @click="visiblePreviewDialog = false"
  927. ><img src="../../assets/NPC/icon-close.png"
  928. /></a>
  929. </div>
  930. <PreviewDialogueNPC
  931. v-if="visiblePreviewDialog"
  932. class="previewDialog-content"
  933. :context="contextData"
  934. :que-index="queIndex"
  935. :father-name="fatherName"
  936. :current-tree-i-d="currentTreeID"
  937. :father-tree-data="FatherTreeData"
  938. :change-id="changeId"
  939. :theme-color="themeColor"
  940. :task-model="'ANSWER'"
  941. :NpcNewWordMp3="NpcNewWordMp3"
  942. />
  943. </el-dialog>
  944. </div>
  945. </template>
  946. <script>
  947. import Picture from "./preview/Picture.vue"; // 图片模板
  948. import Record from "./preview/Record.vue"; // 音频播放
  949. import Soundrecord from "./preview/Soundrecord.vue"; // 录音模板
  950. import ArticleTemChs from "./preview/ArticleViewChs/index.vue"; // 文章模板
  951. import DialogueArticleViewChs from "./preview/DialogueArticleViewChs/index.vue"; // 文章模板
  952. import SentenceSegWordViewChs from "./preview/SentenceSegWordViewChs.vue"; // 句子分词
  953. import WordPhrase from "./preview/WordPhrase.vue"; // 生词短语
  954. import Notes from "./preview/Notes.vue"; // 注释
  955. import Ligature from "./preview/Ligature.vue";
  956. import InputHasRecord from "./preview/InputHasRecord.vue"; // 输入加录音
  957. import TextInputRecord from "./preview/TextInputRecord.vue"; // 文本+输入+录音
  958. import SentenceInput from "./preview/SentenceInput.vue"; // 输入选项
  959. import NumberSelectHasRecord from "./preview/NumberSelectHasRecord.vue"; // 数字组合
  960. import SelectTone from "./preview/SelectTone.vue"; // 选择声调
  961. import Soduko from "./preview/Soduko.vue"; // 数独
  962. import Single from "./preview/Single.vue"; // 单选
  963. import TextProblem from "./preview/TextProblem.vue"; // 课文上方的问题
  964. import NewWordShow from "./preview/NewWordShow.vue"; // 生字展示
  965. import SelectYinjie from "./preview/SelectYinjie.vue"; // 选择音节
  966. import SentenceListenRead from "./preview/SentenceListenRead.vue"; // 听并朗读
  967. import SentenceSortQP from "./preview/SentenceSortQP.vue"; // 句子拖拽排序
  968. import Checkbox from "./preview/CheckBoxModule.vue"; // 问卷调查-多选题
  969. import VoiceMatrix from "./preview/VoiceMatrix.vue"; // 语音矩阵
  970. import SelectDrag from "./preview/SelectDrag.vue"; // 选择 -> 拖拽
  971. import FillDrag from "./preview/FillDrag.vue"; // 填空 -> 拖拽
  972. import ConfigurableTable from "./preview/ConfigurableTable.vue"; // 可配置表格
  973. import HeaderSeparate from "./preview/HeaderSparate/index.vue"; // 表头分离表格
  974. import RecordModule from "./preview/RecordModule.vue"; // 录音组件
  975. import UploadControlView from "./preview/UploadControlView.vue"; // 预览控件
  976. import DialogueAnswerViewChs from "./preview/DialogueArticleViewChs/DialogueAnswerViewChs.vue"; // 文章模板
  977. import CourseStart from "./preview/CourseStart.vue"; // 封面
  978. import Tinydemo from "./preview/TinyModule.vue"; // 富文本
  979. import VideoControl from "./preview/VideoControl.vue"; // 视频控件
  980. import TableView from "./preview/TableView.vue"; // 视频控件
  981. import PdfView from "./preview/PdfView.vue"; // 视频控件
  982. import SentenceModule from "./preview/SentenceModule.vue"; // 图片模板
  983. import PlayRecordView from "./preview/PlayRecordView.vue";
  984. import OptionsList from "./preview/OptionsList.vue"; // 选项模板
  985. import SentenceMulModule from "./preview/SentenceMulModule.vue"; // 多题干模板
  986. import PreviewDialogueNPC from "./preview/PreviewDialogueNPC.vue"; // 选项模板
  987. import OneSentenceTemp from "./preview/components/OneSentenceTemp.vue";
  988. import { getToken } from "../../utils/auth";
  989. export default {
  990. name: "Booknpc",
  991. components: {
  992. Picture,
  993. Record,
  994. Soundrecord,
  995. ArticleTemChs,
  996. DialogueArticleViewChs,
  997. SentenceSegWordViewChs,
  998. WordPhrase,
  999. Notes,
  1000. Ligature,
  1001. InputHasRecord,
  1002. TextInputRecord,
  1003. SentenceInput,
  1004. NumberSelectHasRecord,
  1005. SelectTone,
  1006. Soduko,
  1007. Single,
  1008. TextProblem,
  1009. NewWordShow,
  1010. SelectYinjie,
  1011. SentenceListenRead,
  1012. SentenceSortQP,
  1013. Checkbox,
  1014. VoiceMatrix,
  1015. FillDrag,
  1016. SelectDrag,
  1017. ConfigurableTable,
  1018. HeaderSeparate,
  1019. RecordModule,
  1020. UploadControlView,
  1021. DialogueAnswerViewChs,
  1022. CourseStart,
  1023. Tinydemo,
  1024. VideoControl,
  1025. TableView,
  1026. PdfView,
  1027. PlayRecordView,
  1028. SentenceModule,
  1029. OptionsList,
  1030. PreviewDialogueNPC,
  1031. SentenceMulModule,
  1032. OneSentenceTemp
  1033. },
  1034. props: [
  1035. "context",
  1036. "fatherName",
  1037. "currentTreeID",
  1038. "FatherTreeData",
  1039. "changeId",
  1040. "themeColor",
  1041. "isShowTitle",
  1042. "bookAnswerContent",
  1043. "TaskModel",
  1044. "isShowSave",
  1045. "previewType",
  1046. "previewGroupId",
  1047. "isAnswerItemShow",
  1048. "submitCn"
  1049. ],
  1050. data() {
  1051. return {
  1052. contextData: null,
  1053. answerData: [], // 获取的答案数据
  1054. queIndex: -1, // 题目的索引
  1055. cur: null, // 当前的题目
  1056. watchIndex: -1, // 监听的值
  1057. queList: [],
  1058. queTotal: 0, // 题目总数
  1059. NNPENewWordList: [], // 存放文章的生词
  1060. NNPENewPhraseList: [], // 存放文章的短语
  1061. NNPEAnnotationList: [], // 存放文章注释
  1062. height: "", // 总体的高度
  1063. colorBox: [
  1064. {
  1065. touxiang: "#72B51D",
  1066. bg: "#E9F0DF"
  1067. },
  1068. {
  1069. touxiang: "#DE4444",
  1070. bg: "rgba(222, 68, 68, 0.1)"
  1071. },
  1072. {
  1073. touxiang: "#A7A7A7",
  1074. bg: "#ffffff"
  1075. },
  1076. {
  1077. touxiang: "#4D91F6",
  1078. bg: "#F1F7FF"
  1079. },
  1080. {
  1081. touxiang: "#FF8A00",
  1082. bg: "rgba(255, 138, 0, 0.1)"
  1083. },
  1084. {
  1085. touxiang: "#25C8B4",
  1086. bg: "#D3F4F0"
  1087. },
  1088. {
  1089. touxiang: "#AD44DE",
  1090. bg: "#EFDAF8"
  1091. },
  1092. {
  1093. touxiang: "#CD003E",
  1094. bg: "#F5CCD8"
  1095. },
  1096. {
  1097. touxiang: "#FF4980",
  1098. bg: "#FFDBE6"
  1099. },
  1100. {
  1101. touxiang: "#FAFF00",
  1102. bg: "#FEFFCC"
  1103. },
  1104. {
  1105. touxiang: "#94C748",
  1106. bg: "rgba(148, 199, 72, 0.1)"
  1107. },
  1108. {
  1109. touxiang: "#E2B203",
  1110. bg: "rgba(226, 178, 3, 0.1)"
  1111. },
  1112. {
  1113. touxiang: "rgba(108, 195, 224, 1)",
  1114. bg: "rgba(108, 195, 224, 0.1)"
  1115. },
  1116. {
  1117. touxiang: "rgba(159, 143, 239, 1)",
  1118. bg: "rgba(159, 143, 239, 0.1)"
  1119. },
  1120. {
  1121. touxiang: "rgba(231, 116, 187, 1)",
  1122. bg: "rgba(231, 116, 187, 0.1)"
  1123. }
  1124. ],
  1125. chsFhList: [",", "。", "“", ":", "》", "?", "!", ";"],
  1126. noFont: ["~", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")"], // 对应不要拼音字体
  1127. idArr: [], // 当前的pid
  1128. oldCurrentTreeID: "",
  1129. refresh: true,
  1130. preClick: false, // 上一页是否可点
  1131. nextClick: false, // 下一页是否可点
  1132. answerTime: 0,
  1133. answerTimeInterval: null, // 计时器
  1134. groupIndexList: [], // 勾选groupid数组
  1135. groupCheckList: [], // checkbox 是否选中
  1136. judgeAnswersList: [],
  1137. visiblePreviewDialog: false,
  1138. titleChsFhList: [",", "”", "。", ":", "》", "?", "!", ";"],
  1139. checkAllNPC: false,
  1140. isIndeterminate: false,
  1141. NpcNewWordMp3: ""
  1142. };
  1143. },
  1144. computed: {},
  1145. watch: {
  1146. context: {
  1147. handler(val, oldVal) {
  1148. const _this = this;
  1149. _this.refresh = false;
  1150. if (val) {
  1151. _this.initContextData();
  1152. if (_this.FatherTreeData) {
  1153. _this.idArr = [];
  1154. _this.FatherTreeData.forEach((item, itemIndex) => {
  1155. this.seekCurrentTree(item);
  1156. });
  1157. }
  1158. _this.handleTitleData();
  1159. if (_this.queIndex == _this.queTotal - 1) {
  1160. this.idArr.forEach((item, i) => {
  1161. if (item == _this.currentTreeID) {
  1162. if (i == 0) {
  1163. _this.preClick = false;
  1164. _this.nextClick = true;
  1165. } else if (i == this.idArr.length - 1) {
  1166. _this.nextClick = false;
  1167. _this.preClick = true;
  1168. } else {
  1169. _this.nextClick = true;
  1170. _this.preClick = true;
  1171. }
  1172. }
  1173. });
  1174. }
  1175. _this.$nextTick(() => {
  1176. // 重新渲染组件
  1177. _this.refresh = true;
  1178. });
  1179. }
  1180. },
  1181. // 深度观察监听
  1182. deep: true
  1183. }
  1184. },
  1185. // 生命周期 - 创建完成(可以访问当前this实例)
  1186. created() {
  1187. console.log("2024-01-16 17:22");
  1188. },
  1189. // 生命周期 - 挂载完成(可以访问DOM元素)
  1190. mounted() {
  1191. const _this = this;
  1192. if (_this.context) {
  1193. _this.initContextData();
  1194. _this.handleTitleData();
  1195. }
  1196. if (_this.FatherTreeData) {
  1197. _this.idArr = [];
  1198. _this.FatherTreeData.forEach((item, itemIndex) => {
  1199. this.seekCurrentTree(item);
  1200. });
  1201. if (_this.queIndex == _this.queTotal - 1) {
  1202. this.idArr.forEach((item, i) => {
  1203. if (item == _this.currentTreeID) {
  1204. if (i == 0) {
  1205. _this.preClick = false;
  1206. _this.nextClick = true;
  1207. } else if (i == this.idArr.length - 1) {
  1208. _this.nextClick = false;
  1209. _this.preClick = true;
  1210. } else {
  1211. _this.nextClick = true;
  1212. _this.preClick = true;
  1213. }
  1214. }
  1215. });
  1216. }
  1217. }
  1218. },
  1219. beforeCreate() {}, // 生命周期 - 创建之前
  1220. beforeMount() {}, // 生命周期 - 挂载之前
  1221. beforeUpdate() {}, // 生命周期 - 更新之前
  1222. updated() {}, // 生命周期 - 更新之后
  1223. beforeDestroy() {}, // 生命周期 - 销毁之前
  1224. destroyed() {}, // 生命周期 - 销毁完成
  1225. activated() {},
  1226. // 方法集合
  1227. methods: {
  1228. // 处理数据
  1229. handleTitleData() {
  1230. let _this = this;
  1231. let curQue = JSON.parse(JSON.stringify(this.cur));
  1232. if (curQue.detailList) {
  1233. curQue.detailList.forEach((dItem, dIndex) => {
  1234. let paraArr = [];
  1235. if (dItem.detail) {
  1236. dItem.detail.wordsList.forEach((sItem, sIndex) => {
  1237. let obj = {
  1238. pinyin: sItem.pinyin,
  1239. chs: sItem.chs,
  1240. isShow: true
  1241. };
  1242. paraArr.push(obj);
  1243. });
  1244. this.$set(_this.cur.detailList[dIndex].detail, "resArr", paraArr);
  1245. }
  1246. });
  1247. }
  1248. },
  1249. initContextData() {
  1250. const _this = this;
  1251. // _this.$root.isRecording = false;
  1252. _this.checkAllNPC = false;
  1253. _this.contextData = JSON.parse(JSON.stringify(_this.context));
  1254. _this.queIndex = 0;
  1255. _this.NNPENewWordList = [];
  1256. _this.NNPENewPhraseList = [];
  1257. _this.NNPEAnnotationList = [];
  1258. _this.watchIndex = _this.queIndex + new Date().getTime();
  1259. this.groupCheckList = [];
  1260. let selectGropuIdList = this.previewGroupId
  1261. ? JSON.parse(this.previewGroupId)
  1262. : [];
  1263. this.groupCheckList = [];
  1264. if (_this.contextData) {
  1265. // const list = _this.contextData;
  1266. // if (list && list.length > 0) {
  1267. // _this.queList = list;
  1268. // _this.cur = list[_this.queIndex];
  1269. _this.queTotal = 1;
  1270. // _this.cur.cur_fn_data.forEach((item) => {
  1271. // item.table_list.forEach((items) => {
  1272. // items.forEach((itemss) => {
  1273. // if (itemss.data && itemss.data.type == "NewWord_chs") {
  1274. // _this.NNPENewWordList = _this.NNPENewWordList.concat(
  1275. // itemss.data.option
  1276. // );
  1277. // } else if (itemss.data && itemss.data.type == "notes_chs") {
  1278. // _this.NNPEAnnotationList = _this.NNPEAnnotationList.concat(
  1279. // itemss.data.option
  1280. // );
  1281. // }
  1282. // });
  1283. // });
  1284. // });
  1285. // }
  1286. _this.cur = _this.contextData;
  1287. _this.cur.cur_fn_data.forEach((item, index) => {
  1288. if (item.hasOwnProperty("z_title_detail")) {
  1289. if (item.z_title_detail.wordsList.length > 0) {
  1290. item.z_title_detail.wordsList.forEach((sItem, sIndex) => {
  1291. this.mergeWordSymbol(sItem);
  1292. sItem.fontColor =
  1293. this.themeColor === "green"
  1294. ? "#24b99e"
  1295. : this.themeColor === "brown"
  1296. ? "#bd8865"
  1297. : "#e35454";
  1298. sItem.fontSize = "16px";
  1299. sItem.fontWeight = "bold";
  1300. });
  1301. }
  1302. this.$set(item.z_title_detail, "config", {
  1303. fontColor:
  1304. this.themeColor === "green"
  1305. ? "#24b99e"
  1306. : this.themeColor === "brown"
  1307. ? "#bd8865"
  1308. : "#e35454",
  1309. fontFamily:
  1310. "Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, sans-serif, alabo",
  1311. fontSize: "16px",
  1312. fontWeight: "bold"
  1313. });
  1314. }
  1315. if (item.hasOwnProperty("f_title_detail")) {
  1316. if (item.f_title_detail.wordsList.length > 0) {
  1317. item.f_title_detail.wordsList.forEach((sItem, sIndex) => {
  1318. this.mergeWordSymbol(sItem);
  1319. sItem.fontColor = "#000000";
  1320. sItem.fontSize = "16px";
  1321. });
  1322. }
  1323. this.$set(item.f_title_detail, "config", {
  1324. fontColor: "#000000",
  1325. fontFamily:
  1326. "Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif",
  1327. fontSize: "16px"
  1328. });
  1329. }
  1330. if (item.hasOwnProperty("l_title_detail")) {
  1331. if (item.l_title_detail.wordsList.length > 0) {
  1332. item.l_title_detail.wordsList.forEach((sItem, sIndex) => {
  1333. this.mergeWordSymbol(sItem);
  1334. sItem.fontColor = "#000000";
  1335. sItem.fontSize = "16px";
  1336. });
  1337. }
  1338. this.$set(item.l_title_detail, "config", {
  1339. fontColor: "#000000",
  1340. fontFamily:
  1341. "Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, sans-serif, alabo",
  1342. fontSize: "16px"
  1343. });
  1344. }
  1345. this.groupCheckList.push(false);
  1346. selectGropuIdList.forEach(itemId => {
  1347. itemId.forEach(itemIds => {
  1348. if (item.group_id && itemIds.indexOf(item.group_id[0]) > -1) {
  1349. item.previewShow = true;
  1350. }
  1351. });
  1352. });
  1353. item.showSubmit = false;
  1354. item.table_list.forEach((items, indexs) => {
  1355. items.forEach((itemss, indexss) => {
  1356. if (itemss.data && itemss.type) {
  1357. if (
  1358. (this.previewType &&
  1359. this.previewType == "previewCheckShow" &&
  1360. (JSON.parse(this.previewGroupId).length == 0 ||
  1361. this.previewGroupId.indexOf(item.group_id[0]) > -1)) ||
  1362. !this.previewType
  1363. ) {
  1364. if (
  1365. itemss.type != "article_chs" &&
  1366. itemss.type != "NewWord_chs" &&
  1367. itemss.type != "dialogue_article_chs" &&
  1368. itemss.type != "notes_chs" &&
  1369. itemss.type != "voice_matrix" &&
  1370. itemss.type != "upload_control_chs" &&
  1371. itemss.type != "upload_control_preview_chs" &&
  1372. itemss.type != "record_control_mini" &&
  1373. itemss.type != "record_control_normal" &&
  1374. itemss.type != "record_control_pro" &&
  1375. itemss.type != "record_control_promax" &&
  1376. itemss.type != "text_problem_chs" &&
  1377. itemss.type != "newWord_preview_chs" &&
  1378. itemss.type != "CourseStart_chs" &&
  1379. itemss.type != "tinydemo_chs" &&
  1380. itemss.type != "video_chs" &&
  1381. itemss.type != "play_record_chs" &&
  1382. itemss.type != "upload_pdf_chs" &&
  1383. itemss.type != "options_list_chs" &&
  1384. itemss.type != "sentence_listen_read_chs" &&
  1385. itemss.type != "imgage_image"
  1386. ) {
  1387. item.showSubmit = true;
  1388. }
  1389. }
  1390. // else if (
  1391. // !this.previewType ||
  1392. // this.previewType != "previewCheckShow"
  1393. // ) {
  1394. // item.showSubmit = true;
  1395. // }
  1396. }
  1397. if (itemss.data && itemss.data.type == "NewWord_chs") {
  1398. _this.NpcNewWordMp3 =
  1399. itemss.data && itemss.data.mp3_list && itemss.data.mp3_list[0]
  1400. ? itemss.data.mp3_list[0].id
  1401. : "";
  1402. itemss.data.option.forEach(itemso => {
  1403. itemso.forEach(itemsos => {
  1404. itemsos.newWordMp3 = _this.NpcNewWordMp3;
  1405. });
  1406. });
  1407. _this.NNPENewWordList = _this.NNPENewWordList.concat(
  1408. itemss.data.option
  1409. );
  1410. } else if (itemss.data && itemss.data.type == "notes_chs") {
  1411. _this.NNPEAnnotationList = _this.NNPEAnnotationList.concat(
  1412. itemss.data.option
  1413. );
  1414. }
  1415. let Bookanswer = this.bookAnswerContent;
  1416. if (Bookanswer) {
  1417. if (this.TaskModel == "ANSWER") {
  1418. let token = getToken();
  1419. let roleAnswer = "studentAnswer";
  1420. if (token) {
  1421. let userInfor = JSON.parse(token);
  1422. let user_type = userInfor.user_type;
  1423. if (user_type == "TEACHER") {
  1424. roleAnswer = "studentAnswer";
  1425. } else {
  1426. roleAnswer = "userAnswer";
  1427. }
  1428. }
  1429. _this.judgeAnswersList = [roleAnswer, "standardAnswer"];
  1430. } else {
  1431. _this.judgeAnswersList = [""];
  1432. }
  1433. let answerData = JSON.parse(Bookanswer);
  1434. if (answerData && itemss.data) {
  1435. let BookanswerRes =
  1436. answerData.length > 0 &&
  1437. answerData[index].table_list &&
  1438. answerData[index].table_list.length > 0 &&
  1439. answerData[index].table_list[indexs].length > 0 &&
  1440. answerData[index].table_list[indexs][indexss].data
  1441. ? answerData[index].table_list[indexs][indexss].data
  1442. .Bookanswer
  1443. : [];
  1444. _this.$set(itemss.data, "Bookanswer", BookanswerRes);
  1445. }
  1446. } else {
  1447. _this.judgeAnswersList = [""];
  1448. }
  1449. });
  1450. });
  1451. item.ShowstandardAnswer = Boolean(
  1452. JSON.stringify(item.table_list).match(/\[JUDGE##F##JUDGE\]/g)
  1453. );
  1454. });
  1455. }
  1456. this.$forceUpdate();
  1457. },
  1458. // 词和标点合一起
  1459. mergeWordSymbol(sItem) {
  1460. if (this.titleChsFhList.indexOf(sItem.chs) > -1) {
  1461. sItem.isShow = false;
  1462. } else {
  1463. sItem.isShow = true;
  1464. }
  1465. },
  1466. // 上一页
  1467. handleNNPEprev() {
  1468. let _this = this;
  1469. _this.puaseAudio();
  1470. if (_this.queIndex == 0) {
  1471. this.idArr.forEach((item, i) => {
  1472. if (item == _this.currentTreeID) {
  1473. if (i == 0) {
  1474. _this.preClick = false;
  1475. _this.nextClick = true;
  1476. } else {
  1477. _this.changeId(this.idArr[i - 1]);
  1478. _this.preClick = true;
  1479. _this.nextClick = true;
  1480. }
  1481. }
  1482. });
  1483. } else {
  1484. _this.queIndex -= 1;
  1485. _this.watchIndex = _this.queIndex + new Date().getTime();
  1486. _this.cur = _this.queList[_this.queIndex];
  1487. }
  1488. },
  1489. // 递归寻找相同的目录并保存目录的pid
  1490. seekCurrentTree(item) {
  1491. if (item.is_courseware == "true") {
  1492. this.idArr.push(item.id);
  1493. }
  1494. if (item.children) {
  1495. item.children.forEach((it, index) => {
  1496. if (it.is_courseware == "true") {
  1497. this.idArr.push(it.id);
  1498. }
  1499. if (it.children) {
  1500. this.seekCurrentTree(it);
  1501. }
  1502. });
  1503. }
  1504. },
  1505. puaseAudio() {
  1506. let audio = document.getElementsByTagName("audio");
  1507. if (
  1508. audio &&
  1509. audio.length > 0 &&
  1510. window.location.href.indexOf("GCLS-Learn") == -1
  1511. ) {
  1512. audio.forEach(item => {
  1513. item.pause();
  1514. });
  1515. }
  1516. let video = document.getElementsByTagName("video");
  1517. if (
  1518. video &&
  1519. video.length > 0 &&
  1520. window.location.href.indexOf("GCLS-Learn") == -1
  1521. ) {
  1522. video.forEach(item => {
  1523. item.pause();
  1524. });
  1525. }
  1526. },
  1527. // 下一页
  1528. handleNNPEnext() {
  1529. const _this = this;
  1530. _this.puaseAudio();
  1531. if (_this.queIndex == _this.queTotal - 1) {
  1532. this.idArr.forEach((item, i) => {
  1533. if (item == _this.currentTreeID) {
  1534. if (i == this.idArr.length - 1) {
  1535. _this.nextClick = false;
  1536. _this.preClick = true;
  1537. } else {
  1538. _this.changeId(this.idArr[i + 1]);
  1539. _this.nextClick = true;
  1540. _this.preClick = true;
  1541. }
  1542. }
  1543. });
  1544. } else {
  1545. _this.queIndex += 1;
  1546. _this.watchIndex = _this.queIndex + new Date().getTime();
  1547. _this.cur = _this.queList[_this.queIndex];
  1548. }
  1549. },
  1550. submitUserAnswerNPC() {
  1551. this.handleAnswerTimeEnd();
  1552. let contextDataStr = JSON.stringify(this.contextData);
  1553. if (!contextDataStr) {
  1554. return;
  1555. }
  1556. let userErrorNumberTotal = 0;
  1557. let userRightNumberTotal = 0;
  1558. let errReg = /\[JUDGE##F##JUDGE\]/g;
  1559. let rightReg = /\[JUDGE##T##JUDGE\]/g;
  1560. if (errReg.test(contextDataStr)) {
  1561. let errorArr = contextDataStr.match(/\[JUDGE##F##JUDGE\]/g);
  1562. userErrorNumberTotal = errorArr.length;
  1563. }
  1564. if (rightReg.test(contextDataStr)) {
  1565. let rightArr = contextDataStr.match(/\[JUDGE##T##JUDGE\]/g);
  1566. userRightNumberTotal = rightArr.length;
  1567. }
  1568. let contextData = JSON.parse(contextDataStr);
  1569. let result = [];
  1570. contextData.cur_fn_data.forEach((item, index) => {
  1571. result[index] = {
  1572. table_list: []
  1573. };
  1574. item.table_list.forEach((items, indexs) => {
  1575. result[index].table_list[indexs] = [];
  1576. items.forEach((itemss, indexss) => {
  1577. if (itemss.data) {
  1578. let Bookanswer = itemss.data.Bookanswer;
  1579. let obj = {
  1580. data: {
  1581. Bookanswer
  1582. }
  1583. };
  1584. result[index].table_list[indexs][indexss] = obj;
  1585. } else {
  1586. result[index].table_list[indexs][indexss] = {
  1587. data: null
  1588. };
  1589. }
  1590. });
  1591. });
  1592. });
  1593. this.$emit(
  1594. "finishTaskMaterial",
  1595. JSON.stringify(result),
  1596. this.answerTime,
  1597. userRightNumberTotal,
  1598. userErrorNumberTotal
  1599. );
  1600. },
  1601. // 开始计算答题用时
  1602. handleAnswerTimeStart() {
  1603. this.answerTime = 0;
  1604. window.clearInterval(this.answerTimeInterval);
  1605. this.answerTimeInterval = window.setInterval(() => {
  1606. this.answerTime++;
  1607. }, 1000);
  1608. },
  1609. // 结束计算答题用时
  1610. handleAnswerTimeEnd() {
  1611. window.clearInterval(this.answerTimeInterval);
  1612. },
  1613. // 提交选中groupid
  1614. submitPreviewGroupId() {
  1615. return JSON.stringify(this.groupIndexList);
  1616. },
  1617. forupdata(indexI, type) {
  1618. if (type === "all") {
  1619. this.groupIndexList = [];
  1620. this.cur.cur_fn_data.forEach((item, index) => {
  1621. this.groupIndexList.push(this.cur.cur_fn_data[index].group_id);
  1622. });
  1623. } else if (
  1624. this.groupIndexList
  1625. .toString()
  1626. .indexOf(this.cur.cur_fn_data[indexI].group_id.toString()) == -1
  1627. ) {
  1628. this.groupIndexList.push(this.cur.cur_fn_data[indexI].group_id);
  1629. } else {
  1630. this.groupIndexList.forEach((items, indexs) => {
  1631. if (
  1632. items.toString() == this.cur.cur_fn_data[indexI].group_id.toString()
  1633. ) {
  1634. this.groupIndexList.splice(indexs, 1);
  1635. return false;
  1636. }
  1637. });
  1638. }
  1639. this.groupCheckList.forEach((item, index) => {
  1640. this.groupCheckList[index] = false;
  1641. });
  1642. if (type === "all") {
  1643. } else {
  1644. this.isIndeterminate = false;
  1645. }
  1646. this.checkAllNPC =
  1647. this.groupIndexList.length === this.cur.cur_fn_data.length;
  1648. this.cur.cur_fn_data.forEach((item, index) => {
  1649. if (
  1650. this.groupIndexList.toString().indexOf(item.group_id.toString()) > -1
  1651. ) {
  1652. this.groupCheckList[index] = true;
  1653. if (type === "all") {
  1654. } else {
  1655. this.isIndeterminate = true;
  1656. }
  1657. }
  1658. });
  1659. this.$forceUpdate();
  1660. },
  1661. submitLookAnswer(ItemIndex) {
  1662. let contextData = this.contextData;
  1663. contextData.cur_fn_data.forEach((item, index) => {
  1664. if (index == ItemIndex) {
  1665. item.showPreview = true;
  1666. } else {
  1667. item.showPreview = false;
  1668. }
  1669. });
  1670. this.visiblePreviewDialog = true;
  1671. // this.submitUserAnswerNPC();
  1672. },
  1673. handleCheckAllChangeNPC(val) {
  1674. if (val) {
  1675. this.forupdata("", "all");
  1676. } else {
  1677. this.groupCheckList.forEach((item, index) => {
  1678. this.groupCheckList[index] = false;
  1679. });
  1680. this.groupIndexList = [];
  1681. this.isIndeterminate = false;
  1682. }
  1683. }
  1684. } // 如果页面有keep-alive缓存功能,这个函数会触发
  1685. };
  1686. </script>
  1687. <style lang="scss" scoped>
  1688. //@import url(); 引入公共css类
  1689. .NPC-Big-Book-preview {
  1690. width: 860px;
  1691. margin: 0 auto;
  1692. position: relative;
  1693. padding-bottom: 120px;
  1694. .NNPE-title {
  1695. background: #e35454;
  1696. border-radius: 0px 0px 16px 16px;
  1697. padding: 7px 24px;
  1698. position: relative;
  1699. height: 64px;
  1700. display: flex;
  1701. align-items: center;
  1702. &.NNPE-title-gray {
  1703. background: #eeeeee;
  1704. border-radius: 0;
  1705. margin-top: 24px;
  1706. .NNPE-operate {
  1707. position: absolute;
  1708. top: 10px;
  1709. right: 20px;
  1710. a {
  1711. background: #fff url("../../assets/newImage/common/btn-pre-black.png")
  1712. center no-repeat;
  1713. background-size: 24px;
  1714. &.btn-next {
  1715. background: #fff
  1716. url("../../assets/newImage/common/btn-next-black.png") center
  1717. no-repeat;
  1718. background-size: 24px;
  1719. }
  1720. &:hover {
  1721. background-color: #fff;
  1722. }
  1723. &:active {
  1724. background-color: #fff;
  1725. }
  1726. &.btn-prev-disabled,
  1727. &.btn-next-disabled {
  1728. background-color: rgba(0, 0, 0, 0.25);
  1729. }
  1730. }
  1731. }
  1732. }
  1733. h1 {
  1734. color: #ffffff;
  1735. font-weight: bold;
  1736. font-size: 16px;
  1737. line-height: 150%;
  1738. margin: 0;
  1739. }
  1740. .NNPE-title-left {
  1741. display: flex;
  1742. color: #ffffff;
  1743. font-size: 18px;
  1744. line-height: 18px;
  1745. align-items: center;
  1746. .NNPE-title-item {
  1747. margin-right: 12px;
  1748. }
  1749. .content-con {
  1750. margin: 4px 0;
  1751. font-family: "robot";
  1752. &.hasCn,
  1753. &.hanzi {
  1754. font-family: "FZJCGFKTK";
  1755. }
  1756. &.en {
  1757. font-family: "robot";
  1758. }
  1759. }
  1760. .content-en {
  1761. font-weight: normal;
  1762. line-height: 18px;
  1763. font-family: "robot";
  1764. }
  1765. .NNPE-title-item-en {
  1766. font-weight: normal;
  1767. line-height: 12px;
  1768. font-family: "robot";
  1769. font-size: 12px;
  1770. margin: 0;
  1771. }
  1772. .con-box {
  1773. display: flex;
  1774. flex-flow: wrap;
  1775. justify-content: center;
  1776. align-items: flex-end;
  1777. .con-item {
  1778. text-align: center;
  1779. padding: 0 1px;
  1780. }
  1781. span {
  1782. display: block;
  1783. }
  1784. .pinyin {
  1785. font-family: "GB-PINYINOK-B";
  1786. font-size: 12px;
  1787. line-height: 12px;
  1788. height: 12px;
  1789. &.noFont {
  1790. font-family: initial;
  1791. }
  1792. }
  1793. .synthesis-box {
  1794. display: flex;
  1795. }
  1796. }
  1797. }
  1798. .NNPE-operate {
  1799. position: absolute;
  1800. top: 10px;
  1801. right: 20px;
  1802. a {
  1803. background: #e35454 url("../../assets/newImage/common/btn-pre.png")
  1804. center no-repeat;
  1805. background-size: 24px;
  1806. border-radius: 4px;
  1807. width: 44px;
  1808. height: 44px;
  1809. display: inline-block;
  1810. margin: 0 4px;
  1811. &.btn-next {
  1812. background: #e35454 url("../../assets/newImage/common/btn-next.png")
  1813. center no-repeat;
  1814. background-size: 24px;
  1815. }
  1816. &:hover {
  1817. background-color: #f76565;
  1818. }
  1819. &:active {
  1820. background-color: #d24444;
  1821. }
  1822. &.btn-prev-disabled,
  1823. &.btn-next-disabled {
  1824. background-color: rgba(0, 0, 0, 0.25);
  1825. cursor: not-allowed;
  1826. }
  1827. }
  1828. }
  1829. }
  1830. .classTopic-box {
  1831. background: #e35454;
  1832. border-radius: 8px;
  1833. width: 780px;
  1834. margin: 24px auto 0 auto;
  1835. text-align: center;
  1836. padding: 8px 24px;
  1837. span {
  1838. font-size: 16px;
  1839. line-height: 150%;
  1840. color: #ffffff;
  1841. padding: 0 1px;
  1842. &.cn {
  1843. font-family: "FZJCGFKTK";
  1844. }
  1845. &.en {
  1846. font-family: "robot";
  1847. }
  1848. &.pinyin {
  1849. font-family: "GB-PINYINOK-B";
  1850. }
  1851. }
  1852. }
  1853. .NNPE-Book-content-inner {
  1854. padding: 0 40px;
  1855. .NNPE-Book-content-item {
  1856. position: relative;
  1857. }
  1858. .NNPE-Book-content-item-checkbox {
  1859. position: absolute;
  1860. left: -30px;
  1861. top: 36px;
  1862. }
  1863. > div.title-box-preview {
  1864. padding-top: 32px;
  1865. .title-big {
  1866. display: flex;
  1867. b {
  1868. min-width: 39px;
  1869. height: 24px;
  1870. background: #e35454;
  1871. border-radius: 8px;
  1872. color: #ffffff;
  1873. font-family: "robot";
  1874. display: inline-block;
  1875. text-align: center;
  1876. font-size: 16px;
  1877. line-height: 150%;
  1878. margin-right: 12px;
  1879. padding: 0 4px;
  1880. }
  1881. h2 {
  1882. color: #e35454;
  1883. font-size: 16px;
  1884. line-height: 150%;
  1885. font-weight: bold;
  1886. white-space: pre-wrap;
  1887. word-break: break-word;
  1888. margin: 0;
  1889. }
  1890. h3 {
  1891. color: #000000;
  1892. font-size: 16px;
  1893. line-height: 150%;
  1894. font-weight: normal;
  1895. margin: 0;
  1896. white-space: pre-wrap;
  1897. word-break: break-word;
  1898. }
  1899. .title-box-right-index {
  1900. padding-left: 51px;
  1901. }
  1902. }
  1903. .title-little {
  1904. display: flex;
  1905. margin-bottom: 24px;
  1906. &.marginTop {
  1907. margin-top: 24px;
  1908. }
  1909. &.marginTop-8 {
  1910. margin-top: 8px;
  1911. }
  1912. b,
  1913. p {
  1914. color: #000000;
  1915. font-size: 16px;
  1916. line-height: 150%;
  1917. font-weight: normal;
  1918. margin: 0;
  1919. white-space: pre-wrap;
  1920. word-break: break-word;
  1921. padding-right: 3px;
  1922. }
  1923. }
  1924. }
  1925. .NNPE-tableList {
  1926. background: #fff;
  1927. border-radius: 8px;
  1928. // padding: 12px 8px;
  1929. &.NNPE-tableList-hasBg {
  1930. background: #f7f7f7;
  1931. border: 1px solid rgba(0, 0, 0, 0.1);
  1932. box-sizing: border-box;
  1933. border-radius: 8px;
  1934. }
  1935. .NNPE-tableList-tr {
  1936. display: flex;
  1937. justify-content: space-between;
  1938. // flex-flow: wrap;
  1939. .NNPE-tableList-item {
  1940. width: 100%;
  1941. // margin: 12px 16px;
  1942. // padding: 16px;
  1943. // background: #FFFFFF;
  1944. // border-radius: 4px;
  1945. display: flex;
  1946. flex-flow: wrap;
  1947. justify-content: center;
  1948. &.NNPE-tableList-item-noMargin {
  1949. margin: 0;
  1950. }
  1951. &.NNPE-tableList-item2 {
  1952. width: 378px;
  1953. }
  1954. &.NNPE-tableList-item3 {
  1955. width: 244px;
  1956. }
  1957. &.NNPE-tableList-item4 {
  1958. width: 195px;
  1959. }
  1960. }
  1961. }
  1962. }
  1963. }
  1964. .submitAnswer {
  1965. width: 160px;
  1966. height: 44px;
  1967. border-radius: 4px;
  1968. font-size: 16px;
  1969. line-height: 44px;
  1970. text-align: center;
  1971. font-family: robot;
  1972. background: #e35454;
  1973. color: #fff;
  1974. margin-left: 16px;
  1975. &:hover {
  1976. background-color: #f76565;
  1977. }
  1978. &:active {
  1979. background-color: #d24444;
  1980. }
  1981. }
  1982. }
  1983. .submitLookAnswer {
  1984. color: #fff;
  1985. font-weight: 700;
  1986. font-size: 16px;
  1987. line-height: 24px;
  1988. width: 106px;
  1989. height: 40px;
  1990. background: #e35454;
  1991. border-radius: 8px;
  1992. display: inline-block;
  1993. line-height: 40px;
  1994. text-align: center;
  1995. font-family: "sourceR";
  1996. }
  1997. .NPC-Big-Book-preview-green {
  1998. .submitLookAnswer {
  1999. background: #24b99e;
  2000. }
  2001. .NNPE-title {
  2002. background: #24b99e;
  2003. .NNPE-operate {
  2004. a {
  2005. background: #24b99e url("../../assets/newImage/common/btn-pre.png")
  2006. center no-repeat;
  2007. background-size: 24px;
  2008. &.btn-next {
  2009. background: #24b99e url("../../assets/newImage/common/btn-next.png")
  2010. center no-repeat;
  2011. background-size: 24px;
  2012. }
  2013. &:hover {
  2014. background-color: #3dd4b8;
  2015. }
  2016. &:active {
  2017. background-color: #1fa189;
  2018. }
  2019. }
  2020. }
  2021. }
  2022. .submitAnswer {
  2023. background: #24b99e;
  2024. &:hover {
  2025. background-color: #3dd4b8;
  2026. }
  2027. &:active {
  2028. background-color: #1fa189;
  2029. }
  2030. }
  2031. .classTopic-box {
  2032. background: #24b99e;
  2033. }
  2034. .NNPE-Book-content-inner {
  2035. > div.title-box-preview {
  2036. .title-big {
  2037. b {
  2038. background: #24b99e;
  2039. }
  2040. h2 {
  2041. color: #24b99e;
  2042. }
  2043. }
  2044. }
  2045. }
  2046. }
  2047. .NPC-Big-Book-preview-brown {
  2048. .submitLookAnswer {
  2049. background: #bd8865;
  2050. }
  2051. .NNPE-title {
  2052. background: #bd8865;
  2053. .NNPE-operate {
  2054. a {
  2055. background: #bd8865 url("../../assets/newImage/common/btn-pre.png")
  2056. center no-repeat;
  2057. background-size: 24px;
  2058. &.btn-next {
  2059. background: #bd8865 url("../../assets/newImage/common/btn-next.png")
  2060. center no-repeat;
  2061. background-size: 24px;
  2062. }
  2063. &:hover {
  2064. background-color: #d6a687;
  2065. }
  2066. &:active {
  2067. background-color: #a37557;
  2068. }
  2069. }
  2070. }
  2071. }
  2072. .submitAnswer {
  2073. background: #bd8865;
  2074. &:hover {
  2075. background-color: #d6a687;
  2076. }
  2077. &:active {
  2078. background-color: #a37557;
  2079. }
  2080. }
  2081. .classTopic-box {
  2082. background: #bd8865;
  2083. }
  2084. .NNPE-Book-content-inner {
  2085. > div.title-box-preview {
  2086. .title-big {
  2087. b {
  2088. background: #bd8865;
  2089. }
  2090. h2 {
  2091. color: #bd8865;
  2092. }
  2093. }
  2094. }
  2095. }
  2096. }
  2097. </style>
  2098. <style lang="scss">
  2099. .NNPE-Book-content-item-checkbox {
  2100. .el-checkbox__input.is-indeterminate .el-checkbox__inner::before {
  2101. top: 9px;
  2102. }
  2103. .el-checkbox__inner {
  2104. border: 2px solid #4a99ea;
  2105. width: 24px;
  2106. height: 24px;
  2107. }
  2108. .el-checkbox__inner::after {
  2109. border-width: 2px;
  2110. height: 11px;
  2111. left: 8px;
  2112. top: 2px;
  2113. }
  2114. }
  2115. .previewDialog {
  2116. .el-dialog {
  2117. border-radius: 20px;
  2118. }
  2119. .el-dialog__body,
  2120. .el-dialog__header {
  2121. padding: 0;
  2122. }
  2123. .previewDialog-title {
  2124. padding: 26px 40px;
  2125. border-bottom: 1px solid rgba(51, 51, 51, 0.1);
  2126. position: relative;
  2127. h2 {
  2128. font-weight: 700;
  2129. font-size: 20px;
  2130. line-height: 28px;
  2131. margin: 0;
  2132. font-family: "D-DIN";
  2133. white-space: pre-wrap;
  2134. word-break: break-word;
  2135. }
  2136. a {
  2137. position: absolute;
  2138. width: 32px;
  2139. height: 32px;
  2140. right: 40px;
  2141. top: 26px;
  2142. img {
  2143. width: 100%;
  2144. height: 100%;
  2145. }
  2146. }
  2147. }
  2148. .previewDialog-content {
  2149. max-height: 70vh;
  2150. overflow-y: auto;
  2151. }
  2152. }
  2153. </style>