111 lines
3.4 KiB
JavaScript
111 lines
3.4 KiB
JavaScript
const app = getApp()
|
|
|
|
Page({
|
|
data: {
|
|
progress: 0,
|
|
current: 1,
|
|
total: 0,
|
|
word: '',
|
|
meaning: '',
|
|
answer: '',
|
|
feedback: '',
|
|
showFeedback: false,
|
|
completed: false,
|
|
masterHint: false,
|
|
questions: [],
|
|
loading: false,
|
|
error: '',
|
|
},
|
|
onLoad() {
|
|
this.loadQuestions()
|
|
},
|
|
loadQuestions() {
|
|
const session = app.globalData.reviewSessionMeta
|
|
if (!session) {
|
|
this.setData({ error: '暂无复习会话' })
|
|
return
|
|
}
|
|
this.setData({ loading: true, error: '' })
|
|
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?.data || []
|
|
app.globalData.reviewSession = { deck: questions, currentIndex: 0, correctCount: 0, wrongCount: 0, completed: false, currentAnswer: '' }
|
|
this.setData({ questions })
|
|
this.syncSession()
|
|
},
|
|
fail: () => this.setData({ error: '题目加载失败' }),
|
|
complete: () => this.setData({ loading: false }),
|
|
})
|
|
},
|
|
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 || '',
|
|
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?.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,
|
|
})
|
|
},
|
|
})
|
|
},
|
|
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' }),
|
|
})
|
|
return
|
|
}
|
|
session.currentIndex += 1
|
|
session.currentAnswer = ''
|
|
this.syncSession()
|
|
},
|
|
markMastered() {
|
|
this.setData({ masterHint: true })
|
|
wx.showToast({ title: '已标记', icon: 'success' })
|
|
},
|
|
})
|