diff --git a/src/modules/energy/ElectricDaily.tsx b/src/modules/energy/ElectricDaily.tsx index f84b426..ef6e2fd 100644 --- a/src/modules/energy/ElectricDaily.tsx +++ b/src/modules/energy/ElectricDaily.tsx @@ -1,5 +1,5 @@ import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; -import { BatteryCharging, CalendarDays, CheckCircle2, ChevronRight, MapPin, Plug, TrendingUp, TriangleAlert, Truck, Wallet } from 'lucide-react'; +import { BatteryCharging, CalendarDays, CheckCircle2, ChevronRight, MapPin, Plug, TrendingUp, TriangleAlert, Truck, Wallet, X } from 'lucide-react'; import { motion, AnimatePresence } from 'motion/react'; import TrendBadge from './TrendBadge'; import { fetchElectricMonthly, fetchElectricOrders } from './api'; @@ -53,6 +53,7 @@ export default function ElectricDaily() { const [error, setError] = useState(null); const [orders, setOrders] = useState(null); const [ordersError, setOrdersError] = useState(null); + const orderTriggerRef = useRef(null); const effectiveRange = useMemo(() => normalizeDateRange(dateRange.start, dateRange.end), [dateRange.start, dateRange.end]); const selectedDate = drillContext.selectedDate; @@ -150,6 +151,9 @@ export default function ElectricDaily() { const toggleDate = (date: string) => { const opening = selectedDate !== date; + if (opening && document.activeElement instanceof HTMLButtonElement) { + orderTriggerRef.current = document.activeElement; + } commitDrillContext({ ...drillContext, vehicleScope, @@ -157,6 +161,19 @@ export default function ElectricDaily() { endDate: effectiveRange.end, selectedDate: opening ? date : undefined, }, opening ? 'push' : 'replace'); + window.requestAnimationFrame(() => { + if (opening) { + const details = document.getElementById(`electric-orders-${date}`); + details?.focus({ preventScroll: true }); + details?.scrollIntoView({ + behavior: window.matchMedia('(prefers-reduced-motion: reduce)').matches ? 'auto' : 'smooth', + block: 'start', + }); + } else { + const trigger = orderTriggerRef.current ?? document.getElementById(`electric-date-trigger-${date}`); + if (trigger instanceof HTMLElement) trigger.focus(); + } + }); }; useEffect(() => { @@ -291,11 +308,12 @@ export default function ElectricDaily() { return (
{selectedDate === d.date && ( -
+
+
+
+ + {d.date} 充电订单 +
+ +
{orders && reconciliation && (