瀏覽代碼

feat: 分轨优化

TIANYONG 1 年之前
父節點
當前提交
a830135608
共有 4 個文件被更改,包括 74 次插入9 次删除
  1. 53 0
      src/constant/instruments.ts
  2. 3 3
      src/helpers/formateMusic.ts
  3. 3 2
      src/state.ts
  4. 15 4
      src/view/plugins/toggleMusicSheet/index.tsx

+ 53 - 0
src/constant/instruments.ts

@@ -216,3 +216,56 @@ export const getInstrumentName = (name = '') => {
   }
   return ''
 };
+
+/**
+ * 乐器排序
+ * 排序顺序:长笛、单簧管、中音单簧管、低音单簧管、高音萨克斯风、中音萨克斯风、次中音萨克斯风、低音萨克斯风、小号、长号、圆号、大号、上低音号
+ * */ 
+export const sortMusical = (name: string, index: number) => {
+	let sortId = 0
+	switch (name) {
+	  case '长笛':
+		sortId = 1
+		break;
+	  case '单簧管':
+		sortId = 2
+		break;
+	  case '中音单簧管':
+		sortId = 3
+		break;
+	  case '低音单簧管':
+		sortId = 4
+		break;
+	  case '高音萨克斯风':
+		sortId = 5
+		break;
+	  case '中音萨克斯风':
+		sortId = 6
+		break;
+	  case '次中音萨克斯风':
+		sortId = 7
+		break;
+	  case '低音萨克斯风':
+		sortId = 8  
+		break;  
+	  case '小号':
+		sortId = 9  
+		break;     
+	  case '长号':
+		sortId = 10 
+		break;       
+	  case '圆号':
+		sortId =11  
+		break;       
+	  case '大号':
+		sortId = 12  
+		break; 
+	  case '上低音号':
+		sortId = 13 
+		break; 
+	  default:
+		sortId = index + 14
+		break;
+	}
+	return sortId
+  }

+ 3 - 3
src/helpers/formateMusic.ts

@@ -979,10 +979,10 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
 				relaMeasureLength,
 				id: svgElement?.attrs.id,
 				note: note.halfTone + 12, // see issue #224
-				fixtime,
+				fixtime, // 弱起补充的时间
 				relativeTime: retain(relativeTime),
-				time: retain(relativeTime + fixtime),
-				endtime: retain(relaEndtime + fixtime),
+				time: retain(relativeTime + fixtime), // 开始播放的时间
+				endtime: retain(relaEndtime + fixtime), // 播放完成的时间
 				relaEndtime: retain(relaEndtime),
 				realValue,
 				halfTone: note.halfTone,

+ 3 - 2
src/state.ts

@@ -810,7 +810,8 @@ const setState = (data: any, index: number) => {
   state.track = track ? track.replace(/ /g, "").toLocaleLowerCase() : "";
   state.enableNotation = data.isConvertibleScore === null ? true : data.isConvertibleScore;
   state.isConcert = data.musicSheetType === "CONCERT" ? true : false;
-  state.canSelectTracks = data.multiTracksSelection?.split(',');
+  // multiTracksSelection 返回为空,默认代表全部分轨
+  state.canSelectTracks = data.multiTracksSelection === "null" || data.multiTracksSelection === "" || data.multiTracksSelection === null ? [] : data.multiTracksSelection?.split(',');
   // 开启预备小节
   state.isOpenPrepare = true;
   state.extStyleConfigJson = data.extStyleConfigJson || {}
@@ -824,7 +825,7 @@ const setState = (data: any, index: number) => {
   // state.isPercussion = isRhythmicExercises();
   state.isPercussion = data.evaluationStandard === "AMPLITUDE" || data.evaluationStandard === "DECIBELS";
   // 设置是否特殊曲谱, 是特殊曲谱取反(不理解之前的思考逻辑), 使用后台设置的速度
-  state.isSpecialBookCategory = !classids.includes(data.musicCategoryId);
+  // state.isSpecialBookCategory = !classids.includes(data.musicCategoryId);
 
   // 设置指法
   // const code = state.isConcert ? mappingVoicePart(state.trackId, "ENSEMBLE") : mappingVoicePart(state.subjectId, "INSTRUMENT");

+ 15 - 4
src/view/plugins/toggleMusicSheet/index.tsx

@@ -4,7 +4,7 @@ import { Icon, Popup } from 'vant'
 import ChoosePartName from './choosePartName'
 import state, { togglePlay } from "/src/state";
 import qs from 'query-string'
-import { getInstrumentName } from "/src/constant/instruments";
+import { getInstrumentName, sortMusical } from "/src/constant/instruments";
 import { getQuery } from "/src/utils/queryString";
 
 export const toggleMusicSheet = reactive({
@@ -24,14 +24,25 @@ export default defineComponent({
       partList = partList.filter((item: any) => !item?.toLocaleUpperCase()?.includes('COMMON'))
       return partList.map((item: any, index: number) => {
         // 该声轨能否被选
-        const canselect = state.canSelectTracks.includes(item) ? true : false
+        const canselect = state.canSelectTracks.length == 0 || state.canSelectTracks.includes(item) ? true : false
         const instrumentName = getInstrumentName(item)
+        const sortId = sortMusical(instrumentName, index)
         return {
           text: item + (instrumentName ? `(${instrumentName})` : ''),
           value: index,
+          sortId,
           canselect
         }
-      }).filter((item: any) => item.canselect)
+      }).filter((item: any) => item.canselect).sort((a: any, b: any) => a.sortId - b.sortId)
+    })
+
+    const trackIdx: any = computed(() => {
+      if (partListNames && partListNames.value.length) {
+        // console.log(3333,partListNames)
+        return partListNames.value.findIndex((item: any) => item.value == state.partIndex)
+      } else {
+        return 0
+      }
     })
 
     const switchMusic = (index: number) => {
@@ -66,7 +77,7 @@ export default defineComponent({
     return () => (
       <Popup class={styles.popup} v-model:show={toggleMusicSheet.show}>
         <ChoosePartName
-          partIndex={state.partIndex}
+          partIndex={trackIdx.value || 0}
           partListNames={partListNames.value}
           onClose={(value) => {
             console.log("🚀 ~ value:", value)