kydc/review-session/review-session.js

103 lines
3.1 KiB
JavaScript
Raw Normal View History

2026-04-18 17:16:49 +08:00
const app = getApp()
Page({
data: {
progress: 0,
current: 1,
total: 0,
word: '',
meaning: '',
answer: '',
feedback: '',
showFeedback: false,
completed: false,
masterHint: false,
questions: [],
2026-04-18 17:16:49 +08:00
},
onLoad() {
this.loadQuestions()
},
loadQuestions() {
const session = app.globalData.reviewSessionMeta
if (!session) return
wx.request({
url: `${app.globalData.baseUrl}/api/v1/review/questions?session_id=${session.id}`,
header: { 'X-OpenID': app.globalData.openid || '' },
success: (res) => {
const questions = res.data || []
app.globalData.reviewSession = { deck: questions, currentIndex: 0, correctCount: 0, wrongCount: 0, completed: false, currentAnswer: '' }
this.setData({ questions })
this.syncSession()
},
})
2026-04-18 17:16:49 +08:00
},
syncSession() {
const session = app.globalData.reviewSession
const current = session.deck[session.currentIndex]
const total = session.deck.length || 1
this.setData({
progress: Math.round((session.currentIndex / total) * 100),
current: session.currentIndex + 1,
total,
word: current?.prompt || '',
meaning: current?.answer_hint || '',
2026-04-18 17:16:49 +08:00
answer: session.currentAnswer || '',
feedback: '',
showFeedback: false,
completed: session.completed,
masterHint: false,
})
},
onAnswerInput(e) {
const answer = e.detail.value
app.globalData.reviewSession.currentAnswer = answer
this.setData({ answer })
},
checkAnswer() {
const session = app.globalData.reviewSession
const current = session.deck[session.currentIndex]
if (!current) return
wx.request({
url: `${app.globalData.baseUrl}/api/v1/review/submit`,
method: 'POST',
header: { 'Content-Type': 'application/json', 'X-OpenID': app.globalData.openid || '' },
data: {
session_id: app.globalData.reviewSessionMeta.id,
entry_id: current.entry_id,
question_mode: current.question_mode,
user_answer: this.data.answer,
},
success: (res) => {
const result = res.data || {}
session.correctCount += result.is_correct ? 1 : 0
session.wrongCount += result.is_correct ? 0 : 1
this.setData({
feedback: result.is_correct ? '回答正确' : `正确答案:${result.correct_answer}`,
showFeedback: true,
})
},
2026-04-18 17:16:49 +08:00
})
},
nextQuestion() {
const session = app.globalData.reviewSession
if (!session.deck.length) return
if (session.currentIndex >= session.deck.length - 1) {
session.completed = true
wx.request({
url: `${app.globalData.baseUrl}/api/v1/review/finish?session_id=${app.globalData.reviewSessionMeta.id}`,
method: 'POST',
header: { 'X-OpenID': app.globalData.openid || '' },
success: () => wx.navigateTo({ url: '/pages/review-result/review-result' }),
})
2026-04-18 17:16:49 +08:00
return
}
session.currentIndex += 1
session.currentAnswer = ''
this.syncSession()
},
markMastered() {
this.setData({ masterHint: true })
wx.showToast({ title: '已标记', icon: 'success' })
},
})