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