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/controls/Queryinfowindow/InfoWindow.js | 451 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 451 insertions(+), 0 deletions(-)
diff --git a/public/map/controls/Queryinfowindow/InfoWindow.js b/public/map/controls/Queryinfowindow/InfoWindow.js
new file mode 100644
index 0000000..27a5fe3
--- /dev/null
+++ b/public/map/controls/Queryinfowindow/InfoWindow.js
@@ -0,0 +1,451 @@
+define([
+ "dojo/Evented",
+ "dojo/on",
+ "dojo/dom",
+ "dojo/_base/declare",
+ "dojo/dom-construct",
+ "dojo/dom-style",
+ "dojo/_base/lang",
+ "dojo/dom-class",
+ "esri/domUtils",
+ "esri/InfoWindowBase",
+ "base/utils/GeometryUtil",
+ "controls/Queryinfowindow/InfoTemplate"
+ ],
+ function(
+ Evented,
+ on,
+ dom,
+ declare,
+ domConstruct,
+ domStyle,
+ lang,
+ domClass,
+ domUtils,
+ InfoWindowBase,
+ GeometryUtil,
+ InfoTemplate
+ ) {
+ 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,
+ _correctButton: null,
+ width: 355,
+ height: 210,
+ infoTemplate: null,
+ constructor: function(parameters) {
+ var csspath = require.toUrl("controls/Queryinfowindow/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._correctButton = domConstruct.create("span", {
+ "class": "custom-infoWindow-correctbutton",
+ "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);
+ on(this._closeButton, "click", lang.hitch(this, function() {
+ this.hide();
+ }));
+ 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(355, 210);
+ }
+ },
+ setTitleAndContent: function(title, content, showTab, width, height) {
+ //this.place(content, this._content);
+
+ 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) {
+ 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();
+ },
+ hide: function() {
+ domUtils.hide(this.domNode);
+ this.isShowing = false;
+ this.onHide();
+
+ },
+ resize: function(width, height) {
+ this.width = width;
+ this.height = height;
+ if (!this.domNode) {
+ return;
+ }
+ // domStyle.set(this._content,{
+ // "width": width + "px"
+ // });
+ // domStyle.set(this._controlbar,{
+ // "width": width + "px"
+ // });
+ domStyle.set(this.domNode, {
+ "width": width + "px",
+ "height": (height + 30).toString() + "px"
+ });
+ if (this.isShowing) {
+ this._show(this._location);
+ }
+
+ },
+ destroy: function() {
+ domConstruct.destroy(this.domNode);
+ this._closeButton = this._title = this._content = null;
+ },
+
+ _positionWindow: function(arg, location) {
+ var thisWidth = domStyle.get(this.domNode, "width");
+ var thisHeight = domStyle.get(this.domNode, "height");
+ domClass.remove(this._pointerDiv);
+ domClass.add(this._pointerDiv, "custom-infoWindow-pointer");
+ switch (arg) {
+ case "topLeft":
+ domStyle.set(this.domNode, {
+ "left": (location.x - 12) + "px",
+ "top": location.y + 10 + "px"
+ });
+ domClass.add(this._pointerDiv, "pointer-top");
+ domStyle.set(this._pointerDiv, {
+ "left": "3px",
+ "top": "-9px"
+ });
+ break;
+ case "topRight":
+ domStyle.set(this.domNode, {
+ "left": (location.x - thisWidth + 11) + "px",
+ "top": location.y + 10 + "px"
+ });
+ domClass.add(this._pointerDiv, "pointer-top");
+ domStyle.set(this._pointerDiv, {
+ "left": (thisWidth - 19) + "px",
+ "top": "-9px"
+ });
+ break;
+ case "top":
+ domStyle.set(this.domNode, {
+ "left": (location.x - thisWidth / 2) + "px",
+ "top": location.y + 10 + "px"
+ });
+ domClass.add(this._pointerDiv, "pointer-top");
+ domStyle.set(this._pointerDiv, {
+ "left": (thisWidth / 2 - 8) + "px",
+ "top": "-9px"
+ });
+ break;
+ case "left":
+ domStyle.set(this.domNode, {
+ "left": location.x + 12 + "px",
+ "top": (location.y - thisHeight / 2 - 15) + "px"
+ });
+ domClass.add(this._pointerDiv, "pointer-left");
+ domStyle.set(this._pointerDiv, {
+ "left": "-10px",
+ "top": (thisHeight / 2 + 5) + "px"
+ });
+ break;
+ case "right":
+ domStyle.set(this.domNode, {
+ "left": (location.x - (thisWidth + 12)) + "px",
+ "top": (location.y - thisHeight / 2 - 15) + "px"
+ });
+ domClass.add(this._pointerDiv, "pointer-right");
+ domStyle.set(this._pointerDiv, {
+ "left": (thisWidth - 8) + "px",
+ "top": (thisHeight / 2 + 5) + "px"
+ });
+ break;
+ case "bottomLeft":
+ domStyle.set(this.domNode, {
+ "left": (location.x - 12) + "px",
+ "top": (location.y - thisHeight - 12) + "px"
+ });
+ domClass.add(this._pointerDiv, "pointer-bottom");
+ domStyle.set(this._pointerDiv, {
+ "left": "3px",
+ "top": (thisHeight - 8) + "px"
+ });
+ break;
+ case "bottomRight":
+ domStyle.set(this.domNode, {
+ "left": (location.x - thisWidth + 11) + "px",
+ "top": (location.y - thisHeight - 12) + "px"
+ });
+ domClass.add(this._pointerDiv, "pointer-bottom");
+ domStyle.set(this._pointerDiv, {
+ "left": (thisWidth - 20) + "px",
+ "top": (thisHeight - 8) + "px"
+ });
+ break;
+ // case "bottom":
+ // break;
+ default:
+ //默认pointer显示在下面
+ domStyle.set(this.domNode, {
+ "left": (location.x - thisWidth / 2) + "px",
+ "top": (location.y - thisHeight - 12) + "px"
+ });
+ domClass.add(this._pointerDiv, "pointer-bottom");
+ domStyle.set(this._pointerDiv, {
+ "left": (thisWidth / 2 - 10) + "px",
+ "top": (thisHeight - 8) + "px"
+ });
+ break;
+ }
+ },
+
+ /**
+ * 计算pointer处于的方位,左上、上、右上、左、默认、右、左下、下、右下
+ * @param x
+ * @param y
+ */
+ _getPosition: function(x, y) {
+
+ var widthPer = this.map.width / 4
+ var heightPer = this.map.height / 4
+ if (y < heightPer) {
+ if (x < widthPer) {
+ return "topLeft";
+ } else if (x > widthPer * 3) {
+ return "topRight";
+ } else {
+ return "top";
+ }
+ }
+ if (y >= heightPer && y < heightPer * 3) {
+ if (x < widthPer) {
+ return "left";
+ } else if (x > widthPer * 3) {
+ return "right";
+ } else {
+ return "default";
+ }
+ }
+ if (y > heightPer * 3) {
+ if (x < widthPer) {
+ return "bottomLeft";
+ } else if (x > widthPer * 3) {
+ return "bottomRight";
+ } else {
+ return "bottom";
+ }
+ } else {
+ return "default";
+ }
+ },
+ setItems: function(items) {
+ this._items = items;
+ if (!this.domNode)
+ return;
+ var thisWidth = domStyle.get(this.domNode, "width");
+ if (!items || items.length <= 1) {
+ //domStyle.set(this._content,"bottom","20px");
+ //domStyle.set(this._pageDiv,"display","none");
+ domStyle.set(this._title, "maxWidth", (thisWidth - 40).toString() + "px");
+ domStyle.set(this._nextButton, "display", "none");
+ domStyle.set(this._countSpan, "display", "none");
+ domStyle.set(this._preButton, "display", "none");
+ _currentIndex = 0;
+ } else {
+ //有多个graphics
+ domStyle.set(this._title, "maxWidth", (thisWidth - 135).toString() + "px");
+ this.showItem(items[0]);
+ domStyle.set(this._nextButton, "display", "inline-block");
+ domStyle.set(this._countSpan, "display", "inline-block");
+ domStyle.set(this._preButton, "display", "inline-block");
+ this._countSpan.innerHTML = "1/" + this._items.length;
+ _currentIndex = 0;
+ return;
+ }
+ if (items.length == 1) {
+ //如果只有一个graphic
+ this.showItem(items[_currentIndex]);
+ }
+ },
+ showItem: function(item) {
+ if (item) {
+ if (item[this.titleField]) {
+ this._title.innerHTML = item[this.titleField];
+ } else {
+ this._title.innerHTML = "无标题";
+ }
+ if (item[this.contentField]) {
+ this.setContent(item[this.contentField]);
+ } else {
+ this.setContent("");
+ }
+ }
+ this._location = item.geometry;
+ if (this.isShowing) {
+ this._show(this._location);
+ }
+ // var maxWidth = domStyle.get(this._title,"maxWidth");
+ // if(maxWidth<this._title.offsetWidth)
+ // {
+ // this._title.title = graphic.attributes[this.titleField];
+ // }
+ // else
+ // {
+ // this._title.title = "";
+ // }
+ }
+
+ });
+
+ });
\ No newline at end of file
--
Gitblit v1.9.3