import { useState } from 'react'; import { Fuel, BatteryCharging, Receipt, LayoutDashboard, CalendarDays } from 'lucide-react'; import { motion } from 'motion/react'; import HydrogenView, { type HydrogenSubTab } from './HydrogenView'; import ElectricView, { type ElectricSubTab } from './ElectricView'; import ETCView from './ETCView'; type TopTab = 'hydrogen' | 'electric' | 'etc'; type SubTabId = HydrogenSubTab | ElectricSubTab; // 'daily' | 'overview' const TABS: { key: TopTab; label: string; icon: typeof Fuel }[] = [ { key: 'hydrogen', label: '氢能', icon: Fuel }, { key: 'electric', label: '电能', icon: BatteryCharging }, { key: 'etc', label: 'ETC', icon: Receipt }, ]; const SUB_TABS: { id: SubTabId; label: string; icon: typeof LayoutDashboard }[] = [ { id: 'daily', label: '每日', icon: CalendarDays }, { id: 'overview', label: '总览', icon: LayoutDashboard }, ]; export default function EnergyModule() { const [activeTab, setActiveTab] = useState('hydrogen'); const [hydroSub, setHydroSub] = useState('daily'); const [electricSub, setElectricSub] = useState('daily'); const showSubTabs = activeTab === 'hydrogen' || activeTab === 'electric'; const currentSub: SubTabId = activeTab === 'electric' ? electricSub : hydroSub; const setSub = (id: SubTabId) => activeTab === 'electric' ? setElectricSub(id) : setHydroSub(id); return (
{/* 统一 sticky 头部:top tab + (氢能时) 子 tab;同一张卡片,无间隙 */} {/* pb-4 留一点底部缓冲,避免下方快捷选按钮在滚动时贴着 sticky 半截露脸 */}
{/* 顶部 tab:氢能 / 电能 / ETC */}
{TABS.map(tab => { const Icon = tab.icon; const active = activeTab === tab.key; return ( ); })}
{/* 子 tab:氢能 / 电能 都显示 每日 / 总览 */} {showSubTabs && (
{SUB_TABS.map(({ id, label, icon: Icon }) => { const active = currentSub === id; return ( ); })}
)}
{activeTab === 'hydrogen' && } {activeTab === 'electric' && } {activeTab === 'etc' && }
); }