fix(mp): 五专家组审查 HIGH 级问题修复 — 9 项

- S-1: 隐私政策描述修正("混淆加密" → "HTTPS + 微信沙箱")
- A-1: getCachedPatientId 统一导出 + 9 处 Storage 直读替换
- A-2: usePageData loading 改为 useState 响应式
- A-3: health.ts refreshingToday 移入 store state
- M-2: prod config 移除 console.error/warn
- M-4: clearCache 后同步刷新 request.ts 内存缓存
- Q-3: doctor/appointment.ts any[] → Appointment 类型
- Q-4: daily-monitoring 常量提取到 constants.ts
- 清理: 删除空目录 FamilyPicker/HealthCard + 未使用组件 DeviceCard
This commit is contained in:
iven
2026-05-15 09:17:36 +08:00
parent 9bd2d4c2e6
commit dc983945ff
19 changed files with 93 additions and 166 deletions

View File

@@ -0,0 +1,42 @@
export const BP_RANGE = { min: 30, minMsg: '血压值不能低于30', max: 300, maxMsg: '血压值不能高于300', optional: true };
export const WEIGHT_RANGE = { min: 1, minMsg: '体重不能低于1kg', max: 500, maxMsg: '体重不能高于500kg', optional: true };
export const SUGAR_RANGE = { min: 0.1, minMsg: '血糖值不能低于0.1', max: 50, maxMsg: '血糖值不能高于50', optional: true };
export const VOLUME_RANGE = { min: 0, minMsg: '数值不能为负', max: 10000, maxMsg: '数值超出合理范围', optional: true };
export const REFERENCE_RANGES: Record<string, { min: number; max: number } | null> = {
systolic: { min: 90, max: 140 },
diastolic: { min: 60, max: 90 },
bloodSugar: { min: 3.9, max: 6.1 },
weight: null,
fluidIntake: null,
urineOutput: null,
};
export type AbnormalResult = { abnormal: boolean; direction: 'high' | 'low' | null };
export const checkAbnormal = (value: string, field: string): AbnormalResult => {
const ref = REFERENCE_RANGES[field];
if (!value || !ref) return { abnormal: false, direction: null };
const num = parseFloat(value);
if (isNaN(num)) return { abnormal: false, direction: null };
if (num > ref.max) return { abnormal: true, direction: 'high' };
if (num < ref.min) return { abnormal: true, direction: 'low' };
return { abnormal: false, direction: null };
};
export type SectionKey = 'morning' | 'evening' | 'other';
export const FIELD_LABELS: Record<string, string> = {
morningSystolic: '晨间收缩压',
morningDiastolic: '晨间舒张压',
eveningSystolic: '晚间收缩压',
eveningDiastolic: '晚间舒张压',
bloodSugar: '血糖',
};
export function formatDate(date: Date): string {
const y = date.getFullYear();
const m = String(date.getMonth() + 1).padStart(2, '0');
const d = String(date.getDate()).padStart(2, '0');
return `${y}-${m}-${d}`;
}

View File

@@ -9,56 +9,14 @@ import { usePointsStore } from '@/stores/points';
import { clearRequestCache } from '@/services/request';
import { trackEvent } from '@/services/analytics';
import { useSafeTimeout } from '@/hooks/useSafeTimeout';
import { useElderClass } from '../../../hooks/useElderClass';
import { useElderClass } from '@/hooks/useElderClass';
import {
BP_RANGE, WEIGHT_RANGE, SUGAR_RANGE, VOLUME_RANGE,
checkAbnormal, formatDate, FIELD_LABELS,
type SectionKey, type AbnormalResult,
} from './constants';
import './index.scss';
const BP_RANGE = { min: 30, minMsg: '血压值不能低于30', max: 300, maxMsg: '血压值不能高于300', optional: true };
const WEIGHT_RANGE = { min: 1, minMsg: '体重不能低于1kg', max: 500, maxMsg: '体重不能高于500kg', optional: true };
const SUGAR_RANGE = { min: 0.1, minMsg: '血糖值不能低于0.1', max: 50, maxMsg: '血糖值不能高于50', optional: true };
const VOLUME_RANGE = { min: 0, minMsg: '数值不能为负', max: 10000, maxMsg: '数值超出合理范围', optional: true };
function formatDate(date: Date): string {
const y = date.getFullYear();
const m = String(date.getMonth() + 1).padStart(2, '0');
const d = String(date.getDate()).padStart(2, '0');
return `${y}-${m}-${d}`;
}
// ── Abnormal value detection ──
const REFERENCE_RANGES: Record<string, { min: number; max: number } | null> = {
systolic: { min: 90, max: 140 },
diastolic: { min: 60, max: 90 },
bloodSugar: { min: 3.9, max: 6.1 },
weight: null,
fluidIntake: null,
urineOutput: null,
};
type AbnormalResult = { abnormal: boolean; direction: 'high' | 'low' | null };
const checkAbnormal = (value: string, field: string): AbnormalResult => {
const ref = REFERENCE_RANGES[field];
if (!value || !ref) return { abnormal: false, direction: null };
const num = parseFloat(value);
if (isNaN(num)) return { abnormal: false, direction: null };
if (num > ref.max) return { abnormal: true, direction: 'high' };
if (num < ref.min) return { abnormal: true, direction: 'low' };
return { abnormal: false, direction: null };
};
// ── Section state type ──
type SectionKey = 'morning' | 'evening' | 'other';
const FIELD_LABELS: Record<string, string> = {
morningSystolic: '晨间收缩压',
morningDiastolic: '晨间舒张压',
eveningSystolic: '晚间收缩压',
eveningDiastolic: '晚间舒张压',
bloodSugar: '血糖',
};
export default function DailyMonitoring() {
const modeClass = useElderClass();
const currentPatient = useAuthStore((s) => s.currentPatient);