Preview.vue 67 KB

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