liushengqiang hace 2 años
padre
commit
40ad99e1ff

+ 11 - 6
src/page-instrument/App.tsx

@@ -7,7 +7,7 @@ import { getRandomKey, getToken, setBehaviorId, setToken } from "../utils";
 import { getQuery } from "../utils/queryString";
 import { getQuery } from "../utils/queryString";
 import Notfind from "../view/notfind";
 import Notfind from "../view/notfind";
 import { studentQueryUserInfo } from "./api";
 import { studentQueryUserInfo } from "./api";
-import { api_getToken } from "../helpers/communication";
+import { api_cloudLoading, api_getToken } from "../helpers/communication";
 
 
 export default defineComponent({
 export default defineComponent({
 	name: "App",
 	name: "App",
@@ -23,10 +23,15 @@ export default defineComponent({
 			return await studentQueryUserInfo();
 			return await studentQueryUserInfo();
 		};
 		};
 		const setUser = async () => {
 		const setUser = async () => {
-			const res = await getUserInfo();
-			const student = res?.data || {};
-			setUserInfo(student);
-			// console.log("🚀 ~ res:", student);
+			try {
+				const res = await getUserInfo();
+				const student = res?.data || {};
+				setUserInfo(student);
+			} catch (error) {
+				storeData.status = 'error';
+				api_cloudLoading();
+				console.log("🚀 ~ error:", error);
+			}
 		};
 		};
 		onBeforeMount(async () => {
 		onBeforeMount(async () => {
 			if (query.Authorization) {
 			if (query.Authorization) {
@@ -34,7 +39,7 @@ export default defineComponent({
 			}
 			}
 			if (!getToken()) {
 			if (!getToken()) {
 				const res = await api_getToken();
 				const res = await api_getToken();
-				if (res) {
+				if (res?.content) {
 					const content = res.content;
 					const content = res.content;
 					const token = content.tokenType + " " + content.accessToken;
 					const token = content.tokenType + " " + content.accessToken;
 					setToken(token);
 					setToken(token);

+ 6 - 2
src/page-instrument/api.ts

@@ -14,9 +14,13 @@ export const sysMusicScoreAccompanimentQueryPage = (sysMusicScoreId: string) =>
 export const sysMusicRecordAdd = (data: any) => {
 export const sysMusicRecordAdd = (data: any) => {
 	return request.post("/sysMusicRecord/add", { data });
 	return request.post("/sysMusicRecord/add", { data });
 };
 };
-/** 记录作业时间 */
+/** 添加作业记录 */
 export const api_lessonTrainingSubmitTraining = (data: any) => {
 export const api_lessonTrainingSubmitTraining = (data: any) => {
-	return request.post("/lessonTraining/submitTraining", { data });
+	return request.post("/lessonTraining/submitTraining", { requestType: "json", data });
+};
+/** 获取作业详情 */
+export const api_lessonTrainingTrainingStudentDetail = (id: any) => {
+	return request.get(`/lessonTraining/trainingContentStudentDetail?id=${id}`);
 };
 };
 
 
 /** 提交意见反馈 */
 /** 提交意见反馈 */

+ 11 - 19
src/page-instrument/custom-plugins/recording-time/index.tsx

@@ -14,26 +14,18 @@ const handleRecord = () => {
 	let total = Date.now() - recordData.starTime;
 	let total = Date.now() - recordData.starTime;
 	recordData.starTime = Date.now();
 	recordData.starTime = Date.now();
 	if (total < 0) total = 0;
 	if (total < 0) total = 0;
+	const totalTime = total / 1000;
 
 
-	// sysMusicRecordAdd(body);
-	// 课后训练
-	if (query.lessonTrainingId) {
-		api_lessonTrainingSubmitTraining({
-			id: query.lessonTrainingId,
-			trainingTimes: total,
-		});
-	} else {
-		const body = {
-			musicSheetId: state.examSongId,
-			sysMusicScoreId: state.examSongId,
-			feature: "PRACTICE",
-			practiceSource: "PRACTICE",
-			playTime: total,
-			deviceType: browser().android ? "ANDROID" : "IOS",
-			behaviorId: getBehaviorId(),
-		};
-		// musicPracticeRecordSave(body);
-	}
+	const body = {
+		musicSheetId: state.examSongId,
+		sysMusicScoreId: state.examSongId,
+		feature: "PRACTICE",
+		practiceSource: "PRACTICE",
+		playTime: totalTime,
+		deviceType: browser().android ? "ANDROID" : "IOS",
+		behaviorId: getBehaviorId(),
+	};
+	// musicPracticeRecordSave(body);
 };
 };
 
 
 export const handleNoEndExit = () => {
 export const handleNoEndExit = () => {

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

@@ -0,0 +1,72 @@
+import { defineComponent, onMounted, reactive, watch } from "vue";
+import { useRoute } from "vue-router";
+// import { verifyMembershipServices } from "../vip-verify";
+import { api_lessonTrainingSubmitTraining } from "../../api";
+import { IDifficulty } from "/src/state";
+import { getQuery } from "/src/utils/queryString";
+import { evaluatingData } from "/src/view/evaluating";
+
+export default defineComponent({
+	name: "EvaluatingWork",
+	props: {
+		workeData: {
+			type: Object,
+			default: () => ({}),
+		},
+	},
+	setup(props) {
+		const query = getQuery();
+		const evaluatingWorkData = reactive({
+			difficulty: "" as IDifficulty,
+			evaluatingRecord: props.workeData?.id,
+		});
+		/** 隐藏评测功能 */
+		const handleHide = () => {
+			const ids = ["tips-step-1"];
+			for (let i = 0; i < ids.length; i++) {
+				const speedBtn = document.getElementById(ids[i]);
+				if (speedBtn) {
+					speedBtn.style.pointerEvents = "none";
+					speedBtn.style.opacity = ".5";
+				}
+			}
+		};
+		/** 获取作业详情 */
+		const getWorkData = async () => {
+			let trainingContent: any = {};
+			try {
+				trainingContent = JSON.parse(props.workeData.trainingContent);
+			} catch (error) {
+				console.log("🚀 ~ error:", error);
+			}
+			if (["BEGINNER", "ADVANCED", "PERFORMER"].includes(trainingContent.evaluateDifficult)) {
+				evaluatingWorkData.difficulty = trainingContent.evaluateDifficult;
+			}
+		};
+		/** 添加记录 */
+		const addEvaluatingWorkRecored = async (data: any) => {
+			try {
+				const res = await api_lessonTrainingSubmitTraining({
+					id: evaluatingWorkData.evaluatingRecord,
+					trainingTimes: data?.score || 0,
+				});
+			} catch (error) {
+				console.log(error);
+			}
+		};
+		watch(
+			() => evaluatingData.resulstMode,
+			() => {
+				if (evaluatingData.resulstMode && evaluatingData.isComplete) {
+					addEvaluatingWorkRecored(evaluatingData.resultData);
+				}
+			}
+		);
+		onMounted(() => {
+			handleHide();
+			getWorkData();
+			// verifyMembershipServices();
+		});
+		return () => <div></div>;
+	},
+});

+ 12 - 0
src/page-instrument/custom-plugins/work-home/index.module.less

@@ -0,0 +1,12 @@
+.homework{
+    position: fixed;
+    left: 10px;
+    top: 70px;
+    background-color: rgba(0, 0, 0, .6);
+    border-radius: 20px;
+    font-size: 14px;
+    color: #fff;
+    padding: 5px 8px;
+    line-height: 1;
+    font-weight: 300;
+}

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

@@ -0,0 +1,97 @@
+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 } from "/src/state";
+
+export default defineComponent({
+	name: "HomeWork",
+	props: {
+		workeData: {
+			type: Object,
+			default: () => ({}),
+		},
+	},
+	emits: ["change"],
+	setup(props) {
+		const training = reactive({
+			trainingTimes: "",
+			trainingSpeed: 0,
+			times: 0,
+			workRecord: "",
+			isAddOk: 0,
+			starTime: 0,
+		});
+
+		/** 隐藏评测功能 */
+		const handleHide = () => {
+			const ids = ["tips-step-1", "tips-step-5"];
+			for (let i = 0; i < ids.length; i++) {
+				const speedBtn = document.getElementById(ids[i]);
+				if (speedBtn) {
+					speedBtn.style.pointerEvents = "none";
+					speedBtn.style.opacity = ".5";
+				}
+			}
+		};
+		/** 获取作业详情 */
+		const getWorkData = async () => {
+			const workeData = props.workeData;
+			if (workeData.id) {
+				let trainingContent: any = {};
+				try {
+					trainingContent = JSON.parse(workeData.trainingContent);
+				} catch (error) {
+					console.log("🚀 ~ error:", error);
+				}
+				training.times = trainingContent.trainingTimes || 0;
+				training.trainingTimes = (workeData.trainingTimes / 60).toFixed(2) || "0";
+				training.trainingSpeed = trainingContent.practiceSpeed;
+				if (training.trainingSpeed && training.isAddOk === 0) {
+					handleSetSpeed(training.trainingSpeed);
+				}
+			}
+		};
+		const getWorkDetail = async () => {
+			const res = await api_lessonTrainingTrainingStudentDetail(props.workeData.id);
+			if (res?.code === 200) {
+				training.trainingTimes = (res.data.trainingTimes / 60).toFixed(2) || "0";
+			}
+		};
+
+		/** 添加作业记录 */
+		const addHomeworkRecored = async () => {
+			let total = (Date.now() - training.starTime) / 1000;
+			try {
+				const res = await api_lessonTrainingSubmitTraining({
+					id: props.workeData.id,
+					trainingTimes: total,
+				});
+				if (res?.code == 200) {
+					getWorkDetail();
+				}
+			} catch (error) {}
+		};
+
+		watch(
+			() => state.playState,
+			() => {
+				if (state.playState === "play") {
+					training.starTime = Date.now();
+				} else {
+					addHomeworkRecored();
+				}
+			}
+		);
+		onMounted(() => {
+			handleHide();
+			getWorkData();
+			// verifyMembershipServices();
+		});
+		return () => (
+			<div class={styles.homework}>
+				{training.trainingTimes} / {training.times} 分钟
+			</div>
+		);
+	},
+});

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

@@ -0,0 +1,42 @@
+import { defineComponent, onMounted, reactive } from "vue";
+import WorkHome from "../work-home";
+import WorkEaluating from "../work-ealuating";
+import { getQuery } from "/src/utils/queryString";
+import { api_lessonTrainingTrainingStudentDetail } from "../../api";
+import { headTopData } from "../../header-top";
+
+export default defineComponent({
+	name: "workIndex",
+	setup() {
+		const query = getQuery();
+		const data = reactive({
+			/** 作业类型:练习PRACTICE, 评测EVALUATION */
+			trainingType: "" as "PRACTICE" | "EVALUATION",
+			worke: {},
+		});
+		const setModelType = () => {
+			if (!data.trainingType) return;
+			const type = data.trainingType === "PRACTICE" ? "practise" : "evaluating";
+			headTopData.handleChangeModeType(type);
+		};
+		const getWorkDetail = async () => {
+			const res = await api_lessonTrainingTrainingStudentDetail(query.workRecord);
+			if (res?.code === 200) {
+				data.trainingType = res.data.trainingType;
+				data.worke = res.data;
+				setModelType();
+			}
+		};
+		onMounted(() => {
+			getWorkDetail();
+		});
+		return () => (
+			<>
+				{/* 课后训练作业 */}
+				{data.trainingType === "PRACTICE" && <WorkHome workeData={data.worke} />}
+				{/* 评测作业 */}
+				{data.trainingType === "EVALUATION" && <WorkEaluating workeData={data.worke} />}
+			</>
+		);
+	},
+});

+ 3 - 1
src/page-instrument/evaluat-model/evaluat-result/index.tsx

@@ -12,11 +12,13 @@ import icon_expression1 from './img/icon_expression1.svg'
 import icon_expression2 from './img/icon_expression2.svg'
 import icon_expression2 from './img/icon_expression2.svg'
 import icon_expression3 from './img/icon_expression3.svg'
 import icon_expression3 from './img/icon_expression3.svg'
 import icon_expression4 from './img/icon_expression4.svg'
 import icon_expression4 from './img/icon_expression4.svg'
+import { getQuery } from "/src/utils/queryString";
 
 
 export default defineComponent({
 export default defineComponent({
 	name: "evaluatResult",
 	name: "evaluatResult",
 	emits: ["close"],
 	emits: ["close"],
 	setup(props, { emit }) {
 	setup(props, { emit }) {
+		const query = getQuery();
 		return () => (
 		return () => (
 			<div class={styles.evaluatResult}>
 			<div class={styles.evaluatResult}>
 				<div class={styles.closeBtn} onClick={() => emit("close")}>
 				<div class={styles.closeBtn} onClick={() => emit("close")}>
@@ -75,7 +77,7 @@ export default defineComponent({
 
 
 					<div class={styles.tips}>{evaluatingData.resultData.clxtip}</div>
 					<div class={styles.tips}>{evaluatingData.resultData.clxtip}</div>
 					<div class={styles.ctrls}>
 					<div class={styles.ctrls}>
-						<img src={imgs.btn1} class={styles.ctrlsBtn} onClick={() => emit("close", "practise")} />
+						<img style={{display: query.workRecord ? 'none' : ''}} src={imgs.btn1} class={styles.ctrlsBtn} onClick={() => emit("close", "practise")} />
 						<img src={imgs.btn2} class={styles.ctrlsBtn} onClick={() => emit("close", "tryagain")} />
 						<img src={imgs.btn2} class={styles.ctrlsBtn} onClick={() => emit("close", "tryagain")} />
 						<img src={imgs.btn3} class={styles.ctrlsBtn} onClick={() => emit("close", "look")} />
 						<img src={imgs.btn3} class={styles.ctrlsBtn} onClick={() => emit("close", "look")} />
 					</div>
 					</div>

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

@@ -79,7 +79,7 @@
 }
 }
 .disabled {
 .disabled {
     pointer-events: none;
     pointer-events: none;
-    opacity: .6;
+    opacity: .5;
 }
 }
 
 
 .badge {
 .badge {

+ 44 - 20
src/page-instrument/header-top/index.tsx

@@ -8,7 +8,13 @@ import { Badge, Circle, Popover, Popup, showConfirmDialog } from "vant";
 import Speed from "./speed";
 import Speed from "./speed";
 import { evaluatingData, handleStartEvaluat } from "/src/view/evaluating";
 import { evaluatingData, handleStartEvaluat } from "/src/view/evaluating";
 import Settting from "./settting";
 import Settting from "./settting";
-import state, { IPlatform, handleChangeSection, handleResetPlay, handleRessetState, togglePlay } from "/src/state";
+import state, {
+	IPlatform,
+	handleChangeSection,
+	handleResetPlay,
+	handleRessetState,
+	togglePlay,
+} from "/src/state";
 import { getAudioCurrentTime } from "/src/view/audio-list";
 import { getAudioCurrentTime } from "/src/view/audio-list";
 import { followData, toggleFollow } from "/src/view/follow-practice";
 import { followData, toggleFollow } from "/src/view/follow-practice";
 import { api_back } from "/src/helpers/communication";
 import { api_back } from "/src/helpers/communication";
@@ -29,13 +35,13 @@ export const headTopData = reactive({
 	handleChangeModeType(value: "practise" | "follow" | "evaluating") {
 	handleChangeModeType(value: "practise" | "follow" | "evaluating") {
 		if (value === "evaluating") {
 		if (value === "evaluating") {
 			// 如果是pc端, 评测模式暂不可用
 			// 如果是pc端, 评测模式暂不可用
-			if (state.platform === IPlatform.PC){
+			if (state.platform === IPlatform.PC) {
 				showConfirmDialog({
 				showConfirmDialog({
-					title: '温馨提示',
-					message: '该功能暂未开发,敬请期待',
+					title: "温馨提示",
+					message: "该功能暂未开发,敬请期待",
 					showCancelButton: false,
 					showCancelButton: false,
-				})
-				return
+				});
+				return;
 			}
 			}
 			handleStartEvaluat();
 			handleStartEvaluat();
 		} else if (value === "follow") {
 		} else if (value === "follow") {
@@ -204,9 +210,9 @@ export default defineComponent({
 		/** 返回 */
 		/** 返回 */
 		const handleBack = () => {
 		const handleBack = () => {
 			// 不在APP中,
 			// 不在APP中,
-			if (!storeData.isApp){
-				window.close()
-				return
+			if (!storeData.isApp) {
+				window.close();
+				return;
 			}
 			}
 			api_back();
 			api_back();
 		};
 		};
@@ -214,6 +220,12 @@ export default defineComponent({
 		/** 根据参数设置模式 */
 		/** 根据参数设置模式 */
 		const getQueryModelSetModelType = () => {
 		const getQueryModelSetModelType = () => {
 			const query: any = getQuery();
 			const query: any = getQuery();
+			/** 作业模式 start, 如果为作业模式不处理,让作业模块处理 */
+			if (query.workRecord) {
+				return;
+			}
+			console.error("🚀 ~ query.workRecord:", query.workRecord)
+			/** 作业模式 end */
 			if (query.modelType) {
 			if (query.modelType) {
 				if (query.modelType === "practise") {
 				if (query.modelType === "practise") {
 					headTopData.handleChangeModeType("practise");
 					headTopData.handleChangeModeType("practise");
@@ -248,16 +260,15 @@ export default defineComponent({
 			<>
 			<>
 				<div class={[styles.headerTop]}>
 				<div class={[styles.headerTop]}>
 					{headTopData.showBack && (
 					{headTopData.showBack && (
-						<div class={[styles.back, 'headTopBackBtn']} onClick={handleBack}>
+						<div class={[styles.back, "headTopBackBtn"]} onClick={handleBack}>
 							<img src={iconBack} />
 							<img src={iconBack} />
 						</div>
 						</div>
 					)}
 					)}
 					<Title text={state.examSongName} rightView={false} />
 					<Title text={state.examSongName} rightView={false} />
 
 
-					<div
-						class={styles.headRight}
-					>
+					<div class={styles.headRight}>
 						<div
 						<div
+							id="tips-step-1"
 							style={{ display: toggleBtn.value.display ? "" : "none" }}
 							style={{ display: toggleBtn.value.display ? "" : "none" }}
 							class={[styles.btn, toggleBtn.value.disabled && styles.disabled]}
 							class={[styles.btn, toggleBtn.value.disabled && styles.disabled]}
 							onClick={() => {
 							onClick={() => {
@@ -270,9 +281,9 @@ export default defineComponent({
 						</div>
 						</div>
 
 
 						<div
 						<div
+							id="tips-step-2"
 							style={{ display: originBtn.value.display ? "" : "none" }}
 							style={{ display: originBtn.value.display ? "" : "none" }}
 							class={[styles.btn, originBtn.value.disabled && styles.disabled]}
 							class={[styles.btn, originBtn.value.disabled && styles.disabled]}
-							id="tips-step-6"
 							onClick={() => {
 							onClick={() => {
 								state.playSource = state.playSource === "music" ? "background" : "music";
 								state.playSource = state.playSource === "music" ? "background" : "music";
 							}}
 							}}
@@ -290,9 +301,9 @@ export default defineComponent({
 							<span>{state.playSource === "music" ? "原声" : "伴奏"}</span>
 							<span>{state.playSource === "music" ? "原声" : "伴奏"}</span>
 						</div>
 						</div>
 						<div
 						<div
+							id="tips-step-3"
 							style={{ display: selectBtn.value.display ? "" : "none" }}
 							style={{ display: selectBtn.value.display ? "" : "none" }}
 							class={[styles.btn, selectBtn.value.disabled && styles.disabled]}
 							class={[styles.btn, selectBtn.value.disabled && styles.disabled]}
-							id="tips-step-4"
 							onClick={() => handleChangeSection()}
 							onClick={() => handleChangeSection()}
 						>
 						>
 							<img
 							<img
@@ -313,6 +324,7 @@ export default defineComponent({
 							<span>选段</span>
 							<span>选段</span>
 						</div>
 						</div>
 						<div
 						<div
+							id="tips-step-4"
 							style={{ display: fingeringBtn.value.display ? "" : "none" }}
 							style={{ display: fingeringBtn.value.display ? "" : "none" }}
 							class={[styles.btn, fingeringBtn.value.disabled && styles.disabled]}
 							class={[styles.btn, fingeringBtn.value.disabled && styles.disabled]}
 							onClick={() => {
 							onClick={() => {
@@ -341,7 +353,7 @@ export default defineComponent({
 							{{
 							{{
 								reference: () => (
 								reference: () => (
 									<div
 									<div
-										id="tips-step-8"
+										id="tips-step-5"
 										style={{ display: speedBtn.value.display ? "" : "none" }}
 										style={{ display: speedBtn.value.display ? "" : "none" }}
 										class={[styles.btn, speedBtn.value.disabled && styles.disabled]}
 										class={[styles.btn, speedBtn.value.disabled && styles.disabled]}
 										onClick={(e: Event) => {
 										onClick={(e: Event) => {
@@ -367,6 +379,7 @@ export default defineComponent({
 							{{
 							{{
 								reference: () => (
 								reference: () => (
 									<div
 									<div
+										id="tips-step-6"
 										style={{ display: converBtn.value.display ? "" : "none" }}
 										style={{ display: converBtn.value.display ? "" : "none" }}
 										class={[styles.btn, converBtn.value.disabled && styles.disabled]}
 										class={[styles.btn, converBtn.value.disabled && styles.disabled]}
 										onClick={(e: Event) => {
 										onClick={(e: Event) => {
@@ -383,6 +396,7 @@ export default defineComponent({
 						</Popover>
 						</Popover>
 
 
 						<div
 						<div
+							id="tips-step-7"
 							style={{ display: settingBtn.value.display ? "" : "none" }}
 							style={{ display: settingBtn.value.display ? "" : "none" }}
 							class={[styles.btn, settingBtn.value.disabled && styles.disabled]}
 							class={[styles.btn, settingBtn.value.disabled && styles.disabled]}
 							onClick={() => (headTopData.settingMode = true)}
 							onClick={() => (headTopData.settingMode = true)}
@@ -395,9 +409,14 @@ export default defineComponent({
 
 
 				{/* 播放按钮 */}
 				{/* 播放按钮 */}
 				<div
 				<div
+					id="tips-step-8"
 					style={{ display: playBtn.value.display ? "" : "none" }}
 					style={{ display: playBtn.value.display ? "" : "none" }}
-					class={[styles.btn, styles.playBtn, playBtn.value.disabled && styles.disabled, state.platform === IPlatform.PC && styles.playButton]}
-					id="tips-step-5"
+					class={[
+						styles.btn,
+						styles.playBtn,
+						playBtn.value.disabled && styles.disabled,
+						state.platform === IPlatform.PC && styles.playButton,
+					]}
 					onClick={() => togglePlay()}
 					onClick={() => togglePlay()}
 				>
 				>
 					<div class={styles.btnWrap}>
 					<div class={styles.btnWrap}>
@@ -424,9 +443,14 @@ export default defineComponent({
 
 
 				{/* 重播按钮 */}
 				{/* 重播按钮 */}
 				<div
 				<div
+					id="tips-step-9"
 					style={{ display: resetBtn.value.display ? "" : "none" }}
 					style={{ display: resetBtn.value.display ? "" : "none" }}
-					class={[styles.btn, styles.resetBtn, resetBtn.value.disabled && styles.disabled, state.platform === IPlatform.PC && styles.pauseButton]}
-					id="tips-step-7"
+					class={[
+						styles.btn,
+						styles.resetBtn,
+						resetBtn.value.disabled && styles.disabled,
+						state.platform === IPlatform.PC && styles.pauseButton,
+					]}
 					onClick={() => handleResetPlay()}
 					onClick={() => handleResetPlay()}
 				>
 				>
 					<img class={styles.iconBtn} src={headImg("icon_resetbtn.svg")} />
 					<img class={styles.iconBtn} src={headImg("icon_resetbtn.svg")} />

+ 3 - 0
src/page-instrument/view-detail/index.tsx

@@ -44,6 +44,7 @@ import Tick, { handleInitTick } from "/src/view/tick";
 import FollowPractice from "/src/view/follow-practice";
 import FollowPractice from "/src/view/follow-practice";
 import FollowModel from "../follow-model";
 import FollowModel from "../follow-model";
 import RecordingTime from "../custom-plugins/recording-time";
 import RecordingTime from "../custom-plugins/recording-time";
+import WorkIndex from "../custom-plugins/work-index";
 
 
 export default defineComponent({
 export default defineComponent({
 	name: "music-list",
 	name: "music-list",
@@ -343,6 +344,8 @@ export default defineComponent({
 						<MeasureSpeed />
 						<MeasureSpeed />
 						{/* 统计训练时长 */}
 						{/* 统计训练时长 */}
 						<RecordingTime />
 						<RecordingTime />
+						{/* 作业 */}
+						{query.workRecord && <WorkIndex />}
 					</>
 					</>
 				)}
 				)}
 			</div>
 			</div>