feat(ui): refine profile workflows and visual system

This commit is contained in:
2026-07-21 20:50:52 +08:00
parent 12a000845a
commit 04e80b184c
16 changed files with 1105 additions and 334 deletions

View File

@@ -3,12 +3,13 @@
<view>
<text class="eyebrow">档案预设</text>
<view class="page-heading">
<text class="heading-icon"></text>
<text class="page-title">学生档案预设项</text>
<text class="page-title">新增学生默认值</text>
</view>
<text class="page-subtitle">用于新增学生时自动带出</text>
<text class="page-subtitle">新增学生时自动带出以下信息</text>
</view>
<button class="reload-button secondary-button" loading="{{loading}}" disabled="{{loading}}" bindtap="onReload">↻ 刷新</button>
<button class="reload-button {{loading ? 'reload-button-loading' : ''}}" disabled="{{loading || saving}}" bindtap="onReload" aria-label="刷新预设项">
<text class="reload-icon">↻</text>
</button>
</view>
<view wx:if="{{errorMessage}}" class="status-banner">
@@ -18,41 +19,70 @@
<view class="defaults-card surface">
<view class="defaults-grid">
<picker class="select-field" mode="selector" range="{{grades}}" bindchange="onGradeChange">
<text class="field-label">年级</text>
<text class="field-value">{{defaults.grade}}</text>
<picker class="select-field" mode="selector" range="{{grades}}" disabled="{{loading || saving}}" bindchange="onGradeChange" aria-label="默认年级,当前为 {{defaults.grade}}">
<view class="select-field-content">
<view class="select-copy">
<text class="field-label">年级</text>
<text class="field-value">{{defaults.grade}}</text>
</view>
<text class="select-chevron" aria-hidden="true"></text>
</view>
</picker>
<picker class="select-field" mode="selector" range="{{subjects}}" bindchange="onSubjectChange">
<text class="field-label">学科</text>
<text class="field-value">{{defaults.subject}}</text>
<picker class="select-field" mode="selector" range="{{subjects}}" disabled="{{loading || saving}}" bindchange="onSubjectChange" aria-label="默认学科,当前为 {{defaults.subject}}">
<view class="select-field-content">
<view class="select-copy">
<text class="field-label">学科</text>
<text class="field-value">{{defaults.subject}}</text>
</view>
<text class="select-chevron" aria-hidden="true"></text>
</view>
</picker>
</view>
<view class="duration-field">
<text class="field-label">上课时长</text>
<view class="duration-input-row">
<input class="duration-input" type="number" value="{{defaults.lessonDurationMinutes}}" bindblur="onDurationInput" />
<text class="duration-unit">分钟</text>
<view class="duration-heading">
<text class="field-label">上课时长</text>
<text class="duration-step-label">15 分钟间隔</text>
</view>
<slider
class="duration-slider"
min="15"
max="360"
step="15"
value="{{defaults.lessonDurationMinutes}}"
activeColor="#2B67E8"
backgroundColor="#DBE7F5"
blockColor="#2B67E8"
blockSize="26"
bindchange="onDurationChange"
/>
<view class="duration-bounds">
<text>15 分钟</text>
<text>360 分钟</text>
<view class="duration-stepper">
<button
class="duration-step-button"
disabled="{{loading || saving || defaults.lessonDurationMinutes <= minimumDuration}}"
bindtap="decreaseDuration"
aria-label="减少 15 分钟"
></button>
<view class="duration-value" aria-label="当前上课时长 {{defaults.lessonDurationMinutes}} 分钟">
<text class="duration-number">{{defaults.lessonDurationMinutes}}</text>
<text class="duration-unit">分钟</text>
</view>
<button
class="duration-step-button"
disabled="{{loading || saving || defaults.lessonDurationMinutes >= maximumDuration}}"
bindtap="increaseDuration"
aria-label="增加 15 分钟"
></button>
</view>
<view class="duration-presets" aria-label="常用上课时长">
<button
wx:for="{{durationPresets}}"
wx:key="*this"
class="duration-preset {{defaults.lessonDurationMinutes === item ? 'duration-preset-active' : ''}}"
disabled="{{loading || saving}}"
data-value="{{item}}"
bindtap="selectDurationPreset"
aria-label="设置为 {{item}} 分钟"
>{{item}}</button>
</view>
</view>
<view class="time-help">新增学生时会按开始时间自动推算结束时间。</view>
<button class="save-defaults primary-button" loading="{{saving}}" disabled="{{saving || loading}}" bindtap="save">保存</button>
<view class="time-help">
<icon class="time-help-icon" type="info" size="16" color="#6E6E73" />
<text>新增学生时会根据开始时间自动推算结束时间</text>
</view>
<view class="save-area">
<button class="save-defaults primary-button" loading="{{saving}}" disabled="{{saving || loading}}" bindtap="save">保存</button>
</view>
</view>
</view>