Browse Source

单声部多声轨

liushengqiang 2 years ago
parent
commit
9761994304
1 changed files with 52 additions and 8 deletions
  1. 52 8
      src/views/accompaniment/modals/form.vue

+ 52 - 8
src/views/accompaniment/modals/form.vue

@@ -164,6 +164,7 @@
           v-model="form.sysMusicScore.subjectId"
           v-model="form.sysMusicScore.subjectId"
           clearable
           clearable
           placeholder="请选择声部"
           placeholder="请选择声部"
+          @change="handleChangeSubject"
         >
         >
           <el-option
           <el-option
             v-for="item in selects.subjects"
             v-for="item in selects.subjects"
@@ -175,6 +176,13 @@
         </el-select>
         </el-select>
       </el-form-item>
       </el-form-item>
 
 
+      <el-form-item v-if="form.sysMusicScore.subjectId && partListNames.length > 1" label="单声部多声轨渲染">
+        <el-radio-group v-model="multitrackData.isMultil">
+          <el-radio :label="0">单声轨</el-radio>
+          <el-radio :label="1">多声轨</el-radio>
+        </el-radio-group>
+      </el-form-item>
+
       <el-form-item
       <el-form-item
         :prop="`sysMusicScore.isShowFingering`"
         :prop="`sysMusicScore.isShowFingering`"
         label="指法展示"
         label="指法展示"
@@ -378,6 +386,7 @@
                 accept=".mp3, .aac"
                 accept=".mp3, .aac"
                 v-model="song.metronomeMp3Url"
                 v-model="song.metronomeMp3Url"
                 bucket_name="cloud-coach"
                 bucket_name="cloud-coach"
+                @input="handleInputFileUpload"
               />
               />
             </el-form-item>
             </el-form-item>
           </el-col>
           </el-col>
@@ -481,6 +490,10 @@ export default {
         label: "name",
         label: "name",
         children: "sysMusicScoreCategoriesList",
         children: "sysMusicScoreCategoriesList",
       },
       },
+
+      multitrackData:{
+        isMultil: 0
+      }
     };
     };
   },
   },
   async mounted() {
   async mounted() {
@@ -495,6 +508,10 @@ export default {
       }
       }
       this.form.repeatedBeats = this.extConfigJson.repeatedBeats;
       this.form.repeatedBeats = this.extConfigJson.repeatedBeats;
       this.form.graduals = this.extConfigJson.gradualTimes || {};
       this.form.graduals = this.extConfigJson.gradualTimes || {};
+      // 单声部多声轨
+      if(this.extConfigJson.multitrack){
+        this.multitrackData.isMultil = 1
+      }
       this.$set(this.form, "sysMusicScore", {
       this.$set(this.form, "sysMusicScore", {
         isOpenMetronome: Number(this.detail.isOpenMetronome),
         isOpenMetronome: Number(this.detail.isOpenMetronome),
         name: this.detail.name,
         name: this.detail.name,
@@ -530,6 +547,23 @@ export default {
     }
     }
   },
   },
   methods: {
   methods: {
+    /** 声部改变 */
+    handleChangeSubject(val){
+      if (!val) {
+        this.multitrackData.isMultil = 0
+      }
+    },
+    /**原音上传 */
+    handleInputFileUpload(url){
+      // 单声部多声轨,默认将没有上传的声轨的原音填充
+      if (this.multitrackData.isMultil) {
+        for(let i = 0, len = this.form.sysMusicScoreAccompaniments.length; i < len; i++){
+          if (!this.form.sysMusicScoreAccompaniments[i].metronomeMp3Url){
+            this.form.sysMusicScoreAccompaniments[i].metronomeMp3Url = url
+          }
+        }
+      }
+    },
     getPartListNames(xml) {
     getPartListNames(xml) {
       if (!xml) return [];
       if (!xml) return [];
       const xmlParse = new DOMParser().parseFromString(xml, "text/xml");
       const xmlParse = new DOMParser().parseFromString(xml, "text/xml");
@@ -723,15 +757,27 @@ export default {
             item.isShowFingering =  this.form.sysMusicScore.isShowFingering
             item.isShowFingering =  this.form.sysMusicScore.isShowFingering
           })
           })
           console.log(this.form)
           console.log(this.form)
+          let extConfigJson = JSON.stringify({
+                  repeatedBeats: this.form.repeatedBeats,
+                  gradualTimes: this.form.graduals,
+                })
+          let _multitrackData = {}
+          // 单声部多声轨添加
+          if (this.multitrackData.isMultil) {
+            extConfigJson = JSON.stringify({
+              repeatedBeats: this.form.repeatedBeats,
+              gradualTimes: this.form.graduals,
+              multitrack: this.partListNames.length
+            })
+            _multitrackData.multitrack = false
+          }
           if (!this.detail) {
           if (!this.detail) {
             await Add({
             await Add({
+              ..._multitrackData,
               ...this.form,
               ...this.form,
               sysMusicScore: {
               sysMusicScore: {
                 ...this.form.sysMusicScore,
                 ...this.form.sysMusicScore,
-                extConfigJson: JSON.stringify({
-                  repeatedBeats: this.form.repeatedBeats,
-                  gradualTimes: this.form.graduals,
-                }),
+                extConfigJson: extConfigJson,
                 type: "COMMON",
                 type: "COMMON",
                 showFlag: 0,
                 showFlag: 0,
                 musicScoreCategoriesId: (
                 musicScoreCategoriesId: (
@@ -742,13 +788,11 @@ export default {
             this.$message.success("提交成功");
             this.$message.success("提交成功");
           } else {
           } else {
             await Update({
             await Update({
+              ..._multitrackData,
               ...this.form,
               ...this.form,
               sysMusicScore: {
               sysMusicScore: {
                 ...this.form.sysMusicScore,
                 ...this.form.sysMusicScore,
-                extConfigJson: JSON.stringify({
-                  repeatedBeats: this.form.repeatedBeats,
-                  gradualTimes: this.form.graduals,
-                }),
+                extConfigJson: extConfigJson,
                 type: "COMMON",
                 type: "COMMON",
                 id: this.detail.id,
                 id: this.detail.id,
                 showFlag: this.detail.showFlag,
                 showFlag: this.detail.showFlag,