Preview.vue 129 KB

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