ソースを参照

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

TIANYONG 7 ヶ月 前
コミット
5019bc577d

+ 18 - 12
src/helpers/formateMusic.ts

@@ -1552,20 +1552,26 @@ const customizationXml = (xmlParse: any) => {
 	 * 妙极客xml,多遍歌词循环的曲目,如果没有repeat标签,需要加上repeat标签
 	 * */
 	if (maxLyricNum > 1) {
-		const hasRepeat = xmlParse.querySelectorAll('repeat').length > 0
+		const hasRepeat = xmlParse.querySelectorAll('repeat').length > 0;
 		if (!hasRepeat) {
-			const lastMeasure = measures.last();
-			if (lastMeasure.getElementsByTagName('barline').length) {
-				const barlineDom = lastMeasure.getElementsByTagName('barline')[0]
-				barlineDom.innerHTML = barlineDom.innerHTML + `<repeat direction="backward" />`;
-			} else {
-				lastMeasure.innerHTML = lastMeasure.innerHTML + `
-				<barline location="right">
-					<bar-style>light-heavy</bar-style>
-					<repeat direction="backward" />
-				</barline>`
+			const parts = xmlParse.querySelectorAll('score-partwise>part')
+			if (parts.length > 1) {
+				for (const part of parts) {
+					const currentMeasures = part.querySelectorAll('measure').length ? Array.from(part.querySelectorAll('measure')) : [];
+					const lastMeasure: any = currentMeasures.last();
+					if (lastMeasure?.getElementsByTagName('barline').length) {
+						const barlineDom = lastMeasure?.getElementsByTagName('barline')[0]
+						barlineDom.innerHTML = barlineDom.innerHTML + `<repeat direction="backward" />`;
+					} else {
+						lastMeasure.innerHTML = lastMeasure.innerHTML + `
+						<barline location="right">
+							<bar-style>light-heavy</bar-style>
+							<repeat direction="backward" />
+						</barline>`
+					}
+					// console.log(lastMeasure)
+				}
 			}
-			// console.log(lastMeasure)
 		}
 	}
 }

+ 1 - 1
src/page-instrument/custom-plugins/helper-model/recommendation/index.tsx

@@ -113,7 +113,7 @@ export default defineComponent({
 		}
 		return () => (
 			<div class={[styles.recommendation,styles[state.modeType]]}>
-				<div class={styles.head}>
+				<div class={[styles.head, "top_drag"]}>
 					<img class={styles.headTit} src={headImg("recommendationName.png")} />
 					<img class={styles.closeImg} src={headImg("closeImg.png")} onClick={()=>{ emit("close") }} />
 				</div>

+ 12 - 2
src/page-instrument/header-top/index.tsx

@@ -528,6 +528,10 @@ export default defineComponent({
       if (query.workRecord) {
         return;
       }
+      // 总控平台 隐藏返回按钮
+      if (query.isCbs) {
+        headTopData.showBack = false;
+      } 
       /** 作业模式 end */
       if (state.defaultModeType == 1) {
         headTopData.handleChangeModeType("practise");
@@ -591,7 +595,13 @@ export default defineComponent({
             styleDrag: { value: null },
           }
         : useDrag([`${parentClassName} .top_drag`, `${parentClassName} .bom_drag`], parentClassName, toRef(headTopData, "settingMode"), userId);
-
+    const speedClassName = "speedBoxClass_drag";
+    const speedInfo =
+      state.platform !== IPlatform.PC
+        ? {
+            styleDrag: { value: null },
+          }
+        : useDrag([`${speedClassName} .top_drag`, `${speedClassName} .bom_drag`], speedClassName, toRef(headData, "speedShow"), userId);
     onMounted(() => {
       getQueryModelSetModelType();
       window.addEventListener("message", changePlay);
@@ -876,7 +886,7 @@ export default defineComponent({
                   </div>
                 </div>
                 {
-                  <Popup v-model:show={headData.speedShow} class="popup-custom van-scale center-closeBtn settingBoxClass_drag" transition="van-scale" teleport="body" style={positionInfo.styleDrag.value} overlay-style={{ background: "rgba(0, 0, 0, 0.3)" }}>
+                  <Popup v-model:show={headData.speedShow} class="popup-custom van-scale center-closeBtn speedBoxClass_drag" transition="van-scale" teleport="body" style={speedInfo.styleDrag.value} overlay-style={{ background: "rgba(0, 0, 0, 0.3)" }}>
                     <Speed />
                     {state.platform === IPlatform.PC && <Dragbom showGuide={!state.guideInfo?.teacherDrag} onGuideDone={handleGuide} />}
                   </Popup>

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

@@ -66,7 +66,7 @@ export default defineComponent({
 
 		return () => (
 			<div class={[styles.settting, styles[state.modeType]]}>
-                <div class={styles.head}>
+                <div class={[styles.head, "top_drag"]}>
 					<img class={styles.headTit} src={headImg("settingName.png")} />
 					<img class={styles.closeImg} src={headImg("closeImg.png")} onClick={()=>{ headTopData.settingMode = false }} />
 				</div>

+ 1 - 1
src/page-instrument/header-top/speed/index.tsx

@@ -106,7 +106,7 @@ export default defineComponent({
 		};
 		return () => (
 			<div class={[styles.speedContainer, styles[state.modeType]]}>
-				<div class={styles.head}>
+				<div class={[styles.head, "top_drag"]}>
 					<img class={styles.headTit} src={headImg("headTit.png")} />
 					<img class={styles.closeImg} src={headImg("closeImg.png")} onClick={()=>{ headData.speedShow = false }} />
 				</div>

+ 0 - 1
src/page-instrument/view-detail/index.module.less

@@ -51,7 +51,6 @@
         width: 100%;
         height: 100%;
         object-fit: cover; /* 保持宽高比 */
-        z-index: -1;
         &.practise{
             background-color: #213793;
         }        

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

@@ -54,11 +54,10 @@ export default defineComponent({
 
     return () => (
       <div class={[styles.container, state.platform === IPlatform.PC && styles.pcContainer, styles[state.modeType]]}>
-        <div class={styles.head}>
+        <div class={[styles.head, "top_drag"]}>
           <img class={styles.headTit} src={changeName} />
           <img class={styles.closeImg} src={headImg("closeImg.png")} onClick={() => emit("close")} />
         </div>
-        { state.platform === IPlatform.PC && <div class={[!state.guideInfo?.teacherDrag && styles.pcPartTopZIndex ,styles.pcPartTop,'top_drag']}></div> }
         <div class={styles.pickerCon}>
           <div class={styles.pickerBox}>
             <Picker

+ 23 - 12
src/view/plugins/useDrag/index.ts

@@ -105,19 +105,22 @@ export default function useDrag(
 
 // 拖动
 function drag(el: HTMLElement, parentElement: HTMLElement, pos: Ref<posType>) {
-  function mousedown(e: MouseEvent) {
+  function onDown(e: MouseEvent | TouchEvent) {
+    const isTouchEv = isTouchEvent(e);
+    const event = isTouchEv ? e.touches[0] : e;
     const parentElementRect = parentElement.getBoundingClientRect();
-    const downX = e.clientX;
-    const downY = e.clientY;
+    const downX = event.clientX;
+    const downY = event.clientY;
     const clientWidth = document.documentElement.clientWidth;
     const clientHeight = document.documentElement.clientHeight;
     const maxLeft = clientWidth - parentElementRect.width;
     const maxTop = clientHeight - parentElementRect.height;
     const minLeft = 0;
     const minTop = 0;
-    function onMousemove(e: MouseEvent) {
-      let moveX = parentElementRect.left + (e.clientX - downX);
-      let moveY = parentElementRect.top + (e.clientY - downY);
+    function onMove(e: MouseEvent | TouchEvent) {
+      const event = isTouchEvent(e) ? e.touches[0] : e;
+      let moveX = parentElementRect.left + (event.clientX - downX);
+      let moveY = parentElementRect.top + (event.clientY - downY);
       moveX = moveX < minLeft ? minLeft : moveX > maxLeft ? maxLeft : moveX;
       moveY = moveY < minTop ? minTop : moveY > maxTop ? maxTop : moveY;
       pos.value = {
@@ -125,14 +128,22 @@ function drag(el: HTMLElement, parentElement: HTMLElement, pos: Ref<posType>) {
         left: moveX
       };
     }
-    function onMouseup() {
-      document.removeEventListener('mousemove', onMousemove);
-      document.removeEventListener('mouseup', onMouseup);
+    function onUp() {
+      document.removeEventListener(
+        isTouchEv ? 'touchmove' : 'mousemove',
+        onMove
+      );
+      document.removeEventListener(isTouchEv ? 'touchend' : 'mouseup', onUp);
     }
-    document.addEventListener('mousemove', onMousemove);
-    document.addEventListener('mouseup', onMouseup);
+    document.addEventListener(isTouchEv ? 'touchmove' : 'mousemove', onMove);
+    document.addEventListener(isTouchEv ? 'touchend' : 'mouseup', onUp);
   }
-  el.addEventListener('mousedown', mousedown);
+  el.addEventListener('mousedown', onDown);
+  el.addEventListener('touchstart', onDown);
+}
+
+function isTouchEvent(e: MouseEvent | TouchEvent): e is TouchEvent {
+  return window.TouchEvent && e instanceof window.TouchEvent;
 }
 
 // 缓存

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

@@ -212,7 +212,11 @@
         height: 38px;
     }
 }
-
+.isPad{
+    .followTipUp, .followTipDown {
+        transform: translate(-50%) scale(0.7);
+    }
+}
 .followTipUp {
     i {
         font-style: normal;

+ 4 - 0
src/view/selection/index.tsx

@@ -11,6 +11,7 @@ import { getQuery } from "/src/utils/queryString";
 import IntonationDown from "./imgs/pitchLow.png"
 import IntonationUp from "./imgs/pitchHigh.png"
 import MultipleRestMeasures from "./multipleRestMeasures"
+import { browser } from "../../utils";
 
 const selectData = reactive({
 	notes: [] as any[],
@@ -207,6 +208,8 @@ export const recalculateNoteData = () => {
 export default defineComponent({
 	name: "selection",
 	setup() {
+		const browsInfo = browser();
+		const isPad =  navigator?.userAgent?.includes("UAWEIVRD-W09") || browsInfo?.iPad || browsInfo.isTablet;
 		const route = useRoute();
 		const query: any = {
 			...getQuery(),
@@ -282,6 +285,7 @@ export default defineComponent({
 					id="selectionBox"
 					class={[
 						styles.selectionContainer,
+						isPad && styles.isPad
 					]}
 					onClick={(e: Event) => e.stopPropagation()}
 				>