Преглед изворни кода

Merge branch 'master' of http://60.205.254.193:3000/GCLS/eep_page

dsy пре 1 недеља
родитељ
комит
ab7a336053

+ 1 - 1
src/components/CommonPreview.vue

@@ -25,7 +25,7 @@
         <span class="link">
           <el-checkbox v-model="chinese" true-label="zh-Hant" false-label="zh-Hans">繁体</el-checkbox>
         </span>
-        <span class="link">
+        <span v-if="false" class="link">
           <el-checkbox v-model="showPinYin" true-label="true" false-label="false">拼音</el-checkbox>
         </span>
         <div class="operator">

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

@@ -30,7 +30,7 @@ const mixin = {
       openAnswerCorrect: () => this.openAnswerCorrect(),
     };
   },
-  inject: ['getLang', 'getChinese', 'convertText', 'getTitleList', 'getPermissionControl', 'getShowPinYin'],
+  inject: ['getLang', 'getChinese', 'convertText', 'getTitleList', 'getPermissionControl'],
   props: {
     id: {
       type: String,

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

@@ -14,7 +14,7 @@
           <template v-for="(li, j) in item">
             <template v-if="li.type === 'text'">
               <PinyinText
-                v-if="isEnable(data.property.view_pinyin) && isEnable(getShowPinYin())"
+                v-if="isEnable(data.property.view_pinyin)"
                 :key="`${i}-${j}`"
                 class="content"
                 :paragraph-list="li.paragraph_list"
@@ -115,7 +115,7 @@
           <template v-for="(li, j) in item">
             <template v-if="li.type === 'text'">
               <PinyinText
-                v-if="isEnable(data.property.view_pinyin) && isEnable(getShowPinYin())"
+                v-if="isEnable(data.property.view_pinyin)"
                 :key="`${i}-${j}`"
                 class="content"
                 :paragraph-list="li.paragraph_list"

+ 17 - 18
src/views/book/courseware/preview/components/picture/PicturePreview.vue

@@ -39,7 +39,7 @@
               </div>
             </template>
             <ul v-else class="view-independent">
-              <li v-for="file in data.file_list" :key="file.file_id" @click="handleIndicatorClick(i)">
+              <li v-for="(file, i) in data.file_list" :key="file.file_id" @click="handleIndicatorClick(i)">
                 <el-image :id="file.file_id" :src="file.file_url" fit="contain" />
               </li>
             </ul>
@@ -135,25 +135,23 @@ export default {
   mounted() {
     this.$nextTick(() => {
       const ele = this.$refs.pictureAreaBox;
-      if (ele) {
-        const sn_position = this.data.property.sn_position;
-        const viewMemo = this.isEnable(this.data.property.view_memo);
-        // 序号在左和右补齐序号高度,去掉padding(8*2)
-        if (sn_position.includes('left') || sn_position.includes('right')) {
-          this.elementWidth = viewMemo ? (ele.clientWidth - 16) * 0.8 : ele.clientWidth - 16;
-          this.elementHeight = ele.clientHeight;
-        } else {
-          this.elementWidth = viewMemo ? ele.clientWidth * 0.8 : ele.clientWidth;
-          this.elementHeight = ele.clientHeight;
-        }
+      if (!ele) return;
+      const sn_position = this.data.property.sn_position;
+      const viewMemo = this.isEnable(this.data.property.view_memo);
+      // 序号在左和右补齐序号高度,去掉padding(8*2)
+      if (sn_position.includes('left') || sn_position.includes('right')) {
+        this.elementWidth = viewMemo ? (ele.clientWidth - 16) * 0.8 : ele.clientWidth - 16;
+        this.elementHeight = ele.clientHeight;
+      } else {
+        this.elementWidth = viewMemo ? ele.clientWidth * 0.8 : ele.clientWidth;
+        this.elementHeight = ele.clientHeight;
+      }
 
-        this.fileLen = this.data.file_list.length;
-        if (this.fileLen > 1) {
-          this.isMore = true;
-        }
-        this.isViewLeftRightBtn();
-        return;
+      this.fileLen = this.data.file_list.length;
+      if (this.fileLen > 1) {
+        this.isMore = true;
       }
+      this.isViewLeftRightBtn();
 
       this.resizeObserver = new ResizeObserver((entries) => {
         if (!this.getDragStatus()) return;
@@ -203,6 +201,7 @@ export default {
     handleIndicatorClick(index) {
       // 获取 Carousel 实例
       const carousel = this.$refs.pictureCarousel;
+      if (!carousel) return;
       // 切换到对应索引的图片
       carousel.setActiveItem(index);
       this.curPictureMemoIndex = index;

+ 1 - 1
src/views/book/courseware/preview/components/rich_text/RichTextPreview.vue

@@ -6,7 +6,7 @@
     <div class="main">
       <div ref="leftDiv" :style="{ width: data.note_list?.length > 0 ? '' : '100%' }">
         <PinyinText
-          v-if="isEnable(data.property.view_pinyin) && isEnable(getShowPinYin())"
+          v-if="isEnable(data.property.view_pinyin)"
           :paragraph-list="data.paragraph_list"
           :pinyin-position="data.property.pinyin_position"
           :pinyin-overall-position="data.property.pinyin_overall_position"

+ 18 - 18
src/views/book/courseware/preview/components/table/TablePreview.vue

@@ -299,7 +299,7 @@
                         :class="[index === 0 ? 'pinyin-text-left' : '']"
                       >
                         <template v-if="item.type === 'input'">
-                          <template v-if="data.property.fill_type === fillTypeList[0].value">
+                          <!-- <template v-if="data.property.fill_type === fillTypeList[0].value">
                             <el-input
                               :key="index"
                               v-model="item.value"
@@ -354,7 +354,7 @@
                               :attrib="data.unified_attrib"
                               @handleWav="handleMiniWav($event, item)"
                             />
-                          </template>
+                          </template> -->
                           <span v-if="data.property.pinyin_position === 'bottom'" class="pinyin">&nbsp;</span>
                         </template>
                         <template v-else>
@@ -369,9 +369,9 @@
                           }}</span>
                         </template>
                         <span
-                          v-show="computedAnswerText(item, i, j).length > 0"
                           :key="`answer-${j}`"
                           class="right-answer"
+                          v-show="computedAnswerText(item, i, j).length > 0"
                         >
                           {{ convertText(computedAnswerText(item, i, j)) }}
                         </span>
@@ -390,7 +390,7 @@
                           v-html="convertText(sanitizeHTML(item.value))"
                         ></span>
                         <template v-if="item.type === 'input'">
-                          <template v-if="data.property.fill_type === fillTypeList[0].value">
+                          <!-- <template v-if="data.property.fill_type === fillTypeList[0].value">
                             <el-input
                               :key="index"
                               v-model="item.value"
@@ -445,12 +445,12 @@
                               :attrib="data.unified_attrib"
                               @handleWav="handleMiniWav($event, item)"
                             />
-                          </template>
-                          {{ computedAnswerText(item, i, j) }}
+                          </template> -->
+
                           <span
-                            v-show="computedAnswerText(item, i, j).length > 0"
                             :key="`answer-${j}`"
                             class="right-answer"
+                            v-show="computedAnswerText(item, i, j).length > 0"
                           >
                             {{ convertText(computedAnswerText(item, i, j)) }}
                           </span>
@@ -598,7 +598,7 @@ export default {
       let answerValue = answerOptionList[item.inputIndex] ? answerOptionList[item.inputIndex].split('/') : '';
       let isRight = answerValue && answerValue.includes(selectValue);
       if (isRight || !answerValue) return '';
-      return `${answerValue.join('/')}`;
+      return `${answerValue.join('/')}`;
     },
     /**
      * 计算答题对错选项字体颜色
@@ -790,16 +790,6 @@ $border-color: #e6e6e6;
           }
         }
 
-        & + .right-answer {
-          position: relative;
-          left: -4px;
-          display: inline-block;
-          height: 32px;
-          line-height: 28px;
-          vertical-align: bottom;
-          border-bottom: 1px solid $font-color;
-        }
-
         :deep input.el-input__inner {
           padding: 0;
 
@@ -820,6 +810,16 @@ $border-color: #e6e6e6;
       }
     }
 
+    .right-answer {
+      position: relative;
+      left: -4px;
+      display: inline-block;
+      height: 24px;
+      line-height: 24px;
+      vertical-align: bottom;
+      border-bottom: 1px solid $font-color;
+    }
+
     .multilingual {
       display: block;
       word-break: break-word;

+ 41 - 6
src/views/personal_workbench/template_list/index.vue

@@ -30,20 +30,26 @@
           header-align="center"
           class-name="index-column"
         />
-        <el-table-column prop="sn" label="编号" align="center" header-align="center" />
+        <el-table-column prop="sn" width="140" label="编号" align="center" header-align="center" />
         <el-table-column prop="name" label="名称" align="center" header-align="center" />
-        <el-table-column prop="type" label="类型" align="center" header-align="center">
+        <el-table-column prop="type" width="90" label="类型" align="center" header-align="center">
           <template slot-scope="{ row }">
-            {{ row.type === 1 ? '整本教材模板' : row.type === 3 ? '整章教材模板' : '单页教材模板' }}
+            {{ row.type === 1 ? '整本教材' : row.type === 3 ? '整课内容' : '单页内容' }}
           </template>
         </el-table-column>
-        <el-table-column min-width="70" prop="share_status" label="共享状态" align="center" header-align="center">
+        <el-table-column prop="label_list" label="标签" align="center" header-align="center"
+          ><template slot-scope="{ row }">
+            {{ row.label_list.join('、') }}
+          </template>
+        </el-table-column>
+        <el-table-column prop="memo" label="描述" align="center" header-align="center" />
+        <el-table-column width="80" prop="share_status" label="共享状态" align="center" header-align="center">
           <template slot-scope="{ row }">
             {{ row.share_status === 0 ? '未共享' : '已共享' }}
           </template>
         </el-table-column>
 
-        <el-table-column min-width="100" prop="status" label="发布状态" align="center" header-align="center">
+        <el-table-column width="120" prop="status" label="发布状态" align="center" header-align="center">
           <template slot-scope="{ row }">
             {{ status_list.find((item) => item.value === row.status).label }}
           </template>
@@ -72,10 +78,25 @@
       class="add-chapter"
       @close="dialogClose"
     >
-      <el-form ref="form" :model="data" :rules="rules" label-width="80px">
+      <el-form ref="form" :model="data" :rules="rules" label-position="top">
         <el-form-item label="模板名称" prop="name">
           <el-input ref="name" v-model="data.name" placeholder="请输入模板名称" />
         </el-form-item>
+        <el-form-item label="标签" prop="label_list">
+          <el-select
+            v-model="data.label_list"
+            multiple
+            filterable
+            allow-create
+            default-first-option
+            placeholder="请选择或输入模板标签"
+          >
+            <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"> </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="模板描述" prop="memo">
+          <el-input ref="memo" v-model="data.memo" placeholder="请输入模板描述" type="textarea" />
+        </el-form-item>
       </el-form>
       <div slot="footer">
         <el-button @click="dialogClose">取消</el-button>
@@ -141,9 +162,21 @@ export default {
       },
       data: {
         name: '',
+        label_list: [],
+        memo: '',
       },
       visible: false,
       loading: false,
+      options: [
+        {
+          label: '小学',
+          value: '小学',
+        },
+        {
+          label: '阅读',
+          value: '阅读',
+        },
+      ],
     };
   },
   mounted() {
@@ -183,6 +216,8 @@ export default {
             });
             this.data = {
               name: '',
+              label_list: [],
+              memo: '',
             };
 
             this.queryList();

+ 3 - 2
src/views/personal_workbench/template_list/preview/CommonPreview.vue

@@ -22,7 +22,7 @@
         </el-popover>
       </div>
       <div class="courseware">
-        <!-- <span class="name-path">{{ courseware_info.name_path }}</span> -->
+        <span class="name-path">{{ courseware_info.name_path }}</span>
         <span class="flow-nodename">{{ courseware_info.cur_audit_flow_node_name }}</span>
         <slot name="middle" :courseware="courseware_info"></slot>
 
@@ -181,6 +181,7 @@ export default {
       if (this.curSelectId === nodeId) return;
       this.curSelectId = nodeId;
       this.getCoursewareComponentContent_View(nodeId);
+      this.getBookCoursewareInfo(nodeId);
       this.popoverShow = false;
     },
     /**
@@ -207,7 +208,7 @@ export default {
      */
     getTemplateChapterStructExpandList(template_id) {
       this.node_list = [];
-      GetTemplateChapterStructExpandList({ template_id, is_contain_root_node: 'true' }).then((res) => {
+      GetTemplateChapterStructExpandList({ template_id, is_contain_root_node: 'false' }).then((res) => {
         if (res.status === 1) {
           this.node_list = res.node_list;
         }

+ 12 - 6
src/views/personal_workbench/template_list_manager/index.vue

@@ -27,32 +27,38 @@
           header-align="center"
           class-name="index-column"
         />
-        <el-table-column prop="sn" label="编号" align="center" header-align="center" />
+        <el-table-column prop="sn" width="140" label="编号" align="center" header-align="center" />
         <el-table-column prop="name" label="名称" align="center" header-align="center" />
-        <el-table-column prop="type" label="类型" align="center" header-align="center">
+        <el-table-column prop="type" width="90" label="类型" align="center" header-align="center">
           <template slot-scope="{ row }">
-            {{ row.type === 1 ? '整本教材模板' : row.type === 3 ? '整章教材模板' : '单页教材模板' }}
+            {{ row.type === 1 ? '整本教材' : row.type === 3 ? '整课内容' : '单页内容' }}
           </template>
         </el-table-column>
+        <el-table-column prop="label_list" label="标签" align="center" header-align="center"
+          ><template slot-scope="{ row }">
+            {{ row.label_list.join('、') }}
+          </template>
+        </el-table-column>
+        <el-table-column prop="memo" label="描述" align="center" header-align="center" />
 
         <el-table-column width="70" prop="storage_type" label="来源" align="center" header-align="center">
           <template slot-scope="{ row }">
             {{ row.storage_type === 0 ? '个人' : '机构' }}
           </template>
         </el-table-column>
-        <el-table-column width="70" prop="status" label="状态" align="center" header-align="center">
+        <el-table-column width="120" prop="status" label="状态" align="center" header-align="center">
           <template slot-scope="{ row }">
             {{ status_list.find((item) => item.value === row.status).label }}
           </template>
         </el-table-column>
-        <el-table-column width="120" prop="use_scope" label="使用范围" align="center" header-align="center">
+        <el-table-column width="80" prop="use_scope" label="使用范围" align="center" header-align="center">
           <template slot-scope="{ row }">
             {{ row.use_scope === 0 ? '本机构' : '全域' }}
           </template>
         </el-table-column>
         <el-table-column prop="create_time" label="创建时间" align="center" width="180" header-align="center" />
 
-        <el-table-column prop="operation" label="操作" fixed="right" width="300" align="center" header-align="center">
+        <el-table-column prop="operation" label="操作" fixed="right" width="230" align="center" header-align="center">
           <template slot-scope="{ row }">
             <span class="link" @click="previewTemplate(row)">预览</span>
             <span v-if="row.status === 0 || row.status === 3" class="link" @click="changeStatusTemplate(row, 1)">{{

+ 40 - 5
src/views/personal_workbench/template_list_org/index.vue

@@ -28,15 +28,21 @@
           header-align="center"
           class-name="index-column"
         />
-        <el-table-column prop="sn" label="编号" align="center" header-align="center" />
+        <el-table-column prop="sn" width="140" label="编号" align="center" header-align="center" />
         <el-table-column prop="name" label="名称" align="center" header-align="center" />
-        <el-table-column prop="type" label="类型" align="center" header-align="center">
+        <el-table-column prop="type" width="90" label="类型" align="center" header-align="center">
           <template slot-scope="{ row }">
-            {{ row.type === 1 ? '整本教材模板' : row.type === 3 ? '整章教材模板' : '单页教材模板' }}
+            {{ row.type === 1 ? '整本教材' : row.type === 3 ? '整课内容' : '单页内容' }}
           </template>
         </el-table-column>
+        <el-table-column prop="label_list" label="标签" align="center" header-align="center"
+          ><template slot-scope="{ row }">
+            {{ row.label_list.join('、') }}
+          </template>
+        </el-table-column>
+        <el-table-column prop="memo" label="描述" align="center" header-align="center" />
 
-        <el-table-column min-width="70" prop="status" label="状态" align="center" header-align="center">
+        <el-table-column width="120" prop="status" label="状态" align="center" header-align="center">
           <template slot-scope="{ row }">
             {{ status_list.find((item) => item.value === row.status).label }}
           </template>
@@ -65,10 +71,25 @@
       class="add-chapter"
       @close="dialogClose"
     >
-      <el-form ref="form" :model="data" :rules="rules" label-width="80px">
+      <el-form ref="form" :model="data" :rules="rules" label-position="top">
         <el-form-item label="模板名称" prop="name">
           <el-input ref="name" v-model="data.name" placeholder="请输入模板名称" />
         </el-form-item>
+        <el-form-item label="标签" prop="label_list">
+          <el-select
+            v-model="data.label_list"
+            multiple
+            filterable
+            allow-create
+            default-first-option
+            placeholder="请选择或输入模板标签"
+          >
+            <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"> </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="模板描述" prop="memo">
+          <el-input ref="memo" v-model="data.memo" placeholder="请输入模板描述" type="textarea" />
+        </el-form-item>
       </el-form>
       <div slot="footer">
         <el-button @click="dialogClose">取消</el-button>
@@ -132,9 +153,21 @@ export default {
       },
       data: {
         name: '',
+        label_list: [],
+        memo: '',
       },
       visible: false,
       loading: false,
+      options: [
+        {
+          label: '小学',
+          value: '小学',
+        },
+        {
+          label: '阅读',
+          value: '阅读',
+        },
+      ],
     };
   },
   mounted() {
@@ -174,6 +207,8 @@ export default {
             });
             this.data = {
               name: '',
+              label_list: [],
+              memo: '',
             };
 
             this.queryList();