Jelajahi Sumber

Merge branch 'feature-tianyong-newVersion' into ktyq-test-new

TIANYONG 8 bulan lalu
induk
melakukan
4dab4e2306

+ 13 - 2
src/helpers/formateMusic.ts

@@ -839,9 +839,16 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
 	let differFrom = 0;
 	// let testIdx = 0;
 	let repeatIdx = 0; // 循环的次数
+	const firstTrackName = state.canSelectTracks[0] || "";
 	while (!iterator.EndReached) {
 		// console.log({ ...iterator });
 		/** 多声轨合并显示,当前音符的时值取所有声轨中的最小值 */
+		if (state.isCombineRender) {
+			iterator.currentVoiceEntries = iterator.currentVoiceEntries.filter((item: any) => {
+				const trackName = state.isEvxml && state.evxmlAddPartName ? item.parentVoice.parent.IdString || '' : item.parentVoice.parent.Name || '';
+				return item.parentVoice.parent.IdString === firstTrackName
+			});
+		}
 		let minIndex = 0, elRealValue = 0
 		for (let index = 0; index < iterator.currentVoiceEntries.length; index++) {
 			const element = iterator.currentVoiceEntries[index];
@@ -856,8 +863,10 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
 			}
 			elRealValue = element.notes[0].length.realValue
 		}
+		if (minIndex !== 0 && state.isCombineRender && iterator.currentVoiceEntries[minIndex]) {
+			iterator.currentVoiceEntries[minIndex].Notes[0].NoteToGraphicalNoteObjectId = iterator.currentVoiceEntries?.[0].Notes[0].NoteToGraphicalNoteObjectId;
+		}
 		const voiceEntries = iterator.currentVoiceEntries?.[minIndex] ? [iterator.currentVoiceEntries?.[minIndex]] : [];
-
 		let currentVoiceEntries: any[] = [];
 		// 多分轨,当前小节最大音符数量
 		let maxNoteNum = 0;
@@ -929,7 +938,8 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
 			if (state.multitrack > 0 && currentTime > note.length.realValue) {
 				currentTime = note.length.realValue;
 			}
-			note.maxNoteNum = maxNoteNum
+			note.maxNoteNum = maxNoteNum;
+			note.trackIndex = minIndex;
 			_notes.push({
 				note,
 				iterator: { ...iterator },
@@ -1268,6 +1278,7 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
 			}
 			const filterRepeatIdx = allNotes.filter((item: any) => item.noteId === note.NoteToGraphicalNoteObjectId).length
 			const nodeDetail = {
+				trackIndex: note.trackIndex, // 当前的音符属于第几条分轨
 				isStaccato: note.voiceEntry.isStaccato(),
 				isRestFlag: note.isRestFlag,
 				noteId: note.NoteToGraphicalNoteObjectId,

+ 1 - 1
src/page-instrument/component/authorName/index.module.less

@@ -1,5 +1,5 @@
 .authorName{
-    height: 1.8rem;
+    height: 1.8rem; // 与smoothAnimationBox高度对应
 }
 .title{
     width: 280px;

+ 1 - 0
src/page-instrument/header-top/settting/index.module.less

@@ -256,6 +256,7 @@
                                 font-weight: 600;
                                 font-size: 15px;
                                 color: #1CACF1;
+                                caret-color: #1cacf1;
                             }
                         }
                     }

+ 15 - 15
src/page-instrument/header-top/settting/index.tsx

@@ -87,6 +87,18 @@ export default defineComponent({
                                 </div>
                         }                        
                         {
+                            state.isSingleLine && state.modeType === "practise" && !state.isCombineRender && !state.isPercussion && 
+                                <div class={styles.cellBox}>
+                                <div class={styles.tit}>旋律线</div>
+                                    <Switch 
+                                        v-model={smoothAnimationState.isShow.value}
+                                        onChange={(value) => {
+                                            state.melodyLine = value
+                                        }}                                        
+                                    ></Switch>
+                                </div>   
+                        }
+                        {
                             state.modeType === 'practise' && state.mingSong && state.mingSongGirl &&
                             <div class={styles.cellBox}>
                                 <div class={styles.tit}>唱名类型</div>
@@ -104,19 +116,7 @@ export default defineComponent({
                                     }
                                 </div>
                             </div>                     
-                        }
-                        {
-                            state.isSingleLine && state.modeType === "practise" && !state.isCombineRender && !state.isPercussion && 
-                                <div class={styles.cellBox}>
-                                <div class={styles.tit}>旋律线</div>
-                                    <Switch 
-                                        v-model={smoothAnimationState.isShow.value}
-                                        onChange={(value) => {
-                                            state.melodyLine = value
-                                        }}                                        
-                                    ></Switch>
-                                </div>   
-                        }                           
+                        }                        
                         {
                             state.modeType === "evaluating" && 
                             <>                       
@@ -213,9 +213,9 @@ export default defineComponent({
                                                     return
                                                 }
                                                 headTopData.settingMode = false
-                                                state.isSingleLine = item.value 
                                                 // resetRenderMusicScore(state.musicRenderType)
                                                 const _time = setTimeout(() => {
+                                                    state.isSingleLine = item.value 
                                                     clearTimeout(_time)
                                                     refreshMusicSvg();
                                                 }, 100);
@@ -238,9 +238,9 @@ export default defineComponent({
                                                     return
                                                 }
                                                 headTopData.settingMode = false
-                                                state.musicRenderType = item.value as any
                                                 // resetRenderMusicScore(state.musicRenderType)
                                                 const _time = setTimeout(() => {
+                                                    state.musicRenderType = item.value as any
                                                     clearTimeout(_time)
                                                     refreshMusicSvg();
                                                 }, 100);

+ 13 - 4
src/page-instrument/view-detail/index.module.less

@@ -50,8 +50,17 @@
         top: 0;
         width: 100%;
         height: 100%;
-        object-fit: cover;
-        /* 保持宽高比 */
+        object-fit: cover; /* 保持宽高比 */
+        z-index: -1;
+        &.practise{
+            background-color: #213793;
+        }        
+        &.follow{
+            background-color: #114067;
+        }        
+        &.evaluating{
+            background-color: #142979;
+        }
     }
 
     .headHeight {
@@ -89,8 +98,8 @@
 
         :global {
             #musicAndSelection {
-                // 其他位置 这个高度留白是36,这里加了一点,让旋律线靠下一点
-                padding-top: 40px;
+                --musicAndSelectionTop: 40px;
+                padding-top: var(--musicAndSelectionTop);
             }
         }
     }

+ 4 - 1
src/page-instrument/view-detail/index.tsx

@@ -525,7 +525,10 @@ export default defineComponent({
             style={{opacity: state.setting.camera && state.modeType === 'evaluating' ? state.setting.cameraOpacity / 100 : 1}} 
             class={styles.pageBg} 
             src={state.modeType === 'practise' ? bgJsonData.value[1] : state.modeType === 'evaluating' ? bgJsonData.value[2] : state.modeType === 'follow' ? bgJsonData.value[3] : ''} 
-          /> : null    
+          /> : <div 
+                style={{opacity: state.setting.camera && state.modeType === 'evaluating' ? state.setting.cameraOpacity / 100 : 1}}  
+                class={[styles.pageBg, styles[state.modeType]]} >
+              </div>    
         }
         {
           state.modeType === 'evaluating' ? (

+ 3 - 2
src/page-instrument/view-detail/smoothAnimation/index.less

@@ -8,7 +8,8 @@
 #musicAndSelection.singleLineMusicBox{
     .smoothAnimationBox{
         display: flex;
-        align-items: center;
+        align-items: flex-end;
+        height: 1.8rem; // 与authorName高度对应
         &.smoothAnimationBoxHide{
             opacity: 0;
             visibility: hidden;
@@ -37,7 +38,7 @@
         position: fixed;
         // position: absolute;
         left: 0;
-        top: 36px;
+        top: var(--musicAndSelectionTop);
         width: 100vw;
     }
 }

+ 5 - 4
src/view/music-score/index.tsx

@@ -211,10 +211,11 @@ export default defineComponent({
 		const refreshMusicScore = async () => {
 			console.log('刷新谱面123')
 			isLoadingCss.value = true
-			const container = document.getElementById('musicAndSelection'), svgDom = document.getElementById('osmdCanvasPage1'), selectionBox = document.getElementById('selectionBox');
-			if (container && svgDom) {
-				container?.removeChild(svgDom)
-				container?.removeChild(selectionBox)
+			const container = document.getElementById('musicAndSelection'), svgDom = document.getElementById('osmdCanvasPage1'), selectionBox = document.getElementById('selectionBox'), selectionBgBox = document.getElementById('selectionBgBox');
+			if (container) {
+				svgDom && container?.removeChild(svgDom)
+				selectionBox && container?.removeChild(selectionBox)
+				selectionBgBox && container?.removeChild(selectionBgBox)
 			}
 			state.vfmeasures = [];
 			musicData.showSelection = false;

+ 2 - 3
src/view/plugins/toggleMusicSheet/choosePartName/index.module.less

@@ -120,12 +120,11 @@
     }
   }
   .button {
+    display: block;
+    margin: 10px auto 0;
     cursor: pointer;
     width: 118px;
     height: 40px;
-    margin: 10px auto 0;
     z-index: 9;
-    background: url("./imgs/okBtn.png") no-repeat;
-    background-size: 100% 100%;
   }
 }

+ 3 - 2
src/view/plugins/toggleMusicSheet/choosePartName/index.tsx

@@ -5,6 +5,7 @@ import state, { IPlatform } from "/src/state";
 import changeName from "./imgs/changeName.png"
 import { headImg } from "/src/page-instrument/header-top/image";
 import { toggleMusicSheet } from "../index"
+import okBtn from "./imgs/okBtn.png"
 
 export default defineComponent({
   name: 'choosePartName',
@@ -75,7 +76,7 @@ export default defineComponent({
                 selectIndex.value = row.selectedValues[0]
               }}
             />
-            <div class={styles.button} onClick={() => {
+            <img src={ okBtn } class={styles.button} onClick={() => {
                 myPicker.value.confirm()
                 nextTick(()=>{
                   // console.log(1111,selectIndex.value)
@@ -86,7 +87,7 @@ export default defineComponent({
                   }
                 })
               }
-            }></div>
+            }></img>
           </div>
         </div>
       </div>

+ 1 - 1
src/view/selection/index.module.less

@@ -209,7 +209,7 @@
     transform: translate(-50%);
     > img {
         width: auto;
-        height: 35px;
+        height: 38px;
     }
 }