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' }) }, })