Browse Source

曲目调整

yuanliang 1 year ago
parent
commit
2578566a59

+ 28 - 0
src/views/music-library/music-sheet/component/music-list.tsx

@@ -42,6 +42,7 @@ import styles from './music-list.module.less'
 import MusicCreateImg from '../modal/music-create-img'
 import TheTooltip from '@components/TheTooltip'
 import { HelpCircleOutline } from '@vicons/ionicons5'
+import {musicalInstrumentPage} from "@views/system-manage/subject-manage/api";
 
 export default defineComponent({
   name: 'music-list',
@@ -69,10 +70,12 @@ export default defineComponent({
         appAuditFlag: null, //是否审核版本
         categoriesId: null, //是否审核版本
         musicCategoryId: null, //曲目分类
+        musicalInstrumentId: null, // 乐器ID
         dataCorrect: null // 数据修复
       },
       dataList: [] as any,
       subjectList: [] as any,
+      instrumentList: [] as any,
       tagList: [] as any,
       visiableMusic: false,
       musicOperation: 'add',
@@ -142,6 +145,9 @@ export default defineComponent({
                 <NDescriptionsItem label="可用声部">
                   <TheTooltip content={row.subjectNames} />
                 </NDescriptionsItem>
+                <NDescriptionsItem label="可用乐器">
+                  <TheTooltip content={row.musicalInstrumentNames} />
+                </NDescriptionsItem>
               </NDescriptions>
             )
           }
@@ -464,6 +470,18 @@ export default defineComponent({
       } catch {}
     }
 
+    const initInstrumentList = async () => {
+      try {
+        const { data } = await musicalInstrumentPage({ page: 1, rows: 999 })
+        const tempList = data.rows || []
+        tempList.forEach((item: any) => {
+          item.label = item.name
+          item.value = item.id + ''
+        })
+        state.instrumentList = tempList
+      } catch {}
+    }
+
     // app列表
     const initUseAppList = async () => {
       try {
@@ -558,6 +576,16 @@ export default defineComponent({
               placeholder="请选择可用声部"
               v-model:value={state.searchForm.subjectId}
               options={state.subjectList}
+              filterable
+              clearable
+            />
+          </NFormItem>
+          <NFormItem label="可用乐器" path="musicalInstrumentId">
+            <NSelect
+              placeholder="请选择可用乐器"
+              v-model:value={state.searchForm.musicalInstrumentId}
+              options={state.subjectList}
+              filterable
               clearable
             />
           </NFormItem>

+ 94 - 35
src/views/music-library/music-sheet/modal/music-operation.tsx

@@ -365,13 +365,18 @@ export default defineComponent({
         }
         try {
           //extConfigJson: {"repeatedBeats":0,"gradualTimes":{"75":"02:38:60","77":"02:43:39"}}
+          let multiTracksSelection = []
+          for (let i = 0; i < forms.musicSheetSoundList.length; i++) {
+            multiTracksSelection.push(forms.musicSheetSoundList[i].track)
+          }
           const obj = {
             ...forms,
             musicTag: '-1',
-            multiTracksSelection: forms.multiTracksSelection.join(','),
-            musicSheetSoundList: forms.musicSheetSoundList.filter((next: any) => {
-              return !!next.audioFileUrl && (!next.track || forms.multiTracksSelection.includes(next.track))
-            }),
+            multiTracksSelection: multiTracksSelection.join(','),
+            musicSheetSoundList: forms.musicSheetSoundList,
+            // musicSheetSoundList: forms.musicSheetSoundList.filter((next: any) => {
+            //   return !!next.audioFileUrl && (!next.track || forms.multiTracksSelection.includes(next.track))
+            // }),
             musicalInstrumentIds: forms.musicalInstrumentIdList.join(','),
             extConfigJson: JSON.stringify({
               repeatedBeats: forms.repeatedBeats ? 1 : 0,
@@ -416,29 +421,51 @@ export default defineComponent({
         state.partListNames = getPartListNames(res?.target?.result as any) as any
         parseInstrumentAndSubject(res?.target?.result as any)
         // 这里是如果没有当前音轨就重新写
-        for (let j = 0; j < state.partListNames.length; j++) {
-          if (!forms.musicSheetSoundList[j]) {
-            forms.musicSheetSoundList.push({ audioFileUrl: null, track: null })
+
+        let map = new Map<String, String>()
+        for (let i = 0; i < forms.musicSheetSoundList.length; i++) {
+          let track = forms.musicSheetSoundList[i].track;
+          if (track) {
+            map.set(track, forms.musicSheetSoundList[i])
           }
-          forms.musicSheetSoundList[j].track = state.partListNames[j].value
         }
 
-        // 循环添加所在音轨的原音
-        for (
-          let index = forms.musicSheetSoundList.length;
-          index < state.partListNames.length;
-          index++
-        ) {
-          const part = state.partListNames[index].value
-          const sysData = {
-            ...forms.musicSheetSoundList[0],
-            track: part
+        let newMusicSheetSoundList = []
+        let tracks = [] as any
+        for (let j = 0; j < state.partListNames.length; j++) {
+          let track = state.partListNames[j].value;
+          if (map.has(track)) {
+            newMusicSheetSoundList.push(map.get(track))
+          } else {
+            newMusicSheetSoundList.push({audioFileUrl: null, track: track, musicalInstrumentId: null})
           }
-          if (!sysData.speed) {
-            sysData.speed = state.xmlFirstSpeed
+          tracks.push(track)
+        }
+
+        for (let i = 0; i < forms.musicSheetSoundList.length; i++) {
+          let track = forms.musicSheetSoundList[i].track;
+          if (!track || !tracks.includes(track)) {
+            newMusicSheetSoundList.push(forms.musicSheetSoundList[i])
           }
-          createSys(sysData)
         }
+        forms.musicSheetSoundList = newMusicSheetSoundList
+
+        forms.multiTracksSelection = forms.multiTracksSelection.filter((track: any) => {
+          return tracks.includes(track)
+        })
+
+        // 循环添加所在音轨的原音
+        // for (let index = forms.musicSheetSoundList.length; index < state.partListNames.length; index++) {
+        //   const part = state.partListNames[index].value
+        //   const sysData = {
+        //     ...forms.musicSheetSoundList[0],
+        //     track: part
+        //   }
+        //   if (!sysData.speed) {
+        //     sysData.speed = state.xmlFirstSpeed
+        //   }
+        //   createSys(sysData)
+        // }
 
         if (forms.musicSheetSoundList.length == 0) {
           forms.musicSheetSoundList.push({ audioFileUrl: '', track: '' })
@@ -547,9 +574,9 @@ export default defineComponent({
 
       partListNames = partListNames.filter((n: any) => n.value?.toLocaleUpperCase?.() != 'COMMON')
 
-      if (partListNames.length > 0) {
-        forms.musicSheetSoundList = forms.musicSheetSoundList.slice(0, partListNames.length)
-      }
+      // if (partListNames.length > 0) {
+      //   forms.musicSheetSoundList = forms.musicSheetSoundList.slice(0, partListNames.length)
+      // }
 
       state.xmlFirstSpeed = xmlParse.getElementsByTagName('per-minute')?.[0]?.textContent || ''
       if (!forms.playSpeed) {
@@ -628,13 +655,12 @@ export default defineComponent({
             track = ''
           }
           // if (track) {
-            const selectIndex = forms.multiTracksSelection.indexOf(track)
-            if (selectIndex > -1) {
-              forms.multiTracksSelection.splice(selectIndex, 1)
-            }
-          // } else {
-          //   forms.musicSheetSoundList.splice(index, 1)
-          // }
+          const selectIndex = forms.multiTracksSelection.indexOf(track)
+          if (selectIndex > -1) {
+            forms.multiTracksSelection.splice(selectIndex, 1)
+          } else {
+            forms.musicSheetSoundList.splice(index, 1)
+          }
         }
       })
     }
@@ -1310,9 +1336,9 @@ export default defineComponent({
                   text="点击上传XML文件"
                   onReadFileInputEventAsArrayBuffer={readFileInputEventAsArrayBuffer}
                   onRemove={() => {
-                    forms.multiTracksSelection = []
-                    state.partListNames = []
-                    forms.musicSheetSoundList = []
+                    // forms.multiTracksSelection = []
+                    // state.partListNames = []
+                    // forms.musicSheetSoundList = []
                     forms.musicalInstrumentIdList = []
                     forms.subjectIds = []
                   }}
@@ -1444,7 +1470,40 @@ export default defineComponent({
                             }
                           ]}
                         >
-                          <NCheckboxGroup v-model:value={forms.multiTracksSelection}>
+                          <NCheckboxGroup v-model:value={forms.multiTracksSelection}
+                                          // onUpdateValue={(val: any) => {
+                                          //
+                                          //   let removeTracks = [] as any
+                                          //   for (let i = 0; i < forms.multiTracksSelection.length; i++) {
+                                          //     let track = forms.musicSheetSoundList[i].track
+                                          //     if (!val.includes(track)) {
+                                          //       removeTracks.push(track)
+                                          //     }
+                                          //   }
+                                          //   // 新增
+                                          //   for (let i = 0; i < val.length; i++) {
+                                          //     let track = val.value;
+                                          //     let contain = false
+                                          //     for (let j = 0; j < forms.musicSheetSoundList.length; j++) {
+                                          //       let track1 = forms.musicSheetSoundList[i].track;
+                                          //       if (track == track1) {
+                                          //         contain = true
+                                          //         break
+                                          //       }
+                                          //     }
+                                          //     if (!contain) {
+                                          //       forms.musicSheetSoundList.push({audioFileUrl: null, track: track, musicalInstrumentId: null})
+                                          //     }
+                                          //   }
+                                          //   // 删除
+                                          //   if (removeTracks.length > 0) {
+                                          //     forms.musicSheetSoundList = forms.musicSheetSoundList.filter((val: any) => {
+                                          //       return removeTracks.includes(val)
+                                          //     })
+                                          //   }
+                                          //   forms.multiTracksSelection = val
+                                          // }}
+                          >
                             <NGrid yGap={2} cols={4}>
                               {state.partListNames.map((item: any) => (
                                 <NGi>