| 
					
				 | 
			
			
				@@ -297,9 +297,32 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 tips="仅支持上传 xml 格式文件" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 accept=".xml" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 v-model="song.xmlUrl" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                @inputFile="inputFile" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             </el-form-item> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           </el-col> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <el-col :span="12" v-if="partListNames.length > 1"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <el-form-item 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              label="所属轨道" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              :prop="`sysMusicScoreAccompaniments.${index}.track`" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              :rules="[{ required: true, message: '请选择所属轨道' }]" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            > 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              <el-select 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                style="width: 100% !important" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                v-model="song.track" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                clearable 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                placeholder="请选择轨道" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              > 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                <el-option 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  v-for="item in partListNames" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  :value="item" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  :label="item" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  :key="item" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  :disabled="hasPartName(item)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ></el-option> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              </el-select> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            </el-form-item> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          </el-col> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         </el-row> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         <el-button 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           class="file-remove" 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -330,6 +353,7 @@ export default { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   props: ["detail", "type"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   data() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      partListNames: [], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       tree: [], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       memberRankList: [], // 会员列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       form: { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -357,6 +381,7 @@ export default { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             xmlUrl: "", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             isShowFingering: null, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             mome: "", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            track: "" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         ], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         delExamSongAccompanimentIds: [], 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -398,6 +423,33 @@ export default { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   methods: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    getPartListNames(xml) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (!xml) return [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const xmlParse = new DOMParser().parseFromString(xml, 'text/xml') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const partList = xmlParse.getElementsByTagName('part-list')?.[0]?.getElementsByTagName('score-part') || [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const partListNames = Array.from(partList).map(item => item.getElementsByTagName('part-name')?.[0].textContent || '') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return partListNames 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    inputFile(file) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const xmlRead = new FileReader() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      xmlRead.onload = res => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.partListNames = this.getPartListNames(res.target.result) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (let j = 0; j < this.form.sysMusicScoreAccompaniments.length; j++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          this.form.sysMusicScoreAccompaniments[j].track =  this.partListNames[j] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          this.$set(this.form, 'sysMusicScoreAccompaniments', this.form.sysMusicScoreAccompaniments) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (let index = this.form.sysMusicScoreAccompaniments.length; index < this.partListNames.length; index++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          const part = this.partListNames[index] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          this.createSys({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ...this.form.sysMusicScoreAccompaniments[0], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            metronomeMp3Url: "", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            mp3Url: "", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            track: part, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      xmlRead.readAsText(file.raw) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     rankChange(value) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       if (value) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let tempIds = []; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -466,13 +518,14 @@ export default { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         this.$set(this.form, "sysMusicScoreAccompaniments", result); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } catch (error) {} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    createSys() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      this.form.sysMusicScoreAccompaniments.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    createSys(initData) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.form.sysMusicScoreAccompaniments.push(Object.assign({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         subjectId: "", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         speed: "", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         mp3Url: "", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         xmlUrl: "", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        track: "", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }, (initData || {}))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     async removeSys(index) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       try { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -488,6 +541,13 @@ export default { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         this.form.sysMusicScoreAccompaniments.splice(index, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } catch (error) {} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    hasPartName(name) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const names = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      for (const item of this.form.sysMusicScoreAccompaniments) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        names.push(item.track); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return names.includes(name); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     hasSubjectId(id) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       const ids = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       for (const item of this.form.sysMusicScoreAccompaniments) { 
			 |