PhraseModel.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680
  1. <!-- -->
  2. <template>
  3. <div class="NNPE-ArticleView" v-if="articleInfo">
  4. <template v-if="resArr[0]&&resArr[0].wordsList">
  5. <h2>
  6. <span v-for="(itemR,indexR) in resArr[0].wordsList" :key="indexR" :style="{color:colorObj.titleColor,fontSize:(wordFontsize+30)+'px',lineHeight:(wordFontsize+38)+'px',marginRight:'10px',fontWeight:'700',cursor:'pointer'}"
  7. :class="[
  8. itemR.tokens[9]===''?'marginRight':'',itemR.marginRight?'marginSingleRight':'',
  9. itemR.isExplain||itemR.explainNumber?'hasExplain':''
  10. ]">
  11. <template v-if="itemR.isShow">
  12. <template v-if="itemR.isExplain">
  13. <span class="explain-sub" @click="showItem(itemR)">
  14. <img :src="require('../../../assets/explainBg-'+itemR.explainNumber+'.png')"/>
  15. </span>
  16. </template>
  17. <template v-else>
  18. <span
  19. class="NNPE-chs"
  20. :class="[
  21. itemR.type,itemR.tokens[9]===''?'marginRight':'',itemR.highIndex?'fontWeight':'',itemR.marginRight?'marginSingleRight':'',
  22. ]"
  23. @click="showItem(itemR)"
  24. >{{ itemR.tokens[2] }}</span
  25. >
  26. <template v-if="itemR.explainNumber">
  27. <span class="explain-sub" @click="showItem(itemR)">
  28. <img :src="require('../../../assets/explainBg-'+itemR.explainNumber+'.png')"/>
  29. </span>
  30. </template>
  31. <span
  32. class="NNPE-chs NNPE-chs-both"
  33. v-if="resArr[0].wordsList[indexR + 1] &&
  34. resArr[0].wordsList[indexR + 1].tokens[2] &&
  35. enFhList.indexOf(resArr[0].wordsList[indexR + 1].tokens[2]) > -1"
  36. :class="[
  37. resArr[0].wordsList[indexR + 1].type,resArr[0].wordsList[indexR + 1].tokens[8]===''?'marginLeft':'',resArr[0].wordsList[indexR + 1].highIndex?'fontWeight':'',resArr[0].wordsList[indexR + 1].marginRight?'marginSingleRight':'',
  38. ]"
  39. @click="showItem(resArr[0].wordsList[indexR + 1])"
  40. >{{ resArr[0].wordsList[indexR + 1].tokens[2] }}</span
  41. >
  42. </template>
  43. </template>
  44. <!-- {{itemR.tokens[2]}} -->
  45. </span>
  46. </h2>
  47. </template>
  48. <h6 class="nnpe-article-author" :style="{color:colorObj.sourceColor,fontSize:(wordFontsize-4)+'px',lineHeight:(wordFontsize+4)+'px',fontWeight:'400'}">
  49. {{articleInfo.art_author+' · '+articleInfo.study_phase_name+'版 · 第 '+articleInfo.iss_no+' 期 · '+articleInfo.release_date+' · '+articleInfo.chn_item+(articleInfo.page_no_in_pub?' · P'+articleInfo.page_no_in_pub:'')}}
  50. </h6>
  51. <div class="audio-box">
  52. <div
  53. class="aduioLine-content aduioLine-box"
  54. v-if="
  55. articleInfo.art_sound_url
  56. " :style="{background:colorObj.audiobg,borderColor:colorObj.audioBorder}"
  57. >
  58. <AudioLine
  59. audioId="artNormalAudio"
  60. :mp3="articleInfo.art_sound_url"
  61. :getCurTime="getCurTime"
  62. ref="audioLine"
  63. :mp3Source="'mp3'"
  64. />
  65. <svg-icon icon-class="icon-wrapper" class="wrapper"></svg-icon>
  66. </div>
  67. </div>
  68. <template v-if="resArr.length > 0">
  69. <div class="table-box">
  70. <div
  71. :class="['NNPE-detail']"
  72. v-for="(item, index) in resArr"
  73. :key="'detail' + index"
  74. >
  75. <div class="wordsList-box">
  76. <template v-if="index!==0">
  77. <div class="nnpe-sentence-box">
  78. <div v-for="(pItem, pIndex) in item.wordsList" :key="'wordsList' + pIndex" class="word-box" :class="[pItem.isExplain||pItem.explainNumber?'hasExplain':'']">
  79. <template v-if="pItem.isShow">
  80. <template v-if="pItem.isExplain">
  81. <span class="explain-sub" @click="showItem(pItem)">
  82. <img :src="require('../../../assets/explainBg-'+pItem.explainNumber+'.png')"/>
  83. </span>
  84. </template>
  85. <template v-else>
  86. <div
  87. :class="[
  88. 'NNPE-words',
  89. ]"
  90. >
  91. <span
  92. class="NNPE-chs"
  93. :class="[
  94. pItem.type,pItem.tokens[9]===''?'marginRight':'',pItem.highIndex?'fontWeight':'',pItem.marginRigh?'marginSingleRight':''
  95. ]"
  96. :style="{fontSize:wordFontsize + 'px',color: colorObj.contentColor}"
  97. @click="showItem(pItem)"
  98. >{{ pItem.tokens[2] }}</span
  99. >
  100. <template v-if="pItem.explainNumber">
  101. <span class="explain-sub" @click="showItem(pItem)">
  102. <img :src="require('../../../assets/explainBg-'+pItem.explainNumber+'.png')"/>
  103. </span>
  104. </template>
  105. <span
  106. class="NNPE-chs NNPE-chs-both"
  107. v-if="item.wordsList[pIndex + 1] &&
  108. item.wordsList[pIndex + 1].tokens[2] &&
  109. enFhList.indexOf(item.wordsList[pIndex + 1].tokens[2]) > -1"
  110. :class="[
  111. item.wordsList[pIndex + 1].type,item.wordsList[pIndex + 1].tokens[8]===''?'marginLeft':'',item.wordsList[pIndex + 1].highIndex?'fontWeight':'',item.wordsList[pIndex + 1].marginRight?'marginSingleRight':''
  112. ]"
  113. :style="{fontSize:wordFontsize + 'px',color: colorObj.contentColor}"
  114. @click="showItem(item.wordsList[pIndex + 1])"
  115. >{{ item.wordsList[pIndex + 1].tokens[2] }}</span
  116. >
  117. </div>
  118. </template>
  119. </template>
  120. </div>
  121. </div>
  122. </template>
  123. </div>
  124. </div>
  125. </div>
  126. </template>
  127. <div class="explain-box" v-if="showExplainFlag&&showObj">
  128. <div class="explain-box-top">
  129. <p>注释</p>
  130. <i class="el-icon-close" @click="closeExplain"></i>
  131. </div>
  132. <h3>{{showObj.exp_title}}</h3>
  133. <span>{{showObj.exp_content}}</span>
  134. </div>
  135. <el-dialog
  136. :visible.sync="showPhraseFlag"
  137. :show-close="false"
  138. :close-on-click-modal="false"
  139. width="580px"
  140. :modal="false"
  141. class="login-dialog phrase-box"
  142. v-if="showPhraseFlag&&showObj">
  143. <phrase-card :dataObj="showObj" @closeWord="closeExplain" @changeLike="changeLike" :likePhrase="likePhraseList"></phrase-card>
  144. </el-dialog>
  145. <el-dialog
  146. :visible.sync="showWordFlag"
  147. :show-close="false"
  148. :close-on-click-modal="false"
  149. width="570px"
  150. class="login-dialog"
  151. :modal="false"
  152. v-if="showWordFlag">
  153. <WordCard @closeWord="closeExplain" :dataObj="showObj" @changeLike="changeLike" :likePhrase="likeWord"/>
  154. </el-dialog>
  155. </div>
  156. </template>
  157. <script>
  158. import AudioLine from "@/components/common/AudioLine.vue"
  159. import PhraseCard from "./PhraseCard.vue"
  160. import WordCard from "../../personalCenter/components/WordCard.vue"
  161. export default {
  162. name: "ArticleView",
  163. props: [ "titleFontsize", "wordFontsize", "colorObj","articleType","articleInfo","likePhraseList","likeWord"],
  164. components: {
  165. AudioLine,
  166. PhraseCard,
  167. WordCard
  168. },
  169. data() {
  170. return {
  171. resArr: [],
  172. curTime: 0, //单位s
  173. enFhList: [
  174. ",",
  175. ".",
  176. ";",
  177. "?",
  178. "!",
  179. ":",
  180. ">",
  181. "<",
  182. "'",
  183. "’",
  184. "n't",
  185. "n’t",
  186. "n’ts",
  187. "n‘t",
  188. "'t",
  189. "’t",
  190. "‘t",
  191. "'s",
  192. "’s",
  193. "‘s",
  194. "'m",
  195. "’m",
  196. "‘m",
  197. "'re",
  198. "’re",
  199. "‘re",
  200. "'d",
  201. "’d",
  202. "‘d",
  203. "'ve",
  204. "’ve",
  205. "‘ve",
  206. ")",
  207. "'ll",
  208. "’ll",
  209. "‘ll",
  210. "”",
  211. ],
  212. articleImg: {}, // 文章图片
  213. allWordList: [], // 生词短语注释总列表
  214. tokensArr: [],
  215. sentenceList: [],
  216. wordLit:[],
  217. annotationList: [],
  218. phraseList: [],
  219. showObj:null,
  220. activeObjIndex: null,
  221. showWordFlag: false,
  222. showPhraseFlag: false,
  223. showExplainFlag: false,
  224. };
  225. },
  226. computed: {
  227. isPlaying: function () {
  228. let playing = false;
  229. if (this.$refs.audioLine) {
  230. playing = this.$refs.audioLine.audio.isPlaying;
  231. }
  232. return playing;
  233. },
  234. },
  235. watch: {
  236. likeWordList:{
  237. handler(val, oldVal) {
  238. const _this = this;
  239. if (val) {
  240. debugger
  241. this.phraseList.forEach(item=>{
  242. item.type='phrase'
  243. item.collect = this.likePhraseList.indexOf(item.exp_title)>-1?true:false
  244. })
  245. }
  246. },
  247. // 深度观察监听
  248. deep: true,
  249. },
  250. likeWord:{
  251. handler(val, oldVal) {
  252. const _this = this;
  253. if (val) {
  254. this.wordLit.forEach(item=>{
  255. item.type='newWord'
  256. item.exp_title = item.word_name
  257. let paraStr = ''
  258. if(item.word_explain&&item.word_explain.word_para_list){
  259. item.word_explain.word_para_list.forEach(items=>{
  260. paraStr += items.para
  261. })
  262. }
  263. item.exp_content = paraStr
  264. item.collect = this.likeWord.indexOf(item.word_name)>-1?true:false
  265. })
  266. }
  267. },
  268. // 深度观察监听
  269. deep: true,
  270. },
  271. },
  272. //方法集合
  273. methods: {
  274. getCurTime(curTime) {
  275. this.curTime = curTime * 1000;
  276. },
  277. handleData() {
  278. let explainNumber = 1
  279. let resArr = [];
  280. let articleInfo = JSON.parse(JSON.stringify(this.articleInfo));
  281. this.sentenceList = articleInfo.art_corpus_data?articleInfo.art_corpus_data.sentList:[]
  282. this.wordLit = articleInfo.art_voc_data?articleInfo.art_voc_data:[]
  283. this.annotationList = articleInfo.art_phrase_data?articleInfo.art_explain_data:[]
  284. this.phraseList = articleInfo.art_explain_data?articleInfo.art_phrase_data:[]
  285. this.wordLit.forEach(item=>{
  286. item.type='newWord'
  287. item.exp_title = item.word_name
  288. let paraStr = ''
  289. if(item.word_explain&&item.word_explain.word_para_list){
  290. item.word_explain.word_para_list.forEach(items=>{
  291. paraStr += items.para
  292. })
  293. }
  294. item.exp_content = paraStr
  295. item.collect = this.likeWord.indexOf(item.word_name)>-1?true:false
  296. })
  297. this.phraseList.forEach(item=>{
  298. item.type='phrase'
  299. item.collect = this.likePhraseList.indexOf(item.exp_title)>-1?true:false
  300. })
  301. this.annotationList.forEach(item=>{
  302. item.type='explain'
  303. })
  304. this.allWordList = this.wordLit.concat(this.phraseList).concat(this.annotationList)
  305. let leg = articleInfo.art_corpus_data.sentList[articleInfo.art_corpus_data.sentList.length-1].pno
  306. this.sentenceList.forEach((item,index) => {
  307. let flag = ''
  308. item.StyleTokens = []
  309. item.tokens.forEach((items,indexs)=>{
  310. let obj = {
  311. tokens: items,
  312. marginRight: indexs===item.tokens.length-1
  313. }
  314. this.allWordList.forEach((itema,indexa)=>{
  315. itema.bind_sent_data.bind_sents.forEach((itemb,indexb)=>{
  316. if(itemb.sent_id===item.id){
  317. if(itema.type==='explain'){
  318. if(indexs===itemb.sel_token_idxes[itemb.sel_token_idxes.length-1]){
  319. obj.highIndex = true
  320. obj.type = itema.type
  321. obj.word_id = itema.id // 生词注释短语的id
  322. obj.explainNumber = explainNumber
  323. explainNumber ++
  324. }
  325. }else{
  326. itemb.sel_token_idxes.forEach(itemi=>{
  327. if(indexs===itemi){
  328. obj.highIndex = true
  329. obj.type = itema.type
  330. obj.word_id = itema.id // 生词注释短语的id
  331. }
  332. })
  333. }
  334. if(itemb.sel_token_idxes.length===0&&itema.type==='explain'&&indexs===item.tokens.length-1){
  335. flag = itema.id
  336. }
  337. }
  338. })
  339. })
  340. item.StyleTokens.push(obj)
  341. if(flag){
  342. item.StyleTokens.push({
  343. tokens: [
  344. 0, 8, "Students", "", "", "", "", "", "", " ", 0, "", "", ""
  345. ],
  346. type: 'explain',
  347. word_id: flag,
  348. isExplain: true,
  349. explainNumber: explainNumber
  350. })
  351. explainNumber ++
  352. }
  353. })
  354. });
  355. for(let i=0;i<leg+1;i++){
  356. let obj = {
  357. wordsList: []
  358. }
  359. resArr.push(obj)
  360. }
  361. this.sentenceList.forEach((item,index) => {
  362. item.StyleTokens.forEach((items,indexs)=>{
  363. items.isShow = this.enFhList.indexOf(items.tokens[2])==-1
  364. resArr[item.pno].wordsList.push(items)
  365. })
  366. });
  367. this.resArr = resArr;
  368. },
  369. showItem(item){
  370. if(!item.isShow){
  371. return
  372. }else{
  373. if(item.type==='explain'){
  374. this.annotationList.forEach(itemi=>{
  375. if(item.word_id===itemi.id){
  376. this.showObj = itemi
  377. }
  378. })
  379. this.showExplainFlag = true
  380. }else if(item.type==='phrase'){
  381. this.phraseList.forEach((itemi,indexi)=>{
  382. if(item.word_id===itemi.id){
  383. this.showObj = itemi
  384. this.activeObjIndex = indexi
  385. }
  386. })
  387. this.showPhraseFlag = true
  388. }else if(item.type==='newWord'){
  389. this.wordLit.forEach(itemi=>{
  390. if(item.word_id===itemi.id){
  391. let obj = {
  392. src: itemi.ph_file_url?itemi.ph_file_url:'',
  393. word: itemi.word_name,
  394. symbol: itemi.word_explain.ph?itemi.word_explain.ph:'',
  395. paraList: itemi.word_explain.word_para_list,
  396. type: itemi.word_explain.vl_level?itemi.word_explain.vl_level:'',
  397. typeCn: itemi.word_explain.vl_level_name?itemi.word_explain.vl_level_name:'',
  398. rate: itemi.word_explain.star?itemi.word_explain.star:null,
  399. originalObj: itemi,
  400. hasVoice: itemi.word_explain.ph_mp3_id||itemi.word_explain.ph_file_url?true:false,
  401. id: itemi.id,
  402. collect: this.likeWord.indexOf(itemi.word_name)>-1?true:false,
  403. isNew: true
  404. }
  405. this.showObj = obj
  406. }
  407. })
  408. this.showWordFlag = true
  409. }else{
  410. let obj = {
  411. word: item.tokens[2],
  412. isNew: false
  413. }
  414. this.showObj = obj
  415. this.showWordFlag = true
  416. }
  417. }
  418. // console.log(item)
  419. },
  420. closeExplain(){
  421. this.showExplainFlag = false
  422. this.showPhraseFlag = false
  423. this.showWordFlag = false
  424. this.showObj = null
  425. },
  426. changeLike(obj,list){
  427. this.$emit('changeLike',obj,list)
  428. }
  429. },
  430. //生命周期 - 创建完成(可以访问当前this实例)
  431. created() {},
  432. //生命周期 - 挂载完成(可以访问DOM元素)
  433. mounted() {
  434. if (this.articleInfo) {
  435. this.handleData();
  436. }
  437. },
  438. beforeCreate() {}, //生命周期 - 创建之前
  439. beforeMount() {}, //生命周期 - 挂载之前
  440. beforeUpdate() {}, //生命周期 - 更新之前
  441. updated() {}, //生命周期 - 更新之后
  442. beforeDestroy() {}, //生命周期 - 销毁之前
  443. destroyed() {}, //生命周期 - 销毁完成
  444. activated() {}, //如果页面有keep-alive缓存功能,这个函数会触发
  445. };
  446. </script>
  447. <style lang='scss' scoped>
  448. //@import url(); 引入公共css类
  449. .NNPE-ArticleView {
  450. width: 100%;
  451. .nnpe-article-author{
  452. margin: 24px 0;
  453. }
  454. h2{
  455. display: flex;
  456. flex-flow: wrap;
  457. &.sentActive {
  458. background: rgba(24, 144, 255, 0.1);
  459. }
  460. &.overActive {
  461. background: rgba(0, 0, 0, 0.06);
  462. }
  463. .wordActive {
  464. color: #175DFF !important;
  465. }
  466. .hasExplain{
  467. min-width: 3px;
  468. position: relative;
  469. }
  470. .explain-sub{
  471. position: absolute;
  472. bottom: -25px;
  473. right: -10px;
  474. z-index: 1;
  475. font-size: 0;
  476. cursor: pointer;
  477. img{
  478. width: 14px;
  479. height: 12px;
  480. }
  481. }
  482. }
  483. .table-box {
  484. // background: #f7f7f7;
  485. // border-top: 1px solid rgba(0, 0, 0, 0.1);
  486. :last-child {
  487. :last-child.wordsList-box {
  488. padding-bottom: 40px;
  489. }
  490. }
  491. .wordsList-box {
  492. flex: 1;
  493. padding: 6px 0 12px 0;
  494. .nnpe-sentence-box {
  495. display: flex;
  496. flex-flow: wrap;
  497. .word-box{
  498. position: relative;
  499. &.hasExplain{
  500. min-width: 3px;
  501. }
  502. .explain-sub{
  503. position: absolute;
  504. bottom: -5px;
  505. right: -10px;
  506. z-index: 1;
  507. font-size: 0;
  508. cursor: pointer;
  509. img{
  510. width: 14px;
  511. height: 12px;
  512. }
  513. }
  514. }
  515. }
  516. > img {
  517. max-width: 50%;
  518. display: block;
  519. padding: 16px 0;
  520. margin: 0 auto;
  521. }
  522. }
  523. }
  524. .NNPE-detail {
  525. clear: both;
  526. overflow: hidden;
  527. display: flex;
  528. .NNPE-words {
  529. float: left;
  530. padding: 0;
  531. &.noPadding{
  532. padding:0;
  533. }
  534. &.sentActive {
  535. background: rgba(24, 144, 255, 0.1);
  536. }
  537. &.overActive {
  538. background: rgba(0, 0, 0, 0.06);
  539. }
  540. > span {
  541. float: left;
  542. cursor: pointer;
  543. &.NNPE-chs {
  544. // font-size: 24px;
  545. font-family: 'Smartisan';
  546. line-height: 150%;
  547. color: #000000;
  548. padding: 0 3px;
  549. &.wordActive {
  550. color: #175DFF !important;
  551. }
  552. &.marginRight{
  553. padding-right: 0;
  554. }
  555. &.marginLeft{
  556. padding-left: 0;
  557. }
  558. &.marginSingleRight{
  559. padding: 0 3px 0 0;
  560. }
  561. &.fontWeight{
  562. font-weight: bold;
  563. }
  564. &.newWord{
  565. color: #3459D2 !important;
  566. }
  567. &.phrase{
  568. color: #FF802B !important;
  569. }
  570. &.explain{
  571. // color: #23C847 !important;
  572. font-weight: 400;
  573. }
  574. }
  575. &.padding {
  576. padding: 0 3px;
  577. cursor: pointer;
  578. }
  579. }
  580. }
  581. }
  582. }
  583. .audio-box{
  584. display: flex;
  585. align-items: center;
  586. justify-content: space-between;
  587. .explain-video{
  588. background: #FFB224;
  589. border-color: #FFB224;
  590. color: #FFFFFF;
  591. width: 136px;
  592. height: 48px;
  593. padding: 0;
  594. font-weight: 500;
  595. font-size: 16px;
  596. border-radius: 30px;
  597. .svg-icon{
  598. margin-right: 8px;
  599. }
  600. }
  601. }
  602. .aduioLine-box{
  603. width: 516px;
  604. height: 48px;
  605. background: #FFFFFF;
  606. border: 1px solid #EBEBEB;
  607. border-radius: 30px;
  608. display: flex;
  609. align-items: center;
  610. padding: 8px 24px;
  611. .wrapper{
  612. width: 24px;
  613. height: 24px;
  614. flex-shrink: 0;
  615. color: #175DFF;
  616. margin-left: 8px;
  617. }
  618. .Audio{
  619. width: 430px;
  620. }
  621. }
  622. .explain-box{
  623. width: 451px;
  624. position: fixed;
  625. z-index: 1;
  626. top: 50%;
  627. left: 50%;
  628. margin-left: -225px;
  629. margin-top: -90px;
  630. border-radius: 4px;
  631. background: #FFF;
  632. box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.08), 0px 16px 24px 2px rgba(0, 0, 0, 0.04), 0px 6px 30px 5px rgba(0, 0, 0, 0.05);
  633. padding: 16px;
  634. &-top{
  635. display: flex;
  636. justify-content: space-between;
  637. align-items: center;
  638. p{
  639. margin: 0;
  640. color: #000;
  641. font-size: 14px;
  642. font-weight: 400;
  643. line-height: 22px;
  644. }
  645. .el-icon-close{
  646. cursor: pointer;
  647. }
  648. }
  649. h3{
  650. color:#2F3742;
  651. font-size: 20px;
  652. font-weight: 700;
  653. line-height: 28px;
  654. margin: 8px 0 0 0;
  655. }
  656. >span{
  657. display: block;
  658. margin: 8px 0 0 0;
  659. color:#667180;
  660. font-size: 14px;
  661. font-weight: 400;
  662. line-height: 22px;
  663. }
  664. }
  665. .phrase-box{
  666. // border-radius: 8px;
  667. // border: 1px solid #EBEBEB;
  668. // background: #FFF;
  669. // box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.08), 0px 16px 24px 2px rgba(0, 0, 0, 0.04), 0px 6px 30px 5px rgba(0, 0, 0, 0.05);
  670. // width: 580px;
  671. // height: 200px;
  672. // position: fixed;
  673. // left: 50%;
  674. // margin-left: -290px;
  675. // top: 200px;
  676. // z-index: 1;
  677. }
  678. </style>