|  | @@ -0,0 +1,604 @@
 | 
	
		
			
				|  |  | +<!--  -->
 | 
	
		
			
				|  |  | +<template>
 | 
	
		
			
				|  |  | +  <div class="NNPE-ArticleView" v-if="articleInfo">
 | 
	
		
			
				|  |  | +    <template v-if="resArr&&resArr.wordsList&&resArr.wordsList[0]&&resArr.wordsList[0][0]&&resArr.wordsList[0][0].hasOwnProperty('pno')&&resArr.wordsList[0][0].pno===0">
 | 
	
		
			
				|  |  | +        <h2 :class="['NNPE-words',]">
 | 
	
		
			
				|  |  | +            <span v-for="(itemR,indexR) in resArr.wordsList[0]" :key="indexR" :style="{color:colorObj.titleColor,fontSize:(wordFontsize+30)+'px',lineHeight:(wordFontsize+38)+'px',marginRight:'10px',fontWeight:'700'}" 
 | 
	
		
			
				|  |  | +            :class="[
 | 
	
		
			
				|  |  | +                    itemR.tokens[9]===' '?'marginRight':'',itemR.marginRight?'marginSingleRight':''
 | 
	
		
			
				|  |  | +                ]">
 | 
	
		
			
				|  |  | +                    <template v-if="itemR.isShow">
 | 
	
		
			
				|  |  | +                        <span
 | 
	
		
			
				|  |  | +                                class="NNPE-chs"
 | 
	
		
			
				|  |  | +                                :class="[
 | 
	
		
			
				|  |  | +                                    itemR.type,itemR.tokens[9]===' '?'marginRight':'',itemR.highIndex?'fontWeight':'',itemR.marginRight?'marginSingleRight':''
 | 
	
		
			
				|  |  | +                                ]"
 | 
	
		
			
				|  |  | +                                >{{ itemR.tokens[2] }}</span
 | 
	
		
			
				|  |  | +                            >
 | 
	
		
			
				|  |  | +                            <span
 | 
	
		
			
				|  |  | +                                class="NNPE-chs NNPE-chs-both"
 | 
	
		
			
				|  |  | +                                v-if="resArr.wordsList[0][indexR + 1] &&
 | 
	
		
			
				|  |  | +                                resArr.wordsList[0][indexR + 1].tokens[2] &&
 | 
	
		
			
				|  |  | +                                enFhList.indexOf(resArr.wordsList[0][indexR + 1].tokens[2]) > -1"
 | 
	
		
			
				|  |  | +                                :class="[
 | 
	
		
			
				|  |  | +                                        resArr.wordsList[0][indexR + 1].type,resArr.wordsList[0][indexR + 1].tokens[9]===' '?'marginRight':'',resArr.wordsList[0][indexR + 1].highIndex?'fontWeight':'',resArr.wordsList[0][indexR + 1].marginRight?'marginSingleRight':''
 | 
	
		
			
				|  |  | +                                    ]"
 | 
	
		
			
				|  |  | +                                >{{ resArr.wordsList[0][indexR + 1].tokens[2] }}</span
 | 
	
		
			
				|  |  | +                            >
 | 
	
		
			
				|  |  | +                    </template>
 | 
	
		
			
				|  |  | +                <!-- {{itemR.tokens[2]}} -->
 | 
	
		
			
				|  |  | +                </span>
 | 
	
		
			
				|  |  | +        </h2>
 | 
	
		
			
				|  |  | +    </template>
 | 
	
		
			
				|  |  | +    <h6 class="nnpe-article-author" :style="{color:colorObj.sourceColor,fontSize:(wordFontsize-4)+'px',lineHeight:(wordFontsize+4)+'px',fontWeight:'400'}">
 | 
	
		
			
				|  |  | +        {{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:'')}}
 | 
	
		
			
				|  |  | +    </h6>
 | 
	
		
			
				|  |  | +    <div class="audio-box">
 | 
	
		
			
				|  |  | +        <div
 | 
	
		
			
				|  |  | +            class="aduioLine-content aduioLine-box"
 | 
	
		
			
				|  |  | +            v-if="
 | 
	
		
			
				|  |  | +                articleInfo.art_sound_url
 | 
	
		
			
				|  |  | +            " :style="{background:colorObj.audiobg,borderColor:colorObj.audioBorder}"
 | 
	
		
			
				|  |  | +        >
 | 
	
		
			
				|  |  | +            <AudioLine
 | 
	
		
			
				|  |  | +                audioId="artNormalAudio"
 | 
	
		
			
				|  |  | +                :mp3="articleInfo.art_sound_url"
 | 
	
		
			
				|  |  | +                :getCurTime="getCurTime"
 | 
	
		
			
				|  |  | +                ref="audioLine"
 | 
	
		
			
				|  |  | +                :mp3Source="'mp3'"
 | 
	
		
			
				|  |  | +            />
 | 
	
		
			
				|  |  | +            <svg-icon icon-class="icon-wrapper" class="wrapper"></svg-icon>
 | 
	
		
			
				|  |  | +        </div>
 | 
	
		
			
				|  |  | +    </div>
 | 
	
		
			
				|  |  | +    <template v-if="resArr.wordsList&&resArr.wordsList.length > 0">
 | 
	
		
			
				|  |  | +      <div class="table-box" :class="['table-box-'+colorObj.type]">
 | 
	
		
			
				|  |  | +        <div
 | 
	
		
			
				|  |  | +          :class="['NNPE-detail']"
 | 
	
		
			
				|  |  | +          v-for="(item, index) in resArr.wordsList"
 | 
	
		
			
				|  |  | +          :key="'detail' + index"
 | 
	
		
			
				|  |  | +        >
 | 
	
		
			
				|  |  | +          <b class="para-index" :style="{fontSize:wordFontsize + 'px',color:resArr.timeList[index] && resArr.timeList[index] && curTime >= resArr.timeList[index].s && curTime <= resArr.timeList[index].e ? colorObj.type==='white'?'#2F3742':colorObj.type==='darkGreen'?'#299772':colorObj.type==='armyGreen'?'#30A47D':'#5373E7':colorObj.type==='white'?'#D0D3D9':colorObj.type==='darkGreen'?'#7A8983':colorObj.type==='armyGreen'?'#6B7C74':'#737781'}">{{index+1}}</b>
 | 
	
		
			
				|  |  | +          <div class="wordsList-box">
 | 
	
		
			
				|  |  | +            <div class="nnpe-sentence-box">
 | 
	
		
			
				|  |  | +              <div v-for="(pItem, pIndex) in item" :key="'wordsList' + pIndex">
 | 
	
		
			
				|  |  | +                <template v-if="pItem.isShow">
 | 
	
		
			
				|  |  | +                    <div
 | 
	
		
			
				|  |  | +                        :class="[
 | 
	
		
			
				|  |  | +                        'NNPE-words',
 | 
	
		
			
				|  |  | +                        isPlaying &&
 | 
	
		
			
				|  |  | +                        resArr.timeList[index] &&
 | 
	
		
			
				|  |  | +                        resArr.timeList[index] &&
 | 
	
		
			
				|  |  | +                        curTime >= resArr.timeList[index].s &&
 | 
	
		
			
				|  |  | +                        curTime <= resArr.timeList[index].e
 | 
	
		
			
				|  |  | +                            ? 'sentActive'
 | 
	
		
			
				|  |  | +                            : '',
 | 
	
		
			
				|  |  | +                        pItem.pno == paraIndex && pItem.sno == sentIndex
 | 
	
		
			
				|  |  | +                            ? 'overActive'
 | 
	
		
			
				|  |  | +                            : '',
 | 
	
		
			
				|  |  | +                        ]"
 | 
	
		
			
				|  |  | +                        @click="
 | 
	
		
			
				|  |  | +                        handleChangeTime(
 | 
	
		
			
				|  |  | +                            resArr.timeList[index] &&
 | 
	
		
			
				|  |  | +                            resArr.timeList[index] &&
 | 
	
		
			
				|  |  | +                            resArr.timeList[index].s
 | 
	
		
			
				|  |  | +                        )
 | 
	
		
			
				|  |  | +                        "
 | 
	
		
			
				|  |  | +                        @mouseover="handleMouseover(pItem)"
 | 
	
		
			
				|  |  | +                        @mouseleave="handleMouseleave"
 | 
	
		
			
				|  |  | +                    >
 | 
	
		
			
				|  |  | +                            <span
 | 
	
		
			
				|  |  | +                                class="NNPE-chs"
 | 
	
		
			
				|  |  | +                                :class="[
 | 
	
		
			
				|  |  | +                                    isPlaying &&
 | 
	
		
			
				|  |  | +                                    resArr.timeList[index] &&
 | 
	
		
			
				|  |  | +                                    resArr.timeList[index] &&
 | 
	
		
			
				|  |  | +                                    resArr.timeList[index].e &&
 | 
	
		
			
				|  |  | +                                    resArr.timeList[index].tokens &&
 | 
	
		
			
				|  |  | +                                    resArr.timeList[index].tokens[pItem.wIndex]&&
 | 
	
		
			
				|  |  | +                                    curTime >=
 | 
	
		
			
				|  |  | +                                        resArr.timeList[index].tokens[pItem.wIndex].s &&
 | 
	
		
			
				|  |  | +                                    curTime <= resArr.timeList[index].e
 | 
	
		
			
				|  |  | +                                        ? 'wordActive'
 | 
	
		
			
				|  |  | +                                        : '',
 | 
	
		
			
				|  |  | +                                    pItem.tokens[9]===' '?'marginRight':'',pItem.marginRight?'marginSingleRight':''
 | 
	
		
			
				|  |  | +                                ]"
 | 
	
		
			
				|  |  | +                                :style="{fontSize:wordFontsize + 'px',color: isPlaying &&
 | 
	
		
			
				|  |  | +                                        resArr.timeList[index] &&
 | 
	
		
			
				|  |  | +                                        resArr.timeList[index] &&
 | 
	
		
			
				|  |  | +                                        resArr.timeList[index].tokens[pItem.wIndex]&&
 | 
	
		
			
				|  |  | +                                        curTime >=
 | 
	
		
			
				|  |  | +                                            resArr.timeList[index].tokens[pItem.wIndex].s &&
 | 
	
		
			
				|  |  | +                                        curTime <= resArr.timeList[index].tokens[pItem.wIndex].e?colorObj.statisticValue:
 | 
	
		
			
				|  |  | +                                        resArr.timeList[index] &&
 | 
	
		
			
				|  |  | +                                        resArr.timeList[index] &&
 | 
	
		
			
				|  |  | +                                        curTime >= resArr.timeList[index].s &&
 | 
	
		
			
				|  |  | +                                        curTime <= resArr.timeList[index].e?colorObj.contentColor:colorObj.type==='white'?'#D0D3D9':colorObj.type==='darkGreen'?'#7A8983':colorObj.type==='darkBlue'?'#737781':'#6B7C74'}"
 | 
	
		
			
				|  |  | +                                >{{ pItem.tokens[2] }}</span
 | 
	
		
			
				|  |  | +                            >
 | 
	
		
			
				|  |  | +                            <span
 | 
	
		
			
				|  |  | +                            class="NNPE-chs NNPE-chs-both"
 | 
	
		
			
				|  |  | +                            v-if="item[pIndex + 1] &&
 | 
	
		
			
				|  |  | +                            item[pIndex + 1].tokens[2] &&
 | 
	
		
			
				|  |  | +                            enFhList.indexOf(item[pIndex + 1].tokens[2]) > -1"
 | 
	
		
			
				|  |  | +                            :class="[
 | 
	
		
			
				|  |  | +                                    isPlaying &&
 | 
	
		
			
				|  |  | +                                    resArr.timeList[index] &&
 | 
	
		
			
				|  |  | +                                    resArr.timeList[index] &&
 | 
	
		
			
				|  |  | +                                    resArr.timeList[index].tokens[pItem.wIndex]&&
 | 
	
		
			
				|  |  | +                                    curTime >=
 | 
	
		
			
				|  |  | +                                        resArr.timeList[index].tokens[pItem.wIndex].s &&
 | 
	
		
			
				|  |  | +                                    curTime <= resArr.timeList[index].e
 | 
	
		
			
				|  |  | +                                        ? 'wordActive'
 | 
	
		
			
				|  |  | +                                        : '',
 | 
	
		
			
				|  |  | +                                    item[pIndex + 1].tokens[9]===' '?'marginRight':'',item[pIndex + 1].marginRight?'marginSingleRight':''
 | 
	
		
			
				|  |  | +                                ]"
 | 
	
		
			
				|  |  | +                                :style="{fontSize:wordFontsize + 'px',color: isPlaying &&
 | 
	
		
			
				|  |  | +                                        resArr.timeList[index] &&
 | 
	
		
			
				|  |  | +                                        resArr.timeList[index] &&
 | 
	
		
			
				|  |  | +                                        resArr.timeList[index].tokens[pItem.wIndex]&&
 | 
	
		
			
				|  |  | +                                        curTime >=
 | 
	
		
			
				|  |  | +                                            resArr.timeList[index].tokens[pItem.wIndex].s &&
 | 
	
		
			
				|  |  | +                                        curTime <= resArr.timeList[index].tokens[pItem.wIndex].e?colorObj.statisticValue:resArr.timeList[index] &&
 | 
	
		
			
				|  |  | +                                        resArr.timeList[index] &&
 | 
	
		
			
				|  |  | +                                        curTime >= resArr.timeList[index].s &&
 | 
	
		
			
				|  |  | +                                        curTime <= resArr.timeList[index].e?colorObj.contentColor:colorObj.type==='white'?'#D0D3D9':colorObj.type==='darkGreen'?'#7A8983':colorObj.type==='darkBlue'?'#737781':'#6B7C74'}"
 | 
	
		
			
				|  |  | +                            >{{ item[pIndex + 1].tokens[2] }}</span
 | 
	
		
			
				|  |  | +                        >
 | 
	
		
			
				|  |  | +                    </div>
 | 
	
		
			
				|  |  | +                </template>
 | 
	
		
			
				|  |  | +              </div>
 | 
	
		
			
				|  |  | +            </div>
 | 
	
		
			
				|  |  | +          </div>
 | 
	
		
			
				|  |  | +        </div>
 | 
	
		
			
				|  |  | +        <div class="operate-box" :style="{background:colorObj.contentBg}">
 | 
	
		
			
				|  |  | +            <div class="operate-box-inner" :style="{background:colorObj.contentInnerBg}">
 | 
	
		
			
				|  |  | +                <div class="operate-box-inner-content">
 | 
	
		
			
				|  |  | +                    <div class="operate-item">
 | 
	
		
			
				|  |  | +                        <svg-icon icon-class="Go-start" :style="{color:colorObj.type==='white'||colorObj.type==='darkGreen'?'#000':'#fff'}"></svg-icon>
 | 
	
		
			
				|  |  | +                        <span :style="{color:colorObj.type==='armyGreen'?'#7C8983':''}">上一句</span>
 | 
	
		
			
				|  |  | +                    </div>
 | 
	
		
			
				|  |  | +                    <div class="operate-item">
 | 
	
		
			
				|  |  | +                        <svg-icon icon-class="Type-drive" :style="{color:colorObj.type==='white'||colorObj.type==='darkGreen'?'#000':'#fff'}"></svg-icon>
 | 
	
		
			
				|  |  | +                        <span :style="{color:colorObj.type==='armyGreen'?'#7C8983':''}">听对比</span>
 | 
	
		
			
				|  |  | +                    </div>
 | 
	
		
			
				|  |  | +                    <div class="operate-item">
 | 
	
		
			
				|  |  | +                        <b class="luyin-btn">
 | 
	
		
			
				|  |  | +                            <svg-icon icon-class="Voice-luyin" :style="{color:'#fff'}"></svg-icon>
 | 
	
		
			
				|  |  | +                        </b>
 | 
	
		
			
				|  |  | +                    </div>
 | 
	
		
			
				|  |  | +                    <div class="operate-item">
 | 
	
		
			
				|  |  | +                        <svg-icon icon-class="Headphone-sound" :style="{color:colorObj.type==='white'||colorObj.type==='darkGreen'?'#000':'#fff'}"></svg-icon>
 | 
	
		
			
				|  |  | +                        <span :style="{color:colorObj.type==='armyGreen'?'#7C8983':''}">我读的</span>
 | 
	
		
			
				|  |  | +                    </div>
 | 
	
		
			
				|  |  | +                    <div class="operate-item">
 | 
	
		
			
				|  |  | +                        <svg-icon icon-class="Go-start" :style="{color:colorObj.type==='white'||colorObj.type==='darkGreen'?'#000':'#fff'}"></svg-icon>
 | 
	
		
			
				|  |  | +                        <span :style="{color:colorObj.type==='armyGreen'?'#7C8983':''}">下一句</span>
 | 
	
		
			
				|  |  | +                    </div>
 | 
	
		
			
				|  |  | +                </div>
 | 
	
		
			
				|  |  | +            </div>
 | 
	
		
			
				|  |  | +        </div>
 | 
	
		
			
				|  |  | +      </div>
 | 
	
		
			
				|  |  | +    </template>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <!-- <img src="../../../assets/article-img.png" style="max-width:100%;margin:24px 0;" /> -->
 | 
	
		
			
				|  |  | +    <div class="clear-box">
 | 
	
		
			
				|  |  | +        <h5>词汇标记设置</h5>
 | 
	
		
			
				|  |  | +        <div class="item">
 | 
	
		
			
				|  |  | +            <span>跟读</span>
 | 
	
		
			
				|  |  | +            <el-switch
 | 
	
		
			
				|  |  | +                v-model="repeatAfter"
 | 
	
		
			
				|  |  | +                active-color="#175DFF"
 | 
	
		
			
				|  |  | +                inactive-color="#D0D3D9"
 | 
	
		
			
				|  |  | +                key="sent-repeatAfter">
 | 
	
		
			
				|  |  | +            </el-switch>
 | 
	
		
			
				|  |  | +        </div>
 | 
	
		
			
				|  |  | +        <div class="item">
 | 
	
		
			
				|  |  | +            <span>单句模式</span>
 | 
	
		
			
				|  |  | +            <el-switch
 | 
	
		
			
				|  |  | +                v-model="singleModel"
 | 
	
		
			
				|  |  | +                active-color="#175DFF"
 | 
	
		
			
				|  |  | +                inactive-color="#D0D3D9"
 | 
	
		
			
				|  |  | +                key="sent-singleModel"
 | 
	
		
			
				|  |  | +                @change="mutualExclusive('singleModel','autoNextSent')">
 | 
	
		
			
				|  |  | +            </el-switch>
 | 
	
		
			
				|  |  | +        </div>
 | 
	
		
			
				|  |  | +        <div class="item">
 | 
	
		
			
				|  |  | +            <span>自动下一句</span>
 | 
	
		
			
				|  |  | +            <el-switch
 | 
	
		
			
				|  |  | +                v-model="autoNextSent"
 | 
	
		
			
				|  |  | +                active-color="#175DFF"
 | 
	
		
			
				|  |  | +                inactive-color="#D0D3D9"
 | 
	
		
			
				|  |  | +                key="sent-autoNextSent"
 | 
	
		
			
				|  |  | +                @change="mutualExclusive('autoNextSent','singleModel')">
 | 
	
		
			
				|  |  | +            </el-switch>
 | 
	
		
			
				|  |  | +        </div>
 | 
	
		
			
				|  |  | +    </div>
 | 
	
		
			
				|  |  | +  </div>
 | 
	
		
			
				|  |  | +</template>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<script>
 | 
	
		
			
				|  |  | +import AudioLine from "@/components/common/AudioLine.vue"
 | 
	
		
			
				|  |  | +export default {
 | 
	
		
			
				|  |  | +  name: "ArticleView",
 | 
	
		
			
				|  |  | +  props: [ "titleFontsize", "wordFontsize", "colorObj","articleType","articleInfo"],
 | 
	
		
			
				|  |  | +  components: {
 | 
	
		
			
				|  |  | +    AudioLine,
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  | +  data() {
 | 
	
		
			
				|  |  | +    return {
 | 
	
		
			
				|  |  | +      resArr: [],
 | 
	
		
			
				|  |  | +      curTime: 0, //单位s
 | 
	
		
			
				|  |  | +      enFhList: [
 | 
	
		
			
				|  |  | +        ",",
 | 
	
		
			
				|  |  | +        ".",
 | 
	
		
			
				|  |  | +        ";",
 | 
	
		
			
				|  |  | +        "?",
 | 
	
		
			
				|  |  | +        "!",
 | 
	
		
			
				|  |  | +        ":",
 | 
	
		
			
				|  |  | +        ">",
 | 
	
		
			
				|  |  | +        "<",
 | 
	
		
			
				|  |  | +        "'",
 | 
	
		
			
				|  |  | +        "’",
 | 
	
		
			
				|  |  | +        "n't",
 | 
	
		
			
				|  |  | +        "n’t",
 | 
	
		
			
				|  |  | +        "n’ts",
 | 
	
		
			
				|  |  | +        "n‘t",
 | 
	
		
			
				|  |  | +        "'t",
 | 
	
		
			
				|  |  | +        "’t",
 | 
	
		
			
				|  |  | +        "‘t",
 | 
	
		
			
				|  |  | +        "'s",
 | 
	
		
			
				|  |  | +        "’s",
 | 
	
		
			
				|  |  | +        "‘s",
 | 
	
		
			
				|  |  | +        "'m",
 | 
	
		
			
				|  |  | +        "’m",
 | 
	
		
			
				|  |  | +        "‘m",
 | 
	
		
			
				|  |  | +        "'re",
 | 
	
		
			
				|  |  | +        "’re",
 | 
	
		
			
				|  |  | +        "‘re",
 | 
	
		
			
				|  |  | +        "'d",
 | 
	
		
			
				|  |  | +        "’d",
 | 
	
		
			
				|  |  | +        "‘d",
 | 
	
		
			
				|  |  | +        "'ve",
 | 
	
		
			
				|  |  | +        "’ve",
 | 
	
		
			
				|  |  | +        "‘ve",
 | 
	
		
			
				|  |  | +        ")",
 | 
	
		
			
				|  |  | +        "'ll",
 | 
	
		
			
				|  |  | +        "’ll",
 | 
	
		
			
				|  |  | +        "‘ll",
 | 
	
		
			
				|  |  | +        "”",
 | 
	
		
			
				|  |  | +      ],
 | 
	
		
			
				|  |  | +      articleImg: {}, // 文章图片
 | 
	
		
			
				|  |  | +      paraIndex: -1, //段落索引
 | 
	
		
			
				|  |  | +      sentIndex: -1, // 句子索引
 | 
	
		
			
				|  |  | +      repeatAfter: false,
 | 
	
		
			
				|  |  | +      singleModel: false,
 | 
	
		
			
				|  |  | +      autoNextSent: false,
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  | +  computed: {
 | 
	
		
			
				|  |  | +    isPlaying: function () {
 | 
	
		
			
				|  |  | +      let playing = false;
 | 
	
		
			
				|  |  | +      if (this.$refs.audioLine) {
 | 
	
		
			
				|  |  | +        playing = this.$refs.audioLine.audio.isPlaying;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      return playing;
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  | +  watch: {},
 | 
	
		
			
				|  |  | +  //方法集合
 | 
	
		
			
				|  |  | +  methods: {
 | 
	
		
			
				|  |  | +    getCurTime(curTime) {
 | 
	
		
			
				|  |  | +      this.curTime = curTime * 1000;
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    handleData() {
 | 
	
		
			
				|  |  | +      let resArr = {
 | 
	
		
			
				|  |  | +            wordsList: [],
 | 
	
		
			
				|  |  | +            timeList: [],
 | 
	
		
			
				|  |  | +        };
 | 
	
		
			
				|  |  | +      let articleInfo = JSON.parse(JSON.stringify(this.articleInfo));
 | 
	
		
			
				|  |  | +      articleInfo.art_corpus_data.sentList.forEach((item,index) => {
 | 
	
		
			
				|  |  | +        let wordlist = []
 | 
	
		
			
				|  |  | +        item.tokens.forEach((items,indexs)=>{
 | 
	
		
			
				|  |  | +            let obj = {
 | 
	
		
			
				|  |  | +                sent_id:item.id,
 | 
	
		
			
				|  |  | +                sno: item.sno-1,
 | 
	
		
			
				|  |  | +                pno: item.pno,
 | 
	
		
			
				|  |  | +                text: item.text,
 | 
	
		
			
				|  |  | +                tokens: items,
 | 
	
		
			
				|  |  | +                wIndex: indexs,
 | 
	
		
			
				|  |  | +                isShow: this.enFhList.indexOf(items[2])==-1,
 | 
	
		
			
				|  |  | +                marginRight: indexs===item.tokens.length-1
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            wordlist.push(obj)
 | 
	
		
			
				|  |  | +        })
 | 
	
		
			
				|  |  | +        resArr.wordsList.push(wordlist)
 | 
	
		
			
				|  |  | +        resArr.timeList.push(articleInfo.art_sound_srt_data.sents[index])
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +      this.resArr = resArr;
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    handleChangeTime(time) {
 | 
	
		
			
				|  |  | +      if (time>=0) {
 | 
	
		
			
				|  |  | +        this.curTime = time;
 | 
	
		
			
				|  |  | +        this.$refs.audioLine.onTimeupdateTime(time / 1000, true);
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    //经过每个词,高亮句子
 | 
	
		
			
				|  |  | +    handleMouseover(pItem) {
 | 
	
		
			
				|  |  | +      this.paraIndex = pItem.pno;
 | 
	
		
			
				|  |  | +      this.sentIndex = pItem.sno;
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    handleMouseleave() {
 | 
	
		
			
				|  |  | +      this.paraIndex = -1;
 | 
	
		
			
				|  |  | +      this.sentIndex = -1;
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    mutualExclusive(val,val1){
 | 
	
		
			
				|  |  | +        if(this[val]){
 | 
	
		
			
				|  |  | +            this[val1] = false
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  | +  //生命周期 - 创建完成(可以访问当前this实例)
 | 
	
		
			
				|  |  | +  created() {},
 | 
	
		
			
				|  |  | +  //生命周期 - 挂载完成(可以访问DOM元素)
 | 
	
		
			
				|  |  | +  mounted() {
 | 
	
		
			
				|  |  | +    if (this.articleInfo) {
 | 
	
		
			
				|  |  | +      this.handleData();
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  | +  beforeCreate() {}, //生命周期 - 创建之前
 | 
	
		
			
				|  |  | +  beforeMount() {}, //生命周期 - 挂载之前
 | 
	
		
			
				|  |  | +  beforeUpdate() {}, //生命周期 - 更新之前
 | 
	
		
			
				|  |  | +  updated() {}, //生命周期 - 更新之后
 | 
	
		
			
				|  |  | +  beforeDestroy() {}, //生命周期 - 销毁之前
 | 
	
		
			
				|  |  | +  destroyed() {}, //生命周期 - 销毁完成
 | 
	
		
			
				|  |  | +  activated() {}, //如果页面有keep-alive缓存功能,这个函数会触发
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +</script>
 | 
	
		
			
				|  |  | +<style lang='scss' scoped>
 | 
	
		
			
				|  |  | +//@import url(); 引入公共css类
 | 
	
		
			
				|  |  | +.NNPE-ArticleView {
 | 
	
		
			
				|  |  | +  width: 100%;
 | 
	
		
			
				|  |  | +  .nnpe-article-author{
 | 
	
		
			
				|  |  | +      margin: 24px 0;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  h2{
 | 
	
		
			
				|  |  | +    display: flex;
 | 
	
		
			
				|  |  | +    flex-flow: wrap;
 | 
	
		
			
				|  |  | +    &.sentActive {
 | 
	
		
			
				|  |  | +        background: rgba(24, 144, 255, 0.1);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    &.overActive {
 | 
	
		
			
				|  |  | +        background: rgba(0, 0, 0, 0.06);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    .wordActive {
 | 
	
		
			
				|  |  | +        color: #175DFF;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  .table-box {
 | 
	
		
			
				|  |  | +    padding-top: 20px;
 | 
	
		
			
				|  |  | +    padding-bottom: 64px;
 | 
	
		
			
				|  |  | +    // background: #f7f7f7;
 | 
	
		
			
				|  |  | +    // border-top: 1px solid rgba(0, 0, 0, 0.1);
 | 
	
		
			
				|  |  | +    :last-child {
 | 
	
		
			
				|  |  | +      :last-child.wordsList-box {
 | 
	
		
			
				|  |  | +        padding-bottom: 40px;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    .wordsList-box {
 | 
	
		
			
				|  |  | +      flex: 1;
 | 
	
		
			
				|  |  | +      padding: 20px 0;
 | 
	
		
			
				|  |  | +      .nnpe-sentence-box {
 | 
	
		
			
				|  |  | +        display: flex;
 | 
	
		
			
				|  |  | +        flex-flow: wrap;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      > img {
 | 
	
		
			
				|  |  | +        max-width: 50%;
 | 
	
		
			
				|  |  | +        display: block;
 | 
	
		
			
				|  |  | +        padding: 16px 0;
 | 
	
		
			
				|  |  | +        margin: 0 auto;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  .NNPE-detail {
 | 
	
		
			
				|  |  | +    clear: both;
 | 
	
		
			
				|  |  | +    overflow: hidden;
 | 
	
		
			
				|  |  | +    display: flex;
 | 
	
		
			
				|  |  | +    .para-index{
 | 
	
		
			
				|  |  | +        color:#D0D3D9;
 | 
	
		
			
				|  |  | +        font-size: 18px;
 | 
	
		
			
				|  |  | +        font-weight: 700;
 | 
	
		
			
				|  |  | +        line-height: 26px;
 | 
	
		
			
				|  |  | +        padding-top: 20px;
 | 
	
		
			
				|  |  | +        width: 40px;
 | 
	
		
			
				|  |  | +        flex-shrink: 0;
 | 
	
		
			
				|  |  | +        &-active{
 | 
	
		
			
				|  |  | +            color: #2F3742;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    .NNPE-words {
 | 
	
		
			
				|  |  | +      float: left;
 | 
	
		
			
				|  |  | +      padding: 0;
 | 
	
		
			
				|  |  | +      &.noPadding{
 | 
	
		
			
				|  |  | +          padding:0;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      &.sentActive {
 | 
	
		
			
				|  |  | +        background: rgba(24, 144, 255, 0.1);
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      &.overActive {
 | 
	
		
			
				|  |  | +        background: rgba(0, 0, 0, 0.06);
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      &.textLeft {
 | 
	
		
			
				|  |  | +        text-align: left;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      &.textCenter {
 | 
	
		
			
				|  |  | +        text-align: center;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      > span {
 | 
	
		
			
				|  |  | +        float: left;
 | 
	
		
			
				|  |  | +        cursor: pointer;
 | 
	
		
			
				|  |  | +        &.NNPE-chs {
 | 
	
		
			
				|  |  | +          //   font-size: 24px;
 | 
	
		
			
				|  |  | +          font-family: 'Smartisan';
 | 
	
		
			
				|  |  | +          line-height: 150%;
 | 
	
		
			
				|  |  | +          color: #000000;
 | 
	
		
			
				|  |  | +          &.wordActive {
 | 
	
		
			
				|  |  | +            color: #175DFF;
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +          &.marginRight{
 | 
	
		
			
				|  |  | +            padding: 0 3px;
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +          &.marginSingleRight{
 | 
	
		
			
				|  |  | +            padding: 0 3px 0 0;
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        &.padding {
 | 
	
		
			
				|  |  | +          padding: 0 3px;
 | 
	
		
			
				|  |  | +          cursor: pointer;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  .operate-box{
 | 
	
		
			
				|  |  | +    position: fixed;
 | 
	
		
			
				|  |  | +    border-top: 1px solid #EBEBEB;
 | 
	
		
			
				|  |  | +    height: 192px;
 | 
	
		
			
				|  |  | +    width: 1000px;
 | 
	
		
			
				|  |  | +    background: #F2F3F5;
 | 
	
		
			
				|  |  | +    left: 50%;
 | 
	
		
			
				|  |  | +    bottom: 0;
 | 
	
		
			
				|  |  | +    margin-left: -500px;
 | 
	
		
			
				|  |  | +    padding-bottom: 24px;
 | 
	
		
			
				|  |  | +    &-inner{
 | 
	
		
			
				|  |  | +        padding-top: 40px;
 | 
	
		
			
				|  |  | +        height: 144px;
 | 
	
		
			
				|  |  | +        &-content{
 | 
	
		
			
				|  |  | +            width: 680px;
 | 
	
		
			
				|  |  | +            margin: 0 auto;
 | 
	
		
			
				|  |  | +            display: flex;
 | 
	
		
			
				|  |  | +            justify-content: space-between;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        .operate-item{
 | 
	
		
			
				|  |  | +            text-align: center;
 | 
	
		
			
				|  |  | +            cursor: pointer;
 | 
	
		
			
				|  |  | +            .luyin-btn{
 | 
	
		
			
				|  |  | +                display: block;
 | 
	
		
			
				|  |  | +                width: 64px;
 | 
	
		
			
				|  |  | +                height: 64px;
 | 
	
		
			
				|  |  | +                padding: 16px;
 | 
	
		
			
				|  |  | +                border-radius: 60px;
 | 
	
		
			
				|  |  | +                background: #F2555A;
 | 
	
		
			
				|  |  | +                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);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            .svg-icon{
 | 
	
		
			
				|  |  | +                display: block;
 | 
	
		
			
				|  |  | +                width: 32px;
 | 
	
		
			
				|  |  | +                height: 32px;
 | 
	
		
			
				|  |  | +                margin: 0 auto;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            span{
 | 
	
		
			
				|  |  | +                color: #929CA8;
 | 
	
		
			
				|  |  | +                font-size: 12px;
 | 
	
		
			
				|  |  | +                font-weight: 400;
 | 
	
		
			
				|  |  | +                line-height: 20px;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  .table-box-white{
 | 
	
		
			
				|  |  | +    .wordActive {
 | 
	
		
			
				|  |  | +        color: #3459D2 !important;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    .sentActive {
 | 
	
		
			
				|  |  | +        background: #D9E2FC !important;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  .table-box-darkGreen{
 | 
	
		
			
				|  |  | +    .wordActive {
 | 
	
		
			
				|  |  | +        color: #299772 !important;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    .sentActive {
 | 
	
		
			
				|  |  | +        background: #ECEFED !important;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  .table-box-darkBlue{
 | 
	
		
			
				|  |  | +    .wordActive {
 | 
	
		
			
				|  |  | +        color: #5373E7 !important;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    .sentActive {
 | 
	
		
			
				|  |  | +        background:#1C2129 !important;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  .table-box-armyGreen{
 | 
	
		
			
				|  |  | +    .wordActive {
 | 
	
		
			
				|  |  | +        color: #30A47D !important;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    .sentActive {
 | 
	
		
			
				|  |  | +        background: #2A2F2C !important;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +.audio-box{
 | 
	
		
			
				|  |  | +    display: flex;
 | 
	
		
			
				|  |  | +    align-items: center;
 | 
	
		
			
				|  |  | +    justify-content: space-between;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +.aduioLine-box{
 | 
	
		
			
				|  |  | +    width: 516px;
 | 
	
		
			
				|  |  | +    height: 48px;
 | 
	
		
			
				|  |  | +    background: #FFFFFF;
 | 
	
		
			
				|  |  | +    border: 1px solid #EBEBEB;
 | 
	
		
			
				|  |  | +    border-radius: 30px;
 | 
	
		
			
				|  |  | +    display: flex;
 | 
	
		
			
				|  |  | +    align-items: center;
 | 
	
		
			
				|  |  | +    padding: 8px 24px;
 | 
	
		
			
				|  |  | +    .wrapper{
 | 
	
		
			
				|  |  | +        width: 24px;
 | 
	
		
			
				|  |  | +        height: 24px;
 | 
	
		
			
				|  |  | +        flex-shrink: 0;
 | 
	
		
			
				|  |  | +        color: #175DFF;
 | 
	
		
			
				|  |  | +        margin-left: 8px;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    .Audio{
 | 
	
		
			
				|  |  | +        width: 430px;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +.clear-box{
 | 
	
		
			
				|  |  | +    right: calc((100% - 1000px)/2);
 | 
	
		
			
				|  |  | +    position: fixed;
 | 
	
		
			
				|  |  | +    top: 150px;
 | 
	
		
			
				|  |  | +    width: 270px;
 | 
	
		
			
				|  |  | +    overflow: auto;
 | 
	
		
			
				|  |  | +    width: 176px;
 | 
	
		
			
				|  |  | +    padding: 8px;
 | 
	
		
			
				|  |  | +    border-radius: 8px;
 | 
	
		
			
				|  |  | +    border: 1px solid #EBEBEB;
 | 
	
		
			
				|  |  | +    background: #FFF;
 | 
	
		
			
				|  |  | +    box-shadow: 0px 5px 5px -3px rgba(0, 0, 0, 0.10), 0px 4px 6px 1px rgba(0, 0, 0, 0.06), 0px 3px 6px 2px rgba(0, 0, 0, 0.05);
 | 
	
		
			
				|  |  | +    margin-top: 24px;
 | 
	
		
			
				|  |  | +    h5{
 | 
	
		
			
				|  |  | +        margin: 0;
 | 
	
		
			
				|  |  | +        color: rgba(0, 0, 0, 0.40);
 | 
	
		
			
				|  |  | +        font-size: 14px;
 | 
	
		
			
				|  |  | +        font-weight: 400;
 | 
	
		
			
				|  |  | +        line-height: 22px;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    .item{
 | 
	
		
			
				|  |  | +        display: flex;
 | 
	
		
			
				|  |  | +        align-items: center;
 | 
	
		
			
				|  |  | +        justify-content: space-between;
 | 
	
		
			
				|  |  | +        margin-top: 4px;
 | 
	
		
			
				|  |  | +        border-radius: 4px;
 | 
	
		
			
				|  |  | +        background:#F2F3F5;
 | 
	
		
			
				|  |  | +        padding: 4px 8px;
 | 
	
		
			
				|  |  | +        color: #2F3742;
 | 
	
		
			
				|  |  | +        font-size: 14px;
 | 
	
		
			
				|  |  | +        font-weight: 400;
 | 
	
		
			
				|  |  | +        line-height: 22px; 
 | 
	
		
			
				|  |  | +        cursor: pointer;
 | 
	
		
			
				|  |  | +        &.red-item{
 | 
	
		
			
				|  |  | +            color: #F53F3F;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +</style>
 |