From 5db53ed59189f179881c1e394ec9ef58962d5d7f Mon Sep 17 00:00:00 2001 From: freedakgmail Date: Tue, 18 Aug 2026 07:57:54 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=91=98=E5=B7=A5=E7=AB=AF=E8=BA=AB?= =?UTF-8?q?=E4=BB=BD=E8=AF=81=E5=8F=B7=E6=98=BE=E7=A4=BA=E5=85=BC=E5=AE=B9?= =?UTF-8?q?=E6=97=A7=E7=99=BB=E5=BD=95=E2=80=94=E2=80=94=E4=BB=8E=20home/o?= =?UTF-8?q?verview=20=E8=8E=B7=E5=8F=96=20fallback?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - EmployeeHome.tsx: 使用 overview.employeeIdCardNumber 作为 fallback - PortalLayout.tsx: 获取 overview 数据作为 idCardNumber fallback - 两者都会在获取到后同步更新 localStorage,避免重复请求 --- frontend/src/components/layout/PortalLayout.tsx | 17 ++++++++++++++++- frontend/src/pages/portal/EmployeeHome.tsx | 13 +++++++++++-- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/frontend/src/components/layout/PortalLayout.tsx b/frontend/src/components/layout/PortalLayout.tsx index 67087c9..f69a59a 100644 --- a/frontend/src/components/layout/PortalLayout.tsx +++ b/frontend/src/components/layout/PortalLayout.tsx @@ -4,7 +4,9 @@ */ import { Link, useLocation, useNavigate } from 'react-router-dom' +import { useQuery } from '@tanstack/react-query' import { DollarSign, FileText, ScrollText, LogOut, CalendarCheck, Home } from 'lucide-react' +import { portalApi } from '../../lib/api-services' const tabItems = [ { path: '/portal/home', label: '首页', icon: Home }, @@ -22,6 +24,19 @@ export default function PortalLayout({ children }: { children: React.ReactNode } try { return JSON.parse(localStorage.getItem('portalEmployee') || '{}') } catch { return {} } })() + // 获取 overview 数据作为 idCardNumber fallback(旧登录 localStorage 可能没有 idCardNumber) + const { data: overview } = useQuery({ + queryKey: ['portal-home-overview'], + queryFn: async () => portalApi.homeOverview(), + staleTime: 300000, + }) + const idCardNumber = employee.idCardNumber || overview?.employeeIdCardNumber + if (idCardNumber && !employee.idCardNumber) { + try { + localStorage.setItem('portalEmployee', JSON.stringify({ ...employee, idCardNumber })) + } catch {} + } + const handleLogout = () => { localStorage.removeItem('portalToken') localStorage.removeItem('portalEmployee') @@ -38,7 +53,7 @@ export default function PortalLayout({ children }: { children: React.ReactNode }
{employee.name && ( - {employee.name}{employee.idCardNumber ? `(${employee.idCardNumber})` : ''} + {employee.name}{idCardNumber ? `(${idCardNumber})` : ''} )}