|  | @@ -1,4 +1,4 @@
 | 
	
		
			
				|  |  | -import type {SelectOption} from 'naive-ui'
 | 
	
		
			
				|  |  | +import type { SelectOption } from 'naive-ui'
 | 
	
		
			
				|  |  |  import {
 | 
	
		
			
				|  |  |    NAlert,
 | 
	
		
			
				|  |  |    NButton,
 | 
	
	
		
			
				|  | @@ -16,22 +16,25 @@ import {
 | 
	
		
			
				|  |  |    NRadioGroup,
 | 
	
		
			
				|  |  |    NSelect,
 | 
	
		
			
				|  |  |    NSpace,
 | 
	
		
			
				|  |  | +  NSpin,
 | 
	
		
			
				|  |  |    useDialog,
 | 
	
		
			
				|  |  |    useMessage
 | 
	
		
			
				|  |  |  } from 'naive-ui'
 | 
	
		
			
				|  |  | -import {defineComponent, onMounted, PropType, reactive, ref} from 'vue'
 | 
	
		
			
				|  |  | -import {musicSheetCategoriesQueryTree, musicSheetDetail, musicSheetSave} from '../../api'
 | 
	
		
			
				|  |  | +import { defineComponent, onMounted, onUnmounted, PropType, reactive, ref } from 'vue'
 | 
	
		
			
				|  |  | +import { musicSheetCategoriesQueryTree, musicSheetDetail, musicSheetSave } from '../../api'
 | 
	
		
			
				|  |  |  import UploadFile from '@/components/upload-file'
 | 
	
		
			
				|  |  |  import styles from './index.module.less'
 | 
	
		
			
				|  |  |  import deepClone from '@/utils/deep.clone'
 | 
	
		
			
				|  |  |  import axios from 'axios'
 | 
	
		
			
				|  |  | -import {appKey, clientType, musicSheetSourceType, musicSheetType} from "@/utils/constant";
 | 
	
		
			
				|  |  | -import {getMapValueByKey, getSelectDataFromObj} from "@/utils/objectUtil";
 | 
	
		
			
				|  |  | -import {musicalInstrumentPage} from "@views/system-manage/subject-manage/api";
 | 
	
		
			
				|  |  | -import {subjectPage} from "@views/system-manage/api";
 | 
	
		
			
				|  |  | -import MusicSheetOwnerDialog from "@views/music-library/music-sheet/modal/musicSheetOwnerDialog";
 | 
	
		
			
				|  |  | -import {sysApplicationPage} from "@views/menu-manage/api";
 | 
	
		
			
				|  |  | -import {filterPointCategory} from "@views/teaching-manage/unit-test";
 | 
	
		
			
				|  |  | +import { appKey, clientType, musicSheetSourceType, musicSheetType } from '@/utils/constant'
 | 
	
		
			
				|  |  | +import { getMapValueByKey, getSelectDataFromObj } from '@/utils/objectUtil'
 | 
	
		
			
				|  |  | +import { musicalInstrumentPage } from '@views/system-manage/subject-manage/api'
 | 
	
		
			
				|  |  | +import { subjectPage } from '@views/system-manage/api'
 | 
	
		
			
				|  |  | +import MusicSheetOwnerDialog from '@views/music-library/music-sheet/modal/musicSheetOwnerDialog'
 | 
	
		
			
				|  |  | +import { sysApplicationPage } from '@views/menu-manage/api'
 | 
	
		
			
				|  |  | +import { filterPointCategory } from '@views/teaching-manage/unit-test'
 | 
	
		
			
				|  |  | +import { api_uploadFile } from '@/plugins/uploadFile'
 | 
	
		
			
				|  |  | +import MusicCreateImg from './music-create-img'
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  /**
 | 
	
		
			
				|  |  |   * 获取指定元素下一个Note元素
 | 
	
	
		
			
				|  | @@ -59,7 +62,7 @@ export const onlyVisible = (xml: any, partIndex: any) => {
 | 
	
		
			
				|  |  |    if (!xml) return ''
 | 
	
		
			
				|  |  |    const xmlParse = new DOMParser().parseFromString(xml, 'text/xml')
 | 
	
		
			
				|  |  |    const partList =
 | 
	
		
			
				|  |  | -      xmlParse.getElementsByTagName('part-list')?.[0]?.getElementsByTagName('score-part') || []
 | 
	
		
			
				|  |  | +    xmlParse.getElementsByTagName('part-list')?.[0]?.getElementsByTagName('score-part') || []
 | 
	
		
			
				|  |  |    const parts = xmlParse.getElementsByTagName('part')
 | 
	
		
			
				|  |  |    const visiblePartInfo = partList[partIndex]
 | 
	
		
			
				|  |  |    if (visiblePartInfo) {
 | 
	
	
		
			
				|  | @@ -157,8 +160,8 @@ export function getGradualLengthByXml(xml: string) {
 | 
	
		
			
				|  |  |        const measureNotes = Array.from(measure.querySelectorAll('note'))
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        const noteInMeasureIndex = Array.from(measure.childNodes)
 | 
	
		
			
				|  |  | -          .filter((item: any) => item.nodeName === 'note')
 | 
	
		
			
				|  |  | -          .findIndex((item) => item === note)
 | 
	
		
			
				|  |  | +        .filter((item: any) => item.nodeName === 'note')
 | 
	
		
			
				|  |  | +        .findIndex((item) => item === note)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        let allDuration = 0
 | 
	
		
			
				|  |  |        let leftDuration = 0
 | 
	
	
		
			
				|  | @@ -212,9 +215,9 @@ export function getGradualLengthByXml(xml: string) {
 | 
	
		
			
				|  |  |        return textContent && ks.includes(textContent)
 | 
	
		
			
				|  |  |      })
 | 
	
		
			
				|  |  |      if (
 | 
	
		
			
				|  |  | -        ele.type === 'metronome' ||
 | 
	
		
			
				|  |  | -        (ele.type === 'words' && (textContent.startsWith('a tempo') || isKeyWork)) ||
 | 
	
		
			
				|  |  | -        isLastNoteAndNotClosed
 | 
	
		
			
				|  |  | +      ele.type === 'metronome' ||
 | 
	
		
			
				|  |  | +      (ele.type === 'words' && (textContent.startsWith('a tempo') || isKeyWork)) ||
 | 
	
		
			
				|  |  | +      isLastNoteAndNotClosed
 | 
	
		
			
				|  |  |      ) {
 | 
	
		
			
				|  |  |        const indexOf = gradualNotes.findIndex((item) => item.length === 1)
 | 
	
		
			
				|  |  |        if (indexOf > -1 && ele.index > gradualNotes[indexOf]?.[0].start) {
 | 
	
	
		
			
				|  | @@ -253,8 +256,7 @@ export default defineComponent({
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  |      data: {
 | 
	
		
			
				|  |  |        type: Object as PropType<any>,
 | 
	
		
			
				|  |  | -      default: () => {
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | +      default: () => {}
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  |      tagList: {
 | 
	
		
			
				|  |  |        type: Array as PropType<Array<SelectOption>>,
 | 
	
	
		
			
				|  | @@ -263,7 +265,7 @@ export default defineComponent({
 | 
	
		
			
				|  |  |      subjectList: {
 | 
	
		
			
				|  |  |        type: Array as PropType<Array<SelectOption>>,
 | 
	
		
			
				|  |  |        default: () => []
 | 
	
		
			
				|  |  | -    },
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |      // musicSheetCategories: {
 | 
	
		
			
				|  |  |      //   type: Array as PropType<Array<SelectOption>>,
 | 
	
		
			
				|  |  |      //   default: () => []
 | 
	
	
		
			
				|  | @@ -271,7 +273,7 @@ export default defineComponent({
 | 
	
		
			
				|  |  |    },
 | 
	
		
			
				|  |  |    emits: ['close', 'getList'],
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  setup(props, {slots, attrs, emit}) {
 | 
	
		
			
				|  |  | +  setup(props, { slots, attrs, emit }) {
 | 
	
		
			
				|  |  |      const forms = reactive({
 | 
	
		
			
				|  |  |        graduals: {} as any, // 渐变速度
 | 
	
		
			
				|  |  |        playMode: 'MP3', // 播放类型
 | 
	
	
		
			
				|  | @@ -297,20 +299,23 @@ export default defineComponent({
 | 
	
		
			
				|  |  |        appAuditFlag: 0, // 是否审核版本
 | 
	
		
			
				|  |  |        midiFileUrl: null, // 伴奏文件 MIDI文件(保留字段)
 | 
	
		
			
				|  |  |        subjectIds: [] as any, // 可用声部
 | 
	
		
			
				|  |  | -      musicalInstrumentIdList: [] as any,  //可用乐器
 | 
	
		
			
				|  |  | -      musicCategoryId: null,  //曲目分类
 | 
	
		
			
				|  |  | -      musicSheetAccompanimentList: [] as any,  //曲目伴奏
 | 
	
		
			
				|  |  | +      musicalInstrumentIdList: [] as any, //可用乐器
 | 
	
		
			
				|  |  | +      musicCategoryId: null, //曲目分类
 | 
	
		
			
				|  |  | +      musicSheetAccompanimentList: [] as any, //曲目伴奏
 | 
	
		
			
				|  |  |        audioType: 'HOMEMODE', // 伴奏类型
 | 
	
		
			
				|  |  |        isPlayBeat: true, // 是否播放节拍器
 | 
	
		
			
				|  |  |        isUseSystemBeat: true, // 是否使用系统节拍器(0:否;1:是)
 | 
	
		
			
				|  |  |        repeatedBeats: false, // 是否重复节拍时长
 | 
	
		
			
				|  |  |        evaluationStandard: 'FREQUENCY', // 评分标准 节奏 AMPLITUDE 音准 FREQUENCY 分贝 DECIBELS
 | 
	
		
			
				|  |  |        multiTracksSelection: [] as any, // 声轨
 | 
	
		
			
				|  |  | -      musicSheetExtend: {} as any,//所属人信息
 | 
	
		
			
				|  |  | +      musicSheetExtend: {} as any, //所属人信息
 | 
	
		
			
				|  |  | +      musicImg: '', // 五线谱图片
 | 
	
		
			
				|  |  | +      musicSvg: '', //首调图片
 | 
	
		
			
				|  |  | +      musicJianSvg: '' // 简谱固定调
 | 
	
		
			
				|  |  |      })
 | 
	
		
			
				|  |  |      const state = reactive({
 | 
	
		
			
				|  |  |        loading: false,
 | 
	
		
			
				|  |  | -      previewMode: false,//是否是预览模式
 | 
	
		
			
				|  |  | +      previewMode: false, //是否是预览模式
 | 
	
		
			
				|  |  |        tagList: [...props.tagList] as any, // 标签列表
 | 
	
		
			
				|  |  |        xmlFirstSpeed: null as any, // 第一个音轨速度
 | 
	
		
			
				|  |  |        partListNames: [] as any, // 所有音轨声部列表
 | 
	
	
		
			
				|  | @@ -323,8 +328,13 @@ export default defineComponent({
 | 
	
		
			
				|  |  |        showMusicSheetOwnerDialog: false, //所属人弹框
 | 
	
		
			
				|  |  |        // musicSheetOwnerData: {}, //所属人信息
 | 
	
		
			
				|  |  |        multiTracks: null,
 | 
	
		
			
				|  |  | -      appData: [],// 应用列表
 | 
	
		
			
				|  |  | -      ownerName: null as any,// 所属人名称描述
 | 
	
		
			
				|  |  | +      appData: [], // 应用列表
 | 
	
		
			
				|  |  | +      ownerName: null as any, // 所属人名称描述
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      productOpen: false, // 是否打开自动生成图片
 | 
	
		
			
				|  |  | +      productItem: {} as any,
 | 
	
		
			
				|  |  | +      productIfameSrc: '',
 | 
	
		
			
				|  |  | +      isAutoSave: false // 是否自动保存
 | 
	
		
			
				|  |  |      })
 | 
	
		
			
				|  |  |      const gradualData = reactive({
 | 
	
		
			
				|  |  |        list: [] as any[],
 | 
	
	
		
			
				|  | @@ -342,6 +352,11 @@ export default defineComponent({
 | 
	
		
			
				|  |  |          if (error) {
 | 
	
		
			
				|  |  |            return
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | +        if (!state.isAutoSave) {
 | 
	
		
			
				|  |  | +          state.isAutoSave = true
 | 
	
		
			
				|  |  | +          state.productOpen = true
 | 
	
		
			
				|  |  | +          return
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |          try {
 | 
	
		
			
				|  |  |            //extConfigJson: {"repeatedBeats":0,"gradualTimes":{"75":"02:38:60","77":"02:43:39"}}
 | 
	
		
			
				|  |  |            const obj = {
 | 
	
	
		
			
				|  | @@ -349,10 +364,13 @@ export default defineComponent({
 | 
	
		
			
				|  |  |              musicTag: '-1',
 | 
	
		
			
				|  |  |              multiTracksSelection: forms.multiTracksSelection.join(','),
 | 
	
		
			
				|  |  |              musicSheetSoundList: forms.musicSheetSoundList.filter((next: any) => {
 | 
	
		
			
				|  |  | -              return !!next.audioFileUrl && forms.multiTracksSelection.includes(next.track);
 | 
	
		
			
				|  |  | +              return !!next.audioFileUrl && forms.multiTracksSelection.includes(next.track)
 | 
	
		
			
				|  |  |              }),
 | 
	
		
			
				|  |  |              musicalInstrumentIds: forms.musicalInstrumentIdList.join(','),
 | 
	
		
			
				|  |  | -            extConfigJson: JSON.stringify({repeatedBeats: forms.repeatedBeats ? 1 : 0, gradualTimes: forms.graduals}),
 | 
	
		
			
				|  |  | +            extConfigJson: JSON.stringify({
 | 
	
		
			
				|  |  | +              repeatedBeats: forms.repeatedBeats ? 1 : 0,
 | 
	
		
			
				|  |  | +              gradualTimes: forms.graduals
 | 
	
		
			
				|  |  | +            }),
 | 
	
		
			
				|  |  |              subjectIds: forms.subjectIds.join(',')
 | 
	
		
			
				|  |  |            }
 | 
	
		
			
				|  |  |            if (forms.audioType == 'MIDI') {
 | 
	
	
		
			
				|  | @@ -363,7 +381,7 @@ export default defineComponent({
 | 
	
		
			
				|  |  |              await musicSheetSave(obj)
 | 
	
		
			
				|  |  |              message.success('添加成功')
 | 
	
		
			
				|  |  |            } else if (props.type === 'edit') {
 | 
	
		
			
				|  |  | -            await musicSheetSave({...obj, id: props.data.id})
 | 
	
		
			
				|  |  | +            await musicSheetSave({ ...obj, id: props.data.id })
 | 
	
		
			
				|  |  |              message.success('修改成功')
 | 
	
		
			
				|  |  |            }
 | 
	
		
			
				|  |  |            emit('getList')
 | 
	
	
		
			
				|  | @@ -383,21 +401,24 @@ export default defineComponent({
 | 
	
		
			
				|  |  |        xmlRead.onload = (res) => {
 | 
	
		
			
				|  |  |          try {
 | 
	
		
			
				|  |  |            gradualData.list = getGradualLengthByXml(res?.target?.result as any).filter(
 | 
	
		
			
				|  |  | -              (item: any) => item.length === 2
 | 
	
		
			
				|  |  | +            (item: any) => item.length === 2
 | 
	
		
			
				|  |  |            )
 | 
	
		
			
				|  |  | -        } catch (error) {
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | +        } catch (error) {}
 | 
	
		
			
				|  |  |          state.partListNames = getPartListNames(res?.target?.result as any) as any
 | 
	
		
			
				|  |  |          // 这里是如果没有当前音轨就重新写
 | 
	
		
			
				|  |  |          for (let j = 0; j < state.partListNames.length; j++) {
 | 
	
		
			
				|  |  |            if (!forms.musicSheetSoundList[j]) {
 | 
	
		
			
				|  |  | -            forms.musicSheetSoundList.push({audioFileUrl: null, track: null})
 | 
	
		
			
				|  |  | +            forms.musicSheetSoundList.push({ audioFileUrl: null, track: null })
 | 
	
		
			
				|  |  |            }
 | 
	
		
			
				|  |  |            forms.musicSheetSoundList[j].track = state.partListNames[j].value
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          // 循环添加所在音轨的原音
 | 
	
		
			
				|  |  | -        for (let index = forms.musicSheetSoundList.length; index < state.partListNames.length; index++) {
 | 
	
		
			
				|  |  | +        for (
 | 
	
		
			
				|  |  | +          let index = forms.musicSheetSoundList.length;
 | 
	
		
			
				|  |  | +          index < state.partListNames.length;
 | 
	
		
			
				|  |  | +          index++
 | 
	
		
			
				|  |  | +        ) {
 | 
	
		
			
				|  |  |            const part = state.partListNames[index].value
 | 
	
		
			
				|  |  |            const sysData = {
 | 
	
		
			
				|  |  |              ...forms.musicSheetSoundList[0],
 | 
	
	
		
			
				|  | @@ -410,10 +431,8 @@ export default defineComponent({
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          if (forms.musicSheetSoundList.length == 0) {
 | 
	
		
			
				|  |  | -          forms.musicSheetSoundList.push({audioFileUrl: '', track: ''})
 | 
	
		
			
				|  |  | +          forms.musicSheetSoundList.push({ audioFileUrl: '', track: '' })
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |        xmlRead.readAsText(file)
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -423,7 +442,7 @@ export default defineComponent({
 | 
	
		
			
				|  |  |        if (!xml) return []
 | 
	
		
			
				|  |  |        const xmlParse = new DOMParser().parseFromString(xml, 'text/xml')
 | 
	
		
			
				|  |  |        const partList =
 | 
	
		
			
				|  |  | -          xmlParse.getElementsByTagName('part-list')?.[0]?.getElementsByTagName('score-part') || []
 | 
	
		
			
				|  |  | +        xmlParse.getElementsByTagName('part-list')?.[0]?.getElementsByTagName('score-part') || []
 | 
	
		
			
				|  |  |        const partListNames = Array.from(partList).map((item) => {
 | 
	
		
			
				|  |  |          const part = item.getElementsByTagName('part-name')?.[0].textContent || ''
 | 
	
		
			
				|  |  |          return {
 | 
	
	
		
			
				|  | @@ -447,39 +466,43 @@ export default defineComponent({
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        // 乐器
 | 
	
		
			
				|  |  | -      const instrumentCodeList: any = [];
 | 
	
		
			
				|  |  | -      const instrumentEle = xmlParse.getElementsByTagName('virtual-instrument');
 | 
	
		
			
				|  |  | +      const instrumentCodeList: any = []
 | 
	
		
			
				|  |  | +      const instrumentEle = xmlParse.getElementsByTagName('virtual-instrument')
 | 
	
		
			
				|  |  |        for (let index = 0; index < instrumentEle.length; index++) {
 | 
	
		
			
				|  |  |          const note = instrumentEle[index]
 | 
	
		
			
				|  |  | -        const instrumentCode = note.getElementsByTagName('virtual-name')?.[0]?.textContent || '';
 | 
	
		
			
				|  |  | +        const instrumentCode = note.getElementsByTagName('virtual-name')?.[0]?.textContent || ''
 | 
	
		
			
				|  |  |          if (instrumentCode && !instrumentCodeList.includes(instrumentCode)) {
 | 
	
		
			
				|  |  | -          instrumentCodeList.push(instrumentCode);
 | 
	
		
			
				|  |  | +          instrumentCodeList.push(instrumentCode)
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  | -      const codeIdMap = new Map<string, string>();
 | 
	
		
			
				|  |  | +      const codeIdMap = new Map<string, string>()
 | 
	
		
			
				|  |  |        state.instrumentData.forEach((data: any) => {
 | 
	
		
			
				|  |  | -        codeIdMap.set(data.code, data.id + '');
 | 
	
		
			
				|  |  | +        codeIdMap.set(data.code, data.id + '')
 | 
	
		
			
				|  |  |        })
 | 
	
		
			
				|  |  | -      forms.musicalInstrumentIdList = [];
 | 
	
		
			
				|  |  | +      forms.musicalInstrumentIdList = []
 | 
	
		
			
				|  |  |        instrumentCodeList.forEach((code: string) => {
 | 
	
		
			
				|  |  |          if (codeIdMap.has(code)) {
 | 
	
		
			
				|  |  | -          forms.musicalInstrumentIdList.push(codeIdMap.get(code));
 | 
	
		
			
				|  |  | +          forms.musicalInstrumentIdList.push(codeIdMap.get(code))
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |        })
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        // 声部
 | 
	
		
			
				|  |  |        if (forms.musicalInstrumentIdList.length > 0) {
 | 
	
		
			
				|  |  | -        showBackSubject(forms.musicalInstrumentIdList);
 | 
	
		
			
				|  |  | +        showBackSubject(forms.musicalInstrumentIdList)
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |        return partListNames
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      // 判断选择的音轨是否在选中
 | 
	
		
			
				|  |  |      const initPartsListStatus = (track: string): any => {
 | 
	
		
			
				|  |  | -      const _names = state.partListNames.filter((n: any) => n.value?.toLocaleUpperCase?.() != 'COMMON')
 | 
	
		
			
				|  |  | +      const _names = state.partListNames.filter(
 | 
	
		
			
				|  |  | +        (n: any) => n.value?.toLocaleUpperCase?.() != 'COMMON'
 | 
	
		
			
				|  |  | +      )
 | 
	
		
			
				|  |  |        const partListNames = deepClone(_names) || []
 | 
	
		
			
				|  |  |        partListNames.forEach((item: any) => {
 | 
	
		
			
				|  |  | -        const index = forms.musicSheetSoundList.findIndex((ground: any) => item.value == ground.track)
 | 
	
		
			
				|  |  | +        const index = forms.musicSheetSoundList.findIndex(
 | 
	
		
			
				|  |  | +          (ground: any) => item.value == ground.track
 | 
	
		
			
				|  |  | +        )
 | 
	
		
			
				|  |  |          if (index > -1 && track != item.value) {
 | 
	
		
			
				|  |  |            item.disabled = true
 | 
	
		
			
				|  |  |          } else {
 | 
	
	
		
			
				|  | @@ -492,13 +515,16 @@ export default defineComponent({
 | 
	
		
			
				|  |  |      // 反显声部
 | 
	
		
			
				|  |  |      const showBackSubject = async (musicalInstrumentIdList: []) => {
 | 
	
		
			
				|  |  |        try {
 | 
	
		
			
				|  |  | -        const {data} = await subjectPage({page: 1, rows: 999, musicalInstrumentIdList: musicalInstrumentIdList})
 | 
	
		
			
				|  |  | +        const { data } = await subjectPage({
 | 
	
		
			
				|  |  | +          page: 1,
 | 
	
		
			
				|  |  | +          rows: 999,
 | 
	
		
			
				|  |  | +          musicalInstrumentIdList: musicalInstrumentIdList
 | 
	
		
			
				|  |  | +        })
 | 
	
		
			
				|  |  |          const tempList = data.rows || []
 | 
	
		
			
				|  |  |          tempList.forEach((item: any) => {
 | 
	
		
			
				|  |  |            forms.subjectIds.push(item.id + '')
 | 
	
		
			
				|  |  |          })
 | 
	
		
			
				|  |  | -      } catch {
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | +      } catch {}
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      // 添加原音
 | 
	
	
		
			
				|  | @@ -524,7 +550,7 @@ export default defineComponent({
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      const checkMultiTracks = (value: string) => {
 | 
	
		
			
				|  |  |        if (!value) {
 | 
	
		
			
				|  |  | -        return;
 | 
	
		
			
				|  |  | +        return
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |        if (value === 'all') {
 | 
	
		
			
				|  |  |          forms.multiTracksSelection = []
 | 
	
	
		
			
				|  | @@ -533,7 +559,7 @@ export default defineComponent({
 | 
	
		
			
				|  |  |          })
 | 
	
		
			
				|  |  |        } else if (value === 'invert') {
 | 
	
		
			
				|  |  |          state.partListNames.forEach((next: any) => {
 | 
	
		
			
				|  |  | -          const indexOf = forms.multiTracksSelection.indexOf(next.value);
 | 
	
		
			
				|  |  | +          const indexOf = forms.multiTracksSelection.indexOf(next.value)
 | 
	
		
			
				|  |  |            if (indexOf > -1) {
 | 
	
		
			
				|  |  |              forms.multiTracksSelection.splice(indexOf, 1)
 | 
	
		
			
				|  |  |            } else {
 | 
	
	
		
			
				|  | @@ -545,26 +571,27 @@ export default defineComponent({
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    const setOwnerName = (() => {
 | 
	
		
			
				|  |  | +    const setOwnerName = () => {
 | 
	
		
			
				|  |  |        if (forms.sourceType == 'PLATFORM') {
 | 
	
		
			
				|  |  |          state.ownerName = ''
 | 
	
		
			
				|  |  | -        return;
 | 
	
		
			
				|  |  | +        return
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |        if (!forms.musicSheetExtend || !forms.sourceType || !forms.musicSheetExtend?.userId) {
 | 
	
		
			
				|  |  | -        return;
 | 
	
		
			
				|  |  | +        return
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  | -      const appId = forms.musicSheetExtend.applicationId;
 | 
	
		
			
				|  |  | +      const appId = forms.musicSheetExtend.applicationId
 | 
	
		
			
				|  |  |        const app = state.appData.filter((next: any) => {
 | 
	
		
			
				|  |  |          return next.id == appId
 | 
	
		
			
				|  |  | -      }) as any;
 | 
	
		
			
				|  |  | +      }) as any
 | 
	
		
			
				|  |  |        if (app.length > 0) {
 | 
	
		
			
				|  |  |          state.ownerName = app[0].appName
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |        if (forms.sourceType == 'ORG') {
 | 
	
		
			
				|  |  |          state.ownerName += '-' + forms.musicSheetExtend.organizationRole
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |        } else if (forms.sourceType == 'PERSON') {
 | 
	
		
			
				|  |  | -        state.ownerName += '-' + getMapValueByKey(forms.musicSheetExtend.clientType, new Map(Object.entries(clientType)))
 | 
	
		
			
				|  |  | +        state.ownerName +=
 | 
	
		
			
				|  |  | +          '-' +
 | 
	
		
			
				|  |  | +          getMapValueByKey(forms.musicSheetExtend.clientType, new Map(Object.entries(clientType)))
 | 
	
		
			
				|  |  |          if (forms.musicSheetExtend.userName) {
 | 
	
		
			
				|  |  |            state.ownerName += '-' + forms.musicSheetExtend.userName
 | 
	
		
			
				|  |  |          }
 | 
	
	
		
			
				|  | @@ -572,7 +599,7 @@ export default defineComponent({
 | 
	
		
			
				|  |  |            state.ownerName += '(' + forms.musicSheetExtend.phone + ')'
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  | -    })
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      onMounted(async () => {
 | 
	
		
			
				|  |  |        state.loading = true
 | 
	
	
		
			
				|  | @@ -585,7 +612,7 @@ export default defineComponent({
 | 
	
		
			
				|  |  |            return
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          try {
 | 
	
		
			
				|  |  | -          const {data} = await musicalInstrumentPage({page: 1, rows: 999})
 | 
	
		
			
				|  |  | +          const { data } = await musicalInstrumentPage({ page: 1, rows: 999 })
 | 
	
		
			
				|  |  |            const tempList = data.rows || []
 | 
	
		
			
				|  |  |            state.instrumentData = tempList
 | 
	
		
			
				|  |  |            tempList.forEach((item: any) => {
 | 
	
	
		
			
				|  | @@ -594,8 +621,7 @@ export default defineComponent({
 | 
	
		
			
				|  |  |              item.disabled = !item.enableFlag
 | 
	
		
			
				|  |  |            })
 | 
	
		
			
				|  |  |            state.instrumentList = tempList
 | 
	
		
			
				|  |  | -        } catch {
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | +        } catch {}
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |        state.subjectList = deepClone(props.subjectList)
 | 
	
		
			
				|  |  |        state.subjectList.forEach((subject: any) => {
 | 
	
	
		
			
				|  | @@ -604,13 +630,13 @@ export default defineComponent({
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        // 初始化应用
 | 
	
		
			
				|  |  |        {
 | 
	
		
			
				|  |  | -        const appKeys = Object.keys(appKey);
 | 
	
		
			
				|  |  | +        const appKeys = Object.keys(appKey)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        const {data} = await sysApplicationPage({page: 1, rows: 999, parentId: 0})
 | 
	
		
			
				|  |  | +        const { data } = await sysApplicationPage({ page: 1, rows: 999, parentId: 0 })
 | 
	
		
			
				|  |  |          const tempList = data.rows || []
 | 
	
		
			
				|  |  |          const filter = tempList.filter((next: any) => {
 | 
	
		
			
				|  |  |            return appKeys.includes(next.appKey)
 | 
	
		
			
				|  |  | -        });
 | 
	
		
			
				|  |  | +        })
 | 
	
		
			
				|  |  |          filter.forEach((item: any) => {
 | 
	
		
			
				|  |  |            item.label = item.appName
 | 
	
		
			
				|  |  |            item.value = item.id
 | 
	
	
		
			
				|  | @@ -621,20 +647,19 @@ export default defineComponent({
 | 
	
		
			
				|  |  |        // 获取分类信息
 | 
	
		
			
				|  |  |        {
 | 
	
		
			
				|  |  |          try {
 | 
	
		
			
				|  |  | -          const {data} = await musicSheetCategoriesQueryTree({enable: true})
 | 
	
		
			
				|  |  | +          const { data } = await musicSheetCategoriesQueryTree({ enable: true })
 | 
	
		
			
				|  |  |            state.musicSheetCategories = filterPointCategory(data, 'musicSheetCategoriesList')
 | 
	
		
			
				|  |  | -        } catch (e) {
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | +        } catch (e) {}
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        if (props.type === 'edit' || props.type === 'preview') {
 | 
	
		
			
				|  |  |          const detail = props.data
 | 
	
		
			
				|  |  |          try {
 | 
	
		
			
				|  |  | -          const {data} = await musicSheetDetail({id: detail.id})
 | 
	
		
			
				|  |  | +          const { data } = await musicSheetDetail({ id: detail.id })
 | 
	
		
			
				|  |  |            forms.audioType = data.audioType
 | 
	
		
			
				|  |  |            forms.musicSheetAccompanimentList = data.musicSheetAccompanimentList
 | 
	
		
			
				|  |  |            data.musicSheetAccompanimentList?.forEach((next: any) => {
 | 
	
		
			
				|  |  | -            state.musicSheetAccompanimentUrlList.push(next.audioFileUrl);
 | 
	
		
			
				|  |  | +            state.musicSheetAccompanimentUrlList.push(next.audioFileUrl)
 | 
	
		
			
				|  |  |            })
 | 
	
		
			
				|  |  |            forms.playMode = data.playMode
 | 
	
		
			
				|  |  |            forms.xmlFileUrl = data.xmlFileUrl
 | 
	
	
		
			
				|  | @@ -653,7 +678,7 @@ export default defineComponent({
 | 
	
		
			
				|  |  |            forms.status = data.status
 | 
	
		
			
				|  |  |            forms.musicCategoryId = data.musicCategoryId
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -          forms.musicSheetType = data.musicSheetType || "SINGLE"
 | 
	
		
			
				|  |  | +          forms.musicSheetType = data.musicSheetType || 'SINGLE'
 | 
	
		
			
				|  |  |            forms.evaluationStandard = data.evaluationStandard
 | 
	
		
			
				|  |  |            forms.musicalInstrumentIdList = data.musicalInstrumentIds.split(',') || []
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -671,13 +696,12 @@ export default defineComponent({
 | 
	
		
			
				|  |  |            try {
 | 
	
		
			
				|  |  |              const extConfigJson = data.extConfigJson ? JSON.parse(data.extConfigJson) : {}
 | 
	
		
			
				|  |  |              forms.graduals = extConfigJson.gradualTimes || {}
 | 
	
		
			
				|  |  | -          } catch (error) {
 | 
	
		
			
				|  |  | -          }
 | 
	
		
			
				|  |  | +          } catch (error) {}
 | 
	
		
			
				|  |  |            setOwnerName()
 | 
	
		
			
				|  |  |            axios.get(data.xmlFileUrl).then((res: any) => {
 | 
	
		
			
				|  |  |              if (res?.data) {
 | 
	
		
			
				|  |  |                gradualData.list = getGradualLengthByXml(res?.data as any).filter(
 | 
	
		
			
				|  |  | -                  (item: any) => item.length === 2
 | 
	
		
			
				|  |  | +                (item: any) => item.length === 2
 | 
	
		
			
				|  |  |                )
 | 
	
		
			
				|  |  |                // state.partListNames = getPartListNames(res?.data as any) as any
 | 
	
		
			
				|  |  |                //
 | 
	
	
		
			
				|  | @@ -689,9 +713,7 @@ export default defineComponent({
 | 
	
		
			
				|  |  |                // })
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |            })
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        } catch (error) {
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | +        } catch (error) {}
 | 
	
		
			
				|  |  |        } else {
 | 
	
		
			
				|  |  |          // 新增只能使用启用状态的数据
 | 
	
		
			
				|  |  |          state.subjectList = state.subjectList.filter((next: any) => {
 | 
	
	
		
			
				|  | @@ -702,664 +724,723 @@ export default defineComponent({
 | 
	
		
			
				|  |  |          })
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |        state.loading = false
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |      })
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      return () => (
 | 
	
		
			
				|  |  | -        <div style="background: #fff; padding-top: 12px">
 | 
	
		
			
				|  |  | +      <div style="background: #fff; padding-top: 12px">
 | 
	
		
			
				|  |  | +        <NSpin show={state.loading}>
 | 
	
		
			
				|  |  |            <NForm
 | 
	
		
			
				|  |  | -              class={styles.formContainer}
 | 
	
		
			
				|  |  | -              model={forms}
 | 
	
		
			
				|  |  | -              ref={formsRef}
 | 
	
		
			
				|  |  | -              label-placement="left"
 | 
	
		
			
				|  |  | -              label-width="130"
 | 
	
		
			
				|  |  | -              disabled={state.previewMode}
 | 
	
		
			
				|  |  | +            class={styles.formContainer}
 | 
	
		
			
				|  |  | +            model={forms}
 | 
	
		
			
				|  |  | +            ref={formsRef}
 | 
	
		
			
				|  |  | +            label-placement="left"
 | 
	
		
			
				|  |  | +            label-width="130"
 | 
	
		
			
				|  |  | +            disabled={state.previewMode}
 | 
	
		
			
				|  |  |            >
 | 
	
		
			
				|  |  | -            <NAlert showIcon={false} style={{marginBottom: "12px"}}>曲目信息</NAlert>
 | 
	
		
			
				|  |  | +            <NAlert showIcon={false} style={{ marginBottom: '12px' }}>
 | 
	
		
			
				|  |  | +              曲目信息
 | 
	
		
			
				|  |  | +            </NAlert>
 | 
	
		
			
				|  |  |              <NGrid cols={2}>
 | 
	
		
			
				|  |  |                <NFormItemGi
 | 
	
		
			
				|  |  | -                  label="曲目名称"
 | 
	
		
			
				|  |  | -                  path="name"
 | 
	
		
			
				|  |  | -                  rule={[
 | 
	
		
			
				|  |  | -                    {
 | 
	
		
			
				|  |  | -                      required: true,
 | 
	
		
			
				|  |  | -                      message: '请输入曲目名称'
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -                  ]}
 | 
	
		
			
				|  |  | +                label="曲目名称"
 | 
	
		
			
				|  |  | +                path="name"
 | 
	
		
			
				|  |  | +                rule={[
 | 
	
		
			
				|  |  | +                  {
 | 
	
		
			
				|  |  | +                    required: true,
 | 
	
		
			
				|  |  | +                    message: '请输入曲目名称'
 | 
	
		
			
				|  |  | +                  }
 | 
	
		
			
				|  |  | +                ]}
 | 
	
		
			
				|  |  |                >
 | 
	
		
			
				|  |  |                  <NInput
 | 
	
		
			
				|  |  | -                    v-model:value={forms.name}
 | 
	
		
			
				|  |  | -                    placeholder="请输入曲目名称"
 | 
	
		
			
				|  |  | -                    maxlength={25}
 | 
	
		
			
				|  |  | -                    showCount
 | 
	
		
			
				|  |  | +                  v-model:value={forms.name}
 | 
	
		
			
				|  |  | +                  placeholder="请输入曲目名称"
 | 
	
		
			
				|  |  | +                  maxlength={25}
 | 
	
		
			
				|  |  | +                  showCount
 | 
	
		
			
				|  |  |                  />
 | 
	
		
			
				|  |  |                </NFormItemGi>
 | 
	
		
			
				|  |  |                <NFormItemGi
 | 
	
		
			
				|  |  | -                  label="音乐人"
 | 
	
		
			
				|  |  | -                  path="composer"
 | 
	
		
			
				|  |  | -                  rule={[
 | 
	
		
			
				|  |  | -                    {
 | 
	
		
			
				|  |  | -                      required: true,
 | 
	
		
			
				|  |  | -                      message: '请输入音乐人'
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -                  ]}
 | 
	
		
			
				|  |  | +                label="音乐人"
 | 
	
		
			
				|  |  | +                path="composer"
 | 
	
		
			
				|  |  | +                rule={[
 | 
	
		
			
				|  |  | +                  {
 | 
	
		
			
				|  |  | +                    required: true,
 | 
	
		
			
				|  |  | +                    message: '请输入音乐人'
 | 
	
		
			
				|  |  | +                  }
 | 
	
		
			
				|  |  | +                ]}
 | 
	
		
			
				|  |  |                >
 | 
	
		
			
				|  |  | -                <NInput v-model:value={forms.composer}
 | 
	
		
			
				|  |  | -                        placeholder="请输入音乐人名称"
 | 
	
		
			
				|  |  | -                        showCount
 | 
	
		
			
				|  |  | -                        maxlength={14}
 | 
	
		
			
				|  |  | +                <NInput
 | 
	
		
			
				|  |  | +                  v-model:value={forms.composer}
 | 
	
		
			
				|  |  | +                  placeholder="请输入音乐人名称"
 | 
	
		
			
				|  |  | +                  showCount
 | 
	
		
			
				|  |  | +                  maxlength={14}
 | 
	
		
			
				|  |  |                  />
 | 
	
		
			
				|  |  |                </NFormItemGi>
 | 
	
		
			
				|  |  |              </NGrid>
 | 
	
		
			
				|  |  |              <NGrid cols={2}>
 | 
	
		
			
				|  |  |                <NFormItemGi label="曲目描述" path="remark">
 | 
	
		
			
				|  |  |                  <NInput
 | 
	
		
			
				|  |  | -                    placeholder="请输入曲目描述"
 | 
	
		
			
				|  |  | -                    type="textarea"
 | 
	
		
			
				|  |  | -                    rows={4}
 | 
	
		
			
				|  |  | -                    showCount
 | 
	
		
			
				|  |  | -                    maxlength={200}
 | 
	
		
			
				|  |  | -                    v-model:value={forms.remark}
 | 
	
		
			
				|  |  | +                  placeholder="请输入曲目描述"
 | 
	
		
			
				|  |  | +                  type="textarea"
 | 
	
		
			
				|  |  | +                  rows={4}
 | 
	
		
			
				|  |  | +                  showCount
 | 
	
		
			
				|  |  | +                  maxlength={200}
 | 
	
		
			
				|  |  | +                  v-model:value={forms.remark}
 | 
	
		
			
				|  |  |                  />
 | 
	
		
			
				|  |  |                </NFormItemGi>
 | 
	
		
			
				|  |  | -              <NFormItemGi label="曲目封面" path="musicCover"
 | 
	
		
			
				|  |  | -                           rule={[
 | 
	
		
			
				|  |  | -                             {
 | 
	
		
			
				|  |  | -                               required: true,
 | 
	
		
			
				|  |  | -                               message: "请上传曲目封面"
 | 
	
		
			
				|  |  | -                             }
 | 
	
		
			
				|  |  | -                           ]}>
 | 
	
		
			
				|  |  | +              <NFormItemGi
 | 
	
		
			
				|  |  | +                label="曲目封面"
 | 
	
		
			
				|  |  | +                path="musicCover"
 | 
	
		
			
				|  |  | +                rule={[
 | 
	
		
			
				|  |  | +                  {
 | 
	
		
			
				|  |  | +                    required: true,
 | 
	
		
			
				|  |  | +                    message: '请上传曲目封面'
 | 
	
		
			
				|  |  | +                  }
 | 
	
		
			
				|  |  | +                ]}
 | 
	
		
			
				|  |  | +              >
 | 
	
		
			
				|  |  |                  <UploadFile
 | 
	
		
			
				|  |  | -                    desc={'封面图'}
 | 
	
		
			
				|  |  | -                    disabled={state.previewMode}
 | 
	
		
			
				|  |  | -                    accept=".jpg,.jpeg,.png"
 | 
	
		
			
				|  |  | -                    tips="请上传大小1M以内的JPG、PNG图片"
 | 
	
		
			
				|  |  | -                    size={1}
 | 
	
		
			
				|  |  | -                    v-model:fileList={forms.musicCover}
 | 
	
		
			
				|  |  | -                    cropper
 | 
	
		
			
				|  |  | -                    bucketName="cbs"
 | 
	
		
			
				|  |  | -                    options={{
 | 
	
		
			
				|  |  | -                      autoCrop: true, //是否默认生成截图框
 | 
	
		
			
				|  |  | -                      enlarge: 2, //  图片放大倍数
 | 
	
		
			
				|  |  | -                      autoCropWidth: 200, //默框高度
 | 
	
		
			
				|  |  | -                      fixedBox: true, //是否固定截图框大认生成截图框宽度
 | 
	
		
			
				|  |  | -                      autoCropHeight: 200, //默认生成截图小 不允许改变
 | 
	
		
			
				|  |  | -                      previewsCircle: false, //预览图是否是原圆形
 | 
	
		
			
				|  |  | -                      title: '曲目封面'
 | 
	
		
			
				|  |  | -                    }}
 | 
	
		
			
				|  |  | +                  desc={'封面图'}
 | 
	
		
			
				|  |  | +                  disabled={state.previewMode}
 | 
	
		
			
				|  |  | +                  accept=".jpg,.jpeg,.png"
 | 
	
		
			
				|  |  | +                  tips="请上传大小1M以内的JPG、PNG图片"
 | 
	
		
			
				|  |  | +                  size={1}
 | 
	
		
			
				|  |  | +                  v-model:fileList={forms.musicCover}
 | 
	
		
			
				|  |  | +                  cropper
 | 
	
		
			
				|  |  | +                  bucketName="cbs"
 | 
	
		
			
				|  |  | +                  options={{
 | 
	
		
			
				|  |  | +                    autoCrop: true, //是否默认生成截图框
 | 
	
		
			
				|  |  | +                    enlarge: 2, //  图片放大倍数
 | 
	
		
			
				|  |  | +                    autoCropWidth: 200, //默框高度
 | 
	
		
			
				|  |  | +                    fixedBox: true, //是否固定截图框大认生成截图框宽度
 | 
	
		
			
				|  |  | +                    autoCropHeight: 200, //默认生成截图小 不允许改变
 | 
	
		
			
				|  |  | +                    previewsCircle: false, //预览图是否是原圆形
 | 
	
		
			
				|  |  | +                    title: '曲目封面'
 | 
	
		
			
				|  |  | +                  }}
 | 
	
		
			
				|  |  |                  />
 | 
	
		
			
				|  |  |                </NFormItemGi>
 | 
	
		
			
				|  |  |              </NGrid>
 | 
	
		
			
				|  |  |              <NGrid cols={2}>
 | 
	
		
			
				|  |  |                <NFormItemGi
 | 
	
		
			
				|  |  | -                  label="曲目类型"
 | 
	
		
			
				|  |  | -                  path="musicSheetType"
 | 
	
		
			
				|  |  | -                  rule={[
 | 
	
		
			
				|  |  | -                    {
 | 
	
		
			
				|  |  | -                      required: true,
 | 
	
		
			
				|  |  | -                      message: '请选择曲目类型'
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -                  ]}
 | 
	
		
			
				|  |  | +                label="曲目类型"
 | 
	
		
			
				|  |  | +                path="musicSheetType"
 | 
	
		
			
				|  |  | +                rule={[
 | 
	
		
			
				|  |  | +                  {
 | 
	
		
			
				|  |  | +                    required: true,
 | 
	
		
			
				|  |  | +                    message: '请选择曲目类型'
 | 
	
		
			
				|  |  | +                  }
 | 
	
		
			
				|  |  | +                ]}
 | 
	
		
			
				|  |  |                >
 | 
	
		
			
				|  |  |                  <NSelect
 | 
	
		
			
				|  |  | -                    placeholder="请选择曲目类型"
 | 
	
		
			
				|  |  | -                    v-model:value={forms.musicSheetType}
 | 
	
		
			
				|  |  | -                    options={getSelectDataFromObj(musicSheetType)}
 | 
	
		
			
				|  |  | +                  placeholder="请选择曲目类型"
 | 
	
		
			
				|  |  | +                  v-model:value={forms.musicSheetType}
 | 
	
		
			
				|  |  | +                  options={getSelectDataFromObj(musicSheetType)}
 | 
	
		
			
				|  |  |                  />
 | 
	
		
			
				|  |  |                </NFormItemGi>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                <NFormItemGi
 | 
	
		
			
				|  |  | -                  label="作者属性"
 | 
	
		
			
				|  |  | -                  path="sourceType"
 | 
	
		
			
				|  |  | -                  rule={[
 | 
	
		
			
				|  |  | -                    {
 | 
	
		
			
				|  |  | -                      required: true,
 | 
	
		
			
				|  |  | -                      message: '请选择作者属性'
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -                  ]}
 | 
	
		
			
				|  |  | +                label="作者属性"
 | 
	
		
			
				|  |  | +                path="sourceType"
 | 
	
		
			
				|  |  | +                rule={[
 | 
	
		
			
				|  |  | +                  {
 | 
	
		
			
				|  |  | +                    required: true,
 | 
	
		
			
				|  |  | +                    message: '请选择作者属性'
 | 
	
		
			
				|  |  | +                  }
 | 
	
		
			
				|  |  | +                ]}
 | 
	
		
			
				|  |  |                >
 | 
	
		
			
				|  |  |                  <NSelect
 | 
	
		
			
				|  |  | -                    v-model:value={forms.sourceType}
 | 
	
		
			
				|  |  | -                    options={getSelectDataFromObj(musicSheetSourceType)}
 | 
	
		
			
				|  |  | -                    placeholder="请选择作者属性"
 | 
	
		
			
				|  |  | -                    onUpdateValue={() => {
 | 
	
		
			
				|  |  | -                      // 发送变化,清理选择的所属人信息
 | 
	
		
			
				|  |  | -                      forms.musicSheetExtend = {}
 | 
	
		
			
				|  |  | -                      state.ownerName = null
 | 
	
		
			
				|  |  | -                      // forms.musicSheetExtend.userId = null
 | 
	
		
			
				|  |  | -                      // forms.musicSheetExtend.userName = null
 | 
	
		
			
				|  |  | -                      // forms.musicSheetExtend.applicationId = null
 | 
	
		
			
				|  |  | -                      // forms.musicSheetExtend.organizationRoleId = null
 | 
	
		
			
				|  |  | -                    }}
 | 
	
		
			
				|  |  | +                  v-model:value={forms.sourceType}
 | 
	
		
			
				|  |  | +                  options={getSelectDataFromObj(musicSheetSourceType)}
 | 
	
		
			
				|  |  | +                  placeholder="请选择作者属性"
 | 
	
		
			
				|  |  | +                  onUpdateValue={() => {
 | 
	
		
			
				|  |  | +                    // 发送变化,清理选择的所属人信息
 | 
	
		
			
				|  |  | +                    forms.musicSheetExtend = {}
 | 
	
		
			
				|  |  | +                    state.ownerName = null
 | 
	
		
			
				|  |  | +                    // forms.musicSheetExtend.userId = null
 | 
	
		
			
				|  |  | +                    // forms.musicSheetExtend.userName = null
 | 
	
		
			
				|  |  | +                    // forms.musicSheetExtend.applicationId = null
 | 
	
		
			
				|  |  | +                    // forms.musicSheetExtend.organizationRoleId = null
 | 
	
		
			
				|  |  | +                  }}
 | 
	
		
			
				|  |  |                  />
 | 
	
		
			
				|  |  |                </NFormItemGi>
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |              </NGrid>
 | 
	
		
			
				|  |  |              <NGrid cols={2}>
 | 
	
		
			
				|  |  |                {forms.sourceType === 'PERSON' && (
 | 
	
		
			
				|  |  | -                  <NFormItemGi
 | 
	
		
			
				|  |  | -                      label="所属人"
 | 
	
		
			
				|  |  | -                      path="musicSheetExtend.userId"
 | 
	
		
			
				|  |  | -                      rule={[
 | 
	
		
			
				|  |  | -                        {
 | 
	
		
			
				|  |  | -                          required: true,
 | 
	
		
			
				|  |  | -                          message: '请选择曲目所属人'
 | 
	
		
			
				|  |  | -                        }
 | 
	
		
			
				|  |  | -                      ]}
 | 
	
		
			
				|  |  | +                <NFormItemGi
 | 
	
		
			
				|  |  | +                  label="所属人"
 | 
	
		
			
				|  |  | +                  path="musicSheetExtend.userId"
 | 
	
		
			
				|  |  | +                  rule={[
 | 
	
		
			
				|  |  | +                    {
 | 
	
		
			
				|  |  | +                      required: true,
 | 
	
		
			
				|  |  | +                      message: '请选择曲目所属人'
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                  ]}
 | 
	
		
			
				|  |  | +                >
 | 
	
		
			
				|  |  | +                  <NButton
 | 
	
		
			
				|  |  | +                    disabled={state.previewMode || !forms.sourceType}
 | 
	
		
			
				|  |  | +                    type="primary"
 | 
	
		
			
				|  |  | +                    size="small"
 | 
	
		
			
				|  |  | +                    text
 | 
	
		
			
				|  |  | +                    //v-auth="orchestraSubsidyStandard/update1597887579789053953"
 | 
	
		
			
				|  |  | +                    onClick={() => {
 | 
	
		
			
				|  |  | +                      state.showMusicSheetOwnerDialog = true
 | 
	
		
			
				|  |  | +                    }}
 | 
	
		
			
				|  |  |                    >
 | 
	
		
			
				|  |  | -                    <NButton
 | 
	
		
			
				|  |  | -                        disabled={state.previewMode || !forms.sourceType}
 | 
	
		
			
				|  |  | -                        type="primary"
 | 
	
		
			
				|  |  | -                        size="small"
 | 
	
		
			
				|  |  | -                        text
 | 
	
		
			
				|  |  | -                        //v-auth="orchestraSubsidyStandard/update1597887579789053953"
 | 
	
		
			
				|  |  | -                        onClick={() => {
 | 
	
		
			
				|  |  | -                          state.showMusicSheetOwnerDialog = true
 | 
	
		
			
				|  |  | -                        }}
 | 
	
		
			
				|  |  | -                    >
 | 
	
		
			
				|  |  | -                      {state.ownerName ? state.ownerName : '请选择所属人'}
 | 
	
		
			
				|  |  | -                    </NButton>
 | 
	
		
			
				|  |  | -                  </NFormItemGi>)}
 | 
	
		
			
				|  |  | +                    {state.ownerName ? state.ownerName : '请选择所属人'}
 | 
	
		
			
				|  |  | +                  </NButton>
 | 
	
		
			
				|  |  | +                </NFormItemGi>
 | 
	
		
			
				|  |  | +              )}
 | 
	
		
			
				|  |  |                {forms.sourceType === 'ORG' && (
 | 
	
		
			
				|  |  | -                  <NFormItemGi
 | 
	
		
			
				|  |  | -                      label="所属人"
 | 
	
		
			
				|  |  | -                      path="musicSheetExtend.organizationRoleId"
 | 
	
		
			
				|  |  | -                      rule={[
 | 
	
		
			
				|  |  | -                        {
 | 
	
		
			
				|  |  | -                          required: true,
 | 
	
		
			
				|  |  | -                          message: '请选择曲目所属机构'
 | 
	
		
			
				|  |  | -                        }
 | 
	
		
			
				|  |  | -                      ]}
 | 
	
		
			
				|  |  | +                <NFormItemGi
 | 
	
		
			
				|  |  | +                  label="所属人"
 | 
	
		
			
				|  |  | +                  path="musicSheetExtend.organizationRoleId"
 | 
	
		
			
				|  |  | +                  rule={[
 | 
	
		
			
				|  |  | +                    {
 | 
	
		
			
				|  |  | +                      required: true,
 | 
	
		
			
				|  |  | +                      message: '请选择曲目所属机构'
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                  ]}
 | 
	
		
			
				|  |  | +                >
 | 
	
		
			
				|  |  | +                  <NButton
 | 
	
		
			
				|  |  | +                    disabled={state.previewMode || !forms.sourceType}
 | 
	
		
			
				|  |  | +                    type="primary"
 | 
	
		
			
				|  |  | +                    size="small"
 | 
	
		
			
				|  |  | +                    text
 | 
	
		
			
				|  |  | +                    //v-auth="orchestraSubsidyStandard/update1597887579789053953"
 | 
	
		
			
				|  |  | +                    onClick={() => {
 | 
	
		
			
				|  |  | +                      state.showMusicSheetOwnerDialog = true
 | 
	
		
			
				|  |  | +                    }}
 | 
	
		
			
				|  |  |                    >
 | 
	
		
			
				|  |  | -                    <NButton
 | 
	
		
			
				|  |  | -                        disabled={state.previewMode || !forms.sourceType}
 | 
	
		
			
				|  |  | -                        type="primary"
 | 
	
		
			
				|  |  | -                        size="small"
 | 
	
		
			
				|  |  | -                        text
 | 
	
		
			
				|  |  | -                        //v-auth="orchestraSubsidyStandard/update1597887579789053953"
 | 
	
		
			
				|  |  | -                        onClick={() => {
 | 
	
		
			
				|  |  | -                          state.showMusicSheetOwnerDialog = true
 | 
	
		
			
				|  |  | -                        }}
 | 
	
		
			
				|  |  | -                    >
 | 
	
		
			
				|  |  | -                      {state.ownerName ? state.ownerName : '请选择所属机构'}
 | 
	
		
			
				|  |  | -                    </NButton>
 | 
	
		
			
				|  |  | -                  </NFormItemGi>)}
 | 
	
		
			
				|  |  | -              <NFormItemGi label="速度" path="playSpeed"
 | 
	
		
			
				|  |  | -                           rule={[
 | 
	
		
			
				|  |  | -                             {
 | 
	
		
			
				|  |  | -                               required: false,
 | 
	
		
			
				|  |  | -                               message: '请输入速度'
 | 
	
		
			
				|  |  | -                             }
 | 
	
		
			
				|  |  | -                           ]}
 | 
	
		
			
				|  |  | +                    {state.ownerName ? state.ownerName : '请选择所属机构'}
 | 
	
		
			
				|  |  | +                  </NButton>
 | 
	
		
			
				|  |  | +                </NFormItemGi>
 | 
	
		
			
				|  |  | +              )}
 | 
	
		
			
				|  |  | +              <NFormItemGi
 | 
	
		
			
				|  |  | +                label="速度"
 | 
	
		
			
				|  |  | +                path="playSpeed"
 | 
	
		
			
				|  |  | +                rule={[
 | 
	
		
			
				|  |  | +                  {
 | 
	
		
			
				|  |  | +                    required: false,
 | 
	
		
			
				|  |  | +                    message: '请输入速度'
 | 
	
		
			
				|  |  | +                  }
 | 
	
		
			
				|  |  | +                ]}
 | 
	
		
			
				|  |  |                >
 | 
	
		
			
				|  |  |                  <NInputNumber
 | 
	
		
			
				|  |  | -                    placeholder="请输入速度"
 | 
	
		
			
				|  |  | -                    v-model:value={forms.playSpeed}
 | 
	
		
			
				|  |  | -                    style="width:100%"
 | 
	
		
			
				|  |  | +                  placeholder="请输入速度"
 | 
	
		
			
				|  |  | +                  v-model:value={forms.playSpeed}
 | 
	
		
			
				|  |  | +                  style="width:100%"
 | 
	
		
			
				|  |  |                  />
 | 
	
		
			
				|  |  |                </NFormItemGi>
 | 
	
		
			
				|  |  |              </NGrid>
 | 
	
		
			
				|  |  |              <NGrid cols={2}>
 | 
	
		
			
				|  |  | -              <NFormItemGi label="审核版本" path="appAuditFlag"
 | 
	
		
			
				|  |  | -                           rule={[
 | 
	
		
			
				|  |  | -                             {
 | 
	
		
			
				|  |  | -                               required: true,
 | 
	
		
			
				|  |  | -                               message: '请选择曲目所属人'
 | 
	
		
			
				|  |  | -                             }
 | 
	
		
			
				|  |  | -                           ]}
 | 
	
		
			
				|  |  | +              <NFormItemGi
 | 
	
		
			
				|  |  | +                label="审核版本"
 | 
	
		
			
				|  |  | +                path="appAuditFlag"
 | 
	
		
			
				|  |  | +                rule={[
 | 
	
		
			
				|  |  | +                  {
 | 
	
		
			
				|  |  | +                    required: true,
 | 
	
		
			
				|  |  | +                    message: '请选择曲目所属人'
 | 
	
		
			
				|  |  | +                  }
 | 
	
		
			
				|  |  | +                ]}
 | 
	
		
			
				|  |  |                >
 | 
	
		
			
				|  |  |                  <NSelect
 | 
	
		
			
				|  |  | -                    options={
 | 
	
		
			
				|  |  | -                      [
 | 
	
		
			
				|  |  | -                        {
 | 
	
		
			
				|  |  | -                          label: '是',
 | 
	
		
			
				|  |  | -                          value: 1
 | 
	
		
			
				|  |  | -                        },
 | 
	
		
			
				|  |  | -                        {
 | 
	
		
			
				|  |  | -                          label: '否',
 | 
	
		
			
				|  |  | -                          value: 0
 | 
	
		
			
				|  |  | -                        }
 | 
	
		
			
				|  |  | -                      ] as any
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -                    v-model:value={forms.appAuditFlag}
 | 
	
		
			
				|  |  | +                  options={
 | 
	
		
			
				|  |  | +                    [
 | 
	
		
			
				|  |  | +                      {
 | 
	
		
			
				|  |  | +                        label: '是',
 | 
	
		
			
				|  |  | +                        value: 1
 | 
	
		
			
				|  |  | +                      },
 | 
	
		
			
				|  |  | +                      {
 | 
	
		
			
				|  |  | +                        label: '否',
 | 
	
		
			
				|  |  | +                        value: 0
 | 
	
		
			
				|  |  | +                      }
 | 
	
		
			
				|  |  | +                    ] as any
 | 
	
		
			
				|  |  | +                  }
 | 
	
		
			
				|  |  | +                  v-model:value={forms.appAuditFlag}
 | 
	
		
			
				|  |  |                  />
 | 
	
		
			
				|  |  |                </NFormItemGi>
 | 
	
		
			
				|  |  | -              <NFormItemGi label="曲目分类" path="musicCategoryId"
 | 
	
		
			
				|  |  | -                           rule={[
 | 
	
		
			
				|  |  | -                             {
 | 
	
		
			
				|  |  | -                               required: true,
 | 
	
		
			
				|  |  | -                               message: '请选择曲目分类'
 | 
	
		
			
				|  |  | -                             }
 | 
	
		
			
				|  |  | -                           ]}
 | 
	
		
			
				|  |  | +              <NFormItemGi
 | 
	
		
			
				|  |  | +                label="曲目分类"
 | 
	
		
			
				|  |  | +                path="musicCategoryId"
 | 
	
		
			
				|  |  | +                rule={[
 | 
	
		
			
				|  |  | +                  {
 | 
	
		
			
				|  |  | +                    required: true,
 | 
	
		
			
				|  |  | +                    message: '请选择曲目分类'
 | 
	
		
			
				|  |  | +                  }
 | 
	
		
			
				|  |  | +                ]}
 | 
	
		
			
				|  |  |                >
 | 
	
		
			
				|  |  |                  <NCascader
 | 
	
		
			
				|  |  | -                    valueField="id"
 | 
	
		
			
				|  |  | -                    labelField="name"
 | 
	
		
			
				|  |  | -                    children-field="musicSheetCategoriesList"
 | 
	
		
			
				|  |  | -                    placeholder="请选择分类"
 | 
	
		
			
				|  |  | -                    v-model:value={forms.musicCategoryId}
 | 
	
		
			
				|  |  | -                    options={state.musicSheetCategories}
 | 
	
		
			
				|  |  | -                    clearable
 | 
	
		
			
				|  |  | +                  valueField="id"
 | 
	
		
			
				|  |  | +                  labelField="name"
 | 
	
		
			
				|  |  | +                  children-field="musicSheetCategoriesList"
 | 
	
		
			
				|  |  | +                  placeholder="请选择分类"
 | 
	
		
			
				|  |  | +                  v-model:value={forms.musicCategoryId}
 | 
	
		
			
				|  |  | +                  options={state.musicSheetCategories}
 | 
	
		
			
				|  |  | +                  clearable
 | 
	
		
			
				|  |  |                  />
 | 
	
		
			
				|  |  |                </NFormItemGi>
 | 
	
		
			
				|  |  |              </NGrid>
 | 
	
		
			
				|  |  |              <NGrid cols={2}>
 | 
	
		
			
				|  |  | -              <NFormItemGi label="重复节拍时长" path="repeatedBeats"
 | 
	
		
			
				|  |  | -                           rule={[
 | 
	
		
			
				|  |  | -                             {
 | 
	
		
			
				|  |  | -                               required: true,
 | 
	
		
			
				|  |  | -                               message: '请选择是否重复节拍时长'
 | 
	
		
			
				|  |  | -                             }
 | 
	
		
			
				|  |  | -                           ]}
 | 
	
		
			
				|  |  | +              <NFormItemGi
 | 
	
		
			
				|  |  | +                label="重复节拍时长"
 | 
	
		
			
				|  |  | +                path="repeatedBeats"
 | 
	
		
			
				|  |  | +                rule={[
 | 
	
		
			
				|  |  | +                  {
 | 
	
		
			
				|  |  | +                    required: true,
 | 
	
		
			
				|  |  | +                    message: '请选择是否重复节拍时长'
 | 
	
		
			
				|  |  | +                  }
 | 
	
		
			
				|  |  | +                ]}
 | 
	
		
			
				|  |  |                >
 | 
	
		
			
				|  |  | -                <NRadioGroup
 | 
	
		
			
				|  |  | -                    v-model:value={forms.repeatedBeats}
 | 
	
		
			
				|  |  | -                >
 | 
	
		
			
				|  |  | +                <NRadioGroup v-model:value={forms.repeatedBeats}>
 | 
	
		
			
				|  |  |                    <NRadio value={true}>是</NRadio>
 | 
	
		
			
				|  |  |                    <NRadio value={false}>否</NRadio>
 | 
	
		
			
				|  |  |                  </NRadioGroup>
 | 
	
		
			
				|  |  |                </NFormItemGi>
 | 
	
		
			
				|  |  |                <NFormItemGi
 | 
	
		
			
				|  |  | -                  label="评分标准"
 | 
	
		
			
				|  |  | -                  path="evaluationStandard"
 | 
	
		
			
				|  |  | -                  rule={[
 | 
	
		
			
				|  |  | -                    {
 | 
	
		
			
				|  |  | -                      required: true
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -                  ]}
 | 
	
		
			
				|  |  | +                label="评分标准"
 | 
	
		
			
				|  |  | +                path="evaluationStandard"
 | 
	
		
			
				|  |  | +                rule={[
 | 
	
		
			
				|  |  | +                  {
 | 
	
		
			
				|  |  | +                    required: true
 | 
	
		
			
				|  |  | +                  }
 | 
	
		
			
				|  |  | +                ]}
 | 
	
		
			
				|  |  |                >
 | 
	
		
			
				|  |  | -                <NRadioGroup
 | 
	
		
			
				|  |  | -                    v-model:value={forms.evaluationStandard}
 | 
	
		
			
				|  |  | -                >
 | 
	
		
			
				|  |  | +                <NRadioGroup v-model:value={forms.evaluationStandard}>
 | 
	
		
			
				|  |  |                    <NRadio value={'FREQUENCY'}>标准评测</NRadio>
 | 
	
		
			
				|  |  |                    <NRadio value={'AMPLITUDE'}>打击乐(振幅)</NRadio>
 | 
	
		
			
				|  |  |                    <NRadio value={'DECIBELS'}>节奏(分贝)</NRadio>
 | 
	
		
			
				|  |  |                  </NRadioGroup>
 | 
	
		
			
				|  |  |                </NFormItemGi>
 | 
	
		
			
				|  |  |              </NGrid>
 | 
	
		
			
				|  |  | -            <NAlert showIcon={false} style={{marginBottom: "12px"}}>曲目上传</NAlert>
 | 
	
		
			
				|  |  | +            <NAlert showIcon={false} style={{ marginBottom: '12px' }}>
 | 
	
		
			
				|  |  | +              曲目上传
 | 
	
		
			
				|  |  | +            </NAlert>
 | 
	
		
			
				|  |  |              <NGrid cols={2}>
 | 
	
		
			
				|  |  | -              <NFormItemGi label="播放模式" path="playMode"
 | 
	
		
			
				|  |  | -                           rule={[
 | 
	
		
			
				|  |  | -                             {
 | 
	
		
			
				|  |  | -                               required: true,
 | 
	
		
			
				|  |  | -                               message: '请选择播放模式'
 | 
	
		
			
				|  |  | -                             }
 | 
	
		
			
				|  |  | -                           ]}
 | 
	
		
			
				|  |  | +              <NFormItemGi
 | 
	
		
			
				|  |  | +                label="播放模式"
 | 
	
		
			
				|  |  | +                path="playMode"
 | 
	
		
			
				|  |  | +                rule={[
 | 
	
		
			
				|  |  | +                  {
 | 
	
		
			
				|  |  | +                    required: true,
 | 
	
		
			
				|  |  | +                    message: '请选择播放模式'
 | 
	
		
			
				|  |  | +                  }
 | 
	
		
			
				|  |  | +                ]}
 | 
	
		
			
				|  |  |                >
 | 
	
		
			
				|  |  |                  <NRadioGroup
 | 
	
		
			
				|  |  | -                    v-model:value={forms.playMode}
 | 
	
		
			
				|  |  | -                    onUpdateValue={(value: string | number | boolean) => {
 | 
	
		
			
				|  |  | -                      if (value === 'MP3') {
 | 
	
		
			
				|  |  | -                        forms.playMode = 'MP3'
 | 
	
		
			
				|  |  | -                      } else {
 | 
	
		
			
				|  |  | -                        forms.playMode = 'MIDI'
 | 
	
		
			
				|  |  | -                      }
 | 
	
		
			
				|  |  | -                    }}
 | 
	
		
			
				|  |  | +                  v-model:value={forms.playMode}
 | 
	
		
			
				|  |  | +                  onUpdateValue={(value: string | number | boolean) => {
 | 
	
		
			
				|  |  | +                    if (value === 'MP3') {
 | 
	
		
			
				|  |  | +                      forms.playMode = 'MP3'
 | 
	
		
			
				|  |  | +                    } else {
 | 
	
		
			
				|  |  | +                      forms.playMode = 'MIDI'
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                  }}
 | 
	
		
			
				|  |  |                  >
 | 
	
		
			
				|  |  |                    <NRadio value="MP3">MP3</NRadio>
 | 
	
		
			
				|  |  |                    <NRadio value="MIDI">MID</NRadio>
 | 
	
		
			
				|  |  |                  </NRadioGroup>
 | 
	
		
			
				|  |  |                </NFormItemGi>
 | 
	
		
			
				|  |  |                {forms.playMode === 'MP3' && (
 | 
	
		
			
				|  |  | -                  <NFormItemGi
 | 
	
		
			
				|  |  | -                      label="伴奏类型"
 | 
	
		
			
				|  |  | -                      path="audioType"
 | 
	
		
			
				|  |  | -                      rule={[
 | 
	
		
			
				|  |  | -                        {
 | 
	
		
			
				|  |  | -                          required: true,
 | 
	
		
			
				|  |  | -                          message: '请选择伴奏类型'
 | 
	
		
			
				|  |  | -                        }
 | 
	
		
			
				|  |  | -                      ]}
 | 
	
		
			
				|  |  | -                  >
 | 
	
		
			
				|  |  | -                    <NRadioGroup
 | 
	
		
			
				|  |  | -                        v-model:value={forms.audioType}
 | 
	
		
			
				|  |  | -                    >
 | 
	
		
			
				|  |  | -                      <NRadio value={'HOMEMODE'}>自制伴奏</NRadio>
 | 
	
		
			
				|  |  | -                      <NRadio value={'COMMON'}>普通伴奏</NRadio>
 | 
	
		
			
				|  |  | -                    </NRadioGroup>
 | 
	
		
			
				|  |  | -                  </NFormItemGi>
 | 
	
		
			
				|  |  | +                <NFormItemGi
 | 
	
		
			
				|  |  | +                  label="伴奏类型"
 | 
	
		
			
				|  |  | +                  path="audioType"
 | 
	
		
			
				|  |  | +                  rule={[
 | 
	
		
			
				|  |  | +                    {
 | 
	
		
			
				|  |  | +                      required: true,
 | 
	
		
			
				|  |  | +                      message: '请选择伴奏类型'
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                  ]}
 | 
	
		
			
				|  |  | +                >
 | 
	
		
			
				|  |  | +                  <NRadioGroup v-model:value={forms.audioType}>
 | 
	
		
			
				|  |  | +                    <NRadio value={'HOMEMODE'}>自制伴奏</NRadio>
 | 
	
		
			
				|  |  | +                    <NRadio value={'COMMON'}>普通伴奏</NRadio>
 | 
	
		
			
				|  |  | +                  </NRadioGroup>
 | 
	
		
			
				|  |  | +                </NFormItemGi>
 | 
	
		
			
				|  |  |                )}
 | 
	
		
			
				|  |  |              </NGrid>
 | 
	
		
			
				|  |  |              <NGrid cols={2}>
 | 
	
		
			
				|  |  |                {forms.playMode === 'MP3' && (
 | 
	
		
			
				|  |  | -                  <NFormItemGi
 | 
	
		
			
				|  |  | -                      label="上传伴奏"
 | 
	
		
			
				|  |  | -                      path="musicSheetAccompanimentList"
 | 
	
		
			
				|  |  | -                      rule={[
 | 
	
		
			
				|  |  | -                        {
 | 
	
		
			
				|  |  | -                          required: false,
 | 
	
		
			
				|  |  | -                          message: '请选择上传.mp3'
 | 
	
		
			
				|  |  | -                        }
 | 
	
		
			
				|  |  | -                      ]}
 | 
	
		
			
				|  |  | -                  >
 | 
	
		
			
				|  |  | -                    <UploadFile
 | 
	
		
			
				|  |  | -                        disabled={state.previewMode}
 | 
	
		
			
				|  |  | -                        size={10}
 | 
	
		
			
				|  |  | -                        v-model:imageList={state.musicSheetAccompanimentUrlList}
 | 
	
		
			
				|  |  | -                        tips="仅支持上传.mp3格式文件"
 | 
	
		
			
				|  |  | -                        listType="image"
 | 
	
		
			
				|  |  | -                        accept=".mp3"
 | 
	
		
			
				|  |  | -                        bucketName="cloud-coach"
 | 
	
		
			
				|  |  | -                        text="点击上传伴奏文件"
 | 
	
		
			
				|  |  | -                        max={10}
 | 
	
		
			
				|  |  | -                        desc={'上传伴奏文件'}
 | 
	
		
			
				|  |  | -                        onUpload:success={(file) => {
 | 
	
		
			
				|  |  | -                          state.musicSheetAccompanimentUrls = [state.musicSheetAccompanimentUrls, file.url].filter(Boolean).join(',')
 | 
	
		
			
				|  |  | -                          state.musicSheetAccompanimentUrlList = state.musicSheetAccompanimentUrls?.split(',').filter(Boolean)
 | 
	
		
			
				|  |  | -                          forms.musicSheetAccompanimentList = []
 | 
	
		
			
				|  |  | -                          for (let i = 0; i < state.musicSheetAccompanimentUrlList.length; i++) {
 | 
	
		
			
				|  |  | -                            forms.musicSheetAccompanimentList.push({
 | 
	
		
			
				|  |  | -                              audioFileUrl: state.musicSheetAccompanimentUrlList[i],
 | 
	
		
			
				|  |  | -                              sortNumber: i + 1
 | 
	
		
			
				|  |  | -                            })
 | 
	
		
			
				|  |  | -                          }
 | 
	
		
			
				|  |  | -                        }}
 | 
	
		
			
				|  |  | -                        onRemove={() => {
 | 
	
		
			
				|  |  | -                          state.musicSheetAccompanimentUrlList = []
 | 
	
		
			
				|  |  | -                          state.musicSheetAccompanimentUrls = ''
 | 
	
		
			
				|  |  | -                        }}
 | 
	
		
			
				|  |  | -                        // onReadFileInputEventAsArrayBuffer={readFileInputEventAsArrayBuffer}
 | 
	
		
			
				|  |  | -                        multiple={true}
 | 
	
		
			
				|  |  | -                    />
 | 
	
		
			
				|  |  | -                  </NFormItemGi>
 | 
	
		
			
				|  |  | +                <NFormItemGi
 | 
	
		
			
				|  |  | +                  label="上传伴奏"
 | 
	
		
			
				|  |  | +                  path="musicSheetAccompanimentList"
 | 
	
		
			
				|  |  | +                  rule={[
 | 
	
		
			
				|  |  | +                    {
 | 
	
		
			
				|  |  | +                      required: false,
 | 
	
		
			
				|  |  | +                      message: '请选择上传.mp3'
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                  ]}
 | 
	
		
			
				|  |  | +                >
 | 
	
		
			
				|  |  | +                  <UploadFile
 | 
	
		
			
				|  |  | +                    disabled={state.previewMode}
 | 
	
		
			
				|  |  | +                    size={10}
 | 
	
		
			
				|  |  | +                    v-model:imageList={state.musicSheetAccompanimentUrlList}
 | 
	
		
			
				|  |  | +                    tips="仅支持上传.mp3格式文件"
 | 
	
		
			
				|  |  | +                    listType="image"
 | 
	
		
			
				|  |  | +                    accept=".mp3"
 | 
	
		
			
				|  |  | +                    bucketName="cloud-coach"
 | 
	
		
			
				|  |  | +                    text="点击上传伴奏文件"
 | 
	
		
			
				|  |  | +                    max={10}
 | 
	
		
			
				|  |  | +                    desc={'上传伴奏文件'}
 | 
	
		
			
				|  |  | +                    onUpload:success={(file) => {
 | 
	
		
			
				|  |  | +                      state.musicSheetAccompanimentUrls = [
 | 
	
		
			
				|  |  | +                        state.musicSheetAccompanimentUrls,
 | 
	
		
			
				|  |  | +                        file.url
 | 
	
		
			
				|  |  | +                      ]
 | 
	
		
			
				|  |  | +                        .filter(Boolean)
 | 
	
		
			
				|  |  | +                        .join(',')
 | 
	
		
			
				|  |  | +                      state.musicSheetAccompanimentUrlList = state.musicSheetAccompanimentUrls
 | 
	
		
			
				|  |  | +                        ?.split(',')
 | 
	
		
			
				|  |  | +                        .filter(Boolean)
 | 
	
		
			
				|  |  | +                      forms.musicSheetAccompanimentList = []
 | 
	
		
			
				|  |  | +                      for (let i = 0; i < state.musicSheetAccompanimentUrlList.length; i++) {
 | 
	
		
			
				|  |  | +                        forms.musicSheetAccompanimentList.push({
 | 
	
		
			
				|  |  | +                          audioFileUrl: state.musicSheetAccompanimentUrlList[i],
 | 
	
		
			
				|  |  | +                          sortNumber: i + 1
 | 
	
		
			
				|  |  | +                        })
 | 
	
		
			
				|  |  | +                      }
 | 
	
		
			
				|  |  | +                    }}
 | 
	
		
			
				|  |  | +                    onRemove={() => {
 | 
	
		
			
				|  |  | +                      state.musicSheetAccompanimentUrlList = []
 | 
	
		
			
				|  |  | +                      state.musicSheetAccompanimentUrls = ''
 | 
	
		
			
				|  |  | +                    }}
 | 
	
		
			
				|  |  | +                    // onReadFileInputEventAsArrayBuffer={readFileInputEventAsArrayBuffer}
 | 
	
		
			
				|  |  | +                    multiple={true}
 | 
	
		
			
				|  |  | +                  />
 | 
	
		
			
				|  |  | +                </NFormItemGi>
 | 
	
		
			
				|  |  |                )}
 | 
	
		
			
				|  |  |                {forms.playMode === 'MIDI' && (
 | 
	
		
			
				|  |  | -                  <NFormItemGi
 | 
	
		
			
				|  |  | -                      label="上传MID"
 | 
	
		
			
				|  |  | -                      path="midiFileUrl"
 | 
	
		
			
				|  |  | -                      rule={[
 | 
	
		
			
				|  |  | -                        {
 | 
	
		
			
				|  |  | -                          required: true,
 | 
	
		
			
				|  |  | -                          message: '请选择上传.MID格式文件'
 | 
	
		
			
				|  |  | -                        }
 | 
	
		
			
				|  |  | -                      ]}
 | 
	
		
			
				|  |  | -                  >
 | 
	
		
			
				|  |  | -                    <UploadFile
 | 
	
		
			
				|  |  | -                        desc={'MIDI文件'}
 | 
	
		
			
				|  |  | -                        disabled={state.previewMode}
 | 
	
		
			
				|  |  | -                        size={10}
 | 
	
		
			
				|  |  | -                        v-model:fileList={forms.midiFileUrl}
 | 
	
		
			
				|  |  | -                        tips="仅支持上传.MID格式文件"
 | 
	
		
			
				|  |  | -                        listType="image"
 | 
	
		
			
				|  |  | -                        accept=".mid"
 | 
	
		
			
				|  |  | -                        bucketName="cloud-coach"
 | 
	
		
			
				|  |  | -                        text="点击上传MID文件"
 | 
	
		
			
				|  |  | -                        // onReadFileInputEventAsArrayBuffer={readFileInputEventAsArrayBuffer}
 | 
	
		
			
				|  |  | -                    />
 | 
	
		
			
				|  |  | -                  </NFormItemGi>
 | 
	
		
			
				|  |  | -              )}
 | 
	
		
			
				|  |  | -              <NFormItemGi
 | 
	
		
			
				|  |  | -                  label="上传XML"
 | 
	
		
			
				|  |  | -                  path="xmlFileUrl"
 | 
	
		
			
				|  |  | +                <NFormItemGi
 | 
	
		
			
				|  |  | +                  label="上传MID"
 | 
	
		
			
				|  |  | +                  path="midiFileUrl"
 | 
	
		
			
				|  |  |                    rule={[
 | 
	
		
			
				|  |  |                      {
 | 
	
		
			
				|  |  |                        required: true,
 | 
	
		
			
				|  |  | -                      message: '请选择上传XML'
 | 
	
		
			
				|  |  | +                      message: '请选择上传.MID格式文件'
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  |                    ]}
 | 
	
		
			
				|  |  | -              >
 | 
	
		
			
				|  |  | -                <UploadFile
 | 
	
		
			
				|  |  | -                    desc={'XML文件'}
 | 
	
		
			
				|  |  | +                >
 | 
	
		
			
				|  |  | +                  <UploadFile
 | 
	
		
			
				|  |  | +                    desc={'MIDI文件'}
 | 
	
		
			
				|  |  |                      disabled={state.previewMode}
 | 
	
		
			
				|  |  |                      size={10}
 | 
	
		
			
				|  |  | -                    v-model:fileList={forms.xmlFileUrl}
 | 
	
		
			
				|  |  | -                    tips="仅支持上传.xml/.mxml格式文件"
 | 
	
		
			
				|  |  | +                    v-model:fileList={forms.midiFileUrl}
 | 
	
		
			
				|  |  | +                    tips="仅支持上传.MID格式文件"
 | 
	
		
			
				|  |  |                      listType="image"
 | 
	
		
			
				|  |  | -                    accept=".xml,.mxml"
 | 
	
		
			
				|  |  | +                    accept=".mid"
 | 
	
		
			
				|  |  |                      bucketName="cloud-coach"
 | 
	
		
			
				|  |  | -                    text="点击上传XML文件"
 | 
	
		
			
				|  |  | -                    onReadFileInputEventAsArrayBuffer={readFileInputEventAsArrayBuffer}
 | 
	
		
			
				|  |  | -                    onRemove={() => {
 | 
	
		
			
				|  |  | -                      forms.multiTracksSelection = []
 | 
	
		
			
				|  |  | -                      state.partListNames = []
 | 
	
		
			
				|  |  | -                      forms.musicSheetSoundList = []
 | 
	
		
			
				|  |  | -                      forms.musicalInstrumentIdList = []
 | 
	
		
			
				|  |  | -                      forms.subjectIds = []
 | 
	
		
			
				|  |  | -                    }}
 | 
	
		
			
				|  |  | +                    text="点击上传MID文件"
 | 
	
		
			
				|  |  | +                    // onReadFileInputEventAsArrayBuffer={readFileInputEventAsArrayBuffer}
 | 
	
		
			
				|  |  | +                  />
 | 
	
		
			
				|  |  | +                </NFormItemGi>
 | 
	
		
			
				|  |  | +              )}
 | 
	
		
			
				|  |  | +              <NFormItemGi
 | 
	
		
			
				|  |  | +                label="上传XML"
 | 
	
		
			
				|  |  | +                path="xmlFileUrl"
 | 
	
		
			
				|  |  | +                rule={[
 | 
	
		
			
				|  |  | +                  {
 | 
	
		
			
				|  |  | +                    required: true,
 | 
	
		
			
				|  |  | +                    message: '请选择上传XML',
 | 
	
		
			
				|  |  | +                    trigger: ['change', 'input']
 | 
	
		
			
				|  |  | +                  }
 | 
	
		
			
				|  |  | +                ]}
 | 
	
		
			
				|  |  | +              >
 | 
	
		
			
				|  |  | +                <UploadFile
 | 
	
		
			
				|  |  | +                  desc={'XML文件'}
 | 
	
		
			
				|  |  | +                  disabled={state.previewMode}
 | 
	
		
			
				|  |  | +                  size={10}
 | 
	
		
			
				|  |  | +                  key={'xmlFileUrl'}
 | 
	
		
			
				|  |  | +                  v-model:fileList={forms.xmlFileUrl}
 | 
	
		
			
				|  |  | +                  tips="仅支持上传.xml/.mxml格式文件"
 | 
	
		
			
				|  |  | +                  listType="image"
 | 
	
		
			
				|  |  | +                  accept=".xml,.mxml"
 | 
	
		
			
				|  |  | +                  bucketName="cloud-coach"
 | 
	
		
			
				|  |  | +                  text="点击上传XML文件"
 | 
	
		
			
				|  |  | +                  onReadFileInputEventAsArrayBuffer={readFileInputEventAsArrayBuffer}
 | 
	
		
			
				|  |  | +                  onRemove={() => {
 | 
	
		
			
				|  |  | +                    forms.multiTracksSelection = []
 | 
	
		
			
				|  |  | +                    state.partListNames = []
 | 
	
		
			
				|  |  | +                    forms.musicSheetSoundList = []
 | 
	
		
			
				|  |  | +                    forms.musicalInstrumentIdList = []
 | 
	
		
			
				|  |  | +                    forms.subjectIds = []
 | 
	
		
			
				|  |  | +                  }}
 | 
	
		
			
				|  |  |                  />
 | 
	
		
			
				|  |  |                </NFormItemGi>
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |              </NGrid>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              <NGrid cols={2}>
 | 
	
		
			
				|  |  | -              <NFormItemGi label="可用声部" path="subjectIds"
 | 
	
		
			
				|  |  | -                           rule={[
 | 
	
		
			
				|  |  | -                             {
 | 
	
		
			
				|  |  | -                               required: true,
 | 
	
		
			
				|  |  | -                               message: '请选择可用声部'
 | 
	
		
			
				|  |  | -                             }
 | 
	
		
			
				|  |  | -                           ]}
 | 
	
		
			
				|  |  | +              <NFormItemGi
 | 
	
		
			
				|  |  | +                label="可用声部"
 | 
	
		
			
				|  |  | +                path="subjectIds"
 | 
	
		
			
				|  |  | +                rule={[
 | 
	
		
			
				|  |  | +                  {
 | 
	
		
			
				|  |  | +                    required: true,
 | 
	
		
			
				|  |  | +                    message: '请选择可用声部',
 | 
	
		
			
				|  |  | +                    trigger: 'change',
 | 
	
		
			
				|  |  | +                    type: 'array'
 | 
	
		
			
				|  |  | +                  }
 | 
	
		
			
				|  |  | +                ]}
 | 
	
		
			
				|  |  |                >
 | 
	
		
			
				|  |  |                  <NSelect
 | 
	
		
			
				|  |  | -                    v-model:value={forms.subjectIds}
 | 
	
		
			
				|  |  | -                    options={state.subjectList}
 | 
	
		
			
				|  |  | -                    multiple
 | 
	
		
			
				|  |  | -                    filterable
 | 
	
		
			
				|  |  | -                    clearable
 | 
	
		
			
				|  |  | -                    placeholder="请选择可用声部"
 | 
	
		
			
				|  |  | -                    maxTagCount={2}
 | 
	
		
			
				|  |  | +                  v-model:value={forms.subjectIds}
 | 
	
		
			
				|  |  | +                  options={state.subjectList}
 | 
	
		
			
				|  |  | +                  multiple
 | 
	
		
			
				|  |  | +                  filterable
 | 
	
		
			
				|  |  | +                  clearable
 | 
	
		
			
				|  |  | +                  placeholder="请选择可用声部"
 | 
	
		
			
				|  |  | +                  maxTagCount={2}
 | 
	
		
			
				|  |  |                  />
 | 
	
		
			
				|  |  |                </NFormItemGi>
 | 
	
		
			
				|  |  | -              <NFormItemGi label="可用乐器" path="musicalInstrumentIdList"
 | 
	
		
			
				|  |  | -                           rule={[
 | 
	
		
			
				|  |  | -                             {
 | 
	
		
			
				|  |  | -                               required: true,
 | 
	
		
			
				|  |  | -                               message: '请选择可用乐器'
 | 
	
		
			
				|  |  | -                             }
 | 
	
		
			
				|  |  | -                           ]}
 | 
	
		
			
				|  |  | +              <NFormItemGi
 | 
	
		
			
				|  |  | +                label="可用乐器"
 | 
	
		
			
				|  |  | +                path="musicalInstrumentIdList"
 | 
	
		
			
				|  |  | +                rule={[
 | 
	
		
			
				|  |  | +                  {
 | 
	
		
			
				|  |  | +                    required: true,
 | 
	
		
			
				|  |  | +                    message: '请选择可用乐器'
 | 
	
		
			
				|  |  | +                  }
 | 
	
		
			
				|  |  | +                ]}
 | 
	
		
			
				|  |  |                >
 | 
	
		
			
				|  |  |                  <NSelect
 | 
	
		
			
				|  |  | -                    placeholder="请选择可用乐器"
 | 
	
		
			
				|  |  | -                    options={state.instrumentList}
 | 
	
		
			
				|  |  | -                    v-model:value={forms.musicalInstrumentIdList}
 | 
	
		
			
				|  |  | -                    clearable
 | 
	
		
			
				|  |  | -                    multiple
 | 
	
		
			
				|  |  | -                    maxTagCount={2}
 | 
	
		
			
				|  |  | +                  placeholder="请选择可用乐器"
 | 
	
		
			
				|  |  | +                  options={state.instrumentList}
 | 
	
		
			
				|  |  | +                  v-model:value={forms.musicalInstrumentIdList}
 | 
	
		
			
				|  |  | +                  clearable
 | 
	
		
			
				|  |  | +                  multiple
 | 
	
		
			
				|  |  | +                  maxTagCount={2}
 | 
	
		
			
				|  |  |                  />
 | 
	
		
			
				|  |  |                </NFormItemGi>
 | 
	
		
			
				|  |  |              </NGrid>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            {(forms.musicSheetType) && (
 | 
	
		
			
				|  |  | -                <NGrid cols={1}>
 | 
	
		
			
				|  |  | -                  <NFormItemGi
 | 
	
		
			
				|  |  | -                      label={`${forms.musicSheetType === 'SINGLE' ? '页面渲染声轨' : '用户可切换声轨'}`}
 | 
	
		
			
				|  |  | -                      path="multiTracksSelection"
 | 
	
		
			
				|  |  | -                      rule={[
 | 
	
		
			
				|  |  | -                        {
 | 
	
		
			
				|  |  | -                          required: true,
 | 
	
		
			
				|  |  | -                          message: `请选择${forms.musicSheetType === 'SINGLE' ? '页面渲染声轨' : '用户可切换声轨'}`
 | 
	
		
			
				|  |  | -                        }
 | 
	
		
			
				|  |  | -                      ]}
 | 
	
		
			
				|  |  | -                  >
 | 
	
		
			
				|  |  | -                    <NGrid style="padding-top: 4px;">
 | 
	
		
			
				|  |  | -                      <NGi span={24}>
 | 
	
		
			
				|  |  | -                        <NRadioGroup
 | 
	
		
			
				|  |  | -                            v-model:value={state.multiTracks}
 | 
	
		
			
				|  |  | -                            onUpdateValue={(value) => {
 | 
	
		
			
				|  |  | -                              checkMultiTracks(value)
 | 
	
		
			
				|  |  | -                            }}
 | 
	
		
			
				|  |  | -                        >
 | 
	
		
			
				|  |  | -                          <NRadio value={'all'}>全选</NRadio>
 | 
	
		
			
				|  |  | -                          <NRadio value={'allUncheck'}>重置</NRadio>
 | 
	
		
			
				|  |  | -                          <NRadio value={'invert'}>反选</NRadio>
 | 
	
		
			
				|  |  | -                        </NRadioGroup>
 | 
	
		
			
				|  |  | -                      </NGi>
 | 
	
		
			
				|  |  | -                      <NGi span={24} style={"margin-top:5px"}><NFormItemGi
 | 
	
		
			
				|  |  | -                          label=''
 | 
	
		
			
				|  |  | -                          path="multiTracksSelection"
 | 
	
		
			
				|  |  | -                          rule={[
 | 
	
		
			
				|  |  | -                            {
 | 
	
		
			
				|  |  | -                              required: false,
 | 
	
		
			
				|  |  | -                            }
 | 
	
		
			
				|  |  | -                          ]}
 | 
	
		
			
				|  |  | +            {forms.musicSheetType && (
 | 
	
		
			
				|  |  | +              <NGrid cols={1}>
 | 
	
		
			
				|  |  | +                <NFormItemGi
 | 
	
		
			
				|  |  | +                  label={`${forms.musicSheetType === 'SINGLE' ? '页面渲染声轨' : '用户可切换声轨'}`}
 | 
	
		
			
				|  |  | +                  path="multiTracksSelection"
 | 
	
		
			
				|  |  | +                  rule={[
 | 
	
		
			
				|  |  | +                    {
 | 
	
		
			
				|  |  | +                      required: true,
 | 
	
		
			
				|  |  | +                      message: `请选择${
 | 
	
		
			
				|  |  | +                        forms.musicSheetType === 'SINGLE' ? '页面渲染声轨' : '用户可切换声轨'
 | 
	
		
			
				|  |  | +                      }`
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                  ]}
 | 
	
		
			
				|  |  | +                >
 | 
	
		
			
				|  |  | +                  <NGrid style="padding-top: 4px;">
 | 
	
		
			
				|  |  | +                    <NGi span={24}>
 | 
	
		
			
				|  |  | +                      <NRadioGroup
 | 
	
		
			
				|  |  | +                        v-model:value={state.multiTracks}
 | 
	
		
			
				|  |  | +                        onUpdateValue={(value) => {
 | 
	
		
			
				|  |  | +                          checkMultiTracks(value)
 | 
	
		
			
				|  |  | +                        }}
 | 
	
		
			
				|  |  |                        >
 | 
	
		
			
				|  |  | -                        <NCheckboxGroup
 | 
	
		
			
				|  |  | -                            v-model:value={forms.multiTracksSelection}
 | 
	
		
			
				|  |  | -                        >
 | 
	
		
			
				|  |  | -                          <NGrid yGap={2} cols={4}
 | 
	
		
			
				|  |  | -                          >
 | 
	
		
			
				|  |  | +                        <NRadio value={'all'}>全选</NRadio>
 | 
	
		
			
				|  |  | +                        <NRadio value={'allUncheck'}>重置</NRadio>
 | 
	
		
			
				|  |  | +                        <NRadio value={'invert'}>反选</NRadio>
 | 
	
		
			
				|  |  | +                      </NRadioGroup>
 | 
	
		
			
				|  |  | +                    </NGi>
 | 
	
		
			
				|  |  | +                    <NGi span={24} style={'margin-top:5px'}>
 | 
	
		
			
				|  |  | +                      <NFormItemGi
 | 
	
		
			
				|  |  | +                        label=""
 | 
	
		
			
				|  |  | +                        path="multiTracksSelection"
 | 
	
		
			
				|  |  | +                        rule={[
 | 
	
		
			
				|  |  | +                          {
 | 
	
		
			
				|  |  | +                            required: false
 | 
	
		
			
				|  |  | +                          }
 | 
	
		
			
				|  |  | +                        ]}
 | 
	
		
			
				|  |  | +                      >
 | 
	
		
			
				|  |  | +                        <NCheckboxGroup v-model:value={forms.multiTracksSelection}>
 | 
	
		
			
				|  |  | +                          <NGrid yGap={2} cols={4}>
 | 
	
		
			
				|  |  |                              {state.partListNames.map((item: any) => (
 | 
	
		
			
				|  |  | -                                <NGi>
 | 
	
		
			
				|  |  | -                                  <NCheckbox value={item.value} label={item.label}/>
 | 
	
		
			
				|  |  | -                                </NGi>
 | 
	
		
			
				|  |  | +                              <NGi>
 | 
	
		
			
				|  |  | +                                <NCheckbox value={item.value} label={item.label} />
 | 
	
		
			
				|  |  | +                              </NGi>
 | 
	
		
			
				|  |  |                              ))}
 | 
	
		
			
				|  |  |                            </NGrid>
 | 
	
		
			
				|  |  |                          </NCheckboxGroup>
 | 
	
		
			
				|  |  | -                      </NFormItemGi></NGi>
 | 
	
		
			
				|  |  | -                    </NGrid>
 | 
	
		
			
				|  |  | -                  </NFormItemGi>
 | 
	
		
			
				|  |  | -                </NGrid>
 | 
	
		
			
				|  |  | -            )
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | +                      </NFormItemGi>
 | 
	
		
			
				|  |  | +                    </NGi>
 | 
	
		
			
				|  |  | +                  </NGrid>
 | 
	
		
			
				|  |  | +                </NFormItemGi>
 | 
	
		
			
				|  |  | +              </NGrid>
 | 
	
		
			
				|  |  | +            )}
 | 
	
		
			
				|  |  |              <NGrid cols={2}>
 | 
	
		
			
				|  |  | -              <NFormItemGi label="是否播放节拍器" path="isPlayBeat"
 | 
	
		
			
				|  |  | -                           rule={[
 | 
	
		
			
				|  |  | -                             {
 | 
	
		
			
				|  |  | -                               required: true,
 | 
	
		
			
				|  |  | -                               message: '请选择是否播放节拍器'
 | 
	
		
			
				|  |  | -                             }
 | 
	
		
			
				|  |  | -                           ]}
 | 
	
		
			
				|  |  | +              <NFormItemGi
 | 
	
		
			
				|  |  | +                label="是否播放节拍器"
 | 
	
		
			
				|  |  | +                path="isPlayBeat"
 | 
	
		
			
				|  |  | +                rule={[
 | 
	
		
			
				|  |  | +                  {
 | 
	
		
			
				|  |  | +                    required: true,
 | 
	
		
			
				|  |  | +                    message: '请选择是否播放节拍器'
 | 
	
		
			
				|  |  | +                  }
 | 
	
		
			
				|  |  | +                ]}
 | 
	
		
			
				|  |  |                >
 | 
	
		
			
				|  |  | -                <NRadioGroup
 | 
	
		
			
				|  |  | -                    v-model:value={forms.isPlayBeat}
 | 
	
		
			
				|  |  | -                >
 | 
	
		
			
				|  |  | +                <NRadioGroup v-model:value={forms.isPlayBeat}>
 | 
	
		
			
				|  |  |                    <NRadio value={true}>是</NRadio>
 | 
	
		
			
				|  |  |                    <NRadio value={false}>否</NRadio>
 | 
	
		
			
				|  |  |                  </NRadioGroup>
 | 
	
		
			
				|  |  |                </NFormItemGi>
 | 
	
		
			
				|  |  |                {forms.isPlayBeat && (
 | 
	
		
			
				|  |  | -                  <NFormItemGi label="播放方式" path="audioType"
 | 
	
		
			
				|  |  | -                               rule={[
 | 
	
		
			
				|  |  | -                                 {
 | 
	
		
			
				|  |  | -                                   required: true,
 | 
	
		
			
				|  |  | -                                   message: '请选择播放方式'
 | 
	
		
			
				|  |  | -                                 }
 | 
	
		
			
				|  |  | -                               ]}
 | 
	
		
			
				|  |  | -                  >
 | 
	
		
			
				|  |  | -                    <NRadioGroup
 | 
	
		
			
				|  |  | -                        v-model:value={forms.isUseSystemBeat}
 | 
	
		
			
				|  |  | -                    >
 | 
	
		
			
				|  |  | -                      <NRadio value={true}>系统节拍器</NRadio>
 | 
	
		
			
				|  |  | -                      <NRadio value={false}>MP3节拍器</NRadio>
 | 
	
		
			
				|  |  | -                    </NRadioGroup>
 | 
	
		
			
				|  |  | -                  </NFormItemGi>
 | 
	
		
			
				|  |  | +                <NFormItemGi
 | 
	
		
			
				|  |  | +                  label="播放方式"
 | 
	
		
			
				|  |  | +                  path="audioType"
 | 
	
		
			
				|  |  | +                  rule={[
 | 
	
		
			
				|  |  | +                    {
 | 
	
		
			
				|  |  | +                      required: true,
 | 
	
		
			
				|  |  | +                      message: '请选择播放方式'
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                  ]}
 | 
	
		
			
				|  |  | +                >
 | 
	
		
			
				|  |  | +                  <NRadioGroup v-model:value={forms.isUseSystemBeat}>
 | 
	
		
			
				|  |  | +                    <NRadio value={true}>系统节拍器</NRadio>
 | 
	
		
			
				|  |  | +                    <NRadio value={false}>MP3节拍器</NRadio>
 | 
	
		
			
				|  |  | +                  </NRadioGroup>
 | 
	
		
			
				|  |  | +                </NFormItemGi>
 | 
	
		
			
				|  |  |                )}
 | 
	
		
			
				|  |  |              </NGrid>
 | 
	
		
			
				|  |  |              {/* 只有播放类型为mp3时才会有原音 */}
 | 
	
		
			
				|  |  |              {forms.playMode === 'MP3' && forms.musicSheetSoundList.length > 0 && (
 | 
	
		
			
				|  |  | -                <>
 | 
	
		
			
				|  |  | -                  {forms.musicSheetSoundList.map((item: any, index: number) => (
 | 
	
		
			
				|  |  | -                      <>
 | 
	
		
			
				|  |  | -                        {item.track?.toLocaleUpperCase?.() != 'COMMON' && forms.multiTracksSelection.indexOf(item.track) > -1 &&
 | 
	
		
			
				|  |  | -                            <NGrid class={styles.audioSection}
 | 
	
		
			
				|  |  | -                                // v-show={forms.multiTracksSelection.indexOf(item.track) > -1}
 | 
	
		
			
				|  |  | +              <>
 | 
	
		
			
				|  |  | +                {forms.musicSheetSoundList.map((item: any, index: number) => (
 | 
	
		
			
				|  |  | +                  <>
 | 
	
		
			
				|  |  | +                    {item.track?.toLocaleUpperCase?.() != 'COMMON' &&
 | 
	
		
			
				|  |  | +                      forms.multiTracksSelection.indexOf(item.track) > -1 && (
 | 
	
		
			
				|  |  | +                        <NGrid
 | 
	
		
			
				|  |  | +                          class={styles.audioSection}
 | 
	
		
			
				|  |  | +                          // v-show={forms.multiTracksSelection.indexOf(item.track) > -1}
 | 
	
		
			
				|  |  | +                        >
 | 
	
		
			
				|  |  | +                          <NFormItemGi
 | 
	
		
			
				|  |  | +                            span={12}
 | 
	
		
			
				|  |  | +                            label="原音"
 | 
	
		
			
				|  |  | +                            path={`musicSheetSoundList[${index}].audioFileUrl`}
 | 
	
		
			
				|  |  | +                            rule={[
 | 
	
		
			
				|  |  | +                              {
 | 
	
		
			
				|  |  | +                                // required: forms.multiTracksSelection.indexOf(forms.musicSheetSoundList[index].audioFileUrl) > -1,
 | 
	
		
			
				|  |  | +                                required: true,
 | 
	
		
			
				|  |  | +                                message: `请上传${
 | 
	
		
			
				|  |  | +                                  item.track ? item.track + '的' : '第' + (index + 1) + '个'
 | 
	
		
			
				|  |  | +                                }原音`
 | 
	
		
			
				|  |  | +                              }
 | 
	
		
			
				|  |  | +                            ]}
 | 
	
		
			
				|  |  | +                          >
 | 
	
		
			
				|  |  | +                            <UploadFile
 | 
	
		
			
				|  |  | +                              desc={'原音文件'}
 | 
	
		
			
				|  |  | +                              disabled={state.previewMode}
 | 
	
		
			
				|  |  | +                              size={10}
 | 
	
		
			
				|  |  | +                              v-model:fileList={item.audioFileUrl}
 | 
	
		
			
				|  |  | +                              tips="仅支持上传.mp3格式文件"
 | 
	
		
			
				|  |  | +                              listType="image"
 | 
	
		
			
				|  |  | +                              accept=".mp3"
 | 
	
		
			
				|  |  | +                              bucketName="cloud-coach"
 | 
	
		
			
				|  |  | +                            />
 | 
	
		
			
				|  |  | +                          </NFormItemGi>
 | 
	
		
			
				|  |  | +                          {state.partListNames.length > 1 && (
 | 
	
		
			
				|  |  | +                            <NFormItemGi
 | 
	
		
			
				|  |  | +                              span={12}
 | 
	
		
			
				|  |  | +                              label="所属轨道"
 | 
	
		
			
				|  |  | +                              path={`musicSheetSoundList[${index}].track`}
 | 
	
		
			
				|  |  | +                              rule={[
 | 
	
		
			
				|  |  | +                                {
 | 
	
		
			
				|  |  | +                                  required: true,
 | 
	
		
			
				|  |  | +                                  message: '请选择所属轨道'
 | 
	
		
			
				|  |  | +                                }
 | 
	
		
			
				|  |  | +                              ]}
 | 
	
		
			
				|  |  |                              >
 | 
	
		
			
				|  |  | -                                <NFormItemGi
 | 
	
		
			
				|  |  | -                                    span={12}
 | 
	
		
			
				|  |  | -                                    label="原音"
 | 
	
		
			
				|  |  | -                                    path={`musicSheetSoundList[${index}].audioFileUrl`}
 | 
	
		
			
				|  |  | -                                    rule={[
 | 
	
		
			
				|  |  | -                                      {
 | 
	
		
			
				|  |  | -                                        // required: forms.multiTracksSelection.indexOf(forms.musicSheetSoundList[index].audioFileUrl) > -1,
 | 
	
		
			
				|  |  | -                                        required: true,
 | 
	
		
			
				|  |  | -                                        message: `请上传${
 | 
	
		
			
				|  |  | -                                            item.track ? item.track + '的' : '第' + (index + 1) + '个'
 | 
	
		
			
				|  |  | -                                        }原音`
 | 
	
		
			
				|  |  | -                                      }
 | 
	
		
			
				|  |  | -                                    ]}
 | 
	
		
			
				|  |  | -                                >
 | 
	
		
			
				|  |  | -                                    <UploadFile
 | 
	
		
			
				|  |  | -                                        desc={'原音文件'}
 | 
	
		
			
				|  |  | -                                        disabled={state.previewMode}
 | 
	
		
			
				|  |  | -                                        size={10}
 | 
	
		
			
				|  |  | -                                        v-model:fileList={item.audioFileUrl}
 | 
	
		
			
				|  |  | -                                        tips="仅支持上传.mp3格式文件"
 | 
	
		
			
				|  |  | -                                        listType="image"
 | 
	
		
			
				|  |  | -                                        accept=".mp3"
 | 
	
		
			
				|  |  | -                                        bucketName="cloud-coach"
 | 
	
		
			
				|  |  | -                                    />
 | 
	
		
			
				|  |  | -                                </NFormItemGi>
 | 
	
		
			
				|  |  | -                              {state.partListNames.length > 1 && (
 | 
	
		
			
				|  |  | -                                  <NFormItemGi
 | 
	
		
			
				|  |  | -                                      span={12}
 | 
	
		
			
				|  |  | -                                      label="所属轨道"
 | 
	
		
			
				|  |  | -                                      path={`musicSheetSoundList[${index}].track`}
 | 
	
		
			
				|  |  | -                                      rule={[
 | 
	
		
			
				|  |  | -                                        {
 | 
	
		
			
				|  |  | -                                          required: true,
 | 
	
		
			
				|  |  | -                                          message: '请选择所属轨道'
 | 
	
		
			
				|  |  | -                                        }
 | 
	
		
			
				|  |  | -                                      ]}
 | 
	
		
			
				|  |  | -                                  >
 | 
	
		
			
				|  |  | -                                    <NSelect
 | 
	
		
			
				|  |  | -                                        placeholder="请选择所属轨道"
 | 
	
		
			
				|  |  | -                                        v-model:value={item.track}
 | 
	
		
			
				|  |  | -                                        options={initPartsListStatus(item.track)}
 | 
	
		
			
				|  |  | -                                    />
 | 
	
		
			
				|  |  | -                                  </NFormItemGi>
 | 
	
		
			
				|  |  | -                              )}
 | 
	
		
			
				|  |  | -                            </NGrid>}
 | 
	
		
			
				|  |  | -                      </>
 | 
	
		
			
				|  |  | -                  ))}
 | 
	
		
			
				|  |  | +                              <NSelect
 | 
	
		
			
				|  |  | +                                placeholder="请选择所属轨道"
 | 
	
		
			
				|  |  | +                                v-model:value={item.track}
 | 
	
		
			
				|  |  | +                                options={initPartsListStatus(item.track)}
 | 
	
		
			
				|  |  | +                              />
 | 
	
		
			
				|  |  | +                            </NFormItemGi>
 | 
	
		
			
				|  |  | +                          )}
 | 
	
		
			
				|  |  | +                        </NGrid>
 | 
	
		
			
				|  |  | +                      )}
 | 
	
		
			
				|  |  | +                  </>
 | 
	
		
			
				|  |  | +                ))}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                  <NButton
 | 
	
		
			
				|  |  | -                      type="primary"
 | 
	
		
			
				|  |  | -                      dashed
 | 
	
		
			
				|  |  | -                      block
 | 
	
		
			
				|  |  | -                      disabled={state.partListNames.length <= forms.musicSheetSoundList.length}
 | 
	
		
			
				|  |  | -                      style={{
 | 
	
		
			
				|  |  | -                        marginBottom: '24px'
 | 
	
		
			
				|  |  | -                      }}
 | 
	
		
			
				|  |  | -                      onClick={createSys}
 | 
	
		
			
				|  |  | -                  >
 | 
	
		
			
				|  |  | -                    添加原音
 | 
	
		
			
				|  |  | -                  </NButton>
 | 
	
		
			
				|  |  | -                </>
 | 
	
		
			
				|  |  | +                <NButton
 | 
	
		
			
				|  |  | +                  type="primary"
 | 
	
		
			
				|  |  | +                  dashed
 | 
	
		
			
				|  |  | +                  block
 | 
	
		
			
				|  |  | +                  disabled={state.partListNames.length <= forms.musicSheetSoundList.length}
 | 
	
		
			
				|  |  | +                  style={{
 | 
	
		
			
				|  |  | +                    marginBottom: '24px'
 | 
	
		
			
				|  |  | +                  }}
 | 
	
		
			
				|  |  | +                  onClick={createSys}
 | 
	
		
			
				|  |  | +                >
 | 
	
		
			
				|  |  | +                  添加原音
 | 
	
		
			
				|  |  | +                </NButton>
 | 
	
		
			
				|  |  | +              </>
 | 
	
		
			
				|  |  |              )}
 | 
	
		
			
				|  |  |            </NForm>
 | 
	
		
			
				|  |  | +        </NSpin>
 | 
	
		
			
				|  |  | +        {props.type !== 'preview' && (
 | 
	
		
			
				|  |  | +          <NSpace justify="end" style="padding-top:12px">
 | 
	
		
			
				|  |  | +            <NButton type="default" onClick={() => emit('close')}>
 | 
	
		
			
				|  |  | +              取消
 | 
	
		
			
				|  |  | +            </NButton>
 | 
	
		
			
				|  |  | +            <NButton
 | 
	
		
			
				|  |  | +              type="primary"
 | 
	
		
			
				|  |  | +              onClick={() => onSubmit()}
 | 
	
		
			
				|  |  | +              loading={btnLoading.value}
 | 
	
		
			
				|  |  | +              disabled={btnLoading.value}
 | 
	
		
			
				|  |  | +            >
 | 
	
		
			
				|  |  | +              确认
 | 
	
		
			
				|  |  | +            </NButton>
 | 
	
		
			
				|  |  | +          </NSpace>
 | 
	
		
			
				|  |  | +        )}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -          {props.type !== 'preview' &&
 | 
	
		
			
				|  |  | -              (
 | 
	
		
			
				|  |  | -                  <NSpace justify="end" style="padding-top:12px">
 | 
	
		
			
				|  |  | -                    <NButton type="default" onClick={() => emit('close')}>
 | 
	
		
			
				|  |  | -                      取消
 | 
	
		
			
				|  |  | -                    </NButton>
 | 
	
		
			
				|  |  | -                    <NButton
 | 
	
		
			
				|  |  | -                        type="primary"
 | 
	
		
			
				|  |  | -                        onClick={() => onSubmit()}
 | 
	
		
			
				|  |  | -                        loading={btnLoading.value}
 | 
	
		
			
				|  |  | -                        disabled={btnLoading.value}
 | 
	
		
			
				|  |  | -                    >
 | 
	
		
			
				|  |  | -                      确认
 | 
	
		
			
				|  |  | -                    </NButton>
 | 
	
		
			
				|  |  | -                  </NSpace>
 | 
	
		
			
				|  |  | -              )}
 | 
	
		
			
				|  |  | +        <NModal
 | 
	
		
			
				|  |  | +          v-model:show={state.showMusicSheetOwnerDialog}
 | 
	
		
			
				|  |  | +          preset="dialog"
 | 
	
		
			
				|  |  | +          showIcon={false}
 | 
	
		
			
				|  |  | +          maskClosable={false}
 | 
	
		
			
				|  |  | +          title="所属人"
 | 
	
		
			
				|  |  | +          style={{ width: '800px' }}
 | 
	
		
			
				|  |  | +        >
 | 
	
		
			
				|  |  | +          <MusicSheetOwnerDialog
 | 
	
		
			
				|  |  | +            musicSheetExtend={forms.musicSheetExtend}
 | 
	
		
			
				|  |  | +            sourceType={forms.sourceType}
 | 
	
		
			
				|  |  | +            appData={state.appData}
 | 
	
		
			
				|  |  | +            onClose={() => {
 | 
	
		
			
				|  |  | +              state.showMusicSheetOwnerDialog = false
 | 
	
		
			
				|  |  | +            }}
 | 
	
		
			
				|  |  | +            onChoseMusicSheetOwnerData={(musicSheetOwnerData) => {
 | 
	
		
			
				|  |  | +              forms.musicSheetExtend = {
 | 
	
		
			
				|  |  | +                ...musicSheetOwnerData
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +              setOwnerName()
 | 
	
		
			
				|  |  | +            }}
 | 
	
		
			
				|  |  | +          />
 | 
	
		
			
				|  |  | +        </NModal>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -          <NModal
 | 
	
		
			
				|  |  | -              v-model:show={state.showMusicSheetOwnerDialog}
 | 
	
		
			
				|  |  | -              preset="dialog"
 | 
	
		
			
				|  |  | -              showIcon={false}
 | 
	
		
			
				|  |  | -              maskClosable={false}
 | 
	
		
			
				|  |  | -              title="所属人"
 | 
	
		
			
				|  |  | -              style={{width: '800px'}}
 | 
	
		
			
				|  |  | -          >
 | 
	
		
			
				|  |  | -            <MusicSheetOwnerDialog
 | 
	
		
			
				|  |  | -                musicSheetExtend={forms.musicSheetExtend}
 | 
	
		
			
				|  |  | -                sourceType={forms.sourceType}
 | 
	
		
			
				|  |  | -                appData={state.appData}
 | 
	
		
			
				|  |  | -                onClose={() => {
 | 
	
		
			
				|  |  | -                  state.showMusicSheetOwnerDialog = false
 | 
	
		
			
				|  |  | -                }}
 | 
	
		
			
				|  |  | -                onChoseMusicSheetOwnerData={(musicSheetOwnerData) => {
 | 
	
		
			
				|  |  | -                  forms.musicSheetExtend = {
 | 
	
		
			
				|  |  | -                    ...musicSheetOwnerData
 | 
	
		
			
				|  |  | -                  }
 | 
	
		
			
				|  |  | -                  setOwnerName()
 | 
	
		
			
				|  |  | -                }}
 | 
	
		
			
				|  |  | -            />
 | 
	
		
			
				|  |  | -          </NModal>
 | 
	
		
			
				|  |  | -        </div>
 | 
	
		
			
				|  |  | +        <NModal
 | 
	
		
			
				|  |  | +          class={styles.productModal}
 | 
	
		
			
				|  |  | +          title="自动生成曲谱图片"
 | 
	
		
			
				|  |  | +          v-model:show={state.productOpen}
 | 
	
		
			
				|  |  | +          preset="dialog"
 | 
	
		
			
				|  |  | +          closeOnEsc={false}
 | 
	
		
			
				|  |  | +          maskClosable={false}
 | 
	
		
			
				|  |  | +          showIcon={false}
 | 
	
		
			
				|  |  | +        >
 | 
	
		
			
				|  |  | +          <MusicCreateImg
 | 
	
		
			
				|  |  | +            xmlFileUrl={forms.xmlFileUrl || ''}
 | 
	
		
			
				|  |  | +            onClose={() => (state.productOpen = false)}
 | 
	
		
			
				|  |  | +            onConfirm={async (item: any) => {
 | 
	
		
			
				|  |  | +              // 保存
 | 
	
		
			
				|  |  | +              try {
 | 
	
		
			
				|  |  | +                forms.musicImg = item.musicImg
 | 
	
		
			
				|  |  | +                forms.musicSvg = item.musicSvg
 | 
	
		
			
				|  |  | +                forms.musicJianSvg = item.musicJianSvg
 | 
	
		
			
				|  |  | +                onSubmit()
 | 
	
		
			
				|  |  | +              } catch (e: any) {
 | 
	
		
			
				|  |  | +                //
 | 
	
		
			
				|  |  | +                console.log(e, 'e')
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +              setTimeout(() => {
 | 
	
		
			
				|  |  | +                state.isAutoSave = false
 | 
	
		
			
				|  |  | +              }, 50)
 | 
	
		
			
				|  |  | +            }}
 | 
	
		
			
				|  |  | +          />
 | 
	
		
			
				|  |  | +        </NModal>
 | 
	
		
			
				|  |  | +      </div>
 | 
	
		
			
				|  |  |      )
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  })
 |