diff --git a/src/modules/energy/EnergyModule.tsx b/src/modules/energy/EnergyModule.tsx index 07664a3..46ad883 100644 --- a/src/modules/energy/EnergyModule.tsx +++ b/src/modules/energy/EnergyModule.tsx @@ -1,7 +1,7 @@ import { useState } from 'react'; -import { Fuel, BatteryCharging, Receipt } from 'lucide-react'; +import { Fuel, BatteryCharging, Receipt, LayoutDashboard, CalendarDays } from 'lucide-react'; import { motion } from 'motion/react'; -import HydrogenView from './HydrogenView'; +import HydrogenView, { type HydrogenSubTab } from './HydrogenView'; import ElectricView from './ElectricView'; import ETCView from './ETCView'; @@ -13,31 +13,65 @@ const TABS: { key: TopTab; label: string; icon: typeof Fuel }[] = [ { key: 'etc', label: 'ETC', icon: Receipt }, ]; +const HYDROGEN_SUB_TABS: { id: HydrogenSubTab; 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'); return (
-
- {TABS.map(tab => { - const Icon = tab.icon; - const active = activeTab === tab.key; - return ( - - ); - })} + + {/* 统一 sticky 头部:top tab + (氢能时) 子 tab;同一张卡片,无间隙 */} +
+
+ {/* 顶部 tab:氢能 / 电能 / ETC */} +
+ {TABS.map(tab => { + const Icon = tab.icon; + const active = activeTab === tab.key; + return ( + + ); + })} +
+ {/* 子 tab:仅氢能时显示 */} + {activeTab === 'hydrogen' && ( +
+ {HYDROGEN_SUB_TABS.map(({ id, label, icon: Icon }) => { + const active = hydroSub === id; + return ( + + ); + })} +
+ )} +
- {activeTab === 'hydrogen' && } + + {activeTab === 'hydrogen' && } {activeTab === 'electric' && } {activeTab === 'etc' && }
diff --git a/src/modules/energy/HydrogenDaily.tsx b/src/modules/energy/HydrogenDaily.tsx index 76cf2fc..74aa8e5 100644 --- a/src/modules/energy/HydrogenDaily.tsx +++ b/src/modules/energy/HydrogenDaily.tsx @@ -191,13 +191,19 @@ export default function HydrogenDaily() { {r.stations.map(s => (
- - {s.name} - · {s.pricePerKg} - - {s.pricePerKg} +
+
+ {s.name} +
+ {s.pricePerKg > 0 && ( +
+ 单价 {s.pricePerKg} 元/Kg +
+ )} +
+ {s.pricePerKg > 0 ? s.pricePerKg : '—'} {s.kg.toLocaleString('zh-CN', { maximumFractionDigits: 2 })} diff --git a/src/modules/energy/HydrogenView.tsx b/src/modules/energy/HydrogenView.tsx index 07c1a92..c5a24af 100644 --- a/src/modules/energy/HydrogenView.tsx +++ b/src/modules/energy/HydrogenView.tsx @@ -1,37 +1,12 @@ -import { useState } from 'react'; -import { LayoutDashboard, CalendarDays } from 'lucide-react'; import HydrogenOverview from './HydrogenOverview'; import HydrogenDaily from './HydrogenDaily'; -type SubTab = 'daily' | 'overview'; +export type HydrogenSubTab = 'daily' | 'overview'; -const SUB_TABS: Array<{ id: SubTab; label: string; icon: typeof LayoutDashboard }> = [ - { id: 'daily', label: '每日', icon: CalendarDays }, - { id: 'overview', label: '总览', icon: LayoutDashboard }, -]; - -export default function HydrogenView() { - const [sub, setSub] = useState('daily'); - return ( - <> -
- {SUB_TABS.map(({ id, label, icon: Icon }) => { - const active = sub === id; - return ( - - ); - })} -
- {sub === 'overview' ? : } - - ); +interface Props { + sub: HydrogenSubTab; +} + +export default function HydrogenView({ sub }: Props) { + return sub === 'overview' ? : ; }