| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662 | 
							- /*!
 
-  * CityPicker v1.3.2
 
-  * https://github.com/tshi0912/citypicker
 
-  *
 
-  * Copyright (c) 2015-2019 Tao Shi
 
-  * Released under the MIT license
 
-  *
 
-  * Date: 2019-10-19T17:21:49.592Z
 
-  */
 
- (function (factory) {
 
-     if (typeof define === 'function' && define.amd) {
 
-         // AMD. Register as anonymous module.
 
-         define(['jquery', 'ChineseDistricts'], factory);
 
-     } else if (typeof exports === 'object') {
 
-         // Node / CommonJS
 
-         factory(require('jquery'), require('ChineseDistricts'));
 
-     } else {
 
-         // Browser globals.
 
-         factory(jQuery, ChineseDistricts);
 
-     }
 
- })(function ($, ChineseDistricts) {
 
-     'use strict';
 
-     if (typeof ChineseDistricts === 'undefined') {
 
-         throw new Error('The file "city-picker.data.js" must be included first!');
 
-     }
 
-     var NAMESPACE = 'citypicker';
 
-     var EVENT_CHANGE = 'change.' + NAMESPACE;
 
-     var PROVINCE = 'province';
 
-     var CITY = 'city';
 
-     var DISTRICT = 'district';
 
-     function CityPicker(element, options) {
 
-         this.$element = $(element);
 
-         this.$dropdown = null;
 
-         this.options = $.extend({}, CityPicker.DEFAULTS, $.isPlainObject(options) && options);
 
-         this.active = false;
 
-         this.dems = [];
 
-         this.needBlur = false;
 
-         this.init();
 
-     }
 
-     CityPicker.prototype = {
 
-         constructor: CityPicker,
 
-         init: function () {
 
-             this.codeRender();
 
-             this.defineDems();
 
-             this.render();
 
-             this.bind();
 
-             this.active = true;
 
-         },
 
-         codeRender: function () {
 
-             var code = this.$element.attr('code');
 
-             var value = this.$element.val();
 
-             if (code !== undefined && code !== '' && !isNaN(Number(code))) this.$element.val($.fn.citypicker.getAddressbyCodeId(code));
 
-             if (value !== undefined && value !== '' && !isNaN(Number(value))) this.$element.val($.fn.citypicker.getAddressbyCodeId(value));
 
-         },
 
-         render: function () {
 
-             var p = this.getPosition(),
 
-                 placeholder = this.$element.attr('placeholder') || this.options.placeholder,
 
-                 textspan = '<span class="city-picker-span" style="' +
 
-                     this.getWidthStyle(p.width) + 'height:' +
 
-                     p.height + 'px;line-height:' + (p.height - 1) + 'px;">' +
 
-                     (placeholder ? '<span class="placeholder">' + placeholder + '</span>' : '') +
 
-                     '<span class="title"></span><div class="arrow"></div>' + '</span>',
 
-                 dropdown = '<div class="city-picker-dropdown" style="left:0px;top:100%;' +
 
-                     this.getWidthStyle(p.width, true) + '">' +
 
-                     '<div class="city-select-wrap">' +
 
-                     '<div class="city-select-tab">' +
 
-                     '<a class="active" data-count="province">省份</a>' +
 
-                     (this.includeDem('city') ? '<a data-count="city">城市</a>' : '') +
 
-                     (this.includeDem('district') ? '<a data-count="district">区县</a>' : '') + '</div>' +
 
-                     '<div class="city-select-content">' +
 
-                     '<div class="city-select province" data-count="province"></div>' +
 
-                     (this.includeDem('city') ? '<div class="city-select city" data-count="city"></div>' : '') +
 
-                     (this.includeDem('district') ? '<div class="city-select district" data-count="district"></div>' : '') +
 
-                     '</div></div>';
 
-             this.$element.addClass('city-picker-input');
 
-             this.$textspan = $(textspan).insertAfter(this.$element);
 
-             this.$dropdown = $(dropdown).insertAfter(this.$textspan);
 
-             var $select = this.$dropdown.find('.city-select');
 
-             // setup this.$province, this.$city and/or this.$district object
 
-             $.each(this.dems, $.proxy(function (i, type) {
 
-                 this['$' + type] = $select.filter('.' + type + '');
 
-             }, this));
 
-             this.refresh();
 
-         },
 
-         refresh: function (force) {
 
-             // clean the data-item for each $select
 
-             var $select = this.$dropdown.find('.city-select');
 
-             $select.data('item', null);
 
-             // parse value from value of the target $element
 
-             var val = this.$element.val() || '';
 
-             val = val.split('/');
 
-             $.each(this.dems, $.proxy(function (i, type) {
 
-                 if (val[i] && i < val.length) {
 
-                     this.options[type] = val[i];
 
-                 } else if (force) {
 
-                     this.options[type] = '';
 
-                 }
 
-                 this.output(type);
 
-             }, this));
 
-             this.tab(PROVINCE);
 
-             this.feedText();
 
-             this.feedVal();
 
-         },
 
-         defineDems: function () {
 
-             var stop = false;
 
-             $.each([PROVINCE, CITY, DISTRICT], $.proxy(function (i, type) {
 
-                 if (!stop) {
 
-                     this.dems.push(type);
 
-                 }
 
-                 if (type === this.options.level) {
 
-                     stop = true;
 
-                 }
 
-             }, this));
 
-         },
 
-         includeDem: function (type) {
 
-             return $.inArray(type, this.dems) !== -1;
 
-         },
 
-         getPosition: function () {
 
-             var p, h, w, s, pw;
 
-             p = this.$element.position();
 
-             s = this.getSize(this.$element);
 
-             h = s.height;
 
-             w = s.width;
 
-             if (this.options.responsive) {
 
-                 pw = this.$element.offsetParent().width();
 
-                 if (pw) {
 
-                     w = w / pw;
 
-                     if (w > 0.99) {
 
-                         w = 1;
 
-                     }
 
-                     w = w * 100 + '%';
 
-                 }
 
-             }
 
-             return {
 
-                 top: p.top || 0,
 
-                 left: p.left || 0,
 
-                 height: h,
 
-                 width: w
 
-             };
 
-         },
 
-         getSize: function ($dom) {
 
-             var $wrap, $clone, sizes;
 
-             if (!$dom.is(':visible')) {
 
-                 $wrap = $("<div />").appendTo($("body"));
 
-                 $wrap.css({
 
-                     "position": "absolute !important",
 
-                     "visibility": "hidden !important",
 
-                     "display": "block !important"
 
-                 });
 
-                 $clone = $dom.clone().appendTo($wrap);
 
-                 sizes = {
 
-                     width: $clone.outerWidth(),
 
-                     height: $clone.outerHeight()
 
-                 };
 
-                 $wrap.remove();
 
-             } else {
 
-                 sizes = {
 
-                     width: $dom.outerWidth(),
 
-                     height: $dom.outerHeight()
 
-                 };
 
-             }
 
-             return sizes;
 
-         },
 
-         getWidthStyle: function (w, dropdown) {
 
-             if (this.options.responsive && !$.isNumeric(w)) {
 
-                 return 'width:' + w + ';';
 
-             } else {
 
-                 return 'width:' + (dropdown ? Math.max(320, w) : w) + 'px;';
 
-             }
 
-         },
 
-         bind: function () {
 
-             var $this = this;
 
-             $(document).on('click', (this._mouteclick = function (e) {
 
-                 var $target = $(e.target);
 
-                 var $dropdown, $span, $input;
 
-                 if ($target.is('.city-picker-span')) {
 
-                     $span = $target;
 
-                 } else if ($target.is('.city-picker-span *')) {
 
-                     $span = $target.parents('.city-picker-span');
 
-                 }
 
-                 if ($target.is('.city-picker-input')) {
 
-                     $input = $target;
 
-                 }
 
-                 if ($target.is('.city-picker-dropdown')) {
 
-                     $dropdown = $target;
 
-                 } else if ($target.is('.city-picker-dropdown *')) {
 
-                     $dropdown = $target.parents('.city-picker-dropdown');
 
-                 }
 
-                 if ((!$input && !$span && !$dropdown) ||
 
-                     ($span && $span.get(0) !== $this.$textspan.get(0)) ||
 
-                     ($input && $input.get(0) !== $this.$element.get(0)) ||
 
-                     ($dropdown && $dropdown.get(0) !== $this.$dropdown.get(0))) {
 
-                     $this.close(true);
 
-                 }
 
-             }));
 
-             this.$element.on('change', (this._changeElement = $.proxy(function () {
 
-                 this.close(true);
 
-                 this.refresh(true);
 
-             }, this))).on('focus', (this._focusElement = $.proxy(function () {
 
-                 this.needBlur = true;
 
-                 this.open();
 
-             }, this))).on('blur', (this._blurElement = $.proxy(function () {
 
-                 if (this.needBlur) {
 
-                     this.needBlur = false;
 
-                     this.close(true);
 
-                 }
 
-             }, this)));
 
-             this.$textspan.on('click', function (e) {
 
-                 var $target = $(e.target), type;
 
-                 $this.needBlur = false;
 
-                 if ($target.is('.select-item')) {
 
-                     type = $target.data('count');
 
-                     $this.open(type);
 
-                 } else {
 
-                     if ($this.$dropdown.is(':visible')) {
 
-                         $this.close();
 
-                     } else {
 
-                         $this.open();
 
-                     }
 
-                 }
 
-             }).on('mousedown', function () {
 
-                 $this.needBlur = false;
 
-             });
 
-             this.$dropdown.on('click', '.city-select a', function () {
 
-                 var $select = $(this).parents('.city-select');
 
-                 var $active = $select.find('a.active');
 
-                 var last = $select.next().length === 0;
 
-                 $active.removeClass('active');
 
-                 $(this).addClass('active');
 
-                 if ($active.data('code') !== $(this).data('code')) {
 
-                     $select.data('item', {
 
-                         address: $(this).attr('title'), code: $(this).data('code')
 
-                     });
 
-                     $(this).trigger(EVENT_CHANGE);
 
-                     $this.feedText();
 
-                     $this.feedVal(true);
 
-                     if (last) {
 
-                         $this.close();
 
-                     }
 
-                 }
 
-             }).on('click', '.city-select-tab a', function () {
 
-                 if (!$(this).hasClass('active')) {
 
-                     var type = $(this).data('count');
 
-                     $this.tab(type);
 
-                 }
 
-             }).on('mousedown', function () {
 
-                 $this.needBlur = false;
 
-             });
 
-             if (this.$province) {
 
-                 this.$province.on(EVENT_CHANGE, (this._changeProvince = $.proxy(function () {
 
-                     this.output(CITY);
 
-                     this.output(DISTRICT);
 
-                     this.tab(CITY);
 
-                 }, this)));
 
-             }
 
-             if (this.$city) {
 
-                 this.$city.on(EVENT_CHANGE, (this._changeCity = $.proxy(function () {
 
-                     this.output(DISTRICT);
 
-                     this.tab(DISTRICT);
 
-                 }, this)));
 
-             }
 
-         },
 
-         open: function (type) {
 
-             type = type || PROVINCE;
 
-             this.$dropdown.show();
 
-             this.$textspan.addClass('open').addClass('focus');
 
-             this.tab(type);
 
-         },
 
-         close: function (blur) {
 
-             this.$dropdown.hide();
 
-             this.$textspan.removeClass('open');
 
-             if (blur) {
 
-                 this.$textspan.removeClass('focus');
 
-             }
 
-         },
 
-         unbind: function () {
 
-             $(document).off('click', this._mouteclick);
 
-             this.$element.off('change', this._changeElement);
 
-             this.$element.off('focus', this._focusElement);
 
-             this.$element.off('blur', this._blurElement);
 
-             this.$textspan.off('click');
 
-             this.$textspan.off('mousedown');
 
-             this.$dropdown.off('click');
 
-             this.$dropdown.off('mousedown');
 
-             if (this.$province) {
 
-                 this.$province.off(EVENT_CHANGE, this._changeProvince);
 
-             }
 
-             if (this.$city) {
 
-                 this.$city.off(EVENT_CHANGE, this._changeCity);
 
-             }
 
-         },
 
-         getText: function () {
 
-             var text = '';
 
-             this.$dropdown.find('.city-select')
 
-                 .each(function () {
 
-                     var item = $(this).data('item'),
 
-                         type = $(this).data('count');
 
-                     if (item) {
 
-                         text += ($(this).hasClass('province') ? '' : '/') + '<span class="select-item" data-count="' +
 
-                             type + '" data-code="' + item.code + '">' + item.address + '</span>';
 
-                     }
 
-                 });
 
-             return text;
 
-         },
 
-         getPlaceHolder: function () {
 
-             return this.$element.attr('placeholder') || this.options.placeholder;
 
-         },
 
-         feedText: function () {
 
-             var text = this.getText();
 
-             if (text) {
 
-                 this.$textspan.find('>.placeholder').hide();
 
-                 this.$textspan.find('>.title').html(this.getText()).show();
 
-             } else {
 
-                 this.$textspan.find('>.placeholder').text(this.getPlaceHolder()).show();
 
-                 this.$textspan.find('>.title').html('').hide();
 
-             }
 
-         },
 
-         getCode: function (count) {
 
-             var obj = {}, arr = [];
 
-             this.$textspan.find('.select-item')
 
-                 .each(function () {
 
-                     var code = $(this).data('code');
 
-                     var count = $(this).data('count');
 
-                     obj[count] = code;
 
-                     arr.push(code);
 
-                 });
 
-             return count ? obj[count] : arr.join('/');
 
-         },
 
-         getVal: function () {
 
-             var text = '';
 
-             var code = '';
 
-             this.$dropdown.find('.city-select')
 
-                 .each(function () {
 
-                     var item = $(this).data('item');
 
-                     if (item) {
 
-                         code = item.code;
 
-                         text += ($(this).hasClass('province') ? '' : '/') + item.address;
 
-                     }
 
-                 });
 
-             return this.options.render == 'code' ? code : text;
 
-         },
 
-         feedVal: function (trigger) {
 
-             this.$element.val(this.getVal());
 
-             if (trigger) {
 
-                 this.$element.trigger('cp:updated');
 
-             }
 
-         },
 
-         output: function (type) {
 
-             var options = this.options;
 
-             //var placeholders = this.placeholders;
 
-             var $select = this['$' + type];
 
-             var data = type === PROVINCE ? {} : [];
 
-             var item;
 
-             var districts;
 
-             var code;
 
-             var matched = null;
 
-             var value;
 
-             if (!$select || !$select.length) {
 
-                 return;
 
-             }
 
-             item = $select.data('item');
 
-             value = (item ? item.address : null) || options[type];
 
-             code = (
 
-                 type === PROVINCE ? 86 :
 
-                     type === CITY ? this.$province && this.$province.find('.active').data('code') :
 
-                         type === DISTRICT ? this.$city && this.$city.find('.active').data('code') : code
 
-             );
 
-             districts = $.isNumeric(code) ? ChineseDistricts[code] : null;
 
-             if ($.isPlainObject(districts)) {
 
-                 $.each(districts, function (code, address) {
 
-                     var provs;
 
-                     if (type === PROVINCE) {
 
-                         provs = [];
 
-                         for (var i = 0; i < address.length; i++) {
 
-                             if (address[i].address === value) {
 
-                                 matched = {
 
-                                     code: address[i].code,
 
-                                     address: address[i].address
 
-                                 };
 
-                             }
 
-                             provs.push({
 
-                                 code: address[i].code,
 
-                                 address: address[i].address,
 
-                                 selected: address[i].address === value
 
-                             });
 
-                         }
 
-                         data[code] = provs;
 
-                     } else {
 
-                         if (address === value) {
 
-                             matched = {
 
-                                 code: code,
 
-                                 address: address
 
-                             };
 
-                         }
 
-                         data.push({
 
-                             code: code,
 
-                             address: address,
 
-                             selected: address === value
 
-                         });
 
-                     }
 
-                 });
 
-             }
 
-             $select.html(type === PROVINCE ? this.getProvinceList(data) :
 
-                 this.getList(data, type));
 
-             $select.data('item', matched);
 
-         },
 
-         getProvinceList: function (data) {
 
-             var list = [],
 
-                 $this = this,
 
-                 simple = this.options.simple;
 
-             $.each(data, function (i, n) {
 
-                 list.push('<dl class="clearfix">');
 
-                 list.push('<dt>' + i + '</dt><dd>');
 
-                 $.each(n, function (j, m) {
 
-                     list.push(
 
-                         '<a' +
 
-                         ' title="' + (m.address || '') + '"' +
 
-                         ' data-code="' + (m.code || '') + '"' +
 
-                         ' class="' +
 
-                         (m.selected ? ' active' : '') +
 
-                         '">' +
 
-                         (simple ? $this.simplize(m.address, PROVINCE) : m.address) +
 
-                         '</a>');
 
-                 });
 
-                 list.push('</dd></dl>');
 
-             });
 
-             return list.join('');
 
-         },
 
-         getList: function (data, type) {
 
-             var list = [],
 
-                 $this = this,
 
-                 simple = this.options.simple;
 
-             list.push('<dl class="clearfix"><dd>');
 
-             $.each(data, function (i, n) {
 
-                 list.push(
 
-                     '<a' +
 
-                     ' title="' + (n.address || '') + '"' +
 
-                     ' data-code="' + (n.code || '') + '"' +
 
-                     ' class="' +
 
-                     (n.selected ? ' active' : '') +
 
-                     '">' +
 
-                     (simple ? $this.simplize(n.address, type) : n.address) +
 
-                     '</a>');
 
-             });
 
-             list.push('</dd></dl>');
 
-             return list.join('');
 
-         },
 
-         simplize: function (address, type) {
 
-             address = address || '';
 
-             if (type === PROVINCE) {
 
-                 return address.replace(/[省,市,自治区,壮族,回族,维吾尔,特别行政区]/g, '');
 
-             } else if (type === CITY) {
 
-                 return address.replace(/[市,地区,回族,蒙古,苗族,白族,傣族,景颇族,藏族,彝族,壮族,傈僳族,布依族,侗族]/g, '')
 
-                     .replace('哈萨克', '').replace('自治州', '').replace(/自治县/, '');
 
-             } else if (type === DISTRICT) {
 
-                 return address.length > 2 ? address.replace(/[市,区,县,旗]/g, '') : address;
 
-             }
 
-         },
 
-         tab: function (type) {
 
-             var $selects = this.$dropdown.find('.city-select');
 
-             var $tabs = this.$dropdown.find('.city-select-tab > a');
 
-             var $select = this['$' + type];
 
-             var $tab = this.$dropdown.find('.city-select-tab > a[data-count="' + type + '"]');
 
-             if ($select) {
 
-                 $selects.hide();
 
-                 $select.show();
 
-                 $tabs.removeClass('active');
 
-                 $tab.addClass('active');
 
-             }
 
-         },
 
-         reset: function () {
 
-             this.$element.val(null).trigger('change');
 
-         },
 
-         destroy: function () {
 
-             this.unbind();
 
-             this.$element.removeData(NAMESPACE).removeClass('city-picker-input');
 
-             this.$textspan.remove();
 
-             this.$dropdown.remove();
 
-         }
 
-     };
 
-     CityPicker.DEFAULTS = {
 
-         simple: false,
 
-         responsive: true,
 
-         render: 'text',//填充为代码还是文本,可选code或text
 
-         placeholder: '请选择省/市/区',
 
-         level: 'district',
 
-         province: '',
 
-         city: '',
 
-         district: ''
 
-     };
 
-     CityPicker.setDefaults = function (options) {
 
-         $.extend(CityPicker.DEFAULTS, options);
 
-     };
 
-     // Save the other citypicker
 
-     CityPicker.other = $.fn.citypicker;
 
-     // Register as jQuery plugin
 
-     $.fn.citypicker = function (option) {
 
-         var args = [].slice.call(arguments, 1);
 
-         return this.each(function () {
 
-             var $this = $(this);
 
-             var data = $this.data(NAMESPACE);
 
-             var options;
 
-             var fn;
 
-             if (!data) {
 
-                 if (/destroy/.test(option)) {
 
-                     return;
 
-                 }
 
-                 options = $.extend({}, $this.data(), $.isPlainObject(option) && option);
 
-                 $this.data(NAMESPACE, (data = new CityPicker(this, options)));
 
-             }
 
-             if (typeof option === 'string' && $.isFunction(fn = data[option])) {
 
-                 fn.apply(data, args);
 
-             }
 
-         });
 
-     };
 
-     $.fn.citypicker.Constructor = CityPicker;
 
-     $.fn.citypicker.setDefaults = CityPicker.setDefaults;
 
-     // No conflict
 
-     $.fn.citypicker.noConflict = function () {
 
-         $.fn.citypicker = CityPicker.other;
 
-         return this;
 
-     };
 
-     // 根据code查询地址
 
-     $.fn.citypicker.getAddressbyCodeId = function (code_id) {
 
-         var city = ChineseDistricts;
 
-         var code = city['' + code_id];
 
-         var addr = '';
 
-         var province = '';
 
-         var province_code = '';
 
-         var city_str = '';
 
-         var county = '';
 
-         if (code_id.substring(0, 2) === '44') {
 
-             province = '广东省';
 
-             province_code = '440000';
 
-         } else {
 
-             $.each(city['86'], function (i, item) {
 
-                 $.each(item, function (j, index) {
 
-                     if (index['code'] === code_id.substring(0, 2) + '0000') {
 
-                         province = index['address'];
 
-                         province_code = index['code'];
 
-                         return false;
 
-                     }
 
-                 });
 
-             });
 
-         }
 
-         if (code_id.substring(2, 4).indexOf('00') == -1) {
 
-             if (code_id.length > 6) {
 
-                 var city_code = code_id.substring(0, 6);
 
-                 if (typeof city[province_code][city_code] !== 'undefined') {
 
-                     city_str = city[province_code][city_code];
 
-                 }
 
-             }
 
-             if (!city_str) {
 
-                 var city_code = code_id.substring(0, 4) + '00';
 
-                 if (typeof city[province_code][city_code] === 'undefined') {
 
-                     city_code = code_id.substring(0, 3) + '100';
 
-                 }
 
-                 if (typeof city[province_code][city_code] !== 'undefined') {
 
-                     city_str = city[province_code][city_code];
 
-                 }
 
-             }
 
-         }
 
-         if (code === undefined) {
 
-             addr = city[city_code][code_id];
 
-             return addr = province + '/' + city_str + '/' + addr;
 
-         } else {
 
-             if (code_id.substring(2, 4).indexOf('00') != -1) {
 
-                 //440000
 
-                 return addr = province;
 
-             } else {
 
-                 //440100
 
-                 var city_city = city[code_id.substring(0, 2) + '0000'];
 
-                 return addr = province + '/' + city_city[code_id];
 
-             }
 
-         }
 
-     }
 
-     $(function () {
 
-         $('[data-toggle="city-picker"]').citypicker();
 
-     });
 
- });
 
 
  |