From 81c174a90248ec7ecbb6fb9f12a7dbd941f62c23 Mon Sep 17 00:00:00 2001 From: iven Date: Fri, 8 May 2026 17:34:42 +0800 Subject: [PATCH] =?UTF-8?q?fix(miniprogram):=20=E4=BF=AE=E5=A4=8D=E5=A4=9A?= =?UTF-8?q?=E8=A7=92=E8=89=B2=E6=89=BE=E8=8C=AC=E6=B5=8B=E8=AF=95=20V3=20?= =?UTF-8?q?=E5=8F=91=E7=8E=B0=E7=9A=84=208=20=E4=B8=AA=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. EmptyState 默认 emoji 📭 → serif 首字圆形图标(影响 23 处使用) 2. 预约页英文副标题 "Appointment" 移除 3. consultation 页技术错误信息直接渲染到 UI → 用户友好提示 4. auth store restore() 增加 fallback:secureGet 失败时读 wx.getStorageSync 5. request.ts 新增 safeGet():token/tenantId 读取容错 6. doctor/consultation useMemo 自引用死循环 → Math.ceil(total/20) 7. doctor/alerts 同样自引用 bug 修复 8. doctor/patients 死代码 totalPages + useMemo import 清理 --- .../src/components/EmptyState/index.scss | 17 +++++++++++++++-- .../src/components/EmptyState/index.tsx | 7 +++++-- .../miniprogram/src/pages/appointment/index.tsx | 1 - .../src/pages/consultation/index.tsx | 5 ++--- .../src/pages/doctor/alerts/index.tsx | 2 +- .../src/pages/doctor/consultation/index.tsx | 2 +- .../src/pages/doctor/patients/index.tsx | 2 -- apps/miniprogram/src/services/request.ts | 12 ++++++++++-- apps/miniprogram/src/stores/auth.ts | 4 ++-- 9 files changed, 36 insertions(+), 16 deletions(-) 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;