T40 UI 审计修复(60 页面全覆盖): - 新增 $acc-d/$wrn-d 渐变中间色变量,修复首页轮播渐变硬编码 - 替换 8 处裸 white 为 $white 设计变量(5 个 SCSS 文件) - 修复 7 处触摸目标 40/44px → 48px(健康/消息/咨询/预约/首页) - 3 页面新增 Loading 状态(体征录入/个人中心/就诊人添加) - statusTag 移除硬编码布局值,改用 SCSS mixin 控制 - 医生端 14 页面架构 Hook 层补充(useThrottledDidShow 替换 useEffect) - 移除 action-inbox 未使用 import 安全 P0 修复: - JWT 中间件加固:token 类型校验 + 过期预检 + 类型别名简化 - 速率限制增强:滑动窗口 + 暴力破解防护 - analytics handler 错误处理完善 文档: - T40 审计报告(24 PASS / 36 PASS_WITH_ISSUES / 0 NEEDS_WORK) - 5 份 DevTools/性能审计讨论记录 - wiki 症状导航 + 小程序章节更新
38 lines
868 B
TypeScript
38 lines
868 B
TypeScript
import { create } from 'zustand';
|
|
import Taro from '@tarojs/taro';
|
|
|
|
type DisplayMode = 'normal' | 'elder';
|
|
|
|
interface UIState {
|
|
mode: DisplayMode;
|
|
toggle: () => void;
|
|
setMode: (mode: DisplayMode) => void;
|
|
restore: () => void;
|
|
}
|
|
|
|
const STORAGE_KEY = 'ui_display_mode';
|
|
|
|
export const useUIStore = create<UIState>((set, get) => ({
|
|
mode: 'normal',
|
|
|
|
toggle: () => {
|
|
const next = get().mode === 'normal' ? 'elder' : 'normal';
|
|
Taro.setStorageSync(STORAGE_KEY, next);
|
|
set({ mode: next });
|
|
},
|
|
|
|
setMode: (mode) => {
|
|
Taro.setStorageSync(STORAGE_KEY, mode);
|
|
set({ mode });
|
|
},
|
|
|
|
restore: () => {
|
|
try {
|
|
const saved = Taro.getStorageSync(STORAGE_KEY);
|
|
if (saved === 'elder' || saved === 'normal') {
|
|
if (get().mode !== saved) set({ mode: saved });
|
|
}
|
|
} catch { /* storage 不可用时保持默认 */ }
|
|
},
|
|
}));
|