- 新增OperationDashboard.vue全屏大屏组件 - 添加6个核心KPI指标卡片: 进水总量/出水总量/产销差率/营收额/平均水质/报警次数 - 实现6个ECharts图表: 供水趋势/水质分布/报警统计/管网空间/设备状态/营收分析 - 创建静态HTML版本operation-dashboard.html,使用CDN加载Vue3/ECharts/Element Plus - 更新路由配置,添加/operation路径支持 - 修复nextTick导入问题,优化build脚本 🚧 开发者: bot_dev1 📝 任务: #38 [BI] 运营仪表盘 + 供水专题大屏
115 lines
3.4 KiB
JavaScript
115 lines
3.4 KiB
JavaScript
import destroyObject from "../Core/destroyObject.js";
|
|
import Event from "../Core/Event.js";
|
|
import EventHelper from "../Core/EventHelper.js";
|
|
import BoxGeometryUpdater from "./BoxGeometryUpdater.js";
|
|
import CorridorGeometryUpdater from "./CorridorGeometryUpdater.js";
|
|
import CylinderGeometryUpdater from "./CylinderGeometryUpdater.js";
|
|
import EllipseGeometryUpdater from "./EllipseGeometryUpdater.js";
|
|
import EllipsoidGeometryUpdater from "./EllipsoidGeometryUpdater.js";
|
|
import PlaneGeometryUpdater from "./PlaneGeometryUpdater.js";
|
|
import PolygonGeometryUpdater from "./PolygonGeometryUpdater.js";
|
|
import PolylineVolumeGeometryUpdater from "./PolylineVolumeGeometryUpdater.js";
|
|
import RectangleGeometryUpdater from "./RectangleGeometryUpdater.js";
|
|
import WallGeometryUpdater from "./WallGeometryUpdater.js";
|
|
|
|
/** @type {GeometryUpdater[]} */
|
|
const geometryUpdaters = [
|
|
BoxGeometryUpdater,
|
|
CylinderGeometryUpdater,
|
|
CorridorGeometryUpdater,
|
|
EllipseGeometryUpdater,
|
|
EllipsoidGeometryUpdater,
|
|
PlaneGeometryUpdater,
|
|
PolygonGeometryUpdater,
|
|
PolylineVolumeGeometryUpdater,
|
|
RectangleGeometryUpdater,
|
|
WallGeometryUpdater,
|
|
];
|
|
|
|
/**
|
|
* Manages a set of "updater" classes for the {@link GeometryVisualizer} for each entity
|
|
*
|
|
* @private
|
|
* @param {Entity} entity
|
|
* @param {Scene} scene
|
|
*/
|
|
function GeometryUpdaterSet(entity, scene) {
|
|
this.entity = entity;
|
|
this.scene = scene;
|
|
const updaters = new Array(geometryUpdaters.length);
|
|
const geometryChanged = new Event();
|
|
const eventHelper = new EventHelper();
|
|
for (let i = 0; i < updaters.length; i++) {
|
|
const updater = new geometryUpdaters[i](entity, scene);
|
|
eventHelper.add(updater.geometryChanged, (geometry) => {
|
|
geometryChanged.raiseEvent(geometry);
|
|
});
|
|
updaters[i] = updater;
|
|
}
|
|
this.updaters = updaters;
|
|
this.geometryChanged = geometryChanged;
|
|
this.eventHelper = eventHelper;
|
|
|
|
this._removeEntitySubscription = entity.definitionChanged.addEventListener(
|
|
GeometryUpdaterSet.prototype._onEntityPropertyChanged,
|
|
this,
|
|
);
|
|
}
|
|
|
|
GeometryUpdaterSet.prototype._onEntityPropertyChanged = function (
|
|
entity,
|
|
propertyName,
|
|
newValue,
|
|
oldValue,
|
|
) {
|
|
const updaters = this.updaters;
|
|
for (let i = 0; i < updaters.length; i++) {
|
|
updaters[i]._onEntityPropertyChanged(
|
|
entity,
|
|
propertyName,
|
|
newValue,
|
|
oldValue,
|
|
);
|
|
}
|
|
};
|
|
|
|
GeometryUpdaterSet.prototype.forEach = function (callback) {
|
|
const updaters = this.updaters;
|
|
for (let i = 0; i < updaters.length; i++) {
|
|
callback(updaters[i]);
|
|
}
|
|
};
|
|
|
|
GeometryUpdaterSet.prototype.destroy = function () {
|
|
this.eventHelper.removeAll();
|
|
const updaters = this.updaters;
|
|
for (let i = 0; i < updaters.length; i++) {
|
|
updaters[i].destroy();
|
|
}
|
|
this._removeEntitySubscription();
|
|
destroyObject(this);
|
|
};
|
|
|
|
/**
|
|
* Add the provided updater to the default list of updaters if not already included
|
|
* @param {GeometryUpdater} updater
|
|
*/
|
|
GeometryUpdaterSet.registerUpdater = function (updater) {
|
|
if (!geometryUpdaters.includes(updater)) {
|
|
geometryUpdaters.push(updater);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Remove the provided updater from the default list of updaters if included
|
|
* @param {GeometryUpdater} updater
|
|
*/
|
|
GeometryUpdaterSet.unregisterUpdater = function (updater) {
|
|
if (geometryUpdaters.includes(updater)) {
|
|
const index = geometryUpdaters.indexOf(updater);
|
|
geometryUpdaters.splice(index, 1);
|
|
}
|
|
};
|
|
|
|
export default GeometryUpdaterSet;
|