|  | @@ -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) {
 |