dsy преди 5 месеца
родител
ревизия
875b64451e
променени са 23 файла, в които са добавени 294 реда и са изтрити 104 реда
  1. 1 1
      .env
  2. 1 1
      package.json
  3. 28 9
      src/components/RichText.vue
  4. 26 0
      src/views/book/courseware/create/components/CreateCanvas.vue
  5. 103 0
      src/views/book/courseware/create/components/FullTextSettings.vue
  6. 3 3
      src/views/book/courseware/create/components/base/rich_text/RichText.vue
  7. 2 2
      src/views/book/courseware/create/components/base/stem/Stem.vue
  8. 20 5
      src/views/book/courseware/create/components/common/ModuleMixin.js
  9. 17 12
      src/views/book/courseware/create/components/question/article/NewWord.vue
  10. 4 0
      src/views/book/courseware/create/components/question/article/Notes.vue
  11. 39 44
      src/views/book/courseware/create/components/question/dialogue_article/Article.vue
  12. 1 0
      src/views/book/courseware/create/components/question/fill/Fill.vue
  13. 1 1
      src/views/book/courseware/create/components/question/input/Input.vue
  14. 1 1
      src/views/book/courseware/create/components/question/judge/Judge.vue
  15. 1 1
      src/views/book/courseware/create/components/question/matching/Matching.vue
  16. 24 20
      src/views/book/courseware/create/components/question/new_word/NewWord.vue
  17. 4 0
      src/views/book/courseware/create/components/question/notes/Notes.vue
  18. 6 0
      src/views/book/courseware/create/components/question/other_word/OtherWord.vue
  19. 1 1
      src/views/book/courseware/create/components/question/select/Select.vue
  20. 1 1
      src/views/book/courseware/create/components/question/sort/Sort.vue
  21. 1 1
      src/views/book/courseware/create/components/question/table/Table.vue
  22. 5 0
      src/views/book/courseware/create/index.vue
  23. 4 1
      src/views/personal_workbench/edit_task/edit/index.vue

+ 1 - 1
.env

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

+ 1 - 1
package.json

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

+ 28 - 9
src/components/RichText.vue

@@ -331,19 +331,38 @@ export default {
     },
     /**
      * 设置整体富文本格式
-     * @param {string} text 格式名称
+     * @param {string} type 格式名称
+     * @param {string} val 格式值
      */
-    setRichFormat(text) {
+    setRichFormat(type, val) {
       let editor = tinymce.get(this.id);
+      if (!editor) return;
+
       editor.execCommand('SelectAll');
-      if (text === 'bold') {
-        if (this.isAllBold()) {
-          editor.formatter.remove('bold');
-        } else {
-          editor.formatter.apply('bold');
+
+      switch (type) {
+        case 'bold': {
+          if (this.isAllBold()) {
+            editor.formatter.remove('bold');
+          } else {
+            editor.formatter.apply('bold');
+          }
+          break;
+        }
+        case 'fontSize':
+        case 'fontFamily': {
+          editor.formatter.register('my_customformat', {
+            inline: 'span',
+            styles: { [type]: val },
+          });
+
+          editor.formatter.apply('my_customformat');
+          break;
+        }
+
+        default: {
+          editor.formatter.toggle(type);
         }
-      } else {
-        editor.formatter.toggle(text);
       }
       editor.selection.collapse(false);
     },

+ 26 - 0
src/views/book/courseware/create/components/CreateCanvas.vue

@@ -116,6 +116,12 @@
       :row-list="data.row_list"
       @computedMoveData="computedMoveData"
     />
+
+    <FullTextSettings
+      :visible.sync="visibleFullTextSettings"
+      :settings="data.full_text_settings"
+      @fullTextSettings="fullTextSettings"
+    />
   </main>
 </template>
 
@@ -126,11 +132,13 @@ import { ContentSaveCoursewareContent, ContentGetCoursewareContent } from '@/api
 import _ from 'lodash';
 
 import PreviewEdit from './PreviewEdit.vue';
+import FullTextSettings from '../components/FullTextSettings.vue';
 
 export default {
   name: 'CreateCanvas',
   components: {
     PreviewEdit,
+    FullTextSettings,
   },
   inject: ['getCurSettingId'],
   props: {
@@ -155,6 +163,12 @@ export default {
         },
         // 组件列表
         row_list: [],
+        // 全文设置
+        full_text_settings: {
+          view_pinyin: 'false',
+          fontfamily: 'Arial,Helvetica,sans-serif',
+          fontsize: '12pt',
+        },
       },
       rowCheckList: {}, // 行复选框列表
       content_group_row_list: [], // 行分组id列表
@@ -172,6 +186,7 @@ export default {
         clientY: 0,
         dragging: false,
       },
+      visibleFullTextSettings: false,
     };
   },
   computed: {
@@ -329,6 +344,17 @@ export default {
     changeData() {
       this.$emit('changeData');
     },
+    showFullTextSettings() {
+      this.visibleFullTextSettings = true;
+    },
+    fullTextSettings(data) {
+      this.$refs.component.forEach((item) => {
+        item.updateProperty('view_pinyin', data.view_pinyin);
+        item.updateRichTextProperty('fontFamily', data.fontFamily);
+        item.updateRichTextProperty('fontSize', data.fontSize);
+      });
+      this.data.full_text_settings = data;
+    },
     /**
      * 保存课件内容
      * @param {string} type 类型

+ 103 - 0
src/views/book/courseware/create/components/FullTextSettings.vue

@@ -0,0 +1,103 @@
+<template>
+  <el-dialog
+    custom-class="full-text-settings"
+    width="400px"
+    :close-on-click-modal="false"
+    :visible="visible"
+    :before-close="handleClose"
+    title="全文设置"
+  >
+    <el-form ref="form" :model="formData" label-width="80px">
+      <el-form-item label="字体">
+        <el-select v-model="formData.fontFamily" placeholder="请选择字体" style="width: 100%">
+          <el-option label="楷体" value="楷体,微软雅黑" />
+          <el-option label="黑体" value="黑体,微软雅黑" />
+          <el-option label="宋体" value="宋体,微软雅黑" />
+          <el-option label="Arial" value="Arial,Helvetica,sans-serif" />
+          <el-option label="Times New Roman" value="Times New Roman,times,serif" />
+          <el-option label="拼音" value="League" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="字号">
+        <el-select v-model="formData.fontSize" placeholder="请选择字号" style="width: 100%">
+          <el-option v-for="size in fontSizeList" :key="size" :label="size" :value="size" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="全文拼音">
+        <el-switch v-model="formData.view_pinyin" active-value="true" inactive-value="false" />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" @click="confirm">确定</el-button>
+        <el-button @click="handleClose">取消</el-button>
+      </el-form-item>
+    </el-form>
+  </el-dialog>
+</template>
+
+<script>
+export default {
+  name: 'FullTextSettings',
+  props: {
+    visible: {
+      type: Boolean,
+      required: true,
+    },
+    settings: {
+      type: Object,
+      required: true,
+    },
+  },
+  data() {
+    return {
+      // 8pt 到 36pt
+      fontSizeList: [
+        '8pt',
+        '10pt',
+        '12pt',
+        '14pt',
+        '16pt',
+        '18pt',
+        '20pt',
+        '22pt',
+        '24pt',
+        '26pt',
+        '28pt',
+        '30pt',
+        '32pt',
+        '34pt',
+        '36pt',
+      ],
+      formData: {
+        view_pinyin: 'false',
+        fontFamily: 'Arial,Helvetica,sans-serif',
+        fontSize: '12pt',
+      },
+    };
+  },
+  watch: {
+    visible(val) {
+      if (val) {
+        this.formData = { ...this.settings };
+      }
+    },
+  },
+  methods: {
+    handleClose() {
+      this.$emit('update:visible', false);
+    },
+    confirm() {
+      this.$emit('update:visible', false);
+      this.$emit('fullTextSettings', this.formData);
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.full-text-settings {
+  padding: 0;
+
+  .el-form {
+  }
+}
+</style>

+ 3 - 3
src/views/book/courseware/create/components/base/rich_text/RichText.vue

@@ -3,7 +3,7 @@
     <template #content>
       <div :style="{ width: data.note_list.length > 0 ? '' : '100%' }">
         <RichText
-          ref="rich"
+          ref="richText"
           v-model="data.content"
           :font-size="18"
           :is-view-note="true"
@@ -110,7 +110,7 @@ export default {
       }
     },
     showSetting() {
-      this.richId = this.$refs.rich.id;
+      this.richId = this.$refs.richText.id;
       this.$emit('showSetting', this.data.property, this.data.type, this.id, {
         richId: this.richId,
       });
@@ -157,7 +157,7 @@ export default {
       for (let i = 0; i < text.length; i++) {
         const char = text.charCodeAt(i);
         hash = (hash << 5) - hash + char;
-        hash = hash & hash; // 转换为32位整数
+        hash &= hash; // 转换为32位整数
       }
       return hash.toString(36); // 转为base36缩短长度
     },

+ 2 - 2
src/views/book/courseware/create/components/base/stem/Stem.vue

@@ -2,7 +2,7 @@
   <ModuleBase :type="data.type">
     <template #content>
       <RichText
-        ref="rich"
+        ref="richText"
         v-model="data.content"
         :font-size="18"
         placeholder="输入题干"
@@ -62,7 +62,7 @@ export default {
   },
   methods: {
     showSetting() {
-      this.richId = this.$refs.rich.id;
+      this.richId = this.$refs.richText.id;
       this.$emit('showSetting', this.data.property, this.data.type, this.id, {
         richId: this.richId,
       });

+ 20 - 5
src/views/book/courseware/create/components/common/ModuleMixin.js

@@ -98,12 +98,27 @@ const mixin = {
       this.$emit('showSetting', this.data.property, this.data.type, this.id);
     },
     /**
-     * @description 更新属性
-     * @param {object} setting 属性
-     * @param {string} type 属性类型
+     * @description 更新property属性
+     * @param {String} type 类型
+     * @param {Object} attr 属性
      */
-    updateSetting(property) {
-      this.data.property = property;
+    updateProperty(type, attr) {
+      this.$set(this.data.property, type, attr);
+    },
+    /**
+     * 批量设置富文本样式
+     * @param {Object} type 类型
+     * @param {Object} attr 属性
+     */
+    updateRichTextProperty(type, attr) {
+      let richTextRefs = this.$refs.richText;
+      if (!richTextRefs) return;
+      if (!Array.isArray(richTextRefs)) {
+        richTextRefs = [richTextRefs];
+      }
+      richTextRefs?.forEach((richText) => {
+        richText.setRichFormat(type, attr);
+      });
     },
     handleComponentMove(data) {
       this.componentMove({ ...data, id: this.id });

+ 17 - 12
src/views/book/courseware/create/components/question/article/NewWord.vue

@@ -2,6 +2,7 @@
   <div>
     <label>标题:</label>
     <RichText
+      ref="richText"
       v-model="data.title_con"
       :inline="true"
       :placeholder="'输入标题'"
@@ -58,18 +59,18 @@
             <span class="adult-book-lable">字幕时间:</span>
             <div style="display: flex; align-items: center">
               <el-input
+                v-model.trim="data.lrc_arr[i].bg"
                 class="adult-book-input"
                 style="width: 50px"
-                v-model.trim="data.lrc_arr[i].bg"
                 maxlength="200"
-              ></el-input>
+              />
               ~
               <el-input
+                v-model.trim="data.lrc_arr[i].ed"
                 class="adult-book-input"
                 style="width: 50px"
-                v-model.trim="data.lrc_arr[i].ed"
                 maxlength="200"
-              ></el-input>
+              />
             </div>
           </template>
           <template v-else>
@@ -105,6 +106,7 @@
         </div>
         <div class="table-item" style="width: 110px">
           <RichText
+            ref="richText"
             v-model="item.cixing"
             :inline="true"
             toolbar="fontselect fontsizeselect forecolor backcolor | underline | bold italic strikethrough alignleft aligncenter alignright"
@@ -121,6 +123,7 @@
         </div>
         <div class="table-item" style="width: 200px">
           <RichText
+            ref="richText"
             v-model="item.definition_list"
             :inline="true"
             :placeholder="'多个释义用;隔开'"
@@ -129,6 +132,7 @@
         </div>
         <div class="table-item" style="width: 200px">
           <RichText
+            ref="richText"
             v-model="item.collocation"
             :inline="true"
             toolbar="fontselect fontsizeselect forecolor backcolor | underline | bold italic strikethrough alignleft aligncenter alignright"
@@ -136,6 +140,7 @@
         </div>
         <div class="table-item" style="width: 300px">
           <RichText
+            ref="richText"
             v-model="item.liju_list"
             :inline="true"
             :placeholder="'多条例句用回车'"
@@ -160,24 +165,24 @@
           <label style="line-height: 32px">列宽</label>
         </div>
         <div class="table-item" style="width: 110px">
-          <el-input v-model="data.col_width[0].value"></el-input>
+          <el-input v-model="data.col_width[0].value" />
         </div>
         <div class="table-item" style="width: 200px"></div>
         <div class="table-item" style="width: 110px">
-          <el-input v-model="data.col_width[1].value"></el-input>
+          <el-input v-model="data.col_width[1].value" />
         </div>
         <div class="table-item" style="width: 110px">
-          <el-input v-model="data.col_width[2].value"></el-input>
+          <el-input v-model="data.col_width[2].value" />
         </div>
         <div class="table-item" style="width: 200px"></div>
         <div class="table-item" style="width: 200px">
-          <el-input v-model="data.col_width[3].value"></el-input>
+          <el-input v-model="data.col_width[3].value" />
         </div>
         <div class="table-item" style="width: 200px">
-          <el-input v-model="data.col_width[4].value"></el-input>
+          <el-input v-model="data.col_width[4].value" />
         </div>
         <div class="table-item" style="width: 300px">
-          <el-input v-model="data.col_width[5].value"></el-input>
+          <el-input v-model="data.col_width[5].value" />
         </div>
         <div class="table-item" style="width: 100px"></div>
         <div class="table-item" style="width: 100px"></div>
@@ -211,7 +216,7 @@
         <el-button type="text" @click="againWordTime">重新生成</el-button>
       </div>
       <template v-else>
-        <el-button v-if="!isWordTime" size="medium" @click="createWordTime" :loading="loading"
+        <el-button v-if="!isWordTime" size="medium" :loading="loading" @click="createWordTime"
           >自动生成字幕节点</el-button
         >
         <p v-else>字幕节点生成中...请等待</p>
@@ -361,7 +366,7 @@ export default {
         let _this = this;
         _this.loading = true;
         let data = {
-          file_id: file_id,
+          file_id,
         };
         fileToBase64Text(data)
           .then((res) => {

+ 4 - 0
src/views/book/courseware/create/components/question/article/Notes.vue

@@ -2,6 +2,7 @@
   <div>
     <label>标题:</label>
     <RichText
+      ref="richText"
       v-model="data.title_con"
       :inline="true"
       :placeholder="'输入标题'"
@@ -16,6 +17,7 @@
       <el-table-column fixed prop="con" label="内容" width="200">
         <template slot-scope="scope">
           <RichText
+            ref="richText"
             v-model="scope.row.con"
             :inline="true"
             toolbar="fontselect fontsizeselect forecolor backcolor | underline | bold italic strikethrough alignleft aligncenter alignright"
@@ -25,6 +27,7 @@
       <el-table-column prop="interpret" label="翻译" width="200">
         <template slot-scope="scope">
           <RichText
+            ref="richText"
             v-model="scope.row.interpret"
             :inline="true"
             toolbar="fontselect fontsizeselect forecolor backcolor | underline | bold italic strikethrough alignleft aligncenter alignright"
@@ -34,6 +37,7 @@
       <el-table-column prop="note" label="注释">
         <template slot-scope="scope">
           <RichText
+            ref="richText"
             v-model="scope.row.note"
             :inline="true"
             toolbar="fontselect fontsizeselect forecolor backcolor | underline | bold italic strikethrough alignleft aligncenter alignright"

+ 39 - 44
src/views/book/courseware/create/components/question/dialogue_article/Article.vue

@@ -2,16 +2,16 @@
   <ModuleBase :type="data.type">
     <template #content>
       <!-- eslint-disable max-len -->
-      <div class="article-wrapper" v-loading="loading">
+      <div v-loading="loading" class="article-wrapper">
         <div class="content">
-          <div class="content-list" v-for="(item, index) in data.detail" :key="index">
+          <div v-for="(item, index) in data.detail" :key="index" class="content-list">
             <div class="content-item">
               <span
-                class="avatar"
                 v-if="
                   data.property.role_img_type === 'upload' &&
                   data.property.role_list.find((items) => items.id === item.roleIndex).img_list[0]
                 "
+                class="avatar"
               >
                 <img
                   :src="data.property.role_list.find((items) => items.id === item.roleIndex).img_list[0].file_url"
@@ -19,11 +19,11 @@
                 />
               </span>
               <span
-                class="avatar"
                 v-else-if="
                   data.property.role_img_type === 'simple' &&
                   data.property.role_list.find((items) => items.id === item.roleIndex).simpleHead
                 "
+                class="avatar"
                 ><img
                   :src="
                     require(
@@ -38,11 +38,11 @@
                 {{ data.property.role_list.find((items) => items.id === item.roleIndex).simpleHead }}
               </span>
               <span
+                v-else
                 class="avatar"
                 :style="{
                   backgroundColor: data.property.role_list.find((items) => items.id === item.roleIndex).color,
                 }"
-                v-else
               >
                 {{
                   data.property.role_list.find((items) => items.id === item.roleIndex).fullName
@@ -113,15 +113,15 @@
           </div>
           <SvgIcon icon-class="delete-black" size="12" @click="removeFile" />
         </div>
-        <div class="btn-box" v-if="data.detail.length > 0">
+        <div v-if="data.detail.length > 0" class="btn-box">
           <a @click="handleChangeContent">生成分词</a>
           <a @click="checkArticle">文章校对</a>
           <a @click="editWordsFlag = !editWordsFlag">编辑生词短语注释</a>
           <template v-if="data.wordTime && data.wordTime.length > 0">
             <!-- <span>已有字幕时间节点</span> -->
             <a type="text" @click="againWordTime">重新生成字幕时间</a>
-            <a @click="compareTime('句子')" size="medium">校对句子字幕时间</a>
-            <a @click="compareTime('文字')" size="medium">校对文字字幕时间</a>
+            <a size="medium" @click="compareTime('句子')">校对句子字幕时间</a>
+            <a size="medium" @click="compareTime('文字')">校对文字字幕时间</a>
           </template>
           <template v-else>
             <a v-if="!isWordTime" size="medium" @click="createWordTime">自动生成字幕节点</a>
@@ -137,19 +137,19 @@
         </div>
       </div>
       <el-dialog title="标注" :visible.sync="remarkVisible" width="50%">
-        <div class="remark" v-if="remark">
+        <div v-if="remark" class="remark">
           <div class="adult-book-input-item">
             <span class="adult-book-lable">中文:</span>
             <el-input
+              v-model="remark.chs"
               class="adult-book-input"
               type="textarea"
               :autosize="{ minRows: 2 }"
               placeholder="请输入中文"
-              v-model="remark.chs"
-              @blur="onBlur(remark, 'chs')"
               maxlength="200"
               show-word-limit
-            ></el-input>
+              @blur="onBlur(remark, 'chs')"
+            />
           </div>
           <div class="adult-book-input-item">
             <span class="adult-book-lable">英文:</span>
@@ -164,12 +164,13 @@
               show-word-limit
             ></el-input> -->
             <RichText
+              ref="richText"
               v-model="remark.en"
               toolbar="fontselect fontsizeselect forecolor backcolor | underline | bold italic strikethrough alignleft aligncenter alignright"
               :wordlimit-num="200"
             />
           </div>
-          <div class="adult-book-input-item" v-if="remark.img_list && remark.img_list.length == 0">
+          <div v-if="remark.img_list && remark.img_list.length == 0" class="adult-book-input-item">
             <el-upload
               action="no"
               accept="image/*"
@@ -180,7 +181,7 @@
               <el-button>上传图片</el-button>
             </el-upload>
           </div>
-          <ul class="uploadArt_list" v-if="remark.img_list && remark.img_list.length > 0">
+          <ul v-if="remark.img_list && remark.img_list.length > 0" class="uploadArt_list">
             <li v-for="(artItem, artIndex) in remark.img_list" :key="'articleImgList' + artIndex">
               <img :src="artItem.url" style="width: 26px; margin-right: 5px" />
               <span class="art_name">{{ artItem.name }}</span>
@@ -190,22 +191,22 @@
           <div class="adult-book-input-item">
             <span class="adult-book-lable">图片宽度:</span>
             <el-input
+              v-model="remark.widthNumber"
               class="adult-book-input"
               placeholder="请输入宽度值"
-              v-model="remark.widthNumber"
-              @blur="onBlur(remark, 'widthNumber')"
               maxlength="200"
               style="width: 150px"
-            ></el-input>
+              @blur="onBlur(remark, 'widthNumber')"
+            />
             <span class="adult-book-lable">图片高度:</span>
             <el-input
+              v-model="remark.heightNumber"
               class="adult-book-input"
               placeholder="请输入高度值"
-              v-model="remark.heightNumber"
-              @blur="onBlur(remark, 'heightNumber')"
               maxlength="200"
               style="width: 150px"
-            ></el-input>
+              @blur="onBlur(remark, 'heightNumber')"
+            />
           </div>
         </div>
         <span slot="footer" class="dialog-footer">
@@ -214,6 +215,7 @@
         </span>
       </el-dialog>
       <el-dialog
+        v-if="showArticleFlag"
         :visible.sync="showArticleFlag"
         :show-close="true"
         :close-on-click-modal="true"
@@ -222,12 +224,11 @@
         :lock-scroll="true"
         width="80%"
         class="practiceBox"
-        v-if="showArticleFlag"
       >
-        <CheckArticle :data="data" @saveWord="saveWord" @savePinyin="savePinyin" @saveStyle="saveStyle"></CheckArticle>
+        <CheckArticle :data="data" @saveWord="saveWord" @savePinyin="savePinyin" @saveStyle="saveStyle" />
       </el-dialog>
       <el-dialog title="校对字幕时间" :visible.sync="compareShow" width="50%" :before-close="handleClose" top="0">
-        <CompareTime :data="compareData" :type="compareType" :changewordsResultList="changewordsResultList" />
+        <CompareTime :data="compareData" :type="compareType" :changewords-result-list="changewordsResultList" />
         <span slot="footer" class="dialog-footer">
           <el-button @click="handleClose">取 消</el-button>
           <el-button :loading="compareloading" type="primary" @click="saveCompare">确 定</el-button>
@@ -242,17 +243,13 @@
         </div>
         <NewWord
           v-if="editWordIndex === 0"
-          :dataNewWord="data.new_word_list"
           key="new_word"
+          :data-new-word="data.new_word_list"
           @sureNewWords="sureNewWords"
-        ></NewWord>
+        />
 
-        <Notes v-if="editWordIndex === 1" :dataNotes="data.notes_list" key="notes" @sureNotes="sureNotes"></Notes>
-        <NewWord
-          v-if="editWordIndex === 2"
-          :dataNewWord="data.other_word_list"
-          @sureNewWords="sureOtherNewWords"
-        ></NewWord>
+        <Notes v-if="editWordIndex === 1" key="notes" :data-notes="data.notes_list" @sureNotes="sureNotes" />
+        <NewWord v-if="editWordIndex === 2" :data-new-word="data.other_word_list" @sureNewWords="sureOtherNewWords" />
       </template>
       <!-- </el-dialog> -->
     </template>
@@ -290,7 +287,7 @@ export default {
       toneList: [' ', 'ˉ', 'ˊ', 'ˇ', 'ˋ'],
       loading: false,
       isWordTime: false,
-      compareType: '', //校对类型
+      compareType: '', // 校对类型
       compareShow: false,
       compareData: null,
       compareloading: false,
@@ -442,7 +439,7 @@ export default {
       });
       let sentenceList = []; // 句子按段数组
       let data = {
-        textList: textList,
+        textList,
       };
       segSentences(data)
         .then((res) => {
@@ -492,7 +489,7 @@ export default {
           });
           let obj = {
             sentence: items,
-            word_list: word_list,
+            word_list,
           };
           this.data.sentence_list_mp.push(obj);
         });
@@ -587,15 +584,15 @@ export default {
         } else {
           let obj = {
             paraIndex: index,
-            para: para,
-            sentences: sentences,
+            para,
+            sentences,
             segList: item,
             seg_words: [],
-            wordsList: wordsList,
+            wordsList,
             timeList: [],
             isTitle: false,
             sentencesEn: [],
-            sentenceStr: sentenceStr,
+            sentenceStr,
           };
           this.data.detail.push(obj);
         }
@@ -607,12 +604,10 @@ export default {
     savePinyin(paraIndex, sentenceIndex, wordIndex, pinyin) {
       if (this.data.pinyin_type === 'tone') {
         this.data.detail[paraIndex].wordsList[sentenceIndex][wordIndex].pinyin_tone = pinyin;
+      } else if (wordIndex === 0) {
+        this.data.detail[paraIndex].wordsList[sentenceIndex][wordIndex].pinyin_up = pinyin;
       } else {
-        if (wordIndex === 0) {
-          this.data.detail[paraIndex].wordsList[sentenceIndex][wordIndex].pinyin_up = pinyin;
-        } else {
-          this.data.detail[paraIndex].wordsList[sentenceIndex][wordIndex].pinyin = pinyin;
-        }
+        this.data.detail[paraIndex].wordsList[sentenceIndex][wordIndex].pinyin = pinyin;
       }
     },
     saveStyle(paraIndex, sentenceIndex, wordIndex, style) {
@@ -745,7 +740,7 @@ export default {
             flag = true;
           }
           item.sentences.forEach((items) => {
-            this.multilingualText += '<p>' + items + '<p>';
+            this.multilingualText += `<p>${items}<p>`;
           });
         } else {
           this.multilingualText += '<p>&nbsp;</p>';

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

@@ -4,6 +4,7 @@
       <!-- eslint-disable max-len -->
       <div class="fill-wrapper">
         <RichText
+          ref="richText"
           v-model="data.content"
           :is-fill="true"
           toolbar="fontselect fontsizeselect forecolor backcolor | underline | bold italic strikethrough alignleft aligncenter alignright"

+ 1 - 1
src/views/book/courseware/create/components/question/input/Input.vue

@@ -2,7 +2,7 @@
   <ModuleBase :type="data.type">
     <template #content>
       <RichText
-        ref="rich"
+        ref="richText"
         v-model="data.content"
         toolbar="fontselect fontsizeselect alignleft aligncenter alignright forecolor backcolor"
         :font-size="18"

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

@@ -5,7 +5,7 @@
         <li v-for="(item, i) in data.option_list" :key="i" class="option-item">
           <span class="serial-number">{{ convertNumberToLetter(i) }}.</span>
           <div class="option-content">
-            <RichText v-model="item.content" placeholder="输入内容" :inline="true" />
+            <RichText ref="richText" v-model="item.content" placeholder="输入内容" :inline="true" />
           </div>
 
           <div

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

@@ -6,7 +6,7 @@
           <div v-for="(item, j) in li" :key="item.mark" class="option">
             <span class="serial-number">{{ computeOptionMethods[data.property.serial_number_type_list[j]](i) }}</span>
             <span class="option-content">
-              <RichText v-model="item.content" placeholder="请输入" :inline="true" :height="32" />
+              <RichText ref="richText" v-model="item.content" placeholder="请输入" :inline="true" :height="32" />
             </span>
             <span class="multilingual" @click="openMultilingual(i, j)">
               <SvgIcon icon-class="multilingual" class-name="multilingual" width="12" height="12" />

+ 24 - 20
src/views/book/courseware/create/components/question/new_word/NewWord.vue

@@ -4,6 +4,7 @@
       <div style="text-align: left">
         <label>标题:</label>
         <RichText
+          ref="richText"
           v-model="data.title_con"
           :inline="true"
           :placeholder="'输入标题'"
@@ -17,8 +18,7 @@
           :options="node_list"
           :show-all-levels="false"
           @change="handleChange"
-        >
-        </el-cascader>
+        />
       </div>
       <!-- <el-table :data="data.new_word_list" border style="width: 100%">
         <el-table-column fixed prop="number" label="序号" width="70">
@@ -203,18 +203,18 @@
               <span class="adult-book-lable">字幕时间:</span>
               <div style="display: flex; align-items: center">
                 <el-input
+                  v-model.trim="data.lrc_arr[i].bg"
                   class="adult-book-input"
                   style="width: 50px"
-                  v-model.trim="data.lrc_arr[i].bg"
                   maxlength="200"
-                ></el-input>
+                />
                 ~
                 <el-input
+                  v-model.trim="data.lrc_arr[i].ed"
                   class="adult-book-input"
                   style="width: 50px"
-                  v-model.trim="data.lrc_arr[i].ed"
                   maxlength="200"
-                ></el-input>
+                />
               </div>
             </template>
             <template v-else>
@@ -250,6 +250,7 @@
           </div>
           <div class="table-item" style="width: 110px">
             <RichText
+              ref="richText"
               v-model="item.cixing"
               :inline="true"
               toolbar="fontselect fontsizeselect forecolor backcolor | underline | bold italic strikethrough alignleft aligncenter alignright"
@@ -266,6 +267,7 @@
           </div>
           <div class="table-item" style="width: 200px">
             <RichText
+              ref="richText"
               v-model="item.definition_list"
               :inline="true"
               :placeholder="'多个释义用;隔开'"
@@ -274,6 +276,7 @@
           </div>
           <div class="table-item" style="width: 200px">
             <RichText
+              ref="richText"
               v-model="item.collocation"
               :inline="true"
               toolbar="fontselect fontsizeselect forecolor backcolor | underline | bold italic strikethrough alignleft aligncenter alignright"
@@ -281,6 +284,7 @@
           </div>
           <div class="table-item" style="width: 300px">
             <RichText
+              ref="richText"
               v-model="item.liju_list"
               :inline="true"
               :placeholder="'多条例句用回车'"
@@ -305,24 +309,24 @@
             <label style="line-height: 32px">列宽</label>
           </div>
           <div class="table-item" style="width: 110px">
-            <el-input v-model="data.col_width[0].value"></el-input>
+            <el-input v-model="data.col_width[0].value" />
           </div>
           <div class="table-item" style="width: 200px"></div>
           <div class="table-item" style="width: 110px">
-            <el-input v-model="data.col_width[1].value"></el-input>
+            <el-input v-model="data.col_width[1].value" />
           </div>
           <div class="table-item" style="width: 110px">
-            <el-input v-model="data.col_width[2].value"></el-input>
+            <el-input v-model="data.col_width[2].value" />
           </div>
           <div class="table-item" style="width: 200px"></div>
           <div class="table-item" style="width: 200px">
-            <el-input v-model="data.col_width[3].value"></el-input>
+            <el-input v-model="data.col_width[3].value" />
           </div>
           <div class="table-item" style="width: 200px">
-            <el-input v-model="data.col_width[4].value"></el-input>
+            <el-input v-model="data.col_width[4].value" />
           </div>
           <div class="table-item" style="width: 300px">
-            <el-input v-model="data.col_width[5].value"></el-input>
+            <el-input v-model="data.col_width[5].value" />
           </div>
           <div class="table-item" style="width: 100px"></div>
           <div class="table-item" style="width: 100px"></div>
@@ -357,7 +361,7 @@
           <el-button type="text" @click="againWordTime">重新生成</el-button>
         </div>
         <template v-else>
-          <el-button v-if="!isWordTime" size="medium" @click="createWordTime" :loading="loading"
+          <el-button v-if="!isWordTime" size="medium" :loading="loading" @click="createWordTime"
             >自动生成字幕节点</el-button
           >
           <p v-else>字幕节点生成中...请等待</p>
@@ -411,6 +415,9 @@ export default {
   watch: {
     'data.new_word_list': 'handleMindMap',
   },
+  created() {
+    this.getBookChapterStructExpandList();
+  },
   methods: {
     /**
      * 解析lrc文件
@@ -463,7 +470,7 @@ export default {
         let _this = this;
         _this.loading = true;
         let data = {
-          file_id: file_id,
+          file_id,
         };
         fileToBase64Text(data)
           .then((res) => {
@@ -709,20 +716,17 @@ export default {
     handleMultilingual() {
       this.multilingualText = this.data.title_con ? this.data.title_con : '<p>&nbsp;</p>';
       this.data.new_word_list.forEach((item) => {
-        this.multilingualText += '<p>' + item.new_word + '</p>';
+        this.multilingualText += `<p>${item.new_word}</p>`;
         this.multilingualText += item.cixing ? item.cixing : '<p>&nbsp;</p>';
         this.multilingualText += item.definition_list ? item.definition_list : '<p>&nbsp;</p>';
         this.multilingualText += item.collocation ? item.collocation : '<p>&nbsp;</p>';
         this.multilingualText += item.liju_list ? item.liju_list : '<p>&nbsp;</p>';
-        this.multilingualText += '<p>' + item.header_con + '</p>';
-        this.multilingualText += '<p>' + item.label + '</p>';
+        this.multilingualText += `<p>${item.header_con}</p>`;
+        this.multilingualText += `<p>${item.label}</p>`;
       });
       this.multilingualVisible = true;
     },
   },
-  created() {
-    this.getBookChapterStructExpandList();
-  },
 };
 </script>
 <style lang="scss" scoped>

+ 4 - 0
src/views/book/courseware/create/components/question/notes/Notes.vue

@@ -3,6 +3,7 @@
     <template #content>
       <label>标题:</label>
       <RichText
+        ref="richText"
         v-model="data.title_con"
         :inline="true"
         :placeholder="'输入标题'"
@@ -17,6 +18,7 @@
         <el-table-column fixed prop="con" label="内容" width="200">
           <template slot-scope="scope">
             <RichText
+              ref="richText"
               v-model="scope.row.con"
               :inline="true"
               toolbar="fontselect fontsizeselect forecolor backcolor | underline | bold italic strikethrough alignleft aligncenter alignright"
@@ -27,6 +29,7 @@
         <el-table-column prop="interpret" label="翻译" width="200">
           <template slot-scope="scope">
             <RichText
+              ref="richText"
               v-model="scope.row.interpret"
               :inline="true"
               toolbar="fontselect fontsizeselect forecolor backcolor | underline | bold italic strikethrough alignleft aligncenter alignright"
@@ -36,6 +39,7 @@
         <el-table-column prop="note" label="注释">
           <template slot-scope="scope">
             <RichText
+              ref="richText"
               v-model="scope.row.note"
               :inline="true"
               toolbar="fontselect fontsizeselect forecolor backcolor | underline | bold italic strikethrough alignleft aligncenter alignright"

+ 6 - 0
src/views/book/courseware/create/components/question/other_word/OtherWord.vue

@@ -10,6 +10,7 @@
         <el-table-column fixed prop="new_word" label="生词/短语" width="110">
           <template slot-scope="scope">
             <RichText
+              ref="richText"
               v-model="scope.row.new_word"
               :inline="true"
               toolbar="fontselect fontsizeselect forecolor backcolor | underline | bold italic strikethrough alignleft aligncenter alignright"
@@ -48,6 +49,7 @@
         <el-table-column prop="pinyin" label="拼音" width="110">
           <template slot-scope="scope">
             <RichText
+              ref="richText"
               v-model="scope.row.pinyin"
               :inline="true"
               toolbar="fontselect fontsizeselect forecolor backcolor | underline | bold italic strikethrough alignleft aligncenter alignright"
@@ -57,6 +59,7 @@
         <el-table-column prop="cixing" label="词性" width="110">
           <template slot-scope="scope">
             <RichText
+              ref="richText"
               v-model="scope.row.cixing"
               :inline="true"
               toolbar="fontselect fontsizeselect forecolor backcolor | underline | bold italic strikethrough alignleft aligncenter alignright"
@@ -66,6 +69,7 @@
         <el-table-column prop="definition_list" label="释义" width="200">
           <template slot-scope="scope">
             <RichText
+              ref="richText"
               v-model="scope.row.definition_list"
               :inline="true"
               :placeholder="'多个释义用;隔开'"
@@ -76,6 +80,7 @@
         <el-table-column prop="collocation" label="搭配" width="200">
           <template slot-scope="scope">
             <RichText
+              ref="richText"
               v-model="scope.row.collocation"
               :inline="true"
               toolbar="fontselect fontsizeselect forecolor backcolor | underline | bold italic strikethrough alignleft aligncenter alignright"
@@ -85,6 +90,7 @@
         <el-table-column prop="liju_list" label="例句" width="300">
           <template slot-scope="scope">
             <RichText
+              ref="richText"
               v-model="scope.row.liju_list"
               :inline="true"
               :placeholder="'多条例句用回车'"

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

@@ -8,7 +8,7 @@
             <span :class="['checkbox', { active: isAnswer(item.mark) }]" @click="selectAnswer(item.mark)">
               <SvgIcon icon-class="check-mark" width="10" height="7" />
             </span>
-            <RichText v-model="item.content" placeholder="输入内容" :inline="true" :height="32" />
+            <RichText ref="richText" v-model="item.content" placeholder="输入内容" :inline="true" :height="32" />
           </div>
           <span class="multilingual" @click="openMultilingual(i)">
             <SvgIcon icon-class="multilingual" class-name="multilingual" width="12" height="12" />

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

@@ -10,7 +10,7 @@
               gridArea: `rich-${i}`,
             }"
           >
-            <RichText v-model="item.content" :inline="true" placeholder="输入内容" />
+            <RichText ref="richText" v-model="item.content" :inline="true" placeholder="输入内容" />
             <span class="multilingual" @click="openMultilingual(i)">
               <SvgIcon icon-class="multilingual" class-name="multilingual" width="12" height="12" />
             </span>

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

@@ -283,7 +283,7 @@ export default {
                       value: '',
                       type: 'input',
                       mark: getRandomNumber(),
-                      inputIndex: inputIndex,
+                      inputIndex,
                       write_base64: '',
                       audio_answer_list: [],
                     });

+ 5 - 0
src/views/book/courseware/create/index.vue

@@ -137,6 +137,11 @@ export default {
     showSetBackground() {
       this.visible = true;
     },
+    showFullTextSettings() {
+      if (this.isEdit) {
+        this.$refs.createCanvas.showFullTextSettings();
+      }
+    },
     // 显示设置置空
     showSettingEmpty() {
       this.curSettingType = '';

+ 4 - 1
src/views/personal_workbench/edit_task/edit/index.vue

@@ -31,7 +31,7 @@
           <span class="link" @click="showSetBackground">背景图</span>
           <span class="link" @click="saveCoursewareContent('quit')">退出编辑</span>
           <span class="link" @click="saveCoursewareContent">保存</span>
-          <span class="link">全文设置</span>
+          <span v-if="isEdit" class="link" @click="showFullTextSettings">全文设置</span>
           <span class="link" @click="goBackBookList">返回教材列表</span>
         </div>
       </div>
@@ -115,6 +115,9 @@ export default {
     saveCoursewareContent(type = '') {
       this.$refs.create.saveCoursewareContent(type);
     },
+    showFullTextSettings() {
+      this.$refs.create.showFullTextSettings();
+    },
     goBackPreview() {
       this.$router.push({
         path: `/personal_workbench/edit_task/preview/${this.id}`,