huahuazenmehua/pages/study-step/study-step.js

84 lines
2.2 KiB
JavaScript
Raw Permalink Normal View History

2026-05-08 17:00:10 +08:00
import { injectPage } from '@jdmini/api'
const { getCourseById } = require('../../utils/data.js')
const storage = require('../../utils/storage.js')
Page(injectPage()({
data: {
course: null,
currentStepIndex: 0,
totalSteps: 0,
currentStep: null,
isLastStep: false,
progressPercent: 0
},
onLoad(options) {
const courseId = options.courseId
const stepIndex = parseInt(options.stepIndex) || 0
const course = getCourseById(courseId)
if (!course) {
wx.showToast({ title: '课程不存在', icon: 'none' })
setTimeout(() => wx.navigateBack(), 1500)
return
}
wx.setNavigationBarTitle({ title: course.title })
this.setCourse(course, stepIndex)
},
setCourse(course, stepIndex) {
const total = course.steps.length
const safeIndex = Math.max(0, Math.min(stepIndex, total - 1))
const percent = Math.round((safeIndex / total) * 100)
this.setData({
course,
totalSteps: total,
currentStepIndex: safeIndex,
currentStep: course.steps[safeIndex],
isLastStep: safeIndex === total - 1,
progressPercent: percent
})
// 保存进度
storage.saveProgress(course.id, safeIndex, false)
// 更新最近记录
storage.addRecentHistory({
courseId: course.id,
courseTitle: course.title,
coverEmoji: course.coverEmoji,
coverColor: course.coverColor,
stepIndex: safeIndex
})
},
onPrevStep() {
const { currentStepIndex, course } = this.data
if (currentStepIndex <= 0) return
this.setCourse(course, currentStepIndex - 1)
},
onNextStep() {
const { currentStepIndex, course, isLastStep } = this.data
if (isLastStep) {
this.onFinishCourse()
return
}
this.setCourse(course, currentStepIndex + 1)
},
onFinishCourse() {
const { course } = this.data
// 标记完成
storage.saveProgress(course.id, course.steps.length - 1, true)
wx.navigateTo({
url: `/pages/work-submit/work-submit?courseId=${course.id}`
})
},
onShareAppMessage() {
const { course } = this.data
return {
title: `我在学:${course ? course.title : ''}`,
path: `/pages/course-detail/course-detail?courseId=${course ? course.id : ''}`
}
}
}))