2
0

5 Коммиты 48c856ec6a ... b4065683b3

Автор SHA1 Сообщение Дата
  dsy b4065683b3 使用 curToolbarIcon 判断为后续做准备 6 дней назад
  dsy a1b50b2ebd Merge branch 'master' of http://60.205.254.193:3000/GCLS/eep_page 6 дней назад
  dsy 084968fb19 填空题修改 6 дней назад
  zq 6b2141a0a0 Merge branch 'master' of http://gcls-git.helxsoft.cn/GCLS/eep_page 6 дней назад
  zq 61cb6a9c5c 右侧资源直接显示在内容框里 6 дней назад

+ 1 - 1
.env

@@ -11,4 +11,4 @@ VUE_APP_BookWebSI = '/GCLSBookWebSI/ServiceInterface'
 VUE_APP_EepServer = '/EEPServer/SI'
 
 #version
-VUE_APP_VERSION = '2025.11.13'
+VUE_APP_VERSION = '2025.11.17'

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "eep_page",
-  "version": "2025.11.13",
+  "version": "2025.11.17",
   "private": true,
   "main": "main.js",
   "description": "智慧梧桐数字教材编辑器",

+ 105 - 115
src/components/CommonPreview.vue

@@ -136,52 +136,41 @@
           <template v-if="curToolbarIcon === 'audit'">
             <AuditRemark :remark-list="remark_list" :is-audit="isShowAudit" @deleteRemarks="deleteRemarks" />
           </template>
-          <el-drawer
-            custom-class="custom-drawer"
-            :visible="drawerType.length > 0"
-            :with-header="false"
-            :modal="false"
-            size="240"
-            direction="ltr"
-            :style="drawerStyle"
-          >
-            <div class="infinite-list-wrapper">
-              <h5>{{ drawerTitle }}</h5>
-              <ul
-                v-infinite-scroll="loadMore"
-                class="scroll-container"
-                infinite-scroll-disabled="disabled"
-                :infinite-scroll-immediate="false"
+          <div v-if="['image', 'audio', 'video'].includes(curToolbarIcon)" class="resource_box">
+            <h5>{{ drawerTitle }}</h5>
+            <div style="height: 40px"></div>
+            <ul
+              v-infinite-scroll="loadMore"
+              class="scroll-container"
+              infinite-scroll-disabled="disabled"
+              :infinite-scroll-immediate="false"
+            >
+              <li
+                v-for="(item, index) in file_list"
+                :key="index"
+                class="list-item"
+                @click="handleFileClick(item?.courseware_id, item?.component_id)"
               >
-                <li
-                  v-for="(item, index) in file_list"
-                  :key="index"
-                  class="list-item"
-                  @click="handleFileClick(item?.courseware_id, item?.component_id)"
-                >
-                  <template v-if="parseInt(drawerType) === 0">
-                    <el-image :src="item.file_url" fit="contain" />
-                    <!-- <span class="text-box">{{ item.file_name.slice(0, item.file_name.lastIndexOf('.')) }}</span> -->
-                  </template>
-                  <template v-else-if="parseInt(drawerType) === 1">
-                    <AudioPlay
-                      view-size="middle"
-                      :file-id="item.file_id"
-                      :file-name="item.file_name.slice(0, item.file_name.lastIndexOf('.'))"
-                      :show-slider="true"
-                      :audio-index="index"
-                    />
-                  </template>
-                  <template v-else-if="parseInt(drawerType) === 2">
-                    <VideoPlay view-size="small" :file-id="item.file_id" :video-index="index" />
-                    <!-- <span class="text-box">{{ item.file_name.slice(0, item.file_name.lastIndexOf('.')) }}</span> -->
-                  </template>
-                </li>
-              </ul>
-              <p v-if="loading">加载中...</p>
-              <p v-if="noMore">没有更多了</p>
-            </div>
-          </el-drawer>
+                <template v-if="parseInt(drawerType) === 0">
+                  <el-image :src="item.file_url" fit="contain" />
+                </template>
+                <template v-else-if="parseInt(drawerType) === 1">
+                  <AudioPlay
+                    view-size="middle"
+                    :file-id="item.file_id"
+                    :file-name="item.file_name.slice(0, item.file_name.lastIndexOf('.'))"
+                    :show-slider="true"
+                    :audio-index="index"
+                  />
+                </template>
+                <template v-else-if="parseInt(drawerType) === 2">
+                  <VideoPlay view-size="small" :file-id="item.file_id" :video-index="index" />
+                </template>
+              </li>
+            </ul>
+            <p v-if="loading">加载中...</p>
+            <p v-if="noMore">没有更多了</p>
+          </div>
         </div>
 
         <div class="back-top" @click="backTop">
@@ -365,7 +354,7 @@ export default {
       cur_page: 1,
       file_list: [],
       total_count: 0,
-      loading: true,
+      loading: false,
       lastLoadTime: 0,
       minLoadInterval: 3 * 1000,
       isShowGroup: false,
@@ -677,7 +666,7 @@ export default {
       }
       // 重置所有加载状态
       this.resetLoadState();
-      this.drawerType = type; // 假设这是你的类型变量
+      this.drawerType = type;
       this.$nextTick(() => {
         // 确保DOM更新后触发加载
         this.loadMore();
@@ -718,7 +707,7 @@ export default {
         .then(({ total_count, resource_list }) => {
           this.total_count = total_count;
           // 记录加载前的滚动高度
-          const scrollContainer = this.$el.querySelector('.el-drawer__body');
+          const scrollContainer = this.$el.querySelector('.scroll-container');
           const isAtBottom = this.isScrollAtBottom(scrollContainer);
 
           this.file_list = this.cur_page === 1 ? resource_list : [...this.file_list, ...resource_list];
@@ -1168,60 +1157,57 @@ $total-width: $courseware-width + $courseware-left-margin + $courseware-right-ma
         flex: 1;
         background-color: #fff;
 
-        :deep .el-drawer {
-          width: 240px !important;
+        .resource_box {
+          height: 100%;
+          overflow-y: auto;
           border: 1px solid #e5e5e5;
-          transition: none !important;
-          animation: none !important;
-
-          .el-drawer__body {
-            height: calc(100vh - 200px);
-            overflow-y: auto;
-
-            h5 {
-              padding: 0 5px;
-              margin: 0;
-              font-size: 18px;
-              line-height: 40px;
-              background: #f2f3f5;
-            }
 
-            .scroll-container {
-              display: flex;
-              flex-direction: column;
-              row-gap: 8px;
-              margin: 6px;
+          h5 {
+            position: fixed;
+            z-index: 999;
+            width: 240px;
+            padding: 0 5px;
+            margin: 0;
+            font-size: 18px;
+            line-height: 40px;
+            background: #f2f3f5;
+          }
 
-              .list-item {
-                display: flex;
-                align-items: center;
-                cursor: pointer;
-                border: 1px solid #ccc;
-                border-radius: 8px;
+          .scroll-container {
+            display: flex;
+            flex-direction: column;
+            row-gap: 8px;
+            margin: 6px;
 
-                :deep .el-slider {
-                  .el-slider__runway {
-                    background-color: #eee;
-                  }
-                }
+            .list-item {
+              display: flex;
+              align-items: center;
+              cursor: pointer;
+              border: 1px solid #ccc;
+              border-radius: 8px;
 
-                .el-image {
-                  display: flex;
-                  width: 100%;
-                  min-width: 100%;
-                  height: 90px;
-                  background-color: #ccc;
-                  border-radius: 8px;
+              :deep .el-slider {
+                .el-slider__runway {
+                  background-color: #eee;
                 }
+              }
 
-                .video-play {
-                  width: 100%;
-                  min-width: 100%;
-                }
+              .el-image {
+                display: flex;
+                width: 100%;
+                min-width: 100%;
+                height: 90px;
+                background-color: #ccc;
+                border-radius: 8px;
+              }
 
-                .text-box {
-                  word-break: break-word;
-                }
+              .video-play {
+                width: 100%;
+                min-width: 100%;
+              }
+
+              .text-box {
+                word-break: break-word;
               }
             }
           }
@@ -1248,34 +1234,38 @@ $total-width: $courseware-width + $courseware-left-margin + $courseware-right-ma
   }
 }
 
-:deep .scroll-container .audio-wrapper .audio-middle {
-  width: 210px !important;
-  padding: 6px 8px !important;
-  border: none;
-  border-radius: 8px;
+:deep .scroll-container .audio-wrapper {
+  width: 100% !important;
 
-  .audio-name {
-    text-align: left;
-  }
+  .audio-middle {
+    width: 100% !important;
+    padding: 6px 8px !important;
+    border: none;
+    border-radius: 8px;
 
-  .slider-area {
-    column-gap: 8px !important;
-  }
+    .audio-name {
+      text-align: left;
+    }
 
-  :deep .remark-dialog {
-    .el-dialog__body {
-      padding: 5px 20px;
+    .slider-area {
+      column-gap: 8px !important;
     }
-  }
 
-  :deep .audit-dialog {
-    .el-dialog__body {
-      height: calc(100vh - 260px);
-      padding: 5px 20px;
+    :deep .remark-dialog {
+      .el-dialog__body {
+        padding: 5px 20px;
+      }
     }
 
-    .mind-map-container .mind-map {
-      height: calc(100vh - 310px);
+    :deep .audit-dialog {
+      .el-dialog__body {
+        height: calc(100vh - 260px);
+        padding: 5px 20px;
+      }
+
+      .mind-map-container .mind-map {
+        height: calc(100vh - 310px);
+      }
     }
   }
 }

+ 2 - 0
src/views/book/courseware/create/components/base/3d_model/3DModel.vue

@@ -47,6 +47,8 @@ export default {
             : file_list[0].file_name.split('.').pop().toLowerCase();
         if (suffixName === 'obj') {
           this.limit = 2;
+        } else {
+          this.limit = 1;
         }
       }
 

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

@@ -53,7 +53,7 @@ export function getFillProperty() {
     fill_type: fillTypeList[0].value,
     sn_position: serialNumberPositionList[3].value,
     sn_display_mode: displayList[0].value,
-    arrange_type: arrangeTypeList[0].value,
+    arrange_type: arrangeTypeList[1].value,
     audio_position: audioPositionList[0].value,
     audio_generation_method: audioGenerationMethodList[0].value,
     fill_font: fillFontList[0].value,

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

@@ -215,7 +215,7 @@
               </span> -->
             </div>
             <el-collapse-transition>
-              <div class="liju" v-show="wordShow">
+              <div v-show="wordShow" class="liju">
                 <div v-for="(item, i) in list1" :key="i">
                   <div>{{ i + 1 }}.</div>
                   <div>
@@ -242,7 +242,7 @@
               </span> -->
             </div>
             <el-collapse-transition>
-              <div class="liju" v-show="wordShow2">
+              <div v-show="wordShow2" class="liju">
                 <div v-for="(item, i) in list2" :key="i">
                   <div>{{ list1.length + i + 1 }}.</div>
                   <div>
@@ -268,7 +268,7 @@
               </span> -->
             </div>
             <el-collapse-transition>
-              <div class="liju" v-if="wordShow3">
+              <div v-if="wordShow3" class="liju">
                 <div v-for="(item, i) in list3" :key="i">
                   <div>{{ list1.length + list2.length + i + 1 }}.</div>
                   <div>