4 次代碼提交 41b4275616 ... d724d831a3

作者 SHA1 備註 提交日期
  dsy d724d831a3 Merge branch 'master' of http://60.205.254.193:3000/GCLS/eep_page 3 周之前
  dsy e282682214 优化代码 3 周之前
  dsy 41e916b315 Merge branch 'master' of http://60.205.254.193:3000/GCLS/eep_page 3 周之前
  dsy 6a3e86d546 问题修复 3 周之前

+ 1 - 1
.env

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

+ 1 - 1
package.json

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

+ 26 - 11
src/components/CommonPreview.vue

@@ -195,7 +195,7 @@
       :visible="visible"
       width="680px"
       :close-on-click-modal="false"
-      class="audit-dialog"
+      class="remark-dialog"
       @close="dialogClose('')"
     >
       <RichText
@@ -206,7 +206,7 @@
         page-from="audit"
       />
       <div slot="footer">
-        <el-button @click="dialogClose">取消</el-button>
+        <el-button @click="dialogClose('')">取消</el-button>
         <el-button type="primary" :loading="submit_loading" @click="addCoursewareAuditRemark(select_node)">
           确定
         </el-button>
@@ -426,7 +426,9 @@ export default {
     }
     this.getBookChapterStructExpandList();
     this.getBookUnifiedAttr();
-    this.getProjectInfo();
+    if (!this.isBook) {
+      this.getProjectInfo();
+    }
   },
   mounted() {
     this.calcDrawerPosition();
@@ -441,12 +443,19 @@ export default {
     getBookBaseInfo() {
       GetBookBaseInfo({ id: this.projectId }).then(({ book_info }) => {
         this.courseware_info = { ...this.courseware_info, ...book_info, book_name: book_info.name };
+        this.project = {
+          editor: book_info.editor,
+          cover_image_file_id: book_info.cover_image_file_id,
+          cover_image_file_url: book_info.cover_image_file_url,
+        };
       });
     },
 
     getProjectInfo() {
       GetProjectInfo({ id: this.projectId }).then(({ project_info }) => {
-        this.project = project_info;
+        if (project_info.cover_image_file_url) {
+          this.project = project_info;
+        }
       });
     },
 
@@ -1252,16 +1261,22 @@ $total-width: $courseware-width + $courseware-left-margin + $courseware-right-ma
   .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);
+    }
   }
 }
 </style>

+ 0 - 2
src/components/RichText.vue

@@ -65,7 +65,6 @@ export default {
     Editor,
     MathDialog,
   },
-  inject: ['getBookUnifiedAttr'],
   inheritAttrs: false,
   props: {
     inline: {
@@ -142,7 +141,6 @@ export default {
         left: 0,
       },
       id: getRandomNumber(),
-      bookUnifiedAttr: this.getBookUnifiedAttr(),
       init: {
         content_style: `
           mjx-container, mjx-container * {

+ 1 - 1
src/views/book/courseware/create/components/base/common/UploadFile.vue

@@ -428,7 +428,7 @@ export default {
         let obj = {
           xuhao: '',
           isEdit: false,
-          file_name: file_name,
+          file_name,
         };
         this.$set(this.content.file_info, file_id, obj);
       }

+ 1 - 1
src/views/book/courseware/preview/components/h5_games/H5GamesPreview.vue

@@ -39,7 +39,7 @@ export default {
   },
   watch: {
     'data.file_list.length': {
-      handler(val) {
+      handler() {
         this.initData();
       },
     },

+ 13 - 15
src/views/book/courseware/preview/components/new_word/NewWordPreview.vue

@@ -9,7 +9,7 @@
             backgroundColor:
               data.unified_attrib && data.unified_attrib.topic_color ? data.unified_attrib.topic_color : '',
           }" -->
-        <div class="topTitle" v-if="data.title_con">
+        <div v-if="data.title_con" class="topTitle">
           <div class="NPC-top-left">
             <span class="NPC-topTitle-text" v-html="data.title_con"></span>
             <span v-if="showLang" class="NPC-topTitle-text">
@@ -22,12 +22,12 @@
             <SvgIcon
               icon-class="icon-full"
               size="24"
-              @click="showCard = true"
               :style="{
                 color:
                   data.unified_attrib && data.unified_attrib.topic_color ? data.unified_attrib.topic_color : '#de4444',
                 cursor: 'pointer',
               }"
+              @click="showCard = true"
             />
           </div>
 
@@ -36,11 +36,11 @@
               v-if="is_list"
               icon-class="icon-card"
               size="24"
-              @click="is_list = false"
               :style="{
                 color:
                   data.unified_attrib && data.unified_attrib.topic_color ? data.unified_attrib.topic_color : '#de4444',
               }"
+              @click="is_list = false"
             />
             <!-- <img v-if="is_list" src="@/assets/newWord_list.png" alt="" @click="is_list = false" /> -->
             <!-- <img v-else src="@/assets/newWord_tile.png" alt="" @click="is_list = true" /> -->
@@ -48,11 +48,11 @@
               v-else
               icon-class="icon-park"
               size="24"
-              @click="is_list = true"
               :style="{
                 color:
                   data.unified_attrib && data.unified_attrib.topic_color ? data.unified_attrib.topic_color : '#de4444',
               }"
+              @click="is_list = true"
             />
             <!-- <span class="NPC-top-right-text" @click="handleChangeTab">{{ wordShow ? '收起' : '展开' }}</span>
             <img v-if="wordShow" src="@/assets/down.png" alt="" @click="handleChangeTab" />
@@ -689,13 +689,13 @@
     <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>
       <writeTableZoom
-        :editCardflag="false"
-        :data="data.new_word_list[showIndex]"
-        :pageNumber="showIndex"
-        :totalNumber="0"
-        :isPreview="true"
-        :filtCardflag="false"
         ref="writeTableZoom"
+        :edit-cardflag="false"
+        :data="data.new_word_list[showIndex]"
+        :page-number="showIndex"
+        :total-number="0"
+        :is-preview="true"
+        :filt-cardflag="false"
         :attrib="data.unified_attrib"
         :url="data.audio_data.url"
       />
@@ -766,7 +766,7 @@ export default {
       multilingualTextList: {}, // 多语言对应的切割后的翻译
       titleTrans: {},
       width: 0,
-      showCard: false, //卡片放大
+      showCard: false, // 卡片放大
       showIndex: 0, // 卡片放大索引
     };
   },
@@ -1018,10 +1018,8 @@ export default {
         if (this.showIndex !== this.data.new_word_list.length - 1) {
           this.showIndex++;
         }
-      } else {
-        if (this.showIndex !== 0) {
-          this.showIndex--;
-        }
+      } else if (this.showIndex !== 0) {
+        this.showIndex--;
       }
       this.$refs.writeTableZoom.changeRota();
     },

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

@@ -1,10 +1,10 @@
 <template>
-  <div :class="['writeTable', editCardflag ? '' : 'writeTable-preview writeTable-preview-' + totalNumber]" v-if="data">
-    <div class="writeTop" v-bind:class="{ flipped: isFlipped }">
+  <div v-if="data" :class="['writeTable', editCardflag ? '' : 'writeTable-preview writeTable-preview-' + totalNumber]">
+    <div class="writeTop" :class="{ flipped: isFlipped }">
       <div
+        v-if="(isPreview && showLeft) || !isPreview"
         class="left left-preview"
         :class="[data.file_list[0] ? '' : 'left-big']"
-        v-if="(isPreview && showLeft) || !isPreview"
         :style="{
           borderColor: attrib && attrib.topic_color ? attrib.topic_color : '',
           padding:
@@ -21,7 +21,7 @@
             data.label
           }}</label>
         </div>
-        <div class="item-image" v-if="data.file_list[0]">
+        <div v-if="data.file_list[0]" class="item-image">
           <el-image
             :style="{
               width: '568px',
@@ -37,16 +37,16 @@
             fit="contain"
           />
         </div>
-        <h2 :class="['con-preview', data.file_list[0] ? '' : 'con-preview-big']" v-if="data.new_word">
+        <h2 v-if="data.new_word" :class="['con-preview', data.file_list[0] ? '' : 'con-preview-big']">
           {{ data.new_word }}
         </h2>
 
-        <a class="overturn-btn" v-if="isPreview" @click="changeShowLeft"><i class="el-icon-refresh"></i></a>
+        <a v-if="isPreview" class="overturn-btn" @click="changeShowLeft"><i class="el-icon-refresh"></i></a>
       </div>
       <div
+        v-if="(isPreview && !showLeft) || !isPreview"
         class="right right-preview left-preview"
         :class="[isPreview ? 'right-preview-rota' : '']"
-        v-if="(isPreview && !showLeft) || !isPreview"
         :style="{
           borderColor: attrib && attrib.topic_color ? attrib.topic_color : '',
           paddingTop: data.collocation || data.liju_list || data.definition_list ? '' : '80px',
@@ -65,7 +65,7 @@
             columnGap: '16px',
           }"
         >
-          <div style="width: max-content" v-if="data.hz_info.length > 0">
+          <div v-if="data.hz_info.length > 0" style="width: max-content">
             <AudioPlay
               v-if="data.mp3_list"
               :style="{
@@ -105,30 +105,30 @@
               </div>
             </template>
             <p
-              :style="{ color: attrib && attrib.topic_color ? attrib.topic_color : '' }"
               v-if="data.pinyin && data.pinyin.split(' ').length === 1"
+              :style="{ color: attrib && attrib.topic_color ? attrib.topic_color : '' }"
               class="pinyin-box"
             >
               {{ data.pinyin }}
             </p>
             <div class="hz-box">
-              <div class="hz-item" v-for="(itemh, indexh) in data.hz_info" :key="indexh">
+              <div v-for="(itemh, indexh) in data.hz_info" :key="indexh" class="hz-item">
                 <p
-                  :style="{ color: attrib && attrib.topic_color ? attrib.topic_color : '' }"
                   v-if="data.pinyin && data.pinyin.split(' ').length > 1"
+                  :style="{ color: attrib && attrib.topic_color ? attrib.topic_color : '' }"
                 >
                   {{ data.pinyin.split(' ')[indexh] ? data.pinyin.split(' ')[indexh] : '' }}
                 </p>
                 <Strockplay
-                  className="adult-strockplay"
+                  class-name="adult-strockplay"
                   :Book_text="itemh.con"
-                  :playStorkes="true"
-                  :strokePlayColor="attrib && attrib.topic_color ? attrib.topic_color : '#f44444'"
-                  :strokeColor="'#000000'"
-                  :palyWidth="'24px'"
+                  :play-storkes="true"
+                  :stroke-play-color="attrib && attrib.topic_color ? attrib.topic_color : '#f44444'"
+                  :stroke-color="'#000000'"
+                  :paly-width="'24px'"
                   :BoxbgType="'0'"
-                  :curItem="itemh.hzDetail.hz_json"
-                  :targetDiv="'writeTops-item-zoom-' + pageNumber + '-' + indexh + '-' + itemh.con + '-' + totalNumber"
+                  :cur-item="itemh.hzDetail.hz_json"
+                  :target-div="'writeTops-item-zoom-' + pageNumber + '-' + indexh + '-' + itemh.con + '-' + totalNumber"
                   :class="[indexh !== 0 ? 'writeTop-item-noLeft' : '']"
                   class="writeTop-item"
                   :style="{ borderColor: attrib && attrib.topic_color ? attrib.topic_color : '#f44444' }"
@@ -138,8 +138,8 @@
           </div>
 
           <div
-            class="definition-box"
             v-if="(data.collocation || data.liju_list) && data.new_word.length < 4"
+            class="definition-box"
             :style="{
               flex: '1',
               marginTop: data.mp3_list ? '104px' : '36px',
@@ -156,13 +156,13 @@
           </div>
         </div>
         <div
+          v-if="data.collocation || data.liju_list || data.definition_list || data.cixing"
           class="definition-box"
           :style="{
             width:
               !(data.collocation || data.liju_list) && data.new_word.length < 4 ? data.hz_info.length * 98 + 'px' : '',
             margin: !(data.collocation || data.liju_list) && data.new_word.length < 4 ? '16px auto 0 auto' : '',
           }"
-          v-if="data.collocation || data.liju_list || data.definition_list || data.cixing"
         >
           <template v-if="!(data.collocation || data.liju_list) || data.new_word.length >= 4">
             <div v-if="data.cixing">
@@ -183,7 +183,7 @@
             <p v-html="data.liju_list"></p>
           </div>
         </div>
-        <a class="overturn-btn" v-if="isPreview" @click="changeShowLeft"><i class="el-icon-refresh"></i></a>
+        <a v-if="isPreview" class="overturn-btn" @click="changeShowLeft"><i class="el-icon-refresh"></i></a>
       </div>
     </div>
     <div v-if="url" class="aduioLine-box" style="height: 0; margin: 0; overflow: hidden">
@@ -202,13 +202,13 @@
 </template>
 
 <script>
-//这里可以导入其它文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
+// 这里可以导入其它文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
 import AudioPlay from './AudioPlay.vue';
 import Strockplay from './Strockplay.vue';
 import AudioLine from '../../voice_matrix/components/AudioLine.vue';
 
 export default {
-  //import引入的组件需要注入到对象中才能使用
+  // import引入的组件需要注入到对象中才能使用
   components: {
     Strockplay,
     AudioPlay,
@@ -226,7 +226,7 @@ export default {
     'url',
   ],
   data() {
-    //这里存放数据
+    // 这里存放数据
     return {
       loading: false,
       isFlipped: false,
@@ -235,12 +235,12 @@ export default {
       stopAudioS: false,
     };
   },
-  //计算属性 类似于data概念
+  // 计算属性 类似于data概念
   computed: {},
-  //监控data中数据变化
+  // 监控data中数据变化
   watch: {
     editCardflag: {
-      handler: function (val, oldVal) {
+      handler(val, oldVal) {
         if (val != oldVal) {
           this.showLeft = true;
           this.isFlipped = false;
@@ -249,14 +249,24 @@ export default {
       deep: true,
     },
     filtCardflag: {
-      handler: function (val, oldVal) {
+      handler(val, oldVal) {
         this.showLeft = true;
         this.isFlipped = false;
       },
       deep: true,
     },
   },
-  //方法集合
+  // 生命周期 - 创建完成(可以访问当前this实例)
+  created() {},
+  // 生命周期 - 挂载完成(可以访问DOM元素)
+  mounted() {},
+  // 生命周期-挂载之前
+  beforeMount() {},
+  // 生命周期-更新之后
+  updated() {},
+  // 如果页面有keep-alive缓存功能,这个函数会触发
+  activated() {},
+  // 方法集合
   methods: {
     // 翻面
     changeShowLeft() {
@@ -277,24 +287,14 @@ export default {
       this.curTime = curTime * 1000;
     },
   },
-  //生命周期 - 创建完成(可以访问当前this实例)
-  created() {},
-  //生命周期 - 挂载完成(可以访问DOM元素)
-  mounted() {},
-  //生命周期-创建之前
+  // 生命周期-创建之前
   beforeCreated() {},
-  //生命周期-挂载之前
-  beforeMount() {},
-  //生命周期-更新之前
+  // 生命周期-更新之前
   beforUpdate() {},
-  //生命周期-更新之后
-  updated() {},
-  //生命周期-销毁之前
+  // 生命周期-销毁之前
   beforeDestory() {},
-  //生命周期-销毁完成
+  // 生命周期-销毁完成
   destoryed() {},
-  //如果页面有keep-alive缓存功能,这个函数会触发
-  activated() {},
 };
 </script>
 <style lang="scss" scoped>

+ 2 - 2
src/views/create_project/createProject.vue

@@ -108,8 +108,8 @@
         <el-date-picker
           v-model="project.plan_publish_date"
           type="date"
-          format="YYYY-MM-DD"
-          value-format="YYYY-MM-DD"
+          format="yyyy-MM-dd"
+          value-format="yyyy-MM-dd"
           placeholder="选择日期"
         />
       </el-form-item>