64 lines
2.9 KiB
Plaintext
64 lines
2.9 KiB
Plaintext
<view class="page-shell feedback-page">
|
||
<text class="eyebrow">课堂反馈</text>
|
||
<view class="page-heading">
|
||
<text class="page-title">反馈生成</text>
|
||
</view>
|
||
<text class="page-subtitle">填写课堂表现并保存到教学反馈记录。</text>
|
||
|
||
<view wx:if="{{errorMessage}}" class="status-banner">
|
||
<text>{{errorMessage}}</text>
|
||
<text class="status-action" bindtap="retryLoad">重试</text>
|
||
</view>
|
||
|
||
<view class="feedback-form surface">
|
||
<picker class="feedback-field" mode="selector" range="{{profileOptions}}" value="{{selectedProfileIndex}}" disabled="{{loading || recording || voiceBusy}}" bindchange="onProfileChange">
|
||
<text class="form-label">学生档案</text>
|
||
<text class="form-value">{{loading ? '正在加载...' : profileOptions[selectedProfileIndex]}}</text>
|
||
</picker>
|
||
|
||
<picker class="feedback-field" mode="date" value="{{draft.feedbackDate}}" disabled="{{recording || voiceBusy}}" bindchange="onDateChange">
|
||
<text class="form-label">反馈日期</text>
|
||
<text class="form-value">{{draft.feedbackDate}}</text>
|
||
</picker>
|
||
|
||
<view class="content-field">
|
||
<view class="content-label-row">
|
||
<text class="form-label">反馈内容</text>
|
||
<text class="content-count">{{contentLength}} / 2000</text>
|
||
</view>
|
||
<textarea
|
||
class="feedback-textarea"
|
||
value="{{draft.content}}"
|
||
maxlength="2000"
|
||
disabled="{{recording || voiceBusy}}"
|
||
placeholder="记录课堂完成情况、进步与后续建议"
|
||
bindinput="onContentInput"
|
||
/>
|
||
|
||
<view class="voice-input-row">
|
||
<button
|
||
class="voice-button {{recording ? 'voice-button-recording' : ''}}"
|
||
disabled="{{saving || voiceBusy}}"
|
||
bindtap="toggleRecording"
|
||
aria-label="{{recording ? '结束录音' : '开始录音'}}"
|
||
>
|
||
<text class="voice-button-icon">{{recording ? '■' : '●'}}</text>
|
||
<text>{{recording ? '结束录音' : '语音录入'}}</text>
|
||
</button>
|
||
<view class="voice-state {{voiceActionable ? 'voice-state-actionable' : ''}}" bindtap="openVoiceDetails">
|
||
<text class="voice-status">{{voiceStatus}}</text>
|
||
<text wx:if="{{recording}}" class="recording-time">{{recordingTime}}</text>
|
||
<text wx:elif="{{voiceActionable}}" class="voice-state-arrow">›</text>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
|
||
<button class="save-feedback primary-button" loading="{{saving || generating}}" disabled="{{saving || generating || recording || voiceBusy || (session && session.processingSegmentCount > 0)}}" bindtap="saveFeedback">{{primaryActionText}}</button>
|
||
</view>
|
||
|
||
<view wx:if="{{!loading && profiles.length === 0}}" class="profiles-hint">
|
||
<text>当前没有学生档案,反馈仍可不关联学生直接保存。</text>
|
||
<text class="status-action" bindtap="goStudents">新建档案</text>
|
||
</view>
|
||
</view>
|