From 313325553da4c0113a851a05d4d2a0d31021cd99 Mon Sep 17 00:00:00 2001 From: kkfluous Date: Tue, 28 Apr 2026 12:32:40 +0800 Subject: [PATCH] =?UTF-8?q?feat(energy):=20hydrogen=20daily=20=E2=80=94=20?= =?UTF-8?q?period=20bar=20chart=20with=20anomaly=20coloring?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mirrors the electric-view treatment: a 时段每日加氢量 bar chart sits between the customer toggle and the table. Bars use the cyan→blue gradient by default; days where |chainPct| >= 30% render in solid emerald (positive) or red (negative), giving an at-a-glance view of anomalous days that's reinforced by the table's row tinting below. Co-Authored-By: Claude Opus 4.7 (1M context) --- src/modules/energy/HydrogenDaily.tsx | 49 ++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/src/modules/energy/HydrogenDaily.tsx b/src/modules/energy/HydrogenDaily.tsx index b58fbb6..5a896f6 100644 --- a/src/modules/energy/HydrogenDaily.tsx +++ b/src/modules/energy/HydrogenDaily.tsx @@ -1,6 +1,7 @@ import { useMemo, useState } from 'react'; import { ChevronRight } from 'lucide-react'; import { motion, AnimatePresence } from 'motion/react'; +import { BarChart, Bar, XAxis, YAxis, ResponsiveContainer, Cell, Tooltip } from 'recharts'; import TrendBadge from './TrendBadge'; import { HYDROGEN_DAILY } from './mock'; import type { CustomerType, DateQuickPick, HydrogenDailyRow } from './types'; @@ -57,6 +58,9 @@ export default function HydrogenDaily() { .sort((a, b) => b.date.localeCompare(a.date)); }, [pick, customer]); + // 柱图:按日期升序,用于"从左到右时间流" + const trendData = useMemo(() => [...rows].sort((a, b) => a.date.localeCompare(b.date)), [rows]); + const totalKg = rows.reduce((a, r) => a + r.totalKg, 0); const toggle = (date: string) => setExpanded(prev => { @@ -99,6 +103,51 @@ export default function HydrogenDaily() { ))} + {/* 时段加氢量柱图 */} + {trendData.length > 0 && ( +
+
+ 时段每日加氢量 + 单位 Kg +
+ + + v.slice(5)} + tick={{ fontSize: 10, fill: '#94a3b8' }} + tickLine={false} + axisLine={false} + interval="preserveStartEnd" + minTickGap={8} + /> + + [`${Number(v ?? 0).toLocaleString('zh-CN', { maximumFractionDigits: 2 })} Kg`, '加氢量']} + labelFormatter={(d) => `日期 ${d}`} + contentStyle={{ borderRadius: 12, fontSize: 12 }} + cursor={{ fill: 'rgba(34, 211, 238, 0.06)' }} + /> + + {trendData.map((r, i) => { + const isAbnormal = Math.abs(r.chainPct) >= 0.3; + const fill = isAbnormal + ? r.chainPct > 0 ? '#10b981' : '#ef4444' + : 'url(#hydrogenBarGrad)'; + return ; + })} + + + + + + + + + +
+ )} + {/* 表格 */}
{/* 表头 */}