diff --git a/backend/main.py b/backend/main.py index 7a8b8f7..9e311c5 100644 --- a/backend/main.py +++ b/backend/main.py @@ -309,6 +309,7 @@ def calculate_attendance_status(check_in, check_out, shift_start, shift_end): result["status_text"] = " / ".join(status_parts) if status_parts else "正常" + return result @app.get("/api/attendance/lateness") async def get_lateness_stats(current_user: User = Depends(get_current_user)): """Calculate full attendance statistics: late, early, OT""" diff --git a/frontend/src/pages/Dashboard.jsx b/frontend/src/pages/Dashboard.jsx index a1f305b..29d9125 100644 --- a/frontend/src/pages/Dashboard.jsx +++ b/frontend/src/pages/Dashboard.jsx @@ -2,6 +2,7 @@ import { useState, useEffect } from 'react' import { Link } from 'react-router-dom' import api from '../api' import { Users, AlertTriangle, FileSpreadsheet, RefreshCw, TrendingUp, MapPin, Clock, AlertCircle, FileCode } from 'lucide-react' +import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, PieChart, Pie, Cell, LineChart, Line } from 'recharts' const handleExportHTML = (section) => { const token = localStorage.getItem('aars_token') @@ -9,7 +10,6 @@ const handleExportHTML = (section) => { window.open(`/api/report/${section}/html?token=${token}`, '_blank') } } -import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, PieChart, Pie, Cell, LineChart, Line } from 'recharts' const COLORS = ['#3b82f6', '#ef4444', '#22c55e', '#f59e0b', '#8b5cf6', '#ec4899', '#06b6d4', '#84cc16']