P1: - 全局 23 个页面 Taro.navigateTo → safeNavigateTo,防止页栈超10层 - 生产构建保留 console.warn/error,便于线上问题排查 - 添加 preloadRule 分包预加载(首页预加载健康/医生/文章分包) P2: - logout 时清理 ai_chat_history + BLE DataBuffer 缓存 - restore() 移除冗余的双重 Storage 读取(secureGet 已包含 getStorageSync) - 首页文章图片添加 lazyLoad
105 lines
3.3 KiB
TypeScript
105 lines
3.3 KiB
TypeScript
import React from 'react';
|
|
import { View, Text } from '@tarojs/components';
|
|
import Taro from '@tarojs/taro';
|
|
import { safeNavigateTo } from '@/utils/navigate';
|
|
import { useAuthStore } from '../../../stores/auth';
|
|
import { invalidateHeadersCache, clearRequestCache } from '@/services/request';
|
|
import { useElderClass } from '../../../hooks/useElderClass';
|
|
import PageShell from '@/components/ui/PageShell';
|
|
import './index.scss';
|
|
|
|
export default function Settings() {
|
|
const modeClass = useElderClass();
|
|
const logout = useAuthStore((s) => s.logout);
|
|
|
|
const handleClearCache = async () => {
|
|
const { confirm } = await Taro.showModal({
|
|
title: '清除缓存',
|
|
content: '确定要清除本地缓存数据吗?不会影响账号信息。',
|
|
});
|
|
if (!confirm) return;
|
|
|
|
const preservedKeys = ['access_token', 'refresh_token', 'user_data', 'user_roles', 'tenant_id', 'wechat_openid', 'current_patient', 'current_patient_id'];
|
|
const preserved: Record<string, unknown> = {};
|
|
await Promise.all(
|
|
preservedKeys.map(async (key) => {
|
|
try {
|
|
const val = await Taro.getStorage({ key });
|
|
if (val.data) preserved[key] = val.data;
|
|
} catch { /* key not found */ }
|
|
}),
|
|
);
|
|
|
|
await Taro.clearStorage();
|
|
|
|
await Promise.all(
|
|
Object.entries(preserved).map(([key, val]) =>
|
|
Taro.setStorage({ key, data: val }),
|
|
),
|
|
);
|
|
|
|
clearRequestCache();
|
|
invalidateHeadersCache();
|
|
Taro.showToast({ title: '缓存已清除', icon: 'success' });
|
|
};
|
|
|
|
const handleAbout = () => {
|
|
Taro.showModal({
|
|
title: '关于我们',
|
|
content: 'HMS 健康管理平台 v1.0.0\n为您的健康保驾护航',
|
|
showCancel: false,
|
|
});
|
|
};
|
|
|
|
const handlePrivacy = () => {
|
|
safeNavigateTo('/pages/legal/privacy-policy');
|
|
};
|
|
|
|
const handleLogout = () => {
|
|
Taro.showModal({
|
|
title: '退出登录',
|
|
content: '确定要退出登录吗?',
|
|
}).then((res) => {
|
|
if (res.confirm) {
|
|
logout();
|
|
}
|
|
});
|
|
};
|
|
|
|
return (
|
|
<PageShell className={modeClass}>
|
|
<Text className='page-title'>设置</Text>
|
|
|
|
<View className='settings-group'>
|
|
<View className='settings-item' onClick={handleClearCache}>
|
|
<View className='settings-icon'>
|
|
<Text className='settings-icon-text'>缓</Text>
|
|
</View>
|
|
<Text className='settings-label'>清除缓存</Text>
|
|
<Text className='settings-arrow'>{'>'}</Text>
|
|
</View>
|
|
<View className='settings-item' onClick={handleAbout}>
|
|
<View className='settings-icon'>
|
|
<Text className='settings-icon-text'>关</Text>
|
|
</View>
|
|
<Text className='settings-label'>关于我们</Text>
|
|
<Text className='settings-arrow'>{'>'}</Text>
|
|
</View>
|
|
<View className='settings-item' onClick={handlePrivacy}>
|
|
<View className='settings-icon'>
|
|
<Text className='settings-icon-text'>隐</Text>
|
|
</View>
|
|
<Text className='settings-label'>隐私政策</Text>
|
|
<Text className='settings-arrow'>{'>'}</Text>
|
|
</View>
|
|
</View>
|
|
|
|
<View className='settings-group'>
|
|
<View className='settings-item logout-item' onClick={handleLogout}>
|
|
<Text className='settings-label logout-label'>退出登录</Text>
|
|
</View>
|
|
</View>
|
|
</PageShell>
|
|
);
|
|
}
|