فهرست منبع

批注定位 生词自动加序号

natasha 1 هفته پیش
والد
کامیت
bb0b97648f

+ 25 - 5
src/components/AuditRemark.vue

@@ -3,7 +3,7 @@
     <h5>审校批注</h5>
     <ul v-if="remarkList.length > 0">
       <li
-        v-for="{ id: remarkId, content, remark_person_name, remark_time, content_select } in remarkList"
+        v-for="{ id: remarkId, content, remark_person_name, remark_time, content_select, component_id } in remarkList"
         :key="remarkId"
       >
         <template v-if="content_select">
@@ -13,7 +13,17 @@
         <p v-html="content"></p>
         <div v-if="isAudit" class="remark-bottom">
           <span>{{ remark_person_name + ':' + remark_time }}</span>
-          <el-button type="text" class="delete-btn" @click="deleteRemarks(remarkId)">删除</el-button>
+          <div class="btn-box">
+            <el-link type="primary" class="delete-black delete-btn" @click="deleteRemarks(remarkId)"
+              ><SvgIcon icon-class="delete-black" size="12"
+            /></el-link>
+            <el-link
+              type="primary"
+              class="el-icon-place linkLocation"
+              v-if="component_id !== 'WHOLE'"
+              @click="handleLocation(component_id)"
+            />
+          </div>
         </div>
       </li>
     </ul>
@@ -41,6 +51,9 @@ export default {
     deleteRemarks(remarkId) {
       this.$emit('deleteRemarks', remarkId);
     },
+    handleLocation(componentId) {
+      this.$emit('handleLocationRemarks', componentId);
+    },
   },
 };
 </script>
@@ -60,10 +73,17 @@ export default {
     background: #f2f3f5;
   }
 
+  .btn-box {
+    display: flex;
+    gap: 8px;
+    align-items: center;
+    width: 55px;
+    padding: 0 10px;
+    border-left: 1px solid #e5e5e5;
+  }
+
   .delete-btn {
-    padding-left: 10px;
     color: #f44444;
-    border-left: 1px solid #e5e5e5;
   }
 
   ul {
@@ -100,7 +120,7 @@ export default {
         align-items: center;
         justify-content: space-between;
         padding: 0 5px;
-        font-size: 14px;
+        font-size: 12px;
         color: #555;
         border-top: 1px solid #e5e5e5;
       }

+ 20 - 1
src/components/CommonPreview.vue

@@ -316,7 +316,12 @@
             </ul>
           </div>
           <template v-if="curToolbarIcon === 'audit'">
-            <AuditRemark :remark-list="remark_list" :is-audit="isShowAudit" @deleteRemarks="deleteRemarks" />
+            <AuditRemark
+              :remark-list="remark_list"
+              :is-audit="isShowAudit"
+              @deleteRemarks="deleteRemarks"
+              @handleLocationRemarks="handleLocationRemarks"
+            />
           </template>
         </div>
 
@@ -889,6 +894,20 @@ export default {
         })
         .catch(() => {});
     },
+    // 定位批注
+    async handleLocationRemarks(componentId) {
+      if (componentId) {
+        let node = await this.$refs.courserware.findChildComponentByKey(componentId);
+        if (node) {
+          await this.$nextTick();
+          this.$refs.previewMain.scrollTo({
+            top: node.$el.offsetTop - 50,
+            left: node.$el.offsetLeft - 50,
+            behavior: 'smooth',
+          });
+        }
+      }
+    },
     // 计算previewMain滑动距离
     computeScroll() {
       this.$refs.courserware.handleResult(

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

@@ -5,6 +5,7 @@
     :visible="visible"
     :close-on-click-modal="false"
     @close="dialogClose"
+    append-to-body
   >
     <div class="search-box">
       <div class="search-left">

+ 5 - 0
src/views/book/courseware/create/components/question/article/NewWord.vue

@@ -534,7 +534,12 @@ export default {
     },
     // 增加
     addElement() {
+      let number =
+        this.data.new_word_list.length > 0 ? this.data.new_word_list[this.data.new_word_list.length - 1].number : '0';
       this.data.new_word_list.push(this.getOption());
+      if (!isNaN(number) && !isNaN(parseFloat(number))) {
+        this.data.new_word_list[this.data.new_word_list.length - 1].number = number * 1 + 1;
+      }
     },
     // 获取数据
     handleBlurCon(row) {

+ 5 - 0
src/views/book/courseware/create/components/question/new_word/NewWord.vue

@@ -619,7 +619,12 @@ export default {
     },
     // 增加
     addElement() {
+      let number =
+        this.data.new_word_list.length > 0 ? this.data.new_word_list[this.data.new_word_list.length - 1].number : '0';
       this.data.new_word_list.push(getOption());
+      if (!isNaN(number) && !isNaN(parseFloat(number))) {
+        this.data.new_word_list[this.data.new_word_list.length - 1].number = number * 1 + 1;
+      }
     },
     // 获取数据
     handleBlurCon(row) {

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

@@ -46,7 +46,7 @@ export const audioGenerationMethodList = [
 
 export function getOption() {
   return {
-    number: '',
+    number: '1',
     new_word: '',
     cixing: '', // 词性
     definition_list: '', // 释义