// artboard-esg.jsx — ESG · Carbon Reduction Cockpit (light green theme) // Mirrors reference: white ground, multi-tier green, China choropleth + KPIs const ChinaMapMini = ({ w = 480, h = 360 }) => { // Simplified provincial silhouette — abstract, recognisable. Levels keyed by data. // Each path is roughly positioned on a 480x360 canvas of mainland. const G = { 4: "#1F8B4C", 3: "#4FB46E", 2: "#9DD3A6", 1: "#D7EBD2", 0: "#EEF5EC" }; const provs = [ // [name, level, polygon] {n:"新疆", l:1, d:"M40 90 L130 70 L150 110 L120 160 L60 150 Z"}, {n:"西藏", l:0, d:"M70 160 L150 140 L180 180 L140 220 L80 200 Z"}, {n:"青海", l:1, d:"M150 130 L210 130 L210 175 L160 180 Z"}, {n:"甘肃", l:2, d:"M180 100 L240 80 L260 120 L220 140 L200 130 Z"}, {n:"内蒙", l:3, d:"M180 60 L320 40 L350 70 L330 95 L260 100 L210 90 Z"}, {n:"宁夏", l:1, d:"M225 110 L245 100 L255 125 L235 130 Z"}, {n:"陕西", l:3, d:"M245 110 L280 105 L290 160 L260 180 L245 145 Z"}, {n:"山西", l:2, d:"M285 90 L310 88 L320 145 L295 150 Z"}, {n:"河北", l:2, d:"M310 75 L355 70 L365 115 L325 130 L315 100 Z"}, {n:"北京", l:4, d:"M335 82 L355 80 L355 95 L338 95 Z"}, {n:"天津", l:3, d:"M358 92 L370 92 L370 105 L358 105 Z"}, {n:"辽宁", l:2, d:"M360 60 L405 55 L420 90 L385 105 L362 88 Z"}, {n:"吉林", l:1, d:"M395 35 L440 30 L450 65 L410 70 Z"}, {n:"黑龙江", l:1, d:"M390 5 L460 0 L470 35 L420 40 Z"}, {n:"山东", l:3, d:"M325 130 L380 125 L390 165 L335 165 Z"}, {n:"河南", l:3, d:"M280 155 L330 150 L335 195 L290 200 Z"}, {n:"江苏", l:3, d:"M345 165 L390 165 L395 200 L350 205 Z"}, {n:"上海", l:4, d:"M390 195 L405 195 L405 210 L390 210 Z"}, {n:"安徽", l:3, d:"M315 195 L350 200 L355 235 L320 235 Z"}, {n:"浙江", l:4, d:"M370 210 L400 210 L405 245 L375 245 Z"}, {n:"湖北", l:3, d:"M270 195 L320 200 L320 235 L275 230 Z"}, {n:"四川", l:2, d:"M195 175 L260 170 L270 230 L210 225 L195 205 Z"}, {n:"重庆", l:2, d:"M250 215 L275 210 L275 230 L255 232 Z"}, {n:"贵州", l:2, d:"M225 235 L275 235 L275 265 L235 265 Z"}, {n:"云南", l:2, d:"M170 240 L235 235 L240 285 L185 290 L160 270 Z"}, {n:"湖南", l:3, d:"M275 235 L320 235 L320 270 L280 270 Z"}, {n:"江西", l:3, d:"M320 235 L360 235 L365 275 L325 275 Z"}, {n:"福建", l:3, d:"M360 245 L395 245 L395 285 L360 280 Z"}, {n:"广东", l:4, d:"M270 270 L355 275 L355 305 L280 305 Z"}, {n:"广西", l:2, d:"M210 270 L275 270 L275 305 L215 305 Z"}, {n:"海南", l:1, d:"M250 320 L275 320 L275 340 L250 340 Z"}, {n:"台湾", l:0, d:"M395 270 L410 270 L410 300 L398 300 Z"}, ]; return ( {/* sea-line decoration */} {provs.map((p,i) => ( ))} {/* highlighted city marker — Beijing */} {/* Shanghai */} {/* Guangzhou */} {/* Compass / scale */} 800 km ); }; // Curve helpers const ESGSpark = ({ data, w, h, color = "#1F8B4C", fill = true, baseline = 0 }) => { const max = Math.max(...data) * 1.1, min = Math.min(...data, 0); const range = max - min || 1; const pts = data.map((v,i) => `${(i/(data.length-1))*w},${h - ((v-min)/range)*(h-baseline) - baseline}`); const d = "M" + pts.join(" L"); const fillD = d + ` L${w},${h} L0,${h} Z`; return ( {fill && } ); }; const ESGBars = ({ data, w, h, color = "#1F8B4C", labels }) => { const max = Math.max(...data) * 1.15; const bw = w / data.length * 0.62; const gap = w / data.length * 0.38; return ( {/* y gridlines */} {[0, 0.25, 0.5, 0.75, 1].map((p,i) => ( ))} {data.map((v,i) => { const bh = (v / max) * (h * 0.85); const x = i * (bw + gap) + gap/2; const y = h - bh - 14; return ( {labels && {labels[i]}} ); })} ); }; const DonutSeg = ({ size = 140, segments, label }) => { const r = size/2 - 12, cx = size/2, cy = size/2; const total = segments.reduce((a,s) => a + s.v, 0); let acc = 0; return ( {segments.map((s,i) => { const start = (acc / total) * Math.PI * 2 - Math.PI/2; acc += s.v; const end = (acc / total) * Math.PI * 2 - Math.PI/2; const large = (end - start) > Math.PI ? 1 : 0; const x1 = cx + r * Math.cos(start), y1 = cy + r * Math.sin(start); const x2 = cx + r * Math.cos(end), y2 = cy + r * Math.sin(end); return ( ); })} 合计 {label} ); }; const ArtboardESG = () => { // mock data const monthlyReduction = [0.95, 1.10, 1.32, 1.55, 1.42, 1.38, 0, 0, 0, 0, 0, 0]; // 吨 const monthLabels = ["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"]; const mileageMonthly = [120, 145, 168, 152, 195, 180, 0,0,0,0,0,0]; const h2Monthly = [180, 220, 255, 235, 290, 270, 0,0,0,0,0,0]; const vehicles = [ {p:"浙F·8A03F", km:"18,250 km", h2:"257 m³", reduction:"24.38 kg", revenue:"18.785 元"}, {p:"浙F·2C57G", km:"5,367 km", h2:"75 m³", reduction:"7.13 kg", revenue:"181.785 元"}, {p:"浙F·9D14B", km:"45,000 km", h2:"234 m³", reduction:"12.82 kg", revenue:"194.382 元"}, {p:"浙F·6E72H", km:"55,387 km", h2:"218 m³", reduction:"17.94 kg", revenue:"152.578 元"}, {p:"浙F·1B49K", km:"55,925 km", h2:"203 m³", reduction:"17.87 kg", revenue:"148.392 元"}, {p:"浙F·4F88M", km:"887,820 km",h2:"152 m³", reduction:"9.6 kg", revenue:"73.627 元"}, {p:"浙F·7G31N", km:"3,762 km", h2:"134 m³", reduction:"13.91 kg", revenue:"66.991 元"}, {p:"浙F·3H56P", km:"30,058 km", h2:"125 m³", reduction:"13.87 kg", revenue:"82.578 元"}, {p:"浙F·5J92Q", km:"3,701 km", h2:"121 m³", reduction:"8.49 kg", revenue:"103.928 元"}, {p:"浙F·8K27R", km:"5,829 km", h2:"165 m³", reduction:"15.62 kg", revenue:"76.354 元"}, {p:"浙F·2L68S", km:"73,587 km", h2:"185 m³", reduction:"4.85 kg", revenue:"54.812 元"}, {p:"浙F·9M03T", km:"38,747 km", h2:"168 m³", reduction:"11.57 kg", revenue:"72.836 元"}, ]; const trades = [ {ex:"上海环境能源交易所", item:"SHEA", price:"74.28", region:"中国·上海"}, {ex:"湖北碳排放权交易中心", item:"CCER", price:"39.33", region:"中国·武汉"}, {ex:"全国碳市场自愿减排", item:"CCER", price:"86.55", region:"全国"}, {ex:"福建海峡股权交易中心", item:"碳排放配额", price:"25", region:"中国·福州"}, {ex:"天津排放权交易所", item:"碳排放配额", price:"73.60", region:"中国·天津"}, {ex:"广东省碳排放权交易所", item:"碳排放配额", price:"82.50", region:"中国·广州"}, ]; const fleetMix = [ {n:"4.5吨冷链车", v:36.2, c:"#1F8B4C"}, {n:"18吨重卡", v:4.0, c:"#9DD3A6"}, {n:"49吨牵引车", v:21.7, c:"#4FB46E"}, {n:"18吨厢式物流车",v:29.5, c:"#76C18B"}, {n:"4.5吨货车", v:6.6, c:"#C5E2BD"}, {n:"客车", v:2.1, c:"#E5F1DF"}, ]; return (
{/* Top brand bar */}
羚牛氢能 Lingniu
HYDROGEN
MOBILITY
Lingniu ESG Link
2026-04-28 周二 12:15:13
{/* Body grid */}
{/* ── LEFT COLUMN ── */}
{/* Two top KPIs: emissions & H₂ */}
当日减碳量
29486.78kg
当日H₂用量
974.7kg
{/* Annual cumulative reduction — hero card */}
今年累计减碳
4567.14
相当于种植 18.5 万棵树
{/* abstract tree silhouette */} {[...Array(28)].map((_,i) => { const x = i*10 + 4; const heights = [22, 30, 26, 34, 28, 32, 24, 36, 30, 28, 32, 26, 34, 30]; const h = heights[i % heights.length]; return ( ); })}
{/* Monthly reduction bars */}
月度碳减排 单位 · 吨
{/* Monthly mileage / H2 */}
月度行驶里程 & 用氢量
用氢量 行驶里程 kg / km
{[0, 0.25, 0.5, 0.75, 1].map((p,i) => ( ))} {[0, 0.25, 0.5, 0.75, 1].map((p,i) => ( {Math.round(p*400)} ))} {/* Curves */} {(() => { const m = (arr, max) => arr.map((v,i)=>`${(i/(arr.length-1))*350},${120 - (v/max)*100}`); const p1 = "M" + m(h2Monthly, 400).join(" L"); const p2 = "M" + m(mileageMonthly, 250).join(" L"); return ( <> ); })()} {monthLabels.map((l,i) => ( {l} ))}
{/* ── CENTER COLUMN ── */}
{/* Map panel */}
羚牛全国车辆信息 加氢站
实时反馈
{/* Overlay info card */}
呼和浩特市钢铁工业园区
GPS实时数
17
当日总减碳
2469.62 kg
当日加氢量
9.31 kg
当日里程
724.6 kg
{/* Legend */}
车辆数
{[ {l:"≥ 300 辆", c:"#1F8B4C"}, {l:"100–300 辆", c:"#4FB46E"}, {l:"50–100 辆", c:"#9DD3A6"}, {l:"< 50 辆", c:"#D7EBD2"}, ].map((x,i) => (
{x.l}
))}
{/* Carbon trades table */}
碳交易行情 实时报价
{trades.map((t,i) => ( ))}
交易所项目价格 (RMB)地区
{t.ex} {t.item} {t.price} {t.region}
{/* ── RIGHT COLUMN ── */}
{/* Two top KPIs: vehicle total & cumulative mileage */}
车辆总数
1006
当日行驶里程
64508.42km
{/* Vehicle live monitor table */}
车辆实时监控 · LIVE
{vehicles.map((v,i) => ( ))}
车牌号总里程当日里程当日减碳
{v.p} {v.km} {v.h2} {v.reduction}
{/* Fleet mix donut */}
车型结构分析
{fleetMix.map((f,i) => (
{f.n} {f.v}%
))}
{/* Footer */}
© 2026 羚牛氢能 · Lingniu Hydrogen Mobility · All Rights Reserved · API 接口处理 · Build v4.2.0-stable
); }; window.ArtboardESG = ArtboardESG;