121 lines
4.2 KiB
JavaScript
121 lines
4.2 KiB
JavaScript
const app = getApp()
|
|
|
|
Page({
|
|
data: {
|
|
timeRanges: ['今日', '本周', '本月'],
|
|
activeTimeRange: 0,
|
|
contentTypes: ['单词', '句子'],
|
|
activeContentType: 0,
|
|
modes: ['中文 -> 英文拼写', '英文 -> 中文释义', '英文挖空填空'],
|
|
activeMode: 0,
|
|
onlyReview: true,
|
|
shuffle: false,
|
|
reviewOrder: 'sequential',
|
|
questionCount: 30,
|
|
loading: false,
|
|
error: '',
|
|
},
|
|
onLoad() {
|
|
const plan = app.globalData.reviewPlan
|
|
this.setData({
|
|
activeTimeRange: plan.timeRangeIndex,
|
|
activeContentType: plan.contentTypeIndex,
|
|
activeMode: plan.modeIndex,
|
|
onlyReview: plan.onlyReview,
|
|
shuffle: plan.reviewOrder === 'shuffle' || plan.shuffle,
|
|
reviewOrder: plan.reviewOrder || (plan.shuffle ? 'shuffle' : 'sequential'),
|
|
questionCount: plan.questionCount,
|
|
})
|
|
},
|
|
persistPatch(patch) {
|
|
app.globalData.reviewPlan = { ...app.globalData.reviewPlan, ...patch }
|
|
},
|
|
setTimeRange(e) {
|
|
const activeTimeRange = Number(e.currentTarget.dataset.index)
|
|
this.setData({ activeTimeRange })
|
|
this.persistPatch({ timeRangeIndex: activeTimeRange })
|
|
},
|
|
setContentType(e) {
|
|
const activeContentType = Number(e.currentTarget.dataset.index)
|
|
this.setData({ activeContentType })
|
|
this.persistPatch({ contentTypeIndex: activeContentType })
|
|
},
|
|
setMode(e) {
|
|
const activeMode = Number(e.currentTarget.dataset.index)
|
|
this.setData({ activeMode })
|
|
this.persistPatch({ modeIndex: activeMode })
|
|
},
|
|
toggleOnlyReview() {
|
|
const onlyReview = !this.data.onlyReview
|
|
this.setData({ onlyReview })
|
|
this.persistPatch({ onlyReview })
|
|
},
|
|
toggleShuffle() {
|
|
const shuffle = !this.data.shuffle
|
|
this.setData({ shuffle, reviewOrder: shuffle ? 'shuffle' : 'sequential' })
|
|
this.persistPatch({ shuffle, reviewOrder: shuffle ? 'shuffle' : 'sequential' })
|
|
},
|
|
onQuestionCountInput(e) {
|
|
const questionCount = Number(e.detail.value || 0)
|
|
this.setData({ questionCount })
|
|
this.persistPatch({ questionCount })
|
|
},
|
|
startReview() {
|
|
const scopeTypeMap = ['today', 'week', 'month']
|
|
const contentTypeMap = ['word', 'sentence']
|
|
const questionModeMap = ['A', 'B', 'C']
|
|
const scope_type = scopeTypeMap[this.data.activeTimeRange]
|
|
const content_type = contentTypeMap[this.data.activeContentType]
|
|
const question_mode = questionModeMap[this.data.activeMode]
|
|
const scope_config = {}
|
|
this.setData({ loading: true, error: '' })
|
|
app.ensureLogin().then((authToken) => {
|
|
if (!authToken) {
|
|
this.setData({ loading: false, error: '请先登录后再开始复习' })
|
|
return
|
|
}
|
|
wx.request({
|
|
url: `${app.globalData.baseUrl}/api/v1/review/generate`,
|
|
method: 'POST',
|
|
header: { 'Content-Type': 'application/json', 'X-Auth-Token': authToken },
|
|
data: {
|
|
scope_type,
|
|
scope_config,
|
|
content_type,
|
|
question_mode,
|
|
review_strategy: this.data.onlyReview ? 'review_only' : 'all',
|
|
sort_mode: this.data.reviewOrder === 'shuffle' ? 'shuffle' : 'sequential',
|
|
total_count: this.data.questionCount,
|
|
},
|
|
success: (res) => {
|
|
const session = res.data?.data || null
|
|
if (res.statusCode < 200 || res.statusCode >= 300 || !session?.id) {
|
|
const message = res.data?.detail || res.data?.message || '生成复习会话失败'
|
|
this.setData({ error: message })
|
|
wx.showToast({ title: message, icon: 'none' })
|
|
return
|
|
}
|
|
if (!session.record_ids?.length) {
|
|
const message = '当前条件下没有可复习题目,请切换时间范围或关闭仅复习'
|
|
this.setData({ error: message })
|
|
wx.showToast({ title: message, icon: 'none' })
|
|
return
|
|
}
|
|
app.globalData.reviewSessionMeta = session
|
|
wx.setStorageSync('reviewSessionMeta', session)
|
|
wx.navigateTo({ url: '/pages/review-session/review-session' })
|
|
},
|
|
fail: () => this.setData({ error: '生成复习会话失败' }),
|
|
complete: () => this.setData({ loading: false }),
|
|
})
|
|
})
|
|
},
|
|
goHome() {
|
|
wx.reLaunch({ url: '/pages/index/index' })
|
|
},
|
|
goToReview() {},
|
|
goToMe() {
|
|
wx.navigateTo({ url: '/pages/me/me' })
|
|
},
|
|
})
|