Voicefullscreen.vue 42 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449
  1. <!-- -->
  2. <template>
  3. <div :class="['voicefull', bgIndex == 0 ? 'bg1' : 'bg2']" v-if="sentList">
  4. <div class="voicefull-top">
  5. <div class="top-left">
  6. <div :class="['select-bg', bgIndex == 1 ? 'select-bg-blue' : '']">
  7. <div :class="['bg-white-box', bgIndex == 0 ? 'active' : '']">
  8. <span
  9. :class="['bg-white', bgIndex == 0 ? 'active' : '']"
  10. @click="changeBg(0)"
  11. ></span>
  12. </div>
  13. <div :class="['bg-green-box', bgIndex == 1 ? 'active' : '']">
  14. <span
  15. :class="['bg-green', bgIndex == 1 ? 'active' : '']"
  16. @click="changeBg(1)"
  17. ></span>
  18. </div>
  19. </div>
  20. <div class="set-fontSize">
  21. <span
  22. :class="['font-jian-black', bgIndex == 1 ? 'font-jian-yellow' : '']"
  23. @click="setFontSize('-')"
  24. ></span>
  25. <span
  26. :class="['font-img-black', bgIndex == 1 ? 'font-jian-yellow' : '']"
  27. ></span>
  28. <span
  29. :class="['font-jia-black', bgIndex == 1 ? 'font-jia-yellow' : '']"
  30. @click="setFontSize('+')"
  31. ></span>
  32. </div>
  33. </div>
  34. <div class="top-middle">
  35. <template v-if="mp3">
  36. <AudioLineSentence
  37. :key="'sent' + curSentIndex"
  38. :mp3="mp3"
  39. :getCurTime="getCurTime"
  40. ref="audioLineSent"
  41. :audioId="'artPraAudioId' + curSentIndex"
  42. :stopAudio="stopAudio"
  43. :width="120"
  44. :hideSlider="true"
  45. :bg="bg"
  46. :ed="ed"
  47. :maxTime="maxTime"
  48. :bgIndex="bgIndex"
  49. :isRepeat="isRepeat"
  50. @playChange="playChange"
  51. />
  52. </template>
  53. <div
  54. :class="['op-btn', bgIndex == 1 ? 'op-btn-green' : '']"
  55. @click="changeStatus('isRepeat')"
  56. >
  57. <span
  58. :class="[
  59. 'repeat-icon',
  60. !isRepeat ? 'disabled' : '',
  61. isRepeat && bgIndex == 1 ? 'repeat-icon-yellow' : '',
  62. ]"
  63. ></span>
  64. </div>
  65. <div
  66. :class="['op-btn', bgIndex == 1 ? 'op-btn-green' : '']"
  67. @click="changeStatus('isShowPY')"
  68. >
  69. <span
  70. :class="[
  71. 'pinyin-icon',
  72. !isShowPY ? 'disabled' : '',
  73. isShowPY && bgIndex == 1 ? 'pinyin-icon-yellow' : '',
  74. ]"
  75. ></span>
  76. </div>
  77. <div
  78. :class="['op-btn', bgIndex == 1 ? 'op-btn-green' : '']"
  79. @click="changeStatus('isShowEN')"
  80. >
  81. <span
  82. :class="[
  83. 'en-icon',
  84. item && !item.enwords ? 'disabled' : '',
  85. !isShowEN ? 'disabled' : '',
  86. isShowEN && bgIndex == 1 ? 'en-icon-yellow' : '',
  87. ]"
  88. ></span>
  89. </div>
  90. <div
  91. :class="['op-btn', bgIndex == 1 ? 'op-btn-green' : '']"
  92. @click="addColl('isColl')"
  93. >
  94. <span
  95. :class="[
  96. 'coll-icon',
  97. !isColl ? 'disabled' : '',
  98. isColl && bgIndex == 1 ? 'coll-icon-yellow' : '',
  99. ]"
  100. ></span>
  101. </div>
  102. </div>
  103. <div
  104. :class="['op-btn', bgIndex == 1 ? 'op-btn-green' : '']"
  105. @click="exitFullScreen"
  106. >
  107. <span
  108. :class="['close-icon', bgIndex == 1 ? 'close-icon-white' : '']"
  109. ></span>
  110. </div>
  111. </div>
  112. <div
  113. class="voicefull-content"
  114. v-if="item"
  115. @mousemove="showPrevNext(true)"
  116. @mouseleave="showPrevNext(false)"
  117. >
  118. <div
  119. :class="[
  120. 'vc-left vc-left-grey',
  121. isShowPN && bgIndex == 0 ? 'vc-left-black' : '',
  122. isShowPN && bgIndex == 1 ? 'vc-left-white' : '',
  123. curSentIndex == 0 ? 'hidden' : '',
  124. ]"
  125. @click="prevSentence"
  126. ></div>
  127. <div class="vc-main">
  128. <div class="NNPE-words-box">
  129. <div
  130. class="NNPE-words"
  131. v-for="(pItem, pIndex) in item"
  132. :key="'wordsList' + pIndex"
  133. :class="[pItem.wordIndex == 0 ? 'textLeft' : 'textCenter']"
  134. @dblclick="showWordDetail($event, pItem)"
  135. @click="playWord(pItem)"
  136. >
  137. <template v-if="!pItem.width">
  138. <template v-if="pItem.isShow">
  139. <template
  140. v-if="
  141. item[pIndex + 1] &&
  142. item[pIndex + 1].chs &&
  143. chsFhList.indexOf(item[pIndex + 1].chs) > -1
  144. "
  145. >
  146. <span class="NNPE-words-box">
  147. <template v-if="curQue.pyPosition == 'top'">
  148. <span
  149. v-if="isShowPY"
  150. class="NNPE-pinyin"
  151. :class="[
  152. pItem.className ? pItem.className : '',
  153. noFont.indexOf(pItem.pinyin) > -1 ? 'noFont' : '',
  154. bgIndex == 1 ? 'font-white' : '',
  155. ]"
  156. :style="'font-size:' + pySize + 'px'"
  157. >{{ pItem.pinyin }}</span
  158. >
  159. </template>
  160. <span
  161. class="NNPE-chs"
  162. :class="[
  163. pItem.padding && isShowPY ? 'padding' : '',
  164. curQue.pyPosition == 'top' ? 'bottom' : '',
  165. ]"
  166. >
  167. <template>
  168. <span
  169. v-for="(wItem, wIndex) in pItem.leg"
  170. :key="'ci' + wIndex + pIndex"
  171. :class="[
  172. isPlaying &&
  173. pItem.timeList &&
  174. pItem.timeList[wIndex] &&
  175. curTime >= pItem.timeList[wIndex].wordBg &&
  176. curQue.wordTime &&
  177. curQue.wordTime[curSentIndex] &&
  178. curTime <= curQue.wordTime[curSentIndex].ed
  179. ? bgIndex == 0
  180. ? 'active'
  181. : 'active-yellow'
  182. : '',
  183. bgIndex == 1 ? 'font-white' : '',
  184. bgIndex == 0 && wordIndex == pItem.wordIndex
  185. ? 'wordActive'
  186. : '',
  187. bgIndex == 1 && wordIndex == pItem.wordIndex
  188. ? 'wordActive-blue'
  189. : '',
  190. ]"
  191. :style="'font-size:' + hzSize + 'px'"
  192. >{{ pItem.chs[wIndex] }}</span
  193. >
  194. </template>
  195. </span>
  196. <template v-if="curQue.pyPosition == 'bottom'">
  197. <span
  198. v-if="isShowPY"
  199. class="NNPE-pinyin bottom"
  200. :class="[
  201. pItem.className ? pItem.className : '',
  202. noFont.indexOf(pItem.pinyin) > -1 ? 'noFont' : '',
  203. bgIndex == 1 ? 'font-white' : '',
  204. ]"
  205. :style="'font-size:' + pySize + 'px'"
  206. >{{ pItem.pinyin }}</span
  207. >
  208. </template>
  209. </span>
  210. <span class="NNPE-words-box">
  211. <template v-if="curQue.pyPosition == 'top'">
  212. <span
  213. v-if="isShowPY"
  214. :class="[
  215. 'NNPE-pinyin',
  216. noFont.indexOf(item[pIndex + 1].pinyin) > -1
  217. ? 'noFont'
  218. : '',
  219. bgIndex == 1 ? 'font-white' : '',
  220. ]"
  221. :style="{ fontSize: pySize + 'px', textAlign: left }"
  222. >{{ item[pIndex + 1].pinyin }}</span
  223. >
  224. </template>
  225. <span
  226. :class="[
  227. 'NNPE-chs',
  228. curQue.pyPosition == 'top' ? 'bottom' : '',
  229. ]"
  230. :style="{ fontSize: hzSize + 'px', textAlign: left }"
  231. >
  232. <span
  233. :class="[
  234. isPlaying &&
  235. pItem.timeList[pItem.leg - 1] &&
  236. curTime >= pItem.timeList[pItem.leg - 1].wordBg &&
  237. curQue.wordTime &&
  238. curQue.wordTime[curSentIndex] &&
  239. curTime <= curQue.wordTime[curSentIndex].ed
  240. ? bgIndex == 0
  241. ? 'active'
  242. : 'active-yellow'
  243. : '',
  244. bgIndex == 1 ? 'font-white' : '',
  245. ]"
  246. :style="{ fontSize: pySize + 'px' }"
  247. >{{ item[pIndex + 1].chs }}</span
  248. >
  249. </span>
  250. <template v-if="curQue.pyPosition == 'bottom'">
  251. <span
  252. v-if="isShowPY"
  253. :class="[
  254. 'NNPE-pinyin',
  255. noFont.indexOf(item[pIndex + 1].pinyin) > -1
  256. ? 'noFont'
  257. : '',
  258. bgIndex == 1 ? 'font-white' : '',
  259. 'bottom',
  260. ]"
  261. :style="{ fontSize: pySize + 'px', textAlign: left }"
  262. >{{ item[pIndex + 1].pinyin }}</span
  263. >
  264. </template>
  265. </span>
  266. </template>
  267. <template v-else>
  268. <template v-if="curQue.pyPosition == 'top'">
  269. <template v-if="NumberList.indexOf(pItem.pinyin) < 0">
  270. <span
  271. v-if="isShowPY"
  272. class="NNPE-pinyin"
  273. :class="[
  274. pItem.padding ? 'padding' : '',
  275. pItem.className ? pItem.className : '',
  276. noFont.indexOf(pItem.pinyin) > -1 ? 'noFont' : '',
  277. bgIndex == 1 ? 'font-white' : '',
  278. ]"
  279. :style="{ fontSize: pySize + 'px' }"
  280. >{{ pItem.pinyin }}</span
  281. >
  282. </template>
  283. </template>
  284. <span
  285. v-if="pItem.chs != '#'"
  286. class="NNPE-chs"
  287. :class="[
  288. pItem.padding && isShowPY ? 'padding' : '',
  289. curQue.pyPosition == 'top' ? 'bottom' : '',
  290. ]"
  291. >
  292. <template>
  293. <span
  294. v-for="(wItem, wIndex) in pItem.leg"
  295. :key="'ci' + wIndex + pIndex + curSentIndex"
  296. :class="[
  297. isPlaying &&
  298. pItem.timeList &&
  299. pItem.timeList[wIndex] &&
  300. curTime >= pItem.timeList[wIndex].wordBg &&
  301. curQue.wordTime &&
  302. curQue.wordTime[curSentIndex] &&
  303. curTime <= curQue.wordTime[curSentIndex].ed
  304. ? bgIndex == 0
  305. ? 'active'
  306. : 'active-yellow'
  307. : '',
  308. bgIndex == 1 ? 'font-white' : '',
  309. bgIndex == 0 && wordIndex == pItem.wordIndex
  310. ? 'wordActive'
  311. : '',
  312. bgIndex == 1 && wordIndex == pItem.wordIndex
  313. ? 'wordActive-blue'
  314. : '',
  315. ]"
  316. :style="{ fontSize: hzSize + 'px' }"
  317. >{{ pItem.chs[wIndex] }}</span
  318. >
  319. </template>
  320. </span>
  321. <template v-if="curQue.pyPosition == 'bottom'">
  322. <template v-if="NumberList.indexOf(pItem.pinyin) < 0">
  323. <span
  324. v-if="isShowPY"
  325. class="NNPE-pinyin bottom"
  326. :class="[
  327. pItem.padding ? 'padding' : '',
  328. pItem.className ? pItem.className : '',
  329. bgIndex == 1 ? 'font-white' : '',
  330. ]"
  331. :style="{ fontSize: pySize + 'px' }"
  332. >{{ pItem.pinyin }}</span
  333. >
  334. </template>
  335. </template>
  336. </template>
  337. </template>
  338. </template>
  339. <template v-else>
  340. <span
  341. :style="{
  342. height: pItem.height + 'px',
  343. width: pItem.width + 'px',
  344. }"
  345. ></span>
  346. </template>
  347. </div>
  348. </div>
  349. <div style="clear: both; overflow: hidden"></div>
  350. <div
  351. :class="['enwords', bgIndex == 1 ? 'enwords-green' : '']"
  352. :style="{ fontSize: enSize + 'px' }"
  353. >
  354. {{ item.enwords }}
  355. </div>
  356. </div>
  357. <div
  358. :class="[
  359. 'vc-left vc-right-grey',
  360. isShowPN && bgIndex == 0 ? 'vc-right-black' : '',
  361. isShowPN && bgIndex == 1 ? 'vc-right-white' : '',
  362. curSentIndex == sentList.length - 1 ? 'hidden' : '',
  363. ]"
  364. @click="nextSentence"
  365. ></div>
  366. </div>
  367. <div class="voicefull-bottom">
  368. <div class="bottom-left">
  369. <Soundrecorddiff
  370. @handleWav="handleWav"
  371. @getWavblob="getWavblob"
  372. @handleParentPlay="handleParentPlay"
  373. @sentPause="sentPause"
  374. @getRerordStatus="getRerordStatus"
  375. :bgIndex="bgIndex"
  376. />
  377. <div
  378. :class="['compare-box', bgIndex == 1 ? 'compare-box-white' : '']"
  379. v-if="isShowCompare"
  380. >
  381. <Audio-compare
  382. :bgIndex="bgIndex"
  383. type="full"
  384. :themeColor="themeColor"
  385. :index="curSentIndex"
  386. :sentIndex="curSentIndex"
  387. :url="curQue.mp3_list[0].id"
  388. :bg="bg"
  389. :ed="ed"
  390. :wavblob="wavblob"
  391. :getCurTime="getCurTime"
  392. :sentPause="sentPause"
  393. :isRecord="isRecord"
  394. :handleChangeStopAudio="handleChangeStopAudio"
  395. />
  396. </div>
  397. </div>
  398. <div
  399. :class="[
  400. 'page-count',
  401. bgIndex == 0 ? 'page-count-white' : 'page-count-green',
  402. ]"
  403. >
  404. {{ curSentIndex + 1 }}/{{ sentList.length }}
  405. </div>
  406. </div>
  407. <template v-if="isShow">
  408. <div
  409. ref="wordcard"
  410. class="NNPE-wordDetail"
  411. :style="{ top: top + 'px', left: left + 'px' }"
  412. >
  413. <Wordcard
  414. :word="word"
  415. :changeWordCard="changeWordCard"
  416. :themeColor="themeColor"
  417. :currentTreeID="currentTreeID"
  418. />
  419. </div>
  420. </template>
  421. <div class="word-play-audio" v-if="isWordPlay">
  422. <AudioLineSentence
  423. :mp3="mp3"
  424. :getCurTime="getCurWordTime"
  425. ref="audioLineWord"
  426. :audioId="'artPraAudioId' + curSentIndex + wordIndex"
  427. :stopAudio="stopAudio"
  428. :width="120"
  429. :hideSlider="false"
  430. :bg="wordbg"
  431. :ed="worded"
  432. :maxTime="wordMaxTime"
  433. :bgIndex="bgIndex"
  434. :isRepeat="isRepeat"
  435. :wordPlay="true"
  436. @changePlayStatus="changePlayStatus"
  437. />
  438. </div>
  439. </div>
  440. </template>
  441. <script>
  442. import AudioLineSentence from "./AudioLineSentence.vue";
  443. import Soundrecorddiff from "./Soundrecorddiff.vue";
  444. import AudioCompare from "./AudioCompare.vue";
  445. import Wordcard from "./components/Wordcard.vue";
  446. export default {
  447. components: {
  448. AudioLineSentence,
  449. Soundrecorddiff,
  450. AudioCompare,
  451. Wordcard,
  452. },
  453. props: [
  454. "sentList",
  455. "sentIndex",
  456. "mp3",
  457. "wordTimeList",
  458. "curQue",
  459. "noFont",
  460. "themeColor",
  461. "NNPENewWordList",
  462. "currentTreeID",
  463. ],
  464. data() {
  465. return {
  466. pySize: 32,
  467. hzSize: 48,
  468. enSize: 24,
  469. bgIndex: 0,
  470. maxTime: 0,
  471. item: null,
  472. bg: 0,
  473. ed: 0,
  474. isShowPY: true,
  475. isRepeat: false,
  476. isShowEN: true,
  477. isColl: false,
  478. NumberList: [
  479. "①",
  480. "②",
  481. "③",
  482. "④",
  483. "⑤",
  484. "⑥",
  485. "⑦",
  486. "⑧",
  487. "⑨",
  488. "⑩",
  489. "⑪",
  490. "⑫",
  491. "⑬",
  492. "⑭",
  493. "⑮",
  494. "⑯",
  495. "⑰",
  496. "⑱",
  497. "⑲",
  498. "⑳",
  499. ],
  500. chsFhList: [",", "。", "“", ":", "》", "《", "?", "!", ";"],
  501. enFhList: [",", ".", ";", "?", "!", ":", ">", "<"],
  502. curTime: 0,
  503. wavblob: null,
  504. stopAudio: false,
  505. isRecord: false,
  506. isShowCompare: false,
  507. isShowPN: false,
  508. curSentIndex: 0,
  509. oldHz: "",
  510. hz: "",
  511. clientY: 0,
  512. top: 0,
  513. left: 0,
  514. newWordList: [],
  515. pinyin: "",
  516. wordIndex: -1,
  517. isShow: false,
  518. wordbg: 0,
  519. worded: 0,
  520. wordMaxTime: 0,
  521. isWordPlay: false,
  522. curWordTime: 0,
  523. isPlaying: false,
  524. };
  525. },
  526. computed: {
  527. // isPlaying: function () {
  528. // let playing = false;
  529. // if (this.$refs.audioLineSent) {
  530. // playing = this.$refs.audioLineSent.audio.isPlaying;
  531. // }
  532. // console.log(playing);
  533. // return playing;
  534. // },
  535. },
  536. watch: {
  537. sentIndex: {
  538. handler: function (newVal, oldVal) {
  539. this.curSentIndex = newVal;
  540. this.getSentence();
  541. },
  542. deep: true,
  543. },
  544. hz: {
  545. handler: function (val, oldVal) {
  546. let _this = this;
  547. if (val) {
  548. _this.handleNewWords(val);
  549. }
  550. },
  551. // 深度观察监听
  552. deep: true,
  553. },
  554. isShow: {
  555. handler: function (val, oldVal) {
  556. let _this = this;
  557. if (val) {
  558. setTimeout(() => {
  559. _this.cardHeight = _this.$refs.wordcard.offsetHeight;
  560. if (_this.screenHeight - _this.clientY > _this.cardHeight) {
  561. _this.top = _this.clientY + 20;
  562. } else {
  563. _this.top = _this.clientY - _this.cardHeight - 30;
  564. }
  565. }, 50);
  566. }
  567. },
  568. // 深度观察监听
  569. deep: true,
  570. },
  571. },
  572. //方法集合
  573. methods: {
  574. setFontSize(type) {
  575. let _this = this;
  576. if (type == "-") {
  577. if (_this.hzSize >= 34) {
  578. this.hzSize = this.hzSize - 4;
  579. }
  580. }
  581. if (type == "+") {
  582. if (_this.hzSize <= 76) {
  583. this.hzSize = this.hzSize + 4;
  584. }
  585. }
  586. _this.pySize = parseInt(_this.hzSize / 1.5);
  587. _this.enSize = parseInt(_this.hzSize / 2);
  588. },
  589. playChange(bool) {
  590. this.isPlaying = bool;
  591. },
  592. //添加收藏
  593. addColl() {
  594. let Bookdetail = sessionStorage.getItem("Bookdetail");
  595. if (Bookdetail) {
  596. Bookdetail = JSON.parse(Bookdetail);
  597. }
  598. let MethodName = "order-collection_manager-AddMyCollection";
  599. let text = "";
  600. this.item.forEach((item) => {
  601. if (item.chs != "#") {
  602. text += item.chs;
  603. }
  604. });
  605. let sentence_json = {
  606. item: JSON.stringify(this.item),
  607. bg: this.bg,
  608. ed: this.ed,
  609. };
  610. let data = {
  611. goods_id: this.currentTreeID,
  612. goods_type: 501,
  613. goods_name: Bookdetail.name,
  614. goods_person_name_desc: Bookdetail.description
  615. ? Bookdetail.description
  616. : "",
  617. goods_picture_id: Bookdetail.picture_id ? Bookdetail.picture_id : "",
  618. goods_price: Bookdetail.price,
  619. sentence: {
  620. sentence_text: text,
  621. sentence_json: JSON.stringify(sentence_json),
  622. },
  623. };
  624. console.log(text);
  625. LearnWebSI(MethodName, data).then((res) => {
  626. this.isColl = true;
  627. this.$message.success("收藏成功!");
  628. });
  629. },
  630. showPrevNext(bool) {
  631. this.isShowPN = bool;
  632. },
  633. prevSentence() {
  634. if (this.curSentIndex == 0) {
  635. this.$message.warning("已经是第一个句子了");
  636. return;
  637. }
  638. this.curSentIndex = this.curSentIndex - 1;
  639. this.getSentence();
  640. },
  641. nextSentence() {
  642. if (this.curSentIndex == this.sentList.length - 1) {
  643. this.$message.warning("已经是最后一个句子了");
  644. return;
  645. }
  646. this.curSentIndex = this.curSentIndex + 1;
  647. this.getSentence();
  648. },
  649. changeStatus(key) {
  650. this[key] = !this[key];
  651. },
  652. getRerordStatus(bool) {
  653. this.isShowCompare = bool;
  654. },
  655. getWavblob(wavblob) {
  656. this.wavblob = wavblob;
  657. },
  658. sentPause(isRecord) {
  659. this.isRecord = isRecord;
  660. },
  661. getCurTime(curTime) {
  662. let _this = this;
  663. if (_this.isRepeat) {
  664. let time = curTime * 1000;
  665. if (time > _this.ed || time < _this.bg) {
  666. _this.curTime = _this.bg;
  667. this.$refs.audioLineSent.onTimeupdateTime(_this.bg / 1000);
  668. } else {
  669. _this.curTime = curTime * 1000;
  670. }
  671. } else {
  672. _this.curTime = curTime * 1000;
  673. }
  674. },
  675. getCurWordTime(curTime) {
  676. let _this = this;
  677. // if (_this.isRepeat) {
  678. // let time = curTime * 1000;
  679. // if (time > _this.worded || time < _this.worded) {
  680. // _this.curWordTime = _this.worded;
  681. // _this.$refs.audioLineWord.onTimeupdateTime(_this.wordbg / 1000);
  682. // } else {
  683. // _this.curWordTime = curTime * 1000;
  684. // }
  685. // } else {
  686. _this.curWordTime = curTime * 1000;
  687. // }
  688. },
  689. changeBg(bgIndex) {
  690. this.bgIndex = bgIndex;
  691. },
  692. getSentence() {
  693. let _this = this;
  694. _this.pauseAudio();
  695. _this.isPlaying = false;
  696. let item = _this.sentList[_this.curSentIndex];
  697. if (item.sentArr) {
  698. _this.item = item.sentArr;
  699. } else {
  700. _this.item = item;
  701. }
  702. _this.bg = _this.curQue.wordTime[_this.curSentIndex].bg;
  703. _this.ed = _this.curQue.wordTime[_this.curSentIndex].ed;
  704. let maxTime = (_this.ed - _this.bg) / 1000;
  705. if (maxTime < 1) {
  706. _this.maxTime = 1;
  707. } else {
  708. _this.maxTime = maxTime;
  709. }
  710. },
  711. pauseAudio() {
  712. let audio = document.getElementsByTagName("audio");
  713. audio.forEach((item) => {
  714. item.pause();
  715. });
  716. },
  717. exitFullScreen() {
  718. this.pauseAudio();
  719. this.$emit("exitFullscreen");
  720. },
  721. changeFullScreen() {
  722. this.pauseAudio();
  723. this.$emit("changeIsFull");
  724. },
  725. handleWav(data) {},
  726. // 录音时暂停音频播放
  727. handleParentPlay() {
  728. this.stopAudio = true;
  729. },
  730. // 音频播放时改变布尔值
  731. handleChangeStopAudio() {
  732. this.stopAudio = false;
  733. },
  734. //播放音频
  735. playWord(item) {
  736. let _this = this;
  737. _this.pauseAudio();
  738. _this.isWordPlay = false;
  739. _this.wordIndex = item.wordIndex;
  740. setTimeout(() => {
  741. let leg = item.timeList.length;
  742. _this.wordbg = item.timeList[0].wordBg;
  743. _this.worded = item.timeList[leg - 1].wordEd;
  744. let wordMaxTime = (_this.worded - _this.wordbg) / 1000;
  745. if (wordMaxTime < 1) {
  746. _this.wordMaxTime = 1;
  747. } else {
  748. _this.wordMaxTime = wordMaxTime;
  749. }
  750. _this.isWordPlay = true;
  751. }, 50);
  752. },
  753. changePlayStatus() {
  754. this.isWordPlay = false;
  755. this.wordIndex = -1;
  756. },
  757. showWordDetail(e, item) {
  758. let _this = this;
  759. if (_this.chsFhList.indexOf(item.chs) > -1) {
  760. return;
  761. }
  762. if (_this.oldHz != item.chs) {
  763. this.isShow = false;
  764. setTimeout(() => {
  765. _this.hz = item.chs;
  766. _this.pinyin = item.pinyin;
  767. _this.wordIndex = item.wordIndex;
  768. }, 50);
  769. }
  770. _this.clientY = e.clientY;
  771. let left = e.clientX;
  772. let width = 0;
  773. if (item.chs.length == 1 || item.chs.length == 2) {
  774. width = 304;
  775. } else if (item.chs.length == 3 || item.chs.length == 4) {
  776. width = 432;
  777. } else if (item.chs.length > 3) {
  778. width = 560;
  779. }
  780. // if (left - this.bodyLeft > this.contentWidth / 2) {
  781. // _this.left = left - width + 10;
  782. // } else {
  783. _this.left = left - width / 2;
  784. //}
  785. },
  786. changeWordCard(isShow) {
  787. let _this = this;
  788. _this.isShow = isShow;
  789. _this.oldHz = "";
  790. _this.hz = "";
  791. _this.wordIndex = -1;
  792. },
  793. // 处理分词数据
  794. handleNewWords(val) {
  795. let _this = this;
  796. _this.isShow = true;
  797. _this.word = null;
  798. if (_this.newWordList.indexOf(val) > -1) {
  799. for (let i = 0; i < this.NNPENewWordList.length; i++) {
  800. let pItem = this.NNPENewWordList[i];
  801. for (let j = 0; j < pItem.length; j++) {
  802. let item = pItem[j];
  803. if (item.new_word.trim() == val.trim()) {
  804. let wordlist = val.split("");
  805. this.word = { list: wordlist, detail: item };
  806. break;
  807. }
  808. }
  809. }
  810. } else {
  811. let wordlist = val.split("");
  812. let option = {
  813. definition_list: [],
  814. mp3_list: [],
  815. new_word: val,
  816. pinyin: _this.pinyin,
  817. };
  818. _this.word = { list: wordlist, detail: option };
  819. }
  820. _this.oldHz = val;
  821. },
  822. handleNewword() {
  823. let NewWordList = [];
  824. this.NNPENewWordList.forEach((item) => {
  825. item.forEach((wItem) => {
  826. NewWordList.push(wItem.new_word);
  827. });
  828. });
  829. this.newWordList = JSON.parse(JSON.stringify(NewWordList));
  830. },
  831. },
  832. //生命周期 - 创建完成(可以访问当前this实例)
  833. created() {},
  834. //生命周期 - 挂载完成(可以访问DOM元素)
  835. mounted() {
  836. let _this = this;
  837. if (_this.NNPENewWordList) {
  838. _this.handleNewword();
  839. }
  840. _this.curSentIndex = _this.sentIndex;
  841. _this.getSentence();
  842. let isFullscreen =
  843. document.fullscreenElement ||
  844. document.mozFullScreenElement ||
  845. document.webkitFullscreenElement ||
  846. document.fullScreen ||
  847. document.mozFullScreen ||
  848. document.webkitIsFullScreen;
  849. isFullscreen = !!isFullscreen;
  850. document.addEventListener("fullscreenchange", () => {
  851. let isFullscreen =
  852. document.fullscreenElement ||
  853. document.mozFullScreenElement ||
  854. document.webkitFullscreenElement ||
  855. document.fullScreen ||
  856. document.mozFullScreen ||
  857. document.webkitIsFullScreen;
  858. if (!isFullscreen) {
  859. _this.changeFullScreen();
  860. }
  861. });
  862. document.addEventListener("mozfullscreenchange", () => {
  863. let isFullscreen =
  864. document.fullscreenElement ||
  865. document.mozFullScreenElement ||
  866. document.webkitFullscreenElement ||
  867. document.fullScreen ||
  868. document.mozFullScreen ||
  869. document.webkitIsFullScreen;
  870. if (!isFullscreen) {
  871. _this.changeFullScreen();
  872. }
  873. });
  874. document.addEventListener("webkitfullscreenchange", () => {
  875. let isFullscreen =
  876. document.fullscreenElement ||
  877. document.mozFullScreenElement ||
  878. document.webkitFullscreenElement ||
  879. document.fullScreen ||
  880. document.mozFullScreen ||
  881. document.webkitIsFullScreen;
  882. if (!isFullscreen) {
  883. _this.changeFullScreen();
  884. }
  885. });
  886. document.addEventListener("msfullscreenchange", () => {
  887. let isFullscreen =
  888. document.fullscreenElement ||
  889. document.mozFullScreenElement ||
  890. document.webkitFullscreenElement ||
  891. document.fullScreen ||
  892. document.mozFullScreen ||
  893. document.webkitIsFullScreen;
  894. if (!isFullscreen) {
  895. _this.changeFullScreen();
  896. }
  897. });
  898. },
  899. beforeCreate() {}, //生命周期 - 创建之前
  900. beforeMount() {}, //生命周期 - 挂载之前
  901. beforeUpdate() {}, //生命周期 - 更新之前
  902. updated() {}, //生命周期 - 更新之后
  903. beforeDestroy() {}, //生命周期 - 销毁之前
  904. destroyed() {}, //生命周期 - 销毁完成
  905. activated() {}, //如果页面有keep-alive缓存功能,这个函数会触发
  906. };
  907. </script>
  908. <style lang='scss' scoped>
  909. //@import url(); 引入公共css类
  910. .voicefull {
  911. width: 100%;
  912. height: 100vh;
  913. overflow: hidden;
  914. display: flex;
  915. flex-direction: column;
  916. .NNPE-wordDetail {
  917. position: fixed;
  918. z-index: 9999;
  919. }
  920. &.bg1 {
  921. background: #fff;
  922. }
  923. &.bg2 {
  924. background: linear-gradient(180deg, #274533 0%, #385f45 100%);
  925. }
  926. &-top {
  927. height: 136px;
  928. display: flex;
  929. justify-content: space-between;
  930. align-items: center;
  931. padding: 0 40px;
  932. .top-left {
  933. display: flex;
  934. justify-content: flex-start;
  935. align-items: center;
  936. }
  937. .select-bg {
  938. display: flex;
  939. justify-content: space-between;
  940. align-items: center;
  941. width: 96px;
  942. height: 56px;
  943. border: 1px solid rgba(0, 0, 0, 0.1);
  944. border-radius: 40px;
  945. display: flex;
  946. justify-content: center;
  947. align-items: center;
  948. box-sizing: border-box;
  949. margin-right: 32px;
  950. &.select-bg-blue {
  951. background: rgba(255, 255, 255, 0.1);
  952. border: 1px solid rgba(0, 0, 0, 0.1);
  953. }
  954. > div {
  955. width: 36px;
  956. height: 36px;
  957. border-radius: 100%;
  958. display: flex;
  959. justify-content: center;
  960. align-items: center;
  961. &.bg-white-box {
  962. background: 0 0;
  963. margin-right: 4px;
  964. &.active {
  965. background: #de4444;
  966. }
  967. }
  968. &.bg-green-box {
  969. background: #fff;
  970. &.active {
  971. background: #ffc600;
  972. }
  973. }
  974. > span {
  975. width: 24px;
  976. height: 24px;
  977. border-radius: 100%;
  978. box-sizing: border-box;
  979. cursor: pointer;
  980. &.bg-white {
  981. background: #fff;
  982. }
  983. &.bg-green {
  984. background: linear-gradient(180deg, #274533 0%, #385f45 100%);
  985. }
  986. }
  987. }
  988. }
  989. .set-fontSize {
  990. padding: 0 20px;
  991. height: 56px;
  992. background: #ffffff;
  993. border: 1px solid rgba(0, 0, 0, 0.1);
  994. border-radius: 40px;
  995. display: flex;
  996. justify-content: center;
  997. align-items: center;
  998. > span {
  999. width: 24px;
  1000. height: 24px;
  1001. margin: 0 4px;
  1002. &.font-jian {
  1003. &-black {
  1004. background: url("../../../assets/NPC/jian-black.png") no-repeat left
  1005. top;
  1006. background-size: 100% 100%;
  1007. }
  1008. &-yellow {
  1009. background: url("../../../assets/NPC/jian-yellow.png") no-repeat
  1010. left top;
  1011. background-size: 100% 100%;
  1012. }
  1013. }
  1014. &.font-img {
  1015. &-black {
  1016. background: url("../../../assets/NPC/fontSize-black.png") no-repeat
  1017. left top;
  1018. background-size: 100% 100%;
  1019. }
  1020. &-yellow {
  1021. background: url("../../../assets/NPC/fontSize-yellow.png") no-repeat
  1022. left top;
  1023. background-size: 100% 100%;
  1024. }
  1025. }
  1026. &.font-jia {
  1027. &-black {
  1028. background: url("../../../assets/NPC/jia-black.png") no-repeat left
  1029. top;
  1030. background-size: 100% 100%;
  1031. }
  1032. &-yellow {
  1033. background: url("../../../assets/NPC/jia-yellow.png") no-repeat left
  1034. top;
  1035. background-size: 100% 100%;
  1036. }
  1037. }
  1038. }
  1039. }
  1040. .top-middle {
  1041. display: flex;
  1042. justify-content: center;
  1043. align-items: center;
  1044. .audio-box {
  1045. width: 56px;
  1046. height: 56px;
  1047. background: #ffffff;
  1048. border: 1px solid rgba(0, 0, 0, 0.1);
  1049. border-radius: 40px;
  1050. display: flex;
  1051. justify-content: center;
  1052. align-items: center;
  1053. &-green {
  1054. background: rgba(255, 255, 255, 0.1);
  1055. border: 1px solid rgba(0, 0, 0, 0.1);
  1056. }
  1057. }
  1058. }
  1059. .op-btn {
  1060. width: 56px;
  1061. height: 56px;
  1062. border-radius: 100%;
  1063. display: flex;
  1064. justify-content: center;
  1065. align-items: center;
  1066. cursor: pointer;
  1067. margin-left: 32px;
  1068. background: #ffffff;
  1069. border: 1px solid rgba(0, 0, 0, 0.1);
  1070. box-sizing: border-box;
  1071. &-green {
  1072. background: rgba(255, 255, 255, 0.1);
  1073. border: 1px solid rgba(0, 0, 0, 0.1);
  1074. }
  1075. &.close-btn {
  1076. background: #274533;
  1077. border: 1px solid rgba(0, 0, 0, 0.1);
  1078. }
  1079. > span {
  1080. width: 24px;
  1081. height: 24px;
  1082. &.close-icon {
  1083. background: url("../../../assets/icon/cross-24-normal-black.png")
  1084. no-repeat left top;
  1085. background-size: 100% 100%;
  1086. &-white {
  1087. background: url("../../../assets/icon/cross-24-normal-white.png")
  1088. no-repeat left top;
  1089. background-size: 100% 100%;
  1090. }
  1091. }
  1092. }
  1093. }
  1094. }
  1095. .repeat-icon {
  1096. background: url("../../../assets/icon/Repeat-24-normal-red.png") no-repeat
  1097. left top;
  1098. background-size: 100% 100%;
  1099. &.disabled {
  1100. background: url("../../../assets/icon/Repeat-24-disable-Black.png")
  1101. no-repeat left top;
  1102. background-size: 100% 100%;
  1103. }
  1104. &-yellow {
  1105. background: url("../../../assets/icon/Repeat-24-normal-yellow.png")
  1106. no-repeat left top;
  1107. background-size: 100% 100%;
  1108. }
  1109. }
  1110. .pinyin-icon {
  1111. background: url("../../../assets/icon/pinyin-24-normal-red.png") no-repeat
  1112. left top;
  1113. background-size: 100% 100%;
  1114. &.disabled {
  1115. background: url("../../../assets/icon/pinyin-24-disable-Black.png")
  1116. no-repeat left top;
  1117. background-size: 100% 100%;
  1118. }
  1119. &-yellow {
  1120. background: url("../../../assets/icon/pinyin-24-normal-yellow.png")
  1121. no-repeat left top;
  1122. background-size: 100% 100%;
  1123. }
  1124. }
  1125. .en-icon {
  1126. background: url("../../../assets/icon/EN-24-normal-Red.png") no-repeat left
  1127. top;
  1128. background-size: 100% 100%;
  1129. &.disabled {
  1130. background: url("../../../assets/icon/EN-24-disable-Black.png") no-repeat
  1131. left top;
  1132. background-size: 100% 100%;
  1133. }
  1134. &-yellow {
  1135. background: url("../../../assets/icon/EN-24-normal-yellow.png") no-repeat
  1136. left top;
  1137. background-size: 100% 100%;
  1138. }
  1139. }
  1140. .coll-icon {
  1141. background: url("../../../assets/icon/bookmarkfill-24-normal-red.png")
  1142. no-repeat left top;
  1143. background-size: 100% 100%;
  1144. &.disabled {
  1145. background: url("../../../assets/icon/bookmarkfill-24-disable-Black.png")
  1146. no-repeat left top;
  1147. background-size: 100% 100%;
  1148. }
  1149. &-yellow {
  1150. background: url("../../../assets/icon/bookmarkfill-24-normal-yellow.png")
  1151. no-repeat left top;
  1152. background-size: 100% 100%;
  1153. }
  1154. }
  1155. &-content {
  1156. flex: 1;
  1157. width: 100%;
  1158. box-sizing: border-box;
  1159. padding: 0 36px;
  1160. display: flex;
  1161. align-items: center;
  1162. .vc-left {
  1163. width: 64px;
  1164. height: 64px;
  1165. cursor: pointer;
  1166. &-grey {
  1167. background: url("../../../assets/NPC/left-grey.png") no-repeat left top;
  1168. background-size: 100% 100%;
  1169. }
  1170. &-black {
  1171. background: url("../../../assets/NPC/left-black.png") no-repeat left top;
  1172. background-size: 100% 100%;
  1173. }
  1174. &-white {
  1175. background: url("../../../assets/NPC/left-white.png") no-repeat left top;
  1176. background-size: 100% 100%;
  1177. }
  1178. &.hidden {
  1179. visibility: hidden;
  1180. }
  1181. }
  1182. .vc-right {
  1183. width: 64px;
  1184. height: 64px;
  1185. cursor: pointer;
  1186. &-grey {
  1187. background: url("../../../assets/NPC/right-grey.png") no-repeat left top;
  1188. background-size: 100% 100%;
  1189. }
  1190. &-black {
  1191. background: url("../../../assets/NPC/right-black.png") no-repeat left
  1192. top;
  1193. background-size: 100% 100%;
  1194. }
  1195. &-white {
  1196. background: url("../../../assets/NPC/right-white.png") no-repeat left
  1197. top;
  1198. background-size: 100% 100%;
  1199. }
  1200. }
  1201. .vc-main {
  1202. width: fit-content;
  1203. margin: 0 auto;
  1204. .enwords {
  1205. padding: 0 3px;
  1206. margin-top: 40px;
  1207. color: rgba(0, 0, 0, 0.45);
  1208. font-size: 24px;
  1209. line-height: 32px;
  1210. font-family: "robot";
  1211. &-green {
  1212. color: rgba(255, 255, 255, 0.65);
  1213. }
  1214. }
  1215. }
  1216. .NNPE-words {
  1217. float: left;
  1218. user-select: none;
  1219. -webkit-user-select: none;
  1220. -moz-user-select: none;
  1221. -ms-user-select: none;
  1222. &-box {
  1223. float: left;
  1224. > span {
  1225. display: block;
  1226. &.NNPE-pinyin {
  1227. font-family: "GB-PINYINOK-B";
  1228. font-weight: normal;
  1229. font-size: 32px;
  1230. line-height: 1.25;
  1231. box-sizing: border-box;
  1232. color: rgba(0, 0, 0, 0.85);
  1233. &.bottom {
  1234. padding-bottom: 16px;
  1235. }
  1236. &.noFont {
  1237. font-family: initial;
  1238. }
  1239. &.textLeft {
  1240. text-align: left;
  1241. }
  1242. &.font-white {
  1243. color: #fff;
  1244. }
  1245. &.wordBlank {
  1246. color: rgba(0, 0, 0, 0.85);
  1247. }
  1248. }
  1249. &.NNPE-chs {
  1250. font-family: "FZJCGFKTK";
  1251. font-size: 48px;
  1252. line-height: 1.17;
  1253. color: rgba(0, 0, 0, 0.85);
  1254. &.bottom {
  1255. padding-bottom: 16px;
  1256. }
  1257. .font-white {
  1258. color: #fff;
  1259. }
  1260. .active {
  1261. color: #de4444;
  1262. &-yellow {
  1263. color: #ffc600;
  1264. }
  1265. }
  1266. .wordActive {
  1267. color: #de4444;
  1268. }
  1269. .wordActive-blue {
  1270. color: #ffc600;
  1271. }
  1272. }
  1273. // &.padding {
  1274. // padding-right: 6px;
  1275. // }
  1276. }
  1277. }
  1278. &.textLeft {
  1279. text-align: left;
  1280. }
  1281. &.textCenter {
  1282. text-align: center;
  1283. }
  1284. > span {
  1285. display: block;
  1286. &.NNPE-pinyin {
  1287. font-family: "GB-PINYINOK-B";
  1288. font-weight: normal;
  1289. font-size: 32px;
  1290. line-height: 1.25;
  1291. box-sizing: border-box;
  1292. color: rgba(0, 0, 0, 0.85);
  1293. &.bottom {
  1294. padding-bottom: 16px;
  1295. }
  1296. &.font-white {
  1297. color: #fff;
  1298. }
  1299. &.noFont {
  1300. font-family: initial;
  1301. }
  1302. &.textLeft {
  1303. text-align: left;
  1304. }
  1305. &.wordBlank {
  1306. color: rgba(0, 0, 0, 0.85);
  1307. }
  1308. }
  1309. &.NNPE-chs {
  1310. font-family: "FZJCGFKTK";
  1311. font-size: 48px;
  1312. line-height: 1.17;
  1313. color: rgba(0, 0, 0, 0.85);
  1314. &.bottom {
  1315. padding-bottom: 16px;
  1316. }
  1317. .font-white {
  1318. color: #fff;
  1319. }
  1320. .active {
  1321. color: #de4444;
  1322. &-yellow {
  1323. color: #ffc600;
  1324. }
  1325. }
  1326. .wordActive {
  1327. color: #de4444;
  1328. }
  1329. .wordActive-blue {
  1330. color: #ffc600;
  1331. }
  1332. }
  1333. &.padding {
  1334. padding-left: 3px;
  1335. padding-right: 3px;
  1336. }
  1337. }
  1338. }
  1339. }
  1340. &-bottom {
  1341. height: 136px;
  1342. display: flex;
  1343. justify-content: space-between;
  1344. align-items: center;
  1345. padding-right: 40px;
  1346. .bottom-left {
  1347. display: flex;
  1348. justify-content: flex-start;
  1349. align-items: center;
  1350. .compare-box {
  1351. height: 56px;
  1352. padding: 16px 16px;
  1353. box-sizing: border-box;
  1354. border: 1px solid rgba(0, 0, 0, 0.1);
  1355. border-radius: 0 40px 40px 0;
  1356. border-left: 0px solid rgba(0, 0, 0, 0.1);
  1357. &-white {
  1358. background: rgba(255, 255, 255, 0.1);
  1359. border: 1px solid rgba(0, 0, 0, 0.1);
  1360. border-left: 0;
  1361. }
  1362. }
  1363. }
  1364. .page-count {
  1365. padding: 8px;
  1366. font-size: 16px;
  1367. line-height: 24px;
  1368. font-family: "robot";
  1369. color: #000000;
  1370. min-width: 60px;
  1371. box-sizing: border-box;
  1372. border-radius: 8px;
  1373. background: #fff;
  1374. text-align: center;
  1375. &-green {
  1376. color: #ffffff;
  1377. background: rgba(255, 255, 255, 0.2);
  1378. }
  1379. }
  1380. }
  1381. }
  1382. .word-play-audio {
  1383. position: absolute;
  1384. left: -1000px;
  1385. }
  1386. </style>
  1387. <style lang="scss">
  1388. .NPC-Big-Book-preview-green {
  1389. .bg1 {
  1390. .repeat-icon {
  1391. background: url("../../../assets/icon/Repeat-24-normal-Green.png")
  1392. no-repeat left top;
  1393. background-size: 100% 100%;
  1394. }
  1395. .pinyin-icon {
  1396. background: url("../../../assets/icon/pinyin-24-normal-green.png")
  1397. no-repeat left top;
  1398. background-size: 100% 100%;
  1399. }
  1400. .en-icon {
  1401. background: url("../../../assets/icon/EN-24-normal-Green.png") no-repeat
  1402. left top;
  1403. background-size: 100% 100%;
  1404. }
  1405. .coll-icon {
  1406. background: url("../../../assets/icon/bookmarkfill-24-normal-green.png")
  1407. no-repeat left top;
  1408. background-size: 100% 100%;
  1409. }
  1410. }
  1411. }
  1412. .NPC-Big-Book-preview-brown {
  1413. .bg1 {
  1414. .repeat-icon {
  1415. background: url("../../../assets/icon/Repeat-24-normal-Brown.png")
  1416. no-repeat left top;
  1417. background-size: 100% 100%;
  1418. }
  1419. .pinyin-icon {
  1420. background: url("../../../assets/icon/pinyin-24-normal-brown.png")
  1421. no-repeat left top;
  1422. background-size: 100% 100%;
  1423. }
  1424. .en-icon {
  1425. background: url("../../../assets/icon/EN-24-normal-Brown.png") no-repeat
  1426. left top;
  1427. background-size: 100% 100%;
  1428. }
  1429. .coll-icon {
  1430. background: url("../../../assets/icon/bookmarkfill-24-normal-brown.png")
  1431. no-repeat left top;
  1432. background-size: 100% 100%;
  1433. }
  1434. }
  1435. }
  1436. </style>