Browse Source

Merge branch 'feature/0429-music' of http://git.dayaedu.com/lex/resource-admin into hqyNewVersion

黄琪勇 1 year ago
parent
commit
f1eb7cb454
1 changed files with 348 additions and 217 deletions
  1. 348 217
      src/views/music-library/music-sheet/modal/music-operationV2.tsx

+ 348 - 217
src/views/music-library/music-sheet/modal/music-operationV2.tsx

@@ -295,8 +295,9 @@ export default defineComponent({
       musicCover: null, // 曲谱封面
       remark: null, // 曲谱描述
       // musicSheetSoundList: [] as any, // 原音
-      musicSheetSoundList_YY: [] as any, // 原音
-      musicSheetSoundList_YZ: [] as any, // 演奏
+      musicSheetSoundList_YY: [] as any, // 演唱原音
+      musicSheetSoundList_YZ: [] as any, // 演奏演奏
+      musicSheetSoundList_all_subject: null, // 全部声部原音
       // musicSheetCategoriesId: null,
       status: false,
       musicSheetType: 'SINGLE', // 曲目类型
@@ -311,7 +312,10 @@ export default defineComponent({
       audioType: 'HOMEMODE', // 伴奏类型
       isPlayBeat: true, // 是否播放节拍器
       isUseSystemBeat: true, // 是否使用系统节拍器(0:否;1:是)
+      isUseSingSystemBeat: true, //演唱是否使用系统节拍器(0:否;1:是)
       repeatedBeats: false, // 是否重复节拍时长
+      repeatedBeatsToSing: false, //演唱是否重复节拍时长
+      isPlaySingBeat: true, //是否播入演唱节拍器(0: 否 1:是)
       evaluationStandard: 'FREQUENCY', // 评分标准 节奏 AMPLITUDE 音准 FREQUENCY 分贝 DECIBELS
       multiTracksSelection: [] as any, // 声轨
       musicSheetExtend: {} as any, //所属人信息
@@ -320,7 +324,8 @@ export default defineComponent({
       musicJianImg: '', // 简谱固定调
       isEvxml: false, // 是否是evxml
       isShowFingering: true, // 是否显示指法
-      solmizationFileUrl:null, // 唱名文件
+      solmizationFileUrl: null, // 唱名文件
+      isAllSubject: false, // 适用声部
     })
     const state = reactive({
       loading: false,
@@ -348,7 +353,7 @@ export default defineComponent({
       isAutoSave: false, // 是否自动保存
       fSongFile: null as any, // 范唱
       bSongFile: null as any, // 伴唱
-      musicSheetSoundList:[] as any,
+      musicSheetSoundList: [] as any,
     })
     const gradualData = reactive({
       list: [] as any[],
@@ -373,7 +378,7 @@ export default defineComponent({
         }
         try {
           //extConfigJson: {"repeatedBeats":0,"gradualTimes":{"75":"02:38:60","77":"02:43:39"}}
-          let audioPlayTypes = [] as  any;
+          let audioPlayTypes = [] as any;
           let musicSheetSoundList = [];
           let musicSheetType = forms.musicSheetType;
           if (state.fSongFile) {
@@ -381,34 +386,56 @@ export default defineComponent({
               musicSheetId: props.data.id,
               audioFileUrl: state.fSongFile,
               audioPlayType: 'SING',
-              solmizationFileUrl:forms.solmizationFileUrl
+              solmizationFileUrl: forms.solmizationFileUrl
             })
             audioPlayTypes.push("SING")
           }
-          if (musicSheetType == 'SINGLE') {
-            if (forms.musicalInstrumentIdList) {
+
+          if (forms.isAllSubject) {
+            if (musicSheetType == 'SINGLE' && forms.musicSheetSoundList_all_subject) {
               audioPlayTypes.push("PLAY")
+              musicSheetSoundList.push({
+                audioFileUrl: forms.musicSheetSoundList_all_subject,
+                musicSheetId: props.data.id,
+                audioPlayType: 'PLAY'
+              })
+            }
+
+            if (musicSheetType == 'CONCERT' && forms.musicSheetSoundList_YY.length > 0) {
+              audioPlayTypes.push("PLAY")
+              forms.musicSheetSoundList_YY.forEach((musicSheetSound: any) => {
+                if (forms.multiTracksSelection.includes(musicSheetSound.musicalInstrumentId)) {
+                  musicSheetSoundList.push({
+                    ...musicSheetSound,
+                    musicSheetId: props.data.id,
+                  })
+                }
+              })
             }
-            forms.musicSheetSoundList_YZ.forEach((musicSheetSound: any) => {
-              if (forms.musicalInstrumentIdList.includes(musicSheetSound.musicalInstrumentId)) {
-                musicSheetSoundList.push({
-                  ...musicSheetSound,
-                  musicSheetId: props.data.id,
-                })
-              }
-            })
           } else {
-            if (forms.musicSheetSoundList_YY && forms.musicSheetSoundList_YY.length > 0) {
+            if (musicSheetType == 'SINGLE' && forms.musicSheetSoundList_YZ.length > 0) {
               audioPlayTypes.push("PLAY")
+              forms.musicSheetSoundList_YZ.forEach((musicSheetSound: any) => {
+                if (forms.musicalInstrumentIdList.includes(musicSheetSound.musicalInstrumentId)) {
+                  musicSheetSoundList.push({
+                    ...musicSheetSound,
+                    musicSheetId: props.data.id,
+                  })
+                }
+              })
+            }
+
+            if (musicSheetType == 'CONCERT' && forms.musicSheetSoundList_YY.length > 0) {
+              audioPlayTypes.push("PLAY")
+              forms.musicSheetSoundList_YY.forEach((musicSheetSound: any) => {
+                if (forms.multiTracksSelection.includes(musicSheetSound.musicalInstrumentId)) {
+                  musicSheetSoundList.push({
+                    ...musicSheetSound,
+                    musicSheetId: props.data.id,
+                  })
+                }
+              })
             }
-            forms.musicSheetSoundList_YY.forEach((musicSheetSound: any) => {
-              if (forms.multiTracksSelection.includes(musicSheetSound.musicalInstrumentId)) {
-                musicSheetSoundList.push({
-                  ...musicSheetSound,
-                  musicSheetId: props.data.id,
-                })
-              }
-            })
           }
 
           if (state.bSongFile) {
@@ -422,22 +449,21 @@ export default defineComponent({
           //
 
 
-
           const obj = {
             musicCategoryId: forms.musicCategoryId,
             musicCover: forms.musicCover,
             name: forms.name,
             appAuditFlag: forms.appAuditFlag,
-            subjectIds: forms.subjectIds.join(','),
+            subjectIds: forms.isAllSubject ? "" : forms.subjectIds.join(','),
             remark: forms.remark,
             audioPlayTypes: audioPlayTypes.join(','),
-            musicalInstrumentIds: forms.musicalInstrumentIdList.join(','),
+            musicalInstrumentIds: forms.isAllSubject ? "" : forms.musicalInstrumentIdList.join(','),
             composer: forms.composer,
             musicSheetType: forms.musicSheetType,
             isUseSystemBeat: forms.isUseSystemBeat,
             isShowFingering: forms.isShowFingering,
             isPlayBeat: forms.isPlayBeat,
-            multiTracksSelection: forms.multiTracksSelection.join(','),
+            multiTracksSelection: forms.isAllSubject ? "" : forms.multiTracksSelection.join(','),
             playSpeed: forms.playSpeed,
             playMode: forms.playMode,
             xmlFileUrl: forms.xmlFileUrl,
@@ -448,15 +474,19 @@ export default defineComponent({
               repeatedBeats: forms.repeatedBeats ? 1 : 0,
               gradualTimes: forms.graduals,
               isEvxml: forms.isEvxml ? 1 : 0,
+              repeatedBeatsToSing: forms.repeatedBeatsToSing ? 1 : 0
             }),
             // availableType: forms.availableType,
             sourceType: forms.sourceType,
             audioType: forms.audioType,
             status: forms.status,
             evaluationStandard: forms.evaluationStandard,
-            musicSheetAccompanimentList:forms.musicSheetAccompanimentList,
+            musicSheetAccompanimentList: forms.musicSheetAccompanimentList,
             musicSheetSoundList: musicSheetSoundList,
             musicTag: '-1',
+            isUseSingSystemBeat: forms.isUseSingSystemBeat,
+            isPlaySingBeat: forms.isPlaySingBeat,
+            isAllSubject: forms.isAllSubject,
           }
           if (forms.audioType == 'MIDI') {
             obj.musicSheetSoundList = []
@@ -493,7 +523,7 @@ export default defineComponent({
         } catch (error) {
         }
         state.partListNames = getPartListNames(res?.target?.result as any) as any
-        parseInstrumentAndSubject(res?.target?.result as any)
+        // parseInstrumentAndSubject(res?.target?.result as any)
         // 这里是如果没有当前音轨就重新写
         for (let j = 0; j < state.partListNames.length; j++) {
           if (!forms.musicSheetSoundList_YY[j]) {
@@ -784,7 +814,7 @@ export default defineComponent({
               'musicalInstrumentId': item.id + '',
               'musicalInstrumentName': item.name,
               'audioFileUrl': null,
-              'audioPlayType':'PLAY'
+              'audioPlayType': 'PLAY'
             });
           })
           state.instrumentList = tempList
@@ -846,6 +876,9 @@ export default defineComponent({
           forms.appAuditFlag = data.appAuditFlag ? 1 : 0
           forms.midiFileUrl = data.midiFileUrl
           forms.isShowFingering = data.isShowFingering
+          forms.isAllSubject = data.isAllSubject
+          forms.isUseSingSystemBeat = data.isUseSingSystemBeat
+          forms.isPlaySingBeat = data.isPlaySingBeat
           forms.subjectIds = []
           if (data.subjectIds) {
             const subjectIds = data.subjectIds.split(',') || []
@@ -868,6 +901,7 @@ export default defineComponent({
             forms.graduals = extConfigJson.gradualTimes || {}
             forms.repeatedBeats = !!extConfigJson.repeatedBeats
             forms.isEvxml = !!extConfigJson.isEvxml
+            forms.repeatedBeatsToSing = !!extConfigJson.repeatedBeatsToSing
           } catch (error) {
           }
           forms.evaluationStandard = data.evaluationStandard
@@ -892,13 +926,17 @@ export default defineComponent({
               // 范唱 唱名
               state.fSongFile = state.musicSheetSoundList[i].audioFileUrl
               forms.solmizationFileUrl = state.musicSheetSoundList[i].solmizationFileUrl
-            }
-
-            // 乐器演奏原音
-            for (let j = 0; j < forms.musicSheetSoundList_YZ.length; j++) {
-              let musicalInstrumentId = state.musicSheetSoundList[i].musicalInstrumentId;
-              if (musicalInstrumentId && musicalInstrumentId == forms.musicSheetSoundList_YZ[j].musicalInstrumentId) {
-                forms.musicSheetSoundList_YZ[j].audioFileUrl = state.musicSheetSoundList[i].audioFileUrl
+            } else {
+              if (forms.isAllSubject) {
+                forms.musicSheetSoundList_all_subject = state.musicSheetSoundList[i].audioFileUrl
+              } else {
+                // 乐器演奏原音
+                for (let j = 0; j < forms.musicSheetSoundList_YZ.length; j++) {
+                  let musicalInstrumentId = state.musicSheetSoundList[i].musicalInstrumentId;
+                  if (musicalInstrumentId && musicalInstrumentId == forms.musicSheetSoundList_YZ[j].musicalInstrumentId) {
+                    forms.musicSheetSoundList_YZ[j].audioFileUrl = state.musicSheetSoundList[i].audioFileUrl
+                  }
+                }
               }
             }
           }
@@ -913,15 +951,13 @@ export default defineComponent({
               state.partListNames = getPartListNames(res?.data as any) as any
 
               // 初始化音轨和原音
-              forms.multiTracksSelection = data.multiTracksSelection
-                  ? data.multiTracksSelection.split(',')
-                  : []
+              forms.multiTracksSelection = data.multiTracksSelection ? data.multiTracksSelection.split(',') : []
 
               if (state.musicSheetSoundList.length === 1 && state.musicSheetSoundList[0].track === 'P1') {
                 forms.musicSheetSoundList_YY.push({
                   audioFileUrl: state.musicSheetSoundList[0].audioFileUrl, // 原音
                   track: state.partListNames[0].value || null, // 轨道
-                  audioPlayType:'PLAY'
+                  audioPlayType: 'PLAY'
                 })
               } else {
                 const tracks = [] as any
@@ -935,7 +971,7 @@ export default defineComponent({
                   forms.musicSheetSoundList_YY.push({
                     audioFileUrl: audioFileUrl, // 原音
                     track: item.value, // 轨道
-                    audioPlayType:'PLAY'
+                    audioPlayType: 'PLAY'
                   })
                   tracks.push(item.value)
                 })
@@ -949,7 +985,7 @@ export default defineComponent({
                       forms.musicSheetSoundList_YY.push({
                         audioFileUrl: next.audioFileUrl, // 原音
                         track: next.track ? next.track : null, // 轨道
-                        audioPlayType:'PLAY'
+                        audioPlayType: 'PLAY'
                       })
                     })
               }
@@ -1072,6 +1108,39 @@ export default defineComponent({
               </NGrid>
               <NGrid cols={2}>
                 <NFormItemGi
+                    label="适用声部"
+                    path="isAllSubject"
+                    rule={[
+                      {
+                        required: true,
+                        message: '请选择适用声部',
+                      }
+                    ]}
+                >
+                  <NRadioGroup v-model:value={forms.isAllSubject}>
+                    <NRadio value={false}>部分声部</NRadio>
+                    <NRadio value={true}>全部声部</NRadio>
+                  </NRadioGroup>
+                </NFormItemGi>
+                <NFormItemGi
+                    label="速度"
+                    path="playSpeed"
+                    rule={[
+                      {
+                        required: false,
+                        message: '请输入速度'
+                      }
+                    ]}
+                >
+                  <NInputNumber
+                      placeholder="请输入速度"
+                      v-model:value={forms.playSpeed}
+                      style="width:100%"
+                  />
+                </NFormItemGi>
+              </NGrid>
+              <NGrid cols={2}>
+                <NFormItemGi
                     label="作者属性"
                     path="sourceType"
                     rule={[
@@ -1201,24 +1270,6 @@ export default defineComponent({
                   />
                 </NFormItemGi>
               </NGrid>
-              <NGrid cols={2}>
-                <NFormItemGi
-                    label="速度"
-                    path="playSpeed"
-                    rule={[
-                      {
-                        required: false,
-                        message: '请输入速度'
-                      }
-                    ]}
-                >
-                  <NInputNumber
-                      placeholder="请输入速度"
-                      v-model:value={forms.playSpeed}
-                      style="width:100%"
-                  />
-                </NFormItemGi>
-              </NGrid>
               <NAlert showIcon={false} style={{marginBottom: '12px'}}>
                 曲目设置
               </NAlert>
@@ -1293,28 +1344,11 @@ export default defineComponent({
                         forms.multiTracksSelection = []
                         state.partListNames = []
                         forms.musicSheetSoundList_YY = []
-                        forms.musicalInstrumentIdList = []
-                        forms.subjectIds = []
+                        // forms.musicalInstrumentIdList = []
+                        // forms.subjectIds = []
                       }}
                   />
                 </NFormItemGi>
-              </NGrid>
-              <NGrid cols={2}>
-                <NFormItemGi
-                    label="重复节拍时长"
-                    path="repeatedBeats"
-                    rule={[
-                      {
-                        required: false,
-                        message: '请选择是否重复节拍时长'
-                      }
-                    ]}
-                >
-                  <NRadioGroup v-model:value={forms.repeatedBeats}>
-                    <NRadio value={true}>是</NRadio>
-                    <NRadio value={false}>否</NRadio>
-                  </NRadioGroup>
-                </NFormItemGi>
                 <NFormItemGi
                     label="评分标准"
                     path="evaluationStandard"
@@ -1332,58 +1366,6 @@ export default defineComponent({
                 </NFormItemGi>
               </NGrid>
 
-              <NGrid cols={2}>
-                <NFormItemGi
-                    label="是否显示指法"
-                    path="isShowFingering"
-                    rule={[
-                      {
-                        required: true,
-                        message: '请选择是否显示指法'
-                      }
-                    ]}
-                >
-                  <NRadioGroup v-model:value={forms.isShowFingering}>
-                    <NRadio value={true}>是</NRadio>
-                    <NRadio value={false}>否</NRadio>
-                  </NRadioGroup>
-                </NFormItemGi>
-              </NGrid>
-
-              <NGrid cols={2}>
-                <NFormItemGi
-                    label="是否播放节拍器"
-                    path="isPlayBeat"
-                    rule={[
-                      {
-                        required: true,
-                        message: '请选择是否播放节拍器'
-                      }
-                    ]}
-                >
-                  <NRadioGroup v-model:value={forms.isPlayBeat}>
-                    <NRadio value={true}>是</NRadio>
-                    <NRadio value={false}>否</NRadio>
-                  </NRadioGroup>
-                </NFormItemGi>
-                {forms.isPlayBeat && (
-                    <NFormItemGi
-                        label="播放方式"
-                        path="isUseSystemBeat"
-                        rule={[
-                          {
-                            required: true,
-                            message: '请选择播放方式'
-                          }
-                        ]}
-                    >
-                      <NRadioGroup v-model:value={forms.isUseSystemBeat}>
-                        <NRadio value={true}>系统节拍器</NRadio>
-                        <NRadio value={false}>MP3节拍器</NRadio>
-                      </NRadioGroup>
-                    </NFormItemGi>
-                )}
-              </NGrid>
               {forms.musicSheetType == 'SINGLE' && (
                   <>
                     <NAlert showIcon={false} style={{marginBottom: '12px'}}>
@@ -1391,6 +1373,57 @@ export default defineComponent({
                     </NAlert>
                     <NGrid cols={2}>
                       <NFormItemGi
+                          label="是否播放节拍器"
+                          path="isPlaySingBeat"
+                          rule={[
+                            {
+                              required: true,
+                              message: '请选择是否播放节拍器'
+                            }
+                          ]}
+                      >
+                        <NRadioGroup v-model:value={forms.isPlaySingBeat}>
+                          <NRadio value={true}>是</NRadio>
+                          <NRadio value={false}>否</NRadio>
+                        </NRadioGroup>
+                      </NFormItemGi>
+                      {forms.isPlaySingBeat && (
+                          <NFormItemGi
+                              label="播放方式"
+                              path="isUseSingSystemBeat"
+                              rule={[
+                                {
+                                  required: true,
+                                  message: '请选择播放方式'
+                                }
+                              ]}
+                          >
+                            <NRadioGroup v-model:value={forms.isUseSingSystemBeat}>
+                              <NRadio value={true}>系统节拍器</NRadio>
+                              <NRadio value={false}>MP3节拍器</NRadio>
+                            </NRadioGroup>
+                          </NFormItemGi>
+                      )}
+                    </NGrid>
+                    <NGrid cols={2}>
+                      <NFormItemGi
+                          label="重复节拍时长"
+                          path="repeatedBeatsToSing"
+                          rule={[
+                            {
+                              required: false,
+                              message: '请选择是否重复节拍时长'
+                            }
+                          ]}
+                      >
+                        <NRadioGroup v-model:value={forms.repeatedBeatsToSing}>
+                          <NRadio value={true}>是</NRadio>
+                          <NRadio value={false}>否</NRadio>
+                        </NRadioGroup>
+                      </NFormItemGi>
+                    </NGrid>
+                    <NGrid cols={2}>
+                      <NFormItemGi
                           label="上传范唱"
                           path="fSongFile"
                           rule={[
@@ -1474,51 +1507,119 @@ export default defineComponent({
               </NAlert>
               <NGrid cols={2}>
                 <NFormItemGi
-                    label="可用声部"
-                    path="subjectIds"
+                    label="是否播放节拍器"
+                    path="isPlayBeat"
                     rule={[
                       {
                         required: true,
-                        message: '请选择可用声部',
-                        trigger: 'change',
-                        type: 'array'
+                        message: '请选择是否播放节拍器'
                       }
                     ]}
                 >
-                  <NSelect
-                      v-model:value={forms.subjectIds}
-                      options={state.subjectList}
-                      multiple
-                      filterable
-                      clearable
-                      placeholder="请选择可用声部"
-                      maxTagCount={2}
-                  />
+                  <NRadioGroup v-model:value={forms.isPlayBeat}>
+                    <NRadio value={true}>是</NRadio>
+                    <NRadio value={false}>否</NRadio>
+                  </NRadioGroup>
                 </NFormItemGi>
+                {forms.isPlayBeat && (
+                    <NFormItemGi
+                        label="播放方式"
+                        path="isUseSystemBeat"
+                        rule={[
+                          {
+                            required: true,
+                            message: '请选择播放方式'
+                          }
+                        ]}
+                    >
+                      <NRadioGroup v-model:value={forms.isUseSystemBeat}>
+                        <NRadio value={true}>系统节拍器</NRadio>
+                        <NRadio value={false}>MP3节拍器</NRadio>
+                      </NRadioGroup>
+                    </NFormItemGi>
+                )}
+              </NGrid>
+              <NGrid cols={2}>
                 <NFormItemGi
-                    label="可用乐器"
-                    path="musicalInstrumentIdList"
+                    label="重复节拍时长"
+                    path="repeatedBeats"
+                    rule={[
+                      {
+                        required: false,
+                        message: '请选择是否重复节拍时长'
+                      }
+                    ]}
+                >
+                  <NRadioGroup v-model:value={forms.repeatedBeats}>
+                    <NRadio value={true}>是</NRadio>
+                    <NRadio value={false}>否</NRadio>
+                  </NRadioGroup>
+                </NFormItemGi>
+                <NFormItemGi
+                    label="是否显示指法"
+                    path="isShowFingering"
                     rule={[
                       {
                         required: true,
-                        message: '请选择可用乐器',
-                        trigger: 'change',
-                        type: 'array'
+                        message: '请选择是否显示指法'
                       }
                     ]}
                 >
-                  <NSelect
-                      placeholder="请选择可用乐器"
-                      options={state.instrumentList}
-                      v-model:value={forms.musicalInstrumentIdList}
-                      clearable
-                      multiple
-                      maxTagCount={2}
-                      onUpdateValue={async (value: any) => {
-                      }}
-                  />
+                  <NRadioGroup v-model:value={forms.isShowFingering}>
+                    <NRadio value={true}>是</NRadio>
+                    <NRadio value={false}>否</NRadio>
+                  </NRadioGroup>
                 </NFormItemGi>
               </NGrid>
+              {!forms.isAllSubject && (
+                  <NGrid cols={2}>
+                    <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}
+                      />
+                    </NFormItemGi>
+                    <NFormItemGi
+                        label="可用乐器"
+                        path="musicalInstrumentIdList"
+                        rule={[
+                          {
+                            required: true,
+                            message: '请选择可用乐器',
+                            trigger: 'change',
+                            type: 'array'
+                          }
+                        ]}
+                    >
+                      <NSelect
+                          placeholder="请选择可用乐器"
+                          options={state.instrumentList}
+                          v-model:value={forms.musicalInstrumentIdList}
+                          clearable
+                          multiple
+                          maxTagCount={2}
+                          onUpdateValue={async (value: any) => {
+                          }}
+                      />
+                    </NFormItemGi>
+                  </NGrid>
+              )}
               <NGrid cols={2}>
                 {forms.playMode === 'MP3' && (
                     <NFormItemGi
@@ -1543,7 +1644,7 @@ export default defineComponent({
                           max={1}
                           desc={'上传伴奏文件'}
                           onUpload:success={(file) => {
-                            state.musicSheetAccompanimentUrls = [state.musicSheetAccompanimentUrls,file.url].filter(Boolean).join(',')
+                            state.musicSheetAccompanimentUrls = [state.musicSheetAccompanimentUrls, file.url].filter(Boolean).join(',')
                             state.musicSheetAccompanimentUrlList = state.musicSheetAccompanimentUrls?.split(',').filter(Boolean)
 
                             // 清除伴奏
@@ -1568,6 +1669,34 @@ export default defineComponent({
                       />
                     </NFormItemGi>
                 )}
+                {forms.isAllSubject && (
+                    <NFormItemGi
+                        label="上传原音"
+                        path="musicSheetSoundList_all_subject"
+                        rule={[
+                          {
+                            required: false,
+                            message: '请选择上传原音',
+                            trigger: ['change', 'input']
+                          }
+                        ]}
+                    >
+                      <UploadFile
+                          desc={'上传原音'}
+                          disabled={state.previewMode}
+                          size={10}
+                          max={1}
+                          v-model:fileList={forms.musicSheetSoundList_all_subject}
+                          tips="仅支持上传.mp3格式文件"
+                          listType="image"
+                          accept=".mp3"
+                          bucketName="cloud-coach"
+                          text="点击上传原音"
+                          onRemove={() => {
+                          }}
+                      />
+                    </NFormItemGi>
+                )}
               </NGrid>
 
               {/*渐变速*/}
@@ -1625,63 +1754,65 @@ export default defineComponent({
                     </NFormItem>
                   </>
               )}
-              <NGrid cols={1}>
-                <NFormItemGi
-                    label={`${forms.musicSheetType === 'SINGLE' ? '页面渲染声轨' : '用户可切换声轨'}`}
-                    path="multiTracksSelection"
-                    rule={[
-                      {
-                        required: true,
-                        message: `请选择${
-                            forms.musicSheetType === 'SINGLE' ? '页面渲染声轨' : '用户可切换声轨'
-                        }`,
-                        trigger: 'change',
-                        type: 'array'
-                      }
-                    ]}
-                >
-                  <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>
-                    {state.partListNames && state.partListNames.length > 0 && (
-                        <NGi span={24} style={'margin-top:5px'}>
-                          <NFormItemGi
-                              label=""
-                              path="multiTracksSelection"
-                              rule={[
-                                {
-                                  required: false
-                                }
-                              ]}
+              {!forms.isAllSubject && (
+                  <NGrid cols={1}>
+                    <NFormItemGi
+                        label={`${forms.musicSheetType === 'SINGLE' ? '页面渲染声轨' : '用户可切换声轨'}`}
+                        path="multiTracksSelection"
+                        rule={[
+                          {
+                            required: true,
+                            message: `请选择${
+                                forms.musicSheetType === 'SINGLE' ? '页面渲染声轨' : '用户可切换声轨'
+                            }`,
+                            trigger: 'change',
+                            type: 'array'
+                          }
+                        ]}
+                    >
+                      <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}>
-                                {state.partListNames.map((item: any) => (
-                                    <NGi>
-                                      <NCheckbox value={item.value} label={item.label}/>
-                                    </NGi>
-                                ))}
-                              </NGrid>
-                            </NCheckboxGroup>
-                          </NFormItemGi>
+                            <NRadio value={'all'}>全选</NRadio>
+                            <NRadio value={'allUncheck'}>重置</NRadio>
+                            <NRadio value={'invert'}>反选</NRadio>
+                          </NRadioGroup>
                         </NGi>
-                    )}
+                        {state.partListNames && state.partListNames.length > 0 && (
+                            <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>
+                                    ))}
+                                  </NGrid>
+                                </NCheckboxGroup>
+                              </NFormItemGi>
+                            </NGi>
+                        )}
+                      </NGrid>
+                    </NFormItemGi>
                   </NGrid>
-                </NFormItemGi>
-              </NGrid>
+              )}
 
-              {/*单曲*/}
-              {forms.musicSheetType == 'SINGLE' && forms.playMode === 'MP3' && forms.musicSheetSoundList_YZ.map((item: any, index: any) => {
+              {/*独奏*/}
+              {forms.musicSheetType == 'SINGLE' && forms.playMode === 'MP3' && !forms.isAllSubject && forms.musicSheetSoundList_YZ.map((item: any, index: any) => {
                 return (
                     <>
                       <NGrid cols={1}>