瀏覽代碼

移动端修改

dsy 2 月之前
父節點
當前提交
38743458ff

+ 1 - 2
src/views/book/courseware/preview/MobileCoursewarePreview.vue

@@ -45,7 +45,6 @@
                 :data-id="grid.id"
                 :style="{
                   gridArea: grid.grid_area,
-                  height: grid.height,
                 }"
               />
             </template>
@@ -271,7 +270,7 @@ export default {
         if (!gridMap.has(item.row)) {
           gridMap.set(item.row, []);
         }
-        gridMap.get(item.row).push(item.height);
+        gridMap.get(item.row).push('auto');
       });
       gridMap.forEach((value) => {
         if (value.length === 1) {

+ 110 - 110
src/views/book/courseware/preview/components/article/NormalModelChs.vue

@@ -100,6 +100,13 @@
                               pItem.className ? pItem.className : '',
                               noFont.indexOf(pItem.pinyin) > -1 ? 'noFont' : '',
                             ]"
+                            :style="{
+                              fontSize: attrib && attrib.pinyin_size ? attrib.pinyin_size : '14px',
+                              height:
+                                attrib && attrib.pinyin_size
+                                  ? attrib.pinyin_size.replace('pt', '') * 1.5 + 'pt'
+                                  : '22px',
+                            }"
                             @click.stop="
                               viewNotes(
                                 $event,
@@ -109,13 +116,6 @@
                                 pItem.articleSentIndex,
                               )
                             "
-                            :style="{
-                              fontSize: attrib && attrib.pinyin_size ? attrib.pinyin_size : '14px',
-                              height:
-                                attrib && attrib.pinyin_size
-                                  ? attrib.pinyin_size.replace('pt', '') * 1.5 + 'pt'
-                                  : '22px',
-                            }"
                             >{{ NumberList.indexOf(pItem.pinyin) == -1 ? pItem.pinyin : '' }}</span
                           >
                           <span
@@ -196,6 +196,13 @@
                               pItem.className ? pItem.className : '',
                               noFont.indexOf(pItem.pinyin) > -1 ? 'noFont' : '',
                             ]"
+                            :style="{
+                              fontSize: attrib && attrib.pinyin_size ? attrib.pinyin_size : '14px',
+                              height:
+                                attrib && attrib.pinyin_size
+                                  ? attrib.pinyin_size.replace('pt', '') * 1.5 + 'pt'
+                                  : '22px',
+                            }"
                             @click.stop="
                               viewNotes(
                                 $event,
@@ -205,13 +212,6 @@
                                 pItem.articleSentIndex,
                               )
                             "
-                            :style="{
-                              fontSize: attrib && attrib.pinyin_size ? attrib.pinyin_size : '14px',
-                              height:
-                                attrib && attrib.pinyin_size
-                                  ? attrib.pinyin_size.replace('pt', '') * 1.5 + 'pt'
-                                  : '22px',
-                            }"
                             >{{ NumberList.indexOf(pItem.pinyin) == -1 ? pItem.pinyin : '' }}</span
                           >
                         </span>
@@ -223,6 +223,13 @@
                               noFont.indexOf(item.wordsList[pIndex + 1].pinyin) > -1 ? 'noFont' : '',
                             ]"
                             style="text-align: left"
+                            :style="{
+                              fontSize: attrib && attrib.pinyin_size ? attrib.pinyin_size : '14px',
+                              height:
+                                attrib && attrib.pinyin_size
+                                  ? attrib.pinyin_size.replace('pt', '') * 1.5 + 'pt'
+                                  : '22px',
+                            }"
                             @click.stop="
                               viewNotes(
                                 $event,
@@ -232,13 +239,6 @@
                                 pItem.articleSentIndex,
                               )
                             "
-                            :style="{
-                              fontSize: attrib && attrib.pinyin_size ? attrib.pinyin_size : '14px',
-                              height:
-                                attrib && attrib.pinyin_size
-                                  ? attrib.pinyin_size.replace('pt', '') * 1.5 + 'pt'
-                                  : '22px',
-                            }"
                             >{{
                               NumberList.indexOf(item.wordsList[pIndex + 1].pinyin) == -1
                                 ? item.wordsList[pIndex + 1].pinyin
@@ -312,6 +312,13 @@
                               noFont.indexOf(item.wordsList[pIndex + 1].pinyin) > -1 ? 'noFont' : '',
                             ]"
                             style="text-align: left"
+                            :style="{
+                              fontSize: attrib && attrib.pinyin_size ? attrib.pinyin_size : '14px',
+                              height:
+                                attrib && attrib.pinyin_size
+                                  ? attrib.pinyin_size.replace('pt', '') * 1.5 + 'pt'
+                                  : '22px',
+                            }"
                             @click.stop="
                               viewNotes(
                                 $event,
@@ -321,13 +328,6 @@
                                 pItem.articleSentIndex,
                               )
                             "
-                            :style="{
-                              fontSize: attrib && attrib.pinyin_size ? attrib.pinyin_size : '14px',
-                              height:
-                                attrib && attrib.pinyin_size
-                                  ? attrib.pinyin_size.replace('pt', '') * 1.5 + 'pt'
-                                  : '22px',
-                            }"
                             >{{
                               NumberList.indexOf(item.wordsList[pIndex + 1].pinyin) == -1
                                 ? item.wordsList[pIndex + 1].pinyin
@@ -351,6 +351,13 @@
                               noFont.indexOf(item.wordsList[pIndex + 2].pinyin) > -1 ? 'noFont' : '',
                             ]"
                             style="text-align: left"
+                            :style="{
+                              fontSize: attrib && attrib.pinyin_size ? attrib.pinyin_size : '14px',
+                              height:
+                                attrib && attrib.pinyin_size
+                                  ? attrib.pinyin_size.replace('pt', '') * 1.5 + 'pt'
+                                  : '22px',
+                            }"
                             @click.stop="
                               viewNotes(
                                 $event,
@@ -360,13 +367,6 @@
                                 pItem.articleSentIndex,
                               )
                             "
-                            :style="{
-                              fontSize: attrib && attrib.pinyin_size ? attrib.pinyin_size : '14px',
-                              height:
-                                attrib && attrib.pinyin_size
-                                  ? attrib.pinyin_size.replace('pt', '') * 1.5 + 'pt'
-                                  : '22px',
-                            }"
                             >{{
                               NumberList.indexOf(item.wordsList[pIndex + 2].pinyin) == -1
                                 ? item.wordsList[pIndex + 2].pinyin
@@ -440,6 +440,13 @@
                               noFont.indexOf(item.wordsList[pIndex + 2].pinyin) > -1 ? 'noFont' : '',
                             ]"
                             style="text-align: left"
+                            :style="{
+                              fontSize: attrib && attrib.pinyin_size ? attrib.pinyin_size : '14px',
+                              height:
+                                attrib && attrib.pinyin_size
+                                  ? attrib.pinyin_size.replace('pt', '') * 1.5 + 'pt'
+                                  : '22px',
+                            }"
                             @click.stop="
                               viewNotes(
                                 $event,
@@ -449,13 +456,6 @@
                                 pItem.articleSentIndex,
                               )
                             "
-                            :style="{
-                              fontSize: attrib && attrib.pinyin_size ? attrib.pinyin_size : '14px',
-                              height:
-                                attrib && attrib.pinyin_size
-                                  ? attrib.pinyin_size.replace('pt', '') * 1.5 + 'pt'
-                                  : '22px',
-                            }"
                             >{{
                               NumberList.indexOf(item.wordsList[pIndex + 2].pinyin) == -1
                                 ? item.wordsList[pIndex + 2].pinyin
@@ -473,6 +473,11 @@
                             pItem.className ? pItem.className : '',
                             noFont.indexOf(pItem.pinyin) > -1 ? 'noFont' : '',
                           ]"
+                          :style="{
+                            fontSize: attrib && attrib.pinyin_size ? attrib.pinyin_size : '14px',
+                            height:
+                              attrib && attrib.pinyin_size ? attrib.pinyin_size.replace('pt', '') * 1.5 + 'pt' : '22px',
+                          }"
                           @click.stop="
                             viewNotes(
                               $event,
@@ -482,11 +487,6 @@
                               pItem.articleSentIndex,
                             )
                           "
-                          :style="{
-                            fontSize: attrib && attrib.pinyin_size ? attrib.pinyin_size : '14px',
-                            height:
-                              attrib && attrib.pinyin_size ? attrib.pinyin_size.replace('pt', '') * 1.5 + 'pt' : '22px',
-                          }"
                           >{{ NumberList.indexOf(pItem.pinyin) == -1 ? pItem.pinyin : '' }}</span
                         >
                         <span
@@ -566,6 +566,11 @@
                             pItem.className ? pItem.className : '',
                             noFont.indexOf(pItem.pinyin) > -1 ? 'noFont' : '',
                           ]"
+                          :style="{
+                            fontSize: attrib && attrib.pinyin_size ? attrib.pinyin_size : '14px',
+                            height:
+                              attrib && attrib.pinyin_size ? attrib.pinyin_size.replace('pt', '') * 1.5 + 'pt' : '22px',
+                          }"
                           @click.stop="
                             viewNotes(
                               $event,
@@ -575,11 +580,6 @@
                               pItem.articleSentIndex,
                             )
                           "
-                          :style="{
-                            fontSize: attrib && attrib.pinyin_size ? attrib.pinyin_size : '14px',
-                            height:
-                              attrib && attrib.pinyin_size ? attrib.pinyin_size.replace('pt', '') * 1.5 + 'pt' : '22px',
-                          }"
                           >{{ NumberList.indexOf(pItem.pinyin) == -1 ? pItem.pinyin : '' }}</span
                         >
                       </template>
@@ -667,6 +667,13 @@
                               sentIndex == index ? 'wordBlank' : '',
                               noFont.indexOf(pItem.pinyin) > -1 ? 'noFont' : '',
                             ]"
+                            :style="{
+                              fontSize: attrib && attrib.pinyin_size ? attrib.pinyin_size : '14px',
+                              height:
+                                attrib && attrib.pinyin_size
+                                  ? attrib.pinyin_size.replace('pt', '') * 1.5 + 'pt'
+                                  : '22px',
+                            }"
                             @click.stop="
                               viewNotes(
                                 $event,
@@ -676,13 +683,6 @@
                                 index,
                               )
                             "
-                            :style="{
-                              fontSize: attrib && attrib.pinyin_size ? attrib.pinyin_size : '14px',
-                              height:
-                                attrib && attrib.pinyin_size
-                                  ? attrib.pinyin_size.replace('pt', '') * 1.5 + 'pt'
-                                  : '22px',
-                            }"
                             >{{ pItem.pinyin }}</span
                           >
                         </template>
@@ -737,6 +737,13 @@
                               sentIndex == index ? 'wordBlank' : '',
                               noFont.indexOf(pItem.pinyin) > -1 ? 'noFont' : '',
                             ]"
+                            :style="{
+                              fontSize: attrib && attrib.pinyin_size ? attrib.pinyin_size : '14px',
+                              height:
+                                attrib && attrib.pinyin_size
+                                  ? attrib.pinyin_size.replace('pt', '') * 1.5 + 'pt'
+                                  : '22px',
+                            }"
                             @click.stop="
                               viewNotes(
                                 $event,
@@ -746,13 +753,6 @@
                                 index,
                               )
                             "
-                            :style="{
-                              fontSize: attrib && attrib.pinyin_size ? attrib.pinyin_size : '14px',
-                              height:
-                                attrib && attrib.pinyin_size
-                                  ? attrib.pinyin_size.replace('pt', '') * 1.5 + 'pt'
-                                  : '22px',
-                            }"
                             >{{ pItem.pinyin }}</span
                           >
                         </template>
@@ -767,6 +767,13 @@
                               noFont.indexOf(item.sentArr[pIndex + 1].pinyin) > -1 ? 'noFont' : '',
                             ]"
                             style="text-align: left"
+                            :style="{
+                              fontSize: attrib && attrib.pinyin_size ? attrib.pinyin_size : '14px',
+                              height:
+                                attrib && attrib.pinyin_size
+                                  ? attrib.pinyin_size.replace('pt', '') * 1.5 + 'pt'
+                                  : '22px',
+                            }"
                             @click.stop="
                               viewNotes(
                                 $event,
@@ -776,13 +783,6 @@
                                 index,
                               )
                             "
-                            :style="{
-                              fontSize: attrib && attrib.pinyin_size ? attrib.pinyin_size : '14px',
-                              height:
-                                attrib && attrib.pinyin_size
-                                  ? attrib.pinyin_size.replace('pt', '') * 1.5 + 'pt'
-                                  : '22px',
-                            }"
                             >{{ item.sentArr[pIndex + 1].pinyin }}</span
                           >
                         </template>
@@ -843,6 +843,13 @@
                               noFont.indexOf(item.sentArr[pIndex + 1].pinyin) > -1 ? 'noFont' : '',
                             ]"
                             style="text-align: left"
+                            :style="{
+                              fontSize: attrib && attrib.pinyin_size ? attrib.pinyin_size : '14px',
+                              height:
+                                attrib && attrib.pinyin_size
+                                  ? attrib.pinyin_size.replace('pt', '') * 1.5 + 'pt'
+                                  : '22px',
+                            }"
                             @click.stop="
                               viewNotes(
                                 $event,
@@ -852,13 +859,6 @@
                                 index,
                               )
                             "
-                            :style="{
-                              fontSize: attrib && attrib.pinyin_size ? attrib.pinyin_size : '14px',
-                              height:
-                                attrib && attrib.pinyin_size
-                                  ? attrib.pinyin_size.replace('pt', '') * 1.5 + 'pt'
-                                  : '22px',
-                            }"
                             >{{ item.sentArr[pIndex + 1].pinyin }}</span
                           >
                         </template>
@@ -880,6 +880,13 @@
                               noFont.indexOf(item.sentArr[pIndex + 2].pinyin) > -1 ? 'noFont' : '',
                             ]"
                             style="text-align: left"
+                            :style="{
+                              fontSize: attrib && attrib.pinyin_size ? attrib.pinyin_size : '14px',
+                              height:
+                                attrib && attrib.pinyin_size
+                                  ? attrib.pinyin_size.replace('pt', '') * 1.5 + 'pt'
+                                  : '22px',
+                            }"
                             @click.stop="
                               viewNotes(
                                 $event,
@@ -889,13 +896,6 @@
                                 index,
                               )
                             "
-                            :style="{
-                              fontSize: attrib && attrib.pinyin_size ? attrib.pinyin_size : '14px',
-                              height:
-                                attrib && attrib.pinyin_size
-                                  ? attrib.pinyin_size.replace('pt', '') * 1.5 + 'pt'
-                                  : '22px',
-                            }"
                             >{{ item.sentArr[pIndex + 2].pinyin }}</span
                           >
                         </template>
@@ -946,6 +946,13 @@
                               noFont.indexOf(item.sentArr[pIndex + 2].pinyin) > -1 ? 'noFont' : '',
                             ]"
                             style="text-align: left"
+                            :style="{
+                              fontSize: attrib && attrib.pinyin_size ? attrib.pinyin_size : '14px',
+                              height:
+                                attrib && attrib.pinyin_size
+                                  ? attrib.pinyin_size.replace('pt', '') * 1.5 + 'pt'
+                                  : '22px',
+                            }"
                             @click.stop="
                               viewNotes(
                                 $event,
@@ -955,13 +962,6 @@
                                 index,
                               )
                             "
-                            :style="{
-                              fontSize: attrib && attrib.pinyin_size ? attrib.pinyin_size : '14px',
-                              height:
-                                attrib && attrib.pinyin_size
-                                  ? attrib.pinyin_size.replace('pt', '') * 1.5 + 'pt'
-                                  : '22px',
-                            }"
                             >{{ item.sentArr[pIndex + 2].pinyin }}</span
                           >
                         </template>
@@ -978,6 +978,11 @@
                             sentIndex == index ? 'wordBlank' : '',
                             noFont.indexOf(pItem.pinyin) > -1 ? 'noFont' : '',
                           ]"
+                          :style="{
+                            fontSize: attrib && attrib.pinyin_size ? attrib.pinyin_size : '14px',
+                            height:
+                              attrib && attrib.pinyin_size ? attrib.pinyin_size.replace('pt', '') * 1.5 + 'pt' : '22px',
+                          }"
                           @click.stop="
                             viewNotes(
                               $event,
@@ -987,11 +992,6 @@
                               index,
                             )
                           "
-                          :style="{
-                            fontSize: attrib && attrib.pinyin_size ? attrib.pinyin_size : '14px',
-                            height:
-                              attrib && attrib.pinyin_size ? attrib.pinyin_size.replace('pt', '') * 1.5 + 'pt' : '22px',
-                          }"
                           >{{ pItem.pinyin }}</span
                         >
                       </template>
@@ -1054,6 +1054,11 @@
                             sentIndex == index ? 'wordBlank' : '',
                             noFont.indexOf(pItem.pinyin) > -1 ? 'noFont' : '',
                           ]"
+                          :style="{
+                            fontSize: attrib && attrib.pinyin_size ? attrib.pinyin_size : '14px',
+                            height:
+                              attrib && attrib.pinyin_size ? attrib.pinyin_size.replace('pt', '') * 1.5 + 'pt' : '22px',
+                          }"
                           @click.stop="
                             viewNotes(
                               $event,
@@ -1063,11 +1068,6 @@
                               index,
                             )
                           "
-                          :style="{
-                            fontSize: attrib && attrib.pinyin_size ? attrib.pinyin_size : '14px',
-                            height:
-                              attrib && attrib.pinyin_size ? attrib.pinyin_size.replace('pt', '') * 1.5 + 'pt' : '22px',
-                          }"
                           >{{ pItem.pinyin }}</span
                         >
                       </template>
@@ -1182,7 +1182,7 @@
           width: isMobile ? '100%' : '',
         }"
       >
-        <Notecard :item="curNoteCon" :change-card="changeCard" :attrib="attrib" :isMobile="isMobile" />
+        <Notecard :item="curNoteCon" :change-card="changeCard" :attrib="attrib" :is-mobile="isMobile" />
       </div>
     </template>
   </div>
@@ -1355,8 +1355,8 @@ export default {
         dItem.wordsList.forEach((sItem, sIndex) => {
           let sentArr = [];
           sItem.forEach((wItem, wIndex) => {
-            let startIndex = wIndex == 0 ? 0 : sentArr[wIndex - 1].startIndex + sentArr[wIndex - 1].chs.length;
-            let endIndex = wIndex == 0 ? wItem.chs.length : sentArr[wIndex - 1].endIndex + wItem.chs.length;
+            let startIndex = wIndex === 0 ? 0 : sentArr[wIndex - 1].startIndex + sentArr[wIndex - 1].chs.length;
+            let endIndex = wIndex === 0 ? wItem.chs.length : sentArr[wIndex - 1].endIndex + wItem.chs.length;
             this.mergeWordSymbol(wItem);
             let obj = {
               paraIndex: dIndex, // 段落索引
@@ -1386,14 +1386,14 @@ export default {
             }
             sentArr.push(obj);
             paraArr.push(obj);
-            if (wIndex == sItem.length - 1) {
-              asIndex++;
+            if (wIndex === sItem.length - 1) {
+              asIndex += 1;
             }
             if (wItem.pinyin) dhaspinyin = true;
           });
         });
         let curSentencesLeg = dItem.sentences.length;
-        let startLeg = dIndex == 0 ? 0 : curQue.detail[dIndex - 1].endLeg;
+        let startLeg = dIndex === 0 ? 0 : curQue.detail[dIndex - 1].endLeg;
         let endLeg = startLeg + curSentencesLeg;
         dItem.endLeg = endLeg;
         let timeList = curQue.wordTime ? curQue.wordTime.slice(startLeg, endLeg) : [];

+ 1 - 0
src/views/book/courseware/preview/components/article/Voicefullscreen.vue

@@ -517,6 +517,7 @@
           :attrib="attrib"
           :isMobile="isMobile"
           :isFull="true"
+          pageFrom="fullscreen"
         />
       </div>
     </template>

+ 1 - 0
src/views/book/courseware/preview/components/article/WordModelChs.vue

@@ -853,6 +853,7 @@ export default {
     'noFont',
     'multilingual',
     'attrib',
+    'isMobile',
   ],
   data() {
     return {

+ 10 - 13
src/views/book/courseware/preview/components/article/components/Freewrite.vue

@@ -29,14 +29,11 @@
         </div>
       </div>
 
-      <div v-if="TaskModel != 'ANSWER'" style="display: flex">
+      <!-- <div v-if="TaskModel != 'ANSWER'" style="display: flex">
         <div v-if="imgarr.length > 0" class="xj" style="margin-right: 8px" @click="removeImage">
           <img src="@/assets/word-remove.png" alt="" />
         </div>
-        <!--
-                  @mouseover="saveShow = true"
-          @mouseout="saveShow = false"
-         -->
+  
         <div :class="['xj', saveShow ? 'click' : '']">
           <img
             :src="saveShow ? require('@/assets/xj-xz.png') : require('@/assets/xj.png')"
@@ -44,7 +41,7 @@
             @click="handleGenerate"
           />
         </div>
-      </div>
+      </div> -->
     </div>
     <div v-if="isNotice" class="record-notice">最多保存5条记录</div>
   </div>
@@ -107,13 +104,13 @@ export default {
         search_scope: 1,
         count_limit: 5,
       };
-      LearnWebSI(MethodName, data).then((res) => {
-        let imgarr = res.hz_handwritten_record_list;
-        this.imgarr = imgarr.map((item) => {
-          item.history = JSON.parse(item.strokes_content);
-          return item;
-        });
-      });
+      // LearnWebSI(MethodName, data).then((res) => {
+      //   let imgarr = res.hz_handwritten_record_list;
+      //   this.imgarr = imgarr.map((item) => {
+      //     item.history = JSON.parse(item.strokes_content);
+      //     return item;
+      //   });
+      // });
     },
     getStuImgList(tabIndex) {
       this.tabIndex = tabIndex;

+ 81 - 17
src/views/book/courseware/preview/components/article/components/Practice.vue

@@ -14,13 +14,17 @@
             : require('@/assets/icon/Cross-16-normal-red.png')
         "
         @click="changePraShow()"
+        :style="{ right: pageFrom === 'fullscreen' ? '100px' : '' }"
       />
       <el-tabs type="border-card" @tab-click="handleClick">
         <el-tab-pane label="简体" />
         <el-tab-pane label="繁体" />
       </el-tabs>
-      <div class="tab-box" :class="[isPhone ? 'tab-box-phone' : '']">
-        <div class="tab-box_0" :class="[isShow == '0' ? 'z-top' : '']">
+      <div
+        class="tab-box"
+        :class="[isMobile ? 'tab-box-phone' : '', pageFrom && pageFrom === 'fullscreen' ? 'tab-box-full' : '']"
+      >
+        <div class="tab-box_0" :class="[isShow == '0' ? 'z-top' : 'z-none']" v-show="isShow == '0'">
           <div class="left-content">
             <div
               class="strockplay"
@@ -85,7 +89,13 @@
           </div>
           <template>
             <div class="right-content">
-              <div class="right-strockred">
+              <div
+                class="right-strockred"
+                :style="{
+                  width: pageFrom && pageFrom === 'fullscreen' ? fullWidth + 'px' : '',
+                  height: pageFrom && pageFrom === 'fullscreen' ? fullWidth + 'px' : '',
+                }"
+              >
                 <template v-if="navIndex == 0">
                   <Strockred
                     :Book_text="cur.stem[0].con"
@@ -139,7 +149,7 @@
             </div>
           </template>
         </div>
-        <div class="tab-box_1" :class="[isShow == '1' ? 'z-top' : '']">
+        <div class="tab-box_1" :class="[isShow == '1' ? 'z-top' : 'z-none']">
           <div class="left-content">
             <div
               class="strockplay"
@@ -192,7 +202,13 @@
           </div>
           <template>
             <div class="right-content">
-              <div class="right-strockred">
+              <div
+                class="right-strockred"
+                :style="{
+                  width: pageFrom && pageFrom === 'fullscreen' ? fullWidth + 'px' : '',
+                  height: pageFrom && pageFrom === 'fullscreen' ? fullWidth + 'px' : '',
+                }"
+              >
                 <template v-if="navIndex == 0">
                   <Strockred
                     :Book_text="cur.stem[0].TChinese"
@@ -277,6 +293,8 @@ export default {
     'bg',
     'ed',
     'attrib',
+    'isMobile',
+    'pageFrom',
   ],
   data() {
     return {
@@ -291,21 +309,29 @@ export default {
       hanziweight: '',
       isShow: 0,
       collFlag: false,
-      isPhone: false,
+      fullWidth: 0, // 手机全屏模式下临摹宽度
+      isRealFull: false,
     };
   },
   computed: {},
   watch: {},
   // 生命周期 - 创建完成(可以访问当前this实例)
   created() {
-    // console.log(this.cur);
     let _this = this;
     let color = _this.colorsList[_this.colorIndex];
     _this.hanzicolor = color;
     _this.hanziweight = 6;
     // _this.checkCollStatus();
-    const regExp = /Android|webOS|iPhone|BlackBerry|IEMobile|Opera Mini/i;
-    this.isPhone = regExp.test(navigator.userAgent);
+    if (this.pageFrom && this.pageFrom === 'fullscreen') {
+      this.fullWidth = window.innerWidth - 160;
+      this.isRealFull = true;
+      this.$forceUpdate();
+    } else if (window.innerWidth > window.innerHeight) {
+      this.pageFrom = 'fullscreen';
+      this.fullWidth = window.innerHeight - 160;
+      this.isRealFull = false;
+      this.$forceUpdate();
+    }
   },
   // 生命周期 - 挂载完成(可以访问DOM元素)
   mounted() {
@@ -773,7 +799,8 @@ export default {
   }
 
   &-phone {
-    height: 460px;
+    height: 480px;
+    background: none;
 
     > div {
       display: block;
@@ -797,25 +824,61 @@ export default {
 
       .right-content {
         width: 290px;
-        height: 290px;
+        height: 360px;
         padding: 4px 16px;
         margin: 10px auto 0;
 
         .right-strockred {
-          width: 200px;
-          height: 200px;
+          width: 256px;
+          height: 256px;
 
           :deep .character-target-div {
-            height: 180px;
+            height: 100%;
           }
 
           :deep .strockred {
-            height: 180px;
+            height: 100%;
           }
         }
       }
     }
   }
+
+  &-full {
+    .left-content {
+      display: block;
+      width: 100px !important;
+
+      .left-content-pra {
+        width: 84px;
+      }
+
+      .footer {
+        width: 84px;
+      }
+    }
+
+    .z-top {
+      display: flex;
+    }
+
+    .z-none {
+      z-index: -1;
+    }
+  }
+}
+
+::deep .tab-box-full.tab-box-phone .freewrite .strockred .character-target-div {
+  height: 100% !important;
+}
+
+::deep .tab-box-full.tab-box-phone .freewrite .strockred {
+  height: 100% !important;
+}
+
+::deep .tab-box-full.tab-box-phone .freewrite .strockred .character-target-div .vueEsign {
+  width: 100% !important;
+  height: 100% !important;
 }
 
 .NPC-Big-Book-preview-green {
@@ -853,10 +916,11 @@ export default {
 <style lang="scss">
 .tab-box-phone {
   .freewrite .strockred {
-    height: 200px;
+    width: 256px;
+    height: 256px;
 
     .character-target-div {
-      height: 200px;
+      height: 256px !important;
     }
   }
 }

+ 64 - 1
src/views/book/courseware/preview/components/article/components/WordPhraseDetail.vue

@@ -1,5 +1,5 @@
 <template>
-  <div class="wordDetailModule wordDetailChs">
+  <div class="wordDetailModule wordDetailChs" :class="[isMobile ? 'wordDetailModule-phone' : '']">
     <div class="module-inner">
       <div v-if="data" class="top">
         <div class="operation">
@@ -316,6 +316,7 @@ export default {
     'bg',
     'ed',
     'attrib',
+    'isMobile',
   ],
   data() {
     // 这里存放数据
@@ -1432,4 +1433,66 @@ export default {
     }
   }
 }
+
+.wordDetailModule-phone {
+  .module-inner {
+    > div {
+      width: 100% !important;
+    }
+
+    .top {
+      .wordDetail {
+        .bwc-Strockplay {
+          box-sizing: border-box;
+          display: flex;
+          align-items: center;
+          justify-content: center;
+          min-width: 65px;
+          height: 65px;
+          margin-right: 10px;
+          margin-bottom: 16px;
+          overflow: hidden;
+          border-radius: 8px;
+
+          .strockplay {
+            position: relative;
+            display: flex;
+            align-items: center;
+            justify-content: center;
+
+            .collect-icon {
+              position: absolute;
+              right: 4px;
+              bottom: 4px;
+              width: 16px;
+              cursor: pointer;
+            }
+          }
+
+          .bwc-line {
+            width: 1px;
+            height: 65px;
+          }
+
+          .red-bg {
+            background: #ff5757;
+          }
+
+          .green-bg {
+            background: #24b99e;
+          }
+
+          .brown-bg {
+            background: #bd8865;
+          }
+        }
+      }
+    }
+
+    .strockplayRedInner {
+      width: 65px;
+      height: 65px;
+    }
+  }
+}
 </style>

+ 28 - 8
src/views/book/courseware/preview/components/article/components/Wordcard.vue

@@ -110,6 +110,7 @@
         </div>
       </template>
       <div class="bwc-more-intp" @click="viewIntp">more</div>
+
       <div class="bwc-footer">
         <!-- <button class="bwc-btn" @click="handleColl">
           <template v-if="!collFlag">
@@ -170,18 +171,20 @@
           写一写
         </button>
       </div>
-      <!-- <el-dialog
+      <el-dialog
         :visible.sync="isPraShow"
         :show-close="false"
         :close-on-click-modal="true"
-        :modal-append-to-body="true"
-        append-to-body
+        :modal-append-to-body="isFull ? false : true"
+        :append-to-body="isFull ? false : true"
         :lock-scroll="true"
-        :width="isPhone ? '100%' : '504px'"
+        :width="isMobile ? '100%' : '504px'"
         class="practiceBox practiceBoxStrock"
         v-if="isPraShow"
-      > -->
-      <div v-if="isPraShow" class="practiceBox practiceBoxStrock" :style="{ width: isPhone ? '100%' : '520px' }">
+        :modal="false"
+        :top="isMobile ? '0' : '15vh'"
+      >
+        <!-- <div v-if="isPraShow" class="practiceBox practiceBoxStrock" :style="{ width: isPhone ? '100%' : '520px' }"> -->
         <Practice
           :change-pra-show="changePraShow"
           :cur="curData"
@@ -193,10 +196,12 @@
           :bg="bg"
           :ed="ed"
           :attrib="attrib"
+          :isMobile="isMobile"
           @changeCurQue="changeCurQue"
+          :pageFrom="pageFrom"
         />
-      </div>
-      <!-- </el-dialog> -->
+        <!-- </div> -->
+      </el-dialog>
       <div v-if="isIntpShow" class="practiceBox">
         <WordPhraseDetail
           :current-tree-i-d="currentTreeID"
@@ -206,6 +211,7 @@
           :bg="bg"
           :ed="ed"
           :attrib="attrib"
+          :isMobile="isMobile"
         />
       </div>
     </template>
@@ -240,6 +246,8 @@ export default {
     'ed',
     'attrib',
     'isMobile',
+    'isFull',
+    'pageFrom',
   ],
   data() {
     return {
@@ -743,4 +751,16 @@ export default {
     }
   }
 }
+
+.practiceBoxStrock {
+  :deep .el-dialog {
+    background: none;
+    box-shadow: none;
+  }
+
+  :deep .el-dialog__header,
+  :deep .el-dialog__body {
+    padding: 0;
+  }
+}
 </style>

+ 4 - 0
src/views/book/courseware/preview/components/common/PreviewMixin.js

@@ -37,6 +37,10 @@ const mixin = {
       type: String,
       default: '',
     },
+    isMobile: {
+      type: Boolean,
+      default: false,
+    },
   },
   computed: {
     showLang() {

+ 9 - 3
src/views/book/courseware/preview/components/dialogue_article/index.vue

@@ -112,6 +112,7 @@
             :body-left="bodyLeft"
             :body-width="bodyWidth"
             :attrib="data.unified_attrib"
+            :isMobile="isMobile"
             :no-font="noFont"
             :config="config"
             :NNPEAnnotationList="NNPEAnnotationList"
@@ -126,6 +127,7 @@
             :word-fontsize="wordFontsize"
             :NNPENewWordList="NNPENewWordList"
             :attrib="data.unified_attrib"
+            :isMobile="isMobile"
             :no-font="noFont"
             :body-left="bodyLeft"
             :config="config"
@@ -142,6 +144,7 @@
             :title-fontsize="titleFontsize"
             :word-fontsize="wordFontsize"
             :attrib="data.unified_attrib"
+            :isMobile="isMobile"
             :no-font="noFont"
             :NNPENewWordList="NNPENewWordList"
             :NNPEAnnotationList="NNPEAnnotationList"
@@ -162,6 +165,7 @@
             :body-width="bodyWidth"
             :NNPENewWordList="NNPENewWordList"
             :attrib="data.unified_attrib"
+            :isMobile="isMobile"
             :no-font="noFont"
             :config="config"
             :TaskModel="isJudgingRightWrong ? 'ANSWER' : ''"
@@ -186,6 +190,7 @@
             :TaskModel="isJudgingRightWrong ? 'ANSWER' : ''"
             :NpcNewWordMp3="NpcNewWordMp3"
             :attrib="data.unified_attrib"
+            :isMobile="isMobile"
             @handleWav="handleWav"
             @changePinyin="changePinyins"
             @changeEN="changeENs"
@@ -197,17 +202,17 @@
       <template
         v-if="data.new_word_list && data.new_word_list.new_word_list && data.new_word_list.new_word_list.length > 0"
       >
-        <NewWordPreview :new-data="data.new_word_list" />
+        <NewWordPreview :new-data="data.new_word_list" :isMobile="isMobile" />
       </template>
       <template
         v-if="
           data.other_word_list && data.other_word_list.new_word_list && data.other_word_list.new_word_list.length > 0
         "
       >
-        <NewWordPreview :new-data="data.other_word_list" />
+        <NewWordPreview :new-data="data.other_word_list" :isMobile="isMobile" />
       </template>
       <template v-if="data.notes_list && data.notes_list.option && data.notes_list.option.length > 0">
-        <NotesPreview :notes-data="data.notes_list" />
+        <NotesPreview :notes-data="data.notes_list" :isMobile="isMobile" />
       </template>
     </div>
   </div>
@@ -242,6 +247,7 @@ export default {
   },
   mixins: [PreviewMixin],
   inject: ['bookInfo'],
+  props: ['isMobile'],
   data() {
     return {
       data: getArticleData(),

+ 20 - 1
src/views/book/courseware/preview/components/image_text/ImageTextPreview.vue

@@ -22,7 +22,7 @@
       class="img-box"
       :style="{
         background: 'url(' + image_url + ') center / contain no-repeat',
-        width: data.image_width + 'px',
+        width: isMobile ? '100%' : data.image_width + 'px',
         height: data.image_height + 'px',
       }"
     >
@@ -195,6 +195,25 @@ export default {
         //   this.mp3_url = url_map[item.file_id];
         // });
       });
+      if (this.isMobile) {
+        setTimeout(() => {
+          let totalWidth = document.querySelector('.imageText-preview').offsetWidth;
+          let rate = totalWidth / this.data.image_width;
+          this.data.image_height = this.data.image_height * rate;
+          this.data.input_list.forEach((item) => {
+            item.width = item.width.replace('px', '') * rate + 'px';
+            item.height = item.height.replace('px', '') * rate + 'px';
+            item.x = item.x.replace('px', '') * rate + 'px';
+            item.y = item.y.replace('px', '') * rate + 'px';
+          });
+          this.data.text_list.forEach((item) => {
+            item.width = item.width.replace('px', '') * rate + 'px';
+            item.height = item.height.replace('px', '') * rate + 'px';
+            item.x = item.x.replace('px', '') * rate + 'px';
+            item.y = item.y.replace('px', '') * rate + 'px';
+          });
+        }, 50);
+      }
     },
     /**
      * 计算答题对错选项字体颜色

+ 8 - 3
src/views/book/courseware/preview/components/matching/MatchingPreview.vue

@@ -9,8 +9,13 @@
           <div
             v-for="({ content, mark, multilingual, paragraph_list }, j) in item"
             :key="mark"
-            :class="['item-wrapper', `item-${mark}`, computedAnswerClass(mark)]"
-            :style="{ cursor: disabled ? 'default' : 'pointer' }"
+            :class="['item-wrapper', `item-${mark}`, computedAnswerClass(mark), { isMobile: isMobile }]"
+            :style="{
+              cursor: disabled ? 'default' : 'pointer',
+              flex: isMobile ? '0 1 auto' : '',
+              width: isMobile ? 'calc(50% - 8px)' : '',
+              overflow: isMobile ? 'auto' : '',
+            }"
             @mousedown="mousedown($event, i, j, mark)"
             @mouseup="mouseup($event, i, j, mark)"
             @click="handleClickConnection($event, i, j, mark)"
@@ -500,7 +505,7 @@ export default {
         background-color: $content-color;
         border-radius: 40px;
 
-        &:not(:last-child) {
+        &:not(:last-child, .isMobile) {
           margin-right: 52px;
         }
 

+ 609 - 255
src/views/book/courseware/preview/components/new_word/NewWordPreview.vue

@@ -96,7 +96,7 @@
                   v-for="(item, index) in data.option_list"
                   :key="'curQue.option' + index"
                   class="NPC-word-tr"
-                  :style="{ width: rowWidth + 'px' }"
+                  :style="{ width: isMobile ? '100%' : rowWidth + 'px' }"
                 >
                   <div
                     v-for="(sItem, sIndex) in item"
@@ -107,43 +107,313 @@
                       curTime >= sItem.bg && curTime < sItem.ed && stopAudioS ? 'active' : '',
                     ]"
                   >
-                    <template v-if="sItem.bg || sItem.ed">
-                      <!-- <a
+                    <template v-if="isMobile">
+                      <div class="content-box">
+                        <div style="display: flex; flex-flow: wrap; gap: 10px; align-items: center; width: 100%">
+                          <template v-if="sItem.bg || sItem.ed">
+                            <!-- <a
                         :class="['play-btn', curTime >= sItem.bg && curTime < sItem.ed && stopAudioS ? 'active' : '']"
                         @click="handleChangeTime(sItem.bg, sItem.ed)"
                       ></a> -->
-                      <SvgIcon
-                        v-if="curTime >= sItem.bg && curTime < sItem.ed && stopAudioS"
-                        icon-class="animated"
-                        size="24"
-                        :style="{
-                          color:
-                            data.unified_attrib && data.unified_attrib.topic_color
-                              ? data.unified_attrib.topic_color
-                              : '',
-                        }"
-                        @click="handleChangeTime(sItem.bg, sItem.ed)"
-                      />
-                      <SvgIcon
-                        v-else
-                        icon-class="play-btn"
-                        size="24"
-                        :style="{
-                          color:
-                            data.unified_attrib && data.unified_attrib.topic_color
-                              ? data.unified_attrib.topic_color
-                              : '',
-                        }"
-                        @click="handleChangeTime(sItem.bg, sItem.ed)"
-                      />
+                            <SvgIcon
+                              v-if="curTime >= sItem.bg && curTime < sItem.ed && stopAudioS"
+                              icon-class="animated"
+                              size="24"
+                              :style="{
+                                color:
+                                  data.unified_attrib && data.unified_attrib.topic_color
+                                    ? data.unified_attrib.topic_color
+                                    : '',
+                              }"
+                              @click="handleChangeTime(sItem.bg, sItem.ed)"
+                            />
+                            <SvgIcon
+                              v-else
+                              icon-class="play-btn"
+                              size="24"
+                              :style="{
+                                color:
+                                  data.unified_attrib && data.unified_attrib.topic_color
+                                    ? data.unified_attrib.topic_color
+                                    : '',
+                              }"
+                              @click="handleChangeTime(sItem.bg, sItem.ed)"
+                            />
+                          </template>
+                          <template v-else-if="sItem.mp3_list">
+                            <span
+                              :class="['play-btn', playClass && mp3_index === sItem.sIndex ? 'active' : '']"
+                              @click="palyAudio(sItem.mp3_list_url, sItem.sIndex)"
+                            >
+                              <SvgIcon
+                                v-if="playClass && mp3_index === sItem.sIndex"
+                                icon-class="animated"
+                                size="24"
+                                :style="{
+                                  color:
+                                    data.unified_attrib && data.unified_attrib.topic_color
+                                      ? data.unified_attrib.topic_color
+                                      : '',
+                                }"
+                              />
+                              <SvgIcon
+                                v-else
+                                icon-class="play-btn"
+                                size="24"
+                                :style="{
+                                  color:
+                                    data.unified_attrib && data.unified_attrib.topic_color
+                                      ? data.unified_attrib.topic_color
+                                      : '',
+                                }"
+                              />
+                            </span>
+
+                            <audio :id="'word' + indexStr + sItem.sIndex" :src="sItem.mp3_list_url"></audio>
+                          </template>
+
+                          <template v-else>
+                            <span style="flex-shrink: 0; width: 24px; height: 24px"></span>
+                          </template>
+                          <div class="tabNum-box">
+                            <template v-if="sItem.mIndex == 0">
+                              <b
+                                class="tabNum"
+                                :style="{
+                                  backgroundColor:
+                                    data.unified_attrib && data.unified_attrib.topic_color
+                                      ? data.unified_attrib.topic_color
+                                      : '',
+                                }"
+                                >{{ index + 1 }}</b
+                              >
+                            </template>
+                            <div v-else style="width: 16px; height: 16px; margin-left: 8px"></div>
+                          </div>
+                          <template
+                            v-if="
+                              data.property.pinyin_position &&
+                              (data.property.pinyin_position == 'top' || data.property.pinyin_position == 'bottom')
+                            "
+                          >
+                            <div class="NPC-word-tab-box">
+                              <span
+                                v-if="data.property.pinyin_position == 'top'"
+                                class="NPC-word-tab-common NPC-word-tab-pinyin"
+                                :style="{
+                                  fontSize:
+                                    data.unified_attrib && data.unified_attrib.pinyin_size
+                                      ? data.unified_attrib.pinyin_size
+                                      : '',
+                                }"
+                                v-html="sItem.pinyin"
+                              >
+                              </span>
+
+                              <span
+                                :style="{
+                                  fontSize:
+                                    data.unified_attrib && data.unified_attrib.font_size
+                                      ? data.unified_attrib.font_size
+                                      : '',
+                                }"
+                                class="NPC-word-tab-common NPC-word-tab-word"
+                                v-html="sItem.new_word"
+                              >
+                              </span>
+                              <span
+                                v-if="data.property.pinyin_position == 'bottom'"
+                                class="NPC-word-tab-common NPC-word-tab-pinyin"
+                                :style="{
+                                  fontSize:
+                                    data.unified_attrib && data.unified_attrib.pinyin_size
+                                      ? data.unified_attrib.pinyin_size
+                                      : '',
+                                }"
+                                v-html="sItem.pinyin"
+                              >
+                              </span>
+                              <span
+                                v-if="
+                                  showLang &&
+                                  multilingualTextList[getLang()] &&
+                                  multilingualTextList[getLang()][index] &&
+                                  multilingualTextList[getLang()][index][0]
+                                "
+                                class="NPC-word-tab-common"
+                              >
+                                {{ multilingualTextList[getLang()][index][0] }}
+                              </span>
+                            </div>
+                            <span>
+                              <p
+                                class="NPC-word-tab-common NPC-word-tab-cixing"
+                                :class="[/[\u4E00-\u9FA5\uF900-\uFA2D]/.test(sItem.cixing) ? 'hasCn' : '']"
+                                v-html="sItem.cixing"
+                              ></p>
+                              <span
+                                v-if="
+                                  showLang &&
+                                  multilingualTextList[getLang()] &&
+                                  multilingualTextList[getLang()][index] &&
+                                  multilingualTextList[getLang()][index][1]
+                                "
+                                class="NPC-word-tab-common"
+                              >
+                                {{ multilingualTextList[getLang()][index][1] }}
+                              </span>
+                            </span>
+                          </template>
+                          <template v-else>
+                            <span
+                              v-if="!data.property.pinyin_position || data.property.pinyin_position == 'front'"
+                              class="NPC-word-tab-common NPC-word-tab-pinyin"
+                              :style="{
+                                fontSize:
+                                  data.unified_attrib && data.unified_attrib.pinyin_size
+                                    ? data.unified_attrib.pinyin_size
+                                    : '',
+                                lineHeight:
+                                  data.unified_attrib && data.unified_attrib.font_size
+                                    ? data.unified_attrib.font_size.replace('pt', '') * 1.5 + 'pt'
+                                    : '',
+                              }"
+                              v-html="sItem.pinyin"
+                            >
+                            </span>
+                            <span>
+                              <p
+                                class="NPC-word-tab-common NPC-word-tab-word"
+                                :style="{
+                                  fontSize:
+                                    data.unified_attrib && data.unified_attrib.font_size
+                                      ? data.unified_attrib.font_size
+                                      : '',
+                                }"
+                                v-html="sItem.new_word"
+                              ></p>
+                              <span
+                                v-if="
+                                  showLang &&
+                                  multilingualTextList[getLang()] &&
+                                  multilingualTextList[getLang()][index] &&
+                                  multilingualTextList[getLang()][index][0]
+                                "
+                                class="NPC-word-tab-common"
+                              >
+                                {{ multilingualTextList[getLang()][index][0] }}
+                              </span>
+                            </span>
+                            <span
+                              v-if="data.property.pinyin_position == 'back'"
+                              class="NPC-word-tab-common NPC-word-tab-pinyin"
+                              :style="{
+                                fontSize:
+                                  data.unified_attrib && data.unified_attrib.pinyin_size
+                                    ? data.unified_attrib.pinyin_size
+                                    : '',
+                                lineHeight:
+                                  data.unified_attrib && data.unified_attrib.font_size
+                                    ? data.unified_attrib.font_size.replace('pt', '') * 1.5 + 'pt'
+                                    : '',
+                              }"
+                              v-html="sItem.pinyin"
+                            >
+                            </span>
+                            <span>
+                              <p
+                                class="NPC-word-tab-common NPC-word-tab-cixing"
+                                :class="[/[\u4E00-\u9FA5\uF900-\uFA2D]/.test(sItem.cixing) ? 'hasCn' : '']"
+                                v-html="sItem.cixing"
+                              ></p>
+
+                              <span
+                                v-if="
+                                  showLang &&
+                                  multilingualTextList[getLang()] &&
+                                  multilingualTextList[getLang()][index] &&
+                                  multilingualTextList[getLang()][index][1]
+                                "
+                                class="NPC-word-tab-common"
+                              >
+                                {{ multilingualTextList[getLang()][index][1] }}
+                              </span>
+                            </span>
+                          </template>
+                        </div>
+
+                        <span>
+                          <p class="NPC-word-tab-common NPC-word-tab-def" v-html="sItem.def_str"></p>
+                          <span
+                            v-if="
+                              showLang &&
+                              multilingualTextList[getLang()] &&
+                              multilingualTextList[getLang()][index] &&
+                              multilingualTextList[getLang()][index][2]
+                            "
+                            class="NPC-word-tab-common"
+                          >
+                            {{ multilingualTextList[getLang()][index][2] }}
+                          </span>
+                        </span>
+                        <div v-if="sItem.collocation">
+                          <span class="collocation"><span>搭配:</span><b v-html="sItem.collocation"></b></span>
+                          <span v-if="showLang" class="">
+                            {{
+                              multilingualTextList[getLang()] &&
+                              multilingualTextList[getLang()][index] &&
+                              multilingualTextList[getLang()][index][3]
+                                ? multilingualTextList[getLang()][index][3]
+                                : ''
+                            }}
+                          </span>
+                        </div>
+                        <div v-if="sItem.liju_list">
+                          <span class="collocation"
+                            ><span>例句:</span>
+                            <div>
+                              <b v-html="sItem.liju_list"></b>
+                            </div>
+                          </span>
+                          <span v-if="showLang" class="">
+                            {{
+                              multilingualTextList[getLang()] &&
+                              multilingualTextList[getLang()][index] &&
+                              multilingualTextList[getLang()][index][4]
+                                ? multilingualTextList[getLang()][index][4]
+                                : ''
+                            }}
+                          </span>
+                        </div>
+                      </div>
+                      <div class="right-box">
+                        <span>
+                          <!-- :answerRecordList="data.answer.answer_list[index][sIndex].recordList" -->
+                          <SoundRecord
+                            :tm-index="index"
+                            :tms-index="sIndex"
+                            :task-model="isJudgingRightWrong ? 'ANSWER' : ''"
+                            :answer-record-list="[]"
+                            type="mini"
+                            class="luyin-box-wordphrase"
+                            :style="{ marginLeft: '8px' }"
+                            :attrib="data.unified_attrib"
+                            @handleWav="handleWav"
+                          />
+                        </span>
+                        <span v-if="isEnable(data.property.is_has_infor)">
+                          <img src="@/assets/detail-icon.png" class="detail-icon" @click="showDetail(sItem)" />
+                        </span>
+                      </div>
                     </template>
-                    <template v-else-if="sItem.mp3_list">
-                      <span
-                        :class="['play-btn', playClass && mp3_index === sItem.sIndex ? 'active' : '']"
-                        @click="palyAudio(sItem.mp3_list_url, sItem.sIndex)"
-                      >
+                    <template v-else>
+                      <template v-if="sItem.bg || sItem.ed">
+                        <!-- <a
+                        :class="['play-btn', curTime >= sItem.bg && curTime < sItem.ed && stopAudioS ? 'active' : '']"
+                        @click="handleChangeTime(sItem.bg, sItem.ed)"
+                      ></a> -->
                         <SvgIcon
-                          v-if="playClass && mp3_index === sItem.sIndex"
+                          v-if="curTime >= sItem.bg && curTime < sItem.ed && stopAudioS"
                           icon-class="animated"
                           size="24"
                           :style="{
@@ -152,6 +422,7 @@
                                 ? data.unified_attrib.topic_color
                                 : '',
                           }"
+                          @click="handleChangeTime(sItem.bg, sItem.ed)"
                         />
                         <SvgIcon
                           v-else
@@ -163,268 +434,302 @@
                                 ? data.unified_attrib.topic_color
                                 : '',
                           }"
+                          @click="handleChangeTime(sItem.bg, sItem.ed)"
                         />
-                      </span>
+                      </template>
+                      <template v-else-if="sItem.mp3_list">
+                        <span
+                          :class="['play-btn', playClass && mp3_index === sItem.sIndex ? 'active' : '']"
+                          @click="palyAudio(sItem.mp3_list_url, sItem.sIndex)"
+                        >
+                          <SvgIcon
+                            v-if="playClass && mp3_index === sItem.sIndex"
+                            icon-class="animated"
+                            size="24"
+                            :style="{
+                              color:
+                                data.unified_attrib && data.unified_attrib.topic_color
+                                  ? data.unified_attrib.topic_color
+                                  : '',
+                            }"
+                          />
+                          <SvgIcon
+                            v-else
+                            icon-class="play-btn"
+                            size="24"
+                            :style="{
+                              color:
+                                data.unified_attrib && data.unified_attrib.topic_color
+                                  ? data.unified_attrib.topic_color
+                                  : '',
+                            }"
+                          />
+                        </span>
 
-                      <audio :id="'word' + indexStr + sItem.sIndex" :src="sItem.mp3_list_url"></audio>
-                    </template>
+                        <audio :id="'word' + indexStr + sItem.sIndex" :src="sItem.mp3_list_url"></audio>
+                      </template>
 
-                    <template v-else>
-                      <span style="flex-shrink: 0; width: 24px; height: 24px"></span>
-                    </template>
-                    <div class="tabNum-box">
-                      <template v-if="sItem.mIndex == 0">
-                        <b
-                          class="tabNum"
-                          :style="{
-                            backgroundColor:
-                              data.unified_attrib && data.unified_attrib.topic_color
-                                ? data.unified_attrib.topic_color
-                                : '',
-                            marginTop:
-                              data.unified_attrib && data.unified_attrib.font_size
-                                ? (((data.unified_attrib.font_size.replace('pt', '') * 1.5) / 3) * 4 - 16) / 2 + 'px'
-                                : '',
-                          }"
-                          >{{ index + 1 }}</b
-                        >
+                      <template v-else>
+                        <span style="flex-shrink: 0; width: 24px; height: 24px"></span>
                       </template>
-                      <div v-else style="width: 16px; height: 16px; margin-left: 8px"></div>
-                    </div>
-                    <template
-                      v-if="
-                        data.property.pinyin_position &&
-                        (data.property.pinyin_position == 'top' || data.property.pinyin_position == 'bottom')
-                      "
-                    >
-                      <div class="NPC-word-tab-box">
+                      <div class="tabNum-box">
+                        <template v-if="sItem.mIndex == 0">
+                          <b
+                            class="tabNum"
+                            :style="{
+                              backgroundColor:
+                                data.unified_attrib && data.unified_attrib.topic_color
+                                  ? data.unified_attrib.topic_color
+                                  : '',
+                              marginTop:
+                                data.unified_attrib && data.unified_attrib.font_size
+                                  ? (((data.unified_attrib.font_size.replace('pt', '') * 1.5) / 3) * 4 - 16) / 2 + 'px'
+                                  : '',
+                            }"
+                            >{{ index + 1 }}</b
+                          >
+                        </template>
+                        <div v-else style="width: 16px; height: 16px; margin-left: 8px"></div>
+                      </div>
+                      <template
+                        v-if="
+                          data.property.pinyin_position &&
+                          (data.property.pinyin_position == 'top' || data.property.pinyin_position == 'bottom')
+                        "
+                      >
+                        <div class="NPC-word-tab-box">
+                          <span
+                            v-if="data.property.pinyin_position == 'top'"
+                            class="NPC-word-tab-common NPC-word-tab-pinyin"
+                            :style="{
+                              width: data.col_width[0].value + 'px',
+                              fontSize:
+                                data.unified_attrib && data.unified_attrib.pinyin_size
+                                  ? data.unified_attrib.pinyin_size
+                                  : '',
+                            }"
+                            v-html="sItem.pinyin"
+                          >
+                          </span>
+
+                          <span
+                            :style="{
+                              width: data.col_width[0].value + 'px',
+                              fontSize:
+                                data.unified_attrib && data.unified_attrib.font_size
+                                  ? data.unified_attrib.font_size
+                                  : '',
+                            }"
+                            class="NPC-word-tab-common NPC-word-tab-word"
+                            v-html="sItem.new_word"
+                          >
+                          </span>
+                          <span
+                            v-if="data.property.pinyin_position == 'bottom'"
+                            class="NPC-word-tab-common NPC-word-tab-pinyin"
+                            :style="{
+                              width: data.col_width[0].value + 'px',
+                              fontSize:
+                                data.unified_attrib && data.unified_attrib.pinyin_size
+                                  ? data.unified_attrib.pinyin_size
+                                  : '',
+                            }"
+                            v-html="sItem.pinyin"
+                          >
+                          </span>
+                          <span
+                            v-if="
+                              showLang &&
+                              multilingualTextList[getLang()] &&
+                              multilingualTextList[getLang()][index] &&
+                              multilingualTextList[getLang()][index][0]
+                            "
+                            class="NPC-word-tab-common"
+                            :style="{ width: data.col_width[0].value + 'px' }"
+                          >
+                            {{ multilingualTextList[getLang()][index][0] }}
+                          </span>
+                        </div>
+                        <span :style="{ width: data.col_width[2].value + 'px' }">
+                          <p
+                            class="NPC-word-tab-common NPC-word-tab-cixing"
+                            :class="[/[\u4E00-\u9FA5\uF900-\uFA2D]/.test(sItem.cixing) ? 'hasCn' : '']"
+                            v-html="sItem.cixing"
+                          ></p>
+                          <span
+                            v-if="
+                              showLang &&
+                              multilingualTextList[getLang()] &&
+                              multilingualTextList[getLang()][index] &&
+                              multilingualTextList[getLang()][index][1]
+                            "
+                            class="NPC-word-tab-common"
+                          >
+                            {{ multilingualTextList[getLang()][index][1] }}
+                          </span>
+                        </span>
+                        <span :style="{ width: data.col_width[3].value + 'px' }">
+                          <p class="NPC-word-tab-common NPC-word-tab-def" v-html="sItem.def_str"></p>
+                          <span
+                            v-if="
+                              showLang &&
+                              multilingualTextList[getLang()] &&
+                              multilingualTextList[getLang()][index] &&
+                              multilingualTextList[getLang()][index][2]
+                            "
+                            class="NPC-word-tab-common"
+                          >
+                            {{ multilingualTextList[getLang()][index][2] }}
+                          </span>
+                        </span>
+                      </template>
+                      <template v-else>
                         <span
-                          v-if="data.property.pinyin_position == 'top'"
+                          v-if="!data.property.pinyin_position || data.property.pinyin_position == 'front'"
                           class="NPC-word-tab-common NPC-word-tab-pinyin"
                           :style="{
-                            width: data.col_width[0].value + 'px',
+                            width: data.col_width[1].value + 'px',
                             fontSize:
                               data.unified_attrib && data.unified_attrib.pinyin_size
                                 ? data.unified_attrib.pinyin_size
                                 : '',
+                            lineHeight:
+                              data.unified_attrib && data.unified_attrib.font_size
+                                ? data.unified_attrib.font_size.replace('pt', '') * 1.5 + 'pt'
+                                : '',
                           }"
                           v-html="sItem.pinyin"
                         >
                         </span>
-
                         <span
                           :style="{
                             width: data.col_width[0].value + 'px',
-                            fontSize:
-                              data.unified_attrib && data.unified_attrib.font_size ? data.unified_attrib.font_size : '',
                           }"
-                          class="NPC-word-tab-common NPC-word-tab-word"
-                          v-html="sItem.new_word"
                         >
+                          <p
+                            class="NPC-word-tab-common NPC-word-tab-word"
+                            :style="{
+                              fontSize:
+                                data.unified_attrib && data.unified_attrib.font_size
+                                  ? data.unified_attrib.font_size
+                                  : '',
+                            }"
+                            v-html="sItem.new_word"
+                          ></p>
+                          <span
+                            v-if="
+                              showLang &&
+                              multilingualTextList[getLang()] &&
+                              multilingualTextList[getLang()][index] &&
+                              multilingualTextList[getLang()][index][0]
+                            "
+                            class="NPC-word-tab-common"
+                            :style="{ width: data.col_width[0].value + 'px' }"
+                          >
+                            {{ multilingualTextList[getLang()][index][0] }}
+                          </span>
                         </span>
                         <span
-                          v-if="data.property.pinyin_position == 'bottom'"
+                          v-if="data.property.pinyin_position == 'back'"
                           class="NPC-word-tab-common NPC-word-tab-pinyin"
                           :style="{
-                            width: data.col_width[0].value + 'px',
+                            width: data.col_width[1].value + 'px',
                             fontSize:
                               data.unified_attrib && data.unified_attrib.pinyin_size
                                 ? data.unified_attrib.pinyin_size
                                 : '',
+                            lineHeight:
+                              data.unified_attrib && data.unified_attrib.font_size
+                                ? data.unified_attrib.font_size.replace('pt', '') * 1.5 + 'pt'
+                                : '',
                           }"
                           v-html="sItem.pinyin"
                         >
                         </span>
-                        <span
-                          v-if="
-                            showLang &&
-                            multilingualTextList[getLang()] &&
-                            multilingualTextList[getLang()][index] &&
-                            multilingualTextList[getLang()][index][0]
-                          "
-                          class="NPC-word-tab-common"
-                          :style="{ width: data.col_width[0].value + 'px' }"
-                        >
-                          {{ multilingualTextList[getLang()][index][0] }}
+                        <span :style="{ width: data.col_width[2].value + 'px' }">
+                          <p
+                            class="NPC-word-tab-common NPC-word-tab-cixing"
+                            :class="[/[\u4E00-\u9FA5\uF900-\uFA2D]/.test(sItem.cixing) ? 'hasCn' : '']"
+                            v-html="sItem.cixing"
+                          ></p>
+
+                          <span
+                            v-if="
+                              showLang &&
+                              multilingualTextList[getLang()] &&
+                              multilingualTextList[getLang()][index] &&
+                              multilingualTextList[getLang()][index][1]
+                            "
+                            class="NPC-word-tab-common"
+                          >
+                            {{ multilingualTextList[getLang()][index][1] }}
+                          </span>
                         </span>
-                      </div>
-                      <span :style="{ width: data.col_width[2].value + 'px' }">
-                        <p
-                          class="NPC-word-tab-common NPC-word-tab-cixing"
-                          :class="[/[\u4E00-\u9FA5\uF900-\uFA2D]/.test(sItem.cixing) ? 'hasCn' : '']"
-                          v-html="sItem.cixing"
-                        ></p>
-                        <span
-                          v-if="
-                            showLang &&
-                            multilingualTextList[getLang()] &&
-                            multilingualTextList[getLang()][index] &&
-                            multilingualTextList[getLang()][index][1]
-                          "
-                          class="NPC-word-tab-common"
-                        >
-                          {{ multilingualTextList[getLang()][index][1] }}
+                        <span :style="{ width: data.col_width[3].value + 'px' }">
+                          <p class="NPC-word-tab-common NPC-word-tab-def" v-html="sItem.def_str"></p>
+                          <span
+                            v-if="
+                              showLang &&
+                              multilingualTextList[getLang()] &&
+                              multilingualTextList[getLang()][index] &&
+                              multilingualTextList[getLang()][index][2]
+                            "
+                            class="NPC-word-tab-common"
+                          >
+                            {{ multilingualTextList[getLang()][index][2] }}
+                          </span>
                         </span>
-                      </span>
-                      <span :style="{ width: data.col_width[3].value + 'px' }">
-                        <p class="NPC-word-tab-common NPC-word-tab-def" v-html="sItem.def_str"></p>
-                        <span
-                          v-if="
-                            showLang &&
-                            multilingualTextList[getLang()] &&
-                            multilingualTextList[getLang()][index] &&
-                            multilingualTextList[getLang()][index][2]
-                          "
-                          class="NPC-word-tab-common"
-                        >
-                          {{ multilingualTextList[getLang()][index][2] }}
+                      </template>
+                      <div class="right-box">
+                        <span>
+                          <!-- :answerRecordList="data.answer.answer_list[index][sIndex].recordList" -->
+                          <SoundRecord
+                            :tm-index="index"
+                            :tms-index="sIndex"
+                            :task-model="isJudgingRightWrong ? 'ANSWER' : ''"
+                            :answer-record-list="[]"
+                            type="mini"
+                            class="luyin-box-wordphrase"
+                            :style="{ marginLeft: '8px' }"
+                            :attrib="data.unified_attrib"
+                            @handleWav="handleWav"
+                          />
                         </span>
-                      </span>
-                    </template>
-                    <template v-else>
-                      <span
-                        v-if="!data.property.pinyin_position || data.property.pinyin_position == 'front'"
-                        class="NPC-word-tab-common NPC-word-tab-pinyin"
-                        :style="{
-                          width: data.col_width[1].value + 'px',
-                          fontSize:
-                            data.unified_attrib && data.unified_attrib.pinyin_size
-                              ? data.unified_attrib.pinyin_size
-                              : '',
-                          lineHeight:
-                            data.unified_attrib && data.unified_attrib.font_size
-                              ? data.unified_attrib.font_size.replace('pt', '') * 1.5 + 'pt'
-                              : '',
-                        }"
-                        v-html="sItem.pinyin"
-                      >
-                      </span>
-                      <span
-                        :style="{
-                          width: data.col_width[0].value + 'px',
-                        }"
-                      >
-                        <p
-                          class="NPC-word-tab-common NPC-word-tab-word"
-                          :style="{
-                            fontSize:
-                              data.unified_attrib && data.unified_attrib.font_size ? data.unified_attrib.font_size : '',
-                          }"
-                          v-html="sItem.new_word"
-                        ></p>
-                        <span
-                          v-if="
-                            showLang &&
-                            multilingualTextList[getLang()] &&
-                            multilingualTextList[getLang()][index] &&
-                            multilingualTextList[getLang()][index][0]
-                          "
-                          class="NPC-word-tab-common"
-                          :style="{ width: data.col_width[0].value + 'px' }"
-                        >
-                          {{ multilingualTextList[getLang()][index][0] }}
+                        <span v-if="isEnable(data.property.is_has_infor)">
+                          <img src="@/assets/detail-icon.png" class="detail-icon" @click="showDetail(sItem)" />
                         </span>
-                      </span>
-                      <span
-                        v-if="data.property.pinyin_position == 'back'"
-                        class="NPC-word-tab-common NPC-word-tab-pinyin"
-                        :style="{
-                          width: data.col_width[1].value + 'px',
-                          fontSize:
-                            data.unified_attrib && data.unified_attrib.pinyin_size
-                              ? data.unified_attrib.pinyin_size
-                              : '',
-                          lineHeight:
-                            data.unified_attrib && data.unified_attrib.font_size
-                              ? data.unified_attrib.font_size.replace('pt', '') * 1.5 + 'pt'
-                              : '',
-                        }"
-                        v-html="sItem.pinyin"
-                      >
-                      </span>
-                      <span :style="{ width: data.col_width[2].value + 'px' }">
-                        <p
-                          class="NPC-word-tab-common NPC-word-tab-cixing"
-                          :class="[/[\u4E00-\u9FA5\uF900-\uFA2D]/.test(sItem.cixing) ? 'hasCn' : '']"
-                          v-html="sItem.cixing"
-                        ></p>
+                      </div>
 
-                        <span
-                          v-if="
-                            showLang &&
+                      <div v-if="sItem.collocation" :style="{ width: data.col_width[4].value + 'px' }">
+                        <span class="collocation"><span>搭配:</span><b v-html="sItem.collocation"></b></span>
+                        <span v-if="showLang" class="">
+                          {{
                             multilingualTextList[getLang()] &&
                             multilingualTextList[getLang()][index] &&
-                            multilingualTextList[getLang()][index][1]
-                          "
-                          class="NPC-word-tab-common"
-                        >
-                          {{ multilingualTextList[getLang()][index][1] }}
+                            multilingualTextList[getLang()][index][3]
+                              ? multilingualTextList[getLang()][index][3]
+                              : ''
+                          }}
                         </span>
-                      </span>
-                      <span :style="{ width: data.col_width[3].value + 'px' }">
-                        <p class="NPC-word-tab-common NPC-word-tab-def" v-html="sItem.def_str"></p>
-                        <span
-                          v-if="
-                            showLang &&
+                      </div>
+                      <div v-if="sItem.liju_list" :style="{ width: data.col_width[5].value + 'px' }">
+                        <span class="collocation"
+                          ><span>例句:</span>
+                          <div>
+                            <b v-html="sItem.liju_list"></b>
+                          </div>
+                        </span>
+                        <span v-if="showLang" class="">
+                          {{
                             multilingualTextList[getLang()] &&
                             multilingualTextList[getLang()][index] &&
-                            multilingualTextList[getLang()][index][2]
-                          "
-                          class="NPC-word-tab-common"
-                        >
-                          {{ multilingualTextList[getLang()][index][2] }}
+                            multilingualTextList[getLang()][index][4]
+                              ? multilingualTextList[getLang()][index][4]
+                              : ''
+                          }}
                         </span>
-                      </span>
+                      </div>
                     </template>
-                    <div class="right-box">
-                      <span>
-                        <!-- :answerRecordList="data.answer.answer_list[index][sIndex].recordList" -->
-                        <SoundRecord
-                          :tm-index="index"
-                          :tms-index="sIndex"
-                          :task-model="isJudgingRightWrong ? 'ANSWER' : ''"
-                          :answer-record-list="[]"
-                          type="mini"
-                          class="luyin-box-wordphrase"
-                          :style="{ marginLeft: '8px' }"
-                          :attrib="data.unified_attrib"
-                          @handleWav="handleWav"
-                        />
-                      </span>
-                      <span v-if="isEnable(data.property.is_has_infor)">
-                        <img src="@/assets/detail-icon.png" class="detail-icon" @click="showDetail(sItem)" />
-                      </span>
-                    </div>
-
-                    <div v-if="sItem.collocation" :style="{ width: data.col_width[4].value + 'px' }">
-                      <span class="collocation"><span>搭配:</span><b v-html="sItem.collocation"></b></span>
-                      <span v-if="showLang" class="">
-                        {{
-                          multilingualTextList[getLang()] &&
-                          multilingualTextList[getLang()][index] &&
-                          multilingualTextList[getLang()][index][3]
-                            ? multilingualTextList[getLang()][index][3]
-                            : ''
-                        }}
-                      </span>
-                    </div>
-                    <div v-if="sItem.liju_list" :style="{ width: data.col_width[5].value + 'px' }">
-                      <span class="collocation"
-                        ><span>例句:</span>
-                        <div>
-                          <b v-html="sItem.liju_list"></b>
-                        </div>
-                      </span>
-                      <span v-if="showLang" class="">
-                        {{
-                          multilingualTextList[getLang()] &&
-                          multilingualTextList[getLang()][index] &&
-                          multilingualTextList[getLang()][index][4]
-                            ? multilingualTextList[getLang()][index][4]
-                            : ''
-                        }}
-                      </span>
-                    </div>
                   </div>
                 </li>
               </ul>
@@ -481,7 +786,7 @@
                     <div v-if="item.file_list[0]" class="item-image">
                       <el-image
                         :style="{
-                          width: '209px',
+                          width: '100%',
                           height:
                             item.new_word && (item.header_con || item.label)
                               ? '138px'
@@ -697,13 +1002,20 @@
             :ed="dataWord && dataWord.ed ? dataWord.ed : null"
             type="newWordDetail"
             :attrib="data.unified_attrib"
+            :isMobile="isMobile"
           />
         </div>
         <audio ref="newwordAudio"></audio>
       </div>
     </main>
     <el-dialog title="" :visible.sync="showCard" width="100%" class="wordCard-dialog" top="0">
-      <i class="el-icon-arrow-left" :class="[showIndex === 0 ? 'disabled' : '']" @click="changeShowIndex('-')"></i>
+      <i
+        class="el-icon-arrow-left"
+        :class="[showIndex === 0 ? 'disabled' : '']"
+        @click="changeShowIndex('-')"
+        v-if="!isMobile"
+      ></i>
+
       <writeTableZoom
         ref="writeTableZoom"
         :edit-cardflag="false"
@@ -714,14 +1026,41 @@
         :filt-cardflag="false"
         :attrib="data.unified_attrib"
         :url="data.audio_data.url"
+        :isMobile="isMobile"
       />
-      <p style="width: 100%; font-size: 20px; color: #fff; text-align: center">
-        {{ showIndex + 1 }} / {{ data.new_word_list.length }}
+      <p
+        style="
+          display: flex;
+          gap: 20px;
+          align-items: center;
+          justify-content: center;
+          width: 100%;
+          font-size: 20px;
+          color: #fff;
+        "
+      >
+        <i
+          class="el-icon-arrow-left"
+          :class="[showIndex === 0 ? 'disabled' : '', isMobile ? 'el-icon-arrow-left-phone' : '']"
+          @click="changeShowIndex('-')"
+          v-if="isMobile"
+        ></i>
+        {{ showIndex + 1 }} / {{ data.new_word_list.length
+        }}<i
+          class="el-icon-arrow-right"
+          :class="[
+            showIndex === data.new_word_list.length - 1 ? 'disabled' : '',
+            isMobile ? 'el-icon-arrow-right-phone' : '',
+          ]"
+          @click="changeShowIndex('+')"
+          v-if="isMobile"
+        ></i>
       </p>
       <i
         class="el-icon-arrow-right"
         :class="[showIndex === data.new_word_list.length - 1 ? 'disabled' : '']"
         @click="changeShowIndex('+')"
+        v-if="!isMobile"
       ></i>
     </el-dialog>
   </div>
@@ -1806,6 +2145,13 @@ export default {
     left: auto;
   }
 
+  .el-icon-arrow-left-phone,
+  .el-icon-arrow-right-phone {
+    position: initial;
+    margin-top: 0;
+    font-size: 30px;
+  }
+
   :deep .el-dialog__headerbtn {
     position: fixed;
     top: 20px;
@@ -1818,6 +2164,14 @@ export default {
     color: #f2f3f5;
   }
 }
+
+.content-box {
+  flex: 1;
+
+  .NPC-word-tab-common {
+    padding-left: 0 !important;
+  }
+}
 </style>
 
 <style lang="scss">

+ 64 - 1
src/views/book/courseware/preview/components/new_word/components/WordPhraseDetail.vue

@@ -1,5 +1,5 @@
 <template>
-  <div class="wordDetailModule wordDetailChs">
+  <div class="wordDetailModule wordDetailChs" :class="[isMobile ? 'wordDetailModule-phone' : '']">
     <div class="module-inner">
       <div v-if="data" class="top">
         <div class="operation">
@@ -244,6 +244,7 @@ export default {
     'bg',
     'ed',
     'attrib',
+    'isMobile',
   ],
   data() {
     // 这里存放数据
@@ -1347,4 +1348,66 @@ export default {
     }
   }
 }
+
+.wordDetailModule-phone {
+  .module-inner {
+    > div {
+      width: 100% !important;
+    }
+
+    .top {
+      .wordDetail {
+        .bwc-Strockplay {
+          box-sizing: border-box;
+          display: flex;
+          align-items: center;
+          justify-content: center;
+          min-width: 65px;
+          height: 65px;
+          margin-right: 10px;
+          margin-bottom: 16px;
+          overflow: hidden;
+          border-radius: 8px;
+
+          .strockplay {
+            position: relative;
+            display: flex;
+            align-items: center;
+            justify-content: center;
+
+            .collect-icon {
+              position: absolute;
+              right: 4px;
+              bottom: 4px;
+              width: 16px;
+              cursor: pointer;
+            }
+          }
+
+          .bwc-line {
+            width: 1px;
+            height: 65px;
+          }
+
+          .red-bg {
+            background: #ff5757;
+          }
+
+          .green-bg {
+            background: #24b99e;
+          }
+
+          .brown-bg {
+            background: #bd8865;
+          }
+        }
+      }
+    }
+
+    .strockplayRedInner {
+      width: 65px;
+      height: 65px;
+    }
+  }
+}
 </style>

+ 40 - 2
src/views/book/courseware/preview/components/new_word/components/writeTableZoom.vue

@@ -1,5 +1,12 @@
 <template>
-  <div v-if="data" :class="['writeTable', editCardflag ? '' : 'writeTable-preview writeTable-preview-' + totalNumber]">
+  <div
+    v-if="data"
+    :class="[
+      'writeTable',
+      editCardflag ? '' : 'writeTable-preview writeTable-preview-' + totalNumber,
+      isMobile ? 'writeTable-preview-phone' : '',
+    ]"
+  >
     <div class="writeTop" :class="{ flipped: isFlipped }">
       <div
         v-if="(isPreview && showLeft) || !isPreview"
@@ -24,7 +31,7 @@
         <div v-if="data.file_list[0]" class="item-image">
           <el-image
             :style="{
-              width: '568px',
+              width: '100%',
               height:
                 data.new_word && (data.header_con || data.label)
                   ? '340px'
@@ -228,6 +235,7 @@ export default {
     'filtCardflag',
     'attrib',
     'url',
+    'isMobile',
   ],
   data() {
     // 这里存放数据
@@ -311,6 +319,10 @@ export default {
 
   &-preview {
     width: 600px;
+
+    &-phone {
+      width: 100%;
+    }
   }
 
   .writeTop {
@@ -833,6 +845,32 @@ export default {
     transform: rotateY(180deg);
   }
 }
+
+.writeTable-preview-phone {
+  .writeTop {
+    min-height: 350px !important;
+  }
+
+  .right-preview {
+    padding: 20px 10px !important;
+  }
+
+  :deep .audio-wrapper {
+    width: 40px !important;
+    height: 40px !important;
+    padding: 10px !important;
+
+    .voice-play {
+      width: 20px !important;
+      height: 20px !important;
+    }
+  }
+
+  .strockplayInner {
+    width: 78px !important;
+    height: 78px !important;
+  }
+}
 </style>
 <style lang="scss">
 .writeTable {

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

@@ -88,7 +88,7 @@ export default {
     },
     selectAnswer(mark) {
       if (this.disabled) return;
--
+
       const list = this.answer.answer_list || [];
       const isSelected = list.includes(mark);