|
@@ -2,7 +2,9 @@ import { defineComponent, onMounted, reactive, watch } from "vue";
|
|
|
import styles from "./index.module.less";
|
|
|
// import { verifyMembershipServices } from "../vip-verify";
|
|
|
import { api_lessonTrainingSubmitTraining, api_lessonTrainingTrainingStudentDetail } from "../../api";
|
|
|
-import state, { handleSetSpeed, hanldeDirectSelection, setSection } from "/src/state";
|
|
|
+import state, { handleSetSpeed, hanldeDirectSelection, setSection, togglePlay } from "/src/state";
|
|
|
+import { getSecondRPM } from "/src/utils";
|
|
|
+import { headImg } from "/src/page-instrument/header-top/image";
|
|
|
|
|
|
export default defineComponent({
|
|
|
name: "HomeWork",
|
|
@@ -15,14 +17,17 @@ export default defineComponent({
|
|
|
emits: ["change"],
|
|
|
setup(props, {expose}) {
|
|
|
const training = reactive({
|
|
|
- trainingTimes: "",
|
|
|
- trainingSpeed: 0,
|
|
|
- times: 0,
|
|
|
+ trainingTimes: "", // 已经练习的时长,单位分钟
|
|
|
+ trainingSpeed: 0, // 作业规定的速度
|
|
|
+ times: 0, // 作业规定的练习时长,单位分钟
|
|
|
+ trainingTimeSecond: 0, // 实时更新的练习时长,单位秒
|
|
|
workRecord: "",
|
|
|
isAddOk: 0,
|
|
|
starTime: 0,
|
|
|
start: "" as any,
|
|
|
end: "" as any,
|
|
|
+ timer: null as any, // 定时器
|
|
|
+ showWorkDonePop: false, // 显示需要提交作业弹窗
|
|
|
});
|
|
|
|
|
|
/** 隐藏评测功能 */
|
|
@@ -48,6 +53,7 @@ export default defineComponent({
|
|
|
}
|
|
|
training.times = trainingContent.trainingTimes || 0;
|
|
|
training.trainingTimes = (workeData.trainingTimes / 60).toFixed(1) || "0";
|
|
|
+ training.trainingTimeSecond = workeData.trainingTimes || 0;
|
|
|
training.trainingSpeed = trainingContent.practiceSpeed;
|
|
|
training.start = Number(trainingContent.practiceChapterBegin);
|
|
|
training.end = Number(trainingContent.practiceChapterEnd);
|
|
@@ -64,6 +70,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";
|
|
|
+ training.trainingTimeSecond = res.data.trainingTimes || 0;
|
|
|
state.isWorkDone = Number(training.trainingTimes) >= Number(training.times);
|
|
|
}
|
|
|
};
|
|
@@ -82,13 +89,31 @@ export default defineComponent({
|
|
|
} catch (error) {}
|
|
|
};
|
|
|
|
|
|
+ const handleStart = () => {
|
|
|
+ training.timer = setInterval(() => {
|
|
|
+ training.trainingTimeSecond += 1;
|
|
|
+ // 如果播放中,作业从未达标到达标状态,需要暂停播放,并且弹窗提示作业已达标
|
|
|
+ if (!state.isWorkDone && training.trainingTimeSecond >= training.times * 60) {
|
|
|
+ togglePlay("paused")
|
|
|
+ state.isWorkDone = true
|
|
|
+ training.showWorkDonePop = true
|
|
|
+ }
|
|
|
+ console.log('练习时长',training.trainingTimeSecond)
|
|
|
+ }, 1000);
|
|
|
+ };
|
|
|
+ const handleStop = () => {
|
|
|
+ clearInterval(training.timer)
|
|
|
+ }
|
|
|
+
|
|
|
watch(
|
|
|
() => state.playState,
|
|
|
() => {
|
|
|
if (state.playState === "play") {
|
|
|
training.starTime = Date.now();
|
|
|
+ handleStart();
|
|
|
} else {
|
|
|
addHomeworkRecored();
|
|
|
+ handleStop();
|
|
|
}
|
|
|
}
|
|
|
);
|
|
@@ -108,9 +133,22 @@ export default defineComponent({
|
|
|
getWorkData
|
|
|
})
|
|
|
return () => (
|
|
|
- <div class={styles.homework}>
|
|
|
- {training.trainingTimes} / {training.times} 分钟
|
|
|
- </div>
|
|
|
+ <>
|
|
|
+ <div class={styles.homework}>
|
|
|
+ <i class={state.playState === "play" ? styles.blinkDot : styles.grayDot}></i>
|
|
|
+ <span>{getSecondRPM(training.trainingTimeSecond)} / {getSecondRPM(training.times*60)}</span>
|
|
|
+ </div>
|
|
|
+ {
|
|
|
+ training.showWorkDonePop &&
|
|
|
+ <div class={styles.workDonePop}>
|
|
|
+ <img class={styles.doneBg} src={headImg("workDonePop.png")} />
|
|
|
+ <img class={styles.doneBtn} src={headImg("workDoneBtn.png")} onClick={() => {
|
|
|
+ training.showWorkDonePop = false
|
|
|
+ addHomeworkRecored();
|
|
|
+ }} />
|
|
|
+ </div>
|
|
|
+ }
|
|
|
+ </>
|
|
|
);
|
|
|
},
|
|
|
});
|