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/searchbox/SearchBox.js | 289 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 289 insertions(+), 0 deletions(-)
diff --git a/public/map/controls/searchbox/SearchBox.js b/public/map/controls/searchbox/SearchBox.js
new file mode 100644
index 0000000..8651537
--- /dev/null
+++ b/public/map/controls/searchbox/SearchBox.js
@@ -0,0 +1,289 @@
+/**
+ * infoWindow的template
+ * @author Liuyl
+ * @date 2015/11/9
+ */
+define([
+ "base/BaseControl", "base/AppEvent",
+ "dojo",
+ "dojo/_base/declare",
+ "dojo/_base/array",
+ "dojo/text!controls/searchbox/SearchBox.html",
+ "dojo/_base/lang",
+ "dojo/_base/connect",
+ "dojo/query",
+ "dojo/dom-construct",
+ "dojo/dom-style",
+ "dojo/dom-attr",
+ "dojo/dom-geometry",
+ "dojo/on",
+ "dojo/dom-class",
+ "dojo/domReady!"
+], function(
+ BaseControl, AppEvent,
+ dojo,
+ declare,
+ arrayUtil,
+ template,
+ lang,
+ connect,
+ query,
+ domConstruct,
+ domStyle,
+ domAttr,
+ domGeometry,
+ on,
+ domClass
+) {
+ var Widget = declare("SearchBox", [BaseControl], {
+ templateString: template,
+ baseClass: "searchbox",
+ constructor: function(options, srcRefNode) {
+ this.currentKeyword = null;
+ if (!this.suggestCount)
+ this.suggestCount = 10;
+ this.currentStart = 0;
+ this.currentCount = 0;
+ this.mouseOverSuggest = false;
+ },
+ getInputValue: function() {
+ return this.inputTextDom.value.trim();
+ },
+ startup: function() {
+ on(this.inputButton, "click", lang.hitch(this, function(evt) {
+ var value = this.getInputValue();
+ if (value) {
+ AppEvent.dispatchAppEvent(AppEvent.SEARCHBOX_QUERY, {
+ hockId: this.id,
+ type: "search",
+ args: {
+ keyword: value,
+ }
+ });
+ }
+ this.hideSuggest();
+ }));
+ on(this.inputClearDom, "click", lang.hitch(this, function(evt) {
+ this.clear();
+ AppEvent.dispatchAppEvent(AppEvent.SEARCHBOX_QUERY, {
+ hockId: this.id,
+ type: "clear"
+ });
+ }));
+ on(this.inputTextDom, "input", lang.hitch(this, function(evt) {
+ var value = this.getInputValue();
+ domStyle.set(this.inputClearDom, "display", "block");
+ if (!value) {
+ domStyle.set(this.inputClearDom, "display", "none");
+ this.hideSuggest();
+ } else if (this._checkChanged(value, 0)) {
+ this.querySuggest(value, 0);
+ }
+ this.currentKeyword = value;
+ AppEvent.dispatchAppEvent(AppEvent.SEARCHBOX_QUERY, {
+ hockId: this.id,
+ type: "input",
+ args: {
+ keyword: value,
+ }
+ });
+ }));
+ on(this.inputTextDom, "keypress", lang.hitch(this, function(evt) {
+ if (evt.keyCode == 13) {
+ var value = this.getInputValue();
+ if (value) {
+ AppEvent.dispatchAppEvent(AppEvent.SEARCHBOX_QUERY, {
+ hockId: this.id,
+ type: "search",
+ args: {
+ keyword: value,
+ }
+ });
+ }
+ this.hideSuggest();
+ }
+ }));
+ on(this.inputTextDom, "focus", lang.hitch(this, function(evt) {
+ //点击菜单项有可能导致触发该事件,未知原因,relatedTarget为空时为正常触发
+ if (evt.relatedTarget) {
+ return;
+ }
+ var value = this.getInputValue();
+ if (!value) {
+ this.hideSuggest();
+ } else if (this._checkChanged(value, 0)) {
+ this.querySuggest(value, 0);
+ } else if (this.currentCount) {
+ this.showSuggest();
+ }
+ this.currentKeyword = value;
+ }));
+ on(this.inputTextDom, "blur", lang.hitch(this, function(evt) {
+ if (!this.mouseOverSuggest)
+ this.hideSuggest();
+ }));
+
+ this.suggestDom = domConstruct.create("div", {
+ className: "searchbox-suggest-container",
+ "data-searchbox": this.id,
+ innerHTML: "<div class='searchbox-suggest' ><ul></ul></div>"
+ }, document.body);
+ this.suggestUlDom = query("ul", this.suggestDom)[0];
+ on(this.suggestDom, "mouseover", lang.hitch(this, function(evt) {
+ this.mouseOverSuggest = true;
+ }));
+ on(this.suggestDom, "mouseleave", lang.hitch(this, function(evt) {
+ this.mouseOverSuggest = false;
+ }));
+
+ AppEvent.addAppEventListener(AppEvent.QUERY_SUCCESS, lang.hitch(this, function(evt) {
+ if (evt.hockId == this.id) {
+ this.updateSuggest(evt);
+ }
+ }));
+ AppEvent.addAppEventListener(AppEvent.QUERY_ERROR, lang.hitch(this, function(evt) {
+ if (evt.hockId == this.id) {
+ this.updateSuggest(evt);
+ }
+ }));
+ AppEvent.addAppEventListener(AppEvent.CHANGE_SEARCHBOX_STATE, lang.hitch(this, this.onChangeStateHandler));
+
+ if (this.placeholder) {
+ domAttr.set(this.inputTextDom, "placeholder", this.placeholder);
+ }
+ if (this.disableButton) {
+ domStyle.set(this.inputButton, "display", "none");
+ }
+ this.inherited(arguments);
+ },
+ onChangeStateHandler: function(evt) {
+ if (evt.hockId == this.id) {
+ if (evt.type == "clear") {
+ this.clear();
+ } else if (evt.type == "update") {
+ if (evt.data && evt.data.hasOwnProperty("keyword")) {
+ domAttr.set(this.inputTextDom, "value", evt.data.keyword.trim());
+ if (evt.data.keyword.trim()) {
+ domStyle.set(this.inputClearDom, "display", "block");
+ }
+ }
+
+ }
+ }
+ },
+ postCreate: function() {
+ this.inherited(arguments);
+ },
+ _checkChanged: function(keyword, start) {
+ return !(this.currentKeyword == keyword && this.currentStart == start);
+ },
+ querySuggest: function(keyword, start) {
+ if (!this.disableSuggest) {
+ AppEvent.dispatchAppEvent(AppEvent.RUN_SMART_QUERY, {
+ hockId: this.id,
+ args: {
+ keyword: keyword,//encodeURIComponent(keyword),
+ start: start,
+ count: this.suggestCount
+ }
+ });
+ }
+
+ },
+ updateSuggest: function(evt) {
+ if (evt.error) {
+ console.log(evt.error);
+ }
+ if (evt.result) {
+ domConstruct.empty(this.suggestUlDom);
+ if (evt.result.data.count)
+ this.currentCount = parseInt(evt.result.data.count);
+ else {
+ this.currentCount = 0;
+ }
+ if (this.currentCount == 0) {
+ this.hideSuggest();
+ } else if (this.currentCount == 1) {
+ this._buildSuggestItem(evt.result.data.items[0]||evt.result.data.items);
+ this.showSuggest();
+ } else {
+ arrayUtil.forEach(evt.result.data.items, lang.hitch(this, function(item, index) {
+ this._buildSuggestItem(item);
+ }));
+ this.showSuggest();
+ }
+ return;
+ }
+ this.hideSuggest();
+ },
+ _buildSuggestItem: function(item) {
+ var li = domConstruct.create("li", {
+ innerHTML: "<a><i class='search'>" + item.name + "</i><em>" + item.adress + "</em></a>",
+ className: "searchbox-suggest-item",
+ "data-poi-id": item.id,
+ "data-poi-type": item.poitype,
+ "data-pac": item.pac
+
+ }, this.suggestUlDom)
+ on(li, "click", lang.hitch(this, function(evt) {
+ var value = query("i", evt.currentTarget)[0].innerHTML;
+ domAttr.set(this.inputTextDom, "value", value);
+
+ var value = this.inputTextDom.value.trim();
+ // AppEvent.dispatchAppEvent(AppEvent.SEARCHBOX_QUERY, {
+ // hockId: this.id,
+ // type: "suggest",
+ // args: {
+ // keyword: value,
+ // poiId: domAttr.get(evt.currentTarget, "data-poi-id"),
+ // poiName: domAttr.get(evt.currentTarget, "data-poi-type"),
+ // pac: domAttr.get(evt.currentTarget, "data-pac")
+ // }
+ // });
+ AppEvent.dispatchAppEvent(AppEvent.SEARCHBOX_QUERY, {
+ hockId: this.id,
+ type: "search",
+ args: {
+ keyword: value,
+ poiType: null,
+ poiName: "全部"
+ }
+ });
+
+ this.hideSuggest();
+ }));
+ },
+ showSuggest: function() {
+ if (!this.disableSuggest && $(this.inputDom).is(":visible")) {
+ var pos = domGeometry.position(this.inputDom, true);
+ domStyle.set(this.suggestDom, "left", pos.x + "px");
+ domStyle.set(this.suggestDom, "top", pos.y + pos.h + "px");
+ domStyle.set(this.suggestDom, "width", (pos.w - 14) + "px");
+ domStyle.set(this.suggestDom, "display", "block");
+ }
+ },
+ hideSuggest: function() {
+ if (!this.disableSuggest) {
+ domStyle.set(this.suggestDom, "display", "none");
+ }
+ },
+ clear: function() {
+ this.currentKeyword = null;
+ this.currentStart = 0;
+ this.currentCount = 0;
+ this.mouseOverSuggest = false;
+ domConstruct.empty(this.suggestUlDom);
+ this.hideSuggest();
+
+ domAttr.set(this.inputTextDom, "value", "");
+ domStyle.set(this.inputClearDom, "display", "none");
+ },
+ show: function() {
+ domStyle.set(this.domNode, "display", "block");
+ },
+ hide: function() {
+ domStyle.set(this.domNode, "display", "none");
+ }
+ });
+ return Widget;
+});
\ No newline at end of file
--
Gitblit v1.9.3