|
@@ -15,10 +15,6 @@
|
|
|
</div>
|
|
|
<template v-if="resArr.length > 0">
|
|
|
<div class="NPC-sentences-list">
|
|
|
- <div class="NPC-article-empty">
|
|
|
- <div :class="['empty-left', isHasRemark ? 'hasRemark' : '']"></div>
|
|
|
- <div class="empty-right"></div>
|
|
|
- </div>
|
|
|
<p class="notice" v-if="curQue.notice">{{ curQue.notice }}</p>
|
|
|
<div
|
|
|
:class="[
|
|
@@ -194,9 +190,68 @@
|
|
|
<RemarkChs :remarkDetail="item.remarkDetail" />
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div class="NPC-article-empty NPC-article-empty-bottom">
|
|
|
- <div :class="['empty-left', isHasRemark ? 'hasRemark' : '']"></div>
|
|
|
- <div class="empty-right"></div>
|
|
|
+ <!-- <div class="dia-article-record">
|
|
|
+ <Soundrecord @handleWav="handleWav" type="promax" class="luyin-box" />
|
|
|
+ </div> -->
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ <template v-if="paraArr.length > 0">
|
|
|
+ <div class="NPC-sentences-list">
|
|
|
+ <p class="notice" v-if="curQue.notice">{{ curQue.notice }}</p>
|
|
|
+ <div
|
|
|
+ :class="['NNPE-detail', item.isTitle ? 'NNPE-detail-title' : '']"
|
|
|
+ v-for="(item, index) in paraArr"
|
|
|
+ :key="'detail' + index"
|
|
|
+ >
|
|
|
+ <div :class="['article-content', isHasRemark ? 'hasRemark' : '']">
|
|
|
+ <RoleChs :curRole="item.roleDetail" :type="1" />
|
|
|
+ <div class="wordsList-box">
|
|
|
+ <div
|
|
|
+ class="roleDetail"
|
|
|
+ v-if="item.roleDetail.detail.wordsList.length > 0"
|
|
|
+ >
|
|
|
+ <span class="pinyin">{{
|
|
|
+ item.roleDetail.detail.wordsList | handlePinyin
|
|
|
+ }}</span>
|
|
|
+ <span class="chs">{{
|
|
|
+ item.roleDetail.detail.wordsList | handleChs
|
|
|
+ }}</span>
|
|
|
+ </div>
|
|
|
+ <div
|
|
|
+ class="para-con"
|
|
|
+ :style="{ background: item.roleDetail.color.bg }"
|
|
|
+ >
|
|
|
+ <div
|
|
|
+ class="NNPE-words"
|
|
|
+ v-for="(pItem, pIndex) in item.wordsList"
|
|
|
+ :key="'wordsList' + pIndex"
|
|
|
+ >
|
|
|
+ <template v-if="!pItem.isHeng">
|
|
|
+ <span class="NNPE-para-pinyin padding">{{
|
|
|
+ pItem.con
|
|
|
+ }}</span>
|
|
|
+ </template>
|
|
|
+ <template v-else>
|
|
|
+ <input v-model="pItem.answer" class="answer-input" />
|
|
|
+ </template>
|
|
|
+ </div>
|
|
|
+ <div v-if="item.enwords" class="enwords">
|
|
|
+ {{ item.enwords }}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="clearFix"></div>
|
|
|
+ <div class="input-record" v-if="item.isRecord">
|
|
|
+ <Soundrecord
|
|
|
+ @handleWav="handleWav"
|
|
|
+ type="mini"
|
|
|
+ class="mini-box"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="remarkBox remark-top" v-if="item.remarkDetail">
|
|
|
+ <RemarkChs :remarkDetail="item.remarkDetail" />
|
|
|
+ </div>
|
|
|
</div>
|
|
|
<!-- <div class="dia-article-record">
|
|
|
<Soundrecord @handleWav="handleWav" type="promax" class="luyin-box" />
|
|
@@ -258,6 +313,8 @@ export default {
|
|
|
left: 0,
|
|
|
articleImg: {}, // 文章图片
|
|
|
isHasRemark: false,
|
|
|
+ paraArr: [],
|
|
|
+ answer: [],
|
|
|
};
|
|
|
},
|
|
|
computed: {},
|
|
@@ -281,49 +338,51 @@ export default {
|
|
|
this.isHasRemark = true;
|
|
|
}
|
|
|
let paraArr = [];
|
|
|
- dItem.wordsList.forEach((sItem, sIndex) => {
|
|
|
- sItem.forEach((wItem, wIndex) => {
|
|
|
- this.mergeWordSymbol(wItem);
|
|
|
- let obj = {
|
|
|
- paraIndex: dIndex, //段落索引
|
|
|
- sentIndex: sIndex, //在段落中句子索引
|
|
|
- answer: "",
|
|
|
- wordIndex: wIndex, //单词的索引
|
|
|
- pinyin: wItem.pinyin,
|
|
|
- chs: wItem.chs,
|
|
|
- isHeng: reg.test(wItem.chs),
|
|
|
- padding: true, //wItem.padding,
|
|
|
- className: wItem.className,
|
|
|
- isShow: wItem.isShow,
|
|
|
- isNewWord: this.newWords.indexOf(wItem.chs) > -1 ? true : false,
|
|
|
- };
|
|
|
- paraArr.push(obj);
|
|
|
- if (obj.isHeng) {
|
|
|
- isRecord = isRecord + 1;
|
|
|
- }
|
|
|
+ if (dItem.wordsList && dItem.wordsList.length > 0) {
|
|
|
+ dItem.wordsList.forEach((sItem, sIndex) => {
|
|
|
+ sItem.forEach((wItem, wIndex) => {
|
|
|
+ this.mergeWordSymbol(wItem);
|
|
|
+ let obj = {
|
|
|
+ paraIndex: dIndex, //段落索引
|
|
|
+ sentIndex: sIndex, //在段落中句子索引
|
|
|
+ wordIndex: wIndex, //单词的索引
|
|
|
+ pinyin: wItem.pinyin,
|
|
|
+ chs: wItem.chs,
|
|
|
+ isHeng: reg.test(wItem.chs),
|
|
|
+ padding: true, //wItem.padding,
|
|
|
+ className: wItem.className,
|
|
|
+ isShow: wItem.isShow,
|
|
|
+ isNewWord: this.newWords.indexOf(wItem.chs) > -1 ? true : false,
|
|
|
+ };
|
|
|
+ if (obj.isHeng) {
|
|
|
+ isRecord = isRecord + 1;
|
|
|
+ obj.answer = "";
|
|
|
+ }
|
|
|
+ paraArr.push(obj);
|
|
|
+ });
|
|
|
});
|
|
|
- });
|
|
|
- let curSentencesLeg = dItem.sentences.length;
|
|
|
- let startLeg = dIndex == 0 ? 0 : curQue.detail[dIndex - 1].endLeg;
|
|
|
- let endLeg = startLeg + curSentencesLeg;
|
|
|
- dItem.endLeg = endLeg;
|
|
|
- let timeList = [];
|
|
|
- if (curQue.wordTime && curQue.wordTime.length > 0) {
|
|
|
- timeList = curQue.wordTime.slice(startLeg, endLeg);
|
|
|
+ let curSentencesLeg = dItem.sentences.length;
|
|
|
+ let startLeg = dIndex == 0 ? 0 : curQue.detail[dIndex - 1].endLeg;
|
|
|
+ let endLeg = startLeg + curSentencesLeg;
|
|
|
+ dItem.endLeg = endLeg;
|
|
|
+ let timeList = [];
|
|
|
+ if (curQue.wordTime && curQue.wordTime.length > 0) {
|
|
|
+ timeList = curQue.wordTime.slice(startLeg, endLeg);
|
|
|
+ }
|
|
|
+ let enwords =
|
|
|
+ dItem.sentencesEn && dItem.sentencesEn.length > 0
|
|
|
+ ? dItem.sentencesEn.join(" ")
|
|
|
+ : "";
|
|
|
+ let paraObj = {
|
|
|
+ wordsList: paraArr,
|
|
|
+ enwords: enwords,
|
|
|
+ timeList: timeList,
|
|
|
+ roleDetail: roleDetail,
|
|
|
+ remarkDetail: remarkDetail,
|
|
|
+ isRecord: isRecord > 0 ? true : false,
|
|
|
+ };
|
|
|
+ resArr.push(paraObj);
|
|
|
}
|
|
|
- let enwords =
|
|
|
- dItem.sentencesEn && dItem.sentencesEn.length > 0
|
|
|
- ? dItem.sentencesEn.join(" ")
|
|
|
- : "";
|
|
|
- let paraObj = {
|
|
|
- wordsList: paraArr,
|
|
|
- enwords: enwords,
|
|
|
- timeList: timeList,
|
|
|
- roleDetail: roleDetail,
|
|
|
- remarkDetail: remarkDetail,
|
|
|
- isRecord: isRecord > 0 ? true : false,
|
|
|
- };
|
|
|
- resArr.push(paraObj);
|
|
|
});
|
|
|
this.resArr = resArr;
|
|
|
console.log("Normal");
|
|
@@ -336,6 +395,29 @@ export default {
|
|
|
});
|
|
|
}
|
|
|
},
|
|
|
+ handlePYData() {
|
|
|
+ let pararArr = [];
|
|
|
+ let curQue = JSON.parse(JSON.stringify(this.curQue));
|
|
|
+ curQue.detail.forEach((dItem, dIndex) => {
|
|
|
+ let para = dItem.para;
|
|
|
+ let paraObj = this.handlePara(para);
|
|
|
+ let roleDetail = this.getRole(dItem);
|
|
|
+ let remarkDetail = dItem.remark;
|
|
|
+ if (remarkDetail && (remarkDetail.chs || remarkDetail.en)) {
|
|
|
+ this.isHasRemark = true;
|
|
|
+ }
|
|
|
+ let obj = {
|
|
|
+ wordsList: paraObj.wordsList,
|
|
|
+ roleDetail: roleDetail,
|
|
|
+ remarkDetail: remarkDetail,
|
|
|
+ isRecord: paraObj.isRecord,
|
|
|
+ };
|
|
|
+ pararArr.push(obj);
|
|
|
+ });
|
|
|
+ this.paraArr = pararArr;
|
|
|
+ console.log("======paraArr======");
|
|
|
+ console.log(this.paraArr);
|
|
|
+ },
|
|
|
//词和标点合一起
|
|
|
mergeWordSymbol(wItem) {
|
|
|
if (this.chsFhList.indexOf(wItem.chs) > -1) {
|
|
@@ -393,14 +475,38 @@ export default {
|
|
|
this.curTime = time;
|
|
|
this.$refs.audioLine.onTimeupdateTime(time / 1000);
|
|
|
},
|
|
|
+ //处理数组
|
|
|
+ handlePara(para) {
|
|
|
+ para = para.trim();
|
|
|
+ para = para.replace(/\s+/g, " ");
|
|
|
+ para = para.replace(/_{2,}/g, "^ ");
|
|
|
+ let paraArr = para.split(/\s/g);
|
|
|
+ let resArr = [];
|
|
|
+ paraArr.forEach((item, index) => {
|
|
|
+ let obj = {
|
|
|
+ isHeng: false,
|
|
|
+ con: item,
|
|
|
+ };
|
|
|
+ if (item == "^") {
|
|
|
+ obj.isHeng = true;
|
|
|
+ obj.answer = "";
|
|
|
+ }
|
|
|
+ resArr.push(obj);
|
|
|
+ });
|
|
|
+ let isRecord = /^/g.test(para);
|
|
|
+ return { wordsList: resArr, isRecord: isRecord };
|
|
|
+ },
|
|
|
},
|
|
|
//生命周期 - 创建完成(可以访问当前this实例)
|
|
|
created() {},
|
|
|
//生命周期 - 挂载完成(可以访问DOM元素)
|
|
|
mounted() {
|
|
|
-
|
|
|
if (this.curQue) {
|
|
|
- this.handleData();
|
|
|
+ if (this.curQue.font == "cn" || !this.curQue.font) {
|
|
|
+ this.handleData();
|
|
|
+ } else {
|
|
|
+ this.handlePYData();
|
|
|
+ }
|
|
|
}
|
|
|
},
|
|
|
beforeCreate() {}, //生命周期 - 创建之前
|
|
@@ -613,7 +719,6 @@ export default {
|
|
|
line-height: 22px;
|
|
|
color: rgba(0, 0, 0, 0.85);
|
|
|
margin-right: 4px;
|
|
|
- margin-left: 8px;
|
|
|
}
|
|
|
.chs {
|
|
|
font-family: "FZJCGFKTK";
|
|
@@ -656,5 +761,12 @@ export default {
|
|
|
padding-top: 44px;
|
|
|
}
|
|
|
}
|
|
|
+ .NNPE-para-pinyin {
|
|
|
+ font-weight: normal;
|
|
|
+ font-size: 20px;
|
|
|
+ line-height: 28px;
|
|
|
+ color: #000000;
|
|
|
+ height: 28px;
|
|
|
+ }
|
|
|
}
|
|
|
</style>
|