/** * 主控台首頁 */ 'use client' import { useSession } from 'next-auth/react' import { useEffect, useState } from 'react' import apiClient from '@/lib/api-client' interface DashboardStats { employeeCount: number topDeptCount: number totalDeptCount: number pendingTaskCount: number } export default function DashboardPage() { const { data: session } = useSession() const [stats, setStats] = useState({ employeeCount: 0, topDeptCount: 0, totalDeptCount: 0, pendingTaskCount: 0, }) const [loading, setLoading] = useState(true) useEffect(() => { const fetchStats = async () => { try { setLoading(true) // 員工數量 const employeesData: any = await apiClient.get('/employees/') // 部門統計 (新架構: 從 tree API 取得) let topDeptCount = 0 let totalDeptCount = 0 try { const treeData: any = await apiClient.get('/departments/tree') if (Array.isArray(treeData)) { topDeptCount = treeData.length const countAllNodes = (nodes: any[]): number => { return nodes.reduce((sum: number, node: any) => { return sum + 1 + (node.children ? countAllNodes(node.children) : 0) }, 0) } totalDeptCount = countAllNodes(treeData) } } catch (error) { console.warn('Failed to fetch department tree:', error) } setStats({ employeeCount: employeesData?.total || 0, topDeptCount, totalDeptCount, pendingTaskCount: 0, }) } catch (error) { console.error('Failed to fetch dashboard stats:', error) } finally { setLoading(false) } } if (session) { fetchStats() } }, [session]) const statCards = [ { name: '在職員工', value: loading ? '...' : stats.employeeCount.toString(), icon: ( ), color: 'bg-blue-500', }, { name: '第一層部門數', value: loading ? '...' : stats.topDeptCount.toString(), icon: ( ), color: 'bg-green-500', }, { name: '部門總數', value: loading ? '...' : stats.totalDeptCount.toString(), icon: ( ), color: 'bg-purple-500', }, { name: '待處理事項', value: loading ? '...' : stats.pendingTaskCount.toString(), icon: ( ), color: 'bg-orange-500', }, ] return (

歡迎回來!

{session?.user?.name || '管理員'},這是您的 HR Portal 主控台

{/* 統計卡片 */}
{statCards.map((stat) => (

{stat.name}

{stat.value}

{stat.icon}
))}
{/* 快速操作 */}

快速操作

{/* 最近活動 */}

最近活動

系統初始化完成

準備開始使用 HR Portal

剛剛

) }