Miniprogram: - Add back buttons to all custom-nav pages - Add debug/mock buttons (BLE connect, wear check, treatment) controlled by __DEV__ flag (hidden in prod) Admin console: - Fix log page using nonexistent fields (operator_type, target_type) now correctly reads admin_id/user_id/action/detail from API - Fix subscription date fields (started_at→start_time, expired_at→expire_time) - Wire up subscription detail/extend/renew action buttons - Wire up device detail "查看完整日志" button - Add "创建订阅" button to subscription toolbar - Fix subscription status mapping (2=expired, 3=cancelled) Docs: - Add detailed architecture docs for server, miniprogram, admin console
48 行
2.6 KiB
Plaintext
48 行
2.6 KiB
Plaintext
<view class="page">
|
||
<view class="page-header page-header-pink" style="padding-top: {{statusBarHeight + 24}}px;">
|
||
<view class="nav-back" bindtap="onBack">‹ 返回</view>
|
||
<view class="page-header-title">护理设置</view>
|
||
<view class="page-header-subtitle">选择模式和区域</view>
|
||
</view>
|
||
|
||
<view class="page-content">
|
||
<view class="page-title">选择护理模式</view>
|
||
|
||
<view class="mode-selector">
|
||
<view class="mode-option {{selectedMode === 0 ? 'active' : ''}}" bindtap="onSelectMode" data-value="0">
|
||
<text class="mode-icon">🔄</text>
|
||
<view class="mode-label">普通模式</view>
|
||
<view class="mode-sub">6色循环</view>
|
||
</view>
|
||
<view class="mode-option {{selectedMode === 1 ? 'active' : ''}} {{subExpired ? 'locked' : ''}}" bindtap="onSelectMode" data-value="1">
|
||
<text class="mode-icon">✨</text>
|
||
<view class="mode-label">智能模式</view>
|
||
<view class="mode-sub" wx:if="{{!subExpired}}">剩余{{subDays}}天</view>
|
||
<view class="mode-sub" wx:else>订阅解锁</view>
|
||
</view>
|
||
</view>
|
||
|
||
<view class="page-title" style="font-size:28rpx;">选择护理区域</view>
|
||
<view class="mode-tip" wx:if="{{selectedMode === 0}}">普通模式固定 10 分钟,护理区域默认全脸,不可调整</view>
|
||
|
||
<view class="face-map">
|
||
<view class="face-region forehead {{regions[2].checked ? 'active' : ''}} {{selectedMode === 0 ? 'disabled' : ''}}" bindtap="onToggleRegion" data-idx="2">额头</view>
|
||
<view class="face-region left-cheek {{regions[0].checked ? 'active' : ''}} {{selectedMode === 0 ? 'disabled' : ''}}" bindtap="onToggleRegion" data-idx="0">左脸</view>
|
||
<view class="face-region right-cheek {{regions[1].checked ? 'active' : ''}} {{selectedMode === 0 ? 'disabled' : ''}}" bindtap="onToggleRegion" data-idx="1">右脸</view>
|
||
<view class="face-region nose {{regions[4].checked ? 'active' : ''}} {{selectedMode === 0 ? 'disabled' : ''}}" bindtap="onToggleRegion" data-idx="4">鼻唇</view>
|
||
<view class="face-region chin {{regions[3].checked ? 'active' : ''}} {{selectedMode === 0 ? 'disabled' : ''}}" bindtap="onToggleRegion" data-idx="3">下巴</view>
|
||
</view>
|
||
|
||
<button class="btn-primary" bindtap="onStart" disabled="{{submitting}}" loading="{{submitting}}">
|
||
开始护理
|
||
</button>
|
||
|
||
<view class="error-text" wx:if="{{error}}">{{error}}</view>
|
||
|
||
<view class="debug-actions" wx:if="{{devMode}}">
|
||
<view class="debug-label">🔧 调试工具</view>
|
||
<button class="btn-secondary btn-sm" bindtap="onMockStart">模拟开始护理(跳过BLE)</button>
|
||
</view>
|
||
</view>
|
||
</view>
|