Preview.vue 130 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653
  1. <!-- -->
  2. <template>
  3. <div
  4. v-if="cur"
  5. class="NPC-Big-Book-preview adult-book-preview-sty"
  6. :class="[
  7. 'NPC-Big-Book-preview-' + themeColor,
  8. isPhone ? 'NPC-Big-Book-preview-phone' : ''
  9. ]"
  10. >
  11. <template v-if="isPhone">
  12. <div class="NNPE-title NNPE-title-top">
  13. <!-- 页眉 -->
  14. <div
  15. class="NNPE-title-left"
  16. :style="{ fontSize: baseSizePhone + 4 + 'px' }"
  17. >
  18. <div
  19. v-for="(item, index) in cur.detailList"
  20. :key="index"
  21. class="NNPE-title-item"
  22. >
  23. <template
  24. v-if="
  25. item.detail &&
  26. item.detail.wordsList &&
  27. item.detail.wordsList.length == 0
  28. "
  29. >
  30. <p
  31. v-if="item.detail.sentence"
  32. :class="[
  33. 'content-con',
  34. /^[\u4e00-\u9fa5]/.test(item.detail.sentence) ? 'hasCn' : ''
  35. ]"
  36. v-html="item.detail.sentence"
  37. />
  38. </template>
  39. <template v-else>
  40. <div v-if="item.detail && item.detail.resArr" class="con-box">
  41. <div
  42. v-for="(itemCon, indexCon) in item.detail.resArr"
  43. v-show="itemCon.isShow"
  44. :key="indexCon"
  45. :class="['con-item', indexCon === 0 ? 'con-item-0' : '']"
  46. >
  47. <template
  48. v-if="
  49. item.detail &&
  50. item.detail.wordsList &&
  51. item.detail.wordsList[indexCon + 1] &&
  52. item.detail.wordsList[indexCon + 1].chs &&
  53. chsFhList.indexOf(
  54. item.detail.wordsList[indexCon + 1].chs
  55. ) > -1
  56. "
  57. >
  58. <div class="synthesis-box">
  59. <div>
  60. <span
  61. v-if="itemCon.pinyin"
  62. class="pinyin"
  63. :class="[
  64. noFont.indexOf(itemCon.pinyin) > -1 ? 'noFont' : ''
  65. ]"
  66. >{{ itemCon.pinyin }}</span
  67. >
  68. <span
  69. class="content-con"
  70. :class="
  71. [/^[0-9]*$/.test(itemCon.chs)]
  72. ? /^[\u4e00-\u9fa5]/.test(itemCon.chs)
  73. ? 'hanzi'
  74. : 'en'
  75. : ''
  76. "
  77. >{{ itemCon.chs }}</span
  78. >
  79. </div>
  80. <div
  81. v-if="item.detail.wordsList[indexCon + 1]"
  82. style="text-align: left"
  83. >
  84. <span
  85. v-if="item.detail.wordsList[indexCon + 1].pinyin"
  86. class="pinyin"
  87. :class="[
  88. noFont.indexOf(
  89. item.detail.wordsList[indexCon + 1].pinyin
  90. ) > -1
  91. ? 'noFont'
  92. : ''
  93. ]"
  94. >{{
  95. item.detail.wordsList[indexCon + 1].pinyin
  96. }}</span
  97. >
  98. <span
  99. class="content-con"
  100. :class="
  101. [
  102. /^[0-9]*$/.test(
  103. item.detail.wordsList[indexCon + 1].chs
  104. )
  105. ]
  106. ? /^[\u4e00-\u9fa5]/.test(
  107. item.detail.wordsList[indexCon + 1].chs
  108. )
  109. ? 'hanzi'
  110. : 'en'
  111. : ''
  112. "
  113. >{{ item.detail.wordsList[indexCon + 1].chs }}</span
  114. >
  115. </div>
  116. </div>
  117. </template>
  118. <template v-else>
  119. <span
  120. v-if="
  121. item.detail &&
  122. !(
  123. item.detail.wordsList &&
  124. item.detail.wordsList[indexCon - 1] &&
  125. item.detail.wordsList[indexCon - 1].chs &&
  126. chsFhList.indexOf(
  127. item.detail.wordsList[indexCon - 1].chs
  128. ) == -1 &&
  129. chsFhList.indexOf(itemCon.chs) > -1
  130. ) &&
  131. itemCon.pinyin
  132. "
  133. class="pinyin"
  134. :class="[
  135. noFont.indexOf(itemCon.pinyin) > -1 ? 'noFont' : ''
  136. ]"
  137. >{{ itemCon.pinyin }}</span
  138. >
  139. <span
  140. v-if="
  141. item.detail &&
  142. !(
  143. item.detail.wordsList &&
  144. item.detail.wordsList[indexCon - 1] &&
  145. item.detail.wordsList[indexCon - 1].chs &&
  146. chsFhList.indexOf(
  147. item.detail.wordsList[indexCon - 1].chs
  148. ) == -1 &&
  149. chsFhList.indexOf(itemCon.chs) > -1
  150. )
  151. "
  152. class="content-con"
  153. :class="
  154. [/^[0-9]*$/.test(itemCon.chs)]
  155. ? /^[\u4e00-\u9fa5]/.test(itemCon.chs)
  156. ? 'hanzi'
  157. : 'en'
  158. : ''
  159. "
  160. >{{ itemCon.chs }}</span
  161. >
  162. </template>
  163. </div>
  164. </div>
  165. </template>
  166. <p
  167. class="NNPE-title-item-en"
  168. v-html="item.en"
  169. :style="{ fontSize: baseSizePhone - 2 + 'px' }"
  170. />
  171. </div>
  172. </div>
  173. </div>
  174. <div class="operater-classTopic">
  175. <div
  176. v-if="isShowTitle && isPhone"
  177. class="NNPE-operate NNPE-operate-phone"
  178. >
  179. <a
  180. class="btn-prev"
  181. :class="[preClick ? '' : 'btn-prev-disabled']"
  182. @click="handleNNPEprev"
  183. :style="{ top: 84 + (baseSizePhone - 14) + 'px' }"
  184. />
  185. <a
  186. class="btn-next"
  187. :class="[nextClick ? '' : 'btn-next-disabled']"
  188. @click="handleNNPEnext"
  189. :style="{ top: 84 + (baseSizePhone - 14) + 'px' }"
  190. />
  191. </div>
  192. <div
  193. v-if="
  194. cur.classTopic && cur.classTopic.length > 0 && cur.classTopic[0].con
  195. "
  196. class="classTopic-box"
  197. >
  198. <span
  199. v-for="(item, index) in cur.classTopic"
  200. :key="index"
  201. :class="item.font"
  202. :style="{ fontSize: baseSizePhone + 2 + 'px' }"
  203. >
  204. {{ item.con }}
  205. </span>
  206. </div>
  207. </div>
  208. <el-checkbox
  209. v-if="previewType && previewType == 'previewCheck'"
  210. v-model="checkAllNPC"
  211. class="NNPE-Book-content-item-checkbox"
  212. :indeterminate="isIndeterminate"
  213. style="margin:20px 0 0 10px"
  214. @change="handleCheckAllChangeNPC"
  215. >全选</el-checkbox
  216. >
  217. <div v-if="cur" class="NNPE-Book-content-inner">
  218. <div
  219. v-for="(item, index) in cur.cur_fn_data"
  220. :key="index"
  221. class="title-box-preview"
  222. :class="[
  223. !previewType ||
  224. previewType == 'previewCheck' ||
  225. (previewType == 'previewCheckShow' && item.previewShow) ||
  226. JSON.parse(previewGroupId).length == 0
  227. ? 'NNPE-Book-content-item'
  228. : ''
  229. ]"
  230. :style="{
  231. marginTop:
  232. item.table_list[0][0] &&
  233. (item.table_list[0][0].type === 'dialogue_article_chs' ||
  234. item.table_list[0][0].type === 'article_chs') &&
  235. item.table_list[0][0].data.articleHidden === false &&
  236. item.table_list.length === 1
  237. ? '-96px'
  238. : '0'
  239. }"
  240. >
  241. <div v-for="(itemJ, indexJ) in judgeAnswersList" :key="indexJ">
  242. <el-checkbox
  243. v-if="
  244. previewType && previewType == 'previewCheck' && item.group_id
  245. "
  246. v-model="groupCheckList[index]"
  247. class="NNPE-Book-content-item-checkbox"
  248. :label="item.group_id"
  249. @change="forupdata(index)"
  250. ><br
  251. /></el-checkbox>
  252. <template
  253. v-if="
  254. !previewType ||
  255. previewType == 'previewCheck' ||
  256. (previewType == 'previewCheckShow' && item.previewShow) ||
  257. JSON.parse(previewGroupId).length == 0
  258. "
  259. >
  260. <template v-if="itemJ != 'standardAnswer'">
  261. <div
  262. v-if="
  263. item.number ||
  264. item.z_title ||
  265. item.f_title ||
  266. (item.z_title_detail && item.z_title_detail.sentence) ||
  267. (item.f_title_detail && item.f_title_detail.sentence)
  268. "
  269. class="title-big"
  270. >
  271. <b
  272. v-if="item.number"
  273. :style="{ fontSize: baseSizePhone + 'px' }"
  274. >{{ item.number }}</b
  275. >
  276. <div
  277. class="title-box-right"
  278. :class="[item.is_textIndex ? 'title-box-right-index' : '']"
  279. >
  280. <template
  281. v-if="item.z_title_detail && item.z_title_detail.sentence"
  282. >
  283. <div class="item-intro">
  284. <OneSentenceTempPhone
  285. :detail="item.z_title_detail"
  286. :task-model="TaskModel"
  287. :bookanswer="[]"
  288. :correct-answer="[]"
  289. :is-input="false"
  290. :fn_check_list="[]"
  291. :py-number="0"
  292. :record_check="[]"
  293. :max-fontsize="baseSizePhone"
  294. />
  295. </div>
  296. </template>
  297. <h2
  298. v-else-if="item.z_title"
  299. v-html="item.z_title"
  300. :style="{ fontSize: baseSizePhone + 'px' }"
  301. />
  302. <template v-if="item.hasOwnProperty('f_title_detail')">
  303. <div
  304. v-if="item.f_title_detail.sentence"
  305. class="item-intro"
  306. >
  307. <OneSentenceTempPhone
  308. :detail="item.f_title_detail"
  309. :task-model="TaskModel"
  310. :bookanswer="[]"
  311. :correct-answer="[]"
  312. :is-input="false"
  313. :fn_check_list="[]"
  314. :py-number="0"
  315. :record_check="[]"
  316. :max-fontsize="baseSizePhone"
  317. :style="{
  318. marginTop:
  319. item.z_title ||
  320. (item.z_title_detail &&
  321. item.z_title_detail.sentence)
  322. ? '8px'
  323. : '0'
  324. }"
  325. />
  326. </div>
  327. </template>
  328. <h3
  329. v-else-if="item.f_title"
  330. :style="{
  331. marginTop:
  332. item.z_title ||
  333. (item.z_title_detail && item.z_title_detail.sentence)
  334. ? '8px'
  335. : '0',
  336. fontSize: baseSizePhone + 'px'
  337. }"
  338. v-html="item.f_title"
  339. />
  340. </div>
  341. </div>
  342. <div
  343. class="title-little"
  344. :class="[
  345. (item.little_title_number ||
  346. item.little_title ||
  347. (item.l_title_detail && item.l_title_detail.sentence)) &&
  348. (item.f_title ||
  349. (item.f_title_detail && item.f_title_detail.sentence))
  350. ? 'marginTop'
  351. : 'marginTop-8'
  352. ]"
  353. :style="{
  354. marginTop:
  355. item.little_title_number ||
  356. item.little_title ||
  357. (item.l_title_detail && item.l_title_detail.sentence)
  358. ? ''
  359. : '0px'
  360. }"
  361. >
  362. <b
  363. v-html="item.little_title_number"
  364. :style="{ fontSize: baseSizePhone + 2 + 'px' }"
  365. />
  366. <template
  367. v-if="item.l_title_detail && item.l_title_detail.sentence"
  368. >
  369. <div class="item-intro">
  370. <OneSentenceTempPhone
  371. :detail="item.l_title_detail"
  372. :task-model="TaskModel"
  373. :bookanswer="[]"
  374. :correct-answer="[]"
  375. :is-input="false"
  376. :fn_check_list="[]"
  377. :py-number="0"
  378. :record_check="[]"
  379. :max-fontsize="baseSizePhone + 2"
  380. />
  381. </div>
  382. </template>
  383. <p
  384. v-else-if="item.little_title"
  385. v-html="item.little_title"
  386. :style="{ fontSize: baseSizePhone + 2 + 'px' }"
  387. />
  388. </div>
  389. </template>
  390. <div
  391. :class="[
  392. 'NNPE-tableList',
  393. item.is_bg ? 'NNPE-tableList-hasBg' : ''
  394. ]"
  395. >
  396. <h6
  397. v-if="itemJ == 'userAnswer' || itemJ == 'studentAnswer'"
  398. class="standardTitle"
  399. >
  400. {{
  401. itemJ == "userAnswer" ? "Your answer" : "Student answers"
  402. }}
  403. </h6>
  404. <h6
  405. v-if="itemJ == 'standardAnswer' && item.ShowstandardAnswer"
  406. class="standardTitle"
  407. >
  408. Standard answer
  409. </h6>
  410. <div
  411. v-for="(items, indexs) in item.table_list_phone"
  412. :key="indexs"
  413. class="NNPE-tableList-tr"
  414. :class="[
  415. indexs === item.table_list_phone.length - 1
  416. ? 'NNPE-tableList-tr-last'
  417. : ''
  418. ]"
  419. >
  420. <div
  421. v-for="(itemss, indexss) in items"
  422. :key="indexss"
  423. :class="[
  424. 'NNPE-tableList-item',
  425. items.length == 1
  426. ? 'NNPE-tableList-item-noMargin'
  427. : 'NNPE-tableList-item' + items.length,
  428. item.table_list_phone[indexs - 1] &&
  429. item.table_list_phone[indexs - 1].length === 2 &&
  430. item.table_list_phone[indexs - 1][0].data &&
  431. item.table_list_phone[indexs - 1][0].data.type ===
  432. 'image' &&
  433. items.length === 1
  434. ? 'NNPE-tableList-item-image'
  435. : ''
  436. ]"
  437. >
  438. <template v-if="itemss.data">
  439. <template v-if="itemss.type == 'ligature_chs'">
  440. <LigaturePhone
  441. :cur-que="itemss.data"
  442. :theme-color="themeColor"
  443. :task-model="TaskModel"
  444. :number="
  445. index +
  446. '_' +
  447. indexs +
  448. '_' +
  449. indexss +
  450. '_' +
  451. currentTreeID
  452. "
  453. :judge-answer="itemJ"
  454. :baseSizePhone="baseSizePhone"
  455. />
  456. </template>
  457. <template v-if="itemss.data.type == 'image'">
  458. <PicturePhone
  459. v-if="refresh"
  460. :cur-que="itemss.data"
  461. :child-type="itemss.type"
  462. :theme-color="themeColor"
  463. :task-model="TaskModel"
  464. :judge-answer="itemJ"
  465. :baseSizePhone="baseSizePhone"
  466. />
  467. </template>
  468. <template
  469. v-if="
  470. itemss.type == 'phrase_chs' &&
  471. itemJ != 'standardAnswer'
  472. "
  473. >
  474. <WordPhrasePhone
  475. v-if="refresh"
  476. :cur-que="itemss.data"
  477. :theme-color="themeColor"
  478. :task-model="TaskModel"
  479. :index-str="
  480. index +
  481. '_' +
  482. indexs +
  483. '_' +
  484. indexss +
  485. '_' +
  486. currentTreeID
  487. "
  488. :judge-answer="itemJ"
  489. :baseSizePhone="baseSizePhone"
  490. />
  491. </template>
  492. <template
  493. v-if="
  494. itemss.type == 'NewWord_chs' &&
  495. itemJ != 'standardAnswer'
  496. "
  497. >
  498. <WordPhrasePhone
  499. v-if="refresh"
  500. :cur-que="itemss.data"
  501. :theme-color="themeColor"
  502. :current-tree-i-d="currentTreeID"
  503. :indexs="indexs"
  504. :indexss="indexss"
  505. :task-model="TaskModel"
  506. :index-str="
  507. index +
  508. '_' +
  509. indexs +
  510. '_' +
  511. indexss +
  512. '_' +
  513. currentTreeID
  514. "
  515. :judge-answer="itemJ"
  516. :baseSizePhone="baseSizePhone"
  517. />
  518. </template>
  519. <template
  520. v-if="
  521. itemss.type == 'annotation_chs' &&
  522. itemJ != 'standardAnswer'
  523. "
  524. >
  525. <WordPhrasePhone
  526. v-if="refresh"
  527. :cur-que="itemss.data"
  528. :theme-color="themeColor"
  529. :task-model="TaskModel"
  530. :index-str="
  531. index +
  532. '_' +
  533. indexs +
  534. '_' +
  535. indexss +
  536. '_' +
  537. currentTreeID
  538. "
  539. :judge-answer="itemJ"
  540. :baseSizePhone="baseSizePhone"
  541. />
  542. </template>
  543. <template
  544. v-if="
  545. itemss.type == 'notes_chs' &&
  546. itemJ != 'standardAnswer'
  547. "
  548. >
  549. <NotesPhone
  550. v-if="refresh"
  551. :cur-que="itemss.data"
  552. :theme-color="themeColor"
  553. :task-model="TaskModel"
  554. :judge-answer="itemJ"
  555. :baseSizePhone="baseSizePhone"
  556. />
  557. </template>
  558. <template
  559. v-if="
  560. itemss.type == 'article_chs' &&
  561. itemJ != 'standardAnswer' &&
  562. itemss.data &&
  563. itemss.data.articleHidden !== false
  564. "
  565. >
  566. <ArticleTemChsPhone
  567. v-if="refresh"
  568. :cur-que="itemss.data"
  569. :n-n-p-e-new-word-list="NNPENewWordList"
  570. :n-n-p-e-new-phrase-list="NNPENewPhraseList"
  571. :n-n-p-e-annotation-list="NNPEAnnotationList"
  572. :theme-color="themeColor"
  573. :current-tree-i-d="currentTreeID"
  574. :task-model="TaskModel"
  575. :judge-answer="itemJ"
  576. :col-length="items.length"
  577. :NpcNewWordMp3="NpcNewWordMp3"
  578. :baseSizePhone="baseSizePhone"
  579. />
  580. </template>
  581. <!-- <template v-if="itemss.type == 'sentence_segword_chs'">
  582. <SentenceSegWordViewChs
  583. :cur-que="itemss.data"
  584. :theme-color="themeColor"
  585. v-if="refresh"
  586. />
  587. </template> -->
  588. <template
  589. v-if="
  590. itemss.type == 'dialogue_article_chs' &&
  591. itemJ != 'standardAnswer' &&
  592. itemss.data &&
  593. itemss.data.articleHidden !== false
  594. "
  595. >
  596. <DialogueArticleViewChsPhone
  597. v-if="refresh"
  598. :cur-que="itemss.data"
  599. :n-n-p-e-new-word-list="NNPENewWordList"
  600. :n-n-p-e-new-phrase-list="NNPENewPhraseList"
  601. :n-n-p-e-annotation-list="NNPEAnnotationList"
  602. :color-box="colorBox"
  603. :theme-color="themeColor"
  604. :current-tree-i-d="currentTreeID"
  605. :task-model="TaskModel"
  606. :judge-answer="itemJ"
  607. :col-length="items.length"
  608. :NpcNewWordMp3="NpcNewWordMp3"
  609. :baseSizePhone="baseSizePhone"
  610. />
  611. </template>
  612. <template v-if="itemss.type == 'dialogue_answer_chs'">
  613. <DialogueAnswerViewChsPhone
  614. v-if="refresh"
  615. :cur-que="itemss.data"
  616. :color-box="colorBox"
  617. :theme-color="themeColor"
  618. :task-model="TaskModel"
  619. :judge-answer="itemJ"
  620. :baseSizePhone="baseSizePhone"
  621. :themeColorPhone="
  622. themeColorPhone[themeColorPhoneIndex]
  623. "
  624. />
  625. </template>
  626. <template v-if="itemss.type == 'input_record_chs'">
  627. <InputHasRecordPhone
  628. v-if="refresh"
  629. :cur-que="itemss.data"
  630. :theme-color="themeColor"
  631. :task-model="TaskModel"
  632. :judge-answer="itemJ"
  633. :baseSizePhone="baseSizePhone"
  634. />
  635. </template>
  636. <template v-if="itemss.type == 'recordHZ_inputPY_chs'">
  637. <TextInputRecordPhone
  638. v-if="refresh"
  639. :cur-que="itemss.data"
  640. :theme-color="themeColor"
  641. :task-model="TaskModel"
  642. :judge-answer="itemJ"
  643. :baseSizePhone="baseSizePhone"
  644. />
  645. </template>
  646. <template
  647. v-if="
  648. itemss.type == 'inputItem_chs' ||
  649. itemss.type == 'sentence_input_chs' ||
  650. itemss.type == 'sentence_judge_chs' ||
  651. itemss.type == 'sentence_record_chs' ||
  652. itemss.type == 'sentence_input_record_chs'
  653. "
  654. >
  655. <SentenceInputPhone
  656. v-if="refresh"
  657. :cur-que="itemss.data"
  658. :theme-color="themeColor"
  659. :task-model="TaskModel"
  660. :judge-answer="itemJ"
  661. :type="itemss.type"
  662. :baseSizePhone="baseSizePhone"
  663. />
  664. </template>
  665. <template v-if="itemss.type == 'NumberCombination_chs'">
  666. <NumberSelectHasRecordPhone
  667. v-if="refresh"
  668. :cur-que="itemss.data"
  669. :theme-color="themeColor"
  670. :task-model="TaskModel"
  671. :judge-answer="itemJ"
  672. :baseSizePhone="baseSizePhone"
  673. />
  674. </template>
  675. <template
  676. v-if="
  677. itemss.type === 'voice_matrix' &&
  678. itemJ != 'standardAnswer'
  679. "
  680. >
  681. <voice-matrix-phone
  682. v-if="refresh"
  683. :cur-que="itemss.data"
  684. :theme-color="themeColor"
  685. :task-model="TaskModel"
  686. :judge-answer="itemJ"
  687. :baseSizePhone="baseSizePhone"
  688. />
  689. </template>
  690. <template v-if="itemss.type === 'select_drag'">
  691. <select-drag-phone
  692. v-if="refresh"
  693. :cur-que="itemss.data"
  694. :theme-color="themeColor"
  695. :task-model="TaskModel"
  696. :judge-answer="itemJ"
  697. :baseSizePhone="baseSizePhone"
  698. />
  699. </template>
  700. <template v-if="itemss.type === 'fill_drag'">
  701. <fill-drag-phone
  702. v-if="refresh"
  703. :cur-que="itemss.data"
  704. :theme-color="themeColor"
  705. :task-model="TaskModel"
  706. :judge-answer="itemJ"
  707. :baseSizePhone="baseSizePhone"
  708. />
  709. </template>
  710. <template v-if="itemss.type === 'config_table'">
  711. <configurable-table-phone
  712. v-if="refresh"
  713. :cur-que="itemss.data"
  714. :theme-color="themeColor"
  715. :task-model="TaskModel"
  716. :judge-answer="itemJ"
  717. :baseSizePhone="baseSizePhone"
  718. />
  719. </template>
  720. <template v-if="itemss.type === 'header_separate'">
  721. <header-separate-phone
  722. v-if="refresh"
  723. :cur-que="itemss.data"
  724. :theme-color="themeColor"
  725. :task-model="TaskModel"
  726. :judge-answer="itemJ"
  727. :baseSizePhone="baseSizePhone"
  728. />
  729. </template>
  730. <template v-if="itemss.type == 'toneSelect_chs'">
  731. <SelectTonePhone
  732. v-if="refresh"
  733. :cur-que="itemss.data"
  734. :theme-color="themeColor"
  735. :task-model="TaskModel"
  736. :judge-answer="itemJ"
  737. :baseSizePhone="baseSizePhone"
  738. />
  739. </template>
  740. <template v-if="itemss.type == 'sudoku_chs'">
  741. <SodukoPhone
  742. v-if="refresh"
  743. :cur-que="itemss.data"
  744. :theme-color="themeColor"
  745. :task-model="TaskModel"
  746. :judge-answer="itemJ"
  747. :baseSizePhone="baseSizePhone"
  748. />
  749. </template>
  750. <template v-if="itemss.type == 'single_chs'">
  751. <SinglePhone
  752. v-if="refresh"
  753. :cur-que="itemss.data"
  754. :theme-color="themeColor"
  755. :task-model="TaskModel"
  756. :judge-answer="itemJ"
  757. :baseSizePhone="baseSizePhone"
  758. />
  759. </template>
  760. <template v-if="itemss.type == 'text_problem_chs'">
  761. <TextProblemPhone
  762. v-if="refresh"
  763. :cur-que="itemss.data"
  764. :theme-color="themeColor"
  765. :task-model="TaskModel"
  766. :judge-answer="itemJ"
  767. :baseSizePhone="baseSizePhone"
  768. />
  769. </template>
  770. <template
  771. v-if="
  772. itemss.type == 'newWord_preview_chs' &&
  773. itemJ != 'standardAnswer'
  774. "
  775. >
  776. <NewWordShowPhone
  777. v-if="refresh"
  778. :cur-que="itemss.data"
  779. :theme-color="themeColor"
  780. :index-str="index + '_' + indexs + '_' + indexss"
  781. :task-model="TaskModel"
  782. :judge-answer="itemJ"
  783. :baseSizePhone="baseSizePhone"
  784. :themeColorPhone="
  785. themeColorPhone[themeColorPhoneIndex]
  786. "
  787. />
  788. </template>
  789. <template
  790. v-if="
  791. itemss.type == 'listen_record_single_syllable_chs'
  792. "
  793. >
  794. <SelectYinjiePhone
  795. v-if="refresh"
  796. :cur-que="itemss.data"
  797. :theme-color="themeColor"
  798. :task-model="TaskModel"
  799. :judge-answer="itemJ"
  800. :baseSizePhone="baseSizePhone"
  801. />
  802. </template>
  803. <template
  804. v-if="itemss.type == 'sentence_listen_read_chs'"
  805. >
  806. <SentenceListenRead
  807. v-if="refresh"
  808. :cur-que="itemss.data"
  809. :theme-color="themeColor"
  810. :task-model="TaskModel"
  811. :judge-answer="itemJ"
  812. :baseSizePhone="baseSizePhone"
  813. />
  814. </template>
  815. <template v-if="itemss.type == 'sort_chs'">
  816. <SentenceSortQPPhone
  817. v-if="refresh"
  818. :cur-que="itemss.data"
  819. :theme-color="themeColor"
  820. :task-model="TaskModel"
  821. :judge-answer="itemJ"
  822. :baseSizePhone="baseSizePhone"
  823. />
  824. </template>
  825. <template
  826. v-if="itemss.type == 'checkbox_self_assessment_chs'"
  827. >
  828. <CheckboxPhone
  829. v-if="refresh"
  830. :cur-que="itemss.data"
  831. :theme-color="themeColor"
  832. :task-model="TaskModel"
  833. :judge-answer="itemJ"
  834. :baseSizePhone="baseSizePhone"
  835. />
  836. </template>
  837. <template
  838. v-if="
  839. (itemss.type == 'record_control_mini' ||
  840. itemss.type == 'record_control_normal' ||
  841. itemss.type == 'record_control_pro' ||
  842. itemss.type == 'record_control_promax') &&
  843. itemJ != 'standardAnswer'
  844. "
  845. >
  846. <RecordModulePhone
  847. v-if="refresh"
  848. :cur-que="itemss.data"
  849. :theme-color="themeColor"
  850. :task-model="TaskModel"
  851. :judge-answer="itemJ"
  852. :baseSizePhone="baseSizePhone"
  853. />
  854. </template>
  855. <template
  856. v-if="
  857. (itemss.type == 'upload_control_chs' ||
  858. itemss.type == 'upload_control_preview_chs') &&
  859. itemJ != 'standardAnswer'
  860. "
  861. >
  862. <UploadControlViewPhone
  863. v-if="refresh"
  864. :cur-que="itemss.data"
  865. :type="itemss.type"
  866. :theme-color="themeColor"
  867. :task-model="TaskModel"
  868. :judge-answer="itemJ"
  869. :baseSizePhone="baseSizePhone"
  870. />
  871. </template>
  872. <template
  873. v-if="
  874. itemss.type == 'CourseStart_chs' &&
  875. itemJ != 'standardAnswer'
  876. "
  877. >
  878. <CourseStartPhone
  879. v-if="refresh"
  880. :cur-que="itemss.data"
  881. :handle-n-n-p-enext="handleNNPEnext"
  882. :theme-color="themeColor"
  883. :task-model="TaskModel"
  884. :judge-answer="itemJ"
  885. :baseSizePhone="baseSizePhone"
  886. />
  887. </template>
  888. <template
  889. v-if="
  890. itemss.type == 'tinydemo_chs' &&
  891. itemJ != 'standardAnswer'
  892. "
  893. >
  894. <TinydemoPhone
  895. v-if="refresh"
  896. :cur-que="itemss.data"
  897. :theme-color="themeColor"
  898. :task-model="TaskModel"
  899. :judge-answer="itemJ"
  900. :baseSizePhone="baseSizePhone"
  901. />
  902. </template>
  903. <template
  904. v-if="
  905. itemss.type == 'video_chs' &&
  906. itemJ != 'standardAnswer'
  907. "
  908. >
  909. <VideoControlPhone
  910. v-if="refresh"
  911. :cur-que="itemss.data"
  912. :type="itemss.type"
  913. :theme-color="themeColor"
  914. :index-str="
  915. index +
  916. '_' +
  917. indexs +
  918. '_' +
  919. indexss +
  920. '_' +
  921. currentTreeID
  922. "
  923. :task-model="TaskModel"
  924. :judge-answer="itemJ"
  925. :baseSizePhone="baseSizePhone"
  926. />
  927. </template>
  928. <template v-if="itemss.type == 'table_chs'">
  929. <TableViewPhone
  930. v-if="refresh"
  931. :cur-que="itemss.data"
  932. :type="itemss.type"
  933. :theme-color="themeColor"
  934. :task-model="TaskModel"
  935. :judge-answer="itemJ"
  936. :baseSizePhone="baseSizePhone"
  937. />
  938. </template>
  939. <template v-if="itemss.type == 'play_record_chs'">
  940. <PlayRecordViewPhone
  941. v-if="refresh"
  942. :cur-que="itemss.data"
  943. :type="itemss.type"
  944. :theme-color="themeColor"
  945. :task-model="TaskModel"
  946. :judge-answer="itemJ"
  947. :baseSizePhone="baseSizePhone"
  948. />
  949. </template>
  950. <template
  951. v-if="
  952. itemss.type == 'upload_pdf_chs' &&
  953. itemJ != 'standardAnswer'
  954. "
  955. >
  956. <PdfViewPhone
  957. v-if="refresh"
  958. :cur-que="itemss.data"
  959. :type="itemss.type"
  960. :theme-color="themeColor"
  961. :task-model="TaskModel"
  962. :judge-answer="itemJ"
  963. :baseSizePhone="baseSizePhone"
  964. />
  965. </template>
  966. <template v-if="itemss.type == 'sentence_segtemp_chs'">
  967. <SentenceModulePhone
  968. v-if="refresh"
  969. :cur-que="itemss.data"
  970. :type="itemss.type"
  971. :theme-color="themeColor"
  972. :task-model="TaskModel"
  973. :judge-answer="itemJ"
  974. :baseSizePhone="baseSizePhone"
  975. />
  976. </template>
  977. <template
  978. v-if="
  979. itemss.type == 'options_list_chs' &&
  980. itemJ != 'standardAnswer'
  981. "
  982. >
  983. <OptionsListPhone
  984. v-if="refresh"
  985. :cur-que="itemss.data"
  986. :theme-color="themeColor"
  987. :index-str="index + '_' + indexs + '_' + indexss"
  988. :task-model="TaskModel"
  989. :judge-answer="itemJ"
  990. :baseSizePhone="baseSizePhone"
  991. />
  992. </template>
  993. <template v-if="itemss.type == 'sentence_single_chs'">
  994. <SentenceMulModulePhone
  995. v-if="refresh"
  996. :cur-que="itemss.data"
  997. :type="itemss.type"
  998. :theme-color="themeColor"
  999. :task-model="TaskModel"
  1000. :judge-answer="itemJ"
  1001. :baseSizePhone="baseSizePhone"
  1002. />
  1003. </template>
  1004. <!-- {{ itemss.type }} -->
  1005. </template>
  1006. </div>
  1007. </div>
  1008. <div
  1009. v-if="isAnswerItemShow && item.showSubmit"
  1010. style="text-align: right; padding: 10px 0px"
  1011. >
  1012. <a
  1013. class="submitLookAnswer"
  1014. @click="submitLookAnswer(index)"
  1015. :style="{ fontSize: baseSizePhone + 'px' }"
  1016. >{{ submitCn ? submitCn : "查看答案" }}</a
  1017. >
  1018. </div>
  1019. </div>
  1020. </template>
  1021. </div>
  1022. </div>
  1023. </div>
  1024. <div v-if="isShowSave" class="NNPE-title NNPE-title-gray">
  1025. <!-- 页眉 v-if="isShowSave"-->
  1026. <a v-if="isShowSave" class="submitAnswer" @click="submitUserAnswerNPC"
  1027. >提交</a
  1028. >
  1029. </div>
  1030. <div class="size-setting">
  1031. <div class="size-show" v-if="sizeSettingFlag">
  1032. <i class="el-icon-arrow-right" @click="sizeSettingFlag = false"></i>
  1033. <span
  1034. :class="[
  1035. 'font-jian-black',
  1036. baseSizePhone === 12 ? 'font-jian-white-disabled' : ''
  1037. ]"
  1038. @click="setFontSize('-')"
  1039. ></span>
  1040. <span :class="['font-img-black']"></span
  1041. ><span
  1042. :class="[
  1043. 'font-jia-black',
  1044. baseSizePhone === 22 ? 'font-jia-white-disabled' : ''
  1045. ]"
  1046. @click="setFontSize('+')"
  1047. ></span>
  1048. <span
  1049. class="theme-color-phone"
  1050. :style="{ background: themeColorPhone[themeColorPhoneIndex] }"
  1051. @click="themeColorPhoneFlag = true"
  1052. ></span>
  1053. <div class="theme-color-phone-list" v-if="themeColorPhoneFlag">
  1054. <span
  1055. :style="{ background: itemColor }"
  1056. v-for="(itemColor, indexColor) in themeColorPhone"
  1057. :key="indexColor"
  1058. :class="[indexColor === themeColorPhoneIndex ? 'active' : '']"
  1059. @click="changeThemeColorPhone(itemColor, indexColor)"
  1060. ></span>
  1061. </div>
  1062. </div>
  1063. <div v-else>
  1064. <i class="el-icon-arrow-left" @click="sizeSettingFlag = true"></i>
  1065. </div>
  1066. </div>
  1067. </template>
  1068. <template v-else>
  1069. <div class="NNPE-title NNPE-title-top">
  1070. <!-- 页眉 -->
  1071. <div class="NNPE-title-left">
  1072. <div
  1073. v-for="(item, index) in cur.detailList"
  1074. :key="index"
  1075. class="NNPE-title-item"
  1076. >
  1077. <template
  1078. v-if="
  1079. item.detail &&
  1080. item.detail.wordsList &&
  1081. item.detail.wordsList.length == 0
  1082. "
  1083. >
  1084. <p
  1085. v-if="item.detail.sentence"
  1086. :class="[
  1087. 'content-con',
  1088. /^[\u4e00-\u9fa5]/.test(item.detail.sentence) ? 'hasCn' : ''
  1089. ]"
  1090. v-html="item.detail.sentence"
  1091. />
  1092. </template>
  1093. <template v-else>
  1094. <div v-if="item.detail && item.detail.resArr" class="con-box">
  1095. <div
  1096. v-for="(itemCon, indexCon) in item.detail.resArr"
  1097. v-show="itemCon.isShow"
  1098. :key="indexCon"
  1099. :class="['con-item', indexCon === 0 ? 'con-item-0' : '']"
  1100. >
  1101. <template
  1102. v-if="
  1103. item.detail &&
  1104. item.detail.wordsList &&
  1105. item.detail.wordsList[indexCon + 1] &&
  1106. item.detail.wordsList[indexCon + 1].chs &&
  1107. chsFhList.indexOf(
  1108. item.detail.wordsList[indexCon + 1].chs
  1109. ) > -1
  1110. "
  1111. >
  1112. <div class="synthesis-box">
  1113. <div>
  1114. <span
  1115. v-if="itemCon.pinyin"
  1116. class="pinyin"
  1117. :class="[
  1118. noFont.indexOf(itemCon.pinyin) > -1 ? 'noFont' : ''
  1119. ]"
  1120. >{{ itemCon.pinyin }}</span
  1121. >
  1122. <span
  1123. class="content-con"
  1124. :class="
  1125. [/^[0-9]*$/.test(itemCon.chs)]
  1126. ? /^[\u4e00-\u9fa5]/.test(itemCon.chs)
  1127. ? 'hanzi'
  1128. : 'en'
  1129. : ''
  1130. "
  1131. >{{ itemCon.chs }}</span
  1132. >
  1133. </div>
  1134. <div
  1135. v-if="item.detail.wordsList[indexCon + 1]"
  1136. style="text-align: left"
  1137. >
  1138. <span
  1139. v-if="item.detail.wordsList[indexCon + 1].pinyin"
  1140. class="pinyin"
  1141. :class="[
  1142. noFont.indexOf(
  1143. item.detail.wordsList[indexCon + 1].pinyin
  1144. ) > -1
  1145. ? 'noFont'
  1146. : ''
  1147. ]"
  1148. >{{
  1149. item.detail.wordsList[indexCon + 1].pinyin
  1150. }}</span
  1151. >
  1152. <span
  1153. class="content-con"
  1154. :class="
  1155. [
  1156. /^[0-9]*$/.test(
  1157. item.detail.wordsList[indexCon + 1].chs
  1158. )
  1159. ]
  1160. ? /^[\u4e00-\u9fa5]/.test(
  1161. item.detail.wordsList[indexCon + 1].chs
  1162. )
  1163. ? 'hanzi'
  1164. : 'en'
  1165. : ''
  1166. "
  1167. >{{ item.detail.wordsList[indexCon + 1].chs }}</span
  1168. >
  1169. </div>
  1170. </div>
  1171. </template>
  1172. <template v-else>
  1173. <span
  1174. v-if="
  1175. item.detail &&
  1176. !(
  1177. item.detail.wordsList &&
  1178. item.detail.wordsList[indexCon - 1] &&
  1179. item.detail.wordsList[indexCon - 1].chs &&
  1180. chsFhList.indexOf(
  1181. item.detail.wordsList[indexCon - 1].chs
  1182. ) == -1 &&
  1183. chsFhList.indexOf(itemCon.chs) > -1
  1184. ) &&
  1185. itemCon.pinyin
  1186. "
  1187. class="pinyin"
  1188. :class="[
  1189. noFont.indexOf(itemCon.pinyin) > -1 ? 'noFont' : ''
  1190. ]"
  1191. >{{ itemCon.pinyin }}</span
  1192. >
  1193. <span
  1194. v-if="
  1195. item.detail &&
  1196. !(
  1197. item.detail.wordsList &&
  1198. item.detail.wordsList[indexCon - 1] &&
  1199. item.detail.wordsList[indexCon - 1].chs &&
  1200. chsFhList.indexOf(
  1201. item.detail.wordsList[indexCon - 1].chs
  1202. ) == -1 &&
  1203. chsFhList.indexOf(itemCon.chs) > -1
  1204. )
  1205. "
  1206. class="content-con"
  1207. :class="
  1208. [/^[0-9]*$/.test(itemCon.chs)]
  1209. ? /^[\u4e00-\u9fa5]/.test(itemCon.chs)
  1210. ? 'hanzi'
  1211. : 'en'
  1212. : ''
  1213. "
  1214. >{{ itemCon.chs }}</span
  1215. >
  1216. </template>
  1217. </div>
  1218. </div>
  1219. </template>
  1220. <p class="NNPE-title-item-en" v-html="item.en" />
  1221. </div>
  1222. </div>
  1223. <div v-if="isShowTitle && !isPhone" class="NNPE-operate">
  1224. <a
  1225. class="btn-prev"
  1226. :class="[preClick ? '' : 'btn-prev-disabled']"
  1227. @click="handleNNPEprev"
  1228. />
  1229. <a
  1230. class="btn-next"
  1231. :class="[nextClick ? '' : 'btn-next-disabled']"
  1232. @click="handleNNPEnext"
  1233. />
  1234. </div>
  1235. </div>
  1236. <div class="operater-classTopic" v-if="isPhone">
  1237. <div
  1238. v-if="isShowTitle && isPhone"
  1239. class="NNPE-operate NNPE-operate-phone"
  1240. >
  1241. <a
  1242. class="btn-prev"
  1243. :class="[preClick ? '' : 'btn-prev-disabled']"
  1244. @click="handleNNPEprev"
  1245. />
  1246. <a
  1247. class="btn-next"
  1248. :class="[nextClick ? '' : 'btn-next-disabled']"
  1249. @click="handleNNPEnext"
  1250. />
  1251. </div>
  1252. <div
  1253. v-if="
  1254. cur.classTopic && cur.classTopic.length > 0 && cur.classTopic[0].con
  1255. "
  1256. class="classTopic-box"
  1257. >
  1258. <span
  1259. v-for="(item, index) in cur.classTopic"
  1260. :key="index"
  1261. :class="item.font"
  1262. >
  1263. {{ item.con }}
  1264. </span>
  1265. </div>
  1266. </div>
  1267. <template v-else>
  1268. <div
  1269. v-if="
  1270. cur.classTopic && cur.classTopic.length > 0 && cur.classTopic[0].con
  1271. "
  1272. class="classTopic-box"
  1273. >
  1274. <span
  1275. v-for="(item, index) in cur.classTopic"
  1276. :key="index"
  1277. :class="item.font"
  1278. >
  1279. {{ item.con }}
  1280. </span>
  1281. </div>
  1282. </template>
  1283. <el-checkbox
  1284. v-if="previewType && previewType == 'previewCheck'"
  1285. v-model="checkAllNPC"
  1286. class="NNPE-Book-content-item-checkbox"
  1287. :indeterminate="isIndeterminate"
  1288. style="margin:20px 0 0 10px"
  1289. @change="handleCheckAllChangeNPC"
  1290. >全选</el-checkbox
  1291. >
  1292. <div v-if="cur" class="NNPE-Book-content-inner">
  1293. <div
  1294. v-for="(item, index) in cur.cur_fn_data"
  1295. :key="index"
  1296. class="title-box-preview"
  1297. :class="[
  1298. !previewType ||
  1299. previewType == 'previewCheck' ||
  1300. (previewType == 'previewCheckShow' && item.previewShow) ||
  1301. JSON.parse(previewGroupId).length == 0
  1302. ? 'NNPE-Book-content-item'
  1303. : ''
  1304. ]"
  1305. :style="{
  1306. marginTop:
  1307. item.table_list[0][0] &&
  1308. (item.table_list[0][0].type === 'dialogue_article_chs' ||
  1309. item.table_list[0][0].type === 'article_chs') &&
  1310. item.table_list[0][0].data.articleHidden === false &&
  1311. item.table_list.length === 1
  1312. ? '-96px'
  1313. : '0'
  1314. }"
  1315. >
  1316. <div v-for="(itemJ, indexJ) in judgeAnswersList" :key="indexJ">
  1317. <el-checkbox
  1318. v-if="
  1319. previewType && previewType == 'previewCheck' && item.group_id
  1320. "
  1321. v-model="groupCheckList[index]"
  1322. class="NNPE-Book-content-item-checkbox"
  1323. :label="item.group_id"
  1324. @change="forupdata(index)"
  1325. ><br
  1326. /></el-checkbox>
  1327. <template
  1328. v-if="
  1329. !previewType ||
  1330. previewType == 'previewCheck' ||
  1331. (previewType == 'previewCheckShow' && item.previewShow) ||
  1332. JSON.parse(previewGroupId).length == 0
  1333. "
  1334. >
  1335. <template v-if="itemJ != 'standardAnswer'">
  1336. <div
  1337. v-if="
  1338. item.number ||
  1339. item.z_title ||
  1340. item.f_title ||
  1341. (item.z_title_detail && item.z_title_detail.sentence) ||
  1342. (item.f_title_detail && item.f_title_detail.sentence)
  1343. "
  1344. class="title-big"
  1345. >
  1346. <b v-if="item.number">{{ item.number }}</b>
  1347. <div
  1348. class="title-box-right"
  1349. :class="[item.is_textIndex ? 'title-box-right-index' : '']"
  1350. >
  1351. <template
  1352. v-if="item.z_title_detail && item.z_title_detail.sentence"
  1353. >
  1354. <div class="item-intro">
  1355. <OneSentenceTemp
  1356. :detail="item.z_title_detail"
  1357. :task-model="TaskModel"
  1358. :bookanswer="[]"
  1359. :correct-answer="[]"
  1360. :is-input="false"
  1361. :fn_check_list="[]"
  1362. :py-number="0"
  1363. :record_check="[]"
  1364. :max-fontsize="'16'"
  1365. />
  1366. </div>
  1367. </template>
  1368. <h2 v-else-if="item.z_title" v-html="item.z_title" />
  1369. <template v-if="item.hasOwnProperty('f_title_detail')">
  1370. <div
  1371. v-if="item.f_title_detail.sentence"
  1372. class="item-intro"
  1373. >
  1374. <OneSentenceTemp
  1375. :detail="item.f_title_detail"
  1376. :task-model="TaskModel"
  1377. :bookanswer="[]"
  1378. :correct-answer="[]"
  1379. :is-input="false"
  1380. :fn_check_list="[]"
  1381. :py-number="0"
  1382. :record_check="[]"
  1383. :max-fontsize="'16'"
  1384. :style="{
  1385. marginTop:
  1386. item.z_title ||
  1387. (item.z_title_detail &&
  1388. item.z_title_detail.sentence)
  1389. ? '8px'
  1390. : '0'
  1391. }"
  1392. />
  1393. </div>
  1394. </template>
  1395. <h3
  1396. v-else-if="item.f_title"
  1397. :style="{
  1398. marginTop:
  1399. item.z_title ||
  1400. (item.z_title_detail && item.z_title_detail.sentence)
  1401. ? '8px'
  1402. : '0'
  1403. }"
  1404. v-html="item.f_title"
  1405. />
  1406. </div>
  1407. </div>
  1408. <div
  1409. class="title-little"
  1410. :class="[
  1411. (item.little_title_number ||
  1412. item.little_title ||
  1413. (item.l_title_detail && item.l_title_detail.sentence)) &&
  1414. (item.f_title ||
  1415. (item.f_title_detail && item.f_title_detail.sentence))
  1416. ? 'marginTop'
  1417. : 'marginTop-8'
  1418. ]"
  1419. >
  1420. <b v-html="item.little_title_number" />
  1421. <template
  1422. v-if="item.l_title_detail && item.l_title_detail.sentence"
  1423. >
  1424. <div class="item-intro">
  1425. <OneSentenceTemp
  1426. :detail="item.l_title_detail"
  1427. :task-model="TaskModel"
  1428. :bookanswer="[]"
  1429. :correct-answer="[]"
  1430. :is-input="false"
  1431. :fn_check_list="[]"
  1432. :py-number="0"
  1433. :record_check="[]"
  1434. :max-fontsize="'16'"
  1435. />
  1436. </div>
  1437. </template>
  1438. <p v-else-if="item.little_title" v-html="item.little_title" />
  1439. </div>
  1440. </template>
  1441. <div
  1442. :class="[
  1443. 'NNPE-tableList',
  1444. item.is_bg ? 'NNPE-tableList-hasBg' : ''
  1445. ]"
  1446. >
  1447. <h6
  1448. v-if="itemJ == 'userAnswer' || itemJ == 'studentAnswer'"
  1449. class="standardTitle"
  1450. >
  1451. {{
  1452. itemJ == "userAnswer" ? "Your answer" : "Student answers"
  1453. }}
  1454. </h6>
  1455. <h6
  1456. v-if="itemJ == 'standardAnswer' && item.ShowstandardAnswer"
  1457. class="standardTitle"
  1458. >
  1459. Standard answer
  1460. </h6>
  1461. <div
  1462. v-for="(items, indexs) in item.table_list"
  1463. :key="indexs"
  1464. class="NNPE-tableList-tr"
  1465. :class="[
  1466. indexs === item.table_list.length - 1
  1467. ? 'NNPE-tableList-tr-last'
  1468. : ''
  1469. ]"
  1470. >
  1471. <div
  1472. v-for="(itemss, indexss) in items"
  1473. :key="indexss"
  1474. :class="[
  1475. 'NNPE-tableList-item',
  1476. items.length == 1
  1477. ? 'NNPE-tableList-item-noMargin'
  1478. : 'NNPE-tableList-item' + items.length
  1479. ]"
  1480. >
  1481. <template v-if="itemss.data">
  1482. <template v-if="itemss.type == 'ligature_chs'">
  1483. <Ligature
  1484. :cur-que="itemss.data"
  1485. :theme-color="themeColor"
  1486. :task-model="TaskModel"
  1487. :number="
  1488. index +
  1489. '_' +
  1490. indexs +
  1491. '_' +
  1492. indexss +
  1493. '_' +
  1494. currentTreeID
  1495. "
  1496. :judge-answer="itemJ"
  1497. />
  1498. </template>
  1499. <template v-if="itemss.data.type == 'image'">
  1500. <Picture
  1501. v-if="refresh"
  1502. :cur-que="itemss.data"
  1503. :child-type="itemss.type"
  1504. :theme-color="themeColor"
  1505. :task-model="TaskModel"
  1506. :judge-answer="itemJ"
  1507. />
  1508. </template>
  1509. <template
  1510. v-if="
  1511. itemss.type == 'phrase_chs' &&
  1512. itemJ != 'standardAnswer'
  1513. "
  1514. >
  1515. <WordPhrase
  1516. v-if="refresh"
  1517. :cur-que="itemss.data"
  1518. :theme-color="themeColor"
  1519. :task-model="TaskModel"
  1520. :index-str="
  1521. index +
  1522. '_' +
  1523. indexs +
  1524. '_' +
  1525. indexss +
  1526. '_' +
  1527. currentTreeID
  1528. "
  1529. :judge-answer="itemJ"
  1530. />
  1531. </template>
  1532. <template
  1533. v-if="
  1534. itemss.type == 'NewWord_chs' &&
  1535. itemJ != 'standardAnswer'
  1536. "
  1537. >
  1538. <WordPhrase
  1539. v-if="refresh"
  1540. :cur-que="itemss.data"
  1541. :theme-color="themeColor"
  1542. :current-tree-i-d="currentTreeID"
  1543. :indexs="indexs"
  1544. :indexss="indexss"
  1545. :task-model="TaskModel"
  1546. :index-str="
  1547. index +
  1548. '_' +
  1549. indexs +
  1550. '_' +
  1551. indexss +
  1552. '_' +
  1553. currentTreeID
  1554. "
  1555. :judge-answer="itemJ"
  1556. :isPhone="isPhone"
  1557. />
  1558. </template>
  1559. <template
  1560. v-if="
  1561. itemss.type == 'annotation_chs' &&
  1562. itemJ != 'standardAnswer'
  1563. "
  1564. >
  1565. <WordPhrase
  1566. v-if="refresh"
  1567. :cur-que="itemss.data"
  1568. :theme-color="themeColor"
  1569. :task-model="TaskModel"
  1570. :index-str="
  1571. index +
  1572. '_' +
  1573. indexs +
  1574. '_' +
  1575. indexss +
  1576. '_' +
  1577. currentTreeID
  1578. "
  1579. :judge-answer="itemJ"
  1580. />
  1581. </template>
  1582. <template
  1583. v-if="
  1584. itemss.type == 'notes_chs' &&
  1585. itemJ != 'standardAnswer'
  1586. "
  1587. >
  1588. <Notes
  1589. v-if="refresh"
  1590. :cur-que="itemss.data"
  1591. :theme-color="themeColor"
  1592. :task-model="TaskModel"
  1593. :judge-answer="itemJ"
  1594. />
  1595. </template>
  1596. <template
  1597. v-if="
  1598. itemss.type == 'article_chs' &&
  1599. itemJ != 'standardAnswer' &&
  1600. itemss.data &&
  1601. itemss.data.articleHidden !== false
  1602. "
  1603. >
  1604. <ArticleTemChs
  1605. v-if="refresh"
  1606. :cur-que="itemss.data"
  1607. :n-n-p-e-new-word-list="NNPENewWordList"
  1608. :n-n-p-e-new-phrase-list="NNPENewPhraseList"
  1609. :n-n-p-e-annotation-list="NNPEAnnotationList"
  1610. :theme-color="themeColor"
  1611. :current-tree-i-d="currentTreeID"
  1612. :task-model="TaskModel"
  1613. :judge-answer="itemJ"
  1614. :col-length="items.length"
  1615. :NpcNewWordMp3="NpcNewWordMp3"
  1616. :isPhone="isPhone"
  1617. />
  1618. </template>
  1619. <!-- <template v-if="itemss.type == 'sentence_segword_chs'">
  1620. <SentenceSegWordViewChs
  1621. :cur-que="itemss.data"
  1622. :theme-color="themeColor"
  1623. v-if="refresh"
  1624. />
  1625. </template> -->
  1626. <template
  1627. v-if="
  1628. itemss.type == 'dialogue_article_chs' &&
  1629. itemJ != 'standardAnswer' &&
  1630. itemss.data &&
  1631. itemss.data.articleHidden !== false
  1632. "
  1633. >
  1634. <DialogueArticleViewChs
  1635. v-if="refresh"
  1636. :cur-que="itemss.data"
  1637. :n-n-p-e-new-word-list="NNPENewWordList"
  1638. :n-n-p-e-new-phrase-list="NNPENewPhraseList"
  1639. :n-n-p-e-annotation-list="NNPEAnnotationList"
  1640. :color-box="colorBox"
  1641. :theme-color="themeColor"
  1642. :current-tree-i-d="currentTreeID"
  1643. :task-model="TaskModel"
  1644. :judge-answer="itemJ"
  1645. :col-length="items.length"
  1646. :NpcNewWordMp3="NpcNewWordMp3"
  1647. :isPhone="isPhone"
  1648. />
  1649. </template>
  1650. <template v-if="itemss.type == 'dialogue_answer_chs'">
  1651. <DialogueAnswerViewChs
  1652. v-if="refresh"
  1653. :cur-que="itemss.data"
  1654. :color-box="colorBox"
  1655. :theme-color="themeColor"
  1656. :task-model="TaskModel"
  1657. :judge-answer="itemJ"
  1658. :isPhone="isPhone"
  1659. />
  1660. </template>
  1661. <template v-if="itemss.type == 'input_record_chs'">
  1662. <InputHasRecord
  1663. v-if="refresh"
  1664. :cur-que="itemss.data"
  1665. :theme-color="themeColor"
  1666. :task-model="TaskModel"
  1667. :judge-answer="itemJ"
  1668. />
  1669. </template>
  1670. <template v-if="itemss.type == 'recordHZ_inputPY_chs'">
  1671. <TextInputRecord
  1672. v-if="refresh"
  1673. :cur-que="itemss.data"
  1674. :theme-color="themeColor"
  1675. :task-model="TaskModel"
  1676. :judge-answer="itemJ"
  1677. />
  1678. </template>
  1679. <template
  1680. v-if="
  1681. itemss.type == 'inputItem_chs' ||
  1682. itemss.type == 'sentence_input_chs' ||
  1683. itemss.type == 'sentence_judge_chs' ||
  1684. itemss.type == 'sentence_record_chs' ||
  1685. itemss.type == 'sentence_input_record_chs'
  1686. "
  1687. >
  1688. <SentenceInput
  1689. v-if="refresh"
  1690. :cur-que="itemss.data"
  1691. :theme-color="themeColor"
  1692. :task-model="TaskModel"
  1693. :judge-answer="itemJ"
  1694. :type="itemss.type"
  1695. />
  1696. </template>
  1697. <template v-if="itemss.type == 'NumberCombination_chs'">
  1698. <NumberSelectHasRecord
  1699. v-if="refresh"
  1700. :cur-que="itemss.data"
  1701. :theme-color="themeColor"
  1702. :task-model="TaskModel"
  1703. :judge-answer="itemJ"
  1704. />
  1705. </template>
  1706. <template
  1707. v-if="
  1708. itemss.type === 'voice_matrix' &&
  1709. itemJ != 'standardAnswer'
  1710. "
  1711. >
  1712. <voice-matrix
  1713. v-if="refresh"
  1714. :cur-que="itemss.data"
  1715. :theme-color="themeColor"
  1716. :task-model="TaskModel"
  1717. :judge-answer="itemJ"
  1718. />
  1719. </template>
  1720. <template v-if="itemss.type === 'select_drag'">
  1721. <select-drag
  1722. v-if="refresh"
  1723. :cur-que="itemss.data"
  1724. :theme-color="themeColor"
  1725. :task-model="TaskModel"
  1726. :judge-answer="itemJ"
  1727. />
  1728. </template>
  1729. <template v-if="itemss.type === 'fill_drag'">
  1730. <fill-drag
  1731. v-if="refresh"
  1732. :cur-que="itemss.data"
  1733. :theme-color="themeColor"
  1734. :task-model="TaskModel"
  1735. :judge-answer="itemJ"
  1736. />
  1737. </template>
  1738. <template v-if="itemss.type === 'config_table'">
  1739. <configurable-table
  1740. v-if="refresh"
  1741. :cur-que="itemss.data"
  1742. :theme-color="themeColor"
  1743. :task-model="TaskModel"
  1744. :judge-answer="itemJ"
  1745. />
  1746. </template>
  1747. <template v-if="itemss.type === 'header_separate'">
  1748. <header-separate
  1749. v-if="refresh"
  1750. :cur-que="itemss.data"
  1751. :theme-color="themeColor"
  1752. :task-model="TaskModel"
  1753. :judge-answer="itemJ"
  1754. />
  1755. </template>
  1756. <template v-if="itemss.type == 'toneSelect_chs'">
  1757. <SelectTone
  1758. v-if="refresh"
  1759. :cur-que="itemss.data"
  1760. :theme-color="themeColor"
  1761. :task-model="TaskModel"
  1762. :judge-answer="itemJ"
  1763. />
  1764. </template>
  1765. <template v-if="itemss.type == 'sudoku_chs'">
  1766. <Soduko
  1767. v-if="refresh"
  1768. :cur-que="itemss.data"
  1769. :theme-color="themeColor"
  1770. :task-model="TaskModel"
  1771. :judge-answer="itemJ"
  1772. />
  1773. </template>
  1774. <template v-if="itemss.type == 'single_chs'">
  1775. <Single
  1776. v-if="refresh"
  1777. :cur-que="itemss.data"
  1778. :theme-color="themeColor"
  1779. :task-model="TaskModel"
  1780. :judge-answer="itemJ"
  1781. />
  1782. </template>
  1783. <template v-if="itemss.type == 'text_problem_chs'">
  1784. <TextProblem
  1785. v-if="refresh"
  1786. :cur-que="itemss.data"
  1787. :theme-color="themeColor"
  1788. :task-model="TaskModel"
  1789. :judge-answer="itemJ"
  1790. />
  1791. </template>
  1792. <template
  1793. v-if="
  1794. itemss.type == 'newWord_preview_chs' &&
  1795. itemJ != 'standardAnswer'
  1796. "
  1797. >
  1798. <NewWordShow
  1799. v-if="refresh"
  1800. :cur-que="itemss.data"
  1801. :theme-color="themeColor"
  1802. :index-str="index + '_' + indexs + '_' + indexss"
  1803. :task-model="TaskModel"
  1804. :judge-answer="itemJ"
  1805. />
  1806. </template>
  1807. <template
  1808. v-if="
  1809. itemss.type == 'listen_record_single_syllable_chs'
  1810. "
  1811. >
  1812. <SelectYinjie
  1813. v-if="refresh"
  1814. :cur-que="itemss.data"
  1815. :theme-color="themeColor"
  1816. :task-model="TaskModel"
  1817. :judge-answer="itemJ"
  1818. />
  1819. </template>
  1820. <template
  1821. v-if="itemss.type == 'sentence_listen_read_chs'"
  1822. >
  1823. <SentenceListenRead
  1824. v-if="refresh"
  1825. :cur-que="itemss.data"
  1826. :theme-color="themeColor"
  1827. :task-model="TaskModel"
  1828. :judge-answer="itemJ"
  1829. />
  1830. </template>
  1831. <template v-if="itemss.type == 'sort_chs'">
  1832. <SentenceSortQP
  1833. v-if="refresh"
  1834. :cur-que="itemss.data"
  1835. :theme-color="themeColor"
  1836. :task-model="TaskModel"
  1837. :judge-answer="itemJ"
  1838. />
  1839. </template>
  1840. <template
  1841. v-if="itemss.type == 'checkbox_self_assessment_chs'"
  1842. >
  1843. <Checkbox
  1844. v-if="refresh"
  1845. :cur-que="itemss.data"
  1846. :theme-color="themeColor"
  1847. :task-model="TaskModel"
  1848. :judge-answer="itemJ"
  1849. />
  1850. </template>
  1851. <template
  1852. v-if="
  1853. (itemss.type == 'record_control_mini' ||
  1854. itemss.type == 'record_control_normal' ||
  1855. itemss.type == 'record_control_pro' ||
  1856. itemss.type == 'record_control_promax') &&
  1857. itemJ != 'standardAnswer'
  1858. "
  1859. >
  1860. <RecordModule
  1861. v-if="refresh"
  1862. :cur-que="itemss.data"
  1863. :theme-color="themeColor"
  1864. :task-model="TaskModel"
  1865. :judge-answer="itemJ"
  1866. />
  1867. </template>
  1868. <template
  1869. v-if="
  1870. (itemss.type == 'upload_control_chs' ||
  1871. itemss.type == 'upload_control_preview_chs') &&
  1872. itemJ != 'standardAnswer'
  1873. "
  1874. >
  1875. <UploadControlView
  1876. v-if="refresh"
  1877. :cur-que="itemss.data"
  1878. :type="itemss.type"
  1879. :theme-color="themeColor"
  1880. :task-model="TaskModel"
  1881. :judge-answer="itemJ"
  1882. />
  1883. </template>
  1884. <template
  1885. v-if="
  1886. itemss.type == 'CourseStart_chs' &&
  1887. itemJ != 'standardAnswer'
  1888. "
  1889. >
  1890. <CourseStart
  1891. v-if="refresh"
  1892. :cur-que="itemss.data"
  1893. :handle-n-n-p-enext="handleNNPEnext"
  1894. :theme-color="themeColor"
  1895. :task-model="TaskModel"
  1896. :judge-answer="itemJ"
  1897. />
  1898. </template>
  1899. <template
  1900. v-if="
  1901. itemss.type == 'tinydemo_chs' &&
  1902. itemJ != 'standardAnswer'
  1903. "
  1904. >
  1905. <Tinydemo
  1906. v-if="refresh"
  1907. :cur-que="itemss.data"
  1908. :theme-color="themeColor"
  1909. :task-model="TaskModel"
  1910. :judge-answer="itemJ"
  1911. />
  1912. </template>
  1913. <template
  1914. v-if="
  1915. itemss.type == 'video_chs' &&
  1916. itemJ != 'standardAnswer'
  1917. "
  1918. >
  1919. <VideoControl
  1920. v-if="refresh"
  1921. :cur-que="itemss.data"
  1922. :type="itemss.type"
  1923. :theme-color="themeColor"
  1924. :index-str="
  1925. index +
  1926. '_' +
  1927. indexs +
  1928. '_' +
  1929. indexss +
  1930. '_' +
  1931. currentTreeID
  1932. "
  1933. :task-model="TaskModel"
  1934. :judge-answer="itemJ"
  1935. />
  1936. </template>
  1937. <template v-if="itemss.type == 'table_chs'">
  1938. <TableView
  1939. v-if="refresh"
  1940. :cur-que="itemss.data"
  1941. :type="itemss.type"
  1942. :theme-color="themeColor"
  1943. :task-model="TaskModel"
  1944. :judge-answer="itemJ"
  1945. />
  1946. </template>
  1947. <template v-if="itemss.type == 'play_record_chs'">
  1948. <PlayRecordView
  1949. v-if="refresh"
  1950. :cur-que="itemss.data"
  1951. :type="itemss.type"
  1952. :theme-color="themeColor"
  1953. :task-model="TaskModel"
  1954. :judge-answer="itemJ"
  1955. />
  1956. </template>
  1957. <template
  1958. v-if="
  1959. itemss.type == 'upload_pdf_chs' &&
  1960. itemJ != 'standardAnswer'
  1961. "
  1962. >
  1963. <PdfView
  1964. v-if="refresh"
  1965. :cur-que="itemss.data"
  1966. :type="itemss.type"
  1967. :theme-color="themeColor"
  1968. :task-model="TaskModel"
  1969. :judge-answer="itemJ"
  1970. />
  1971. </template>
  1972. <template v-if="itemss.type == 'sentence_segtemp_chs'">
  1973. <SentenceModule
  1974. v-if="refresh"
  1975. :cur-que="itemss.data"
  1976. :type="itemss.type"
  1977. :theme-color="themeColor"
  1978. :task-model="TaskModel"
  1979. :judge-answer="itemJ"
  1980. />
  1981. </template>
  1982. <template
  1983. v-if="
  1984. itemss.type == 'options_list_chs' &&
  1985. itemJ != 'standardAnswer'
  1986. "
  1987. >
  1988. <OptionsList
  1989. v-if="refresh"
  1990. :cur-que="itemss.data"
  1991. :theme-color="themeColor"
  1992. :index-str="index + '_' + indexs + '_' + indexss"
  1993. :task-model="TaskModel"
  1994. :judge-answer="itemJ"
  1995. />
  1996. </template>
  1997. <template v-if="itemss.type == 'sentence_single_chs'">
  1998. <SentenceMulModule
  1999. v-if="refresh"
  2000. :cur-que="itemss.data"
  2001. :type="itemss.type"
  2002. :theme-color="themeColor"
  2003. :task-model="TaskModel"
  2004. :judge-answer="itemJ"
  2005. />
  2006. </template>
  2007. <!-- {{ itemss.type }} -->
  2008. </template>
  2009. </div>
  2010. </div>
  2011. <div
  2012. v-if="isAnswerItemShow && item.showSubmit"
  2013. style="text-align: right; padding: 10px 0px 40px 0"
  2014. >
  2015. <a
  2016. class="submitLookAnswer"
  2017. @click="submitLookAnswer(index)"
  2018. >{{ submitCn ? submitCn : "查看答案" }}</a
  2019. >
  2020. </div>
  2021. </div>
  2022. </template>
  2023. </div>
  2024. </div>
  2025. </div>
  2026. <!-- <iframe
  2027. src="/wordGame/index.html"
  2028. width="1000px"
  2029. height="700px"
  2030. border="none"
  2031. ></iframe> -->
  2032. <div v-if="isShowSave || isShowTitle" class="NNPE-title NNPE-title-gray">
  2033. <!-- 页眉 v-if="isShowSave"-->
  2034. <a v-if="isShowSave" class="submitAnswer" @click="submitUserAnswerNPC"
  2035. >提交</a
  2036. >
  2037. <div v-if="isShowTitle" class="NNPE-operate">
  2038. <a
  2039. class="btn-prev"
  2040. :class="[preClick ? '' : 'btn-prev-disabled']"
  2041. @click="handleNNPEprev"
  2042. />
  2043. <a
  2044. class="btn-next"
  2045. :class="[nextClick ? '' : 'btn-next-disabled']"
  2046. @click="handleNNPEnext"
  2047. />
  2048. </div>
  2049. </div>
  2050. </template>
  2051. <el-dialog
  2052. title=""
  2053. :close-on-click-modal="false"
  2054. :modal-append-to-body="false"
  2055. :show-close="false"
  2056. append-to-body
  2057. :visible.sync="visiblePreviewDialog"
  2058. width="890px"
  2059. height="80%"
  2060. class="previewDialog"
  2061. >
  2062. <div class="previewDialog-title">
  2063. <h2>Reference answer</h2>
  2064. <a @click="visiblePreviewDialog = false"
  2065. ><img src="../../assets/NPC/icon-close.png"
  2066. /></a>
  2067. </div>
  2068. <PreviewDialogueNPC
  2069. v-if="visiblePreviewDialog"
  2070. class="previewDialog-content"
  2071. :context="contextData"
  2072. :que-index="queIndex"
  2073. :father-name="fatherName"
  2074. :current-tree-i-d="currentTreeID"
  2075. :father-tree-data="FatherTreeData"
  2076. :change-id="changeId"
  2077. :theme-color="themeColor"
  2078. :task-model="'ANSWER'"
  2079. :NpcNewWordMp3="NpcNewWordMp3"
  2080. />
  2081. </el-dialog>
  2082. </div>
  2083. </template>
  2084. <script>
  2085. import Picture from "./preview/Picture.vue"; // 图片模板
  2086. import Record from "./preview/Record.vue"; // 音频播放
  2087. import Soundrecord from "./preview/Soundrecord.vue"; // 录音模板
  2088. import ArticleTemChs from "./preview/ArticleViewChs/index.vue"; // 文章模板
  2089. import DialogueArticleViewChs from "./preview/DialogueArticleViewChs/index.vue"; // 文章模板
  2090. import SentenceSegWordViewChs from "./preview/SentenceSegWordViewChs.vue"; // 句子分词
  2091. import WordPhrase from "./preview/WordPhrase.vue"; // 生词短语
  2092. import Notes from "./preview/Notes.vue"; // 注释
  2093. import Ligature from "./preview/Ligature.vue";
  2094. import InputHasRecord from "./preview/InputHasRecord.vue"; // 输入加录音
  2095. import TextInputRecord from "./preview/TextInputRecord.vue"; // 文本+输入+录音
  2096. import SentenceInput from "./preview/SentenceInput.vue"; // 输入选项
  2097. import NumberSelectHasRecord from "./preview/NumberSelectHasRecord.vue"; // 数字组合
  2098. import SelectTone from "./preview/SelectTone.vue"; // 选择声调
  2099. import Soduko from "./preview/Soduko.vue"; // 数独
  2100. import Single from "./preview/Single.vue"; // 单选
  2101. import TextProblem from "./preview/TextProblem.vue"; // 课文上方的问题
  2102. import NewWordShow from "./preview/NewWordShow.vue"; // 生字展示
  2103. import SelectYinjie from "./preview/SelectYinjie.vue"; // 选择音节
  2104. import SentenceListenRead from "./preview/SentenceListenRead.vue"; // 听并朗读
  2105. import SentenceSortQP from "./preview/SentenceSortQP.vue"; // 句子拖拽排序
  2106. import Checkbox from "./preview/CheckBoxModule.vue"; // 问卷调查-多选题
  2107. import VoiceMatrix from "./preview/VoiceMatrix.vue"; // 语音矩阵
  2108. import SelectDrag from "./preview/SelectDrag.vue"; // 选择 -> 拖拽
  2109. import FillDrag from "./preview/FillDrag.vue"; // 填空 -> 拖拽
  2110. import ConfigurableTable from "./preview/ConfigurableTable.vue"; // 可配置表格
  2111. import HeaderSeparate from "./preview/HeaderSparate/index.vue"; // 表头分离表格
  2112. import RecordModule from "./preview/RecordModule.vue"; // 录音组件
  2113. import UploadControlView from "./preview/UploadControlView.vue"; // 预览控件
  2114. import DialogueAnswerViewChs from "./preview/DialogueArticleViewChs/DialogueAnswerViewChs.vue"; // 文章模板
  2115. import CourseStart from "./preview/CourseStart.vue"; // 封面
  2116. import Tinydemo from "./preview/TinyModule.vue"; // 富文本
  2117. import VideoControl from "./preview/VideoControl.vue"; // 视频控件
  2118. import TableView from "./preview/TableView.vue"; // 视频控件
  2119. import PdfView from "./preview/PdfView.vue"; // 视频控件
  2120. import SentenceModule from "./preview/SentenceModule.vue"; // 图片模板
  2121. import PlayRecordView from "./preview/PlayRecordView.vue";
  2122. import OptionsList from "./preview/OptionsList.vue"; // 选项模板
  2123. import SentenceMulModule from "./preview/SentenceMulModule.vue"; // 多题干模板
  2124. import PreviewDialogueNPC from "./preview/PreviewDialogueNPC.vue"; // 选项模板
  2125. import OneSentenceTemp from "./preview/components/OneSentenceTemp.vue";
  2126. import PicturePhone from "./phonePreview/Picture.vue"; // 图片模板
  2127. import RecordPhone from "./phonePreview/Record.vue"; // 音频播放
  2128. import SoundrecordPhone from "./phonePreview/Soundrecord.vue"; // 录音模板
  2129. import ArticleTemChsPhone from "./phonePreview/ArticleViewChs/index.vue"; // 文章模板
  2130. import DialogueArticleViewChsPhone from "./phonePreview/DialogueArticleViewChs/index.vue"; // 文章模板
  2131. import SentenceSegWordViewChsPhone from "./phonePreview/SentenceSegWordViewChs.vue"; // 句子分词
  2132. import WordPhrasePhone from "./phonePreview/WordPhrase.vue"; // 生词短语
  2133. import NotesPhone from "./phonePreview/Notes.vue"; // 注释
  2134. import LigaturePhone from "./phonePreview/Ligature.vue";
  2135. import InputHasRecordPhone from "./phonePreview/InputHasRecord.vue"; // 输入加录音
  2136. import TextInputRecordPhone from "./phonePreview/TextInputRecord.vue"; // 文本+输入+录音
  2137. import SentenceInputPhone from "./phonePreview/SentenceInput.vue"; // 输入选项
  2138. import NumberSelectHasRecordPhone from "./phonePreview/NumberSelectHasRecord.vue"; // 数字组合
  2139. import SelectTonePhone from "./phonePreview/SelectTone.vue"; // 选择声调
  2140. import SodukoPhone from "./phonePreview/Soduko.vue"; // 数独
  2141. import SinglePhone from "./phonePreview/Single.vue"; // 单选
  2142. import TextProblemPhone from "./phonePreview/TextProblem.vue"; // 课文上方的问题
  2143. import NewWordShowPhone from "./phonePreview/NewWordShow.vue"; // 生字展示
  2144. import SelectYinjiePhone from "./phonePreview/SelectYinjie.vue"; // 选择音节
  2145. import SentenceListenReadPhone from "./phonePreview/SentenceListenRead.vue"; // 听并朗读
  2146. import SentenceSortQPPhone from "./phonePreview/SentenceSortQP.vue"; // 句子拖拽排序
  2147. import CheckboxPhone from "./phonePreview/CheckBoxModule.vue"; // 问卷调查-多选题
  2148. import VoiceMatrixPhone from "./phonePreview/VoiceMatrix.vue"; // 语音矩阵
  2149. import SelectDragPhone from "./phonePreview/SelectDrag.vue"; // 选择 -> 拖拽
  2150. import FillDragPhone from "./phonePreview/FillDrag.vue"; // 填空 -> 拖拽
  2151. import ConfigurableTablePhone from "./phonePreview/ConfigurableTable.vue"; // 可配置表格
  2152. import HeaderSeparatePhone from "./phonePreview/HeaderSparate/index.vue"; // 表头分离表格
  2153. import RecordModulePhone from "./phonePreview/RecordModule.vue"; // 录音组件
  2154. import UploadControlViewPhone from "./phonePreview/UploadControlView.vue"; // 预览控件
  2155. import DialogueAnswerViewChsPhone from "./phonePreview/DialogueArticleViewChs/DialogueAnswerViewChs.vue"; // 文章模板
  2156. import CourseStartPhone from "./phonePreview/CourseStart.vue"; // 封面
  2157. import TinydemoPhone from "./phonePreview/TinyModule.vue"; // 富文本
  2158. import VideoControlPhone from "./phonePreview/VideoControl.vue"; // 视频控件
  2159. import TableViewPhone from "./phonePreview/TableView.vue"; // 视频控件
  2160. import PdfViewPhone from "./phonePreview/PdfView.vue"; // 视频控件
  2161. import SentenceModulePhone from "./phonePreview/SentenceModule.vue"; // 图片模板
  2162. import PlayRecordViewPhone from "./phonePreview/PlayRecordView.vue";
  2163. import OptionsListPhone from "./phonePreview/OptionsList.vue"; // 选项模板
  2164. import SentenceMulModulePhone from "./phonePreview/SentenceMulModule.vue"; // 多题干模板
  2165. import PreviewDialogueNPCPhone from "./phonePreview/PreviewDialogueNPC.vue"; // 选项模板
  2166. import OneSentenceTempPhone from "./phonePreview/components/OneSentenceTemp.vue";
  2167. import { getToken } from "../../utils/auth";
  2168. export default {
  2169. name: "Booknpc",
  2170. components: {
  2171. Picture,
  2172. Record,
  2173. Soundrecord,
  2174. ArticleTemChs,
  2175. DialogueArticleViewChs,
  2176. SentenceSegWordViewChs,
  2177. WordPhrase,
  2178. Notes,
  2179. Ligature,
  2180. InputHasRecord,
  2181. TextInputRecord,
  2182. SentenceInput,
  2183. NumberSelectHasRecord,
  2184. SelectTone,
  2185. Soduko,
  2186. Single,
  2187. TextProblem,
  2188. NewWordShow,
  2189. SelectYinjie,
  2190. SentenceListenRead,
  2191. SentenceSortQP,
  2192. Checkbox,
  2193. VoiceMatrix,
  2194. FillDrag,
  2195. SelectDrag,
  2196. ConfigurableTable,
  2197. HeaderSeparate,
  2198. RecordModule,
  2199. UploadControlView,
  2200. DialogueAnswerViewChs,
  2201. CourseStart,
  2202. Tinydemo,
  2203. VideoControl,
  2204. TableView,
  2205. PdfView,
  2206. PlayRecordView,
  2207. SentenceModule,
  2208. OptionsList,
  2209. PreviewDialogueNPC,
  2210. SentenceMulModule,
  2211. OneSentenceTemp,
  2212. PicturePhone,
  2213. RecordPhone,
  2214. SoundrecordPhone,
  2215. ArticleTemChsPhone,
  2216. DialogueArticleViewChsPhone,
  2217. SentenceSegWordViewChsPhone,
  2218. WordPhrasePhone,
  2219. NotesPhone,
  2220. LigaturePhone,
  2221. InputHasRecordPhone,
  2222. TextInputRecordPhone,
  2223. SentenceInputPhone,
  2224. NumberSelectHasRecordPhone,
  2225. SelectTonePhone,
  2226. SodukoPhone,
  2227. SinglePhone,
  2228. TextProblemPhone,
  2229. NewWordShowPhone,
  2230. SelectYinjiePhone,
  2231. SentenceListenReadPhone,
  2232. SentenceSortQPPhone,
  2233. CheckboxPhone,
  2234. VoiceMatrixPhone,
  2235. FillDragPhone,
  2236. SelectDragPhone,
  2237. ConfigurableTablePhone,
  2238. HeaderSeparatePhone,
  2239. RecordModulePhone,
  2240. UploadControlViewPhone,
  2241. DialogueAnswerViewChsPhone,
  2242. CourseStartPhone,
  2243. TinydemoPhone,
  2244. VideoControlPhone,
  2245. TableViewPhone,
  2246. PdfViewPhone,
  2247. PlayRecordViewPhone,
  2248. SentenceModulePhone,
  2249. OptionsListPhone,
  2250. PreviewDialogueNPCPhone,
  2251. SentenceMulModulePhone,
  2252. OneSentenceTempPhone
  2253. },
  2254. props: [
  2255. "context",
  2256. "fatherName",
  2257. "currentTreeID",
  2258. "FatherTreeData",
  2259. "changeId",
  2260. "themeColor",
  2261. "isShowTitle",
  2262. "bookAnswerContent",
  2263. "TaskModel",
  2264. "isShowSave",
  2265. "previewType",
  2266. "previewGroupId",
  2267. "isAnswerItemShow",
  2268. "submitCn"
  2269. ],
  2270. data() {
  2271. return {
  2272. contextData: null,
  2273. answerData: [], // 获取的答案数据
  2274. queIndex: -1, // 题目的索引
  2275. cur: null, // 当前的题目
  2276. watchIndex: -1, // 监听的值
  2277. queList: [],
  2278. queTotal: 0, // 题目总数
  2279. NNPENewWordList: [], // 存放文章的生词
  2280. NNPENewPhraseList: [], // 存放文章的短语
  2281. NNPEAnnotationList: [], // 存放文章注释
  2282. height: "", // 总体的高度
  2283. colorBox: [
  2284. {
  2285. touxiang: "#72B51D",
  2286. bg: "#E9F0DF"
  2287. },
  2288. {
  2289. touxiang: "#DE4444",
  2290. bg: "rgba(222, 68, 68, 0.1)"
  2291. },
  2292. {
  2293. touxiang: "#A7A7A7",
  2294. bg: "#ffffff"
  2295. },
  2296. {
  2297. touxiang: "#4D91F6",
  2298. bg: "#F1F7FF"
  2299. },
  2300. {
  2301. touxiang: "#FF8A00",
  2302. bg: "rgba(255, 138, 0, 0.1)"
  2303. },
  2304. {
  2305. touxiang: "#25C8B4",
  2306. bg: "#D3F4F0"
  2307. },
  2308. {
  2309. touxiang: "#AD44DE",
  2310. bg: "#EFDAF8"
  2311. },
  2312. {
  2313. touxiang: "#CD003E",
  2314. bg: "#F5CCD8"
  2315. },
  2316. {
  2317. touxiang: "#FF4980",
  2318. bg: "#FFDBE6"
  2319. },
  2320. {
  2321. touxiang: "#FAFF00",
  2322. bg: "#FEFFCC"
  2323. },
  2324. {
  2325. touxiang: "#94C748",
  2326. bg: "rgba(148, 199, 72, 0.1)"
  2327. },
  2328. {
  2329. touxiang: "#E2B203",
  2330. bg: "rgba(226, 178, 3, 0.1)"
  2331. },
  2332. {
  2333. touxiang: "rgba(108, 195, 224, 1)",
  2334. bg: "rgba(108, 195, 224, 0.1)"
  2335. },
  2336. {
  2337. touxiang: "rgba(159, 143, 239, 1)",
  2338. bg: "rgba(159, 143, 239, 0.1)"
  2339. },
  2340. {
  2341. touxiang: "rgba(231, 116, 187, 1)",
  2342. bg: "rgba(231, 116, 187, 0.1)"
  2343. }
  2344. ],
  2345. chsFhList: [",", "。", "“", ":", "》", "?", "!", ";"],
  2346. noFont: ["~", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")"], // 对应不要拼音字体
  2347. idArr: [], // 当前的pid
  2348. oldCurrentTreeID: "",
  2349. refresh: true,
  2350. preClick: false, // 上一页是否可点
  2351. nextClick: false, // 下一页是否可点
  2352. answerTime: 0,
  2353. answerTimeInterval: null, // 计时器
  2354. groupIndexList: [], // 勾选groupid数组
  2355. groupCheckList: [], // checkbox 是否选中
  2356. judgeAnswersList: [],
  2357. visiblePreviewDialog: false,
  2358. titleChsFhList: [",", "”", "。", ":", "》", "?", "!", ";"],
  2359. checkAllNPC: false,
  2360. isIndeterminate: false,
  2361. NpcNewWordMp3: "",
  2362. isPhone: false, // 是否是移动端打开
  2363. baseSizePhone: localStorage.getItem("baseSizePhone")
  2364. ? localStorage.getItem("baseSizePhone") * 1
  2365. : 14, // 移动端基础字号大小
  2366. sizeSettingFlag: false, // 设置字号大小显示
  2367. themeColorPhone: [
  2368. "#D8E4F0",
  2369. "#FDE6E0",
  2370. "#FFFFFF",
  2371. "#E4F0D8",
  2372. "#E8E3CF",
  2373. "rgb(234, 234, 239)"
  2374. ], // 移动端主题色
  2375. themeColorPhoneIndex: localStorage.getItem("themeColorPhoneIndex")
  2376. ? localStorage.getItem("themeColorPhoneIndex") * 1
  2377. : 2, // 移动端主题色索引
  2378. themeColorPhoneFlag: false
  2379. };
  2380. },
  2381. computed: {
  2382. transScale() {
  2383. return function() {
  2384. let width = window.innerWidth;
  2385. let styleConfig = {
  2386. transform: "scale(" + width / 860 + ")"
  2387. };
  2388. return styleConfig;
  2389. };
  2390. }
  2391. },
  2392. watch: {
  2393. context: {
  2394. handler(val, oldVal) {
  2395. const _this = this;
  2396. _this.refresh = false;
  2397. if (val) {
  2398. _this.initContextData();
  2399. if (_this.FatherTreeData) {
  2400. _this.idArr = [];
  2401. _this.FatherTreeData.forEach((item, itemIndex) => {
  2402. this.seekCurrentTree(item);
  2403. });
  2404. }
  2405. _this.handleTitleData();
  2406. if (_this.queIndex == _this.queTotal - 1) {
  2407. this.idArr.forEach((item, i) => {
  2408. if (item == _this.currentTreeID) {
  2409. if (i == 0) {
  2410. _this.preClick = false;
  2411. _this.nextClick = true;
  2412. } else if (i == this.idArr.length - 1) {
  2413. _this.nextClick = false;
  2414. _this.preClick = true;
  2415. } else {
  2416. _this.nextClick = true;
  2417. _this.preClick = true;
  2418. }
  2419. }
  2420. });
  2421. }
  2422. _this.$nextTick(() => {
  2423. // 重新渲染组件
  2424. _this.refresh = true;
  2425. });
  2426. }
  2427. },
  2428. // 深度观察监听
  2429. deep: true
  2430. }
  2431. },
  2432. // 生命周期 - 创建完成(可以访问当前this实例)
  2433. created() {
  2434. const regExp = /Android|webOS|iPhone|BlackBerry|IEMobile|Opera Mini/i;
  2435. this.isPhone = regExp.test(navigator.userAgent);
  2436. },
  2437. // 生命周期 - 挂载完成(可以访问DOM元素)
  2438. mounted() {
  2439. const _this = this;
  2440. if (_this.context) {
  2441. _this.initContextData();
  2442. _this.handleTitleData();
  2443. }
  2444. if (_this.FatherTreeData) {
  2445. _this.idArr = [];
  2446. _this.FatherTreeData.forEach((item, itemIndex) => {
  2447. this.seekCurrentTree(item);
  2448. });
  2449. if (_this.queIndex == _this.queTotal - 1) {
  2450. this.idArr.forEach((item, i) => {
  2451. if (item == _this.currentTreeID) {
  2452. if (i == 0) {
  2453. _this.preClick = false;
  2454. _this.nextClick = true;
  2455. } else if (i == this.idArr.length - 1) {
  2456. _this.nextClick = false;
  2457. _this.preClick = true;
  2458. } else {
  2459. _this.nextClick = true;
  2460. _this.preClick = true;
  2461. }
  2462. }
  2463. });
  2464. }
  2465. }
  2466. },
  2467. beforeCreate() {}, // 生命周期 - 创建之前
  2468. beforeMount() {}, // 生命周期 - 挂载之前
  2469. beforeUpdate() {}, // 生命周期 - 更新之前
  2470. updated() {}, // 生命周期 - 更新之后
  2471. beforeDestroy() {}, // 生命周期 - 销毁之前
  2472. destroyed() {}, // 生命周期 - 销毁完成
  2473. activated() {},
  2474. // 方法集合
  2475. methods: {
  2476. // 处理数据
  2477. handleTitleData() {
  2478. let _this = this;
  2479. let curQue = JSON.parse(JSON.stringify(this.cur));
  2480. if (curQue.detailList) {
  2481. curQue.detailList.forEach((dItem, dIndex) => {
  2482. let paraArr = [];
  2483. if (dItem.detail) {
  2484. dItem.detail.wordsList.forEach((sItem, sIndex) => {
  2485. let obj = {
  2486. pinyin: sItem.pinyin,
  2487. chs: sItem.chs,
  2488. isShow: true
  2489. };
  2490. paraArr.push(obj);
  2491. });
  2492. this.$set(_this.cur.detailList[dIndex].detail, "resArr", paraArr);
  2493. }
  2494. });
  2495. }
  2496. },
  2497. initContextData() {
  2498. const _this = this;
  2499. // _this.$root.isRecording = false;
  2500. _this.checkAllNPC = false;
  2501. _this.contextData = JSON.parse(JSON.stringify(_this.context));
  2502. _this.queIndex = 0;
  2503. _this.NNPENewWordList = [];
  2504. _this.NNPENewPhraseList = [];
  2505. _this.NNPEAnnotationList = [];
  2506. _this.watchIndex = _this.queIndex + new Date().getTime();
  2507. this.groupCheckList = [];
  2508. let selectGropuIdList = this.previewGroupId
  2509. ? JSON.parse(this.previewGroupId)
  2510. : [];
  2511. this.groupCheckList = [];
  2512. if (_this.contextData) {
  2513. // const list = _this.contextData;
  2514. // if (list && list.length > 0) {
  2515. // _this.queList = list;
  2516. // _this.cur = list[_this.queIndex];
  2517. _this.queTotal = 1;
  2518. // _this.cur.cur_fn_data.forEach((item) => {
  2519. // item.table_list.forEach((items) => {
  2520. // items.forEach((itemss) => {
  2521. // if (itemss.data && itemss.data.type == "NewWord_chs") {
  2522. // _this.NNPENewWordList = _this.NNPENewWordList.concat(
  2523. // itemss.data.option
  2524. // );
  2525. // } else if (itemss.data && itemss.data.type == "notes_chs") {
  2526. // _this.NNPEAnnotationList = _this.NNPEAnnotationList.concat(
  2527. // itemss.data.option
  2528. // );
  2529. // }
  2530. // });
  2531. // });
  2532. // });
  2533. // }
  2534. _this.cur = _this.contextData;
  2535. _this.cur.cur_fn_data.forEach((item, index) => {
  2536. if (item.hasOwnProperty("z_title_detail")) {
  2537. if (item.z_title_detail.wordsList.length > 0) {
  2538. item.z_title_detail.wordsList.forEach((sItem, sIndex) => {
  2539. this.mergeWordSymbol(sItem);
  2540. sItem.fontColor =
  2541. this.themeColor === "green"
  2542. ? "#24b99e"
  2543. : this.themeColor === "brown"
  2544. ? "#bd8865"
  2545. : "#e35454";
  2546. sItem.fontSize = "16px";
  2547. sItem.fontWeight = "bold";
  2548. });
  2549. }
  2550. this.$set(item.z_title_detail, "config", {
  2551. fontColor:
  2552. this.themeColor === "green"
  2553. ? "#24b99e"
  2554. : this.themeColor === "brown"
  2555. ? "#bd8865"
  2556. : "#e35454",
  2557. fontFamily:
  2558. "Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, sans-serif, alabo",
  2559. fontSize: "16px",
  2560. fontWeight: "bold"
  2561. });
  2562. }
  2563. if (item.hasOwnProperty("f_title_detail")) {
  2564. if (item.f_title_detail.wordsList.length > 0) {
  2565. item.f_title_detail.wordsList.forEach((sItem, sIndex) => {
  2566. this.mergeWordSymbol(sItem);
  2567. sItem.fontColor = "#000000";
  2568. sItem.fontSize = "16px";
  2569. });
  2570. }
  2571. this.$set(item.f_title_detail, "config", {
  2572. fontColor: "#000000",
  2573. fontFamily:
  2574. "Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif",
  2575. fontSize: "16px"
  2576. });
  2577. }
  2578. if (item.hasOwnProperty("l_title_detail")) {
  2579. if (item.l_title_detail.wordsList.length > 0) {
  2580. item.l_title_detail.wordsList.forEach((sItem, sIndex) => {
  2581. this.mergeWordSymbol(sItem);
  2582. sItem.fontColor = "#000000";
  2583. sItem.fontSize = "16px";
  2584. });
  2585. }
  2586. this.$set(item.l_title_detail, "config", {
  2587. fontColor: "#000000",
  2588. fontFamily:
  2589. "Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, sans-serif, alabo",
  2590. fontSize: "16px"
  2591. });
  2592. }
  2593. this.groupCheckList.push(false);
  2594. selectGropuIdList.forEach(itemId => {
  2595. itemId.forEach(itemIds => {
  2596. if (item.group_id && itemIds.indexOf(item.group_id[0]) > -1) {
  2597. item.previewShow = true;
  2598. }
  2599. });
  2600. });
  2601. item.showSubmit = false;
  2602. item.table_list.forEach((items, indexs) => {
  2603. items.forEach((itemss, indexss) => {
  2604. if (itemss.data && itemss.type) {
  2605. if (
  2606. (this.previewType &&
  2607. this.previewType == "previewCheckShow" &&
  2608. (JSON.parse(this.previewGroupId).length == 0 ||
  2609. this.previewGroupId.indexOf(item.group_id[0]) > -1)) ||
  2610. !this.previewType
  2611. ) {
  2612. if (
  2613. itemss.type != "article_chs" &&
  2614. itemss.type != "NewWord_chs" &&
  2615. itemss.type != "dialogue_article_chs" &&
  2616. itemss.type != "notes_chs" &&
  2617. itemss.type != "voice_matrix" &&
  2618. itemss.type != "upload_control_chs" &&
  2619. itemss.type != "upload_control_preview_chs" &&
  2620. itemss.type != "record_control_mini" &&
  2621. itemss.type != "record_control_normal" &&
  2622. itemss.type != "record_control_pro" &&
  2623. itemss.type != "record_control_promax" &&
  2624. itemss.type != "text_problem_chs" &&
  2625. itemss.type != "newWord_preview_chs" &&
  2626. itemss.type != "CourseStart_chs" &&
  2627. itemss.type != "tinydemo_chs" &&
  2628. itemss.type != "video_chs" &&
  2629. itemss.type != "play_record_chs" &&
  2630. itemss.type != "upload_pdf_chs" &&
  2631. itemss.type != "options_list_chs" &&
  2632. itemss.type != "sentence_listen_read_chs" &&
  2633. itemss.type != "imgage_image" &&
  2634. itemss.type != "checkbox_self_assessment_chs"
  2635. ) {
  2636. setTimeout(() => {
  2637. let BookanswerStr = JSON.stringify(
  2638. itemss.data.Bookanswer
  2639. );
  2640. let errReg = /\[JUDGE##F##JUDGE\]/g;
  2641. if (errReg.test(BookanswerStr)) {
  2642. item.showSubmit = true;
  2643. }
  2644. this.$forceUpdate();
  2645. }, 100);
  2646. }
  2647. }
  2648. // else if (
  2649. // !this.previewType ||
  2650. // this.previewType != "previewCheckShow"
  2651. // ) {
  2652. // item.showSubmit = true;
  2653. // }
  2654. }
  2655. if (itemss.data && itemss.data.type == "NewWord_chs") {
  2656. _this.NpcNewWordMp3 =
  2657. itemss.data && itemss.data.mp3_list && itemss.data.mp3_list[0]
  2658. ? itemss.data.mp3_list[0].id
  2659. : "";
  2660. itemss.data.option.forEach(itemso => {
  2661. itemso.forEach(itemsos => {
  2662. itemsos.newWordMp3 = _this.NpcNewWordMp3;
  2663. });
  2664. });
  2665. _this.NNPENewWordList = _this.NNPENewWordList.concat(
  2666. itemss.data.option
  2667. );
  2668. } else if (itemss.data && itemss.data.type == "notes_chs") {
  2669. _this.NNPEAnnotationList = _this.NNPEAnnotationList.concat(
  2670. itemss.data.option
  2671. );
  2672. }
  2673. let Bookanswer = this.bookAnswerContent;
  2674. if (Bookanswer) {
  2675. if (this.TaskModel == "ANSWER") {
  2676. let token = getToken();
  2677. let roleAnswer = "studentAnswer";
  2678. if (token) {
  2679. let userInfor = JSON.parse(token);
  2680. let user_type = userInfor.user_type;
  2681. if (user_type == "TEACHER") {
  2682. roleAnswer = "studentAnswer";
  2683. } else {
  2684. roleAnswer = "userAnswer";
  2685. }
  2686. }
  2687. _this.judgeAnswersList = [roleAnswer, "standardAnswer"];
  2688. } else {
  2689. _this.judgeAnswersList = [""];
  2690. }
  2691. let answerData = JSON.parse(Bookanswer);
  2692. if (answerData && itemss.data) {
  2693. let BookanswerRes =
  2694. answerData.length > 0 &&
  2695. answerData[index].table_list &&
  2696. answerData[index].table_list.length > 0 &&
  2697. answerData[index].table_list[indexs].length > 0 &&
  2698. answerData[index].table_list[indexs][indexss].data
  2699. ? answerData[index].table_list[indexs][indexss].data
  2700. .Bookanswer
  2701. : [];
  2702. _this.$set(itemss.data, "Bookanswer", BookanswerRes);
  2703. }
  2704. } else {
  2705. _this.judgeAnswersList = [""];
  2706. }
  2707. itemss.mark = Math.random()
  2708. .toString(36)
  2709. .substring(2, 10);
  2710. });
  2711. });
  2712. if (_this.isPhone) {
  2713. let table_list_phone = [];
  2714. item.table_list.forEach((items, indexs) => {
  2715. items.forEach((itemss, indexss) => {
  2716. if (itemss.data && itemss.type) {
  2717. if (itemss.data.type === "image") {
  2718. if (
  2719. table_list_phone[table_list_phone.length - 1] &&
  2720. table_list_phone[table_list_phone.length - 1].length ===
  2721. 1 &&
  2722. table_list_phone[table_list_phone.length - 1][0].data
  2723. .type === "image"
  2724. ) {
  2725. table_list_phone[table_list_phone.length - 1].push(
  2726. itemss
  2727. );
  2728. } else {
  2729. table_list_phone.push([]);
  2730. table_list_phone[table_list_phone.length - 1].push(
  2731. itemss
  2732. );
  2733. }
  2734. } else {
  2735. table_list_phone.push([itemss]);
  2736. }
  2737. }
  2738. });
  2739. });
  2740. _this.$set(item, "table_list_phone", table_list_phone);
  2741. }
  2742. item.ShowstandardAnswer = Boolean(
  2743. JSON.stringify(item.table_list).match(/\[JUDGE##F##JUDGE\]/g)
  2744. );
  2745. });
  2746. console.log(this.cur.cur_fn_data);
  2747. }
  2748. this.$forceUpdate();
  2749. },
  2750. // 词和标点合一起
  2751. mergeWordSymbol(sItem) {
  2752. if (this.titleChsFhList.indexOf(sItem.chs) > -1) {
  2753. sItem.isShow = false;
  2754. } else {
  2755. sItem.isShow = true;
  2756. }
  2757. },
  2758. // 上一页
  2759. handleNNPEprev() {
  2760. let _this = this;
  2761. _this.puaseAudio();
  2762. if (_this.queIndex == 0) {
  2763. this.idArr.forEach((item, i) => {
  2764. if (item == _this.currentTreeID) {
  2765. if (i == 0) {
  2766. _this.preClick = false;
  2767. _this.nextClick = true;
  2768. } else {
  2769. _this.changeId(this.idArr[i - 1]);
  2770. _this.preClick = true;
  2771. _this.nextClick = true;
  2772. }
  2773. }
  2774. });
  2775. } else {
  2776. _this.queIndex -= 1;
  2777. _this.watchIndex = _this.queIndex + new Date().getTime();
  2778. _this.cur = _this.queList[_this.queIndex];
  2779. }
  2780. },
  2781. // 递归寻找相同的目录并保存目录的pid
  2782. seekCurrentTree(item) {
  2783. if (item.is_courseware == "true") {
  2784. this.idArr.push(item.id);
  2785. }
  2786. if (item.children) {
  2787. item.children.forEach((it, index) => {
  2788. if (it.is_courseware == "true") {
  2789. this.idArr.push(it.id);
  2790. }
  2791. if (it.children) {
  2792. this.seekCurrentTree(it);
  2793. }
  2794. });
  2795. }
  2796. },
  2797. puaseAudio() {
  2798. let audio = document.getElementsByTagName("audio");
  2799. if (
  2800. audio &&
  2801. audio.length > 0 &&
  2802. window.location.href.indexOf("GCLS-Learn") == -1
  2803. ) {
  2804. audio.forEach(item => {
  2805. item.pause();
  2806. });
  2807. }
  2808. let video = document.getElementsByTagName("video");
  2809. if (
  2810. video &&
  2811. video.length > 0 &&
  2812. window.location.href.indexOf("GCLS-Learn") == -1
  2813. ) {
  2814. video.forEach(item => {
  2815. item.pause();
  2816. });
  2817. }
  2818. },
  2819. // 下一页
  2820. handleNNPEnext() {
  2821. const _this = this;
  2822. _this.puaseAudio();
  2823. if (_this.queIndex == _this.queTotal - 1) {
  2824. this.idArr.forEach((item, i) => {
  2825. if (item == _this.currentTreeID) {
  2826. if (i == this.idArr.length - 1) {
  2827. _this.nextClick = false;
  2828. _this.preClick = true;
  2829. } else {
  2830. _this.changeId(this.idArr[i + 1]);
  2831. _this.nextClick = true;
  2832. _this.preClick = true;
  2833. }
  2834. }
  2835. });
  2836. } else {
  2837. _this.queIndex += 1;
  2838. _this.watchIndex = _this.queIndex + new Date().getTime();
  2839. _this.cur = _this.queList[_this.queIndex];
  2840. }
  2841. },
  2842. submitUserAnswerNPC() {
  2843. this.handleAnswerTimeEnd();
  2844. let contextDataStr = JSON.stringify(this.contextData);
  2845. if (!contextDataStr) {
  2846. return;
  2847. }
  2848. let userErrorNumberTotal = 0;
  2849. let userRightNumberTotal = 0;
  2850. let errReg = /\[JUDGE##F##JUDGE\]/g;
  2851. let rightReg = /\[JUDGE##T##JUDGE\]/g;
  2852. if (errReg.test(contextDataStr)) {
  2853. let errorArr = contextDataStr.match(/\[JUDGE##F##JUDGE\]/g);
  2854. userErrorNumberTotal = errorArr.length;
  2855. }
  2856. if (rightReg.test(contextDataStr)) {
  2857. let rightArr = contextDataStr.match(/\[JUDGE##T##JUDGE\]/g);
  2858. userRightNumberTotal = rightArr.length;
  2859. }
  2860. let contextData = JSON.parse(contextDataStr);
  2861. let result = [];
  2862. contextData.cur_fn_data.forEach((item, index) => {
  2863. result[index] = {
  2864. table_list: []
  2865. };
  2866. item.table_list.forEach((items, indexs) => {
  2867. result[index].table_list[indexs] = [];
  2868. items.forEach((itemss, indexss) => {
  2869. if (itemss.data) {
  2870. let Bookanswer = itemss.data.Bookanswer;
  2871. let obj = {
  2872. data: {
  2873. Bookanswer
  2874. }
  2875. };
  2876. result[index].table_list[indexs][indexss] = obj;
  2877. } else {
  2878. result[index].table_list[indexs][indexss] = {
  2879. data: null
  2880. };
  2881. }
  2882. });
  2883. });
  2884. });
  2885. this.$emit(
  2886. "finishTaskMaterial",
  2887. JSON.stringify(result),
  2888. this.answerTime,
  2889. userRightNumberTotal,
  2890. userErrorNumberTotal
  2891. );
  2892. },
  2893. // 开始计算答题用时
  2894. handleAnswerTimeStart() {
  2895. this.answerTime = 0;
  2896. window.clearInterval(this.answerTimeInterval);
  2897. this.answerTimeInterval = window.setInterval(() => {
  2898. this.answerTime++;
  2899. }, 1000);
  2900. },
  2901. // 结束计算答题用时
  2902. handleAnswerTimeEnd() {
  2903. window.clearInterval(this.answerTimeInterval);
  2904. },
  2905. // 提交选中groupid
  2906. submitPreviewGroupId() {
  2907. return JSON.stringify(this.groupIndexList);
  2908. },
  2909. forupdata(indexI, type) {
  2910. if (type === "all") {
  2911. this.groupIndexList = [];
  2912. this.cur.cur_fn_data.forEach((item, index) => {
  2913. this.groupIndexList.push(this.cur.cur_fn_data[index].group_id);
  2914. });
  2915. } else if (
  2916. this.groupIndexList
  2917. .toString()
  2918. .indexOf(this.cur.cur_fn_data[indexI].group_id.toString()) == -1
  2919. ) {
  2920. this.groupIndexList.push(this.cur.cur_fn_data[indexI].group_id);
  2921. } else {
  2922. this.groupIndexList.forEach((items, indexs) => {
  2923. if (
  2924. items.toString() == this.cur.cur_fn_data[indexI].group_id.toString()
  2925. ) {
  2926. this.groupIndexList.splice(indexs, 1);
  2927. return false;
  2928. }
  2929. });
  2930. }
  2931. this.groupCheckList.forEach((item, index) => {
  2932. this.groupCheckList[index] = false;
  2933. });
  2934. if (type === "all") {
  2935. } else {
  2936. this.isIndeterminate = false;
  2937. }
  2938. this.checkAllNPC =
  2939. this.groupIndexList.length === this.cur.cur_fn_data.length;
  2940. this.cur.cur_fn_data.forEach((item, index) => {
  2941. if (
  2942. this.groupIndexList.toString().indexOf(item.group_id.toString()) > -1
  2943. ) {
  2944. this.groupCheckList[index] = true;
  2945. if (type === "all") {
  2946. } else {
  2947. this.isIndeterminate = true;
  2948. }
  2949. }
  2950. });
  2951. this.$forceUpdate();
  2952. },
  2953. submitLookAnswer(ItemIndex) {
  2954. let contextData = this.contextData;
  2955. contextData.cur_fn_data.forEach((item, index) => {
  2956. if (index == ItemIndex) {
  2957. item.showPreview = true;
  2958. } else {
  2959. item.showPreview = false;
  2960. }
  2961. });
  2962. this.visiblePreviewDialog = true;
  2963. // this.submitUserAnswerNPC();
  2964. },
  2965. handleCheckAllChangeNPC(val) {
  2966. if (val) {
  2967. this.forupdata("", "all");
  2968. } else {
  2969. this.groupCheckList.forEach((item, index) => {
  2970. this.groupCheckList[index] = false;
  2971. });
  2972. this.groupIndexList = [];
  2973. this.isIndeterminate = false;
  2974. }
  2975. },
  2976. setFontSize(type) {
  2977. let _this = this;
  2978. if (type == "-") {
  2979. if (_this.baseSizePhone >= 14) {
  2980. this.baseSizePhone = this.baseSizePhone - 2;
  2981. }
  2982. } else if (type == "+") {
  2983. if (_this.baseSizePhone <= 20) {
  2984. this.baseSizePhone = this.baseSizePhone + 2;
  2985. }
  2986. }
  2987. localStorage.setItem("baseSizePhone", this.baseSizePhone);
  2988. },
  2989. changeThemeColorPhone(color, index) {
  2990. this.themeColorPhoneIndex = index;
  2991. this.themeColorPhoneFlag = false;
  2992. localStorage.setItem("themeColorPhoneIndex", index);
  2993. localStorage.setItem("themeColorPhone", color);
  2994. this.$emit("changeThemeColorPhone", color);
  2995. }
  2996. } // 如果页面有keep-alive缓存功能,这个函数会触发
  2997. };
  2998. </script>
  2999. <style lang="scss" scoped>
  3000. //@import url(); 引入公共css类
  3001. .NPC-Big-Book-preview {
  3002. width: 860px;
  3003. margin: 0 auto;
  3004. position: relative;
  3005. padding-bottom: 120px;
  3006. .NNPE-title {
  3007. background: #e35454;
  3008. border-radius: 0px 0px 16px 16px;
  3009. padding: 7px 24px 7px 30px;
  3010. position: relative;
  3011. height: 64px;
  3012. display: flex;
  3013. align-items: center;
  3014. &.NNPE-title-gray {
  3015. background: #eeeeee;
  3016. border-radius: 0;
  3017. margin-top: 24px;
  3018. .NNPE-operate {
  3019. position: absolute;
  3020. top: 10px;
  3021. right: 20px;
  3022. a {
  3023. background: #fff url("../../assets/newImage/common/btn-pre-black.png")
  3024. center no-repeat;
  3025. background-size: 24px;
  3026. &.btn-next {
  3027. background: #fff
  3028. url("../../assets/newImage/common/btn-next-black.png") center
  3029. no-repeat;
  3030. background-size: 24px;
  3031. }
  3032. &:hover {
  3033. background-color: #fff;
  3034. }
  3035. &:active {
  3036. background-color: #fff;
  3037. }
  3038. &.btn-prev-disabled,
  3039. &.btn-next-disabled {
  3040. background-color: rgba(0, 0, 0, 0.25);
  3041. }
  3042. }
  3043. }
  3044. }
  3045. h1 {
  3046. color: #ffffff;
  3047. font-weight: bold;
  3048. font-size: 16px;
  3049. line-height: 150%;
  3050. margin: 0;
  3051. }
  3052. .NNPE-title-left {
  3053. display: flex;
  3054. color: #ffffff;
  3055. font-size: 18px;
  3056. line-height: 18px;
  3057. align-items: center;
  3058. .NNPE-title-item {
  3059. margin-right: 12px;
  3060. width: max-content;
  3061. }
  3062. .content-con {
  3063. margin: 4px 0;
  3064. font-family: "robot";
  3065. &.hasCn,
  3066. &.hanzi {
  3067. font-family: "FZJCGFKTK";
  3068. }
  3069. &.en {
  3070. font-family: "robot";
  3071. }
  3072. }
  3073. .content-en {
  3074. font-weight: normal;
  3075. line-height: 18px;
  3076. font-family: "robot";
  3077. }
  3078. .NNPE-title-item-en {
  3079. font-weight: normal;
  3080. line-height: 12px;
  3081. font-family: "robot";
  3082. font-size: 12px;
  3083. margin: 0;
  3084. }
  3085. .con-box {
  3086. display: flex;
  3087. flex-flow: wrap;
  3088. justify-content: center;
  3089. align-items: flex-end;
  3090. .con-item {
  3091. text-align: center;
  3092. padding: 0 1px;
  3093. }
  3094. span {
  3095. display: block;
  3096. }
  3097. .pinyin {
  3098. font-family: "GB-PINYINOK-B";
  3099. font-size: 12px;
  3100. line-height: 12px;
  3101. height: 12px;
  3102. &.noFont {
  3103. font-family: initial;
  3104. }
  3105. }
  3106. .synthesis-box {
  3107. display: flex;
  3108. }
  3109. }
  3110. }
  3111. }
  3112. .NNPE-operate {
  3113. position: absolute;
  3114. top: 10px;
  3115. right: 20px;
  3116. a {
  3117. background: #e35454 url("../../assets/newImage/common/btn-pre.png") center
  3118. no-repeat;
  3119. background-size: 24px;
  3120. border-radius: 4px;
  3121. width: 44px;
  3122. height: 44px;
  3123. display: inline-block;
  3124. margin: 0 4px;
  3125. &.btn-next {
  3126. background: #e35454 url("../../assets/newImage/common/btn-next.png")
  3127. center no-repeat;
  3128. background-size: 24px;
  3129. }
  3130. &:hover {
  3131. background-color: #f76565;
  3132. }
  3133. &:active {
  3134. background-color: #d24444;
  3135. }
  3136. &.btn-prev-disabled,
  3137. &.btn-next-disabled {
  3138. background-color: rgba(0, 0, 0, 0.25);
  3139. cursor: not-allowed;
  3140. }
  3141. }
  3142. }
  3143. .classTopic-box {
  3144. background: #e35454;
  3145. border-radius: 8px;
  3146. width: 780px;
  3147. margin: 24px auto 0 auto;
  3148. text-align: center;
  3149. padding: 8px 24px;
  3150. span {
  3151. font-size: 16px;
  3152. line-height: 150%;
  3153. color: #ffffff;
  3154. padding: 0 1px;
  3155. &.cn {
  3156. font-family: "FZJCGFKTK";
  3157. }
  3158. &.en {
  3159. font-family: "robot";
  3160. }
  3161. &.pinyin {
  3162. font-family: "GB-PINYINOK-B";
  3163. }
  3164. }
  3165. }
  3166. .NNPE-Book-content-inner {
  3167. padding: 0 40px;
  3168. .NNPE-Book-content-item {
  3169. position: relative;
  3170. }
  3171. .NNPE-Book-content-item-checkbox {
  3172. position: absolute;
  3173. left: -30px;
  3174. top: 36px;
  3175. }
  3176. > div.title-box-preview {
  3177. padding-top: 32px;
  3178. .title-big {
  3179. display: flex;
  3180. b {
  3181. min-width: 39px;
  3182. height: fit-content;
  3183. background: #e35454;
  3184. border-radius: 8px;
  3185. color: #ffffff;
  3186. font-family: "robot";
  3187. display: inline-block;
  3188. text-align: center;
  3189. font-size: 16px;
  3190. line-height: 150%;
  3191. margin-right: 12px;
  3192. padding: 0 4px;
  3193. }
  3194. h2 {
  3195. color: #e35454;
  3196. font-size: 16px;
  3197. line-height: 150%;
  3198. font-weight: bold;
  3199. white-space: pre-wrap;
  3200. word-break: break-word;
  3201. margin: 0;
  3202. }
  3203. h3 {
  3204. color: #000000;
  3205. font-size: 16px;
  3206. line-height: 150%;
  3207. font-weight: normal;
  3208. margin: 0;
  3209. white-space: pre-wrap;
  3210. word-break: break-word;
  3211. }
  3212. .title-box-right-index {
  3213. padding-left: 51px;
  3214. }
  3215. }
  3216. .title-little {
  3217. display: flex;
  3218. margin-bottom: 24px;
  3219. &.marginTop {
  3220. margin-top: 24px;
  3221. }
  3222. &.marginTop-8 {
  3223. margin-top: 8px;
  3224. }
  3225. b,
  3226. p {
  3227. color: #000000;
  3228. font-size: 16px;
  3229. line-height: 150%;
  3230. font-weight: normal;
  3231. margin: 0;
  3232. white-space: pre-wrap;
  3233. word-break: break-word;
  3234. padding-right: 3px;
  3235. }
  3236. }
  3237. }
  3238. .NNPE-tableList {
  3239. // background: #fff;
  3240. border-radius: 8px;
  3241. // padding: 12px 8px;
  3242. &.NNPE-tableList-hasBg {
  3243. background: #f7f7f7;
  3244. border: 1px solid rgba(0, 0, 0, 0.1);
  3245. box-sizing: border-box;
  3246. border-radius: 8px;
  3247. }
  3248. .NNPE-tableList-tr {
  3249. display: flex;
  3250. justify-content: space-between;
  3251. // flex-flow: wrap;
  3252. .NNPE-tableList-item {
  3253. width: 100%;
  3254. // margin: 12px 16px;
  3255. // padding: 16px;
  3256. // background: #FFFFFF;
  3257. // border-radius: 4px;
  3258. display: flex;
  3259. flex-flow: wrap;
  3260. justify-content: center;
  3261. &.NNPE-tableList-item-noMargin {
  3262. margin: 0;
  3263. }
  3264. &.NNPE-tableList-item2 {
  3265. width: 378px;
  3266. }
  3267. &.NNPE-tableList-item3 {
  3268. width: 244px;
  3269. }
  3270. &.NNPE-tableList-item4 {
  3271. width: 195px;
  3272. }
  3273. }
  3274. }
  3275. }
  3276. }
  3277. .submitAnswer {
  3278. width: 160px;
  3279. height: 44px;
  3280. border-radius: 4px;
  3281. font-size: 16px;
  3282. line-height: 44px;
  3283. text-align: center;
  3284. font-family: robot;
  3285. background: #e35454;
  3286. color: #fff;
  3287. margin-left: 16px;
  3288. &:hover {
  3289. background-color: #f76565;
  3290. }
  3291. &:active {
  3292. background-color: #d24444;
  3293. }
  3294. }
  3295. &-phone {
  3296. width: 100%;
  3297. min-height: 100vh;
  3298. padding-bottom: 10px;
  3299. // transform-origin: 0 0; /* 设置变换的原点为元素的左上角 */
  3300. // transform: scale(0.6);
  3301. .classTopic-box {
  3302. width: 100%;
  3303. border-radius: 0 0 20px 20px;
  3304. margin-top: 15px;
  3305. position: fixed;
  3306. left: 0;
  3307. top: 64px;
  3308. z-index: 2;
  3309. }
  3310. .NNPE-title-top {
  3311. position: fixed;
  3312. top: 0;
  3313. left: 0;
  3314. width: 100%;
  3315. z-index: 1;
  3316. }
  3317. .NNPE-Book-content-inner {
  3318. padding: 0 15px;
  3319. }
  3320. .operater-classTopic {
  3321. width: 100%;
  3322. position: relative;
  3323. padding-top: 120px;
  3324. }
  3325. .NNPE-operate-phone {
  3326. width: 100%;
  3327. left: 0;
  3328. top: 0;
  3329. .btn-prev,
  3330. .btn-next {
  3331. position: fixed;
  3332. top: 84px;
  3333. left: 0;
  3334. z-index: 3;
  3335. width: 30px;
  3336. height: 30px;
  3337. // background-color: transparent;
  3338. background-size: 20px !important;
  3339. }
  3340. .btn-next {
  3341. left: auto;
  3342. right: 0;
  3343. }
  3344. }
  3345. .NNPE-title-gray {
  3346. width: 100%;
  3347. background: none !important;
  3348. padding: 0 15px;
  3349. margin-top: 0 !important;
  3350. justify-content: end;
  3351. .submitAnswer {
  3352. width: auto;
  3353. padding: 6px 12px;
  3354. height: auto;
  3355. line-height: 1.2;
  3356. font-size: 14px;
  3357. }
  3358. }
  3359. .NNPE-tableList-tr {
  3360. margin-bottom: 10px;
  3361. gap: 10px;
  3362. .NNPE-tableList-item-image {
  3363. width: 50% !important;
  3364. padding-right: 5px;
  3365. }
  3366. }
  3367. .title-little {
  3368. margin-bottom: 16px !important;
  3369. }
  3370. .title-box-preview {
  3371. padding-top: 20px !important;
  3372. }
  3373. .submitLookAnswer {
  3374. height: fit-content;
  3375. width: auto;
  3376. padding: 6px 12px;
  3377. line-height: 1.2;
  3378. }
  3379. .size-setting {
  3380. position: fixed;
  3381. right: 0;
  3382. top: 40%;
  3383. z-index: 1;
  3384. width: auto;
  3385. padding: 6px 0 6px 2px;
  3386. box-shadow: 0 2px 4px rgba(0, 0, 0, 1);
  3387. border-radius: 50px 0 0 50px;
  3388. background: #fff;
  3389. opacity: 0.9;
  3390. .el-icon-arrow-right,
  3391. .el-icon-arrow-left {
  3392. font-size: 20px;
  3393. color: #666666;
  3394. padding: 2px 0;
  3395. }
  3396. .size-show {
  3397. display: flex;
  3398. column-gap: 4px;
  3399. padding: 0 11px 0 6px;
  3400. span {
  3401. width: 24px;
  3402. height: 24px;
  3403. display: block;
  3404. }
  3405. }
  3406. .font-jian-black {
  3407. background: url("../../assets/NPC/jian-black.png") no-repeat left top;
  3408. background-size: 100% 100%;
  3409. &.font-jian-white-disabled {
  3410. background: url("../../assets/NPC/jian-white-disabled.png") no-repeat
  3411. left top;
  3412. background-size: 100% 100%;
  3413. cursor: pointer;
  3414. }
  3415. }
  3416. .font-img-black {
  3417. background: url("../../assets/NPC/fontSize-black.png") no-repeat left
  3418. top;
  3419. background-size: 100% 100%;
  3420. }
  3421. .font-jia-black {
  3422. background: url("../../assets/NPC/jia-black.png") no-repeat left top;
  3423. background-size: 100% 100%;
  3424. &.font-jia-white-disabled {
  3425. background: url("../../assets/NPC/jia-white-disabled.png") no-repeat
  3426. left top;
  3427. background-size: 100% 100%;
  3428. cursor: pointer;
  3429. }
  3430. }
  3431. .theme-color-phone {
  3432. border-radius: 50%;
  3433. border: 1px solid #666666;
  3434. width: 20px !important;
  3435. height: 20px !important;
  3436. margin-top: 2px;
  3437. }
  3438. .theme-color-phone-list {
  3439. position: absolute;
  3440. top: 50%;
  3441. right: 7px;
  3442. margin-top: -66px;
  3443. background: rgba(229, 229, 229, 0.5);
  3444. padding: 4px;
  3445. box-shadow: 0 4px 4px rgba(0, 0, 0, 0.25);
  3446. border-radius: 28px;
  3447. span {
  3448. width: 20px;
  3449. height: 20px;
  3450. border: 1px solid #fff;
  3451. border-radius: 50%;
  3452. margin: 4px 0;
  3453. &.active {
  3454. border-color: rgba(102, 102, 102, 1);
  3455. }
  3456. }
  3457. }
  3458. }
  3459. }
  3460. }
  3461. .submitLookAnswer {
  3462. color: #fff;
  3463. font-weight: 700;
  3464. font-size: 16px;
  3465. line-height: 24px;
  3466. width: 106px;
  3467. height: 40px;
  3468. background: #e35454;
  3469. border-radius: 8px;
  3470. display: inline-block;
  3471. line-height: 40px;
  3472. text-align: center;
  3473. font-family: "sourceR";
  3474. }
  3475. .NPC-Big-Book-preview-green {
  3476. .submitLookAnswer {
  3477. background: #24b99e;
  3478. }
  3479. .NNPE-title {
  3480. background: #24b99e;
  3481. }
  3482. .NNPE-operate {
  3483. a {
  3484. background: #24b99e url("../../assets/newImage/common/btn-pre.png") center
  3485. no-repeat;
  3486. background-size: 24px;
  3487. &.btn-next {
  3488. background: #24b99e url("../../assets/newImage/common/btn-next.png")
  3489. center no-repeat;
  3490. background-size: 24px;
  3491. }
  3492. &:hover {
  3493. background-color: #3dd4b8;
  3494. }
  3495. &:active {
  3496. background-color: #1fa189;
  3497. }
  3498. }
  3499. }
  3500. .submitAnswer {
  3501. background: #24b99e;
  3502. &:hover {
  3503. background-color: #3dd4b8;
  3504. }
  3505. &:active {
  3506. background-color: #1fa189;
  3507. }
  3508. }
  3509. .classTopic-box {
  3510. background: #24b99e;
  3511. }
  3512. .NNPE-Book-content-inner {
  3513. > div.title-box-preview {
  3514. .title-big {
  3515. b {
  3516. background: #24b99e;
  3517. }
  3518. h2 {
  3519. color: #24b99e;
  3520. }
  3521. }
  3522. }
  3523. }
  3524. }
  3525. .NPC-Big-Book-preview-brown {
  3526. .submitLookAnswer {
  3527. background: #bd8865;
  3528. }
  3529. .NNPE-title {
  3530. background: #bd8865;
  3531. }
  3532. .NNPE-operate {
  3533. a {
  3534. background: #bd8865 url("../../assets/newImage/common/btn-pre.png") center
  3535. no-repeat;
  3536. background-size: 24px;
  3537. &.btn-next {
  3538. background: #bd8865 url("../../assets/newImage/common/btn-next.png")
  3539. center no-repeat;
  3540. background-size: 24px;
  3541. }
  3542. &:hover {
  3543. background-color: #d6a687;
  3544. }
  3545. &:active {
  3546. background-color: #a37557;
  3547. }
  3548. }
  3549. }
  3550. .submitAnswer {
  3551. background: #bd8865;
  3552. &:hover {
  3553. background-color: #d6a687;
  3554. }
  3555. &:active {
  3556. background-color: #a37557;
  3557. }
  3558. }
  3559. .classTopic-box {
  3560. background: #bd8865;
  3561. }
  3562. .NNPE-Book-content-inner {
  3563. > div.title-box-preview {
  3564. .title-big {
  3565. b {
  3566. background: #bd8865;
  3567. }
  3568. h2 {
  3569. color: #bd8865;
  3570. }
  3571. }
  3572. }
  3573. }
  3574. }
  3575. </style>
  3576. <style lang="scss">
  3577. .NNPE-Book-content-item-checkbox {
  3578. .el-checkbox__input.is-indeterminate .el-checkbox__inner::before {
  3579. top: 9px;
  3580. }
  3581. .el-checkbox__inner {
  3582. border: 2px solid #4a99ea;
  3583. width: 24px;
  3584. height: 24px;
  3585. }
  3586. .el-checkbox__inner::after {
  3587. border-width: 2px;
  3588. height: 11px;
  3589. left: 8px;
  3590. top: 2px;
  3591. }
  3592. }
  3593. .previewDialog {
  3594. .el-dialog {
  3595. border-radius: 20px;
  3596. }
  3597. .el-dialog__body,
  3598. .el-dialog__header {
  3599. padding: 0;
  3600. }
  3601. .previewDialog-title {
  3602. padding: 26px 40px;
  3603. border-bottom: 1px solid rgba(51, 51, 51, 0.1);
  3604. position: relative;
  3605. h2 {
  3606. font-weight: 700;
  3607. font-size: 20px;
  3608. line-height: 28px;
  3609. margin: 0;
  3610. font-family: "D-DIN";
  3611. white-space: pre-wrap;
  3612. word-break: break-word;
  3613. }
  3614. a {
  3615. position: absolute;
  3616. width: 32px;
  3617. height: 32px;
  3618. right: 40px;
  3619. top: 26px;
  3620. img {
  3621. width: 100%;
  3622. height: 100%;
  3623. }
  3624. }
  3625. }
  3626. .previewDialog-content {
  3627. max-height: 70vh;
  3628. overflow-y: auto;
  3629. }
  3630. }
  3631. </style>