Browse Source

作业逻辑修改

TIANYONG 5 months ago
parent
commit
2c246407b9

+ 1 - 1
osmd-extended

@@ -1 +1 @@
-Subproject commit dd68ffab2f3f6e194b3886981036f05dcd1de4ca
+Subproject commit 0eb177f216cead288330588bc281a2d60aa0bcfc

+ 6 - 0
src/page-instrument/custom-plugins/work-ealuating/index.tsx

@@ -22,6 +22,7 @@ export default defineComponent({
 			start: "" as any,
 			end: "" as any,
 			evaluateSpeed: 0,
+			score: 0, // 评测作业及格分数
 		});
 		/** 隐藏评测功能 */
 		const handleHide = () => {
@@ -49,6 +50,7 @@ export default defineComponent({
 				evaluatingWorkData.evaluateSpeed = trainingContent.evaluateSpeed;
 				evaluatingWorkData.start = Number(trainingContent.practiceChapterBegin);
 				evaluatingWorkData.end = Number(trainingContent.practiceChapterEnd);
+				evaluatingWorkData.score = Number(trainingContent.trainingTimes);
 				state.userChooseEndIndex = evaluatingWorkData.end
 				// 设置小节
 				setSection(evaluatingWorkData.start, evaluatingWorkData.end, evaluatingWorkData.evaluateSpeed);
@@ -72,6 +74,10 @@ export default defineComponent({
 				// 评测作业,完整评测才调用保存作业接口
 				if (evaluatingData.resulstMode && evaluatingData.resultData.recordId && evaluatingData.isComplete) {
 					addEvaluatingWorkRecored(evaluatingData.resultData);
+					// 完整评测,判断当前的评测分数是否已达标,没有达标,点击返回按钮需要给出弹窗提示
+					if (!state.isWorkDone) {
+						state.isWorkDone = Number(evaluatingData.resultData?.score) >= evaluatingWorkData.score;
+					}
 				}
 			}
 		);

+ 2 - 0
src/page-instrument/custom-plugins/work-home/index.tsx

@@ -52,6 +52,7 @@ export default defineComponent({
 				training.start = Number(trainingContent.practiceChapterBegin);
 				training.end = Number(trainingContent.practiceChapterEnd);
 				state.userChooseEndIndex = training.end
+				state.isWorkDone = Number(training.trainingTimes) >= Number(training.times);
 				if (training.isAddOk === 0) {
 					// 设置小节
 					setSection(training.start, training.end, training.trainingSpeed);
@@ -63,6 +64,7 @@ export default defineComponent({
 			const res = await api_lessonTrainingTrainingStudentDetail(props.workeData.id);
 			if (res?.code === 200) {
 				training.trainingTimes = (res.data.trainingTimes / 60).toFixed(1) || "0";
+				state.isWorkDone = Number(training.trainingTimes) >= Number(training.times);
 			}
 		};
 

BIN
src/page-instrument/header-top/image/workHome_icon1.png


BIN
src/page-instrument/header-top/image/workHome_icon2.png


BIN
src/page-instrument/header-top/image/workHome_icon3.png


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

@@ -33,6 +33,7 @@ import { smoothAnimationState } from "../view-detail/smoothAnimation";
 import { isMusicList, musicListShow } from "../component/the-music-list";
 import { EvaluatingDriver, FollowDriver, PractiseDriver } from "../custom-plugins/guide-driver";
 import { fingerRef } from "/src/page-instrument/view-detail/index"
+import WorkHomePop from "./workHomePop";
 
 const ModeView = defineAsyncComponent(() =>
   import('./modeView')
@@ -103,6 +104,8 @@ export const headTopData = reactive({
   oldPlayType: "play",
   // 记录切换模式前的状态
   oldModeType: "practise" as "practise" | "follow" | "evaluating",
+  // 作业未完成弹窗
+  workHomeNoDone: false,
 });
 
 export const headData = reactive({
@@ -505,6 +508,19 @@ export default defineComponent({
     });
 
     const browInfo = browser();
+
+    // 返回校验, 如果是作业模式,并且作业没有达标需要给出弹窗提示
+    const checkBack = () => {
+      if (query.workRecord) {
+        console.log('作业是否达标',state.isWorkDone)
+      }
+      if (query.workRecord && !state.isWorkDone) {
+        headTopData.workHomeNoDone = true
+      } else {
+        handleBack()
+      }
+    }
+
     /** 返回 */
     const handleBack = () => {
       HANDLE_WORK_ADD();
@@ -527,6 +543,15 @@ export default defineComponent({
       }
       api_back();
     };
+    
+		const handleResult = (type: any) => {
+			if (type) {
+        headTopData.workHomeNoDone = false
+      } else {
+        headTopData.workHomeNoDone = false
+        handleBack()
+      }
+		}
 
     /** 根据参数设置模式 */
     const getQueryModelSetModelType = () => {
@@ -697,7 +722,7 @@ export default defineComponent({
           {!(state.playState == "play" || followData.start || evaluatingData.startBegin) && (
             <div id="noticeBarRollDom" class={styles.headTopLeftBox}>
               {
-                !query.isMove && !state.isAttendClass && <img src={iconBack} class={["headTopBackBtn", styles.img, !headTopData.showBack && styles.hidenBack]} onClick={handleBack} />
+                !query.isMove && !state.isAttendClass && <img src={iconBack} class={["headTopBackBtn", styles.img, !headTopData.showBack && styles.hidenBack]} onClick={checkBack} />
               }
               {smoothAnimationState.isShow.value || state.isCombineRender ? (
                 <div
@@ -1037,6 +1062,11 @@ export default defineComponent({
             }}
           />
         )}
+
+        {/** 评测作业,没有完成时,提示弹窗 */}
+        <Popup v-model:show={headTopData.workHomeNoDone} class="popup-custom van-scale center-closeBtn" transition="van-scale" teleport="body" style={positionInfo.styleDrag.value} overlay-style={{ background: "rgba(0, 0, 0, 0.3)" }}>
+          <WorkHomePop onClose={handleResult} />
+        </Popup>
       </>
     );
   },

+ 43 - 0
src/page-instrument/header-top/workHomePop/index.module.less

@@ -0,0 +1,43 @@
+.popBox {
+    position: relative;
+    width: 305px;
+    background: rgba(255,255,255,0.31);
+    border-radius: 12px;
+    border: 1px solid rgba(255,252,252,0.53);
+    .boxTitle {
+        position: absolute;
+        left: 50%;
+        top: -6px;
+        transform: translateX(-50%);
+        width: 151px;
+        height: 32px; 
+    }
+    .boxContent {
+        margin: 9px;
+        background: linear-gradient( 224deg, #ECF5FF 0%, #D5E8FF 100%);
+        border-radius: 12px;
+        display: inline-block;
+        >p {
+            margin: 36px 20px 12px;
+            color: #334A64;
+            font-size: 15px;
+            line-height: 26px;
+            font-weight: 400;
+            text-align: center;
+        }
+        .boxBtn {
+            margin-bottom: 20px;
+            display: flex;
+            align-items: center;
+            justify-content: center;
+            >img {
+                width: 116px;
+                height: 35px;
+                cursor: pointer;
+                &:first-child {
+                    margin-right: 12px;
+                }
+            }
+        }
+    }
+}

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

@@ -0,0 +1,29 @@
+import { defineComponent } from "vue";
+import styles from "./index.module.less";
+import { headImg } from "../image";
+import { data as workData } from "/src/page-instrument/custom-plugins/work-index";
+
+export default defineComponent({
+	name: "workHomePop",
+	props: {
+		tip: {
+			type: String,
+			default: () => ''
+		}
+	},
+	emits: ["close"],
+	setup(props, { emit }) {
+		return () => (
+			<div class={styles.popBox}>
+				<img class={styles.boxTitle} src={headImg("workHome_icon1.png")} />
+				<div class={styles.boxContent}>
+					<p>本条{workData.trainingType === "PRACTICE" ? '练习' : '评测'}作业还没达到老师的练习要求,是否继续练习?</p>
+					<div class={styles.boxBtn}>
+						<img class={styles.boxClose} src={headImg("workHome_icon3.png")} onClick={() => emit("close")} />
+						<img class={styles.boxConfirm} src={headImg("workHome_icon2.png")} onClick={() => emit("close", true)} />
+					</div>
+				</div>
+			</div>
+		);
+	},
+});

+ 2 - 0
src/state.ts

@@ -579,6 +579,8 @@ const state = reactive({
   evxmlAddPartName: false, // 妙极客的部分曲子没有part-name,需要自行添加的part-name
   /** 乐器id */
   instrumentId: null,
+  /** 作业是否达标 */
+  isWorkDone: false,
 });
 const browserInfo = browser();
 let offset_duration = 0;