Przeglądaj źródła

Merge branch 'feature-tianyong-newVersion' of http://git.dayaedu.com/liushengqiang/music-score into hqyDevNewVersion

黄琪勇 1 rok temu
rodzic
commit
1c41e9e599

+ 1 - 1
.gitignore

@@ -21,4 +21,4 @@ dist-ssr
 *.ntvs*
 *.njsproj
 *.sln
-*.sw?
+*.sw?

+ 9 - 10
dist/colexiu.html

@@ -2,7 +2,7 @@
 <html lang="en">
 
 <head>
-  <script type="module" crossorigin src="./js/polyfills-1a2e4f1c.js"></script>
+  <script type="module" crossorigin src="./js/polyfills-7c3d5f60.js"></script>
 
   <meta charset="UTF-8" />
   <link rel="icon" type="image/svg+xml" href="./vite.svg" />
@@ -40,13 +40,12 @@
       },
     })
   </script>
-  <script type="module" crossorigin src="./js/colexiu-4a63d64c.js"></script>
-  <link rel="modulepreload" crossorigin href="./js/index-c987494a.js">
-  <link rel="modulepreload" crossorigin href="./js/index-d8f93bbd.js">
-  <link rel="modulepreload" crossorigin href="./js/index-666ce298.js">
-  <link rel="stylesheet" href="./css/index-33f3c513.css">
-  <link rel="stylesheet" href="./css/index-d42b0794.css">
-  <link rel="stylesheet" href="./css/colexiu-62f31c4f.css">
+  <script type="module" crossorigin src="./js/colexiu-817dd032.js"></script>
+  <link rel="modulepreload" crossorigin href="./js/index-763e8b6a.js">
+  <link rel="modulepreload" crossorigin href="./js/index-624d1810.js">
+  <link rel="modulepreload" crossorigin href="./js/index-d6925e45.js">
+  <link rel="stylesheet" href="./css/index-ccf6117c.css">
+  <link rel="stylesheet" href="./css/colexiu-e8b419b5.css">
   <script type="module">import.meta.url;import("_").catch(()=>1);async function* g(){};window.__vite_is_modern_browser=true;</script>
   <script type="module">!function(){if(window.__vite_is_modern_browser)return;console.warn("vite: loading legacy chunks, syntax error above and the same error below should be ignored");var e=document.getElementById("vite-legacy-polyfill"),n=document.createElement("script");n.src=e.src,n.onload=function(){System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))},document.body.appendChild(n)}();</script>
 </head>
@@ -56,8 +55,8 @@
   <img id="loading" class="show" src="./loading.svg" alt="loading" />
   
   <script nomodule>!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",(function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()}),!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script>
-  <script nomodule crossorigin id="vite-legacy-polyfill" src="./js/polyfills-legacy-b3b6467d.js"></script>
-  <script nomodule crossorigin id="vite-legacy-entry" data-src="./js/colexiu-legacy-9355aa1b.js">System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))</script>
+  <script nomodule crossorigin id="vite-legacy-polyfill" src="./js/polyfills-legacy-95755a14.js"></script>
+  <script nomodule crossorigin id="vite-legacy-entry" data-src="./js/colexiu-legacy-587fa4ae.js">System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))</script>
 </body>
 
 </html>

BIN
dist/gif/refresh_anim-de363185.gif


+ 8 - 11
dist/index.html

@@ -2,7 +2,7 @@
 <html lang="ZH-cn">
 
 <head>
-  <script type="module" crossorigin src="./js/polyfills-1a2e4f1c.js"></script>
+  <script type="module" crossorigin src="./js/polyfills-7c3d5f60.js"></script>
 
   <meta charset="UTF-8">
   <link rel="icon" href="./favicon.ico" />
@@ -75,16 +75,13 @@
       }
     })
   </script>
-  <script type="module" crossorigin src="./js/gym-65bdffe8.js"></script>
-  <link rel="modulepreload" crossorigin href="./js/index-c987494a.js">
-  <link rel="modulepreload" crossorigin href="./js/index-948cb66f.js">
-  <link rel="modulepreload" crossorigin href="./js/index-27021a09.js">
-  <link rel="modulepreload" crossorigin href="./js/index-d8f93bbd.js">
-  <link rel="modulepreload" crossorigin href="./js/index-666ce298.js">
+  <script type="module" crossorigin src="./js/gym-a1294940.js"></script>
+  <link rel="modulepreload" crossorigin href="./js/index-763e8b6a.js">
+  <link rel="modulepreload" crossorigin href="./js/index-624d1810.js">
+  <link rel="modulepreload" crossorigin href="./js/index-1dc5c539.js">
   <link rel="modulepreload" crossorigin href="./js/plyr.min-c8c2777b.js">
-  <link rel="stylesheet" href="./css/index-33f3c513.css">
+  <link rel="stylesheet" href="./css/index-ccf6117c.css">
   <link rel="stylesheet" href="./css/index-85f95688.css">
-  <link rel="stylesheet" href="./css/index-d42b0794.css">
   <link rel="stylesheet" href="./css/plyr-ad8ef5ae.css">
   <link rel="stylesheet" href="./css/index-171cd132.css">
   <script type="module">import.meta.url;import("_").catch(()=>1);async function* g(){};window.__vite_is_modern_browser=true;</script>
@@ -100,8 +97,8 @@
   <img id="loading" class="show" src="./loading.svg" alt="loading" />
   
   <script nomodule>!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",(function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()}),!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script>
-  <script nomodule crossorigin id="vite-legacy-polyfill" src="./js/polyfills-legacy-b3b6467d.js"></script>
-  <script nomodule crossorigin id="vite-legacy-entry" data-src="./js/gym-legacy-d67a9763.js">System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))</script>
+  <script nomodule crossorigin id="vite-legacy-polyfill" src="./js/polyfills-legacy-95755a14.js"></script>
+  <script nomodule crossorigin id="vite-legacy-entry" data-src="./js/gym-legacy-9c45ea39.js">System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))</script>
 </body>
 
 </html>

+ 15 - 12
dist/instrument.html

@@ -2,7 +2,7 @@
 <html lang="en">
 
 <head>
-  <script type="module" crossorigin src="./js/polyfills-1a2e4f1c.js"></script>
+  <script type="module" crossorigin src="./js/polyfills-7c3d5f60.js"></script>
 
   <meta charset="UTF-8" />
   <meta name="viewport"
@@ -30,7 +30,8 @@
         instance.postMessage(JSON.stringify(data))
       }
     }
-    if (!location.href.includes('iscurseplay=play') && !location.href.includes('isPreView=true')) {
+    // APP的全屏loading动画
+    if (!location.href.includes('iscurseplay=play') && !location.href.includes('isPreView=true') && !location.href.includes("simple-detail")) {
       _postMessage({
         api: 'cloudLoading',
         content: {
@@ -40,13 +41,10 @@
       })
     }
   </script>
-  <script type="module" crossorigin src="./js/instrument-ff82a3ab.js"></script>
-  <link rel="modulepreload" crossorigin href="./js/index-c987494a.js">
-  <link rel="modulepreload" crossorigin href="./js/index-666ce298.js">
-  <link rel="modulepreload" crossorigin href="./js/index-948cb66f.js">
-  <link rel="stylesheet" href="./css/index-33f3c513.css">
-  <link rel="stylesheet" href="./css/index-d42b0794.css">
-  <link rel="stylesheet" href="./css/instrument-d78850b6.css">
+  <script type="module" crossorigin src="./js/instrument-e3875fa3.js"></script>
+  <link rel="modulepreload" crossorigin href="./js/index-763e8b6a.js">
+  <link rel="stylesheet" href="./css/index-ccf6117c.css">
+  <link rel="stylesheet" href="./css/instrument-f3d1af9e.css">
   <script type="module">import.meta.url;import("_").catch(()=>1);async function* g(){};window.__vite_is_modern_browser=true;</script>
   <script type="module">!function(){if(window.__vite_is_modern_browser)return;console.warn("vite: loading legacy chunks, syntax error above and the same error below should be ignored");var e=document.getElementById("vite-legacy-polyfill"),n=document.createElement("script");n.src=e.src,n.onload=function(){System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))},document.body.appendChild(n)}();</script>
 </head>
@@ -56,16 +54,21 @@
   <img id="loading" class="show" src="./loading.svg" alt="loading" />
   <script>
     // 处理课堂乐器老师端打开听音练习时去掉加载动画
-    if (location.href.indexOf('view-figner') >= 0 && location.href.indexOf('platform=pc') >= 0 && location.href.indexOf('linkSource=class') < 0) {
+    if (location.href.indexOf('view-figner') >= 0 && location.href.indexOf('platform=pc') >= 0 && location.href.indexOf('linkSource=class') < 0 && !location.href.includes("simple-detail")) {
       var _loading = document.getElementById("loading");
       _loading && document.body.removeChild(_loading);
     }
   </script>
 
   
+  <script src="https://unpkg.com/vconsole@latest/dist/vconsole.min.js"></script>
+  <script>
+    // VConsole will be exported to `window.VConsole` by default.
+    // var vConsole = new window.VConsole();
+  </script>
   <script nomodule>!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",(function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()}),!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script>
-  <script nomodule crossorigin id="vite-legacy-polyfill" src="./js/polyfills-legacy-b3b6467d.js"></script>
-  <script nomodule crossorigin id="vite-legacy-entry" data-src="./js/instrument-legacy-6acd9b82.js">System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))</script>
+  <script nomodule crossorigin id="vite-legacy-polyfill" src="./js/polyfills-legacy-95755a14.js"></script>
+  <script nomodule crossorigin id="vite-legacy-entry" data-src="./js/instrument-legacy-4b1cdc45.js">System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))</script>
 </body>
 
 </html>

+ 10 - 11
dist/orchestra.html

@@ -2,7 +2,7 @@
 <html lang="en">
 
 <head>
-  <script type="module" crossorigin src="./js/polyfills-1a2e4f1c.js"></script>
+  <script type="module" crossorigin src="./js/polyfills-7c3d5f60.js"></script>
 
   <meta charset="UTF-8" />
   <!-- <link rel="icon" type="image/svg+xml" href="/vite.svg" /> -->
@@ -41,15 +41,14 @@
       transition: opacity .3s;
     }
   </style>
-  <script type="module" crossorigin src="./js/orchestra-9b200011.js"></script>
-  <link rel="modulepreload" crossorigin href="./js/index-c987494a.js">
-  <link rel="modulepreload" crossorigin href="./js/index-27021a09.js">
-  <link rel="modulepreload" crossorigin href="./js/index-d8f93bbd.js">
-  <link rel="modulepreload" crossorigin href="./js/index-666ce298.js">
-  <link rel="stylesheet" href="./css/index-33f3c513.css">
+  <script type="module" crossorigin src="./js/orchestra-fb7429c2.js"></script>
+  <link rel="modulepreload" crossorigin href="./js/index-763e8b6a.js">
+  <link rel="modulepreload" crossorigin href="./js/index-624d1810.js">
+  <link rel="modulepreload" crossorigin href="./js/index-d6925e45.js">
+  <link rel="modulepreload" crossorigin href="./js/index-1dc5c539.js">
+  <link rel="stylesheet" href="./css/index-ccf6117c.css">
   <link rel="stylesheet" href="./css/index-85f95688.css">
-  <link rel="stylesheet" href="./css/index-d42b0794.css">
-  <link rel="stylesheet" href="./css/orchestra-8bc1a9c0.css">
+  <link rel="stylesheet" href="./css/orchestra-8e05e751.css">
   <script type="module">import.meta.url;import("_").catch(()=>1);async function* g(){};window.__vite_is_modern_browser=true;</script>
   <script type="module">!function(){if(window.__vite_is_modern_browser)return;console.warn("vite: loading legacy chunks, syntax error above and the same error below should be ignored");var e=document.getElementById("vite-legacy-polyfill"),n=document.createElement("script");n.src=e.src,n.onload=function(){System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))},document.body.appendChild(n)}();</script>
 </head>
@@ -70,8 +69,8 @@
   </script>
   
   <script nomodule>!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",(function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()}),!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script>
-  <script nomodule crossorigin id="vite-legacy-polyfill" src="./js/polyfills-legacy-b3b6467d.js"></script>
-  <script nomodule crossorigin id="vite-legacy-entry" data-src="./js/orchestra-legacy-4ed40420.js">System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))</script>
+  <script nomodule crossorigin id="vite-legacy-polyfill" src="./js/polyfills-legacy-95755a14.js"></script>
+  <script nomodule crossorigin id="vite-legacy-entry" data-src="./js/orchestra-legacy-56a35f49.js">System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))</script>
 </body>
 
 </html>

+ 6 - 6
dist/report-share.html

@@ -2,7 +2,7 @@
 <html lang="en">
 
 <head>
-  <script type="module" crossorigin src="./js/polyfills-1a2e4f1c.js"></script>
+  <script type="module" crossorigin src="./js/polyfills-7c3d5f60.js"></script>
 
   <meta charset="UTF-8" />
   <!-- <link rel="icon" type="image/svg+xml" href="/vite.svg" /> -->
@@ -25,10 +25,10 @@
       transition: opacity .3s;
     }
   </style>
-  <script type="module" crossorigin src="./js/report-share-ef089666.js"></script>
-  <link rel="modulepreload" crossorigin href="./js/index-c987494a.js">
+  <script type="module" crossorigin src="./js/report-share-ad36c120.js"></script>
+  <link rel="modulepreload" crossorigin href="./js/index-763e8b6a.js">
   <link rel="modulepreload" crossorigin href="./js/plyr.min-c8c2777b.js">
-  <link rel="stylesheet" href="./css/index-33f3c513.css">
+  <link rel="stylesheet" href="./css/index-ccf6117c.css">
   <link rel="stylesheet" href="./css/plyr-ad8ef5ae.css">
   <link rel="stylesheet" href="./css/report-share-0f4c3151.css">
   <script type="module">import.meta.url;import("_").catch(()=>1);async function* g(){};window.__vite_is_modern_browser=true;</script>
@@ -51,8 +51,8 @@
   </script>
   
   <script nomodule>!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",(function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()}),!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script>
-  <script nomodule crossorigin id="vite-legacy-polyfill" src="./js/polyfills-legacy-b3b6467d.js"></script>
-  <script nomodule crossorigin id="vite-legacy-entry" data-src="./js/report-share-legacy-1420c584.js">System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))</script>
+  <script nomodule crossorigin id="vite-legacy-polyfill" src="./js/polyfills-legacy-95755a14.js"></script>
+  <script nomodule crossorigin id="vite-legacy-entry" data-src="./js/report-share-legacy-7001a7f7.js">System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))</script>
 </body>
 
 </html>

+ 12 - 0
src/helpers/formateMusic.ts

@@ -969,6 +969,18 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
 			
 			activeVerticalMeasureList = [note.sourceMeasure?.verticalMeasureList?.[0]] || [];
 
+			/**
+			 * TODO:多分轨合并的小节,音符可能没有id,此时就去其它分轨找
+			 */
+			const vmLength = note.sourceMeasure?.verticalMeasureList?.length
+			let currentVmIndex = 0;
+			let hasSvgElement = activeVerticalMeasureList[0]?.vfVoices['1']?.tickables[staveNoteIndex];
+			while (!hasSvgElement && vmLength > 1 && currentVmIndex <= vmLength - 1) {
+				currentVmIndex += 1;
+				activeVerticalMeasureList = [note.sourceMeasure?.verticalMeasureList?.[currentVmIndex]] || [];
+				hasSvgElement = activeVerticalMeasureList[0]?.vfVoices['1']?.tickables[staveNoteIndex];
+			}
+
 			const { realValue } = iterator.currentTimeStamp;
 			const { RealValue: vRealValue, Denominator: vDenominator } = formatDuration(
 				iterator.currentMeasure.activeTimeSignature,

+ 48 - 0
src/page-instrument/evaluat-model/evaluat-result/index.module.less

@@ -177,6 +177,54 @@
     }
 }
 
+.saveBtn {
+    position: relative;
+}
+.noSaveTip {
+    background: rgba(0,0,0,0.7);
+    font-size: 13Px;
+    border-radius: 8Px;
+    display: flex;
+    align-items: center;
+    padding: 8Px 12Px;
+    position: absolute;
+    left: 50%;
+    top: -45Px;
+    transform: translateX(-50%);
+    z-index: 1;
+    color: #fff;
+    width: auto;
+    word-break: keep-all;
+    > i {
+      display: inline-block;
+      min-width: 12Px;
+      width: 12Px;
+      height: 12Px;
+      background-image: url('./icons/close_icon.png');
+      background-size: 100% 100%;
+      background-position: center center;
+      background-repeat: no-repeat;
+      margin-left: 16Px;
+      cursor: pointer;
+    }
+    span {
+      word-break: keep-all;
+      width: max-content;
+    }
+    .arrowIcon {
+      position: absolute;
+      left: 50%;
+      bottom: -8PX;
+      transform: translateX(-50%);
+      width: 0;
+      height: 0;
+      border-top: 8PX solid rgba(0,0,0,0.7);
+      border-right: 8PX solid transparent;
+      border-left: 8PX solid transparent;  
+      z-index: 2;      
+    }
+}
+
 :global {
     .savePopoverClose {
         &.van-popover {

+ 29 - 25
src/page-instrument/evaluat-model/evaluat-result/index.tsx

@@ -1,4 +1,4 @@
-import { defineComponent, onMounted, reactive, watch } from "vue";
+import { defineComponent, onMounted, reactive, watch, computed } from "vue";
 import { Popover } from "vant";
 import styles from "./index.module.less";
 import state from "/src/state";
@@ -78,6 +78,16 @@ export default defineComponent({
       emit("close", "update");
     };
 
+    // 播放倍率不等于1,或者是选段评测,APP暂时不支持保存演奏,需要给出提示
+    const noSaveTips = computed(() => {
+      let tipContent = '';
+      const rate = state.basePlayRate * state.originAudioPlayRate; // 播放倍率
+      if (query.workRecord || state.section.length === 2 || state.isAppPlay || rate != 1 || !state.accompany) {
+        tipContent = query.workRecord ? '评测作业暂不支持保存作品噢~' : (!state.accompany || state.isAppPlay) ? '该曲目暂不支持保存作品噢~' : state.section.length === 2 ? '选段后暂不支持保存作品噢~' : rate != 1 ? '调速后暂不支持保存作品噢~' : '';
+      }
+      return tipContent
+    })
+
     onMounted(() => {
       if (!evaluatingData.isErrorState) {
         handleAddRecord();
@@ -111,12 +121,12 @@ export default defineComponent({
                 {evaluatingData.resultData.score > 79 && <img class={styles.badge} src={iconBadge} />}
                 <div class={[styles.text, evaluatingData.resultData.score > 79 && styles.badgeText]}>
                   <div class={[styles.scoreSection, "evaluting-result-1"]}>
-                    <div class={styles.num}>{evaluatingData.resultData.score}00</div>
+                    <div class={styles.num}>{evaluatingData.resultData.score}</div>
                     <div class={styles.score}>分</div>
                     <div class={styles.level}>
                       <div>{level[evaluatingData.resultData.heardLevel]}</div>
                       <span>|</span>
-                      <div>速度{evaluatingData.resultData.speed}</div>
+                      <div>速度{evaluatingData.resultData.speed || state.speed}</div>
                     </div>
                   </div>
                 </div>
@@ -155,28 +165,22 @@ export default defineComponent({
               <div class={styles.ctrls}>
                 <img src={zlycImg} class={[styles.ctrlsBtn, "evaluting-result-2"]} onClick={() => emit("close", "tryagain")} />
                 {!state.isHideEvaluatReportSaveBtn && evaluatingData.resultData.recordId ? (
-                  <img src={bczpImg} class={[styles.ctrlsBtn, "evaluting-result-3"]} onClick={debounce(saveResult, 300)} />
-                ) : (
-                  <Popover
-                    class={"savePopoverClose"}
-                    placement={"top"}
-                    v-model:show={data.showPopover}
-                    v-slots={{
-                      reference: () => <img src={bczpJzImg} class={[styles.ctrlsBtn, "evaluting-result-3"]} />,
-                    }}
-                    theme="dark"
-                  >
-                    <div class={"popoverClose"}>
-                      <div>该曲目暂不支持保存作品噢~</div>
-                      <img
-                        src={closeImg}
-                        onClick={() => {
-                          data.showPopover = false;
-                        }}
-                      />
-                    </div>
-                  </Popover>
-                )}
+                  <div class={styles.saveBtn}>
+                    <img src={noSaveTips.value ? bczpJzImg : bczpImg} class={[styles.ctrlsBtn, "evaluting-result-3"]} onClick={() => {
+                      if (!noSaveTips.value) {
+                        debounce(saveResult, 300)
+                      }
+                    }} />
+                    {
+                      noSaveTips.value && state.noSavePopShow ? 
+                      <div class={[styles.noSaveTip]}>
+                        <span class={styles.arrowIcon}></span>
+                        <span>{noSaveTips.value}</span>
+                        <i onClick={() => state.noSavePopShow = false}></i>
+                      </div> : null                   
+                    }
+                  </div>
+                ) : null }
                 <img src={ckzpImg} class={[styles.ctrlsBtn, "evaluting-result-4", data.saveLoading ? styles.disablued : ""]} onClick={() => emit("close", "look")} />
               </div>
             </div>

+ 6 - 2
src/page-instrument/evaluat-model/index.tsx

@@ -1,4 +1,4 @@
-import { Transition, defineComponent, onMounted, reactive, watch, defineAsyncComponent } from "vue";
+import { Transition, defineComponent, onMounted, reactive, watch, defineAsyncComponent, computed } from "vue";
 import { connectWebsocket, evaluatingData, handleEndBegin, handleStartBegin, handleStartEvaluat, handleViewReport, startCheckDelay, checkUseEarphone, handleCancelEvaluat } from "/src/view/evaluating";
 import Earphone from "./earphone";
 import styles from "./index.module.less";
@@ -404,6 +404,10 @@ export default defineComponent({
       handleEvaluatResult("tryagain");
     };
 
+    const earPhonePopShow = computed(() => {
+			return evaluatingData.earphoneMode && state.audioDone && !state.hasDriverPop;
+		});
+
     onMounted(async () => {
       // 如果打开了延迟检测开关,需要先发送开始检测的消息
       if (state.setting.soundEffect) {
@@ -454,7 +458,7 @@ export default defineComponent({
         {
           evaluatingData.isBeginMask && <div class={styles.beginMask}></div>
         }
-        <Popup teleport="body" closeOnClickOverlay={false} class={["popup-custom", "van-scale"]} transition="van-scale" v-model:show={evaluatingData.earphoneMode}>
+        <Popup teleport="body" closeOnClickOverlay={false} class={["popup-custom", "van-scale"]} transition="van-scale" v-model:show={earPhonePopShow.value}>
           <Earphone
             earphoneType={evaluatingData.earPhoneType}
             onClose={() => {

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

@@ -80,7 +80,7 @@ export const headTopData = reactive({
       state.playIngSpeed = state.originSpeed;
       handleStartEvaluat();
       // 开发模式,把此处打开
-      //state.modeType = "evaluating";
+      // state.modeType = "evaluating";
       // evaluatingData.rendered = true;
       // evaluatingData.soundEffectMode = true;
     } else if (value === "follow") {

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

@@ -93,6 +93,7 @@
                             background: #94ACC4;
                             box-shadow: inset 0px 2px 3px 0px #647F98;
                             .van-slider__bar{
+                                max-width: 100%;
                                 background: linear-gradient( 270deg, #7ADEFF 0%, #29A9FF 100%);
                                 box-shadow: inset 1px 0px 5px 0px rgba(150,254,255,0.79);
                                 border: 1px solid #4A91D4;

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

@@ -12,16 +12,21 @@ export default defineComponent({
 		const speed = ref(state.speed);
 
 		const minusSpeed = () => {
-			speed.value = Math.max(speed.value - 1, 45);
+			let canSpeed = Math.max(speed.value - 1, 45);
+			canSpeed = Math.min(canSpeed, 270);
+			speed.value = canSpeed;
 		};
 
 		const plusSpeed = () => {
-			speed.value = Math.min(speed.value + 1, 270);
+			let canSpeed = Math.min(speed.value + 1, 270);
+			canSpeed = Math.max(canSpeed, 45);
+			speed.value = canSpeed;
 		};
 		watch(
 			() => speed.value,
 			() => {
-				handleSetSpeed(speed.value);
+				// handleSetSpeed(speed.value);
+				state.speed = speed.value;
 			}
 		);
 		watch(

+ 12 - 4
src/state.ts

@@ -509,6 +509,10 @@ const state = reactive({
   originAudioPlayRate: 1,  
   /** 开始播放时,记录的mp3播放倍率,用户当前设置的速度/当前小节的速度 */
   basePlayRate: 1,
+  /** 引导页显示状态 */
+  hasDriverPop: false,
+  /** 播放倍率不等于1,或者是选段评测,APP暂时不支持保存演奏,需要给出提示 */
+  noSavePopShow: true,
 });
 const browserInfo = browser();
 let offset_duration = 0;
@@ -588,8 +592,8 @@ export const onEnded = () => {
 const dynamicShowPlaySpeed = (index: number) => {
   const item: any = state.times[index];
   if (item && item.measureSpeed ) {
-    state.playIngSpeed = Math.floor(state.basePlayRate * item.measureSpeed)
-    state.speed = state.playIngSpeed
+    // console.log('速度1',item.measureSpeed)
+    state.speed = Math.floor(state.basePlayRate * item.measureSpeed)
   }
 }
 
@@ -608,6 +612,7 @@ export const initSetPlayRate = () => {
 export const resetBaseRate = () => {
   const currentItem: any = state.times[0];
   const currentSpeed = currentItem?.measureSpeed ? currentItem.measureSpeed : state.originSpeed;
+  // console.log('速度2',currentSpeed)
   state.speed = currentSpeed
   //state.activeNoteIndex = 0
   state.basePlayRate = 1;
@@ -622,7 +627,6 @@ const handlePlaying = () => {
   state.playProgress = (currentTime / duration) * 100;
   let item = getNote(currentTime);
   if (item) {
-    dynamicShowPlaySpeed(item.i);
     // 选段状态下
     if (state.sectionStatus && state.section.length === 2) {
       // 如果开启了预备拍
@@ -675,6 +679,7 @@ const handlePlaying = () => {
       }
     }
     gotoNext(item);
+    dynamicShowPlaySpeed(item.i);
   }
 
   // 评测不播放叮咚节拍器
@@ -951,7 +956,7 @@ export const gotoNext = (note: any, skipNote?: boolean) => {
   let prev = state.activeNoteIndex;
   state.activeNoteIndex = num;
   state.activeMeasureIndex = note.MeasureNumberXML;
-
+  dynamicShowPlaySpeed(state.activeNoteIndex);
   if (prev && num - prev === 1) {
     // console.log('跳转音符',11111,osmd.cursor)
     // if (!note.id && note.multipleRestMeasures === 0) {
@@ -1219,8 +1224,10 @@ export const isRhythmicExercises = () => {
 /** 重置状态 */
 export const handleRessetState = () => {
   // 切换模式,清除选段
+  state.noSavePopShow = true;
   clearSelection();
   skipNotePlay(0, true);
+  resetBaseRate();
   // midi 重置播放进度
   if (state.isAppPlay) {
     audioData.progress = 0;
@@ -1760,6 +1767,7 @@ watch(
 
 /** 刷新谱面 */
 export const refreshMusicSvg = () => {
+  resetBaseRate();
   state.loadingText = '正在加载中,请稍等…'
   // 销毁旋律线
   destroySmoothAnimation()

+ 3 - 2
src/view/evaluating/index.tsx

@@ -35,7 +35,7 @@ import {
   api_startDelayCheck,
   api_closeDelayCheck,
 } from "/src/helpers/communication";
-import state, { IPlayState, clearSelection, handleStopPlay, onPlay, resetPlaybackToStart, togglePlay } from "/src/state";
+import state, { IPlayState, clearSelection, handleStopPlay, onPlay, resetPlaybackToStart, togglePlay, initSetPlayRate } from "/src/state";
 import { IPostMessage } from "/src/utils/native-message";
 import { usePageVisibility } from "@vant/use";
 import { browser } from "/src/utils";
@@ -351,7 +351,6 @@ export const handleStartBegin = async (preTimes?: number) => {
 	evaluatingData.evaluatings = {};
 	evaluatingData.resultData = {};
 	evaluatingData.backtime = 0;
-	resetPlaybackToStart();
 	evaluatingData.isAudioPlayEnd = false;
 	const res = await startEvaluating(evaluatingData.contentData);
 	if (res?.api !== "startEvaluating") {
@@ -364,6 +363,8 @@ export const handleStartBegin = async (preTimes?: number) => {
 		evaluatingData.startBegin = false;
 		return;
 	}
+  initSetPlayRate();
+	resetPlaybackToStart();
 	evaluatingData.startBegin = true;
 	if (evaluatingData.isDisabledPlayMusic) {
 		evaluatingData.isBeginMask = true

Plik diff jest za duży
+ 0 - 0
stats.html


+ 1 - 1
vite.config.ts

@@ -77,7 +77,7 @@ export default defineConfig({
         // target: "https://test.lexiaoya.cn",
         // target: "https://kt.colexiu.com",
         target: "https://dev.resource.colexiu.com", // 内容平台开发环境,内容平台开发,需在url链接上加上isCbs=true
-        // target: "https://test.kt.colexiu.com",
+        // target: "https://dev.kt.colexiu.com",
         //target: "https://mec.colexiu.com",
         changeOrigin: true,
         rewrite: (path) => path.replace(/^\/instrument/, ""),

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików