define([ "dojo/Evented", "dojo/on", "dojo/dom", "dojo/dom-attr", "dojo/dom-style", "dojo/_base/declare", "dojo/dom-construct", "dojo/dom-style", "dojo/_base/lang", "dojo/dom-class", "esri/domUtils", "esri/InfoWindowBase", "base/utils/GeometryUtil", "controls/infowindow/InfoTemplate", "esri/layers/FeatureLayer", "esri/tasks/query", "esri/tasks/QueryTask", "base/AppEvent", ], function( Evented, on, dom, domAttr, domStyle, declare, domConstruct, domStyle, lang, domClass, domUtils, InfoWindowBase, GeometryUtil, InfoTemplate, FeatureLayer, Query, QueryTask, AppEvent ) { return declare([InfoWindowBase, Evented], { isContentShowing: false, _location: null, _pointerDiv: null, _items: [], _nextButton: null, _preButton: null, _countSpan: null, titleField: "title", contentField: "content", _currentGraphic: null, _currentIndex: 0, _collectButton: null, width: null, height: 250, _point: null, infoTemplate: null, constructor: function(parameters) { var csspath = require.toUrl("controls/infowindow/InfoWindow.css"); dojo.create("link", { href: csspath, type: 'text/css', rel: 'stylesheet' }, document.getElementsByTagName('head')[0]); lang.mixin(this, parameters); this.offsetX = 0; this.offsetX = 0; domClass.add(this.domNode, "custom-infoWindow"); this._controlbar = domConstruct.create("div", { "class": "custom-infoWindow-controlbar" }, this.domNode); this._title = domConstruct.create("span", { "class": "custom-infoWindow-title" }, this._controlbar); this._closeButton = domConstruct.create("span", { "class": "custom-infoWindow-closebutton", "title": "关闭" }, this._controlbar); domConstruct.create("span", { "class": "custom-infoWindow-split" }, this._controlbar); this._collectButton = domConstruct.create("span", { "class": "custom-infoWindow-collectButton", "title": "收藏" }, this._controlbar); this._content = domConstruct.create("div", { "class": "custom-infoWindow-content" }, this.domNode); this._pointerDiv = domConstruct.create("div", { "class": "custom-infoWindow-pointer" }, this.domNode); this._nextButton = domConstruct.create("span", { "class": "custom-infoWindow-nextbutton", "title": "下一条" }, this._controlbar); this._countSpan = domConstruct.create("span", { "class": "custom-infoWindow-count", "innerHTML": "1/20" }, this._controlbar); this._preButton = domConstruct.create("span", { "class": "custom-infoWindow-prebutton", "title": "上一条" }, this._controlbar); this._preButton = domConstruct.create("span", { "class": "custom-infoWindow-fullposition", "title": "全景" }, this._controlbar); this._preButton = domConstruct.create("span", { "class": "custom-infoWindow-vedio", "title": "视频" }, this._controlbar); this._preButton = domConstruct.create("span", { "class": "custom-infoWindow-detailIntro", "title": "详情" }, this._controlbar); this._preButton = domConstruct.create("audio", { "class": "custom-infoWindow-audio", "title": "音频" }, this._controlbar); on(this._closeButton, "click", lang.hitch(this, function() { this.hide(); })); on(this._collectButton, "click", lang.hitch(this, function(evt) { var self = this; try { if(!value) { showlogin(); return; } dojo.xhrPost({ url: getUrl() + 'collect/addCollectData.do', postData: { "collect.userinfo.id": value, "nameCode": domAttr.get(evt.currentTarget, "code"), "collect.type": "1" }, handleAs: "json", load: function(data) { if(data.result == "取消收藏") { domStyle.set(self._collectButton, "background-image", "url('controls/infowindow/ico/uncollect.png')"); } else { domStyle.set(self._collectButton, "background-image", "url('controls/infowindow/ico/collect.png')"); } }, error: function(e) { alert('服务器繁忙!'); } }); } catch(e) {} })); on(this._preButton, "click", lang.hitch(this, function() { if(this._currentIndex > 0) { this._currentIndex--; this.showItem(this._items[this._currentIndex]); this._countSpan.innerHTML = (this._currentIndex + 1) + "/" + this._items.length; } })); on(this._nextButton, "click", lang.hitch(this, function() { if(this._currentIndex < this._items.length - 1) { this._currentIndex++; this.showItem(this._items[this._currentIndex]); this._countSpan.innerHTML = (this._currentIndex + 1) + "/" + this._items.length; } })); domUtils.hide(this.domNode); this.isShowing = false; this.setItems([]); this.resize(this.width, this.height); }, //窗体定位方法 setMap: function(map) { this.inherited(arguments); if(!this.domNode.parentNode) { domConstruct.place(this.domNode, dom.byId(map.id)); } this.infoTemplate = new InfoTemplate(); domConstruct.place(this.infoTemplate.domNode, this._content); this.infoTemplate.startup(); map.on("pan-start", lang.hitch(this, function() { //this.hide(); })); map.on("zoom-start", lang.hitch(this, function() { //this.hide(); })); map.on("pan", lang.hitch(this, function(evt) { if(this.isShowing) { this._show(this._location, evt.delta.x, evt.delta.y); } })); map.on("pan-end", lang.hitch(this, function() { if(this.isShowing) { this._show(this._location); } })); map.on("zoom-end", lang.hitch(this, function() { if(this.isShowing) { this._show(this._location); } })); }, setTitle: function(title) { var thisWidth = domStyle.get(this.domNode, "width"); domStyle.set(this._title, "maxWidth", (thisWidth - 40).toString() + "px"); this.place(title, this._title); }, setContent: function(content, width, height) { this.infoTemplate.reset(); this.infoTemplate.setContent(content); if(width !== undefined && height !== undefined) { this.resize(width, height); } else { this.resize(width, height); } }, setTitleAndContent: function(code, title, content, showTab, width, height) { if(code) { domAttr.set(this._collectButton, "code", code); domStyle.set(this._collectButton, "display", ""); try { var self = this; dojo.xhrPost({ url: getUrl() + 'collect/checkCollect.do', postData: { "id": code, "model": "map", "userid": value }, handleAs: "json", load: function(data) { if(data.resultDesc == "未收藏") { domStyle.set(self._collectButton, "background-image", "url('controls/infowindow/ico/uncollect.png')"); } else { domStyle.set(self._collectButton, "background-image", "url('controls/infowindow/ico/collect.png')"); } }, error: function(e) { alert('服务器繁忙!'); } }); } catch(e) { alert("服务器繁忙!"); } } else { domStyle.set(this._collectButton, "display", "none"); } this.setContent(content, width, height); this.setTitle(title); if(showTab !== undefined) { if(!showTab) { this.infoTemplate.hideTab(); } } }, setTab: function(type) { this.infoTemplate.switchTab(type); }, setGraphic: function(graphic) { this.infoTemplate.setGraphic(graphic); }, getGraphic: function(graphic) { return this.infoTemplate.getGraphic(); }, show: function(location, offsexX, offsetY) { if(offsexX) this.offsetX = offsexX; else this.offsetX = 0; if(offsetY) this.offsetY = offsetY; else this.offsetY = 0; this._show(location); }, _show: function(location, dx, dy) { this._point = location; if(!location) { return; } if(location.type && location.type != "point") { location = GeometryUtil.getCenter(location); } this._location = location; if(location.spatialReference) { location = this.map.toScreen(location); } var position = this._getPosition(location.x, location.y) if(dx) { location.x = location.x + dx; } if(dy) { location.y = location.y + dy } location.x += this.offsetX; location.y += this.offsetY; this._positionWindow(position, location) //display the info window domUtils.show(this.domNode); this.isShowing = true; this.onShow(); this._position(this._point); }, _position: function(point) { $(document).on("keyup", "#start,#end", function() { var that = $(this); var keyword = $(this).val(); type = $(this).attr("id"); if(keyword.length > 0) { var featurelayer = new FeatureLayer("http://192.168.0.100:6080/arcgis/rest/services/TAIHE/taihelyjd/FeatureServer/0"); featurelayer.on("load", function(e) { this.objName = "JDMC"; }); this.layerDatas = []; var query = new Query(); query.returnGeometry = false; query.outFields = ["JDMC", "OBJECTID"]; query.where = "JDMC like '%" + keyword + "%'"; featurelayer.queryFeatures(query, function(result) { if(result.features.length > 0) { var X = that.offset().left; var Y = that.offset().top; var inners = ""; for(var x in result.features) { inners += "