kydc/review-session/review-session.wxml
2026-04-30 11:15:39 +08:00

73 lines
4.3 KiB
Plaintext

<view class="page">
<scroll-view scroll-y class="content">
<view class="progress-box">
<view class="progress-head">
<text class="progress-label">复习进度</text>
<text class="progress-count">题号 {{current}} <text class="progress-total">/ {{total}}</text></text>
</view>
<view class="progress-bar ghost-border"><view class="progress-fill" style="width: {{progress}}%;"></view></view>
</view>
<view wx:if="{{!questions.length}}" class="empty-state">
<text class="empty-title">暂无题目</text>
<text class="empty-subtitle">{{error || '请先生成复习会话'}}</text>
</view>
<view wx:else class="glass-card question-card ghost-border">
<view class="ambient-glow"></view>
<view class="mode-tag-wrap">
<text class="mode-tag">{{questionBadge}}</text>
</view>
<view class="meaning-wrap" wx:if="{{meaning}}">
<text class="meaning">{{meaning}}</text>
</view>
<view wx:if="{{isCloze}}" class="cloze-wrap">
<view wx:if="{{currentClozeQuestion && currentClozeQuestion.blanks.length}}" class="inline-cloze">
<block wx:for="{{clozeSegments}}" wx:for-item="segment" wx:for-index="segmentIndex" wx:key="index">
<text wx:if="{{segment.type === 'text'}}" class="cloze-segment-text">{{segment.text}}</text>
<view wx:elif="{{segment.type === 'letter-cell'}}" class="cloze-letter-cell" style="width: {{segment.width}}; min-width: {{segment.minWidth}};">
<input id="cloze-input-{{segment.blankIndex}}-{{segment.letterIndex}}" focus="{{activeClozeBlankIndex === segment.blankIndex && segment.letterIndex === 0}}" class="answer inline-cloze-answer letter-cell-input" data-index="{{segment.blankIndex}}" data-letter-index="{{segment.letterIndex}}" value="{{clozeAnswers[segment.blankIndex] ? clozeAnswers[segment.blankIndex].charAt(segment.letterIndex) : ''}}" placeholder="" maxlength="1" bindinput="onClozeLetterInput" bindkeydown="handleLetterKeydown" />
<view class="cloze-letter-underline"></view>
</view>
<view wx:else class="cloze-blank-wrap" style="width: {{segment.width}}; min-width: {{segment.minWidth}};">
<input id="cloze-input-{{segment.blankIndex}}" focus="{{activeClozeBlankIndex === segment.blankIndex}}" class="answer inline-cloze-answer" data-index="{{segment.blankIndex}}" value="{{clozeAnswers[segment.blankIndex] || ''}}" placeholder="" maxlength="{{segment.maxLength}}" bindinput="onClozeAnswerInput" />
</view>
</block>
</view>
<text wx:else class="cloze">{{word}}</text>
</view>
<view wx:else class="word-wrap">
<text class="word">{{word}}</text>
</view>
<view class="entry-type-hint" wx:if="{{entryTypeHint}}">{{entryTypeHint}}</view>
<view class="input-shell" wx:if="{{!isCloze}}">
<input class="answer" value="{{answer}}" placeholder="输入答案..." bindinput="onAnswerInput" />
</view>
<view wx:if="{{showFeedback}}" class="feedback-box {{feedbackType}}">
<text class="feedback">{{clozeFeedbackSummary || feedback}}</text>
<view wx:if="{{showClozeFeedback && currentClozeResults.length}}" class="cloze-feedback-list">
<block wx:for="{{currentClozeResults}}" wx:for-item="blankResult" wx:for-index="blankIndex" wx:key="index">
<view class="cloze-feedback-item">
<text class="cloze-feedback-title">空 {{blankIndex + 1}}</text>
<text class="cloze-feedback-text">你的答案:{{blankResult.user_answer || '(空)'}}</text>
<text class="cloze-feedback-text">标准答案:{{blankResult.standard_answer_text || (blankResult.correct_answers && blankResult.correct_answers.length ? blankResult.correct_answers.join(' / ') : (blankResult.correct_answer_text || '(未返回)'))}}</text>
</view>
</block>
</view>
</view>
</view>
<view wx:if="{{questions.length}}" class="actions-cluster">
<button class="secondary-btn" bindtap="checkAnswer">查看解析</button>
<button class="primary-btn" bindtap="nextQuestion">下一题</button>
</view>
<view wx:if="{{questions.length}}" class="master-action" bindtap="markMastered">
<text class="master-text {{masterHint ? 'active' : ''}}">标记已掌握</text>
</view>
</scroll-view>
</view>