diff --git a/apps/miniprogram/src/components/EmptyState/index.scss b/apps/miniprogram/src/components/EmptyState/index.scss index 9741d02..efa59ba 100644 --- a/apps/miniprogram/src/components/EmptyState/index.scss +++ b/apps/miniprogram/src/components/EmptyState/index.scss @@ -8,11 +8,24 @@ padding: 120px 40px; } -.empty-state-icon { - font-size: 80px; +.empty-state-icon-wrap { + width: 120px; + height: 120px; + border-radius: 50%; + background: $surface-alt; + display: flex; + align-items: center; + justify-content: center; margin-bottom: 24px; } +.empty-state-icon-char { + font-family: Georgia, 'Times New Roman', serif; + font-size: 48px; + font-weight: 600; + color: $tx3; +} + .empty-state-text { font-size: 30px; color: $tx2; diff --git a/apps/miniprogram/src/components/EmptyState/index.tsx b/apps/miniprogram/src/components/EmptyState/index.tsx index defe12c..fc31406 100644 --- a/apps/miniprogram/src/components/EmptyState/index.tsx +++ b/apps/miniprogram/src/components/EmptyState/index.tsx @@ -11,15 +11,18 @@ interface EmptyStateProps { } export default React.memo(function EmptyState({ - icon = '📭', + icon, text, hint, actionText, onAction, }: EmptyStateProps) { + const displayChar = icon || text.charAt(0); return ( - {icon} + + {displayChar} + {text} {hint && {hint}} {actionText && onAction && ( diff --git a/apps/miniprogram/src/pages/appointment/index.tsx b/apps/miniprogram/src/pages/appointment/index.tsx index ac9ea69..77951b3 100644 --- a/apps/miniprogram/src/pages/appointment/index.tsx +++ b/apps/miniprogram/src/pages/appointment/index.tsx @@ -90,7 +90,6 @@ export default function AppointmentList() { {/* 页面标题 */} 预约挂号 - Appointment {/* 预约列表 */} diff --git a/apps/miniprogram/src/pages/consultation/index.tsx b/apps/miniprogram/src/pages/consultation/index.tsx index 91883fd..c4116a5 100644 --- a/apps/miniprogram/src/pages/consultation/index.tsx +++ b/apps/miniprogram/src/pages/consultation/index.tsx @@ -52,9 +52,8 @@ export default function Consultation() { } setTotal(resp.total || 0); setPage(pageNum); - } catch (e: unknown) { - const msg = e instanceof Error ? e.message : '加载失败'; - setError(msg); + } catch { + setError('加载失败,请稍后重试'); } finally { setLoading(false); loadingRef.current = false; diff --git a/apps/miniprogram/src/pages/doctor/alerts/index.tsx b/apps/miniprogram/src/pages/doctor/alerts/index.tsx index 91f280c..53b1e94 100644 --- a/apps/miniprogram/src/pages/doctor/alerts/index.tsx +++ b/apps/miniprogram/src/pages/doctor/alerts/index.tsx @@ -34,7 +34,7 @@ export default function AlertList() { const [total, setTotal] = useState(0); const [page, setPage] = useState(1); - const totalPages = useMemo(() => totalPages, [total]); + const totalPages = useMemo(() => Math.ceil(total / 20), [total]); useEffect(() => { loadAlerts(); diff --git a/apps/miniprogram/src/pages/doctor/consultation/index.tsx b/apps/miniprogram/src/pages/doctor/consultation/index.tsx index 98dc22b..b76c2e3 100644 --- a/apps/miniprogram/src/pages/doctor/consultation/index.tsx +++ b/apps/miniprogram/src/pages/doctor/consultation/index.tsx @@ -22,7 +22,7 @@ export default function ConsultationList() { const [total, setTotal] = useState(0); const [page, setPage] = useState(1); - const totalPages = useMemo(() => totalPages, [total]); + const totalPages = useMemo(() => Math.ceil(total / 20), [total]); useEffect(() => { loadSessions(); diff --git a/apps/miniprogram/src/pages/doctor/patients/index.tsx b/apps/miniprogram/src/pages/doctor/patients/index.tsx index a8d8b69..ce9dd3b 100644 --- a/apps/miniprogram/src/pages/doctor/patients/index.tsx +++ b/apps/miniprogram/src/pages/doctor/patients/index.tsx @@ -95,8 +95,6 @@ export default function PatientList() { return `${age}岁`; }; - const totalPages = useMemo(() => Math.ceil(total / 20), [total]); - if (loading && patients.length === 0) return ; return ( diff --git a/apps/miniprogram/src/services/request.ts b/apps/miniprogram/src/services/request.ts index 9d9653b..14d11f2 100644 --- a/apps/miniprogram/src/services/request.ts +++ b/apps/miniprogram/src/services/request.ts @@ -9,13 +9,21 @@ interface ApiResponse { message?: string; } +function safeGet(key: string): string { + try { + return secureGet(key); + } catch { + return Taro.getStorageSync(key) || ''; + } +} + async function getHeaders(): Promise> { const headers: Record = { 'Content-Type': 'application/json' }; - const token = secureGet('access_token'); + const token = safeGet('access_token'); if (token) headers['Authorization'] = `Bearer ${token}`; const patientId = Taro.getStorageSync('current_patient_id'); if (patientId) headers['X-Patient-Id'] = patientId; - const tenantId = secureGet('tenant_id'); + const tenantId = safeGet('tenant_id'); if (tenantId) headers['X-Tenant-Id'] = tenantId; return headers; } diff --git a/apps/miniprogram/src/stores/auth.ts b/apps/miniprogram/src/stores/auth.ts index 2d1dbe0..39866bd 100644 --- a/apps/miniprogram/src/stores/auth.ts +++ b/apps/miniprogram/src/stores/auth.ts @@ -71,9 +71,9 @@ export const useAuthStore = create((set, get) => ({ let user: AuthState['user'] = null; let roles: string[] = []; try { - const userData = secureGet('user_data'); + const userData = secureGet('user_data') || Taro.getStorageSync('user_data'); if (userData) user = JSON.parse(userData); - const rolesData = secureGet('user_roles'); + const rolesData = secureGet('user_roles') || Taro.getStorageSync('user_roles'); if (rolesData) roles = JSON.parse(rolesData); } catch { /* secure storage 不可用时保持默认值 */ } const currentPatient = Taro.getStorageSync('current_patient') || null;