Browse Source

Merge branch 'master' of http://gcls-git.helxsoft.cn/GCLS/eep_page

zq 4 days ago
parent
commit
5646d8a4ad

+ 17 - 2
src/components/CommonPreview.vue

@@ -11,6 +11,8 @@
         <div class="group">
           <el-checkbox v-model="isShowGroup">显示分组</el-checkbox>
           <el-checkbox v-model="groupShowAll">分组显示全部</el-checkbox>
+          <el-checkbox v-model="isJudgeCorrect">判断对错</el-checkbox>
+          <el-checkbox v-model="isShowAnswer" :disabled="!isJudgeCorrect">显示答案</el-checkbox>
         </div>
         <span class="link">
           <el-select v-model="lang" placeholder="请选择语言" size="mini" class="lang-select">
@@ -285,6 +287,8 @@ export default {
       langList: [],
       lang: 'ZH',
       chinese: 'zh-Hans',
+      isJudgeCorrect: false,
+      isShowAnswer: false,
     };
   },
   computed: {
@@ -295,6 +299,17 @@ export default {
       return this.file_list.length >= this.total_count && this.total_count > 0;
     },
   },
+  watch: {
+    isJudgeCorrect(newVal) {
+      if (!newVal) {
+        this.isShowAnswer = false;
+      }
+      this.simulateAnswer(newVal);
+    },
+    isShowAnswer() {
+      this.simulateAnswer();
+    },
+  },
   created() {
     if (this.id) {
       this.getBookCoursewareInfo(this.id);
@@ -582,8 +597,8 @@ export default {
       return text;
     },
 
-    simulateAnswer() {
-      this.$refs.courserware.simulateAnswer();
+    simulateAnswer(disabled = true) {
+      this.$refs.courserware.simulateAnswer(this.isJudgeCorrect, this.isShowAnswer, disabled);
     },
   },
 };

+ 1 - 0
src/views/book/components/MultilingualFill.vue

@@ -262,6 +262,7 @@ export default {
     .content {
       display: flex;
       column-gap: 8px;
+      word-break: break-word;
 
       .original-text {
         width: 100%;

+ 17 - 2
src/views/book/courseware/create/components/question/dialogue_article/Article.vue

@@ -737,10 +737,25 @@ export default {
     },
     handleMultilingual() {
       this.multilingualText = '';
+      let flag = false;
       this.data.detail.forEach((item) => {
-        this.multilingualText += item.para ? '<p>' + item.para + '<p>' : '<p>&nbsp;</p>';
+        // this.multilingualText += item.para ? '<p>' + item.para + '<p>' : '<p>&nbsp;</p>';
+        if (item.para) {
+          if (item.sentences && item.sentences.length > 0) {
+            flag = true;
+          }
+          item.sentences.forEach((items) => {
+            this.multilingualText += '<p>' + items + '<p>';
+          });
+        } else {
+          this.multilingualText += '<p>&nbsp;</p>';
+        }
       });
-      this.multilingualVisible = true;
+      if (flag) {
+        this.multilingualVisible = true;
+      } else {
+        this.$message.warning('请先生成分词');
+      }
     },
   },
 };

+ 5 - 1
src/views/book/courseware/create/components/question/fill/Fill.vue

@@ -128,7 +128,11 @@ export default {
     },
     'data.property': {
       handler({ view_pinyin }) {
-        if (!this.isEnable(view_pinyin)) return;
+        if (!this.isEnable(view_pinyin)) {
+          this.data.paragraph_list = [];
+          return;
+        }
+        if (this.data.paragraph_list.length > 0) return;
         this.data.model_essay.forEach((item, i) => {
           item.forEach((option, j) => {
             const text = option.content.replace(/<[^>]+>/g, '');

+ 5 - 1
src/views/book/courseware/create/components/question/judge/Judge.vue

@@ -80,7 +80,11 @@ export default {
     'data.option_list': 'handleMindMap',
     'data.property': {
       handler({ view_pinyin }) {
-        if (!isEnable(view_pinyin)) return;
+        if (!this.isEnable(view_pinyin)) {
+          this.data.paragraph_list = [];
+          return;
+        }
+        if (this.data.paragraph_list.length > 0) return;
         this.data.option_list.forEach((item, i) => {
           const text = item.content.replace(/<[^>]+>/g, '');
           if (!text) return;

+ 5 - 1
src/views/book/courseware/create/components/question/matching/Matching.vue

@@ -156,7 +156,11 @@ export default {
     ],
     'data.property': {
       handler({ view_pinyin }) {
-        if (!this.isEnable(view_pinyin)) return;
+        if (!this.isEnable(view_pinyin)) {
+          this.data.paragraph_list = [];
+          return;
+        }
+        if (this.data.paragraph_list.length > 0) return;
         this.data.option_list.forEach((item, i) => {
           item.forEach((option, j) => {
             const text = option.content.replace(/<[^>]+>/g, '');

+ 5 - 1
src/views/book/courseware/create/components/question/select/Select.vue

@@ -68,7 +68,11 @@ export default {
     'data.answer.answer_list': 'handlerMindMap',
     'data.property': {
       handler({ view_pinyin }) {
-        if (!this.isEnable(view_pinyin)) return;
+        if (!this.isEnable(view_pinyin)) {
+          this.data.paragraph_list = [];
+          return;
+        }
+        if (this.data.paragraph_list.length > 0) return;
         this.data.option_list.forEach((item, i) => {
           const text = item.content.replace(/<[^>]+>/g, '');
           if (!text) return;

+ 5 - 1
src/views/book/courseware/create/components/question/sort/Sort.vue

@@ -104,7 +104,11 @@ export default {
     'data.property.order_type': 'handleMindMap',
     'data.property': {
       handler({ view_pinyin }) {
-        if (!this.isEnable(view_pinyin)) return;
+        if (!this.isEnable(view_pinyin)) {
+          this.data.paragraph_list = [];
+          return;
+        }
+        if (this.data.paragraph_list.length > 0) return;
         this.data.option_list.forEach((item, i) => {
           const text = item.content.replace(/<[^>]+>/g, '');
           if (!text) return;

+ 11 - 2
src/views/book/courseware/create/components/question/table/Table.vue

@@ -206,7 +206,11 @@ export default {
             text += `${items.content.replace(/<[^>]+>/g, '')}\n`;
           });
         });
-        if (isEnable(val) && text) {
+        if (!isEnable(val)) {
+          this.data.paragraph_list = [];
+          return;
+        }
+        if (isEnable(val) && text && this.data.paragraph_list.length <= 0) {
           this.data.paragraph_list_parameter.text = text;
           this.data.paragraph_list_parameter.is_first_sentence_first_hz_pinyin_first_char_upper_case =
             this.data.property.is_first_sentence_first_hz_pinyin_first_char_upper_case;
@@ -216,13 +220,18 @@ export default {
       deep: true,
     },
     'data.property.is_first_sentence_first_hz_pinyin_first_char_upper_case': {
-      handler(val) {
+      handler(val, oldVal) {
+        if (val === oldVal) return;
         let text = '';
         this.data.option_list.forEach((item) => {
           item.forEach((items) => {
             text += `${items.content.replace(/<[^>]+>/g, '')}\n`;
           });
         });
+        if (!isEnable(this.data.property.view_pinyin)) {
+          this.data.paragraph_list = [];
+          return;
+        }
         if (text && isEnable(this.data.property.view_pinyin)) {
           this.data.paragraph_list_parameter.text = text;
           this.data.paragraph_list_parameter.is_first_sentence_first_hz_pinyin_first_char_upper_case = val;

+ 1 - 1
src/views/book/courseware/data/dialogueArticle.js

@@ -96,7 +96,7 @@ export function getArticleProperty() {
     role_img_type: 'word',
     role_list: [getRole(0), getRole(1)],
     
-    multilingual_position: multilingualList[1].value,
+    multilingual_position: multilingualList[0].value,
   };
 }
 

+ 8 - 2
src/views/book/courseware/preview/CoursewarePreview.vue

@@ -367,9 +367,15 @@ export default {
       await this.$nextTick();
       return this.$refs.component.find((child) => child.dataset.id === id);
     },
-    simulateAnswer() {
+    /**
+     * 模拟回答
+     * @param {boolean} isJudgingRightWrong 是否判断对错
+     * @param {boolean} isShowRightAnswer 是否显示正确答案
+     * @param {boolean} disabled 是否禁用
+     */
+    simulateAnswer(isJudgingRightWrong, isShowRightAnswer, disabled = true) {
       this.$refs.preview.forEach((item) => {
-        item.showAnswer(true, true, null, true);
+        item.showAnswer(isJudgingRightWrong, isShowRightAnswer, null, disabled);
       });
     },
   },

+ 62 - 6
src/views/book/courseware/preview/components/dialogue_article/NormalModelChs.vue

@@ -4,7 +4,10 @@
     <div
       class="aduioLine-box aduioLine-practice-npc"
       v-if="
-        (curQue.mp3_list && curQue.mp3_list.length > 0 && curQue.mp3_list[0].url) || config.isHasPY || config.isHasEN
+        ((curQue.mp3_list && curQue.mp3_list.length > 0 && curQue.mp3_list[0].url) ||
+          config.isHasPY ||
+          config.isHasEN) &&
+        curQue.property.mp3_position === 'top'
       "
     >
       <div class="aduioLine-content">
@@ -415,7 +418,19 @@
                 >
                   {{ item.enwords }}
                 </div>
+                <div
+                  class="multilingual-para"
+                  :class="[item.isTitle ? 'multilingual-para-center' : '']"
+                  v-if="curQue.property.multilingual_position === 'para'"
+                >
+                  {{
+                    curQue.detail[index].multilingualTextList[multilingual]
+                      ? curQue.detail[index].multilingualTextList[multilingual].join(' ')
+                      : ''
+                  }}
+                </div>
               </div>
+
               <img :src="articleImg[index + 1]" v-if="articleImg[index + 1]" />
             </div>
           </div>
@@ -436,9 +451,18 @@
           <div :class="['empty-left', isHasRemark ? 'hasRemark' : '']"></div>
           <div class="empty-right"></div>
         </div>
-        <div class="multilingual" v-for="(items, indexs) in multilingualTextList" :key="indexs">
-          {{ items }}
-        </div>
+
+        <template v-for="(items, indexs) in curQue.detail">
+          <div
+            class="multilingual"
+            :key="indexs"
+            v-if="curQue.property.multilingual_position === 'all' && items.multilingualTextList[multilingual]"
+          >
+            <div class="multilingual-para" :class="[items.isTitle ? 'multilingual-para-center' : '']">
+              {{ items.multilingualTextList[multilingual] ? items.multilingualTextList[multilingual].join(' ') : '' }}
+            </div>
+          </div>
+        </template>
         <div class="dia-article-record" v-if="curQue.Bookanswer">
           <Soundrecord
             type="promax"
@@ -450,7 +474,39 @@
         </div>
       </div>
     </template>
-
+    <div
+      class="aduioLine-box aduioLine-practice-npc aduioLine-box-bottom"
+      v-if="
+        ((curQue.mp3_list && curQue.mp3_list.length > 0 && curQue.mp3_list[0].url) ||
+          config.isHasPY ||
+          config.isHasEN) &&
+        curQue.property.mp3_position === 'bottom'
+      "
+    >
+      <div class="aduioLine-content">
+        <template v-if="curQue.mp3_list && curQue.mp3_list.length > 0 && curQue.mp3_list[0].url">
+          <AudioLine
+            audioId="diaNormalAudio"
+            :mp3="curQue.mp3_list[0].url"
+            :getCurTime="getCurTime"
+            :mp3Source="curQue.mp3_list[0].source"
+            :width="colLength == 2 ? 200 : isPhone ? 200 : 790"
+            :ed="ed"
+            type="audioLine"
+            ref="audioLine"
+            @emptyEd="emptyEd"
+          />
+        </template>
+      </div>
+      <div class="aduioLine-right">
+        <span
+          :class="['pinyin-16', config.isShowPY ? '' : 'disabled']"
+          @click="changePinyin"
+          v-if="config.isHasPY"
+        ></span>
+        <span :class="['EN-16', config.isShowEN ? '' : 'disabled']" @click="changeEN" v-if="config.isHasEN"></span>
+      </div>
+    </div>
     <template v-if="isNoteShow">
       <div
         ref="notecard"
@@ -486,7 +542,7 @@ export default {
     'TaskModel',
     'colLength',
     'isPhone',
-    'multilingualTextList',
+    'multilingual',
   ],
   components: {
     AudioLine,

+ 57 - 5
src/views/book/courseware/preview/components/dialogue_article/PhraseModelChs.vue

@@ -4,7 +4,10 @@
     <div
       class="aduioLine-box aduioLine-practice-npc"
       v-if="
-        (curQue.mp3_list && curQue.mp3_list.length > 0 && curQue.mp3_list[0].url) || config.isHasPY || config.isHasEN
+        ((curQue.mp3_list && curQue.mp3_list.length > 0 && curQue.mp3_list[0].url) ||
+          config.isHasPY ||
+          config.isHasEN) &&
+        curQue.property.mp3_position === 'top'
       "
     >
       <div class="aduioLine-content">
@@ -278,6 +281,17 @@
                 >
                   {{ item.enwords }}
                 </div>
+                <div
+                  class="multilingual-para"
+                  :class="[item.isTitle ? 'multilingual-para-center' : '']"
+                  v-if="curQue.property.multilingual_position === 'para'"
+                >
+                  {{
+                    curQue.detail[index].multilingualTextList[multilingual]
+                      ? curQue.detail[index].multilingualTextList[multilingual].join(' ')
+                      : ''
+                  }}
+                </div>
               </div>
               <img :src="articleImg[index + 1]" v-if="articleImg[index + 1]" />
             </div>
@@ -293,14 +307,52 @@
           <div :class="['empty-left', isHasRemark ? 'hasRemark' : '']"></div>
           <div class="empty-right"></div>
         </div>
-        <div class="multilingual" v-for="(items, indexs) in multilingualTextList" :key="indexs">
-          {{ items }}
-        </div>
+        <template v-for="(items, indexs) in curQue.detail">
+          <div
+            class="multilingual"
+            :key="indexs"
+            v-if="curQue.property.multilingual_position === 'all' && items.multilingualTextList[multilingual]"
+          >
+            <div class="multilingual-para" :class="[items.isTitle ? 'multilingual-para-center' : '']">
+              {{ items.multilingualTextList[multilingual] ? items.multilingualTextList[multilingual].join(' ') : '' }}
+            </div>
+          </div>
+        </template>
         <div class="dia-article-record" v-if="1 == 2">
           <Soundrecord @handleWav="handleWav" type="promax" class="luyin-box" />
         </div>
       </div>
     </template>
+    <div
+      class="aduioLine-box aduioLine-practice-npc aduioLine-box-bottom"
+      v-if="
+        ((curQue.mp3_list && curQue.mp3_list.length > 0 && curQue.mp3_list[0].url) ||
+          config.isHasPY ||
+          config.isHasEN) &&
+        curQue.property.mp3_position === 'bottom'
+      "
+    >
+      <div class="aduioLine-content">
+        <template v-if="curQue.mp3_list && curQue.mp3_list.length > 0 && curQue.mp3_list[0].url">
+          <AudioLine
+            audioId="diaPhraAudio"
+            :mp3="curQue.mp3_list[0].url"
+            :getCurTime="getCurTime"
+            :mp3Source="curQue.mp3_list[0].source"
+            :width="colLength == 2 ? 200 : isPhone ? 200 : 790"
+            ref="audioLine"
+          />
+        </template>
+      </div>
+      <div class="aduioLine-right">
+        <span
+          :class="['pinyin-16', config.isShowPY ? '' : 'disabled']"
+          @click="changePinyin"
+          v-if="config.isHasPY"
+        ></span>
+        <span :class="['EN-16', config.isShowEN ? '' : 'disabled']" @click="changeEN" v-if="config.isHasEN"></span>
+      </div>
+    </div>
     <template v-if="isShow">
       <div
         ref="dialogueWordcard"
@@ -368,7 +420,7 @@ export default {
     'colLength',
     'NpcNewWordMp3',
     'isPhone',
-    'multilingualTextList',
+    'multilingual',
   ],
   components: {
     AudioLine,

+ 70 - 4
src/views/book/courseware/preview/components/dialogue_article/Practicechs.vue

@@ -5,7 +5,10 @@
     <div
       class="aduioLine-box aduioLine-practice-npc"
       v-if="
-        (curQue.mp3_list && curQue.mp3_list.length > 0 && curQue.mp3_list[0].url) || config.isHasPY || config.isHasEN
+        ((curQue.mp3_list && curQue.mp3_list.length > 0 && curQue.mp3_list[0].url) ||
+          config.isHasPY ||
+          config.isHasEN) &&
+        curQue.property.mp3_position === 'top'
       "
     >
       <div class="aduioLine-content">
@@ -390,6 +393,17 @@
                 >
                   {{ item.enwords }}
                 </div>
+                <div
+                  class="multilingual-para"
+                  :class="[item.isTitle ? 'multilingual-para-center' : '']"
+                  v-if="curQue.property.multilingual_position === 'para'"
+                >
+                  {{
+                    multilingualTextList[multilingual] && multilingualTextList[multilingual][index]
+                      ? multilingualTextList[multilingual][index]
+                      : ''
+                  }}
+                </div>
               </div>
             </div>
           </div>
@@ -430,11 +444,59 @@
             <span class="full-screen-icon" @click="fullScreen"> </span>
           </div>
         </div>
-        <div class="multilingual" v-for="(items, indexs) in multilingualTextList" :key="indexs">
+        <!-- <div class="multilingual" v-for="(items, indexs) in multilingualTextList" :key="indexs">
           {{ items }}
+        </div> -->
+      </div>
+    </template>
+    <template v-for="(items, indexs) in curQue.detail">
+      <div
+        class="multilingual"
+        :key="indexs"
+        v-if="curQue.property.multilingual_position === 'all' && items.multilingualTextList[multilingual]"
+      >
+        <div class="multilingual-para" :class="[items.isTitle ? 'multilingual-para-center' : '']">
+          {{ items.multilingualTextList[multilingual] ? items.multilingualTextList[multilingual].join(' ') : '' }}
         </div>
       </div>
     </template>
+    <div
+      class="aduioLine-box aduioLine-practice-npc aduioLine-box-bottom"
+      v-if="
+        ((curQue.mp3_list && curQue.mp3_list.length > 0 && curQue.mp3_list[0].url) ||
+          config.isHasPY ||
+          config.isHasEN) &&
+        curQue.property.mp3_position === 'bottom'
+      "
+    >
+      <div class="aduioLine-content">
+        <template v-if="curQue.mp3_list && curQue.mp3_list.length > 0 && curQue.mp3_list[0].url">
+          <AudioLine
+            audioId="diaPraAudio"
+            :mp3="curQue.mp3_list[0].url"
+            :getCurTime="getCurTime"
+            ref="audioLine"
+            :stopAudio="stopAudio"
+            :width="colLength == 2 ? 175 : isPhone ? 200 : 750"
+            :isRepeat="isRepeat"
+            :mp3Source="curQue.mp3_list[0].source"
+            :ed="ed"
+            type="audioLine"
+            @handleChangeStopAudio="handleChangeStopAudio"
+            @emptyEd="emptyEd"
+          />
+        </template>
+      </div>
+      <div class="aduioLine-right">
+        <span :class="['Repeat-16', isRepeat ? '' : 'disabled']" @click="changeRepeat"></span>
+        <span
+          :class="['pinyin-16', config.isShowPY ? '' : 'disabled']"
+          @click="changePinyin"
+          v-if="config.isHasPY"
+        ></span>
+        <span :class="['EN-16', config.isShowEN ? '' : 'disabled']" @click="changeEN" v-if="config.isHasEN"></span>
+      </div>
+    </div>
     <div class="voice-full-screen" :id="'screen-' + mathNum">
       <Voicefullscreen
         v-if="isFull && resObj"
@@ -481,7 +543,7 @@ export default {
     'colLength',
     'NpcNewWordMp3',
     'isPhone',
-    'multilingualTextList',
+    'multilingual',
   ],
   components: {
     AudioLine,
@@ -535,6 +597,7 @@ export default {
       highWordsArr: [],
       highIndex: 0,
       newWordList: [],
+      multilingualTextList: {},
     };
   },
   computed: {
@@ -669,7 +732,10 @@ export default {
       }
     },
     handleData() {
-      console.log(this.curQue);
+      this.curQue.multilingual.forEach((item) => {
+        let trans_arr = item.translation.split('\n');
+        this.$set(this.multilingualTextList, item.type, trans_arr);
+      });
       let resArr = [],
         sentArrTotal = [];
       let curQue = JSON.parse(JSON.stringify(this.curQue));

+ 57 - 5
src/views/book/courseware/preview/components/dialogue_article/WordModelChs.vue

@@ -4,7 +4,10 @@
     <div
       class="aduioLine-box aduioLine-practice-npc"
       v-if="
-        (curQue.mp3_list && curQue.mp3_list.length > 0 && curQue.mp3_list[0].url) || config.isHasPY || config.isHasEN
+        ((curQue.mp3_list && curQue.mp3_list.length > 0 && curQue.mp3_list[0].url) ||
+          config.isHasPY ||
+          config.isHasEN) &&
+        curQue.property.mp3_position === 'top'
       "
     >
       <div class="aduioLine-content">
@@ -260,6 +263,17 @@
                 >
                   {{ item.enwords }}
                 </div>
+                <div
+                  class="multilingual-para"
+                  :class="[item.isTitle ? 'multilingual-para-center' : '']"
+                  v-if="curQue.property.multilingual_position === 'para'"
+                >
+                  {{
+                    curQue.detail[index].multilingualTextList[multilingual]
+                      ? curQue.detail[index].multilingualTextList[multilingual].join(' ')
+                      : ''
+                  }}
+                </div>
               </div>
               <img :src="articleImg[index + 1]" v-if="articleImg[index + 1]" />
             </div>
@@ -269,9 +283,17 @@
           <div :class="['empty-left', isHasRemark ? 'hasRemark' : '']"></div>
           <div class="empty-right"></div>
         </div>
-        <div class="multilingual" v-for="(items, indexs) in multilingualTextList" :key="indexs">
-          {{ items }}
-        </div>
+        <template v-for="(items, indexs) in curQue.detail">
+          <div
+            class="multilingual"
+            :key="indexs"
+            v-if="curQue.property.multilingual_position === 'all' && items.multilingualTextList[multilingual]"
+          >
+            <div class="multilingual-para" :class="[items.isTitle ? 'multilingual-para-center' : '']">
+              {{ items.multilingualTextList[multilingual] ? items.multilingualTextList[multilingual].join(' ') : '' }}
+            </div>
+          </div>
+        </template>
         <div class="dia-article-record" v-if="curQue.Bookanswer">
           <Soundrecord
             @handleWav="handleWav"
@@ -283,6 +305,36 @@
         </div>
       </div>
     </template>
+    <div
+      class="aduioLine-box aduioLine-practice-npc aduioLine-box-bottom"
+      v-if="
+        ((curQue.mp3_list && curQue.mp3_list.length > 0 && curQue.mp3_list[0].url) ||
+          config.isHasPY ||
+          config.isHasEN) &&
+        curQue.property.mp3_position === 'bottom'
+      "
+    >
+      <div class="aduioLine-content">
+        <template v-if="curQue.mp3_list && curQue.mp3_list.length > 0 && curQue.mp3_list[0].url">
+          <AudioLine
+            audioId="diaPhraAudio"
+            :mp3="curQue.mp3_list[0].url"
+            :getCurTime="getCurTime"
+            :mp3Source="curQue.mp3_list[0].source"
+            :width="colLength == 2 ? 200 : isPhone ? 200 : 790"
+            ref="audioLine"
+          />
+        </template>
+      </div>
+      <div class="aduioLine-right">
+        <span
+          :class="['pinyin-16', config.isShowPY ? '' : 'disabled']"
+          @click="changePinyin"
+          v-if="config.isHasPY"
+        ></span>
+        <span :class="['EN-16', config.isShowEN ? '' : 'disabled']" @click="changeEN" v-if="config.isHasEN"></span>
+      </div>
+    </div>
     <template v-if="isShow">
       <div
         ref="wordcard"
@@ -345,7 +397,7 @@ export default {
     'TaskModel',
     'colLength',
     'isPhone',
-    'multilingualTextList',
+    'multilingual',
   ],
   components: {
     AudioLine,

+ 28 - 7
src/views/book/courseware/preview/components/dialogue_article/index.vue

@@ -74,7 +74,7 @@
             @changeConfig="changeConfig"
             :NNPEAnnotationList="NNPEAnnotationList"
             :colLength="colLength"
-            :multilingualTextList="showLang && multilingualTextList[getLang()] ? multilingualTextList[getLang()] : []"
+            :multilingual="showLang && getLang() ? getLang() : ''"
           />
           <PhraseModel
             :curQue="data"
@@ -91,7 +91,7 @@
             :NNPEAnnotationList="NNPEAnnotationList"
             :colLength="colLength"
             :NpcNewWordMp3="NpcNewWordMp3"
-            :multilingualTextList="showLang && multilingualTextList[getLang()] ? multilingualTextList[getLang()] : []"
+            :multilingual="showLang && getLang() ? getLang() : ''"
           />
           <Practice
             :curQue="data"
@@ -107,7 +107,7 @@
             :colLength="colLength"
             :NpcNewWordMp3="NpcNewWordMp3"
             :isFull="isFull"
-            :multilingualTextList="showLang && multilingualTextList[getLang()] ? multilingualTextList[getLang()] : []"
+            :multilingual="showLang && getLang() ? getLang() : ''"
           />
           <WordModel
             :curQue="data"
@@ -123,7 +123,7 @@
             @changeConfig="changeConfig"
             :TaskModel="isJudgingRightWrong ? 'ANSWER' : ''"
             :colLength="colLength"
-            :multilingualTextList="showLang && multilingualTextList[getLang()] ? multilingualTextList[getLang()] : []"
+            :multilingual="showLang && getLang() ? getLang() : ''"
           />
         </div>
         <div class="voice-full-screen" :id="'screen-' + mathNum">
@@ -209,7 +209,7 @@ export default {
               this.config.isHasEN = true;
             }
             let pinyin = this.handleObj(this.data.detail[i].wordsList);
-            if (pinyin) {
+            if (pinyin && this.data.property.is_enable_pinyin) {
               this.config.isShowPY = true;
               this.config.isHasPY = true;
             }
@@ -389,7 +389,16 @@ export default {
       if (this.showLang) {
         this.data.multilingual.forEach((item) => {
           let trans_arr = item.translation.split('\n');
-          this.$set(this.multilingualTextList, item.type, trans_arr);
+          this.data.detail.forEach((items) => {
+            let items_trans_arr = [];
+            if (!items.hasOwnProperty('multilingualTextList')) {
+              this.$set(items, 'multilingualTextList', {});
+            }
+            if (items.para) {
+              items_trans_arr = trans_arr.splice(0, items.sentences.length);
+            }
+            this.$set(items.multilingualTextList, item.type, items_trans_arr);
+          });
         });
       }
       let userAnswer = JSON.parse(JSON.stringify(this.userAnswer));
@@ -466,7 +475,9 @@ export default {
           resArr.push(objs);
         });
         timeArr.push(dItem.timeList);
-        dhaspinyinArr.push(dhaspinyin);
+        if (curQue.property.is_enable_pinyin) {
+          dhaspinyinArr.push(dhaspinyin);
+        }
       });
       if (wordTimeList && wordTimeList.length > 0) {
         this.mergeWordTime(sentArrTotal, wordTimeList);
@@ -657,6 +668,11 @@ export default {
       .aduioLine-box {
         width: 100%;
         border-bottom: 1px solid rgba(0, 0, 0, 10%);
+
+        &-bottom {
+          border-top: 1px solid rgba(0, 0, 0, 10%);
+          border-bottom: none;
+        }
       }
     }
   }
@@ -723,6 +739,11 @@ export default {
   .aduioLine-box {
     width: 100%;
     border-bottom: 1px solid rgba(0, 0, 0, 10%);
+
+    &-bottom {
+      border-top: 1px solid rgba(0, 0, 0, 10%);
+      border-bottom: none;
+    }
   }
 }
 </style>

+ 24 - 0
src/views/book/courseware/preview/components/fill/FillPreview.vue

@@ -168,6 +168,30 @@ export default {
       deep: true,
       immediate: true,
     },
+    modelEssay: {
+      handler(list) {
+        if (!list || !Array.isArray(list)) return;
+
+        this.answer.answer_list = list
+          .map((item) => {
+            return item
+              .map(({ type, content, audio_answer_list, mark }) => {
+                if (type === 'input') {
+                  return {
+                    value: content,
+                    mark,
+                    audio_answer_list,
+                    write_base64: '',
+                  };
+                }
+              })
+              .filter((item) => item);
+          })
+          .flat();
+      },
+      deep: true,
+      immediate: true,
+    },
     isJudgingRightWrong(val) {
       if (!val) return;
 

+ 2 - 1
src/views/book/courseware/preview/components/select/SelectPreview.vue

@@ -100,6 +100,7 @@ export default {
     .option-item {
       display: flex;
       flex: 1;
+      flex-wrap: wrap;
       column-gap: 8px;
       align-items: center;
       padding: 12px 24px;
@@ -109,7 +110,7 @@ export default {
       border-radius: 40px;
 
       .lang {
-        width: 100%;
+        // width: 100%;
         padding-left: 52px;
       }
 

+ 0 - 5
src/views/personal_workbench/edit_task/preview/index.vue

@@ -8,7 +8,6 @@
         <span v-if="isTrue(courseware.is_can_submit_audit)" class="link" @click="submitCoursewareToAuditFlow">
           提交审校
         </span>
-        <span class="link" @click="simulateAnswer">模拟答题</span>
         <span class="link" @click="goBackBookList">返回教材列表</span>
       </template>
     </CommonPreview>
@@ -54,10 +53,6 @@ export default {
         this.$refs.preview.getBookCoursewareInfo(this.id);
       });
     },
-
-    simulateAnswer() {
-      this.$refs.preview.simulateAnswer();
-    },
   },
 };
 </script>