|
@@ -87,7 +87,6 @@ export default defineComponent({
|
|
|
const headeRef = ref()
|
|
|
const data = reactive({
|
|
|
videoData: null as any,
|
|
|
- details: [] as any,
|
|
|
trainings: [] as any[],
|
|
|
trainingTimes: 0,
|
|
|
itemList: [] as any,
|
|
@@ -101,40 +100,32 @@ export default defineComponent({
|
|
|
timer: null as any,
|
|
|
item: null as any
|
|
|
})
|
|
|
- const getDetail = async () => {
|
|
|
- data.itemList = []
|
|
|
- let details = []
|
|
|
+ // 获取课后练习记录
|
|
|
+ const getTrainingRecord = async () => {
|
|
|
try {
|
|
|
- const res: any = await request.get(
|
|
|
- state.platformApi + `/lessonTraining/courseSchedule/${route.query.courseScheduleId}`,
|
|
|
+ const res: any = await request.post(
|
|
|
+ state.platformApi +
|
|
|
+ `/studentLessonTraining/trainingRecord/${query.courseScheduleId}?userId=${state.user?.data?.id}`,
|
|
|
{
|
|
|
hideLoading: true
|
|
|
}
|
|
|
)
|
|
|
- if (Array.isArray(res?.data)) {
|
|
|
- const studentLevel = state.user?.data?.studentLevel || 1
|
|
|
- details = res.data.find((n: any) => n.studentLevel === studentLevel)?.details || []
|
|
|
+ if (Array.isArray(res?.data?.trainings)) {
|
|
|
+ return res.data.trainings
|
|
|
}
|
|
|
- } catch (error) {
|
|
|
- console.log('error')
|
|
|
- }
|
|
|
- if (details.length) {
|
|
|
- details.forEach((n: any) => {
|
|
|
+ } catch (error) {}
|
|
|
+ return []
|
|
|
+ }
|
|
|
+ const setRecord = async (trainings: any[]) => {
|
|
|
+ if (Array.isArray(trainings)) {
|
|
|
+ data.trainings = trainings.map((n: any) => {
|
|
|
try {
|
|
|
- n.trainingConfigJson = JSON.parse(n.lessonTrainingTemp.trainingConfigJson)
|
|
|
+ n.trainingContent = JSON.parse(n.trainingContent)
|
|
|
} catch (error) {
|
|
|
- n.trainingConfigJson = {}
|
|
|
+ n.trainingContent = ''
|
|
|
}
|
|
|
- })
|
|
|
- data.details = details
|
|
|
- // console.log("🚀 ~ data.details", data.details)
|
|
|
- data.videoData = details.find((n: any) => n.materialId == route.query.materialId) || null
|
|
|
- // console.log('🚀 ~ data.videoData', data.videoData)
|
|
|
- data.itemList = [
|
|
|
- {
|
|
|
- ...data.videoData,
|
|
|
- id: data.videoData?.materialId || '',
|
|
|
- loaded: false,
|
|
|
+ return {
|
|
|
+ ...n,
|
|
|
currentTime: 0,
|
|
|
duration: 100,
|
|
|
paused: true,
|
|
@@ -144,34 +135,15 @@ export default defineComponent({
|
|
|
muted: true, // 静音
|
|
|
autoplay: true //自动播放
|
|
|
}
|
|
|
- ]
|
|
|
+ })
|
|
|
+ data.itemList = data.trainings.filter((n: any) => n.materialId == route.query.materialId)
|
|
|
+ data.videoData = data.itemList[0]
|
|
|
+ handleExerciseCompleted()
|
|
|
}
|
|
|
}
|
|
|
- // 获取课后练习记录
|
|
|
- const trainingRecord = async () => {
|
|
|
- try {
|
|
|
- const res: any = await request.post(
|
|
|
- state.platformApi +
|
|
|
- `/studentLessonTraining/trainingRecord/${query.courseScheduleId}?userId=${state.user?.data?.id}`,
|
|
|
- {
|
|
|
- hideLoading: true
|
|
|
- }
|
|
|
- )
|
|
|
- if (Array.isArray(res?.data.trainings)) {
|
|
|
- data.trainings = res.data.trainings
|
|
|
- handleExerciseCompleted()
|
|
|
- }
|
|
|
- } catch (error) {}
|
|
|
- }
|
|
|
- const currentNum = computed(() => {
|
|
|
- const item = data.trainings.find((n: any) => n.materialId == data.videoData?.materialId)
|
|
|
- // console.log(item)
|
|
|
- if (item) handleExerciseCompleted()
|
|
|
- return item?.trainingTimes || 0
|
|
|
- })
|
|
|
onMounted(async () => {
|
|
|
- await getDetail()
|
|
|
- trainingRecord()
|
|
|
+ const trainings = await getTrainingRecord()
|
|
|
+ setRecord(trainings)
|
|
|
})
|
|
|
// 返回
|
|
|
const goback = () => {
|
|
@@ -215,9 +187,20 @@ export default defineComponent({
|
|
|
hideLoading: true
|
|
|
}
|
|
|
)
|
|
|
- trainingRecord()
|
|
|
+
|
|
|
} catch (error) {}
|
|
|
data.recordLoading = false
|
|
|
+
|
|
|
+ try {
|
|
|
+ const _res: any = await getTrainingRecord()
|
|
|
+ if (Array.isArray(_res?.data.trainings)){
|
|
|
+ const item = _res.data.trainings.filter((n: any) => n.materialId == route.query.materialId)
|
|
|
+ data.videoData.trainingTimes = item.trainingTimes
|
|
|
+ handleExerciseCompleted()
|
|
|
+ }
|
|
|
+ } catch (error) {
|
|
|
+
|
|
|
+ }
|
|
|
}
|
|
|
// 停止所有的播放
|
|
|
const handleStopVideo = () => {
|
|
@@ -229,14 +212,15 @@ export default defineComponent({
|
|
|
// 判断练习是否完成
|
|
|
const handleExerciseCompleted = () => {
|
|
|
if (
|
|
|
- currentNum.value != 0 &&
|
|
|
- currentNum.value + '' === data.videoData?.trainingConfigJson?.practiceTimes
|
|
|
+ data?.videoData.trainingTimes != 0 &&
|
|
|
+ data?.videoData.trainingTimes + '' === data.videoData?.trainingContent?.practiceTimes
|
|
|
) {
|
|
|
// handleStopVideo()
|
|
|
- const itemIndex = data.details.findIndex(
|
|
|
+ const itemIndex = data.trainings.findIndex(
|
|
|
(n: any) => n.materialId == data.videoData?.materialId
|
|
|
- )
|
|
|
- const isLastIndex = itemIndex === data.details.length - 1
|
|
|
+ )
|
|
|
+ // console.log(itemIndex ,data.trainings, data.videoData?.materialId)
|
|
|
+ const isLastIndex = itemIndex === data.trainings.length - 1
|
|
|
showConfirmDialog({
|
|
|
title: '课后训练',
|
|
|
message: '你已完成该练习~',
|
|
@@ -246,26 +230,11 @@ export default defineComponent({
|
|
|
})
|
|
|
.then(() => {
|
|
|
if (!isLastIndex) {
|
|
|
- const nextItem = data.details[itemIndex + 1]
|
|
|
+ const nextItem = data.trainings[itemIndex + 1]
|
|
|
if (nextItem?.type === materialType.视频) {
|
|
|
+ data.itemList = [nextItem]
|
|
|
data.videoData = nextItem
|
|
|
- data.itemList = [
|
|
|
- {
|
|
|
- ...nextItem,
|
|
|
- id: nextItem?.materialId || '',
|
|
|
- currentTime: 0,
|
|
|
- duration: 100,
|
|
|
- paused: true,
|
|
|
- loop: false,
|
|
|
- videoEle: null,
|
|
|
- timer: null,
|
|
|
- muted: true, // 静音
|
|
|
- autoplay: true //自动播放
|
|
|
- }
|
|
|
- ]
|
|
|
- nextTick(() => {
|
|
|
- console.log(data.itemList[0].videoEle)
|
|
|
- })
|
|
|
+ handleExerciseCompleted()
|
|
|
}
|
|
|
if (nextItem?.type === materialType.曲目) {
|
|
|
handleInit(1)
|
|
@@ -293,7 +262,7 @@ export default defineComponent({
|
|
|
}
|
|
|
})
|
|
|
.catch(() => {
|
|
|
- data.details[itemIndex].currentTime = 0
|
|
|
+ data.trainings[itemIndex].currentTime = 0
|
|
|
})
|
|
|
}
|
|
|
}
|
|
@@ -337,8 +306,6 @@ export default defineComponent({
|
|
|
m.duration = videoEle.duration
|
|
|
m.videoEle = videoEle
|
|
|
m.loaded = true
|
|
|
- console.time('播放')
|
|
|
- videoEle.play()
|
|
|
}}
|
|
|
onTimeupdate={(e: Event) => {
|
|
|
if (!m.loaded) return
|
|
@@ -431,8 +398,8 @@ export default defineComponent({
|
|
|
</div>
|
|
|
<div class={styles.menu}>{popupData.tabName}</div>
|
|
|
<div class={styles.nums}>
|
|
|
- 练习次数:{currentNum.value}/
|
|
|
- {data.videoData?.trainingConfigJson?.practiceTimes || 0}
|
|
|
+ 练习次数:{data.videoData?.trainingTimes || 0}/
|
|
|
+ {data.videoData?.trainingContent?.practiceTimes || 0}
|
|
|
</div>
|
|
|
</div>
|
|
|
)}
|