lex 8 månader sedan
förälder
incheckning
6c8fac9d7a

BIN
src/page-instrument/custom-plugins/guide-driver/images/practise/d11.png


+ 64 - 4
src/page-instrument/custom-plugins/guide-driver/index.less

@@ -10,16 +10,20 @@
   border: none;
   font-weight: 600;
   font-size: 13px;
-  color: #006ed1;
+  color: #006ed1 !important;
   text-align: center;
   position: absolute;
   background: url("./images/btn-next.png") no-repeat center transparent;
   background-size: contain;
   background-color: transparent !important;
+  padding: 0;
+  font-family: inherit;
 }
 .popoverClass .driver-popover-prev-btn {
   font-weight: 600;
   font-size: 13px;
+  padding: 0;
+  font-family: inherit;
 }
 
 .popoverClass .driver-popover-next-btn:hover,
@@ -95,6 +99,18 @@
   }
 }
 
+.popoverClass11 {
+  width: 264px;
+  height: 245px;
+  background: url("./images/practise/d11.png") no-repeat center;
+  background-size: contain;
+
+  .driver-popover-next-btn {
+    right: 24px;
+    bottom: 23px;
+  }
+}
+
 .popoverClass4 {
   width: 265px;
   height: 245px;
@@ -164,6 +180,28 @@
     right: 14px;
     bottom: 18px;
   }
+    &.popoverClose {
+  
+      .driver-popover-navigation-btns {
+        position: absolute;
+        bottom: 23px;
+        left: 0;
+        right: 15px;
+        justify-content: flex-start;
+      }
+  
+      .driver-popover-next-btn {
+        // right: 14px;
+        // bottom: 18px;
+        position: relative;
+        top: 0;
+        right: 0;
+      }
+  
+      .driver-popover-prev-btn {
+        margin-left: 14px;
+      }
+    }
 }
 
 .popoverClass7-1 {
@@ -176,6 +214,28 @@
     right: 14px;
     bottom: 18px;
   }
+    &.popoverClose {
+  
+      .driver-popover-navigation-btns {
+        position: absolute;
+        bottom: 23px;
+        left: 0;
+        right: 15px;
+        justify-content: flex-start;
+      }
+  
+      .driver-popover-next-btn {
+        // right: 14px;
+        // bottom: 18px;
+        position: relative;
+        top: 0;
+        right: 0;
+      }
+  
+      .driver-popover-prev-btn {
+        margin-left: 14px;
+      }
+    }
 }
 
 .popoverClass8 {
@@ -205,8 +265,8 @@
 }
 
 .popoverClass10 {
-  width: 264px;
-  height: 245px;
+  width: 257px;
+  height: 213px;
   background: url("./images/practise/d10.png") no-repeat center;
   background-size: contain;
 
@@ -241,7 +301,7 @@
   .driver-popover-prev-btn {
     border: 1px solid #fff;
     border-radius: 100px;
-    color: #fff;
+    color: #fff !important;
     background-color: transparent;
     font-weight: 400;
     text-shadow: none;

+ 293 - 179
src/page-instrument/custom-plugins/guide-driver/index.tsx

@@ -1,7 +1,7 @@
 import { PropType, Teleport, defineComponent, nextTick, onMounted, onUnmounted, ref } from "vue";
 import { Config, DriveStep, PopoverDOM, State, driver } from "driver.js";
 import "driver.js/dist/driver.css";
-import state from "/src/state";
+import state, { IPlatform } from "/src/state";
 import { getGuidance, setGuidance } from "../guide-page/api";
 
 const endGuide = (guideInfo: any) => {
@@ -22,6 +22,12 @@ type ButtonStatus = {
   modelTypeStatus?: Boolean;
   /** 播放模式 演唱 演奏 */
   playType?: Boolean;
+  /** 返回和标题 */
+  backTitle?: Boolean;
+  /** 返回显示的标题类型 文本 TEXT 按钮 IMG  */
+  titleType?: String;
+  /** 原声 true 范唱 false */
+  originPlayType?: Boolean;
 };
 
 /** 练习模式 */
@@ -47,22 +53,34 @@ export const PractiseDriver = defineComponent({
     };
 
     const driverOptions = (): Config => {
-      // 指法
-      let length = state.setting.displayFingering ? 10 : 9;
+      let length = 10;
+      // 显示指法
+      if (!state.setting.displayFingering) {
+        length -= 1;
+      }
+
       // 声部
       if (!props.statusAll.subjectStatus) {
         length -= 1;
       }
-      // 练习模式
-      if(!props.statusAll.modelTypeStatus) {
+      if (!props.statusAll.playType) {
         length -= 1;
       }
 
-      if(!props.statusAll.playType) {
-        length -= 1;
+      // pc端不显示标题和模式切换引导
+      if(state.platform === IPlatform.PC) {
+        length -= 2;
+      } else {
+        // 判断是否有标题
+        if (!props.statusAll.backTitle || props.statusAll.titleType === "NONE") {
+          length -= 1;
+        }
+        // 练习模式
+        if (!props.statusAll.modelTypeStatus) {
+          length -= 1;
+        }
       }
-
-      console.log(props.statusAll, 'statusAll', length)
+      console.log(props.statusAll, "statusAll", length);
 
       let options: Config = {
         showProgress: false,
@@ -94,11 +112,11 @@ export const PractiseDriver = defineComponent({
                 options.config.stagePadding = 0;
               },
             },
-          }
+          },
         ] as DriveStep[],
       };
 
-      if(props.statusAll.playType) {
+      if (props.statusAll.playType) {
         options.steps?.push({
           element: ".driver-2",
           popover: {
@@ -122,7 +140,7 @@ export const PractiseDriver = defineComponent({
           popover: {
             title: "",
             description: "",
-            popoverClass: "popoverClass popoverClass3",
+            popoverClass: props.statusAll.originPlayType ? "popoverClass popoverClass3" : "popoverClass popoverClass11",
             align: "start",
             side: "top",
             nextBtnText: `下一步 (${options.steps.length + 1}/${length})`,
@@ -164,7 +182,6 @@ export const PractiseDriver = defineComponent({
         }
       );
 
-
       if (props.statusAll.subjectStatus) {
         options.steps?.push({
           element: ".driver-10",
@@ -183,113 +200,136 @@ export const PractiseDriver = defineComponent({
         });
       }
 
-      options.steps?.push({
-        element: ".driver-6",
-        popover: {
-          title: "",
-          description: "",
-          popoverClass: "popoverClass popoverClass6",
-          align: "start",
-          side: "top",
-          nextBtnText: `下一步 (${options.steps.length + 1}/${length})`, //"下一步6/" + length,
-          showButtons: ["next"],
-          onPopoverRender: (popover: PopoverDOM, options: { config: Config; state: State }) => {
-            driverInitialPosition(popover, options);
-          },
-        },
-      });
-      // 是否有指法图
-      if (state.setting.displayFingering) {
-        // 乐器方向不一样引导位置不一样
-        options.steps?.push({
-          element: ".driver-7",
-          popover: {
-            title: "",
-            description: "",
-            popoverClass: `popoverClass ${state.fingeringInfo.direction === "transverse" ? "popoverClass7" : "popoverClass7-1"}`,
-            align: state.fingeringInfo.direction === "transverse" ? "start" : "center",
-            side: state.fingeringInfo.direction === "transverse" ? "top" : "left",
-            nextBtnText: `下一步 (${options.steps?.length + 1}/${length})`,
-            showButtons: ["next"],
-            onPopoverRender: (popover: PopoverDOM, options: { config: Config; state: State }) => {
-              if (state.fingeringInfo.direction === "transverse") driverInitialPosition(popover, options);
-            },
-            onCloseClick: () => {
-              onDriverClose();
-            },
-          },
-        });
-      }
-
-      if(!props.statusAll.modelTypeStatus) {
-        options.steps?.push({
-          //.van-notice-bar__content
-          element: ".driver-8",
-          popover: {
-            title: "",
-            description: "",
-            popoverClass: "popoverClass popoverClass8 popoverClose",
-            align: "start",
-            side: "bottom",
-            prevBtnText: "再看一遍",
-            doneBtnText: "完成",
-            showButtons: ["next", "previous"],
-            onPopoverRender: (popover: PopoverDOM, options: { config: Config; state: State }) => {
-              options.config.stageRadius = 1000;
-              options.config.stagePadding = 0;
-              try {
-                const rect = options.state.activeElement?.getBoundingClientRect();
-                popover.wrapper.style.marginLeft = (rect?.width || 0) / 2 - 4 + "px";
-              } catch {}
+     
+      if (state.platform === IPlatform.PC) {
+        if (state.setting.displayFingering) {
+          options.steps?.push({
+            element: ".driver-6",
+            popover: {
+              title: "",
+              description: "",
+              popoverClass: "popoverClass popoverClass6",
+              align: "start",
+              side: "top",
+              nextBtnText: `下一步 (${options.steps.length + 1}/${length})`, //"下一步6/" + length,
+              showButtons: ["next"],
+              onPopoverRender: (popover: PopoverDOM, options: { config: Config; state: State }) => {
+                driverInitialPosition(popover, options);
+              },
             },
-            onPrevClick: () => {
-              driverObj.drive(0);
+          });
+          // 是否有指法图
+          // 乐器方向不一样引导位置不一样
+          options.steps?.push({
+            element: ".driver-7",
+            popover: {
+              title: "",
+              description: "",
+              popoverClass: `popoverClass ${state.fingeringInfo.direction === "transverse" ? "popoverClass7 popoverClose" : "popoverClass7-1 popoverClose"}`,
+              align: state.fingeringInfo.direction === "transverse" ? "start" : "center",
+              side: state.fingeringInfo.direction === "transverse" ? "top" : "left",
+              prevBtnText: "再看一遍",
+              doneBtnText: "完成",
+              showButtons: ["next", "previous"],
+              onPopoverRender: (popover: PopoverDOM, options: { config: Config; state: State }) => {
+                if (state.fingeringInfo.direction === "transverse") driverInitialPosition(popover, options);
+              },
+              onPrevClick: () => {
+                driverObj.drive(0);
+              },
+              onNextClick: () => {
+                onDriverClose();
+              },
             },
-            onNextClick: () => {
-              onDriverClose();
+          });
+        } else {
+          options.steps?.push({
+            element: ".driver-6",
+            popover: {
+              title: "",
+              description: "",
+              popoverClass: "popoverClass popoverClass6 popoverClose",
+              align: "start",
+              side: "top",
+              prevBtnText: "再看一遍",
+              doneBtnText: "完成",
+              showButtons: ["next", "previous"],
+              onPopoverRender: (popover: PopoverDOM, options: { config: Config; state: State }) => {
+                driverInitialPosition(popover, options);
+              },
+              onPrevClick: () => {
+                driverObj.drive(0);
+              },
+              onNextClick: () => {
+                onDriverClose();
+              },
             },
-          },
-        });
+          });
+        }
       } else {
-        options.steps?.push(
-          {
-            //  .van-notice-bar__content
-            element: ".driver-8",
+         options.steps?.push({
+           element: ".driver-6",
+           popover: {
+             title: "",
+             description: "",
+             popoverClass: "popoverClass popoverClass6",
+             align: "start",
+             side: "top",
+             nextBtnText: `下一步 (${options.steps.length + 1}/${length})`, //"下一步6/" + length,
+             showButtons: ["next"],
+             onPopoverRender: (popover: PopoverDOM, options: { config: Config; state: State }) => {
+               driverInitialPosition(popover, options);
+             },
+           },
+         });
+
+        if (state.setting.displayFingering) {
+          // 是否有指法图
+          // 乐器方向不一样引导位置不一样
+          options.steps?.push({
+            element: ".driver-7",
             popover: {
               title: "",
               description: "",
-              popoverClass: "popoverClass popoverClass8",
-              align: "start",
-              side: "bottom",
-              nextBtnText: `下一步 (${options.steps.length + 1}/${length})`,
+              popoverClass: `popoverClass ${state.fingeringInfo.direction === "transverse" ? "popoverClass7" : "popoverClass7-1"}`,
+              align: state.fingeringInfo.direction === "transverse" ? "start" : "center",
+              side: state.fingeringInfo.direction === "transverse" ? "top" : "left",
+              nextBtnText: `下一步 (${options.steps?.length + 1}/${length})`,
               showButtons: ["next"],
               onPopoverRender: (popover: PopoverDOM, options: { config: Config; state: State }) => {
-                options.config.stageRadius = 1000;
-                options.config.stagePadding = 0;
-                try {
-                  const rect = options.state.activeElement?.getBoundingClientRect();
-                  popover.wrapper.style.marginLeft = (rect?.width || 0) / 2 - 4 + "px";
-                } catch {}
+                if (state.fingeringInfo.direction === "transverse") driverInitialPosition(popover, options);
+              },
+              onCloseClick: () => {
+                onDriverClose();
               },
             },
-          },
-          {
-            element: ".driver-9",
+          });
+        }
+
+        if (!props.statusAll.modelTypeStatus) {
+          options.steps?.push({
+            //
+            element: props.statusAll.titleType === "TEXT" ? ".driver-8 .van-notice-bar__content" : '".driver-8',
             popover: {
               title: "",
               description: "",
-              popoverClass: "popoverClass popoverClass9 popoverClose",
-              align: "end",
+              popoverClass: "popoverClass popoverClass8 popoverClose",
+              align: "start",
               side: "bottom",
               prevBtnText: "再看一遍",
               doneBtnText: "完成",
               showButtons: ["next", "previous"],
               onPopoverRender: (popover: PopoverDOM, options: { config: Config; state: State }) => {
-                options.config.stageRadius = 1000;
-                options.config.stagePadding = 0;
+                if (props.statusAll.titleType === "TEXT") {
+                  options.config.stageRadius = 5;
+                  options.config.stagePadding = 5;
+                } else {
+                  options.config.stageRadius = 1000;
+                  options.config.stagePadding = 0;
+                }
                 try {
                   const rect = options.state.activeElement?.getBoundingClientRect();
-                  popover.wrapper.style.marginLeft = -((rect?.width || 0) / 2 - 8) + "px";
+                  popover.wrapper.style.marginLeft = (rect?.width || 0) / 2 - 4 + "px";
                 } catch {}
               },
               onPrevClick: () => {
@@ -299,8 +339,65 @@ export const PractiseDriver = defineComponent({
                 onDriverClose();
               },
             },
-          }
-        );
+          });
+        } else {
+          options.steps?.push(
+            {
+              //  .van-notice-bar__content
+              // element: ".driver-8 .van-notice-bar__content",
+              element: props.statusAll.titleType === "TEXT" ? ".driver-8 .van-notice-bar__content" : '".driver-8',
+              popover: {
+                title: "",
+                description: "",
+                popoverClass: "popoverClass popoverClass8",
+                align: "start",
+                side: "bottom",
+                nextBtnText: `下一步 (${options.steps.length + 1}/${length})`,
+                showButtons: ["next"],
+                onPopoverRender: (popover: PopoverDOM, options: { config: Config; state: State }) => {
+                  if (props.statusAll.titleType === "TEXT") {
+                    options.config.stageRadius = 5;
+                    options.config.stagePadding = 5;
+                  } else {
+                    options.config.stageRadius = 1000;
+                    options.config.stagePadding = 0;
+                  }
+                  try {
+                    const rect = options.state.activeElement?.getBoundingClientRect();
+                    popover.wrapper.style.marginLeft = (rect?.width || 0) / 2 - 4 + "px";
+                  } catch {}
+                },
+              },
+            },
+            {
+              element: ".driver-9",
+              popover: {
+                title: "",
+                description: "",
+                popoverClass: "popoverClass popoverClass9 popoverClose",
+                align: "end",
+                side: "bottom",
+                prevBtnText: "再看一遍",
+                doneBtnText: "完成",
+                showButtons: ["next", "previous"],
+                onPopoverRender: (popover: PopoverDOM, options: { config: Config; state: State }) => {
+                  options.config.stageRadius = 1000;
+                  options.config.stagePadding = 0;
+                  try {
+                    const rect = options.state.activeElement?.getBoundingClientRect();
+                    popover.wrapper.style.marginLeft = -((rect?.width || 0) / 2 - 8) + "px";
+                  } catch {}
+                },
+                onPrevClick: () => {
+                  driverObj.drive(0);
+                },
+                onNextClick: () => {
+                  onDriverClose();
+                },
+              },
+            }
+          );
+        }
       }
 
       return options;
@@ -339,7 +436,6 @@ export const PractiseDriver = defineComponent({
           document.addEventListener("click", handleClickOutside, true);
           driverObj = driver(driverOptions());
           nextTick(() => {
-            console.log('practiseDriver clicked')
             driverObj.drive();
             showCloseBtn.value = true;
             state.hasDriverPop = true;
@@ -794,7 +890,19 @@ export const EvaluatingDriver = defineComponent({
 // 评测模式 - 结果弹窗
 export const EvaluatingResultDriver = defineComponent({
   name: "EvaluatingResultDriver",
-  setup() {
+  props: {
+    // 保存按钮状态
+    saveBtn: {
+      type: Boolean,
+      default: true,
+    },
+  },
+  setup(props) {
+    let length = 4
+    if(!props.saveBtn) {
+      length -= 1
+    }
+    console.log(props.saveBtn, "props.saveBtn");
     const driverNextStatus = ref(false);
     // 初始化部分引导位置
     const driverInitialPosition = (popover: PopoverDOM, options: { config: Config; state: State }, position = 1) => {
@@ -806,58 +914,63 @@ export const EvaluatingResultDriver = defineComponent({
       } catch {}
     };
 
-    const driverOptions: Config = {
-      showProgress: false,
-      allowClose: false,
-      popoverOffset: 3,
-      disableActiveInteraction: true,
-      onCloseClick: () => {
-        onDriverClose();
-      },
-      onHighlightStarted: () => {
-        driverNextStatus.value = true;
-      },
-      onHighlighted: () => {
-        driverNextStatus.value = false;
-      },
-      steps: [
-        {
-          element: ".evaluting-result-1",
-          popover: {
-            title: "",
-            description: "",
-            popoverClass: "popoverClass popoverClassER1",
-            align: "start",
-            side: "right",
-            nextBtnText: "下一步 (1/4)",
-            showButtons: ["next"],
-            onPopoverRender: (popover: PopoverDOM, options: { config: Config; state: State }) => {
-              options.config.stageRadius = 12;
-              options.config.stagePadding = 10;
+    const driverOptionsFun = () => {
+      const driverOptions: Config = {
+        showProgress: false,
+        allowClose: false,
+        popoverOffset: 3,
+        disableActiveInteraction: true,
+        onCloseClick: () => {
+          onDriverClose();
+        },
+        onHighlightStarted: () => {
+          driverNextStatus.value = true;
+        },
+        onHighlighted: () => {
+          driverNextStatus.value = false;
+        },
+        steps: [
+          {
+            element: ".evaluting-result-1",
+            popover: {
+              title: "",
+              description: "",
+              popoverClass: "popoverClass popoverClassER1",
+              align: "start",
+              side: "right",
+              nextBtnText: `下一步 (1/${length})`,
+              showButtons: ["next"],
+              onPopoverRender: (popover: PopoverDOM, options: { config: Config; state: State }) => {
+                options.config.stageRadius = 12;
+                options.config.stagePadding = 10;
+              },
             },
           },
-        },
-        {
-          element: ".evaluting-result-2",
-          popover: {
-            title: "",
-            description: "",
-            popoverClass: "popoverClass popoverClassER2",
-            align: "start",
-            side: "top",
-            nextBtnText: "下一步 (2/4)",
-            showButtons: ["next"],
-            onPopoverRender: (popover: PopoverDOM, options: { config: Config; state: State }) => {
-              options.config.stageRadius = 1000;
-              options.config.stagePadding = 0;
-              try {
-                const rect = options.state.activeElement?.getBoundingClientRect();
-                popover.wrapper.style.marginLeft = (rect?.width || 0) / 2 - 4 + "px";
-              } catch {}
+          {
+            element: ".evaluting-result-2",
+            popover: {
+              title: "",
+              description: "",
+              popoverClass: "popoverClass popoverClassER2",
+              align: "start",
+              side: "top",
+              nextBtnText: `下一步 (2/${length})`,
+              showButtons: ["next"],
+              onPopoverRender: (popover: PopoverDOM, options: { config: Config; state: State }) => {
+                options.config.stageRadius = 1000;
+                options.config.stagePadding = 0;
+                try {
+                  const rect = options.state.activeElement?.getBoundingClientRect();
+                  popover.wrapper.style.marginLeft = (rect?.width || 0) / 2 - 4 + "px";
+                } catch {}
+              },
             },
           },
-        },
-        {
+        ],
+      };
+
+      if (props.saveBtn) {
+        driverOptions.steps?.push({
           element: ".evaluting-result-3",
           popover: {
             title: "",
@@ -865,36 +978,38 @@ export const EvaluatingResultDriver = defineComponent({
             popoverClass: "popoverClass popoverClassER3",
             align: "end",
             side: "top",
-            nextBtnText: "下一步 (3/4)",
+            nextBtnText: `下一步 (3/${length})`,
             showButtons: ["next"],
             onPopoverRender: (popover: PopoverDOM, options: { config: Config; state: State }) => {
               driverInitialPosition(popover, options, -1);
             },
           },
-        },
-        {
-          element: ".evaluting-result-4",
-          popover: {
-            title: "",
-            description: "",
-            popoverClass: "popoverClass popoverClassER4 popoverClose",
-            align: "end",
-            side: "top",
-            prevBtnText: "再看一遍",
-            doneBtnText: "完成",
-            showButtons: ["next", "previous"],
-            onPopoverRender: (popover: PopoverDOM, options: { config: Config; state: State }) => {
-              driverInitialPosition(popover, options, -1);
-            },
-            onPrevClick: () => {
-              driverObj.drive();
-            },
-            onNextClick: () => {
-              onDriverClose();
-            },
+        });
+      }
+
+      driverOptions.steps?.push({
+        element: ".evaluting-result-4",
+        popover: {
+          title: "",
+          description: "",
+          popoverClass: "popoverClass popoverClassER4 popoverClose",
+          align: "end",
+          side: "top",
+          prevBtnText: "再看一遍",
+          doneBtnText: "完成",
+          showButtons: ["next", "previous"],
+          onPopoverRender: (popover: PopoverDOM, options: { config: Config; state: State }) => {
+            driverInitialPosition(popover, options, -1);
+          },
+          onPrevClick: () => {
+            driverObj.drive();
+          },
+          onNextClick: () => {
+            onDriverClose();
           },
         },
-      ],
+      });
+      return driverOptions;
     };
     let driverObj: any;
 
@@ -926,12 +1041,12 @@ export const EvaluatingResultDriver = defineComponent({
           setTimeout(() => {
             document.addEventListener("click", handleClickOutside, true);
             nextTick(() => {
-              driverObj = driver(driverOptions);
+              driverObj = driver(driverOptionsFun());
               driverObj.drive();
               showCloseBtn.value = true;
               state.hasDriverPop = true;
             });
-          }, 200);
+          }, 100);
         }
       } catch (e) {
         console.log(e);
@@ -940,7 +1055,7 @@ export const EvaluatingResultDriver = defineComponent({
 
     onMounted(() => {
       getAllGuidance();
-    })
+    });
 
     // 结束关闭弹窗
     const onDriverClose = () => {
@@ -953,14 +1068,13 @@ export const EvaluatingResultDriver = defineComponent({
       driverObj.destroy();
       document.querySelector(".driver-popover-close-btn-custom")?.remove();
       document.removeEventListener("click", handleClickOutside, true);
-      state.hasDriverPop = false
+      state.hasDriverPop = false;
     };
 
     onUnmounted(() => {
       document.removeEventListener("click", handleClickOutside, true);
     });
 
-
     return () => (
       <Teleport to="body">
         {showCloseBtn.value && (

+ 16 - 12
src/page-instrument/evaluat-model/evaluat-result/index.tsx

@@ -170,27 +170,31 @@ export default defineComponent({
                 <img src={zlycImg} class={[styles.ctrlsBtn, "evaluting-result-2"]} onClick={() => emit("close", "tryagain")} />
                 {evaluatingData.resultData.recordId ? (
                   <div class={styles.saveBtn}>
-                    <img src={noSaveTips.value ? bczpJzImg : bczpImg} class={[styles.ctrlsBtn, "evaluting-result-3"]} style={{ opacity: state.isHideEvaluatReportSaveBtn ? 0.4 : 1 }} onClick={() => {
-                      if (!noSaveTips.value && !state.isHideEvaluatReportSaveBtn) {
-                        saveResult()
-                      }
-                    }} />
-                    {
-                      noSaveTips.value && state.noSavePopShow ? 
+                    <img
+                      src={noSaveTips.value ? bczpJzImg : bczpImg}
+                      class={[styles.ctrlsBtn, "evaluting-result-3"]}
+                      style={{ opacity: state.isHideEvaluatReportSaveBtn ? 0.4 : 1 }}
+                      onClick={() => {
+                        if (!noSaveTips.value && !state.isHideEvaluatReportSaveBtn) {
+                          saveResult();
+                        }
+                      }}
+                    />
+                    {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                   
-                    }
+                        <i onClick={() => (state.noSavePopShow = false)}></i>
+                      </div>
+                    ) : null}
                   </div>
-                ) : null }
+                ) : null}
                 <img src={ckzpImg} class={[styles.ctrlsBtn, "evaluting-result-4", data.saveLoading ? styles.disablued : ""]} onClick={() => emit("close", "look")} />
               </div>
             </div>
 
             {/* 评测模式-结果弹窗 功能引导 加载音频完成 不是会员 */}
-            {evaluatingData.resulstMode && !evaluatingData.hideResultModal && !evaluatingData.earphoneMode && !query.isCbs && state.audioDone && !state.isVip && <EvaluatingResultDriver />}
+            {evaluatingData.resulstMode && !evaluatingData.hideResultModal && !evaluatingData.earphoneMode && !query.isCbs && state.audioDone && !state.isVip && !data.saveLoading && <EvaluatingResultDriver saveBtn={evaluatingData.resultData.recordId ? true : false} />}
           </div>
         )}
       </>

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

@@ -883,6 +883,9 @@ export default defineComponent({
               subjectStatus: state.musicRendered && !query.lessonTrainingId && !query.questionId && state.isConcert,
               modelTypeStatus: toggleBtn.value.display,
               playType: playTypeBtn.value.display,
+              originPlayType: state.playType === 'play' ? true : false,
+              backTitle: !(state.playState == "play" || followData.start || evaluatingData.startBegin),
+              titleType: smoothAnimationState.isShow.value ? "TEXT" : isMusicList.value ? 'IMG' : 'NONE'
             }}
           />
         )}

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

@@ -9,6 +9,11 @@
     z-index: 1000;
     --van-skeleton-paragraph-height: .8rem;
 }
+:global {
+    :not(body):has(>.driver-active-element) {
+        overflow: initial !important;
+    }
+}
 
 .detail {
     position: relative;
@@ -56,6 +61,7 @@
                 }
             }
         }
+        
     }
 
     .container {

+ 1 - 0
src/page-instrument/view-figner/change-subject/index.tsx

@@ -151,6 +151,7 @@ export default defineComponent({
           <div
             class={[styles.btn, styles.confirmBtn]}
             onClick={() => {
+              console.log(state.selectList, state.instrumentCode);
               if (state.selectList.length > 0 && !state.instrumentCode) {
                 showToast("请选择乐器");
                 return;

+ 2 - 0
src/view/fingering/fingering-config.ts

@@ -144,6 +144,7 @@ export const mappingVoicePart = (id: number | string, soruce: "GYM" | "COLEXIU"
       29: 15,
       30: 17,
       tenorrecorder: "piccolo",
+      germanrecorder: "piccolo",
       woodwind: "hulusi-flute",
       panpipes: "pan-flute",
       ocarina: "ocarina", // 陶笛
@@ -319,6 +320,7 @@ export const matchVoicePart = (id: number | string, type: "SINGLE" | "CONCERT"):
       5: "melodica",
       26: 12,
       tenorrecorder: "piccolo",
+      germanrecorder: "piccolo",
       woodwind: "hulusi-flute",
       panpipes: "pan-flute",
       ocarina: "ocarina",