Ver código fonte

1、单个属性应用 2、语音矩阵增加使用资源 3、解析音视频修改问题

Co-authored-by: Copilot <copilot@github.com>
dsy 6 horas atrás
pai
commit
9e46a4e000

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

@@ -437,6 +437,37 @@ export default {
         }
       });
     },
+    applySingleAttrToSelectedComponents(attr, val) {
+      this.$refs.component.forEach((item) => {
+        if (item.$refs.base.checked) {
+          switch (attr) {
+            case 'view_pinyin':
+            case 'pinyin_position':
+              item.updateProperty(attr, val);
+              break;
+            case 'font':
+              item.updateRichTextProperty('fontFamily', val);
+              break;
+            case 'font_size':
+              item.updateRichTextProperty('fontSize', val);
+              break;
+            case 'line_height':
+              item.updateRichTextProperty('lineHeight', val);
+              break;
+            case 'text_color':
+              item.updateRichTextProperty('color', val);
+              break;
+            case 'align':
+              item.updateRichTextProperty('align', val);
+              break;
+            default:
+              break;
+          }
+
+          item.setSingleUnifiedAttr(attr, val);
+        }
+      });
+    },
     getBookUnifiedAttr() {
       GetBookUnifiedAttrib({ book_id: this.project_id }).then(({ content }) => {
         if (content) {

+ 51 - 1
src/views/book/courseware/create/components/FullTextSettings.vue

@@ -1,7 +1,7 @@
 <template>
   <el-dialog
     custom-class="full-text-settings"
-    width="400px"
+    width="470px"
     :close-on-click-modal="false"
     :visible="visible"
     :before-close="handleClose"
@@ -20,22 +20,37 @@
         <el-select v-model="unified_attrib.font" placeholder="请选择字体">
           <el-option v-for="{ label, value } in fontList" :key="value" :label="label" :value="value" />
         </el-select>
+        <el-button type="primary" class="row-button" @click="applySingleAttrToSelectedComponents('font')">
+          应用选中组件
+        </el-button>
       </el-form-item>
       <el-form-item label="字号">
         <el-select v-model="unified_attrib.font_size" placeholder="请选择字号">
           <el-option v-for="size in fontSizeList" :key="size" :label="size" :value="size" />
         </el-select>
+        <el-button type="primary" class="row-button" @click="applySingleAttrToSelectedComponents('font_size')">
+          应用选中组件
+        </el-button>
       </el-form-item>
       <el-form-item label="拼音字号">
         <el-select v-model="unified_attrib.pinyin_size" placeholder="请选择拼音字号">
           <el-option v-for="size in fontSizeList" :key="size" :label="size" :value="size" />
         </el-select>
+        <el-button type="primary" class="row-button" @click="applySingleAttrToSelectedComponents('pinyin_size')">
+          应用选中组件
+        </el-button>
       </el-form-item>
       <el-form-item label="行距">
         <el-input-number v-model="unified_attrib.line_height" :min="0" :max="20" :step="0.1" />
+        <el-button type="primary" class="row-button" @click="applySingleAttrToSelectedComponents('line_height')">
+          应用选中组件
+        </el-button>
       </el-form-item>
       <el-form-item label="文字颜色">
         <el-color-picker v-model="unified_attrib.text_color" />
+        <el-button type="primary" class="row-button" @click="applySingleAttrToSelectedComponents('text_color')">
+          应用选中组件
+        </el-button>
       </el-form-item>
       <el-form-item label="对齐方式">
         <el-select v-model="unified_attrib.align" placeholder="请选择对齐方式">
@@ -43,9 +58,15 @@
           <el-option label="居中" value="MIDDLE" />
           <el-option label="右对齐" value="RIGHT" />
         </el-select>
+        <el-button type="primary" class="row-button" @click="applySingleAttrToSelectedComponents('align')">
+          应用选中组件
+        </el-button>
       </el-form-item>
       <el-form-item label="拼音">
         <el-switch v-model="unified_attrib.view_pinyin" active-value="true" inactive-value="false" />
+        <el-button type="primary" class="row-button" @click="applySingleAttrToSelectedComponents('view_pinyin')">
+          应用选中组件
+        </el-button>
       </el-form-item>
       <el-form-item label="拼音位置">
         <el-radio-group v-model="unified_attrib.pinyin_position" :disabled="!isEnable(unified_attrib.view_pinyin)">
@@ -53,6 +74,14 @@
             {{ label }}
           </el-radio>
         </el-radio-group>
+        <el-button
+          type="primary"
+          class="row-button"
+          :disabled="!isEnable(unified_attrib.view_pinyin)"
+          @click="applySingleAttrToSelectedComponents('pinyin_position')"
+        >
+          应用选中组件
+        </el-button>
       </el-form-item>
     </el-form>
 
@@ -137,6 +166,14 @@ export default {
       this.$emit('update:visible', false);
       this.$emit('applyToSelectedComponents', this.unified_attrib);
     },
+    /**
+     * 仅应用单个属性到选中组件
+     * @param {String} attr - 属性名
+     */
+    applySingleAttrToSelectedComponents(attr) {
+      this.$emit('update:visible', false);
+      this.$emit('applySingleAttrToSelectedComponents', { attr, value: this.unified_attrib[attr] });
+    },
   },
 };
 </script>
@@ -155,6 +192,19 @@ export default {
         white-space: nowrap;
       }
     }
+
+    :deep .el-form-item__content {
+      display: flex;
+      align-items: center;
+
+      > :first-child {
+        flex: 1;
+      }
+    }
+
+    .row-button {
+      margin-left: 12px;
+    }
   }
 }
 </style>

+ 9 - 0
src/views/book/courseware/create/components/common/ModuleMixin.js

@@ -220,6 +220,15 @@ const mixin = {
       if (!data) return;
       this.data.unified_attrib = data;
     },
+    /**
+     * @description 设置单个教材属性
+     * @param {string} attr 字段名
+     * @param {any} value 属性值
+     */
+    setSingleUnifiedAttr(attr, value) {
+      if (!attr) return;
+      this.$set(this.data.unified_attrib, attr, value);
+    },
     handleComponentMove(data) {
       this.componentMove({ ...data, id: this.id });
     },

+ 2 - 2
src/views/book/courseware/create/components/question/article/Article.vue

@@ -974,7 +974,7 @@ export default {
         for (let i = 0; i < valArr.length; i++) {
           let item = valItem[i];
           if (reg.test(item)) {
-            let numIndex = numList.length == 0 ? 0 : numList[numList.length - 1].index;
+            let numIndex = numList.length === 0 ? 0 : numList[numList.length - 1].index;
             let con = valItem.substring(numIndex, i);
             con = con.replace(/\d/g, '');
             let obj = {
@@ -989,7 +989,7 @@ export default {
       } else {
         numList = [];
       }
-      if (numList.length == 0) {
+      if (numList.length === 0) {
         this.resArr.push([{ con: valItem }]);
       } else {
         this.resArr.push(numList);

+ 1 - 1
src/views/book/courseware/create/components/question/voice_matrix/VoiceMatrix.vue

@@ -46,7 +46,7 @@
           </div>
         </div>
 
-        <SelectUpload label="矩阵音频" type="audio" :is-show-resource="false" @uploadSuccess="uploadAudioSuccess" />
+        <SelectUpload label="矩阵音频" type="audio" @uploadSuccess="uploadAudioSuccess" />
         <div v-if="data.audio_data.url.length > 0" class="upload-file">
           <div class="file-name">
             <span>

+ 1 - 0
src/views/book/courseware/preview/common/AnswerAnalysis.vue

@@ -88,6 +88,7 @@
               v-for="(file, j) in item.analysis_video_list"
               :key="file.file_id"
               view-size="small"
+              view-method="independent"
               :file-id="file.file_id"
               :cur-video-index="j"
             />

+ 4 - 2
src/views/create_project/selectProjectMembers.vue

@@ -110,9 +110,11 @@ export default {
     },
   },
   watch: {
-    selectedList: {
+    visible: {
       handler(newVal) {
-        this.selectedUsers = newVal;
+        if (newVal) {
+          this.selectedUsers = [...this.selectedList];
+        }
       },
       immediate: true,
     },

+ 10 - 0
src/views/personal_workbench/edit_task/edit/index.vue

@@ -71,6 +71,7 @@
       :settings="data.unified_attrib"
       @fullTextSettings="fullTextSettings"
       @applyToSelectedComponents="applyToSelectedComponents"
+      @applySingleAttrToSelectedComponents="applySingleAttrToSelectedComponents"
     />
   </div>
 </template>
@@ -248,6 +249,15 @@ export default {
     applyToSelectedComponents(data) {
       this.$refs.create.$refs.createCanvas.applyToSelectedComponents(data);
     },
+    /**
+     * 仅应用单个属性到选中组件
+     * @param {object} param
+     * @param {string} param.attr - 属性名
+     * @param {any} param.value - 属性值
+     */
+    applySingleAttrToSelectedComponents({ attr, value }) {
+      this.$refs.create.$refs.createCanvas.applySingleAttrToSelectedComponents(attr, value);
+    },
     goBackPreview() {
       if (this.$route.query.template_type) {
         this.$router.push({