kydc/review-config/review-config.js

101 lines
3.4 KiB
JavaScript
Raw Normal View History

2026-04-18 17:16:49 +08:00
const app = getApp()
Page({
data: {
2026-04-23 11:34:54 +08:00
timeRanges: ['今日', '本周', '本月'],
2026-04-18 17:16:49 +08:00
activeTimeRange: 0,
contentTypes: ['单词', '句子'],
activeContentType: 0,
modes: ['中文 -> 英文拼写', '英文 -> 中文释义', '英文挖空填空'],
activeMode: 0,
onlyReview: true,
shuffle: false,
2026-04-27 12:37:15 +08:00
reviewOrder: 'sequential',
2026-04-18 17:16:49 +08:00
questionCount: 30,
2026-04-19 11:56:49 +08:00
loading: false,
error: '',
2026-04-18 17:16:49 +08:00
},
onLoad() {
const plan = app.globalData.reviewPlan
this.setData({
activeTimeRange: plan.timeRangeIndex,
activeContentType: plan.contentTypeIndex,
activeMode: plan.modeIndex,
onlyReview: plan.onlyReview,
2026-04-27 12:37:15 +08:00
shuffle: plan.reviewOrder === 'shuffle' || plan.shuffle,
reviewOrder: plan.reviewOrder || (plan.shuffle ? 'shuffle' : 'sequential'),
2026-04-18 17:16:49 +08:00
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
2026-04-27 12:37:15 +08:00
this.setData({ shuffle, reviewOrder: shuffle ? 'shuffle' : 'sequential' })
this.persistPatch({ shuffle, reviewOrder: shuffle ? 'shuffle' : 'sequential' })
2026-04-18 17:16:49 +08:00
},
onQuestionCountInput(e) {
const questionCount = Number(e.detail.value || 0)
2026-04-18 17:16:49 +08:00
this.setData({ questionCount })
this.persistPatch({ questionCount })
},
startReview() {
2026-04-23 11:34:54 +08:00
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]
2026-04-23 11:34:54 +08:00
const scope_config = {}
2026-04-19 11:56:49 +08:00
this.setData({ loading: true, error: '' })
wx.request({
url: `${app.globalData.baseUrl}/api/v1/review/generate`,
method: 'POST',
header: { 'Content-Type': 'application/json', 'X-OpenID': app.globalData.openid || '' },
data: {
scope_type,
scope_config,
content_type,
question_mode,
review_strategy: this.data.onlyReview ? 'review_only' : 'all',
2026-04-27 12:37:15 +08:00
sort_mode: this.data.reviewOrder === 'shuffle' ? 'shuffle' : 'sequential',
total_count: this.data.questionCount,
},
success: (res) => {
2026-04-19 11:56:49 +08:00
app.globalData.reviewSessionMeta = res.data?.data || null
wx.navigateTo({ url: '/pages/review-session/review-session' })
},
2026-04-19 11:56:49 +08:00
fail: () => this.setData({ error: '生成复习会话失败' }),
complete: () => this.setData({ loading: false }),
})
2026-04-18 17:16:49 +08:00
},
2026-04-19 16:39:02 +08:00
goHome() {
wx.reLaunch({ url: '/pages/index/index' })
},
goToReview() {},
goToMe() {
wx.navigateTo({ url: '/pages/me/me' })
},
2026-04-18 17:16:49 +08:00
})