diff --git a/addons/address/.addonrc b/addons/address/.addonrc new file mode 100644 index 0000000..f74c941 --- /dev/null +++ b/addons/address/.addonrc @@ -0,0 +1 @@ +{"files":["public\/assets\/addons\/address\/js\/gcoord.min.js","public\/assets\/addons\/address\/js\/jquery.autocomplete.js"],"license":"regular","licenseto":"15976","licensekey":"XZAqI6Rzu75TECYj EuV1P5ivuFL4cIM1QvrEiQ==","domains":["fast.cc"],"licensecodes":[],"validations":["043c5318e9fc4870124f0d65db900fc1"]} \ No newline at end of file diff --git a/addons/address/Address.php b/addons/address/Address.php new file mode 100644 index 0000000..4bc36ea --- /dev/null +++ b/addons/address/Address.php @@ -0,0 +1,32 @@ + + */ +class Address extends Addons +{ + + /** + * 插件安装方法 + * @return bool + */ + public function install() + { + return true; + } + + /** + * 插件卸载方法 + * @return bool + */ + public function uninstall() + { + return true; + } + +} diff --git a/addons/address/bootstrap.js b/addons/address/bootstrap.js new file mode 100644 index 0000000..655162d --- /dev/null +++ b/addons/address/bootstrap.js @@ -0,0 +1,34 @@ +require([], function () { + //绑定data-toggle=addresspicker属性点击事件 + + $(document).on('click', "[data-toggle='addresspicker']", function () { + var that = this; + var callback = $(that).data('callback'); + var input_id = $(that).data("input-id") ? $(that).data("input-id") : ""; + var lat_id = $(that).data("lat-id") ? $(that).data("lat-id") : ""; + var lng_id = $(that).data("lng-id") ? $(that).data("lng-id") : ""; + var zoom_id = $(that).data("zoom-id") ? $(that).data("zoom-id") : ""; + var lat = lat_id ? $("#" + lat_id).val() : ''; + var lng = lng_id ? $("#" + lng_id).val() : ''; + var zoom = zoom_id ? $("#" + zoom_id).val() : ''; + var url = "/addons/address/index/select"; + url += (lat && lng) ? '?lat=' + lat + '&lng=' + lng + (input_id ? "&address=" + $("#" + input_id).val() : "") + (zoom ? "&zoom=" + zoom : "") : ''; + Fast.api.open(url, '位置选择', { + callback: function (res) { + input_id && $("#" + input_id).val(res.address).trigger("change"); + lat_id && $("#" + lat_id).val(res.lat).trigger("change"); + lng_id && $("#" + lng_id).val(res.lng).trigger("change"); + zoom_id && $("#" + zoom_id).val(res.zoom).trigger("change"); + + try { + //执行回调函数 + if (typeof callback === 'function') { + callback.call(that, res); + } + } catch (e) { + + } + } + }); + }); +}); diff --git a/addons/address/config.php b/addons/address/config.php new file mode 100644 index 0000000..a9a9fcf --- /dev/null +++ b/addons/address/config.php @@ -0,0 +1,132 @@ + 'maptype', + 'title' => '默认地图类型', + 'type' => 'radio', + 'content' => [ + 'baidu' => '百度地图', + 'amap' => '高德地图', + 'tencent' => '腾讯地图', + ], + 'value' => 'baidu', + 'rule' => 'required', + 'msg' => '', + 'tip' => '', + 'ok' => '', + 'extend' => '', + ], + [ + 'name' => 'zoom', + 'title' => '默认缩放级别', + 'type' => 'string', + 'content' => [], + 'value' => '11', + 'rule' => 'required', + 'msg' => '', + 'tip' => '', + 'ok' => '', + 'extend' => '', + ], + [ + 'name' => 'lat', + 'title' => '默认Lat', + 'type' => 'string', + 'content' => [], + 'value' => '39.919990', + 'rule' => 'required', + 'msg' => '', + 'tip' => '', + 'ok' => '', + 'extend' => '', + ], + [ + 'name' => 'lng', + 'title' => '默认Lng', + 'type' => 'string', + 'content' => [], + 'value' => '116.456270', + 'rule' => 'required', + 'msg' => '', + 'tip' => '', + 'ok' => '', + 'extend' => '', + ], + [ + 'name' => 'baidukey', + 'title' => '百度地图KEY', + 'type' => 'string', + 'content' => [], + 'value' => '', + 'rule' => '', + 'msg' => '', + 'tip' => '', + 'ok' => '', + 'extend' => '', + ], + [ + 'name' => 'amapkey', + 'title' => '高德地图KEY', + 'type' => 'string', + 'content' => [], + 'value' => '', + 'rule' => '', + 'msg' => '', + 'tip' => '', + 'ok' => '', + 'extend' => '', + ], + [ + 'name' => 'amapsecurityjscode', + 'title' => '高德地图安全密钥', + 'type' => 'string', + 'content' => [], + 'value' => '', + 'rule' => '', + 'msg' => '', + 'tip' => '', + 'ok' => '', + 'extend' => '', + ], + [ + 'name' => 'tencentkey', + 'title' => '腾讯地图KEY', + 'type' => 'string', + 'content' => [], + 'value' => '', + 'rule' => '', + 'msg' => '', + 'tip' => '', + 'ok' => '', + 'extend' => '', + ], + [ + 'name' => 'coordtype', + 'title' => '坐标系类型', + 'type' => 'select', + 'content' => [ + 'DEFAULT' => '默认(使用所选地图默认坐标系)', + 'GCJ02' => 'GCJ-02', + 'BD09' => 'BD-09', + ], + 'value' => 'DEFAULT', + 'rule' => 'required', + 'msg' => '', + 'tip' => '', + 'ok' => '', + 'extend' => '', + ], + [ + 'name' => '__tips__', + 'title' => '温馨提示', + 'type' => '', + 'content' => [], + 'value' => '请先申请对应地图的Key,配置后再使用', + 'rule' => '', + 'msg' => '', + 'tip' => '', + 'ok' => '', + 'extend' => 'alert-danger-light', + ], +]; diff --git a/addons/address/controller/Index.php b/addons/address/controller/Index.php new file mode 100644 index 0000000..5cd31e3 --- /dev/null +++ b/addons/address/controller/Index.php @@ -0,0 +1,64 @@ +request->langset(); + $lang = preg_match("/^([a-zA-Z\-_]{2,10})\$/i", $lang) ? $lang : 'zh-cn'; + + $site = Config::get("site"); + + // 配置信息 + $config = [ + 'site' => array_intersect_key($site, array_flip(['name', 'cdnurl', 'version', 'timezone', 'languages'])), + 'upload' => null, + 'modulename' => 'addons', + 'controllername' => 'index', + 'actionname' => 'index', + 'jsname' => 'addons/address', + 'moduleurl' => '', + 'language' => $lang + ]; + $config = array_merge($config, Config::get("view_replace_str")); + + // 配置信息后 + Hook::listen("config_init", $config); + // 加载当前控制器语言包 + $this->view->assign('site', $site); + $this->view->assign('config', $config); + + return $this->view->fetch(); + } + + // 选择地址 + public function select() + { + $config = get_addon_config('address'); + $zoom = (int)$this->request->get('zoom', $config['zoom']); + $lng = (float)$this->request->get('lng'); + $lat = (float)$this->request->get('lat'); + $address = $this->request->get('address'); + $lng = $lng ?: $config['lng']; + $lat = $lat ?: $config['lat']; + $this->view->assign('zoom', $zoom); + $this->view->assign('lng', $lng); + $this->view->assign('lat', $lat); + $this->view->assign('address', $address); + $maptype = $config['maptype']; + if (!isset($config[$maptype . 'key']) || !$config[$maptype . 'key']) { + $this->error("请在配置中配置对应类型地图的密钥"); + } + return $this->view->fetch('index/' . $maptype); + } + +} diff --git a/addons/address/info.ini b/addons/address/info.ini new file mode 100644 index 0000000..62fc770 --- /dev/null +++ b/addons/address/info.ini @@ -0,0 +1,10 @@ +name = address +title = 地址位置选择插件 +intro = 地图位置选择插件,可返回地址和经纬度 +author = FastAdmin +website = https://www.fastadmin.net +version = 1.1.8 +state = 1 +url = http://fast.cc:8088/addons/address +license = regular +licenseto = 15976 diff --git a/addons/address/view/index/amap.html b/addons/address/view/index/amap.html new file mode 100644 index 0000000..62972fc --- /dev/null +++ b/addons/address/view/index/amap.html @@ -0,0 +1,258 @@ + + + + + 地址选择器 + + + + + + +
确定
+
+ + + + + + + + + diff --git a/addons/address/view/index/baidu.html b/addons/address/view/index/baidu.html new file mode 100644 index 0000000..86aa74b --- /dev/null +++ b/addons/address/view/index/baidu.html @@ -0,0 +1,243 @@ + + + + + 地址选择器 + + + + + + +
确定
+
+ + + + + + diff --git a/addons/address/view/index/index.html b/addons/address/view/index/index.html new file mode 100644 index 0000000..07f9712 --- /dev/null +++ b/addons/address/view/index/index.html @@ -0,0 +1,132 @@ + + + + + 地图位置(经纬度)选择插件 + + + + +
+ +
+
+
+ + +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + +
+
+ + +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
参数释义
data-input-id填充地址的文本框ID
data-lng-id填充经度的文本框ID
data-lat-id填充纬度的文本框ID
data-zoom-id填充缩放的文本框ID
+
+ +
+
+
+ +
+ + + + + + + + + diff --git a/addons/address/view/index/tencent.html b/addons/address/view/index/tencent.html new file mode 100644 index 0000000..89df386 --- /dev/null +++ b/addons/address/view/index/tencent.html @@ -0,0 +1,291 @@ + + + + + 地址选择器 + + + + + + +
确定
+
+ + + + + + + + + diff --git a/public/assets/addons/address/js/gcoord.min.js b/public/assets/addons/address/js/gcoord.min.js new file mode 100644 index 0000000..8bf62df --- /dev/null +++ b/public/assets/addons/address/js/gcoord.min.js @@ -0,0 +1,6 @@ +/** + * @preserve + * gcoord 1.0.6, geographic coordinate library + * Copyright (c) 2024 Jiulong Hu + */ +var gcoord=function(){"use strict";var r=function(){return r=Object.assign||function(r){for(var t,e=1,n=arguments.length;e=72.004&&r<=137.8347&&t>=.8293&&t<=55.8271}function f(r,c){var f,l,s,h=(s=300+(f=r-105)+2*(l=c-35)+.1*f*f+.1*f*l+.1*n(a(f)),s+=2*(20*t(6*f*o)+20*t(2*f*o))/3,(s+=2*(20*t(f*o)+40*t(f/3*o))/3)+2*(150*t(f/12*o)+300*t(f/30*o))/3),g=function(r,e){var i=2*r-100+3*e+.2*e*e+.1*r*e+.2*n(a(r));return i+=2*(20*t(6*r*o)+20*t(2*r*o))/3,i+=2*(20*t(e*o)+40*t(e/3*o))/3,i+2*(160*t(e/12*o)+320*t(e*o/30))/3}(r-105,c-35),M=c/180*o,v=t(M),p=n(v=1-u*v*v);return[h=180*h/(i/p*e(M)*o),g=180*g/(i*(1-u)/(v*p)*o)]}function l(r){var t=r[0],e=r[1];if(!c(t,e))return[t,e];var n=f(t,e);return[t+n[0],e+n[1]]}function s(r){var t=r[0],e=r[1];if(!c(t,e))return[t,e];for(var n=[t,e],o=n[0],i=n[1],u=l([o,i]),f=u[0]-t,s=u[1]-e;a(f)>1e-6||a(s)>1e-6;)f=(u=l([o-=f,i-=s]))[0]-t,s=u[1]-e;return[o,i]}var h=Math.sin,g=Math.cos,M=Math.atan2,v=Math.sqrt,p=3e3*Math.PI/180;function G(r){var t=r[0]-.0065,e=r[1]-.006,n=v(t*t+e*e)-2e-5*h(e*p),a=M(e,t)-3e-6*g(t*p);return[n*g(a),n*h(a)]}function d(r){var t=r[0],e=r[1],n=v(t*t+e*e)+2e-5*h(e*p),a=M(e,t)+3e-6*g(t*p);return[n*g(a)+.0065,n*h(a)+.006]}var S=180/Math.PI,y=Math.PI/180,P=6378137,b=20037508.342789244;function B(r){return[r[0]*S/P,(.5*Math.PI-2*Math.atan(Math.exp(-r[1]/P)))*S]}function C(r){var t=Math.abs(r[0])<=180?r[0]:r[0]-360*(r[0]<0?-1:1),e=[P*t*y,P*Math.log(Math.tan(.25*Math.PI+.5*r[1]*y))];return e[0]>b&&(e[0]=b),e[0]<-b&&(e[0]=-b),e[1]>b&&(e[1]=b),e[1]<-b&&(e[1]=-b),e}var D,E,m,w,I,W,k=Math.abs,J=[12890594.86,8362377.87,5591021,3481989.83,1678043.12,0],x=[75,60,45,30,15,0],L=[[1.410526172116255e-8,898305509648872e-20,-1.9939833816331,200.9824383106796,-187.2403703815547,91.6087516669843,-23.38765649603339,2.57121317296198,-.03801003308653,17337981.2],[-7.435856389565537e-9,8983055097726239e-21,-.78625201886289,96.32687599759846,-1.85204757529826,-59.36935905485877,47.40033549296737,-16.50741931063887,2.28786674699375,10260144.86],[-3.030883460898826e-8,898305509983578e-20,.30071316287616,59.74293618442277,7.357984074871,-25.38371002664745,13.45380521110908,-3.29883767235584,.32710905363475,6856817.37],[-1.981981304930552e-8,8983055099779535e-21,.03278182852591,40.31678527705744,.65659298677277,-4.44255534477492,.85341911805263,.12923347998204,-.04625736007561,4482777.06],[3.09191371068437e-9,8983055096812155e-21,6995724062e-14,23.10934304144901,-.00023663490511,-.6321817810242,-.00663494467273,.03430082397953,-.00466043876332,2555164.4],[2.890871144776878e-9,8983055095805407e-21,-3.068298e-8,7.47137025468032,-353937994e-14,-.02145144861037,-1234426596e-14,.00010322952773,-323890364e-14,826088.5]],j=[[-.0015702102444,111320.7020616939,0x60e374c3105a3,-0x24bb4115e2e164,0x5cc55543bb0ae8,-0x7ce070193f3784,0x5e7ca61ddf8150,-0x261a578d8b24d0,0x665d60f3742ca,82.5],[.0008277824516172526,111320.7020463578,647795574.6671607,-4082003173.641316,10774905663.51142,-15171875531.51559,12053065338.62167,-5124939663.577472,913311935.9512032,67.5],[.00337398766765,111320.7020202162,4481351.045890365,-23393751.19931662,79682215.47186455,-115964993.2797253,97236711.15602145,-43661946.33752821,8477230.501135234,52.5],[.00220636496208,111320.7020209128,51751.86112841131,3796837.749470245,992013.7397791013,-1221952.21711287,1340652.697009075,-620943.6990984312,144416.9293806241,37.5],[-.0003441963504368392,111320.7020576856,278.2353980772752,2485758.690035394,6070.750963243378,54821.18345352118,9540.606633304236,-2710.55326746645,1405.483844121726,22.5],[-.0003218135878613132,111320.7020701615,.00369383431289,823725.6402795718,.46104986909093,2351.343141331292,1.58060784298199,8.77738589078284,.37238884252424,7.45]];function q(r,t,e){var n=k(t)/e[9],a=e[0]+e[1]*k(r),o=e[2]+e[3]*n+e[4]*Math.pow(n,2)+e[5]*Math.pow(n,3)+e[6]*Math.pow(n,4)+e[7]*Math.pow(n,5)+e[8]*Math.pow(n,6);return[a*=r<0?-1:1,o*=t<0?-1:1]}function N(r){for(var t=r[0],e=r[1],n=[],a=0;ax[a]){n=j[a];break}return q(t,e,n)}function O(r){for(var t=r[0],e=r[1],n=[],a=0;a=J[a]){n=L[a];break}return q(t,e,n)}function T(r,t){if(!r)throw new Error(t)}function A(r){return!!r&&"[object Array]"===Object.prototype.toString.call(r)}function F(r){return!isNaN(Number(r))&&null!==r&&!A(r)}function R(){for(var r=[],t=0;t=2,"Invalid input coordinate: ".concat(r)),T(F(r[0])&&F(r[1]),"Invalid input coordinate: ".concat(r)),r=r.map(Number),i=!0);var u=a;return i?u(r):(U(r,(function(r){var t;t=u(r),r[0]=t[0],r[1]=t[1]})),r)}});return H}(); \ No newline at end of file diff --git a/public/assets/addons/address/js/jquery.autocomplete.js b/public/assets/addons/address/js/jquery.autocomplete.js new file mode 100644 index 0000000..78c47cf --- /dev/null +++ b/public/assets/addons/address/js/jquery.autocomplete.js @@ -0,0 +1,215 @@ +/* + jQuery autoComplete v1.0.7 + Copyright (c) 2014 Simon Steinberger / Pixabay + GitHub: https://github.com/Pixabay/jQuery-autoComplete + License: http://www.opensource.org/licenses/mit-license.php +*/ + +(function ($) { + $.fn.autoComplete = function (options) { + var o = $.extend({}, $.fn.autoComplete.defaults, options); + + // public methods + if (typeof options == 'string') { + this.each(function () { + var that = $(this); + if (options == 'destroy') { + $(window).off('resize.autocomplete', that.updateSC); + that.off('blur.autocomplete focus.autocomplete keydown.autocomplete keyup.autocomplete'); + if (that.data('autocomplete')) + that.attr('autocomplete', that.data('autocomplete')); + else + that.removeAttr('autocomplete'); + $(that.data('sc')).remove(); + that.removeData('sc').removeData('autocomplete'); + } + }); + return this; + } + + return this.each(function () { + var that = $(this); + // sc = 'suggestions container' + that.sc = $('
'); + that.data('sc', that.sc).data('autocomplete', that.attr('autocomplete')); + that.attr('autocomplete', 'off'); + that.cache = {}; + that.last_val = ''; + + that.updateSC = function (resize, next) { + that.sc.css({ + top: that.offset().top + that.outerHeight() - (that.sc.css("position") == "fixed" ? $(window).scrollTop() : 0), + left: that.offset().left, + width: that.outerWidth() + }); + if (!resize) { + that.sc.show(); + if (!that.sc.maxHeight) that.sc.maxHeight = parseInt(that.sc.css('max-height')); + if (!that.sc.suggestionHeight) that.sc.suggestionHeight = $('.autocomplete-suggestion', that.sc).first().outerHeight(); + if (that.sc.suggestionHeight) + if (!next) that.sc.scrollTop(0); + else { + var scrTop = that.sc.scrollTop(), selTop = next.offset().top - that.sc.offset().top; + if (selTop + that.sc.suggestionHeight - that.sc.maxHeight > 0) + that.sc.scrollTop(selTop + that.sc.suggestionHeight + scrTop - that.sc.maxHeight); + else if (selTop < 0) + that.sc.scrollTop(selTop + scrTop); + } + } + } + $(window).on('resize.autocomplete', that.updateSC); + + that.sc.appendTo('body'); + + that.on('click', function () { + if ($(this).val().length > 0 && that.sc.is(":hidden")) { + setTimeout(function () { + that.sc.show(); + }, 100); + } + }); + + that.sc.on('mouseleave', '.autocomplete-suggestion', function () { + $('.autocomplete-suggestion.selected').removeClass('selected'); + }); + + that.sc.on('mouseenter', '.autocomplete-suggestion', function () { + $('.autocomplete-suggestion.selected').removeClass('selected'); + $(this).addClass('selected'); + }); + + that.sc.on('mousedown click', '.autocomplete-suggestion', function (e) { + var item = $(this), v = item.data('val'); + if (v || item.hasClass('autocomplete-suggestion')) { // else outside click + that.val(v); + o.onSelect(e, v, item); + that.sc.hide(); + } + return false; + }); + + that.on('blur.autocomplete', function () { + try { + over_sb = $('.autocomplete-suggestions:hover').length; + } catch (e) { + over_sb = 0; + } // IE7 fix :hover + if (!over_sb) { + that.last_val = that.val(); + that.sc.hide(); + setTimeout(function () { + that.sc.hide(); + }, 350); // hide suggestions on fast input + } else if (!that.is(':focus')) setTimeout(function () { + that.focus(); + }, 20); + }); + + if (!o.minChars) that.on('focus.autocomplete', function () { + that.last_val = '\n'; + that.trigger('keyup.autocomplete'); + }); + + function suggest(data) { + var val = that.val(); + that.cache[val] = data; + if (data.length && val.length >= o.minChars) { + var s = ''; + if (data.length > 0) { + s += typeof o.header === 'function' ? o.header.call(data, o, that) : o.header; + for (var i = 0; i < data.length; i++) s += o.renderItem(data[i], val); + s += typeof o.footer === 'function' ? o.footer.call(data, o, that) : o.footer; + } + that.sc.html(s); + that.updateSC(0); + } else + that.sc.hide(); + } + + that.on('keydown.autocomplete', function (e) { + // down (40), up (38) + if ((e.which == 40 || e.which == 38) && that.sc.html()) { + var next, sel = $('.autocomplete-suggestion.selected', that.sc); + if (!sel.length) { + next = (e.which == 40) ? $('.autocomplete-suggestion', that.sc).first() : $('.autocomplete-suggestion', that.sc).last(); + that.val(next.addClass('selected').data('val')); + } else { + next = (e.which == 40) ? sel.next('.autocomplete-suggestion') : sel.prev('.autocomplete-suggestion'); + if (next.length) { + sel.removeClass('selected'); + that.val(next.addClass('selected').data('val')); + } else { + sel.removeClass('selected'); + that.val(that.last_val); + next = 0; + } + } + that.updateSC(0, next); + return false; + } + // esc + else if (e.which == 27) that.val(that.last_val).sc.hide(); + // enter or tab + else if (e.which == 13 || e.which == 9) { + var sel = $('.autocomplete-suggestion.selected', that.sc); + if (sel.length && that.sc.is(':visible')) { + o.onSelect(e, sel.data('val'), sel); + setTimeout(function () { + that.sc.hide(); + }, 20); + } + } + }); + + that.on('keyup.autocomplete', function (e) { + if (!~$.inArray(e.which, [13, 27, 35, 36, 37, 38, 39, 40])) { + var val = that.val(); + if (val.length >= o.minChars) { + if (val != that.last_val) { + that.last_val = val; + clearTimeout(that.timer); + if (o.cache) { + if (val in that.cache) { + suggest(that.cache[val]); + return; + } + // no requests if previous suggestions were empty + for (var i = 1; i < val.length - o.minChars; i++) { + var part = val.slice(0, val.length - i); + if (part in that.cache && !that.cache[part].length) { + suggest([]); + return; + } + } + } + that.timer = setTimeout(function () { + o.source(val, suggest) + }, o.delay); + } + } else { + that.last_val = val; + that.sc.hide(); + } + } + }); + }); + } + + $.fn.autoComplete.defaults = { + source: 0, + minChars: 3, + delay: 150, + cache: 1, + menuClass: '', + header: '', + footer: '', + renderItem: function (item, search) { + // escape special characters + search = search.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); + var re = new RegExp("(" + search.split(' ').join('|') + ")", "gi"); + return '
' + item.replace(re, "$1") + '
'; + }, + onSelect: function (e, term, item) { + } + }; +}(jQuery)); \ No newline at end of file diff --git a/public/assets/js/addons.js b/public/assets/js/addons.js index 9f9ca97..ff13199 100755 --- a/public/assets/js/addons.js +++ b/public/assets/js/addons.js @@ -1,5 +1,40 @@ define([], function () { - if (typeof Config.upload.storage !== 'undefined' && Config.upload.storage === 'alioss') { + require([], function () { + //绑定data-toggle=addresspicker属性点击事件 + + $(document).on('click', "[data-toggle='addresspicker']", function () { + var that = this; + var callback = $(that).data('callback'); + var input_id = $(that).data("input-id") ? $(that).data("input-id") : ""; + var lat_id = $(that).data("lat-id") ? $(that).data("lat-id") : ""; + var lng_id = $(that).data("lng-id") ? $(that).data("lng-id") : ""; + var zoom_id = $(that).data("zoom-id") ? $(that).data("zoom-id") : ""; + var lat = lat_id ? $("#" + lat_id).val() : ''; + var lng = lng_id ? $("#" + lng_id).val() : ''; + var zoom = zoom_id ? $("#" + zoom_id).val() : ''; + var url = "/addons/address/index/select"; + url += (lat && lng) ? '?lat=' + lat + '&lng=' + lng + (input_id ? "&address=" + $("#" + input_id).val() : "") + (zoom ? "&zoom=" + zoom : "") : ''; + Fast.api.open(url, '位置选择', { + callback: function (res) { + input_id && $("#" + input_id).val(res.address).trigger("change"); + lat_id && $("#" + lat_id).val(res.lat).trigger("change"); + lng_id && $("#" + lng_id).val(res.lng).trigger("change"); + zoom_id && $("#" + zoom_id).val(res.zoom).trigger("change"); + + try { + //执行回调函数 + if (typeof callback === 'function') { + callback.call(that, res); + } + } catch (e) { + + } + } + }); + }); +}); + +if (typeof Config.upload.storage !== 'undefined' && Config.upload.storage === 'alioss') { require(['upload'], function (Upload) { //获取文件MD5值 var getFileMd5 = function (file, cb) {