fix: 员工端身份证号显示兼容旧登录——从 home/overview 获取 fallback
- EmployeeHome.tsx: 使用 overview.employeeIdCardNumber 作为 fallback - PortalLayout.tsx: 获取 overview 数据作为 idCardNumber fallback - 两者都会在获取到后同步更新 localStorage,避免重复请求
This commit is contained in:
@@ -4,7 +4,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Link, useLocation, useNavigate } from 'react-router-dom'
|
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 { DollarSign, FileText, ScrollText, LogOut, CalendarCheck, Home } from 'lucide-react'
|
||||||
|
import { portalApi } from '../../lib/api-services'
|
||||||
|
|
||||||
const tabItems = [
|
const tabItems = [
|
||||||
{ path: '/portal/home', label: '首页', icon: Home },
|
{ 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 {} }
|
try { return JSON.parse(localStorage.getItem('portalEmployee') || '{}') } catch { return {} }
|
||||||
})()
|
})()
|
||||||
|
|
||||||
|
// 获取 overview 数据作为 idCardNumber fallback(旧登录 localStorage 可能没有 idCardNumber)
|
||||||
|
const { data: overview } = useQuery<any>({
|
||||||
|
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 = () => {
|
const handleLogout = () => {
|
||||||
localStorage.removeItem('portalToken')
|
localStorage.removeItem('portalToken')
|
||||||
localStorage.removeItem('portalEmployee')
|
localStorage.removeItem('portalEmployee')
|
||||||
@@ -38,7 +53,7 @@ export default function PortalLayout({ children }: { children: React.ReactNode }
|
|||||||
</div>
|
</div>
|
||||||
<div className="flex items-center gap-2 flex-shrink-0">
|
<div className="flex items-center gap-2 flex-shrink-0">
|
||||||
{employee.name && (
|
{employee.name && (
|
||||||
<span className="text-xs text-gray-500 truncate max-w-[120px]">{employee.name}{employee.idCardNumber ? `(${employee.idCardNumber})` : ''}</span>
|
<span className="text-xs text-gray-500 truncate max-w-[120px]">{employee.name}{idCardNumber ? `(${idCardNumber})` : ''}</span>
|
||||||
)}
|
)}
|
||||||
<button
|
<button
|
||||||
onClick={handleLogout}
|
onClick={handleLogout}
|
||||||
|
|||||||
@@ -54,15 +54,24 @@ export default function EmployeeHome() {
|
|||||||
const announcements = overview?.announcements || []
|
const announcements = overview?.announcements || []
|
||||||
const attendanceSummary = overview?.attendance
|
const attendanceSummary = overview?.attendance
|
||||||
|
|
||||||
|
// 如果 localStorage 中没有 idCardNumber,但 overview 返回了,则更新 localStorage
|
||||||
|
const idCardNumber = employee.idCardNumber || overview?.employeeIdCardNumber
|
||||||
|
if (idCardNumber && !employee.idCardNumber) {
|
||||||
|
try {
|
||||||
|
const updated = { ...employee, idCardNumber }
|
||||||
|
localStorage.setItem('portalEmployee', JSON.stringify(updated))
|
||||||
|
} catch {}
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="space-y-4">
|
<div className="space-y-4">
|
||||||
{/* 欢迎卡片 */}
|
{/* 欢迎卡片 */}
|
||||||
<Card className="bg-gradient-to-br from-indigo-600 to-indigo-700 text-white border-0">
|
<Card className="bg-gradient-to-br from-indigo-600 to-indigo-700 text-white border-0">
|
||||||
<div className="flex items-center justify-between">
|
<div className="flex items-center justify-between">
|
||||||
<div>
|
<div>
|
||||||
<h1 className="text-lg font-bold">你好,{employee.name || '同事'}</h1>
|
<h1 className="text-lg font-bold">你好,{employee.name || overview?.employeeName || '同事'}</h1>
|
||||||
<p className="text-sm text-indigo-100 mt-1">{employee.department || ''} · {employee.position || ''}</p>
|
<p className="text-sm text-indigo-100 mt-1">{employee.department || ''} · {employee.position || ''}</p>
|
||||||
{employee.idCardNumber && <p className="text-xs text-indigo-200 mt-0.5 font-mono">{employee.idCardNumber}</p>}
|
{idCardNumber && <p className="text-xs text-indigo-200 mt-0.5 font-mono">{idCardNumber}</p>}
|
||||||
</div>
|
</div>
|
||||||
<div className="text-right">
|
<div className="text-right">
|
||||||
<div className="text-xs text-indigo-100">本月实发</div>
|
<div className="text-xs text-indigo-100">本月实发</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user