articleDetail.vue 67 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292
  1. <template>
  2. <div
  3. class="bookStore"
  4. :style="{ background: bgColorList[activeIndex].contentBg }"
  5. v-if="articleInfo"
  6. :v-loading="loading"
  7. >
  8. <Header :LoginNavIndex="LoginNavIndex" />
  9. <div
  10. class="navBar"
  11. :class="['navBar-' + bgColorList[activeIndex].type]"
  12. :style="{ background: bgColorList[activeIndex].navBg }"
  13. >
  14. <div class="navBar-left">
  15. <a class="goback" @click="$router.go(-1)"
  16. ><i class="el-icon-arrow-left"></i> 第 {{ articleInfo.iss_no }} 期</a
  17. >
  18. <div class="border"></div>
  19. <p class="article-title">{{ articleInfo.art_title }}</p>
  20. </div>
  21. <div class="navBar-right">
  22. <el-input-number
  23. class="article-fontsize"
  24. v-model="wordFontsize"
  25. :step="2"
  26. step-strictly
  27. :min="12"
  28. :max="28"
  29. :style="{ borderColor: bgColorList[activeIndex].boxBorder }"
  30. ></el-input-number>
  31. <ul
  32. class="article-color"
  33. :style="{ borderColor: bgColorList[activeIndex].boxBorder }"
  34. >
  35. <li
  36. :class="['color-item', activeIndex === indexC ? 'active' : '']"
  37. v-for="(itemC, indexC) in bgColorList"
  38. :key="indexC"
  39. @click="handleChangeBgColor(indexC)"
  40. :style="{
  41. borderColor: activeIndex === indexC ? itemC.border_active : '',
  42. }"
  43. >
  44. <a
  45. :style="{
  46. background: itemC.border,
  47. borderColor: activeIndex === indexC ? itemC.borderColor : '',
  48. }"
  49. ></a>
  50. </li>
  51. </ul>
  52. </div>
  53. </div>
  54. <div class="article-box">
  55. <div
  56. class="artricle-inner"
  57. :style="{ background: bgColorList[activeIndex].contentInnerBg }"
  58. >
  59. <!-- 文章 -->
  60. <div class="atricle-data">
  61. <normal-model
  62. :titleFontsize="48"
  63. :wordFontsize="wordFontsize"
  64. :colorObj="bgColorList[activeIndex]"
  65. :articleType="articleType"
  66. :style="{ padding: '0 40px' }"
  67. v-if="menuType === 'original'"
  68. :articleInfo="articleInfo"
  69. :likeSentencelist="likeSentencelist"
  70. :likeWord="likeWordList"
  71. :articleImg="articleImg"
  72. :activeArticleIndexLen="issueChnTanList.length"
  73. :activeArticleIndex="activeArticleIndex"
  74. @handlePage="handlePage"
  75. ></normal-model>
  76. <phrase-model
  77. :titleFontsize="48"
  78. :wordFontsize="wordFontsize"
  79. :colorObj="bgColorList[activeIndex]"
  80. :articleType="articleType"
  81. :style="{ padding: '0 40px' }"
  82. v-if="menuType === 'newWord'"
  83. :articleInfo="articleInfo"
  84. :likePhraseList="likePhraseList"
  85. :likeWord="likeWordList"
  86. @changeLike="changeLike"
  87. :likeSentencelist="likeSentencelist"
  88. :articleImg="articleImg"
  89. ></phrase-model>
  90. <practice-model
  91. :titleFontsize="48"
  92. :wordFontsize="wordFontsize"
  93. :colorObj="bgColorList[activeIndex]"
  94. :articleType="articleType"
  95. :style="{ padding: '0 40px' }"
  96. v-if="menuType === 'practice'"
  97. :articleInfo="articleInfo"
  98. :likeSentencelist="likeSentencelist"
  99. :likeWord="likeWordList"
  100. :articleImg="articleImg"
  101. ></practice-model>
  102. <inner-text-search
  103. :titleFontsize="48"
  104. :wordFontsize="wordFontsize"
  105. :colorObj="bgColorList[activeIndex]"
  106. :articleType="articleType"
  107. :style="{ padding: '0 40px' }"
  108. v-if="menuType === 'search'"
  109. :articleInfo="articleInfo"
  110. ref="innerTextSearchs"
  111. :likeSentencelist="likeSentencelist"
  112. :likeWord="likeWordList"
  113. :articleImg="articleImg"
  114. ></inner-text-search>
  115. <lexical-type
  116. :titleFontsize="48"
  117. :wordFontsize="wordFontsize"
  118. :colorObj="bgColorList[activeIndex]"
  119. :articleType="articleType"
  120. :style="{ padding: '0 40px' }"
  121. v-if="menuType === 'filtrate'"
  122. :articleInfo="articleInfo"
  123. ref="lexicalType"
  124. :likeSentencelist="likeSentencelist"
  125. :likeWord="likeWordList"
  126. :articleImg="articleImg"
  127. ></lexical-type>
  128. <notes-model
  129. :titleFontsize="48"
  130. :wordFontsize="wordFontsize"
  131. :colorObj="bgColorList[activeIndex]"
  132. :articleType="articleType"
  133. :style="{ padding: '0 40px' }"
  134. v-if="menuType === 'notebook'"
  135. :articleInfo="articleInfo"
  136. :likeSentencelist="likeSentencelist"
  137. :likeWord="likeWordList"
  138. :articleImg="articleImg"
  139. ></notes-model>
  140. </div>
  141. <div
  142. class="article-btn"
  143. v-if="this.$route.query.iss_id && menuType !== 'practice'"
  144. :style="{ background: bgColorList[activeIndex].glossaryBg }"
  145. >
  146. <div class="left">
  147. <span
  148. :class="['support colloct-article', !noRead ? 'active' : '']"
  149. @click="changeStatus('noRead')"
  150. ><svg-icon
  151. icon-class="like-line"
  152. :style="{ marginRight: articleNumber ? '8px' : '0px' }"
  153. ></svg-icon
  154. >{{ articleNumber ? articleNumber : "" }}</span
  155. >
  156. <!-- <span :class="['oppose',oppose?'active':'']" @click="changeStatus('oppose')"><svg-icon icon-class="oppose"></svg-icon></span> -->
  157. </div>
  158. <div class="center">
  159. <el-button
  160. type="text"
  161. class="btn-left"
  162. :class="[activeArticleIndex === 0 ? 'not-allow' : '']"
  163. @click="handlePage('-')"
  164. :style="{ color: bgColorList[activeIndex].btnColor }"
  165. ><svg-icon icon-class="arrow-left-line"></svg-icon
  166. >上一篇</el-button
  167. >
  168. <el-button
  169. type="text"
  170. class="btn-right"
  171. :class="[
  172. activeArticleIndex === issueChnTanList.length - 1
  173. ? 'not-allow'
  174. : '',
  175. ]"
  176. @click="handlePage('+')"
  177. :style="{ color: bgColorList[activeIndex].btnColor }"
  178. >下一篇<svg-icon icon-class="arrow-right-line"></svg-icon
  179. ></el-button>
  180. </div>
  181. <div class="right">
  182. <template v-if="support">
  183. <span
  184. class="support"
  185. @click="handleReadArticle"
  186. :style="{ color: bgColorList[activeIndex].btnColor }"
  187. ><svg-icon icon-class="no-read"></svg-icon>标记为已读</span
  188. >
  189. </template>
  190. <template v-else>
  191. <span
  192. class="support readed"
  193. :style="{ color: bgColorList[activeIndex].btnColor }"
  194. ><svg-icon
  195. icon-class="readed"
  196. :style="{ color: bgColorList[activeIndex].btnColor }"
  197. ></svg-icon
  198. >已读</span
  199. >
  200. </template>
  201. </div>
  202. </div>
  203. <!-- 词汇表 -->
  204. <div class="glossary-box" v-if="menuType !== 'practice'">
  205. <div
  206. class="title"
  207. :style="{ color: bgColorList[activeIndex].glossaryTitle }"
  208. v-if="
  209. (articleInfo.art_voc_data &&
  210. articleInfo.art_voc_data.length > 0) ||
  211. (articleInfo.art_phrase_data &&
  212. articleInfo.art_phrase_data.length > 0) ||
  213. (articleInfo.art_explain_data &&
  214. articleInfo.art_explain_data.length > 0)
  215. "
  216. >
  217. <h2>词汇表</h2>
  218. <a @click="showGlossary = !showGlossary">{{
  219. showGlossary ? "收起" : "展开"
  220. }}</a>
  221. </div>
  222. <el-collapse-transition>
  223. <div v-if="showGlossary">
  224. <template
  225. v-if="
  226. articleInfo.art_voc_data &&
  227. articleInfo.art_voc_data.length > 0
  228. "
  229. >
  230. <h4
  231. :style="{ color: bgColorList[activeIndex].glossarySubtitle }"
  232. >
  233. 生词
  234. </h4>
  235. <new-word-list
  236. class="newWord-list"
  237. :list="articleInfo.art_voc_data"
  238. :style="{ background: bgColorList[activeIndex].glossaryBg }"
  239. :colorObj="bgColorList[activeIndex]"
  240. :likeWordList="likeWordList"
  241. @changeLike="changeLike"
  242. ref="newWordList"
  243. ></new-word-list>
  244. </template>
  245. <template
  246. v-if="
  247. articleInfo.art_phrase_data &&
  248. articleInfo.art_phrase_data.length > 0
  249. "
  250. >
  251. <h4
  252. :style="{ color: bgColorList[activeIndex].glossarySubtitle }"
  253. >
  254. 短语
  255. </h4>
  256. <phrase-list
  257. class="newWord-list"
  258. :list="articleInfo.art_phrase_data"
  259. :style="{ background: bgColorList[activeIndex].glossaryBg }"
  260. :colorObj="bgColorList[activeIndex]"
  261. :likePhraseList="likePhraseList"
  262. @changeLike="changeLike"
  263. ref="phraseList"
  264. ></phrase-list>
  265. </template>
  266. <template
  267. v-if="
  268. articleInfo.art_explain_data &&
  269. articleInfo.art_explain_data.length > 0
  270. "
  271. >
  272. <h4
  273. :style="{ color: bgColorList[activeIndex].glossarySubtitle }"
  274. >
  275. 注释
  276. </h4>
  277. <annotation-list
  278. class="newWord-list"
  279. :list="articleInfo.art_explain_data"
  280. :style="{ background: bgColorList[activeIndex].glossaryBg }"
  281. :colorObj="bgColorList[activeIndex]"
  282. ></annotation-list>
  283. </template>
  284. </div>
  285. </el-collapse-transition>
  286. <div
  287. class="title"
  288. :style="{
  289. color: bgColorList[activeIndex].glossaryTitle,
  290. marginTop: '40px',
  291. }"
  292. v-if="articleInfo.en_flag"
  293. >
  294. <h2>详细统计</h2>
  295. <a @click="showWordInfo = !showWordInfo">{{
  296. showWordInfo ? "收起" : "展开"
  297. }}</a>
  298. </div>
  299. <el-collapse-transition v-if="articleInfo.en_flag">
  300. <div v-if="showWordInfo">
  301. <h4 :style="{ color: bgColorList[activeIndex].glossarySubtitle }">
  302. 词汇信息
  303. </h4>
  304. <div
  305. class="word-info"
  306. v-if="
  307. articleInfo.art_corpus_data &&
  308. articleInfo.art_corpus_data.artStatInfo
  309. "
  310. >
  311. <div
  312. :style="{ background: bgColorList[activeIndex].glossaryBg }"
  313. >
  314. <label
  315. :style="{ color: bgColorList[activeIndex].statisticTitle }"
  316. >文章长度</label
  317. >
  318. <span
  319. :style="{ color: bgColorList[activeIndex].statisticValue }"
  320. >{{ articleInfo.art_corpus_data.artStatInfo.wc }}</span
  321. >
  322. </div>
  323. <div
  324. :style="{ background: bgColorList[activeIndex].glossaryBg }"
  325. >
  326. <label
  327. :style="{ color: bgColorList[activeIndex].statisticTitle }"
  328. >词汇数量</label
  329. >
  330. <span
  331. :style="{ color: bgColorList[activeIndex].statisticValue }"
  332. >{{ articleInfo.art_corpus_data.artStatInfo.wdc }}</span
  333. >
  334. </div>
  335. <div
  336. :style="{ background: bgColorList[activeIndex].glossaryBg }"
  337. >
  338. <label
  339. :style="{ color: bgColorList[activeIndex].statisticTitle }"
  340. >平均词长</label
  341. >
  342. <span
  343. :style="{ color: bgColorList[activeIndex].statisticValue }"
  344. >{{
  345. articleInfo.art_corpus_data.artStatInfo.avgWordLen
  346. }}</span
  347. >
  348. </div>
  349. <div
  350. :style="{ background: bgColorList[activeIndex].glossaryBg }"
  351. >
  352. <label
  353. :style="{ color: bgColorList[activeIndex].statisticTitle }"
  354. >词汇密度</label
  355. >
  356. <span
  357. :style="{ color: bgColorList[activeIndex].statisticValue }"
  358. >{{
  359. articleInfo.art_corpus_data.artStatInfo.vocabDensity
  360. }}</span
  361. >
  362. </div>
  363. <div
  364. :style="{ background: bgColorList[activeIndex].glossaryBg }"
  365. >
  366. <label
  367. :style="{ color: bgColorList[activeIndex].statisticTitle }"
  368. >词汇难度</label
  369. >
  370. <span
  371. :style="{ color: bgColorList[activeIndex].statisticValue }"
  372. >{{
  373. articleInfo.art_corpus_data.artStatInfo.vocabHardLevel
  374. }}</span
  375. >
  376. </div>
  377. </div>
  378. <h4 :style="{ color: bgColorList[activeIndex].glossarySubtitle }">
  379. 词汇分布
  380. </h4>
  381. <div
  382. class="echarts-box"
  383. v-if="
  384. articleInfo &&
  385. articleInfo.art_corpus_data &&
  386. articleInfo.art_corpus_data.artStatInfo &&
  387. articleInfo.art_corpus_data.artStatInfo.vocabVlLevelItems
  388. "
  389. >
  390. <ul class="echarts-type">
  391. <li
  392. v-for="(itemE, indexE) in articleInfo.art_corpus_data
  393. .artStatInfo.vocabVlLevelItems"
  394. :key="indexE"
  395. @mouseover="gaolangbzt(indexE, 'shanxing_main')"
  396. @mouseout="closegaolangbzt(indexE, 'shanxing_main')"
  397. :style="{
  398. background:
  399. bgColorList[activeIndex].type === 'white'
  400. ? itemE.bg
  401. : bgColorList[activeIndex].type === 'darkGreen'
  402. ? itemE.darkGreenBg
  403. : itemE.darkBg,
  404. color:
  405. bgColorList[activeIndex].type === 'white'
  406. ? itemE.color
  407. : bgColorList[activeIndex].type === 'darkGreen'
  408. ? itemE.darkGreenColor
  409. : itemE.darkColor,
  410. borderColor:
  411. bgColorList[activeIndex].type === 'white'
  412. ? itemE.border
  413. : bgColorList[activeIndex].type === 'darkGreen'
  414. ? itemE.darkGreenBorder
  415. : itemE.darkBorder,
  416. }"
  417. >
  418. <span class="name">{{ itemE.vlCnName }}</span>
  419. <span class="number">{{ itemE.value }}</span>
  420. <span class="percent">{{ itemE.vocabPercentStr }}</span>
  421. </li>
  422. </ul>
  423. <div id="shanxing_main" style="height: 360px"></div>
  424. </div>
  425. </div>
  426. </el-collapse-transition>
  427. </div>
  428. <!-- 右侧菜单 -->
  429. <div
  430. class="mene-right"
  431. :style="{
  432. background: bgColorList[activeIndex].contentInnerBg,
  433. borderColor: bgColorList[activeIndex].glossaryBg,
  434. }"
  435. v-if="articleInfo.en_flag"
  436. >
  437. <menu-right
  438. :colorObj="bgColorList[activeIndex]"
  439. @changeArticleType="changeArticleType"
  440. ></menu-right>
  441. </div>
  442. </div>
  443. </div>
  444. <div
  445. class="share-box"
  446. v-if="menuFeature === 'share'"
  447. v-loading="shareLoading"
  448. >
  449. <div class="share-box-top">
  450. <h5>分享</h5>
  451. <i class="el-icon-close" @click="handleCloseShare"></i>
  452. </div>
  453. <template v-if="shareSrc">
  454. <img :src="shareSrc" />
  455. </template>
  456. <template v-else>
  457. <el-skeleton style="width: 380px" :loading="true" animated>
  458. <template slot="template">
  459. <el-skeleton-item
  460. variant="image"
  461. style="width: 380px; height: 738px"
  462. />
  463. </template>
  464. </el-skeleton>
  465. </template>
  466. <div class="share-box-bottom">
  467. <el-button type="primary" @click="downLoadImg(shareSrc)" size="small"
  468. >下载图片</el-button
  469. >
  470. <el-button
  471. @click="CopyToClipboard('copyDownUrl')"
  472. size="small"
  473. type="primary"
  474. plain
  475. >复制链接</el-button
  476. >
  477. <span id="copyDownUrl">{{ share_url }}</span>
  478. </div>
  479. </div>
  480. <div class="catalog-box" v-if="menuFeature === 'list'">
  481. <ul class="treeList">
  482. <li v-for="(item, index) in issueChnList" :key="index">
  483. <p class="parent-node">
  484. <span class="number">{{ index + 1 }}</span
  485. ><b class="title">{{ item.chn_name }}</b>
  486. </p>
  487. <ul v-if="item.arts && item.arts.length > 0">
  488. <li
  489. :class="[
  490. items.canRead ? 'children-buy' : 'children-no',
  491. 'children',
  492. ]"
  493. v-for="(items, indexs) in item.arts"
  494. :key="indexs"
  495. @click="handleLink(items, items.canRead, index)"
  496. >
  497. <p class="children-node">
  498. <span class="number">{{ indexs + 1 }}</span
  499. ><b class="title">{{ items.art_title }}</b>
  500. </p>
  501. </li>
  502. </ul>
  503. </li>
  504. </ul>
  505. </div>
  506. <el-dialog
  507. :visible.sync="articleInfoFlag"
  508. :show-close="false"
  509. :close-on-click-modal="false"
  510. width="968px"
  511. class="articleDetail-dialog"
  512. v-if="articleInfoFlag"
  513. >
  514. <article-info
  515. @closeArticleInfo="closeArticleInfo"
  516. :articleInfo="articleInfo"
  517. :colorObj="bgColorList[activeIndex]"
  518. ></article-info>
  519. </el-dialog>
  520. <el-dialog
  521. :visible.sync="ciyunShow"
  522. :show-close="true"
  523. :title="articleInfo.art_corpus_data.artTitle"
  524. :close-on-click-modal="false"
  525. width="1182px"
  526. class="ciyun-dialog"
  527. v-if="ciyunShow"
  528. >
  529. <iframe
  530. width="100%"
  531. height="834px"
  532. border="none"
  533. :src="
  534. './ciyun/ciyunindex.html?partitionKey=1&searchType=2&articleId=' +
  535. articleId
  536. "
  537. ></iframe>
  538. </el-dialog>
  539. <el-dialog
  540. :visible.sync="printFlag"
  541. :show-close="false"
  542. :close-on-click-modal="false"
  543. width="100%"
  544. top="0"
  545. class="articleDetail-dialog"
  546. v-if="printFlag"
  547. >
  548. <print-model
  549. :titleFontsize="48"
  550. :wordFontsize="wordFontsize"
  551. :colorObj="bgColorList[activeIndex]"
  552. :articleType="articleType"
  553. :articleInfo="articleInfo"
  554. @closePrint="closePrint"
  555. :articleImg="articleImg"
  556. ></print-model>
  557. </el-dialog>
  558. </div>
  559. </template>
  560. <script>
  561. import Header from "../../components/Header.vue";
  562. import NavBar from "../../components/common/NavBar.vue";
  563. import NewWordList from "./components/NewWordList.vue";
  564. import PhraseList from "./components/PhraseList.vue";
  565. import AnnotationList from "./components/AnnotationList.vue";
  566. import NormalModel from "./components/NormalModel.vue";
  567. import PhraseModel from "./components/PhraseModel.vue";
  568. import MenuRight from "./components/MenuRight.vue";
  569. import ArticleInfo from "./components/ArticleInfo.vue";
  570. import InnerTextSearch from "./components/InnerTextSearch.vue";
  571. import LexicalType from "./components/LexicalType.vue";
  572. import PracticeModel from "./components/PracticeModel.vue";
  573. import NotesModel from "./components/NotesModel.vue";
  574. import printModel from "./components/PrintModel.vue";
  575. import * as echarts from "echarts";
  576. import { getLogin } from "@/api/ajax";
  577. import { getToken } from "@/utils/auth";
  578. export default {
  579. name: "articleDetail",
  580. computed: {},
  581. components: {
  582. Header,
  583. NavBar,
  584. NewWordList,
  585. PhraseList,
  586. AnnotationList,
  587. NormalModel,
  588. MenuRight,
  589. PhraseModel,
  590. ArticleInfo,
  591. InnerTextSearch,
  592. LexicalType,
  593. PracticeModel,
  594. NotesModel,
  595. printModel,
  596. },
  597. data() {
  598. return {
  599. config: this.$route.query.headerConfig
  600. ? decodeURIComponent(this.$route.query.headerConfig)
  601. : "",
  602. LoginNavIndex: 0,
  603. wordFontsize: 22, // 文章文字大小
  604. bgColorList: [
  605. {
  606. type: "white",
  607. contentBg: "#D9EAF1",
  608. contentInnerBg: "#FFFFFF",
  609. navBg: "#00ADEF",
  610. border: "#E5E6EB",
  611. bg: "#FFFFFF",
  612. border_active: "#3459D2",
  613. boxBorder: "#E5E6EB",
  614. titleColor: "#1F2C5C",
  615. sourceColor: "#929CA8",
  616. contentColor: "#2F3742",
  617. btnColor: "#3459D2",
  618. glossaryTitle: "#2F3742",
  619. glossarySubtitle: "#4E5969",
  620. glossaryBg: "#F7F8FA",
  621. newWordColor: "#175DFF",
  622. newWordOtherColor: "#667180",
  623. newWordStar: "#FFB224",
  624. newWordType: {
  625. L0: {
  626. color: "#5B7217",
  627. bg: "#F1FCE3",
  628. },
  629. L1: {
  630. color: "#3D9A50",
  631. bg: "#EFFCEF",
  632. },
  633. L2: {
  634. color: "#0081F1",
  635. bg: "#E7F3FF",
  636. },
  637. L3: {
  638. color: "#3459D2",
  639. bg: "#EEF3FF",
  640. },
  641. LA: {
  642. color: "#E03177",
  643. bg: "#FFECF5",
  644. },
  645. LB: {
  646. color: "#CD2B31",
  647. bg: "#FFE8E8",
  648. },
  649. LC: {
  650. color: "#99A29E",
  651. bg: "#DFE4E2",
  652. },
  653. LD: {
  654. color: "#504F57",
  655. bg: "#C1C5CD",
  656. },
  657. },
  658. phraseColor: "#ED5F00",
  659. phraseOhterColor: "#2F3742",
  660. annotationTitle: "#4E5969",
  661. annotationOhter: "#667180",
  662. statisticTitle: "#2F3742",
  663. statisticValue: "#3459D2",
  664. menuBg: "#EEF3FF",
  665. audiobg: "#FFFFFF",
  666. audioBorder: "#EBEBEB",
  667. audioBtnColor: "#175DFF",
  668. audioBtnBg: "#EEF3FF",
  669. audioTimeColor: "#2F3742",
  670. audioSpeedColor: "#2F3742",
  671. },
  672. {
  673. type: "darkGreen",
  674. contentBg: "#C2C9C6",
  675. contentInnerBg: "#DFE4E2",
  676. navBg: "#236E55",
  677. border: "#5BB99A",
  678. bg: "#FFFFFF",
  679. border_active: "#FFFFFF",
  680. boxBorder: "#1B5441",
  681. titleColor: "#1F2C5C",
  682. sourceColor: "#929CA8",
  683. contentColor: "#2F3742",
  684. btnColor: "#3459D2",
  685. glossaryTitle: "#393F3C",
  686. glossarySubtitle: "#66736D",
  687. glossaryBg: "#D7DCDA",
  688. newWordColor: "#175DFF",
  689. newWordOtherColor: "#667180",
  690. newWordStar: "#FFB224",
  691. newWordType: {
  692. L0: {
  693. color: "#5B7217",
  694. bg: "#F1FCE3",
  695. },
  696. L1: {
  697. color: "#3D9A50",
  698. bg: "#EFFCEF",
  699. },
  700. L2: {
  701. color: "#0081F1",
  702. bg: "#E7F3FF",
  703. },
  704. L3: {
  705. color: "#3459D2",
  706. bg: "#EEF3FF",
  707. },
  708. LA: {
  709. color: "#E03177",
  710. bg: "#FFECF5",
  711. },
  712. LB: {
  713. color: "#CD2B31",
  714. bg: "#FFE8E8",
  715. },
  716. LC: {
  717. color: "#99A29E",
  718. bg: "#DFE4E2",
  719. },
  720. LD: {
  721. color: "#504F57",
  722. bg: "#C1C5CD",
  723. },
  724. },
  725. phraseColor: "#ED5F00",
  726. phraseOhterColor: "#2F3742",
  727. statisticTitle: "#393F3C",
  728. statisticValue: "#299772",
  729. menuBg: "#E9F7F2",
  730. audiobg: "#ECEFED",
  731. audioBorder: "#DFE4E2",
  732. audioBtnColor: "#299772",
  733. audioBtnBg: "#DFE4E2",
  734. audioTimeColor: "#393F3C",
  735. audioSpeedColor: "#299772",
  736. },
  737. {
  738. type: "darkBlue",
  739. contentBg: "#1C2129",
  740. contentInnerBg: "#2F3742",
  741. navBg: "#2F3742",
  742. border: "#1F2C5C",
  743. bg: "#1F2C5C",
  744. border_active: "#FFFFFF",
  745. boxBorder: "#1C2129",
  746. titleColor: "#5373E7",
  747. sourceColor: "#929CA8",
  748. contentColor: "#C1C5CD",
  749. btnColor: "#5373E7",
  750. glossaryTitle: "#929CA8",
  751. glossarySubtitle: "#929CA8",
  752. glossaryBg: "#3E4855",
  753. newWordColor: "#8DA4EF",
  754. newWordOtherColor: "#929CA8",
  755. newWordStar: "#816C00",
  756. newWordType: {
  757. L0: {
  758. color: "rgba(255, 255, 255, 0.64)",
  759. bg: "#5B7217",
  760. },
  761. L1: {
  762. color: "rgba(255, 255, 255, 0.64)",
  763. bg: "#2F6E3B",
  764. },
  765. L2: {
  766. color: "rgba(255, 255, 255, 0.64)",
  767. bg: "#006793",
  768. },
  769. L3: {
  770. color: "rgba(255, 255, 255, 0.64)",
  771. bg: "#AE1955",
  772. },
  773. LA: {
  774. color: "rgba(255, 255, 255, 0.64)",
  775. bg: "#AE1955",
  776. },
  777. LB: {
  778. color: "rgba(255, 255, 255, 0.64)",
  779. bg: "#8F2025",
  780. },
  781. LC: {
  782. color: "rgba(255, 255, 255, 0.64)",
  783. bg: "#4A524E",
  784. },
  785. LD: {
  786. color: "rgba(255, 255, 255, 0.64)",
  787. bg: "#2F3742",
  788. },
  789. },
  790. phraseColor: "#ED5F00",
  791. phraseOhterColor: "#929CA8",
  792. statisticTitle: "#D0D3D9",
  793. statisticValue: "#5373E7",
  794. menuBg: "#EEF3FF",
  795. audiobg: "#3E4855",
  796. audioBorder: "#2F3742",
  797. audioBtnColor: "#D0D3D9",
  798. audioBtnBg: "#4E5969",
  799. audioTimeColor: "#D0D3D9",
  800. audioSpeedColor: "#D0D3D9",
  801. },
  802. {
  803. type: "armyGreen",
  804. contentBg: "#2A2F2C",
  805. contentInnerBg: "#393F3C",
  806. navBg: "#393F3C",
  807. border: "#13392E",
  808. bg: "#13392E",
  809. border_active: "#FFFFFF",
  810. boxBorder: "#2A2F2C",
  811. titleColor: "#30A47D",
  812. sourceColor: "#99A29E",
  813. contentColor: "#C1C5CD",
  814. btnColor: "#30A47D",
  815. glossaryTitle: "#99A29E",
  816. glossarySubtitle: "#99A29E",
  817. glossaryBg: "#4A524E",
  818. newWordColor: "#8DA4EF",
  819. newWordOtherColor: "#99A29E",
  820. newWordStar: "#816C00",
  821. newWordType: {
  822. L0: {
  823. color: "rgba(255, 255, 255, 0.64)",
  824. bg: "#5B7217",
  825. },
  826. L1: {
  827. color: "rgba(255, 255, 255, 0.64)",
  828. bg: "#2F6E3B",
  829. },
  830. L2: {
  831. color: "rgba(255, 255, 255, 0.64)",
  832. bg: "#006793",
  833. },
  834. L3: {
  835. color: "rgba(255, 255, 255, 0.64)",
  836. bg: "#AE1955",
  837. },
  838. LA: {
  839. color: "rgba(255, 255, 255, 0.64)",
  840. bg: "#AE1955",
  841. },
  842. LB: {
  843. color: "rgba(255, 255, 255, 0.64)",
  844. bg: "#8F2025",
  845. },
  846. LC: {
  847. color: "rgba(255, 255, 255, 0.64)",
  848. bg: "#4A524E",
  849. },
  850. LD: {
  851. color: "rgba(255, 255, 255, 0.64)",
  852. bg: "#2F3742",
  853. },
  854. },
  855. phraseColor: "#ED5F00",
  856. phraseOhterColor: "#99A29E",
  857. statisticTitle: "#D0D3D9",
  858. statisticValue: "#30A47D",
  859. menuBg: "#EEF3FF",
  860. audiobg: "#4A524E",
  861. audioBorder: "#393F3C",
  862. audioBtnColor: "#D7DCDA",
  863. audioBtnBg: "#66736D",
  864. audioTimeColor: "#D7DCDA",
  865. audioSpeedColor: "#D7DCDA",
  866. },
  867. ],
  868. activeIndex: 0, // 选择主题色的索引
  869. showGlossary: true, // 是否展开词汇表
  870. showWordInfo: true,
  871. wordList: [
  872. {
  873. src: ".",
  874. word: "cremation",
  875. symbol: "/krəˈmeɪʃn/",
  876. paraList: [
  877. {
  878. cixing: "n.",
  879. shiyi: "火葬;火化",
  880. },
  881. ],
  882. type: "daochu",
  883. rate: 3,
  884. },
  885. {
  886. src: ".",
  887. word: "thrive",
  888. symbol: "/θraɪv/",
  889. paraList: [
  890. {
  891. cixing: "v.",
  892. shiyi:
  893. "茁壮成长,兴旺,繁荣;(尤指在别人觉得困难的时候)以……为乐,可以出色应对",
  894. },
  895. ],
  896. type: "xuanbi",
  897. rate: 4,
  898. },
  899. {
  900. src: ".",
  901. word: "diversify",
  902. symbol: "/daɪˈvɜːsɪfaɪ/",
  903. paraList: [
  904. {
  905. cixing: "v.",
  906. shiyi:
  907. "(使)多样化,(使)不同;扩大经营范围,增加……的品种;(投资)多元化;",
  908. },
  909. {
  910. cixing: "n.",
  911. shiyi: "兽医;<美,非正式>老兵;兽医诊所(vet's)",
  912. },
  913. ],
  914. type: "daochu",
  915. rate: 2,
  916. },
  917. ],
  918. phraseList: [
  919. {
  920. word: "send off",
  921. paraList: ["送行"],
  922. },
  923. {
  924. word: "more than",
  925. paraList: ["多于"],
  926. },
  927. {
  928. word: "according to",
  929. paraList: ["根据"],
  930. },
  931. {
  932. word: "In addition to",
  933. paraList: ["除了……之外"],
  934. },
  935. ],
  936. annotationList: [
  937. {
  938. prefix: "visiting team",
  939. para: "时区。全球划分为24个时区。相邻两个时区的时问相差1小时。出国旅行的人,必须随时调整自己的手表,才能和当地时间相一致。凡向西走,每过一个时区,就要把表拨慢1小时;凡向东走,每过一个时区,就要把表拨快1小时。",
  940. },
  941. {
  942. prefix: "jet–lagged",
  943. para: "有时差反应的,有时差感的。人体症状多表现为疲劳、方向感减弱和失眠、往往会影响人们最初几天的活动。",
  944. },
  945. ],
  946. vocabularyType: {
  947. L0: {
  948. bg: "#F2FCE3",
  949. color: "#5B7217",
  950. darkBg: "#5B7217",
  951. border: "#F2FCE3",
  952. darkColor: "rgba(255, 255, 255, 0.64)",
  953. darkBorder: "rgba(255, 255, 255, 0.08)",
  954. darkGreenBg: "#F2FCE3",
  955. darkGreenColor: "#5B7217",
  956. darkGreenBorder: "#F2FCE3",
  957. },
  958. L1: {
  959. bg: "#EFFCEF",
  960. color: "#3D9A50",
  961. darkBg: "#2F6E3B",
  962. darkColor: "rgba(255, 255, 255, 0.64)",
  963. darkBorder: "rgba(255, 255, 255, 0.08)",
  964. darkGreenBg: "#EFFCEF",
  965. darkGreenColor: "#3D9A50",
  966. darkGreenBorder: "#EFFCEF",
  967. },
  968. L2: {
  969. bg: "#E7EEFF",
  970. color: "#175DFF",
  971. darkBg: "#006793",
  972. darkColor: "rgba(255, 255, 255, 0.64)",
  973. darkBorder: "rgba(255, 255, 255, 0.08)",
  974. darkGreenBg: "#E7F3FF",
  975. darkGreenColor: "#0081F1",
  976. darkGreenBorder: "#E7F3FF",
  977. },
  978. L3: {
  979. bg: "#EEF3FF",
  980. color: "#3459D2",
  981. darkBg: "#2C49AA",
  982. darkColor: "rgba(255, 255, 255, 0.64)",
  983. darkBorder: "rgba(255, 255, 255, 0.08)",
  984. darkGreenBg: "#EEF3FF",
  985. darkGreenColor: "#3459D2",
  986. darkGreenBorder: "#EEF3FF",
  987. },
  988. LA: {
  989. bg: "#FFECF5",
  990. color: "#E03177",
  991. darkBg: "#AE1955",
  992. darkColor: "rgba(255, 255, 255, 0.64)",
  993. darkBorder: "rgba(255, 255, 255, 0.08)",
  994. darkGreenBg: "#FFECF5",
  995. darkGreenColor: "#E03177",
  996. darkGreenBorder: "#FFECF5",
  997. },
  998. LB: {
  999. bg: "#FFE8E8",
  1000. color: "#CD2B31",
  1001. darkBg: "#8F2025",
  1002. darkColor: "rgba(255, 255, 255, 0.64)",
  1003. darkBorder: "rgba(255, 255, 255, 0.08)",
  1004. darkGreenBg: "#FFE8E8",
  1005. darkGreenColor: "#CD2B31",
  1006. darkGreenBorder: "#FFE8E8",
  1007. },
  1008. LC: {
  1009. bg: "#DFE4E2",
  1010. color: "#99A29E",
  1011. border: "rgba(0, 0, 0, 0.08)",
  1012. darkBg: "#4A524E",
  1013. darkColor: "rgba(255, 255, 255, 0.64)",
  1014. darkBorder: "rgba(255, 255, 255, 0.08)",
  1015. darkGreenBg: "#DFE4E2",
  1016. darkGreenColor: "#4A524E",
  1017. darkGreenBorder: "rgba(0, 0, 0, 0.08)",
  1018. },
  1019. LD: {
  1020. bg: "#C1C5CD",
  1021. color: "#504F57",
  1022. darkBg: "#2F3742",
  1023. darkColor: "rgba(255, 255, 255, 0.64)",
  1024. darkBorder: "rgba(255, 255, 255, 0.08)",
  1025. darkGreenBg: "#C1C5CD",
  1026. darkGreenColor: "#504F57",
  1027. darkGreenBorder: "#C1C5CD",
  1028. },
  1029. },
  1030. articleType: this.$route.query.type ? this.$route.query.type * 1 : 1,
  1031. articleId: this.$route.query.id ? this.$route.query.id : "",
  1032. noRead: true, // 未读
  1033. support: false, // 点赞
  1034. oppose: false, // 不支持
  1035. timer: null,
  1036. readLength: 0,
  1037. articleInfo: null,
  1038. loading: false,
  1039. menuType: "original",
  1040. menuFeature: "", // 功能
  1041. shareSrc: "", // 分享图片
  1042. share_url: "", // 分享链接
  1043. shareLoading: false,
  1044. likeWordList: [], // 收藏短语list
  1045. likePhraseList: [],
  1046. likeSentencelist: [],
  1047. issueChnList: [], // 报刊文章目录
  1048. issueChnTanList: [], //文章摊平
  1049. userMessage: getToken() ? JSON.parse(getToken()) : null,
  1050. activeArticleIndex: 0,
  1051. articleNumber: 0,
  1052. articleInfoFlag: false, // 显示文章信息
  1053. ciyunShow: false, // 显示词云
  1054. printFlag: false, // 打印
  1055. articleImg: {}, // 文章图片
  1056. };
  1057. },
  1058. watch: {
  1059. showWordInfo: {
  1060. handler(val, oldVal) {
  1061. const _this = this;
  1062. if (val) {
  1063. setTimeout(() => {
  1064. _this.inityuan();
  1065. }, 100);
  1066. }
  1067. },
  1068. // 深度观察监听
  1069. deep: true,
  1070. },
  1071. },
  1072. methods: {
  1073. inityuan() {
  1074. if (
  1075. this.articleInfo &&
  1076. this.articleInfo.art_corpus_data &&
  1077. this.articleInfo.art_corpus_data.artStatInfo &&
  1078. this.articleInfo.art_corpus_data.artStatInfo.vocabVlLevelItems
  1079. ) {
  1080. var chartDom = document.getElementById("shanxing_main");
  1081. var myChart = echarts.init(chartDom);
  1082. var option;
  1083. let newdata = JSON.parse(
  1084. JSON.stringify(
  1085. this.articleInfo.art_corpus_data.artStatInfo.vocabVlLevelItems
  1086. )
  1087. );
  1088. newdata.forEach((item) => {
  1089. let percent = item.vocabPercent / 100;
  1090. if (percent % 1 == 0) {
  1091. item.name = item.vlCnName + " " + percent + "%";
  1092. } else {
  1093. item.name = item.vlCnName + " " + percent.toFixed(2) + "%";
  1094. }
  1095. });
  1096. option = {
  1097. color:
  1098. this.bgColorList[this.activeIndex].type === "white"
  1099. ? this.articleInfo.vl_id === "VL26"
  1100. ? [
  1101. "#90C62F",
  1102. "#55B467",
  1103. "#F04F88",
  1104. "#F2555A",
  1105. "#D7DCDA",
  1106. "#99A29E",
  1107. ]
  1108. : [
  1109. "#90C62F",
  1110. "#55B467",
  1111. "#5FD4F4",
  1112. "#5373E7",
  1113. "#F04F88",
  1114. "#F2555A",
  1115. "#D7DCDA",
  1116. "#99A29E",
  1117. ]
  1118. : this.bgColorList[this.activeIndex].type === "darkGreen"
  1119. ? this.articleInfo.vl_id === "VL26"
  1120. ? [
  1121. "#90C62F",
  1122. "#55B467",
  1123. "#5FD4F4",
  1124. "#5373E7",
  1125. "#F04F88",
  1126. "#F2555A",
  1127. "#D7DCDA",
  1128. "#99A29E",
  1129. ]
  1130. : [
  1131. "#90C62F",
  1132. "#55B467",
  1133. "#F04F88",
  1134. "#F2555A",
  1135. "#D7DCDA",
  1136. "#99A29E",
  1137. ]
  1138. : this.articleInfo.vl_id === "VL26"
  1139. ? [
  1140. "#5B7217",
  1141. "#2F6E3B",
  1142. "#006793",
  1143. "#2C49AA",
  1144. "#AE1955",
  1145. "#F2555A",
  1146. "#4A524E",
  1147. "#2F3742",
  1148. ]
  1149. : [
  1150. "#5B7217",
  1151. "#2F6E3B",
  1152. "#AE1955",
  1153. "#F2555A",
  1154. "#4A524E",
  1155. "#2F3742",
  1156. ],
  1157. series: [
  1158. {
  1159. name: "Access From",
  1160. type: "pie",
  1161. radius: ["50%", "90%"],
  1162. data: newdata,
  1163. itemStyle: {
  1164. borderColor: "rgba(255, 255, 255, 0.24)",
  1165. borderWidth: 1,
  1166. },
  1167. top: 50,
  1168. emphasis: {
  1169. itemStyle: {
  1170. shadowBlur: 10,
  1171. shadowOffsetX: 0,
  1172. shadowColor: "rgba(0, 0, 0, 0.5)",
  1173. },
  1174. },
  1175. },
  1176. ],
  1177. xAxis: {
  1178. show: false, //不显示坐标轴线、坐标轴刻度线和坐标轴上的文字
  1179. axisTick: {
  1180. show: false, //不显示坐标轴刻度线
  1181. },
  1182. axisLine: {
  1183. show: false, //不显示坐标轴线
  1184. },
  1185. axisLabel: {
  1186. show: false, //不显示坐标轴上的文字
  1187. },
  1188. },
  1189. };
  1190. option && myChart.setOption(option);
  1191. }
  1192. },
  1193. // 鼠标进入
  1194. gaolangbzt(index, id) {
  1195. var compareChart = echarts.getInstanceByDom(document.getElementById(id));
  1196. compareChart.dispatchAction({
  1197. type: "highlight",
  1198. seriesIndex: 0,
  1199. dataIndex: index,
  1200. });
  1201. },
  1202. // 鼠标移出
  1203. closegaolangbzt(index, id) {
  1204. var compareChart = echarts.getInstanceByDom(document.getElementById(id));
  1205. compareChart.dispatchAction({
  1206. type: "downplay",
  1207. seriesIndex: 0,
  1208. dataIndex: index,
  1209. });
  1210. },
  1211. // 切换主题颜色
  1212. handleChangeBgColor(index) {
  1213. this.activeIndex = index;
  1214. this.inityuan();
  1215. },
  1216. async handlePage(type) {
  1217. if (type === "-") {
  1218. if (this.activeArticleIndex !== 0) {
  1219. if (!this.issueChnTanList[this.activeArticleIndex - 1].canRead) {
  1220. this.$message.error("您没有阅读其他文章的相关权益");
  1221. return;
  1222. }
  1223. this.activeArticleIndex--;
  1224. let MethodName = "/PaperServer/Client/Issue/SaveLastReadArtInIss";
  1225. let data = {
  1226. iss_id: this.$route.query.iss_id,
  1227. art_id: this.issueChnTanList[this.activeArticleIndex].id,
  1228. };
  1229. await getLogin(MethodName, data).then((res) => {});
  1230. this.$router.replace({
  1231. path: "/articleDetail",
  1232. query: {
  1233. headerConfig: this.$route.query.headerConfig
  1234. ? this.$route.query.headerConfig
  1235. : "",
  1236. id: this.issueChnTanList[this.activeArticleIndex].id,
  1237. iss_id: this.$route.query.iss_id,
  1238. },
  1239. });
  1240. } else {
  1241. return;
  1242. }
  1243. } else {
  1244. if (this.activeArticleIndex !== this.issueChnTanList.length - 1) {
  1245. if (!this.issueChnTanList[this.activeArticleIndex + 1].canRead) {
  1246. this.$message.error("您没有阅读其他文章的相关权益");
  1247. return;
  1248. }
  1249. this.activeArticleIndex++;
  1250. let MethodName = "/PaperServer/Client/Issue/SaveLastReadArtInIss";
  1251. let data = {
  1252. iss_id: this.$route.query.iss_id,
  1253. art_id: this.issueChnTanList[this.activeArticleIndex].id,
  1254. };
  1255. await getLogin(MethodName, data).then((res) => {});
  1256. this.$router.replace({
  1257. path: "/articleDetail",
  1258. query: {
  1259. headerConfig: this.$route.query.headerConfig
  1260. ? this.$route.query.headerConfig
  1261. : "",
  1262. id: this.issueChnTanList[this.activeArticleIndex].id,
  1263. iss_id: this.$route.query.iss_id,
  1264. },
  1265. });
  1266. } else {
  1267. return;
  1268. }
  1269. }
  1270. location.reload();
  1271. },
  1272. // 跳转
  1273. async handleLink(item, flag) {
  1274. if (!flag) {
  1275. return;
  1276. }
  1277. let MethodName = "/PaperServer/Client/Issue/SaveLastReadArtInIss";
  1278. let data = {
  1279. iss_id: this.$route.query.iss_id,
  1280. art_id: item.id,
  1281. };
  1282. await getLogin(MethodName, data).then((res) => {});
  1283. this.$router.replace({
  1284. path: "/articleDetail",
  1285. query: {
  1286. headerConfig: this.$route.query.headerConfig
  1287. ? this.$route.query.headerConfig
  1288. : "",
  1289. id: item.id,
  1290. iss_id: this.$route.query.iss_id,
  1291. },
  1292. });
  1293. location.reload();
  1294. },
  1295. getArticleDetail() {
  1296. this.loading = true;
  1297. let this_ = this;
  1298. let MethodName = "/PaperServer/Client/Article/GetArticleDetail";
  1299. let data = {
  1300. id: this.articleId,
  1301. };
  1302. getLogin(MethodName, data)
  1303. .then((res) => {
  1304. this.loading = false;
  1305. if (res.status === 1) {
  1306. this.articleInfo = res.data;
  1307. if (
  1308. this.articleInfo &&
  1309. this.articleInfo.art_corpus_data &&
  1310. this.articleInfo.art_corpus_data.artStatInfo &&
  1311. this.articleInfo.art_corpus_data.artStatInfo.vocabVlLevelItems
  1312. ) {
  1313. this.articleInfo.art_corpus_data.artStatInfo.vocabVlLevelItems.forEach(
  1314. (item) => {
  1315. item.value = item.vocabCount;
  1316. item = Object.assign(item, this.vocabularyType[item.vlId]);
  1317. }
  1318. );
  1319. if (this.articleInfo.art_voc_data) {
  1320. this.articleInfo.art_voc_data.forEach((item) => {
  1321. item.collect = false;
  1322. });
  1323. }
  1324. }
  1325. let articleArr =
  1326. this.articleInfo.art_content.split('<p class="para"');
  1327. articleArr.forEach((itema) => {
  1328. if (itema.indexOf("<img") > -1) {
  1329. // 当前段落有图片
  1330. let imgArr = [];
  1331. let pno =
  1332. itema.indexOf('pno="') > -1
  1333. ? itema.substring(
  1334. itema.indexOf('pno="') + 5,
  1335. itema
  1336. .substring(itema.indexOf('pno="') + 5)
  1337. .indexOf('"') +
  1338. 1 +
  1339. 5
  1340. )
  1341. : 0;
  1342. let itemArr = itema.split("<img");
  1343. itemArr.forEach((items) => {
  1344. if (items.indexOf('src="') > -1) {
  1345. let indexS =
  1346. items.substring(items.indexOf('src="') + 5).indexOf('"') +
  1347. items.indexOf('src="'); // src所在索引
  1348. let indexW =
  1349. items.indexOf('width="') > -1
  1350. ? items
  1351. .substring(items.indexOf('width="') + 7)
  1352. .indexOf('"')
  1353. : items.indexOf("width: ") > -1
  1354. ? items
  1355. .substring(items.indexOf("width: ") + 7)
  1356. .indexOf(";")
  1357. : -1; // width所在索引
  1358. let indexH =
  1359. items.indexOf('height="') > -1
  1360. ? items
  1361. .substring(items.indexOf('height="') + 8)
  1362. .indexOf('"')
  1363. : items.indexOf("height: ") > -1
  1364. ? items
  1365. .substring(items.indexOf("height: ") + 8)
  1366. .indexOf(";")
  1367. : -1; // height所在索引
  1368. let imgobj = {
  1369. src: items.substring(
  1370. items.indexOf('src="') + 5,
  1371. indexS + 5
  1372. ),
  1373. width:
  1374. items.indexOf('width="') > -1
  1375. ? items.substring(
  1376. items.indexOf('width="') + 7,
  1377. items.indexOf('width="') + indexW + 7
  1378. )
  1379. : items.indexOf("width: ") > -1
  1380. ? items.substring(
  1381. items.indexOf("width: ") + 7,
  1382. items.indexOf("width: ") + indexW + 7
  1383. )
  1384. : null,
  1385. };
  1386. imgArr.push(imgobj);
  1387. }
  1388. });
  1389. this.articleImg[pno] = imgArr;
  1390. }
  1391. });
  1392. setTimeout(() => {
  1393. this_.inityuan();
  1394. }, 100);
  1395. }
  1396. })
  1397. .catch(() => {
  1398. this.loading = false;
  1399. });
  1400. getLogin(
  1401. "/ShopServer/Client/CollectManager/GetMyCollectIntegrateInfo_Article",
  1402. {
  1403. article_id: this.articleId,
  1404. }
  1405. )
  1406. .then((res) => {
  1407. if (res.status === 1) {
  1408. this.noRead = res.is_collect_article === "false";
  1409. this.articleNumber = res.collect_person_count;
  1410. this.likeWordList = [];
  1411. res.word_list.forEach((item) => {
  1412. this.likeWordList.push(item.word);
  1413. });
  1414. this.likePhraseList = [];
  1415. res.phrase_list.forEach((item) => {
  1416. this.likePhraseList.push(item.phrase);
  1417. });
  1418. this.likeSentencelist = [];
  1419. res.sentence_list.forEach((item) => {
  1420. this.likeSentencelist.push(item.sentence_id);
  1421. });
  1422. }
  1423. })
  1424. .catch(() => {
  1425. this.loading = false;
  1426. });
  1427. getLogin(
  1428. "/ShopServer/Client/ReadingRecordManager/GetReadingStatus_Article",
  1429. {
  1430. goods_type: 21,
  1431. article_id: this.articleId,
  1432. }
  1433. )
  1434. .then((res) => {
  1435. if (res.status === 1) {
  1436. this.support = res.reading_info.is_reading === "false";
  1437. if (!this.support) {
  1438. clearInterval(this_.timer);
  1439. this_.timer = null;
  1440. }
  1441. }
  1442. })
  1443. .catch(() => {
  1444. this.loading = false;
  1445. });
  1446. },
  1447. handleReadArticle() {
  1448. let this_ = this;
  1449. clearInterval(this_.timer);
  1450. this_.timer = null;
  1451. let MethodName =
  1452. "/ShopServer/Client/ReadingRecordManager/AddReadingRecord_Article";
  1453. let data = {
  1454. goods_type: 21,
  1455. article_id: this.articleId,
  1456. duration: this.readLength,
  1457. };
  1458. getLogin(MethodName, data)
  1459. .then((res) => {
  1460. if (res.status === 1) {
  1461. this.support = false;
  1462. }
  1463. })
  1464. .catch(() => {});
  1465. },
  1466. changeStatus(flag) {
  1467. if (this[flag]) {
  1468. let MethodName = "/ShopServer/Client/CollectManager/AddCollect_Article";
  1469. let data = {
  1470. article_id: this.articleId,
  1471. };
  1472. getLogin(MethodName, data)
  1473. .then((res) => {
  1474. if (res.status === 1) {
  1475. this[flag] = !this[flag];
  1476. this.articleNumber++;
  1477. this.$message({
  1478. message: "收藏成功",
  1479. type: "success",
  1480. });
  1481. }
  1482. })
  1483. .catch(() => {});
  1484. // let datas = {
  1485. // sentence_id: this.articleInfo.art_sound_srt_data?this.articleInfo.art_sound_srt_data.sents[1].id:this.articleInfo.art_corpus_data.sentList[1].id,
  1486. // audio_file_id: this.articleInfo.art_sound_srt_data?this.articleInfo.art_sound_srt_data.mp3:'',
  1487. // audio_begin_time: this.articleInfo.art_sound_srt_data?this.articleInfo.art_sound_srt_data.sents[1].s:null,
  1488. // audio_end_time: this.articleInfo.art_sound_srt_data?this.articleInfo.art_sound_srt_data.sents[1].e:null
  1489. // }
  1490. // getLogin('/ShopServer/Client/CollectManager/AddCollect_Sentence', datas)
  1491. // .then((res) => {
  1492. // if(res.status===1){
  1493. // }
  1494. // })
  1495. // .catch(() => {
  1496. // });
  1497. } else {
  1498. let MethodName =
  1499. "/ShopServer/Client/CollectManager/CancelCollect_Article";
  1500. getLogin(MethodName, {
  1501. article_id: this.articleId,
  1502. })
  1503. .then((res) => {
  1504. if (res.status === 1) {
  1505. this[flag] = !this[flag];
  1506. this.articleNumber--;
  1507. this.$message({
  1508. message: "取消收藏",
  1509. type: "success",
  1510. });
  1511. }
  1512. })
  1513. .catch(() => {
  1514. this.loading = false;
  1515. });
  1516. }
  1517. },
  1518. changeArticleType(type, e) {
  1519. if (
  1520. type === "print" ||
  1521. type === "share" ||
  1522. type === "list" ||
  1523. type === "cloud" ||
  1524. type === "chart"
  1525. ) {
  1526. if (type === "share" || type === "cloud" || type === "print") {
  1527. if (this.userMessage) {
  1528. if (type === "cloud") {
  1529. this.ciyunEvent();
  1530. } else if (type === "print") {
  1531. let MethodName =
  1532. "/ShopServer/Client/PrintRecordManager/GetMyPrintCount_Article";
  1533. getLogin(MethodName, {
  1534. goods_type: 21,
  1535. date_range: "TODAY",
  1536. article_id: this.articleId,
  1537. }).then((res) => {
  1538. if (res.status === 1) {
  1539. if (res.print_count < 5) {
  1540. this.printFlag = true;
  1541. } else {
  1542. this.$message.warning("今日打印次数已达上限");
  1543. }
  1544. }
  1545. });
  1546. } else {
  1547. this.handleCreateShare();
  1548. }
  1549. this.menuFeature = type;
  1550. } else {
  1551. this.$message.error("请先登录");
  1552. }
  1553. } else {
  1554. if (type === "chart") {
  1555. this.articleInfoFlag = true;
  1556. } else {
  1557. this.articleInfoFlag = false;
  1558. }
  1559. this.menuFeature = type;
  1560. }
  1561. } else {
  1562. this.menuType = type;
  1563. if (type === "search") {
  1564. setTimeout(() => {
  1565. this.$refs.innerTextSearchs.changeShow();
  1566. }, 100);
  1567. } else if (type === "filtrate") {
  1568. setTimeout(() => {
  1569. this.$refs.lexicalType.changeShow();
  1570. }, 100);
  1571. }
  1572. this.menuFeature = "";
  1573. }
  1574. },
  1575. ciyunEvent() {
  1576. // let MethodName = "/PaperServer/Client/Article/CalcArtWordCloud";
  1577. // let data = {
  1578. // type: 0,
  1579. // id: this.articleId
  1580. // }
  1581. // getLogin(MethodName, data)
  1582. // .then((res) => {
  1583. this.ciyunShow = true;
  1584. // window.localStorage.setItem('ciyunData', JSON.stringify(res.data))
  1585. // window.open(
  1586. // "./ciyun/ciyunindex.html?partitionKey=1&searchType=2&articleId=" +
  1587. // this.articleId,
  1588. // "_blank"
  1589. // );
  1590. // })
  1591. // .catch(() => {
  1592. // });
  1593. },
  1594. handleCloseShare() {
  1595. this.menuFeature = "";
  1596. },
  1597. CopyToClipboard(element) {
  1598. var doc = document,
  1599. text = doc.getElementById(element),
  1600. range,
  1601. selection;
  1602. if (doc.body.createTextRange) {
  1603. range = doc.body.createTextRange();
  1604. range.moveToElementText(text);
  1605. range.select();
  1606. } else if (window.getSelection) {
  1607. selection = window.getSelection();
  1608. range = doc.createRange();
  1609. range.selectNodeContents(text);
  1610. selection.removeAllRanges();
  1611. selection.addRange(range);
  1612. }
  1613. document.execCommand("copy");
  1614. this.$message({
  1615. message: "复制成功",
  1616. type: "success",
  1617. });
  1618. window.getSelection().removeAllRanges();
  1619. },
  1620. downLoadImg(base64URL) {
  1621. const a = document.createElement("a");
  1622. a.download = "分享图片";
  1623. const mimeType = base64URL.match(/:(.*?);/)[1];
  1624. const byteCharacters = atob(base64URL.split(",")[1]);
  1625. const byteNumbers = new Array(byteCharacters.length);
  1626. for (let i = 0; i < byteCharacters.length; i++) {
  1627. byteNumbers[i] = byteCharacters.charCodeAt(i);
  1628. }
  1629. const byteArray = new Uint8Array(byteNumbers);
  1630. const blob = new Blob([byteArray], { type: mimeType });
  1631. a.href = URL.createObjectURL(blob);
  1632. document.body.appendChild(a);
  1633. a.click();
  1634. document.body.removeChild(a);
  1635. },
  1636. // 创建分享
  1637. handleCreateShare() {
  1638. this.shareLoading = true;
  1639. let MethodName = "/ShopServer/Client/ShareManager/CreateShareRecord";
  1640. let data = {
  1641. goods_type: 21,
  1642. goods_id: this.articleId,
  1643. };
  1644. getLogin(MethodName, data)
  1645. .then((res) => {
  1646. this.shareLoading = false;
  1647. if (res.status === 1) {
  1648. this.share_url = res.share_url;
  1649. this.shareSrc =
  1650. "data:image/jpeg;base64," + res.image_content_base64;
  1651. }
  1652. })
  1653. .catch(() => {
  1654. this.shareLoading = false;
  1655. });
  1656. },
  1657. changeLike(type, list) {
  1658. this[type] = list;
  1659. if (type === "likePhraseList") {
  1660. this.$refs.phraseList.handleData();
  1661. } else if (type === "likeWordList") {
  1662. this.$refs.newWordList.handleData();
  1663. }
  1664. },
  1665. // 报刊信息
  1666. getIssueDetail() {
  1667. this.issueChnTanList = [];
  1668. this.issueChnList = [];
  1669. let articleindex = 0;
  1670. let MethodName = "/PaperServer/Client/Issue/GetIssueBriefInfo";
  1671. let data = {
  1672. id: this.$route.query.iss_id,
  1673. };
  1674. getLogin(MethodName, data)
  1675. .then((res) => {
  1676. if (res.status === 1) {
  1677. let issueChnList = res.data.chn_art_data;
  1678. if (this.userMessage) {
  1679. getLogin("/ShopServer/Client/BookshelfQuery/GetGoodsBuyStatus", {
  1680. goods_type: 2,
  1681. goods_id: this.$route.query.iss_id,
  1682. })
  1683. .then((res) => {
  1684. if (res.status === 1) {
  1685. let isBuy = res.buy_info.is_buy === "true";
  1686. issueChnList.forEach((item, index) => {
  1687. item.canRead = isBuy || index === 0;
  1688. item.arts.forEach((items) => {
  1689. if (items.id === this.$route.query.id) {
  1690. this.activeArticleIndex = articleindex;
  1691. item.active = true;
  1692. items.active = true;
  1693. }
  1694. this.issueChnTanList.push({
  1695. id: items.id,
  1696. canRead: isBuy || index === 0,
  1697. });
  1698. if (isBuy || index === 0) {
  1699. items.canRead = true;
  1700. } else {
  1701. items.canRead = false;
  1702. }
  1703. articleindex++;
  1704. });
  1705. });
  1706. this.issueChnList = issueChnList;
  1707. }
  1708. })
  1709. .catch(() => {});
  1710. } else {
  1711. let isBuy = false;
  1712. issueChnList.forEach((item, index) => {
  1713. item.canRead = isBuy || index === 0;
  1714. item.arts.forEach((items) => {
  1715. if (items.id === this.$route.query.id) {
  1716. this.activeArticleIndex = articleindex;
  1717. item.active = true;
  1718. items.active = true;
  1719. }
  1720. this.issueChnTanList.push({
  1721. id: items.id,
  1722. canRead: isBuy || index === 0,
  1723. });
  1724. if (isBuy || index === 0) {
  1725. items.canRead = true;
  1726. } else {
  1727. items.canRead = false;
  1728. }
  1729. articleindex++;
  1730. });
  1731. });
  1732. this.issueChnList = issueChnList;
  1733. }
  1734. }
  1735. })
  1736. .catch(() => {});
  1737. },
  1738. closeArticleInfo() {
  1739. this.articleInfoFlag = false;
  1740. },
  1741. closePrint() {
  1742. this.printFlag = false;
  1743. },
  1744. },
  1745. created() {
  1746. if (this.config) {
  1747. let arr = this.config.split("&&&");
  1748. this.LoginNavIndex = arr[0] * 1;
  1749. this.userBg = arr[1] ? arr[1] : "rgba(0, 0, 0, 0.24)";
  1750. this.headerBorder = arr[2] ? arr[2] : "#5C5C5C";
  1751. this.headerBg = arr[3] ? arr[3] : "#00ADEF";
  1752. this.previousPage = arr[4] ? arr[4] : "商城";
  1753. }
  1754. if (this.articleId) {
  1755. this.getArticleDetail();
  1756. }
  1757. if (this.$route.query.iss_id) {
  1758. this.getIssueDetail();
  1759. }
  1760. },
  1761. mounted() {
  1762. let this_ = this;
  1763. this_.timer = null;
  1764. this_.readLength = 0;
  1765. this_.timer = setInterval(() => {
  1766. this_.readLength++;
  1767. }, 1000);
  1768. },
  1769. };
  1770. </script>
  1771. <style lang="scss" scoped>
  1772. .bookStore {
  1773. min-height: calc(100vh - 64px);
  1774. .navBar-right {
  1775. display: flex;
  1776. align-items: center;
  1777. }
  1778. .article-color {
  1779. display: flex;
  1780. width: 132px;
  1781. height: 32px;
  1782. justify-content: space-between;
  1783. align-items: center;
  1784. border: 1px solid #e5e6eb;
  1785. border-radius: 40px;
  1786. margin-left: 12px;
  1787. padding: 4px;
  1788. .color-item {
  1789. padding: 2px;
  1790. border: 2px solid transparent;
  1791. border-radius: 50%;
  1792. a {
  1793. width: 16px;
  1794. height: 16px;
  1795. border-radius: 50%;
  1796. display: block;
  1797. border: 1px solid transparent;
  1798. padding: 0;
  1799. }
  1800. }
  1801. }
  1802. .article-box {
  1803. position: relative;
  1804. padding: 80px 0;
  1805. .artricle-inner {
  1806. width: 1000px;
  1807. margin: 0 auto;
  1808. border-radius: 8px;
  1809. }
  1810. .mene-right {
  1811. position: fixed;
  1812. right: calc((100% - 1000px) / 2 - 172px);
  1813. top: 144px;
  1814. width: 152px;
  1815. max-height: 80%;
  1816. overflow: auto;
  1817. background: #ffffff;
  1818. border: 1px solid #e5e6eb;
  1819. border-radius: 8px;
  1820. padding: 4px;
  1821. z-index: 99;
  1822. }
  1823. }
  1824. .atricle-data {
  1825. padding: 120px 100px 40px 100px;
  1826. }
  1827. .glossary-box {
  1828. // border-top: 1px solid #F2F3F5;
  1829. padding: 40px;
  1830. .title {
  1831. display: flex;
  1832. justify-content: space-between;
  1833. h2 {
  1834. margin: 0;
  1835. font-weight: 400;
  1836. font-size: 24px;
  1837. line-height: 32px;
  1838. }
  1839. a {
  1840. font-weight: 400;
  1841. font-size: 16px;
  1842. line-height: 24px;
  1843. }
  1844. }
  1845. h4 {
  1846. margin: 24px 0 8px 0;
  1847. font-weight: 400;
  1848. font-size: 12px;
  1849. line-height: 20px;
  1850. }
  1851. }
  1852. .newWord-list {
  1853. padding: 2px 4px;
  1854. }
  1855. .word-info {
  1856. display: flex;
  1857. justify-content: space-between;
  1858. > div {
  1859. width: 178px;
  1860. height: 64px;
  1861. border-radius: 4px;
  1862. padding: 8px 12px;
  1863. label {
  1864. display: block;
  1865. font-weight: 400;
  1866. font-size: 12px;
  1867. line-height: 20px;
  1868. margin-bottom: 4px;
  1869. }
  1870. span {
  1871. font-weight: 400;
  1872. font-size: 16px;
  1873. line-height: 24px;
  1874. }
  1875. }
  1876. }
  1877. .echarts-box {
  1878. display: flex;
  1879. .echarts-type {
  1880. width: 232px;
  1881. flex-shrink: 0;
  1882. li {
  1883. height: 38px;
  1884. border-radius: 4px;
  1885. margin-bottom: 8px;
  1886. font-size: 14px;
  1887. line-height: 20px;
  1888. display: flex;
  1889. padding: 8px 12px;
  1890. cursor: pointer;
  1891. border: 1px solid transparent;
  1892. .name {
  1893. flex: 1;
  1894. }
  1895. .number {
  1896. width: 40px;
  1897. text-align: right;
  1898. }
  1899. .percent {
  1900. width: 80px;
  1901. text-align: right;
  1902. }
  1903. }
  1904. }
  1905. #shanxing_main {
  1906. flex: 1;
  1907. }
  1908. }
  1909. }
  1910. .article-btn {
  1911. display: flex;
  1912. justify-content: space-between;
  1913. align-items: center;
  1914. padding: 16px;
  1915. background: #f7f8fa;
  1916. .right {
  1917. width: 150px;
  1918. margin-right: -8px;
  1919. text-align: right;
  1920. }
  1921. .support {
  1922. padding: 8px 16px;
  1923. border-radius: 20px;
  1924. background: #e5e6eb;
  1925. margin-right: 8px;
  1926. color: rgba(0, 0, 0, 0.88);
  1927. font-size: 16px;
  1928. font-weight: 400;
  1929. line-height: 24px;
  1930. cursor: pointer;
  1931. .svg-icon {
  1932. margin-right: 8px;
  1933. color: rgba(23, 93, 255, 1);
  1934. }
  1935. &.active {
  1936. background: rgba(48, 110, 255, 1);
  1937. color: #fff;
  1938. .svg-icon {
  1939. color: #fff;
  1940. }
  1941. }
  1942. }
  1943. .colloct-article {
  1944. .svg-icon {
  1945. color: rgba(242, 85, 90, 1);
  1946. }
  1947. &.active {
  1948. background: rgba(242, 85, 90, 1);
  1949. }
  1950. }
  1951. .oppose {
  1952. padding: 12px;
  1953. border-radius: 20px;
  1954. background: #e5e6eb;
  1955. height: 40px;
  1956. font-size: 16px;
  1957. line-height: 16px;
  1958. display: inline-block;
  1959. cursor: pointer;
  1960. .svg-icon {
  1961. width: 16px;
  1962. height: 16px;
  1963. }
  1964. &.active {
  1965. background: rgba(48, 110, 255, 1);
  1966. .svg-icon {
  1967. color: #fff;
  1968. }
  1969. }
  1970. }
  1971. .btn-left,
  1972. .btn-right {
  1973. color: #3459d2;
  1974. font-size: 16px;
  1975. line-height: 24px;
  1976. padding: 0;
  1977. .svg-icon {
  1978. margin-right: 12px;
  1979. }
  1980. &.not-allow {
  1981. color: #5e89ef;
  1982. cursor: not-allowed;
  1983. }
  1984. }
  1985. .btn-right {
  1986. .svg-icon {
  1987. margin-right: 0;
  1988. margin-left: 12px;
  1989. }
  1990. }
  1991. .readed {
  1992. background: rgba(231, 238, 255, 1);
  1993. color: rgba(23, 93, 255, 1);
  1994. cursor: initial;
  1995. }
  1996. }
  1997. .share-box,
  1998. .catalog-box {
  1999. padding: 24px;
  2000. width: 428px;
  2001. height: 90%;
  2002. overflow: auto;
  2003. max-height: 712px;
  2004. position: fixed;
  2005. top: 40%;
  2006. left: 50%;
  2007. z-index: 10;
  2008. font-size: 0;
  2009. margin-top: -270px;
  2010. margin-left: -214px;
  2011. border-radius: 8px;
  2012. border: 1px solid #d0d3d9;
  2013. background: #fff;
  2014. box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.08),
  2015. 0px 16px 24px 2px rgba(0, 0, 0, 0.04), 0px 6px 30px 5px rgba(0, 0, 0, 0.05);
  2016. &-top {
  2017. display: flex;
  2018. justify-content: space-between;
  2019. align-items: center;
  2020. h5 {
  2021. color: #000;
  2022. font-size: 24px;
  2023. font-weight: 400;
  2024. line-height: 32px;
  2025. margin: 0;
  2026. }
  2027. .el-icon-close {
  2028. color: rgba(47, 55, 66, 1);
  2029. cursor: pointer;
  2030. font-size: 16px;
  2031. }
  2032. }
  2033. img {
  2034. width: 380px;
  2035. height: 738px;
  2036. border-radius: 16px;
  2037. margin: 24px 0;
  2038. }
  2039. #copyDownUrl {
  2040. width: 0;
  2041. height: 0;
  2042. opacity: 0;
  2043. display: block;
  2044. }
  2045. &-bottom {
  2046. .el-button {
  2047. width: 174px;
  2048. height: 48px;
  2049. color: #fff;
  2050. font-size: 16px;
  2051. font-weight: 400;
  2052. line-height: 24px;
  2053. border-radius: 8px;
  2054. &.is-plain {
  2055. color: rgba(23, 93, 255, 1);
  2056. border-color: rgba(23, 93, 255, 1);
  2057. &:hover {
  2058. background: rgba(231, 238, 255, 1);
  2059. }
  2060. &:focus {
  2061. color: rgba(23, 93, 255, 1);
  2062. border-color: rgba(23, 93, 255, 1);
  2063. background: rgba(231, 238, 255, 1);
  2064. }
  2065. }
  2066. }
  2067. }
  2068. }
  2069. .catalog-box {
  2070. right: calc((100% - 1000px) / 2);
  2071. left: auto;
  2072. margin-left: auto;
  2073. .treeList {
  2074. .parent-node {
  2075. display: flex;
  2076. align-items: center;
  2077. margin-bottom: 16px;
  2078. .number {
  2079. width: 26px;
  2080. font-weight: 500;
  2081. font-size: 16px;
  2082. line-height: 24px;
  2083. color: #2f3742;
  2084. }
  2085. .title {
  2086. font-weight: 500;
  2087. font-size: 16px;
  2088. line-height: 24px;
  2089. color: #2f3742;
  2090. word-break: break-word;
  2091. }
  2092. }
  2093. ul {
  2094. margin-bottom: 16px;
  2095. .children {
  2096. padding: 0 32px;
  2097. border-radius: 4px;
  2098. height: 40px;
  2099. display: flex;
  2100. align-items: center;
  2101. margin-bottom: 4px;
  2102. &-buy {
  2103. .number,
  2104. .title {
  2105. color: #2f3742;
  2106. }
  2107. }
  2108. &-no {
  2109. .number,
  2110. .title {
  2111. color: #929ca8;
  2112. }
  2113. }
  2114. &-buy:hover {
  2115. background: #e5e6eb;
  2116. cursor: pointer;
  2117. }
  2118. &-node {
  2119. display: flex;
  2120. width: 100%;
  2121. }
  2122. .number {
  2123. width: 24px;
  2124. }
  2125. .title {
  2126. flex: 1;
  2127. word-break: break-word;
  2128. }
  2129. .number,
  2130. .title {
  2131. font-weight: 400;
  2132. font-size: 16px;
  2133. line-height: 24px;
  2134. }
  2135. .el-icon-lock {
  2136. height: 16px;
  2137. color: #929ca8;
  2138. }
  2139. }
  2140. }
  2141. }
  2142. }
  2143. </style>
  2144. <style lang="scss">
  2145. .article-fontsize {
  2146. width: 144px;
  2147. height: 32px;
  2148. line-height: 30px;
  2149. border: 1px solid #e5e6eb;
  2150. border-radius: 40px;
  2151. overflow: hidden;
  2152. .el-input {
  2153. height: 30px;
  2154. }
  2155. .el-input-number__decrease,
  2156. .el-input-number__increase {
  2157. height: 30px;
  2158. border: none;
  2159. background: transparent;
  2160. color: #d9e2fc;
  2161. }
  2162. .el-input-number__decrease {
  2163. border-right: 1px solid #1b5441;
  2164. }
  2165. .el-input-number__increase {
  2166. border-left: 1px solid #1b5441;
  2167. }
  2168. .el-input__inner {
  2169. height: 30px;
  2170. border: none;
  2171. line-height: 30px;
  2172. background: transparent;
  2173. color: #d9e2fc;
  2174. }
  2175. }
  2176. .navBar {
  2177. border-color: transparent;
  2178. &-white {
  2179. border-color: #ebebeb;
  2180. .el-input-number__decrease,
  2181. .el-input-number__increase,
  2182. .el-input__inner {
  2183. color: #fff;
  2184. }
  2185. .el-input-number__decrease {
  2186. border-right: 1px solid #e5e6eb;
  2187. }
  2188. .el-input-number__increase {
  2189. border-left: 1px solid #e5e6eb;
  2190. }
  2191. .goback {
  2192. color: #fff;
  2193. }
  2194. .border {
  2195. background: #e5e6eb;
  2196. height: 16px;
  2197. margin-top: 2px;
  2198. }
  2199. .article-title {
  2200. color: #fff;
  2201. }
  2202. }
  2203. &-darkGreen {
  2204. .el-input-number__decrease {
  2205. border-right: 1px solid #1b5441;
  2206. }
  2207. .el-input-number__increase {
  2208. border-left: 1px solid #1b5441;
  2209. }
  2210. .goback {
  2211. color: #e9f7f2;
  2212. }
  2213. .border {
  2214. background: #1b5441;
  2215. height: 16px;
  2216. margin-top: 2px;
  2217. }
  2218. .article-title {
  2219. color: #ccebe1;
  2220. }
  2221. }
  2222. &-darkBlue {
  2223. .el-input-number__decrease {
  2224. border-right: 1px solid #1c2129;
  2225. }
  2226. .el-input-number__increase {
  2227. border-left: 1px solid #1c2129;
  2228. }
  2229. .goback {
  2230. color: #e9f7f2;
  2231. }
  2232. .border {
  2233. background: #667180;
  2234. height: 16px;
  2235. margin-top: 2px;
  2236. }
  2237. .article-title {
  2238. color: #d9e2fc;
  2239. }
  2240. }
  2241. &-armyGreen {
  2242. .el-input-number__decrease {
  2243. border-right: 1px solid #2a2f2c;
  2244. }
  2245. .el-input-number__increase {
  2246. border-left: 1px solid #2a2f2c;
  2247. }
  2248. .goback {
  2249. color: #e9f7f2;
  2250. }
  2251. .border {
  2252. background: #99a29e;
  2253. height: 16px;
  2254. margin-top: 2px;
  2255. }
  2256. .article-title {
  2257. color: #d9e2fc;
  2258. }
  2259. }
  2260. }
  2261. .articleDetail-dialog {
  2262. .el-dialog__header,
  2263. .el-dialog__body {
  2264. padding: 0;
  2265. }
  2266. }
  2267. .ciyun-dialog {
  2268. .el-dialog__title {
  2269. color: #2f3742;
  2270. font-size: 24px;
  2271. font-weight: 600;
  2272. line-height: 32px;
  2273. }
  2274. iframe {
  2275. border: none;
  2276. }
  2277. .el-dialog__body {
  2278. padding: 0;
  2279. }
  2280. }
  2281. .NNPE-ArticleView {
  2282. figure {
  2283. font-size: 0;
  2284. img {
  2285. max-width: 100%;
  2286. }
  2287. }
  2288. }
  2289. </style>