- 新增OperationDashboard.vue全屏大屏组件 - 添加6个核心KPI指标卡片: 进水总量/出水总量/产销差率/营收额/平均水质/报警次数 - 实现6个ECharts图表: 供水趋势/水质分布/报警统计/管网空间/设备状态/营收分析 - 创建静态HTML版本operation-dashboard.html,使用CDN加载Vue3/ECharts/Element Plus - 更新路由配置,添加/operation路径支持 - 修复nextTick导入问题,优化build脚本 🚧 开发者: bot_dev1 📝 任务: #38 [BI] 运营仪表盘 + 供水专题大屏
40 lines
967 B
JavaScript
40 lines
967 B
JavaScript
import transform from "./transform.js";
|
|
|
|
export default function(topology) {
|
|
var t = transform(topology.transform), key,
|
|
x0 = Infinity, y0 = x0, x1 = -x0, y1 = -x0;
|
|
|
|
function bboxPoint(p) {
|
|
p = t(p);
|
|
if (p[0] < x0) x0 = p[0];
|
|
if (p[0] > x1) x1 = p[0];
|
|
if (p[1] < y0) y0 = p[1];
|
|
if (p[1] > y1) y1 = p[1];
|
|
}
|
|
|
|
function bboxGeometry(o) {
|
|
switch (o.type) {
|
|
case "GeometryCollection": o.geometries.forEach(bboxGeometry); break;
|
|
case "Point": bboxPoint(o.coordinates); break;
|
|
case "MultiPoint": o.coordinates.forEach(bboxPoint); break;
|
|
}
|
|
}
|
|
|
|
topology.arcs.forEach(function(arc) {
|
|
var i = -1, n = arc.length, p;
|
|
while (++i < n) {
|
|
p = t(arc[i], i);
|
|
if (p[0] < x0) x0 = p[0];
|
|
if (p[0] > x1) x1 = p[0];
|
|
if (p[1] < y0) y0 = p[1];
|
|
if (p[1] > y1) y1 = p[1];
|
|
}
|
|
});
|
|
|
|
for (key in topology.objects) {
|
|
bboxGeometry(topology.objects[key]);
|
|
}
|
|
|
|
return [x0, y0, x1, y1];
|
|
}
|