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": "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]; } } } }); });