From d74b495736f0c04522ec54274b70fed0ded2878d Mon Sep 17 00:00:00 2001
From: zhongrj <646384940@qq.com>
Date: Tue, 27 Jun 2023 11:30:06 +0800
Subject: [PATCH] 任务新增导出
---
public/map/core/manager/widgetsmanager.js | 571 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 571 insertions(+), 0 deletions(-)
diff --git a/public/map/core/manager/widgetsmanager.js b/public/map/core/manager/widgetsmanager.js
new file mode 100644
index 0000000..ab24e61
--- /dev/null
+++ b/public/map/core/manager/widgetsmanager.js
@@ -0,0 +1,571 @@
+define(["base/AppEvent",
+ "base/ConfigData",
+ "dojo/_base/declare",
+ "dojo/_base/lang",
+ "dojo/dom",
+ "dojo/dom-construct",
+ "dojo/dom-attr",
+ "dojo/dom-class",
+ "dojo/on",
+ "utils/LayerUtil",
+ "utils/ConfigUtil",
+ "controls/toolbar/tools/Map3DTool",
+ "controls/toolbar/tools/SwipeTool",
+ "controls/toolbar/tools/ZoomInTool",
+ "controls/toolbar/tools/ZoomOutTool",
+ "controls/toolbar/tools/PanTool",
+ "controls/toolbar/tools/FullScreenTool",
+ "controls/toolbar/tools/ScreenWindowTool",
+ "controls/toolbar/tools/StreetViewTool",
+ "controls/toolbar/tools/MeasureLineTool",
+ "controls/toolbar/tools/MeasurePolygonTool",
+ "controls/toolbar/tools/ErrCorrectTool",
+ "controls/toolbar/tools/ClearTool",
+ "controls/toolbar/tools/CityLayerTool",
+ "controls/toolbar/tools/LocationTool",
+ "dojo/dom-style",
+ "dojo/domReady!"
+ ],
+ function(AppEvent,
+ ConfigData,
+ declare,
+ lang,
+ dom,
+ domConstruct,
+ domAttr,
+ domClass,
+ on,
+ LayerUtil,
+ ConfigUtil,
+ Map3DTool,
+ SwipeTool,
+ ZoomInTool,
+ ZoomOutTool,
+ PanTool,
+ FullScreenTool,
+ ScreenWindowTool,
+ StreetViewTool,
+ MeasureLineTool,
+ MeasurePolygonTool,
+ ErrCorrectTool,
+ ClearTool,
+ CityLayerTool,
+ LocationTool,
+ domStyle) {
+ return declare("WidgetManager", null, {
+ //--------------------------------------------
+ // 系统所有widget的配置
+ //--------------------------------------------
+ _widgetsConfig: [{
+ "label": "分析研判",
+ "id": "AnalysisAndJudgment",
+ "widgetClass": "widgets/analysisAndJudgment/AnalysisAndJudgment",
+ "type": "sider",
+ "cssPath": "widgets/analysisAndJudgment/AnalysisAndJudgment.css",
+ "actived": false
+ },
+ // {
+ // "label": "周界检测",
+ // "id": "PerimeterDetection",
+ // "widgetClass": "widgets/perimeterDetection/PerimeterDetection",
+ // "type": "sider",
+ // "cssPath": "widgets/perimeterDetection/PerimeterDetection.css",
+ // "actived": false
+ // },
+ // {
+ // "label": "入口安检",
+ // "id": "EntranceSecurity",
+ // "widgetClass": "widgets/entranceSecurity/EntranceSecurity",
+ // "type": "sider",
+ // "cssPath": "widgets/entranceSecurity/EntranceSecurity.css",
+ // "actived": false
+ // },
+ {
+ "label": "实时报警",
+ "id": "RealTimePolice",
+ "widgetClass": "widgets/realTimePolice/RealTimePolice",
+ "type": "sider",
+ "cssPath": "widgets/realTimePolice/RealTimePolice.css",
+ "actived": false
+ },
+ {
+ "label": "客户管理",
+ "id": "ClientManagement",
+ "widgetClass": "widgets/clientManagement/ClientManagement",
+ "type": "sider",
+ "cssPath": "widgets/clientManagement/ClientManagement.css",
+ "actived": false
+ },
+ {
+ "label": "设备管理",
+ "id": "equipment",
+ "widgetClass": "widgets/equipment/ClientManagement",
+ "type": "sider",
+ "cssPath": "widgets/equipment/ClientManagement.css",
+ "actived": false
+ },
+ {
+ "label": "警情调度",
+ "id": "PoliceDispatching",
+ "widgetClass": "widgets/policeDispatching/PoliceDispatching",
+ "type": "sider",
+ "cssPath": "widgets/policeDispatching/PoliceDispatching.css",
+ "actived": false
+ },
+ {
+ "label": "巡逻管理",
+ "id": "PatrolManagement",
+ "widgetClass": "widgets/patrolManagement/PatrolManagement",
+ "type": "sider",
+ "cssPath": "widgets/patrolManagement/PatrolManagement.css",
+ "actived": false
+ },
+ {
+ "label": "出警队伍",
+ "id": "APoliceTeam",
+ "widgetClass": "widgets/aPoliceTeam/APoliceTeam",
+ "type": "sider",
+ "cssPath": "widgets/aPoliceTeam/APoliceTeam.css",
+ "actived": false
+ },
+ {
+ "label": "处警队伍",
+ "id": "SecurityMap",
+ "widgetClass": "widgets/securityMap/SecurityMap",
+ "type": "sider",
+ "cssPath": "widgets/securityMap/SecurityMap.css",
+ "actived": false
+ },
+ {
+ "label": "分发处置",
+ "id": "AlertSecurity",
+ "widgetClass": "widgets/alertSecurity/AlertSecurity",
+ "type": "sider",
+ "cssPath": "widgets/alertSecurity/AlertSecurity.css",
+ "actived": false
+ },
+ {
+ "label": "抢单任务",
+ "id": "task",
+ "widgetClass": "widgets/task/task",
+ "type": "sider",
+ "cssPath": "widgets/task/task.css",
+ "actived": false
+ },
+ {
+ "label": "轨迹查看",
+ "id": "trajectory",
+ "widgetClass": "widgets/trajectory/trajectory",
+ "type": "sider",
+ "cssPath": "widgets/trajectory/trajectory.css",
+ "actived": false
+ },
+ {
+ "label": "地图模式",
+ "id": "SupervisoryMap",
+ "widgetClass": "widgets/supervisoryMap/SupervisoryMap",
+ "type": "sider",
+ "cssPath": "widgets/supervisoryMap/SupervisoryMap.css",
+ "actived": false
+ },
+ {
+ "label": "卡片模式详情",
+ "id": "DetailMap",
+ "widgetClass": "widgets/detailMap/DetailMap",
+ "type": "sider",
+ "cssPath": "widgets/detailMap/DetailMap.css",
+ "actived": false
+ },
+ {
+ "label": "洪水风险",
+ "id": "MapBrowseWidgetCopy",
+ "widgetClass": "widgets/mapBrowsecopy/MapBrowseWidgetCopy",
+ "type": "sider",
+ "cssPath": "widgets/mapBrowsecopy/MapBrowseWidgetCopy.css",
+ "actived": false
+ }, {
+ "label": "数据查询",
+ "id": "MapBrowseWidget",
+ "widgetClass": "widgets/mapBrowse/MapBrowseWidget",
+ "type": "sider",
+ "cssPath": "widgets/mapBrowse/MapBrowseWidget.css",
+ "actived": false
+ }, {
+ "label": "工具箱",
+ "id": "toolBoxWidget",
+ "widgetClass": "widgets/toolbox/toolBoxWidget",
+ "type": "cover",
+ "cssPath": "widgets/toolbox/toolBoxWidget.css",
+ "actived": false
+ }
+ ],
+ _map: null,
+ _bodyDom: null,
+ _mapContentDom: null,
+ /**
+ * 默认初始化显示在侧边栏的Widget
+ */
+ _defaultActivedSiderWidgetId: null,
+ _topWidgetContainerDom: null,
+ _widgetsTable: {},
+ _activedButton: null,
+ _widgetId2TabButtonIndex: {},
+ constructor: function() {
+ AppEvent.addAppEventListener(AppEvent.CONFIG_LOADED, lang.hitch(this, this.onConfigLoaded));
+ AppEvent.addAppEventListener(AppEvent.BASE_MAP_LAYER_LOADED, lang.hitch(this, this.onMapLoaded));
+ AppEvent.addAppEventListener(AppEvent.RUN_WIDGET, lang.hitch(this, this.onRunWidgetHandler));
+ AppEvent.addAppEventListener(AppEvent.CLOSE_WIDGET, lang.hitch(this, this.onCloseWidgetHandler));
+ },
+ onConfigLoaded: function() {
+ this._bodyDom = dom.byId("body");
+ this._mapContentDom = dom.byId("mapcontentClass");
+ this._topWidgetContainerDom = dom.byId("topWidgetContainer");
+ },
+ onMapLoaded: function(map) {
+ try {
+ this._map = map;
+ for (var i = 0; i < this._widgetsConfig.length; i++) {
+ var widgetCfg = this._widgetsConfig[i];
+ switch (widgetCfg.type) {
+ case "sider":
+ this._parseSiderWidget(widgetCfg);
+ break;
+ case "top":
+ this._parseTopWidget(widgetCfg);
+ break;
+ case "cover":
+ this._parseCoverWidget(widgetCfg);
+ break;
+
+ }
+ }
+ if (this._defaultActivedSiderWidgetId != null && this._activedButton != null) {
+ this._switchTab(this._defaultActivedSiderWidgetId);
+ domClass.add(this._activedButton, "tabbuttonbar-actived");
+ }
+ this._tempAppendOthers();
+ } catch (err) {
+ console.log(err);
+ }
+
+ },
+ /**
+ * 解析侧边栏的Widget
+ */
+ _parseSiderWidget: function(widgetCfg) {
+ if (widgetCfg.inited) {
+ this._loadWidget(widgetCfg.widgetClass, widgetCfg.id, widgetCfg.cssPath, function(widget) {
+ domConstruct.place(widget.domNode, dom.byId("tabcontainer"));
+ widget.startup();
+ widget.close();
+ });
+ }
+ // if (!widgetCfg.displaylabel) {
+ //
+ // return
+ // }
+ var tabButton = domConstruct.create("li", null, dom.byId("tabbuttonbar"));
+ on(tabButton, "click", dojo.hitch(this, this._onTabButtonClickHandler));
+ domAttr.set(tabButton, "widgetid", widgetCfg.id);
+ if (widgetCfg.actived) {
+ this._defaultActivedSiderWidgetId = widgetCfg.id;
+ this._activedButton = tabButton;
+ }
+ tabButton.innerHTML = widgetCfg.label;
+ this._widgetId2TabButtonIndex[widgetCfg.id] = tabButton;
+ },
+ /**
+ * 解析顶部位置的Widget
+ */
+ _parseTopWidget: function(widgetCfg) {
+ if (widgetCfg.actived) {
+ this._loadWidget(widgetCfg.widgetClass, widgetCfg.id, widgetCfg.cssPath, lang.hitch(this, function() {
+ var widget = this._widgetsTable[widgetCfg.id];
+ domConstruct.place(widget.domNode, this._topWidgetContainerDom);
+ widget.startup();
+ widget.open();
+ }));
+ }
+ },
+ /**
+ * 解析浮动在地图显示区域上的Widget
+ */
+ _parseCoverWidget: function(widgetCfg) {
+ if (widgetCfg.actived) {
+ this._loadWidget(widgetCfg.widgetClass, widgetCfg.id, widgetCfg.cssPath, lang.hitch(this, function() {
+ var widget = this._widgetsTable[widgetCfg.id];
+ domConstruct.place(widget.domNode, this._mapContentDom);
+ widget.startup();
+ }));
+ }
+
+ },
+
+ onRunWidgetHandler: function(widgetId) {
+ var widgetCfg = this._getWidgetConfigById(widgetId);
+ if (!widgetCfg) {
+ alert("该模块不存在!");
+ return;
+ }
+ var widget = this._widgetsTable[widgetId];
+ if (widget == null) {
+ var content = {
+ thisObj: this,
+ widgetCfg: widgetCfg
+ };
+ this._loadWidget(widgetCfg.widgetClass, widgetId, widgetCfg.cssPath, lang.hitch(content, function() {
+ var widget = this.thisObj._widgetsTable[this.widgetCfg.id];
+ this.thisObj._runWidget(widget, this.widgetCfg);
+ }));
+ } else {
+ this._runWidget(widget, widgetCfg);
+ }
+ },
+ onCloseWidgetHandler: function(widgetId) {
+ var widgetCfg = this._getWidgetConfigById(widgetId);
+ if (!widgetCfg) {
+ return;
+ }
+ var widget = this._widgetsTable[widgetId];
+ if (!widget) {
+ return;
+ }
+ widget.close();
+ },
+
+ /**
+ * 运行Widget
+ */
+ _runWidget: function(widget, widgetCfg) {
+ switch (widgetCfg.type) {
+ case "sider":
+ if (this._activedButton) {
+ domClass.remove(this._activedButton, "tabbuttonbar-actived");
+ }
+ this._switchTab(widgetCfg.id);
+ this._activedButton = null;
+ if (widgetCfg.displaylabel) {
+ this._activedButton = this._widgetId2TabButtonIndex[widgetCfg.id];
+ domClass.add(this._activedButton, "tabbuttonbar-actived");
+ }
+ break;
+ case "top":
+ this._parseTopWidget(widgetCfg);
+ if (widget.loaded() == false) {
+ widget.startup();
+ }
+ widget.open();
+ break;
+ case "cover":
+ //this._parseCoverWidget(widgetCfg);
+ domConstruct.place(widget.domNode, this._mapContentDom);
+ if (widget.loaded() == false) {
+ widget.startup();
+ }
+ widget.open();
+ break;
+ }
+ //会导致对sider widget派发RUNWIDGET事件时,widget.open()执行两次,故移入switch中 。 Edit by liuyl 2015/11/5
+ // if (widget.loaded() == false) {
+ // widget.startup();
+ // }
+ // widget.open();
+ },
+ /**
+ * 临时的实例化,因为还没有规划好怎么加载
+ */
+ _tempAppendOthers: function() {
+ return;
+ var map = this._map;
+ var mapDomNode = dom.byId(map.id);
+ //创建常用工具条
+ dojo.create("link", {
+ href: 'controls/toolbar/toolbar.css',
+ type: 'text/css',
+ rel: 'stylesheet'
+ },
+ document.getElementsByTagName('head')[0]);
+ var toolbarDom = domConstruct.create("div", {
+ id: "toolBarDiv",
+ "class": "toolbar"
+ }, dom.byId('mainMapWidget'));
+ //全屏
+ /*var tool = new FullScreenTool({
+ "map": this._map
+ });
+ domConstruct.place(tool.domNode, toolbarDom);
+ AppEvent.dispatchAppEvent(AppEvent.APPEND_TOOL, tool);*/
+ //放大
+ var tool = new ZoomInTool({
+ "map": this._map
+ });
+ domConstruct.place(tool.domNode, toolbarDom);
+ AppEvent.dispatchAppEvent(AppEvent.APPEND_TOOL, {
+ tool: tool,
+ hockId: ConfigData.mapWidgetId
+ });
+ //缩小
+ var tool = new ZoomOutTool({
+ "map": this._map
+ });
+ domConstruct.place(tool.domNode, toolbarDom);
+ AppEvent.dispatchAppEvent(AppEvent.APPEND_TOOL, {
+ tool: tool,
+ hockId: ConfigData.mapWidgetId
+ });
+ //复位
+ var tool = new LocationTool({
+ "map": this._map
+ });
+ domConstruct.place(tool.domNode, toolbarDom);
+ AppEvent.dispatchAppEvent(AppEvent.APPEND_TOOL, {
+ tool: tool,
+ hockId: ConfigData.mapWidgetId
+ });
+ //漫游
+ /*var tool = new Map3DTool({
+ "map": this._map
+ });
+ domConstruct.place(tool.domNode, toolbarDom);
+ AppEvent.dispatchAppEvent(AppEvent.APPEND_TOOL, {
+ tool: tool,
+ hockId: ConfigData.mapWidgetId
+ });*/
+ //平移
+ var tool = new PanTool({
+ "map": this._map
+ });
+ domConstruct.place(tool.domNode, toolbarDom);
+ AppEvent.dispatchAppEvent(AppEvent.APPEND_TOOL, {
+ tool: tool,
+ hockId: ConfigData.mapWidgetId
+ });
+ //量距离
+ var tool = new MeasureLineTool({
+ "map": this._map
+ });
+ domConstruct.place(tool.domNode, toolbarDom);
+ AppEvent.dispatchAppEvent(AppEvent.APPEND_TOOL, {
+ tool: tool,
+ hockId: ConfigData.mapWidgetId
+ });
+ //;量面积
+ var tool = new MeasurePolygonTool({
+ "map": this._map
+ });
+ domConstruct.place(tool.domNode, toolbarDom);
+ AppEvent.dispatchAppEvent(AppEvent.APPEND_TOOL, {
+ tool: tool,
+ hockId: ConfigData.mapWidgetId
+ });
+ //清除
+ var tool = new ClearTool({
+ "map": this._map
+ });
+ domConstruct.place(tool.domNode, toolbarDom);
+ AppEvent.dispatchAppEvent(AppEvent.APPEND_TOOL, {
+ tool: tool,
+ hockId: ConfigData.mapWidgetId
+ });
+
+ },
+ _onTabButtonClickHandler: function(evt) {
+ if (this._activedButton == evt.currentTarget) {
+ return;
+ }
+ var clickButton = evt.currentTarget;
+ var widgetId = domAttr.get(evt.currentTarget, "widgetid");
+ var widget = this._widgetsTable[widgetId];
+ if (widget == null) {
+ //Widget还未Load
+ var widgetCfg = this._getWidgetConfigById(widgetId);
+ this._loadWidget(widgetCfg.widgetClass, widgetId, widgetCfg.cssPath, lang.hitch(this, function() {
+ widget = this._widgetsTable[widgetId];
+ //this._confirmUserRightForSiderWidget(widget)
+ if (this._activedButton) {
+ domClass.remove(this._activedButton, "tabbuttonbar-actived");
+ }
+ this._switchTab(widget.widgetName);
+ this._activedButton = clickButton;
+ domClass.add(this._activedButton, "tabbuttonbar-actived");
+ }));
+ } else {
+ //this._confirmUserRightForSiderWidget(widget)
+ if (this._activedButton) {
+ domClass.remove(this._activedButton, "tabbuttonbar-actived");
+ }
+ this._switchTab(widget.widgetName);
+ this._activedButton = clickButton;
+ domClass.add(this._activedButton, "tabbuttonbar-actived");
+ }
+ //var loadwidget = lang.hitch(this, this._confirmUserRightForSiderWidget(widget));
+ },
+ _switchTab: function(widgetId) {
+ var widget;
+ if (widgetId == this._defaultActivedSiderWidgetId) {
+ //第一次加载defaultWidget的时候,widget还未请求
+ widget = this._widgetsTable[widgetId];
+ if (widget != null) {
+ return;
+ }
+ //是第一次加载,先清除default,以可以走下面的判断
+ this._defaultActivedSiderWidgetId = null;
+ }
+ if (this._defaultActivedSiderWidgetId != null) {
+ widget = this._widgetsTable[this._defaultActivedSiderWidgetId];
+ widget.close();
+ widget.domNode.parentNode.removeChild(widget.domNode);
+ }
+ widget = this._widgetsTable[widgetId];
+ var loadfun = lang.hitch(this, function(widget, widgetId) {
+ this._defaultActivedSiderWidgetId = widgetId;
+ domConstruct.place(widget.domNode, dom.byId("tabcontainer"));
+ if (widget.loaded() == false) {
+ widget.startup();
+ }
+
+ widget.open();
+ });
+ if (widget == null) {
+ var widgetCfg = this._getWidgetConfigById(widgetId);
+ this._loadWidget(widgetCfg.widgetClass, widgetId, widgetCfg.cssPath, lang.hitch(this, function() {
+ widget = this._widgetsTable[widgetId];
+ loadfun(widget, widgetId);
+ }));
+ } else {
+ loadfun(widget, widgetId);
+ }
+
+ },
+ _loadWidget: function(widgetUrl, widgetId, cssPath, callback) {
+ if (cssPath && cssPath != "") {
+ dojo.create("link", {
+ href: cssPath,
+ type: "text/css",
+ rel: "stylesheet"
+ },
+ document.getElementsByTagName("head")[0]);
+ }
+ require([widgetUrl], lang.hitch(this, function(WidgetClass) {
+ var widget = new WidgetClass({
+ map: this._map,
+ id: widgetId
+ });
+ this._widgetsTable[widgetId] = widget;
+ if (callback)
+ callback(widget);
+ }),
+ function(err) {
+ console.log("load widget");
+ console.log(err);
+ });
+ },
+ _getWidgetConfigById: function(widgetId) {
+ for (var i = 0; i < this._widgetsConfig.length; i++) {
+ if (this._widgetsConfig[i].id == widgetId) {
+ return this._widgetsConfig[i];
+ }
+ }
+ }
+ });
+ });
--
Gitblit v1.9.3