// 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 (
);
};
// 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 (
);
};
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 (
);
};
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 (
);
};
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·8A03FD", km:"18,250 km", h2:"287 km", reduction:"24.38 kg", revenue:"18.785 元"},
{p:"浙F·2C57GD", km:"5,367 km", h2:"83 km", reduction:"7.13 kg", revenue:"181.785 元"},
{p:"浙F·9D14BD", km:"45,000 km", h2:"152 km", reduction:"12.82 kg", revenue:"194.382 元"},
{p:"浙F·6E72HD", km:"55,387 km", h2:"214 km", reduction:"17.94 kg", revenue:"152.578 元"},
{p:"浙F·1B49KD", km:"55,925 km", h2:"212 km", reduction:"17.87 kg", revenue:"148.392 元"},
{p:"浙F·4F88MD", km:"887,820 km",h2:"114 km", reduction:"9.6 kg", revenue:"73.627 元"},
{p:"浙F·7G31ND", km:"3,762 km", h2:"165 km", reduction:"13.91 kg", revenue:"66.991 元"},
{p:"浙F·3H56PD", km:"30,058 km", h2:"165 km", reduction:"13.87 kg", revenue:"82.578 元"},
{p:"浙F·5J92QD", km:"3,701 km", h2:"101 km", reduction:"8.49 kg", revenue:"103.928 元"},
{p:"浙F·8K27RD", km:"5,829 km", h2:"186 km", reduction:"15.62 kg", revenue:"76.354 元"},
{p:"浙F·2L68SD", km:"73,587 km", h2:"58 km", reduction:"4.85 kg", revenue:"54.812 元"},
{p:"浙F·9M03TD", km:"38,747 km", h2:"137 km", 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 */}
HYDROGEN
MOBILITY
Lingniu ESG Link
2026-04-28 周二 12:15:13
{/* Body grid */}
{/* ── LEFT COLUMN ── */}
{/* Two top KPIs: emissions & H₂ */}
{/* Annual cumulative reduction — hero card */}
今年累计减碳
4567.14
吨
相当于种植 18.5 万棵树
{/* abstract tree silhouette */}
{/* Monthly reduction bars */}
{/* Monthly mileage / H2 */}
月度行驶里程 & 用氢量
用氢量
行驶里程
kg / km
{/* ── CENTER COLUMN ── */}
{/* Map panel */}
{/* 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 */}
碳交易行情
实时报价
| 交易所 | 项目 | 价格 (RMB) | 地区 |
{trades.map((t,i) => (
| {t.ex} |
{t.item} |
{t.price} |
{t.region} |
))}
{/* ── RIGHT COLUMN ── */}
{/* Two top KPIs: vehicle total & cumulative mileage */}
{/* 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;