浏览代码

Merge branch 'fix/0711-music' into online

yuanliang 1 年之前
父节点
当前提交
03f75bd681

+ 40 - 17
src/views/music-library/music-sheet/modal/music-operation.tsx

@@ -516,14 +516,24 @@ export default defineComponent({
       const partList: any =
         xmlParse.getElementsByTagName('part-list')?.[0]?.getElementsByTagName('score-part') || []
       let partListNames = Array.from(partList).map((item: any) => {
-        let part = item.getElementsByTagName('part-name')?.[0]?.textContent || ''
+        let part = item.getElementsByTagName('part-name')?.[0]
         // evxml没有分轨,需要手动设置一个默认的名称,用于上传原音
-        if (forms.isEvxml) {
-          part = part || 'noPartName'
+        // if (forms.isEvxml) {
+        //   part = part || 'noPartName'
+        // }
+        // 优先解析声轨,没有就取id值
+        let track = ''
+        if (part) {
+          track = part.textContent || ''
+        } else {
+          let id = item.getAttribute('id')
+          if (id) {
+            track = id
+          }
         }
         return {
-          value: part.trim(),
-          label: part.trim()
+          value: track.trim(),
+          label: track.trim()
         }
       })
 
@@ -682,6 +692,19 @@ export default defineComponent({
       }
     }
 
+    // 声轨数据兼容
+    const formatTrack = (track: string) => {
+      if (!track) {
+        return '';
+      }
+      const trim = track.trim().toUpperCase();
+      // 导入后的脏数据兼容
+      if (trim == 'P1' || trim == 'NULL') {
+        return '';
+      }
+      return track.trim();
+    }
+
     onMounted(async () => {
       state.loading = true
       if (props.type === 'preview') {
@@ -797,25 +820,26 @@ export default defineComponent({
               state.partListNames = getPartListNames(res?.data as any) as any
 
               // 初始化音轨和原音
+              let tracks = state.partListNames.map((next: any) => next.label)
               if (data.multiTracksSelection) {
-                data.multiTracksSelection = data.multiTracksSelection.toLocaleUpperCase()
-              }
-              if (!data.multiTracksSelection || data.multiTracksSelection.trim() == '' || data.multiTracksSelection.trim() == 'NULL') {
-                forms.multiTracksSelection = ['']
+                forms.multiTracksSelection = data.multiTracksSelection.toLocaleUpperCase().split(',')
               } else {
-                forms.multiTracksSelection = data.multiTracksSelection.split(',')
+                forms.multiTracksSelection.push('');
               }
-              let names = state.partListNames.map((next: any) => next.label)
-              forms.multiTracksSelection = names.filter((next: any) => forms.multiTracksSelection.includes(next.toLocaleUpperCase()))
+              forms.multiTracksSelection = tracks.filter((next: any) => forms.multiTracksSelection.includes(next.toLocaleUpperCase()))
 
               const existSoundList = data.musicSheetSoundList ? data.musicSheetSoundList : []
-              if (existSoundList.length === 1 && existSoundList[0].track === 'P1') {
+              // 如果只有一个原音文件,并且原音没有对应声轨,取xml解析中的第一个声轨绑定当当前原音
+              if (existSoundList.length === 1 && !formatTrack(existSoundList[0].track)) {
+                let track = state.partListNames.length > 0 ? state.partListNames[0].value : null;
                 forms.musicSheetSoundList.push({
                   audioFileUrl: existSoundList[0].audioFileUrl, // 原音
-                  track: state.partListNames[0].value || null // 轨道
+                  track: track // 轨道
                 })
+                if (track && !forms.multiTracksSelection.includes(track)) {
+                  forms.multiTracksSelection.push(track)
+                }
               } else {
-                const tracks = [] as any
                 state.partListNames.forEach((item: any) => {
                   let audioFileUrl = null
                   existSoundList.forEach((next: any) => {
@@ -828,9 +852,8 @@ export default defineComponent({
                   })
                   forms.musicSheetSoundList.push({
                     audioFileUrl: audioFileUrl, // 原音
-                    track: item.value ? item.value : '' // 轨道
+                    track: item.value // 轨道
                   })
-                  tracks.push(item.value)
                 })
 
                 // 处理没有声轨,但有原音

+ 2 - 2
src/views/music-library/project-music-sheet/module/gym/addMusic.tsx

@@ -394,7 +394,7 @@ export default defineComponent({
                               },
                               {
                                 label:'收费',
-                                value:'CHARGE'
+                                value:'VIP'
                               }
                             ]
                           })
@@ -439,7 +439,7 @@ export default defineComponent({
                 },
                 {
                   label:'收费',
-                  value:'CHARGE'
+                  value:'VIP'
                 }
               ]}
               clearable

+ 34 - 14
src/views/music-library/project-music-sheet/module/gym/music-sheet-gym.tsx

@@ -40,7 +40,7 @@ import {
   musicSheetStatusList
 } from '@views/music-library/api'
 import UpdateMusic from '@views/music-library/project-music-sheet/module/gym/updateMusic'
-import { subjectPage, sysApplicationPage } from '@views/system-manage/api'
+import {musicSheetApplicationExtendSubjectList, subjectPage, sysApplicationPage} from '@views/system-manage/api'
 import { filterTimes } from '@/utils/dateUtil'
 import deepClone from '@/utils/deep.clone'
 import {copyText, getOwnerName} from '@views/music-library/musicUtil'
@@ -70,8 +70,7 @@ export default defineComponent({
       searchForm: {
         keyword: null,
         musicSheetType: null, //曲目类型(SINGLE:单曲 CONCERT:合奏)
-        subjectId: null, //声部ID
-        subjectIds: null, //曲目声部ID集合
+        musicalInstrumentId: null, // 乐器ID
         musicCategoryIds: null, //曲目分类ID
         status: null, //曲目状态(0:停用,1:启用)
         sourceType: null, //来源类型/作者属性(PLATFORM: 平台; ORG: 机构; PERSON: 个人)
@@ -99,7 +98,9 @@ export default defineComponent({
       applicationId: null, //应用ID
       musicPreview: false,
       musicScore: null as any,
-      useProjectData: [] as any // 适用项目行数据
+      useProjectData: [] as any, // 适用项目行数据
+      subjectInstrumentMap: new Map(), // 声部乐器
+      subjectId: null,//
     })
 
     onMounted(async () => {
@@ -121,11 +122,14 @@ export default defineComponent({
       // 加载声部
 
       try {
-        const { data } = await subjectPage({ page: 1, rows: 999 })
-        const tempList = data.rows || []
+        const { data } = await musicSheetApplicationExtendSubjectList({
+          applicationId: state.applicationId
+        })
+        const tempList = data || []
         tempList.forEach((item: any) => {
-          item.label = item.name
-          item.value = item.id + ''
+          item.label = item.subjectName
+          item.value = item.subjectId
+          state.subjectInstrumentMap.set(item.subjectId, item.instrumentId)
         })
         state.subjectList = tempList
       } catch {}
@@ -187,6 +191,13 @@ export default defineComponent({
     const getList = async () => {
       try {
         state.loading = true
+
+        if (state.subjectId) {
+          state.searchForm.musicalInstrumentId = state.subjectInstrumentMap.get(state.subjectId)
+        }else {
+          state.searchForm.musicalInstrumentId = null
+        }
+
         const sourceType = state.searchForm.sourceType
         const { data } = await musicSheetPageByApplication({
           ...state.pagination,
@@ -367,9 +378,9 @@ export default defineComponent({
           key: 'paymentType',
           render: (row: any) => {
             return (
-              <div>
-                {getMapValueByKey(row.paymentType, new Map(Object.entries(musicSheetPaymentType)))}
-              </div>
+                <div>
+                  {row.paymentType == 'VIP' ? '收费' : '免费'}
+                </div>
             )
           }
         },
@@ -533,10 +544,10 @@ export default defineComponent({
                 clearable
               />
             </NFormItem>
-            <NFormItem label="可用声部" path="subjectId">
+            <NFormItem label="可用声部" path="musicalInstrumentId">
               <NSelect
                 placeholder="请选择可用声部"
-                v-model:value={state.searchForm.subjectId}
+                v-model:value={state.subjectId}
                 options={state.subjectList}
                 clearable
               />
@@ -568,7 +579,16 @@ export default defineComponent({
               <NSelect
                 placeholder="请选择收费方式"
                 v-model:value={state.searchForm.paymentType}
-                options={getSelectDataFromObj(musicSheetPaymentType)}
+                options={[
+                  {
+                    label: '免费',
+                    value: 'FREE'
+                  },
+                  {
+                    label: '收费',
+                    value: 'VIP'
+                  }
+                ]}
                 clearable
               ></NSelect>
             </NFormItem>

+ 1 - 1
src/views/music-library/project-music-sheet/module/gym/updateMusic.tsx

@@ -124,7 +124,7 @@ export default defineComponent({
                       },
                       {
                         label:'收费',
-                        value:'CHARGE'
+                        value:'VIP'
                       }
                     ]}
                     v-model:value={forms.paymentType}

+ 1 - 0
src/views/system-manage/subject-manage/subject/modal/subject-save.tsx

@@ -219,6 +219,7 @@ export default defineComponent({
             <NSelect
               multiple
               clearable
+              filterable
               v-model:value={state.forms.musicalInstrumentIds}
               placeholder="请选择关联乐器"
               options={state.instrumentList as any}