From 3397848ea736d237c2021139c19862cb29ef03dc Mon Sep 17 00:00:00 2001 From: tangpeng Date: Mon, 10 Jun 2019 14:06:33 +0800 Subject: [PATCH 01/26] =?UTF-8?q?=E5=88=9D=E6=AD=A5=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E7=AC=AC=E4=B8=80=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-admin/browser-sync.sh | 1 + .../controller/system/SysIndexController.java | 1 + .../src/main/resources/application-druid.yml | 4 +- .../src/main/resources/application.yml | 6 +- ruoyi-admin/src/main/resources/logback.xml | 2 +- .../src/main/resources/templates/index.html | 16 +- .../src/main/resources/templates/login.html | 117 +- .../src/main/resources/templates/main.html | 1460 ++++++++--------- 8 files changed, 809 insertions(+), 798 deletions(-) create mode 100644 ruoyi-admin/browser-sync.sh diff --git a/ruoyi-admin/browser-sync.sh b/ruoyi-admin/browser-sync.sh new file mode 100644 index 000000000..4f900d9f2 --- /dev/null +++ b/ruoyi-admin/browser-sync.sh @@ -0,0 +1 @@ +browser-sync start --proxy localhost:80 --files "**" diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysIndexController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysIndexController.java index 3c736270a..e4c971b8d 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysIndexController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysIndexController.java @@ -35,6 +35,7 @@ public class SysIndexController extends BaseController mmap.put("user", user); mmap.put("copyrightYear", Global.getCopyrightYear()); mmap.put("demoEnabled", Global.isDemoEnabled()); + mmap.put("version", Global.getVersion()); return "index"; } diff --git a/ruoyi-admin/src/main/resources/application-druid.yml b/ruoyi-admin/src/main/resources/application-druid.yml index 18c0b11cc..d949faada 100644 --- a/ruoyi-admin/src/main/resources/application-druid.yml +++ b/ruoyi-admin/src/main/resources/application-druid.yml @@ -6,9 +6,9 @@ spring: druid: # 主库数据源 master: - url: jdbc:mysql://localhost:3306/ry?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 + url: jdbc:mysql://localhost:3306/rms?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 username: root - password: password + password: 123456 # 从库数据源 slave: # 从数据源开关/默认关闭 diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index f39fb29fa..6c44911fc 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -1,9 +1,9 @@ # 项目相关配置 ruoyi: # 名称 - name: RuoYi - # 版本 - version: 3.4.0 + name: RMS + # RMS版本(对应ruoyi版本:3.4.0) + version: 1.0.0 # 版权年份 copyrightYear: 2019 # 实例演示开关 diff --git a/ruoyi-admin/src/main/resources/logback.xml b/ruoyi-admin/src/main/resources/logback.xml index d69a57207..54a1f2ed7 100644 --- a/ruoyi-admin/src/main/resources/logback.xml +++ b/ruoyi-admin/src/main/resources/logback.xml @@ -1,7 +1,7 @@ - + diff --git a/ruoyi-admin/src/main/resources/templates/index.html b/ruoyi-admin/src/main/resources/templates/index.html index bb47d875f..eb233ca49 100644 --- a/ruoyi-admin/src/main/resources/templates/index.html +++ b/ruoyi-admin/src/main/resources/templates/index.html @@ -4,9 +4,9 @@ - 若依管理系统首页 - - + 资源管理系统首页 + + @@ -30,7 +30,7 @@ ",{class:"select2-results__options select2-results__options--nested"});n.append(j),h.append(i),h.append(n)}else this.template(c,d);return b.StoreData(d,"data",c),d},c.prototype.bind=function(c,d){var e=this,f=c.id+"-results";this.$results.attr("id",f),c.on("results:all",function(a){e.clear(),e.append(a.data),c.isOpen()&&(e.setClasses(),e.highlightFirstItem())}),c.on("results:append",function(a){e.append(a.data),c.isOpen()&&e.setClasses()}),c.on("query",function(a){e.hideMessages(),e.showLoading(a)}),c.on("select",function(){c.isOpen()&&(e.setClasses(),e.options.get("scrollAfterSelect")&&e.highlightFirstItem())}),c.on("unselect",function(){c.isOpen()&&(e.setClasses(),e.options.get("scrollAfterSelect")&&e.highlightFirstItem())}),c.on("open",function(){e.$results.attr("aria-expanded","true"),e.$results.attr("aria-hidden","false"),e.setClasses(),e.ensureHighlightVisible()}),c.on("close",function(){e.$results.attr("aria-expanded","false"),e.$results.attr("aria-hidden","true"),e.$results.removeAttr("aria-activedescendant")}),c.on("results:toggle",function(){var a=e.getHighlightedResults();0!==a.length&&a.trigger("mouseup")}),c.on("results:select",function(){var a=e.getHighlightedResults();if(0!==a.length){var c=b.GetData(a[0],"data");"true"==a.attr("aria-selected")?e.trigger("close",{}):e.trigger("select",{data:c})}}),c.on("results:previous",function(){var a=e.getHighlightedResults(),b=e.$results.find("[aria-selected]"),c=b.index(a);if(!(c<=0)){var d=c-1;0===a.length&&(d=0);var f=b.eq(d);f.trigger("mouseenter");var g=e.$results.offset().top,h=f.offset().top,i=e.$results.scrollTop()+(h-g);0===d?e.$results.scrollTop(0):h-g<0&&e.$results.scrollTop(i)}}),c.on("results:next",function(){var a=e.getHighlightedResults(),b=e.$results.find("[aria-selected]"),c=b.index(a),d=c+1;if(!(d>=b.length)){var f=b.eq(d);f.trigger("mouseenter");var g=e.$results.offset().top+e.$results.outerHeight(!1),h=f.offset().top+f.outerHeight(!1),i=e.$results.scrollTop()+h-g;0===d?e.$results.scrollTop(0):h>g&&e.$results.scrollTop(i)}}),c.on("results:focus",function(a){a.element.addClass("select2-results__option--highlighted")}),c.on("results:message",function(a){e.displayMessage(a)}),a.fn.mousewheel&&this.$results.on("mousewheel",function(a){var b=e.$results.scrollTop(),c=e.$results.get(0).scrollHeight-b+a.deltaY,d=a.deltaY>0&&b-a.deltaY<=0,f=a.deltaY<0&&c<=e.$results.height();d?(e.$results.scrollTop(0),a.preventDefault(),a.stopPropagation()):f&&(e.$results.scrollTop(e.$results.get(0).scrollHeight-e.$results.height()),a.preventDefault(),a.stopPropagation())}),this.$results.on("mouseup",".select2-results__option[aria-selected]",function(c){var d=a(this),f=b.GetData(this,"data");if("true"===d.attr("aria-selected"))return void(e.options.get("multiple")?e.trigger("unselect",{originalEvent:c,data:f}):e.trigger("close",{}));e.trigger("select",{originalEvent:c,data:f})}),this.$results.on("mouseenter",".select2-results__option[aria-selected]",function(c){var d=b.GetData(this,"data");e.getHighlightedResults().removeClass("select2-results__option--highlighted"),e.trigger("results:focus",{data:d,element:a(this)})})},c.prototype.getHighlightedResults=function(){return this.$results.find(".select2-results__option--highlighted")},c.prototype.destroy=function(){this.$results.remove()},c.prototype.ensureHighlightVisible=function(){var a=this.getHighlightedResults();if(0!==a.length){var b=this.$results.find("[aria-selected]"),c=b.index(a),d=this.$results.offset().top,e=a.offset().top,f=this.$results.scrollTop()+(e-d),g=e-d;f-=2*a.outerHeight(!1),c<=2?this.$results.scrollTop(0):(g>this.$results.outerHeight()||g<0)&&this.$results.scrollTop(f)}},c.prototype.template=function(b,c){var d=this.options.get("templateResult"),e=this.options.get("escapeMarkup"),f=d(b,c);null==f?c.style.display="none":"string"==typeof f?c.innerHTML=e(f):a(c).append(f)},c}),b.define("select2/keys",[],function(){return{BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46}}),b.define("select2/selection/base",["jquery","../utils","../keys"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,b.Observable),d.prototype.render=function(){var c=a('');return this._tabindex=0,null!=b.GetData(this.$element[0],"old-tabindex")?this._tabindex=b.GetData(this.$element[0],"old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),c.attr("title",this.$element.attr("title")),c.attr("tabindex",this._tabindex),this.$selection=c,c},d.prototype.bind=function(a,b){var d=this,e=(a.id,a.id+"-results");this.container=a,this.$selection.on("focus",function(a){d.trigger("focus",a)}),this.$selection.on("blur",function(a){d._handleBlur(a)}),this.$selection.on("keydown",function(a){d.trigger("keypress",a),a.which===c.SPACE&&a.preventDefault()}),a.on("results:focus",function(a){d.$selection.attr("aria-activedescendant",a.data._resultId)}),a.on("selection:update",function(a){d.update(a.data)}),a.on("open",function(){d.$selection.attr("aria-expanded","true"),d.$selection.attr("aria-owns",e),d._attachCloseHandler(a)}),a.on("close",function(){d.$selection.attr("aria-expanded","false"),d.$selection.removeAttr("aria-activedescendant"),d.$selection.removeAttr("aria-owns"),window.setTimeout(function(){d.$selection.focus()},0),d._detachCloseHandler(a)}),a.on("enable",function(){d.$selection.attr("tabindex",d._tabindex)}),a.on("disable",function(){d.$selection.attr("tabindex","-1")})},d.prototype._handleBlur=function(b){var c=this;window.setTimeout(function(){document.activeElement==c.$selection[0]||a.contains(c.$selection[0],document.activeElement)||c.trigger("blur",b)},1)},d.prototype._attachCloseHandler=function(c){a(document.body).on("mousedown.select2."+c.id,function(c){var d=a(c.target),e=d.closest(".select2");a(".select2.select2-container--open").each(function(){a(this),this!=e[0]&&b.GetData(this,"element").select2("close")})})},d.prototype._detachCloseHandler=function(b){a(document.body).off("mousedown.select2."+b.id)},d.prototype.position=function(a,b){b.find(".selection").append(a)},d.prototype.destroy=function(){this._detachCloseHandler(this.container)},d.prototype.update=function(a){throw new Error("The `update` method must be defined in child classes.")},d}),b.define("select2/selection/single",["jquery","./base","../utils","../keys"],function(a,b,c,d){function e(){e.__super__.constructor.apply(this,arguments)}return c.Extend(e,b),e.prototype.render=function(){var a=e.__super__.render.call(this);return a.addClass("select2-selection--single"),a.html(''),a},e.prototype.bind=function(a,b){var c=this;e.__super__.bind.apply(this,arguments);var d=a.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",d).attr("role","textbox").attr("aria-readonly","true"),this.$selection.attr("aria-labelledby",d),this.$selection.on("mousedown",function(a){1===a.which&&c.trigger("toggle",{originalEvent:a})}),this.$selection.on("focus",function(a){}),this.$selection.on("blur",function(a){}),a.on("focus",function(b){a.isOpen()||c.$selection.focus()})},e.prototype.clear=function(){var a=this.$selection.find(".select2-selection__rendered");a.empty(),a.removeAttr("title")},e.prototype.display=function(a,b){var c=this.options.get("templateSelection");return this.options.get("escapeMarkup")(c(a,b))},e.prototype.selectionContainer=function(){return a("")},e.prototype.update=function(a){if(0===a.length)return void this.clear();var b=a[0],c=this.$selection.find(".select2-selection__rendered"),d=this.display(b,c);c.empty().append(d),c.attr("title",b.title||b.text)},e}),b.define("select2/selection/multiple",["jquery","./base","../utils"],function(a,b,c){function d(a,b){d.__super__.constructor.apply(this,arguments)}return c.Extend(d,b),d.prototype.render=function(){var a=d.__super__.render.call(this);return a.addClass("select2-selection--multiple"),a.html('
    '),a},d.prototype.bind=function(b,e){var f=this;d.__super__.bind.apply(this,arguments),this.$selection.on("click",function(a){f.trigger("toggle",{originalEvent:a})}),this.$selection.on("click",".select2-selection__choice__remove",function(b){if(!f.options.get("disabled")){var d=a(this),e=d.parent(),g=c.GetData(e[0],"data");f.trigger("unselect",{originalEvent:b,data:g})}})},d.prototype.clear=function(){var a=this.$selection.find(".select2-selection__rendered");a.empty(),a.removeAttr("title")},d.prototype.display=function(a,b){var c=this.options.get("templateSelection");return this.options.get("escapeMarkup")(c(a,b))},d.prototype.selectionContainer=function(){return a('
  • ×
  • ')},d.prototype.update=function(a){if(this.clear(),0!==a.length){for(var b=[],d=0;d1||c)return a.call(this,b);this.clear();var d=this.createPlaceholder(this.placeholder);this.$selection.find(".select2-selection__rendered").append(d)},b}),b.define("select2/selection/allowClear",["jquery","../keys","../utils"],function(a,b,c){function d(){}return d.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),null==this.placeholder&&this.options.get("debug")&&window.console&&console.error&&console.error("Select2: The `allowClear` option should be used in combination with the `placeholder` option."),this.$selection.on("mousedown",".select2-selection__clear",function(a){d._handleClear(a)}),b.on("keypress",function(a){d._handleKeyboardClear(a,b)})},d.prototype._handleClear=function(a,b){if(!this.options.get("disabled")){var d=this.$selection.find(".select2-selection__clear");if(0!==d.length){b.stopPropagation();var e=c.GetData(d[0],"data"),f=this.$element.val();this.$element.val(this.placeholder.id);var g={data:e};if(this.trigger("clear",g),g.prevented)return void this.$element.val(f);for(var h=0;h0||0===d.length)){var e=this.options.get("translations").get("removeAllItems"),f=a('×');c.StoreData(f[0],"data",d),this.$selection.find(".select2-selection__rendered").prepend(f)}},d}),b.define("select2/selection/search",["jquery","../utils","../keys"],function(a,b,c){function d(a,b,c){a.call(this,b,c)}return d.prototype.render=function(b){var c=a('');this.$searchContainer=c,this.$search=c.find("input");var d=b.call(this);return this._transferTabIndex(),d},d.prototype.bind=function(a,d,e){var f=this;a.call(this,d,e),d.on("open",function(){f.$search.trigger("focus")}),d.on("close",function(){f.$search.val(""),f.$search.removeAttr("aria-activedescendant"),f.$search.trigger("focus")}),d.on("enable",function(){f.$search.prop("disabled",!1),f._transferTabIndex()}),d.on("disable",function(){f.$search.prop("disabled",!0)}),d.on("focus",function(a){f.$search.trigger("focus")}),d.on("results:focus",function(a){f.$search.attr("aria-activedescendant",a.id)}),this.$selection.on("focusin",".select2-search--inline",function(a){f.trigger("focus",a)}),this.$selection.on("focusout",".select2-search--inline",function(a){f._handleBlur(a)}),this.$selection.on("keydown",".select2-search--inline",function(a){if(a.stopPropagation(),f.trigger("keypress",a),f._keyUpPrevented=a.isDefaultPrevented(),a.which===c.BACKSPACE&&""===f.$search.val()){var d=f.$searchContainer.prev(".select2-selection__choice");if(d.length>0){var e=b.GetData(d[0],"data");f.searchRemoveChoice(e),a.preventDefault()}}});var g=document.documentMode,h=g&&g<=11;this.$selection.on("input.searchcheck",".select2-search--inline",function(a){if(h)return void f.$selection.off("input.search input.searchcheck");f.$selection.off("keyup.search")}),this.$selection.on("keyup.search input.search",".select2-search--inline",function(a){if(h&&"input"===a.type)return void f.$selection.off("input.search input.searchcheck");var b=a.which;b!=c.SHIFT&&b!=c.CTRL&&b!=c.ALT&&b!=c.TAB&&f.handleSearch(a)})},d.prototype._transferTabIndex=function(a){this.$search.attr("tabindex",this.$selection.attr("tabindex")),this.$selection.attr("tabindex","-1")},d.prototype.createPlaceholder=function(a,b){this.$search.attr("placeholder",b.text)},d.prototype.update=function(a,b){var c=this.$search[0]==document.activeElement;if(this.$search.attr("placeholder",""),a.call(this,b),this.$selection.find(".select2-selection__rendered").append(this.$searchContainer),this.resizeSearch(),c){this.$element.find("[data-select2-tag]").length?this.$element.focus():this.$search.focus()}},d.prototype.handleSearch=function(){if(this.resizeSearch(),!this._keyUpPrevented){var a=this.$search.val();this.trigger("query",{term:a})}this._keyUpPrevented=!1},d.prototype.searchRemoveChoice=function(a,b){this.trigger("unselect",{data:b}),this.$search.val(b.text),this.handleSearch()},d.prototype.resizeSearch=function(){this.$search.css("width","25px");var a="";if(""!==this.$search.attr("placeholder"))a=this.$selection.find(".select2-selection__rendered").innerWidth();else{a=.75*(this.$search.val().length+1)+"em"}this.$search.css("width",a)},d}),b.define("select2/selection/eventRelay",["jquery"],function(a){function b(){}return b.prototype.bind=function(b,c,d){var e=this,f=["open","opening","close","closing","select","selecting","unselect","unselecting","clear","clearing"],g=["opening","closing","selecting","unselecting","clearing"];b.call(this,c,d),c.on("*",function(b,c){if(-1!==a.inArray(b,f)){c=c||{};var d=a.Event("select2:"+b,{params:c});e.$element.trigger(d),-1!==a.inArray(b,g)&&(c.prevented=d.isDefaultPrevented())}})},b}),b.define("select2/translation",["jquery","require"],function(a,b){function c(a){this.dict=a||{}}return c.prototype.all=function(){return this.dict},c.prototype.get=function(a){return this.dict[a]},c.prototype.extend=function(b){this.dict=a.extend({},b.all(),this.dict)},c._cache={},c.loadPath=function(a){if(!(a in c._cache)){var d=b(a);c._cache[a]=d}return new c(c._cache[a])},c}),b.define("select2/diacritics",[],function(){return{"Ⓐ":"A","A":"A","À":"A","Á":"A","Â":"A","Ầ":"A","Ấ":"A","Ẫ":"A","Ẩ":"A","Ã":"A","Ā":"A","Ă":"A","Ằ":"A","Ắ":"A","Ẵ":"A","Ẳ":"A","Ȧ":"A","Ǡ":"A","Ä":"A","Ǟ":"A","Ả":"A","Å":"A","Ǻ":"A","Ǎ":"A","Ȁ":"A","Ȃ":"A","Ạ":"A","Ậ":"A","Ặ":"A","Ḁ":"A","Ą":"A","Ⱥ":"A","Ɐ":"A","Ꜳ":"AA","Æ":"AE","Ǽ":"AE","Ǣ":"AE","Ꜵ":"AO","Ꜷ":"AU","Ꜹ":"AV","Ꜻ":"AV","Ꜽ":"AY","Ⓑ":"B","B":"B","Ḃ":"B","Ḅ":"B","Ḇ":"B","Ƀ":"B","Ƃ":"B","Ɓ":"B","Ⓒ":"C","C":"C","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","Ç":"C","Ḉ":"C","Ƈ":"C","Ȼ":"C","Ꜿ":"C","Ⓓ":"D","D":"D","Ḋ":"D","Ď":"D","Ḍ":"D","Ḑ":"D","Ḓ":"D","Ḏ":"D","Đ":"D","Ƌ":"D","Ɗ":"D","Ɖ":"D","Ꝺ":"D","DZ":"DZ","DŽ":"DZ","Dz":"Dz","Dž":"Dz","Ⓔ":"E","E":"E","È":"E","É":"E","Ê":"E","Ề":"E","Ế":"E","Ễ":"E","Ể":"E","Ẽ":"E","Ē":"E","Ḕ":"E","Ḗ":"E","Ĕ":"E","Ė":"E","Ë":"E","Ẻ":"E","Ě":"E","Ȅ":"E","Ȇ":"E","Ẹ":"E","Ệ":"E","Ȩ":"E","Ḝ":"E","Ę":"E","Ḙ":"E","Ḛ":"E","Ɛ":"E","Ǝ":"E","Ⓕ":"F","F":"F","Ḟ":"F","Ƒ":"F","Ꝼ":"F","Ⓖ":"G","G":"G","Ǵ":"G","Ĝ":"G","Ḡ":"G","Ğ":"G","Ġ":"G","Ǧ":"G","Ģ":"G","Ǥ":"G","Ɠ":"G","Ꞡ":"G","Ᵹ":"G","Ꝿ":"G","Ⓗ":"H","H":"H","Ĥ":"H","Ḣ":"H","Ḧ":"H","Ȟ":"H","Ḥ":"H","Ḩ":"H","Ḫ":"H","Ħ":"H","Ⱨ":"H","Ⱶ":"H","Ɥ":"H","Ⓘ":"I","I":"I","Ì":"I","Í":"I","Î":"I","Ĩ":"I","Ī":"I","Ĭ":"I","İ":"I","Ï":"I","Ḯ":"I","Ỉ":"I","Ǐ":"I","Ȉ":"I","Ȋ":"I","Ị":"I","Į":"I","Ḭ":"I","Ɨ":"I","Ⓙ":"J","J":"J","Ĵ":"J","Ɉ":"J","Ⓚ":"K","K":"K","Ḱ":"K","Ǩ":"K","Ḳ":"K","Ķ":"K","Ḵ":"K","Ƙ":"K","Ⱪ":"K","Ꝁ":"K","Ꝃ":"K","Ꝅ":"K","Ꞣ":"K","Ⓛ":"L","L":"L","Ŀ":"L","Ĺ":"L","Ľ":"L","Ḷ":"L","Ḹ":"L","Ļ":"L","Ḽ":"L","Ḻ":"L","Ł":"L","Ƚ":"L","Ɫ":"L","Ⱡ":"L","Ꝉ":"L","Ꝇ":"L","Ꞁ":"L","LJ":"LJ","Lj":"Lj","Ⓜ":"M","M":"M","Ḿ":"M","Ṁ":"M","Ṃ":"M","Ɱ":"M","Ɯ":"M","Ⓝ":"N","N":"N","Ǹ":"N","Ń":"N","Ñ":"N","Ṅ":"N","Ň":"N","Ṇ":"N","Ņ":"N","Ṋ":"N","Ṉ":"N","Ƞ":"N","Ɲ":"N","Ꞑ":"N","Ꞥ":"N","NJ":"NJ","Nj":"Nj","Ⓞ":"O","O":"O","Ò":"O","Ó":"O","Ô":"O","Ồ":"O","Ố":"O","Ỗ":"O","Ổ":"O","Õ":"O","Ṍ":"O","Ȭ":"O","Ṏ":"O","Ō":"O","Ṑ":"O","Ṓ":"O","Ŏ":"O","Ȯ":"O","Ȱ":"O","Ö":"O","Ȫ":"O","Ỏ":"O","Ő":"O","Ǒ":"O","Ȍ":"O","Ȏ":"O","Ơ":"O","Ờ":"O","Ớ":"O","Ỡ":"O","Ở":"O","Ợ":"O","Ọ":"O","Ộ":"O","Ǫ":"O","Ǭ":"O","Ø":"O","Ǿ":"O","Ɔ":"O","Ɵ":"O","Ꝋ":"O","Ꝍ":"O","Œ":"OE","Ƣ":"OI","Ꝏ":"OO","Ȣ":"OU","Ⓟ":"P","P":"P","Ṕ":"P","Ṗ":"P","Ƥ":"P","Ᵽ":"P","Ꝑ":"P","Ꝓ":"P","Ꝕ":"P","Ⓠ":"Q","Q":"Q","Ꝗ":"Q","Ꝙ":"Q","Ɋ":"Q","Ⓡ":"R","R":"R","Ŕ":"R","Ṙ":"R","Ř":"R","Ȑ":"R","Ȓ":"R","Ṛ":"R","Ṝ":"R","Ŗ":"R","Ṟ":"R","Ɍ":"R","Ɽ":"R","Ꝛ":"R","Ꞧ":"R","Ꞃ":"R","Ⓢ":"S","S":"S","ẞ":"S","Ś":"S","Ṥ":"S","Ŝ":"S","Ṡ":"S","Š":"S","Ṧ":"S","Ṣ":"S","Ṩ":"S","Ș":"S","Ş":"S","Ȿ":"S","Ꞩ":"S","Ꞅ":"S","Ⓣ":"T","T":"T","Ṫ":"T","Ť":"T","Ṭ":"T","Ț":"T","Ţ":"T","Ṱ":"T","Ṯ":"T","Ŧ":"T","Ƭ":"T","Ʈ":"T","Ⱦ":"T","Ꞇ":"T","Ꜩ":"TZ","Ⓤ":"U","U":"U","Ù":"U","Ú":"U","Û":"U","Ũ":"U","Ṹ":"U","Ū":"U","Ṻ":"U","Ŭ":"U","Ü":"U","Ǜ":"U","Ǘ":"U","Ǖ":"U","Ǚ":"U","Ủ":"U","Ů":"U","Ű":"U","Ǔ":"U","Ȕ":"U","Ȗ":"U","Ư":"U","Ừ":"U","Ứ":"U","Ữ":"U","Ử":"U","Ự":"U","Ụ":"U","Ṳ":"U","Ų":"U","Ṷ":"U","Ṵ":"U","Ʉ":"U","Ⓥ":"V","V":"V","Ṽ":"V","Ṿ":"V","Ʋ":"V","Ꝟ":"V","Ʌ":"V","Ꝡ":"VY","Ⓦ":"W","W":"W","Ẁ":"W","Ẃ":"W","Ŵ":"W","Ẇ":"W","Ẅ":"W","Ẉ":"W","Ⱳ":"W","Ⓧ":"X","X":"X","Ẋ":"X","Ẍ":"X","Ⓨ":"Y","Y":"Y","Ỳ":"Y","Ý":"Y","Ŷ":"Y","Ỹ":"Y","Ȳ":"Y","Ẏ":"Y","Ÿ":"Y","Ỷ":"Y","Ỵ":"Y","Ƴ":"Y","Ɏ":"Y","Ỿ":"Y","Ⓩ":"Z","Z":"Z","Ź":"Z","Ẑ":"Z","Ż":"Z","Ž":"Z","Ẓ":"Z","Ẕ":"Z","Ƶ":"Z","Ȥ":"Z","Ɀ":"Z","Ⱬ":"Z","Ꝣ":"Z","ⓐ":"a","a":"a","ẚ":"a","à":"a","á":"a","â":"a","ầ":"a","ấ":"a","ẫ":"a","ẩ":"a","ã":"a","ā":"a","ă":"a","ằ":"a","ắ":"a","ẵ":"a","ẳ":"a","ȧ":"a","ǡ":"a","ä":"a","ǟ":"a","ả":"a","å":"a","ǻ":"a","ǎ":"a","ȁ":"a","ȃ":"a","ạ":"a","ậ":"a","ặ":"a","ḁ":"a","ą":"a","ⱥ":"a","ɐ":"a","ꜳ":"aa","æ":"ae","ǽ":"ae","ǣ":"ae","ꜵ":"ao","ꜷ":"au","ꜹ":"av","ꜻ":"av","ꜽ":"ay","ⓑ":"b","b":"b","ḃ":"b","ḅ":"b","ḇ":"b","ƀ":"b","ƃ":"b","ɓ":"b","ⓒ":"c","c":"c","ć":"c","ĉ":"c","ċ":"c","č":"c","ç":"c","ḉ":"c","ƈ":"c","ȼ":"c","ꜿ":"c","ↄ":"c","ⓓ":"d","d":"d","ḋ":"d","ď":"d","ḍ":"d","ḑ":"d","ḓ":"d","ḏ":"d","đ":"d","ƌ":"d","ɖ":"d","ɗ":"d","ꝺ":"d","dz":"dz","dž":"dz","ⓔ":"e","e":"e","è":"e","é":"e","ê":"e","ề":"e","ế":"e","ễ":"e","ể":"e","ẽ":"e","ē":"e","ḕ":"e","ḗ":"e","ĕ":"e","ė":"e","ë":"e","ẻ":"e","ě":"e","ȅ":"e","ȇ":"e","ẹ":"e","ệ":"e","ȩ":"e","ḝ":"e","ę":"e","ḙ":"e","ḛ":"e","ɇ":"e","ɛ":"e","ǝ":"e","ⓕ":"f","f":"f","ḟ":"f","ƒ":"f","ꝼ":"f","ⓖ":"g","g":"g","ǵ":"g","ĝ":"g","ḡ":"g","ğ":"g","ġ":"g","ǧ":"g","ģ":"g","ǥ":"g","ɠ":"g","ꞡ":"g","ᵹ":"g","ꝿ":"g","ⓗ":"h","h":"h","ĥ":"h","ḣ":"h","ḧ":"h","ȟ":"h","ḥ":"h","ḩ":"h","ḫ":"h","ẖ":"h","ħ":"h","ⱨ":"h","ⱶ":"h","ɥ":"h","ƕ":"hv","ⓘ":"i","i":"i","ì":"i","í":"i","î":"i","ĩ":"i","ī":"i","ĭ":"i","ï":"i","ḯ":"i","ỉ":"i","ǐ":"i","ȉ":"i","ȋ":"i","ị":"i","į":"i","ḭ":"i","ɨ":"i","ı":"i","ⓙ":"j","j":"j","ĵ":"j","ǰ":"j","ɉ":"j","ⓚ":"k","k":"k","ḱ":"k","ǩ":"k","ḳ":"k","ķ":"k","ḵ":"k","ƙ":"k","ⱪ":"k","ꝁ":"k","ꝃ":"k","ꝅ":"k","ꞣ":"k","ⓛ":"l","l":"l","ŀ":"l","ĺ":"l","ľ":"l","ḷ":"l","ḹ":"l","ļ":"l","ḽ":"l","ḻ":"l","ſ":"l","ł":"l","ƚ":"l","ɫ":"l","ⱡ":"l","ꝉ":"l","ꞁ":"l","ꝇ":"l","lj":"lj","ⓜ":"m","m":"m","ḿ":"m","ṁ":"m","ṃ":"m","ɱ":"m","ɯ":"m","ⓝ":"n","n":"n","ǹ":"n","ń":"n","ñ":"n","ṅ":"n","ň":"n","ṇ":"n","ņ":"n","ṋ":"n","ṉ":"n","ƞ":"n","ɲ":"n","ʼn":"n","ꞑ":"n","ꞥ":"n","nj":"nj","ⓞ":"o","o":"o","ò":"o","ó":"o","ô":"o","ồ":"o","ố":"o","ỗ":"o","ổ":"o","õ":"o","ṍ":"o","ȭ":"o","ṏ":"o","ō":"o","ṑ":"o","ṓ":"o","ŏ":"o","ȯ":"o","ȱ":"o","ö":"o","ȫ":"o","ỏ":"o","ő":"o","ǒ":"o","ȍ":"o","ȏ":"o","ơ":"o","ờ":"o","ớ":"o","ỡ":"o","ở":"o","ợ":"o","ọ":"o","ộ":"o","ǫ":"o","ǭ":"o","ø":"o","ǿ":"o","ɔ":"o","ꝋ":"o","ꝍ":"o","ɵ":"o","œ":"oe","ƣ":"oi","ȣ":"ou","ꝏ":"oo","ⓟ":"p","p":"p","ṕ":"p","ṗ":"p","ƥ":"p","ᵽ":"p","ꝑ":"p","ꝓ":"p","ꝕ":"p","ⓠ":"q","q":"q","ɋ":"q","ꝗ":"q","ꝙ":"q","ⓡ":"r","r":"r","ŕ":"r","ṙ":"r","ř":"r","ȑ":"r","ȓ":"r","ṛ":"r","ṝ":"r","ŗ":"r","ṟ":"r","ɍ":"r","ɽ":"r","ꝛ":"r","ꞧ":"r","ꞃ":"r","ⓢ":"s","s":"s","ß":"s","ś":"s","ṥ":"s","ŝ":"s","ṡ":"s","š":"s","ṧ":"s","ṣ":"s","ṩ":"s","ș":"s","ş":"s","ȿ":"s","ꞩ":"s","ꞅ":"s","ẛ":"s","ⓣ":"t","t":"t","ṫ":"t","ẗ":"t","ť":"t","ṭ":"t","ț":"t","ţ":"t","ṱ":"t","ṯ":"t","ŧ":"t","ƭ":"t","ʈ":"t","ⱦ":"t","ꞇ":"t","ꜩ":"tz","ⓤ":"u","u":"u","ù":"u","ú":"u","û":"u","ũ":"u","ṹ":"u","ū":"u","ṻ":"u","ŭ":"u","ü":"u","ǜ":"u","ǘ":"u","ǖ":"u","ǚ":"u","ủ":"u","ů":"u","ű":"u","ǔ":"u","ȕ":"u","ȗ":"u","ư":"u","ừ":"u","ứ":"u","ữ":"u","ử":"u","ự":"u","ụ":"u","ṳ":"u","ų":"u","ṷ":"u","ṵ":"u","ʉ":"u","ⓥ":"v","v":"v","ṽ":"v","ṿ":"v","ʋ":"v","ꝟ":"v","ʌ":"v","ꝡ":"vy","ⓦ":"w","w":"w","ẁ":"w","ẃ":"w","ŵ":"w","ẇ":"w","ẅ":"w","ẘ":"w","ẉ":"w","ⱳ":"w","ⓧ":"x","x":"x","ẋ":"x","ẍ":"x","ⓨ":"y","y":"y","ỳ":"y","ý":"y","ŷ":"y","ỹ":"y","ȳ":"y","ẏ":"y","ÿ":"y","ỷ":"y","ẙ":"y","ỵ":"y","ƴ":"y","ɏ":"y","ỿ":"y","ⓩ":"z","z":"z","ź":"z","ẑ":"z","ż":"z","ž":"z","ẓ":"z","ẕ":"z","ƶ":"z","ȥ":"z","ɀ":"z","ⱬ":"z","ꝣ":"z","Ά":"Α","Έ":"Ε","Ή":"Η","Ί":"Ι","Ϊ":"Ι","Ό":"Ο","Ύ":"Υ","Ϋ":"Υ","Ώ":"Ω","ά":"α","έ":"ε","ή":"η","ί":"ι","ϊ":"ι","ΐ":"ι","ό":"ο","ύ":"υ","ϋ":"υ","ΰ":"υ","ώ":"ω","ς":"σ","’":"'"}}),b.define("select2/data/base",["../utils"],function(a){function b(a,c){b.__super__.constructor.call(this)}return a.Extend(b,a.Observable),b.prototype.current=function(a){throw new Error("The `current` method must be defined in child classes.")},b.prototype.query=function(a,b){throw new Error("The `query` method must be defined in child classes.")},b.prototype.bind=function(a,b){},b.prototype.destroy=function(){},b.prototype.generateResultId=function(b,c){var d=b.id+"-result-";return d+=a.generateChars(4),null!=c.id?d+="-"+c.id.toString():d+="-"+a.generateChars(4),d},b}),b.define("select2/data/select",["./base","../utils","jquery"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,a),d.prototype.current=function(a){var b=[],d=this;this.$element.find(":selected").each(function(){var a=c(this),e=d.item(a);b.push(e)}),a(b)},d.prototype.select=function(a){var b=this;if(a.selected=!0,c(a.element).is("option"))return a.element.selected=!0,void this.$element.trigger("change");if(this.$element.prop("multiple"))this.current(function(d){var e=[];a=[a],a.push.apply(a,d);for(var f=0;f=0){var k=f.filter(d(j)),l=this.item(k),m=c.extend(!0,{},j,l),n=this.option(m);k.replaceWith(n)}else{var o=this.option(j);if(j.children){var p=this.convertToOptions(j.children);b.appendMany(o,p)}h.push(o)}}return h},d}),b.define("select2/data/ajax",["./array","../utils","jquery"],function(a,b,c){function d(a,b){this.ajaxOptions=this._applyDefaults(b.get("ajax")),null!=this.ajaxOptions.processResults&&(this.processResults=this.ajaxOptions.processResults),d.__super__.constructor.call(this,a,b)}return b.Extend(d,a),d.prototype._applyDefaults=function(a){var b={data:function(a){return c.extend({},a,{q:a.term})},transport:function(a,b,d){var e=c.ajax(a);return e.then(b),e.fail(d),e}};return c.extend({},b,a,!0)},d.prototype.processResults=function(a){return a},d.prototype.query=function(a,b){function d(){var d=f.transport(f,function(d){var f=e.processResults(d,a);e.options.get("debug")&&window.console&&console.error&&(f&&f.results&&c.isArray(f.results)||console.error("Select2: The AJAX results did not return an array in the `results` key of the response.")),b(f)},function(){"status"in d&&(0===d.status||"0"===d.status)||e.trigger("results:message",{message:"errorLoading"})});e._request=d}var e=this;null!=this._request&&(c.isFunction(this._request.abort)&&this._request.abort(),this._request=null);var f=c.extend({type:"GET"},this.ajaxOptions);"function"==typeof f.url&&(f.url=f.url.call(this.$element,a)),"function"==typeof f.data&&(f.data=f.data.call(this.$element,a)),this.ajaxOptions.delay&&null!=a.term?(this._queryTimeout&&window.clearTimeout(this._queryTimeout),this._queryTimeout=window.setTimeout(d,this.ajaxOptions.delay)):d()},d}),b.define("select2/data/tags",["jquery"],function(a){function b(b,c,d){var e=d.get("tags"),f=d.get("createTag");void 0!==f&&(this.createTag=f);var g=d.get("insertTag");if(void 0!==g&&(this.insertTag=g),b.call(this,c,d),a.isArray(e))for(var h=0;h0&&b.term.length>this.maximumInputLength)return void this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:b.term,params:b}});a.call(this,b,c)},a}),b.define("select2/data/maximumSelectionLength",[],function(){function a(a,b,c){this.maximumSelectionLength=c.get("maximumSelectionLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){var d=this;this.current(function(e){var f=null!=e?e.length:0;if(d.maximumSelectionLength>0&&f>=d.maximumSelectionLength)return void d.trigger("results:message",{message:"maximumSelected",args:{maximum:d.maximumSelectionLength}});a.call(d,b,c)})},a}),b.define("select2/dropdown",["jquery","./utils"],function(a,b){function c(a,b){this.$element=a,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('');return b.attr("dir",this.options.get("dir")),this.$dropdown=b,b},c.prototype.bind=function(){},c.prototype.position=function(a,b){},c.prototype.destroy=function(){this.$dropdown.remove()},c}),b.define("select2/dropdown/search",["jquery","../utils"],function(a,b){function c(){}return c.prototype.render=function(b){var c=b.call(this),d=a('');return this.$searchContainer=d,this.$search=d.find("input"),c.prepend(d),c},c.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),this.$search.on("keydown",function(a){e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented()}),this.$search.on("input",function(b){a(this).off("keyup")}),this.$search.on("keyup input",function(a){e.handleSearch(a)}),c.on("open",function(){e.$search.attr("tabindex",0),e.$search.focus(),window.setTimeout(function(){e.$search.focus()},0)}),c.on("close",function(){e.$search.attr("tabindex",-1),e.$search.val(""),e.$search.blur()}),c.on("focus",function(){c.isOpen()||e.$search.focus()}),c.on("results:all",function(a){if(null==a.query.term||""===a.query.term){e.showSearch(a)?e.$searchContainer.removeClass("select2-search--hide"):e.$searchContainer.addClass("select2-search--hide")}})},c.prototype.handleSearch=function(a){if(!this._keyUpPrevented){var b=this.$search.val();this.trigger("query",{term:b})}this._keyUpPrevented=!1},c.prototype.showSearch=function(a,b){return!0},c}),b.define("select2/dropdown/hidePlaceholder",[],function(){function a(a,b,c,d){this.placeholder=this.normalizePlaceholder(c.get("placeholder")),a.call(this,b,c,d)}return a.prototype.append=function(a,b){b.results=this.removePlaceholder(b.results),a.call(this,b)},a.prototype.normalizePlaceholder=function(a,b){return"string"==typeof b&&(b={id:"",text:b}),b},a.prototype.removePlaceholder=function(a,b){for(var c=b.slice(0),d=b.length-1;d>=0;d--){var e=b[d];this.placeholder.id===e.id&&c.splice(d,1)}return c},a}),b.define("select2/dropdown/infiniteScroll",["jquery"],function(a){function b(a,b,c,d){this.lastParams={},a.call(this,b,c,d),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return b.prototype.append=function(a,b){this.$loadingMore.remove(),this.loading=!1,a.call(this,b),this.showLoadingMore(b)&&this.$results.append(this.$loadingMore)},b.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),c.on("query",function(a){e.lastParams=a,e.loading=!0}),c.on("query:append",function(a){e.lastParams=a,e.loading=!0}),this.$results.on("scroll",function(){var b=a.contains(document.documentElement,e.$loadingMore[0]);if(!e.loading&&b){e.$results.offset().top+e.$results.outerHeight(!1)+50>=e.$loadingMore.offset().top+e.$loadingMore.outerHeight(!1)&&e.loadMore()}})},b.prototype.loadMore=function(){this.loading=!0;var b=a.extend({},{page:1},this.lastParams);b.page++,this.trigger("query:append",b)},b.prototype.showLoadingMore=function(a,b){return b.pagination&&b.pagination.more},b.prototype.createLoadingMore=function(){var b=a('
  • '),c=this.options.get("translations").get("loadingMore");return b.html(c(this.lastParams)),b},b}),b.define("select2/dropdown/attachBody",["jquery","../utils"],function(a,b){function c(b,c,d){this.$dropdownParent=d.get("dropdownParent")||a(document.body),b.call(this,c,d)}return c.prototype.bind=function(a,b,c){var d=this,e=!1;a.call(this,b,c),b.on("open",function(){d._showDropdown(),d._attachPositioningHandler(b),e||(e=!0,b.on("results:all",function(){d._positionDropdown(),d._resizeDropdown()}),b.on("results:append",function(){d._positionDropdown(),d._resizeDropdown()}))}),b.on("close",function(){d._hideDropdown(),d._detachPositioningHandler(b)}),this.$dropdownContainer.on("mousedown",function(a){a.stopPropagation()})},c.prototype.destroy=function(a){a.call(this),this.$dropdownContainer.remove()},c.prototype.position=function(a,b,c){b.attr("class",c.attr("class")),b.removeClass("select2"),b.addClass("select2-container--open"),b.css({position:"absolute",top:-999999}),this.$container=c},c.prototype.render=function(b){var c=a(""),d=b.call(this);return c.append(d),this.$dropdownContainer=c,c},c.prototype._hideDropdown=function(a){this.$dropdownContainer.detach()},c.prototype._attachPositioningHandler=function(c,d){var e=this,f="scroll.select2."+d.id,g="resize.select2."+d.id,h="orientationchange.select2."+d.id,i=this.$container.parents().filter(b.hasScroll);i.each(function(){b.StoreData(this,"select2-scroll-position",{x:a(this).scrollLeft(),y:a(this).scrollTop()})}),i.on(f,function(c){var d=b.GetData(this,"select2-scroll-position");a(this).scrollTop(d.y)}),a(window).on(f+" "+g+" "+h,function(a){e._positionDropdown(),e._resizeDropdown()})},c.prototype._detachPositioningHandler=function(c,d){var e="scroll.select2."+d.id,f="resize.select2."+d.id,g="orientationchange.select2."+d.id;this.$container.parents().filter(b.hasScroll).off(e),a(window).off(e+" "+f+" "+g)},c.prototype._positionDropdown=function(){var b=a(window),c=this.$dropdown.hasClass("select2-dropdown--above"),d=this.$dropdown.hasClass("select2-dropdown--below"),e=null,f=this.$container.offset();f.bottom=f.top+this.$container.outerHeight(!1);var g={height:this.$container.outerHeight(!1)};g.top=f.top,g.bottom=f.top+g.height;var h={height:this.$dropdown.outerHeight(!1)},i={top:b.scrollTop(),bottom:b.scrollTop()+b.height()},j=i.topf.bottom+h.height,l={left:f.left,top:g.bottom},m=this.$dropdownParent;"static"===m.css("position")&&(m=m.offsetParent());var n=m.offset();l.top-=n.top,l.left-=n.left,c||d||(e="below"),k||!j||c?!j&&k&&c&&(e="below"):e="above",("above"==e||c&&"below"!==e)&&(l.top=g.top-n.top-h.height),null!=e&&(this.$dropdown.removeClass("select2-dropdown--below select2-dropdown--above").addClass("select2-dropdown--"+e),this.$container.removeClass("select2-container--below select2-container--above").addClass("select2-container--"+e)),this.$dropdownContainer.css(l)},c.prototype._resizeDropdown=function(){var a={width:this.$container.outerWidth(!1)+"px"};this.options.get("dropdownAutoWidth")&&(a.minWidth=a.width,a.position="relative",a.width="auto"),this.$dropdown.css(a)},c.prototype._showDropdown=function(a){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},c}),b.define("select2/dropdown/minimumResultsForSearch",[],function(){function a(b){for(var c=0,d=0;d0&&(l.dataAdapter=j.Decorate(l.dataAdapter,r)),l.maximumInputLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,s)),l.maximumSelectionLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,t)),l.tags&&(l.dataAdapter=j.Decorate(l.dataAdapter,p)),null==l.tokenSeparators&&null==l.tokenizer||(l.dataAdapter=j.Decorate(l.dataAdapter,q)),null!=l.query){var C=b(l.amdBase+"compat/query");l.dataAdapter=j.Decorate(l.dataAdapter,C)}if(null!=l.initSelection){var D=b(l.amdBase+"compat/initSelection");l.dataAdapter=j.Decorate(l.dataAdapter,D)}}if(null==l.resultsAdapter&&(l.resultsAdapter=c,null!=l.ajax&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,x)),null!=l.placeholder&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,w)),l.selectOnClose&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,A))),null==l.dropdownAdapter){if(l.multiple)l.dropdownAdapter=u;else{var E=j.Decorate(u,v);l.dropdownAdapter=E}if(0!==l.minimumResultsForSearch&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,z)),l.closeOnSelect&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,B)),null!=l.dropdownCssClass||null!=l.dropdownCss||null!=l.adaptDropdownCssClass){var F=b(l.amdBase+"compat/dropdownCss");l.dropdownAdapter=j.Decorate(l.dropdownAdapter,F)}l.dropdownAdapter=j.Decorate(l.dropdownAdapter,y)}if(null==l.selectionAdapter){if(l.multiple?l.selectionAdapter=e:l.selectionAdapter=d,null!=l.placeholder&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,f)),l.allowClear&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,g)),l.multiple&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,h)),null!=l.containerCssClass||null!=l.containerCss||null!=l.adaptContainerCssClass){var G=b(l.amdBase+"compat/containerCss");l.selectionAdapter=j.Decorate(l.selectionAdapter,G)}l.selectionAdapter=j.Decorate(l.selectionAdapter,i)}if("string"==typeof l.language)if(l.language.indexOf("-")>0){var H=l.language.split("-"),I=H[0];l.language=[l.language,I]}else l.language=[l.language];if(a.isArray(l.language)){var J=new k;l.language.push("en");for(var K=l.language,L=0;L0){for(var f=a.extend(!0,{},e),g=e.children.length-1;g>=0;g--){null==c(d,e.children[g])&&f.children.splice(g,1)}return f.children.length>0?f:c(d,f)}var h=b(e.text).toUpperCase(),i=b(d.term).toUpperCase();return h.indexOf(i)>-1?e:null}this.defaults={amdBase:"./",amdLanguageBase:"./i18n/",closeOnSelect:!0,debug:!1,dropdownAutoWidth:!1,escapeMarkup:j.escapeMarkup,language:C,matcher:c,minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:!1,scrollAfterSelect:!1,sorter:function(a){return a},templateResult:function(a){return a.text},templateSelection:function(a){return a.text},theme:"default",width:"resolve"}},D.prototype.set=function(b,c){var d=a.camelCase(b),e={};e[d]=c;var f=j._convertData(e);a.extend(!0,this.defaults,f)},new D}),b.define("select2/options",["require","jquery","./defaults","./utils"],function(a,b,c,d){function e(b,e){if(this.options=b,null!=e&&this.fromElement(e),this.options=c.apply(this.options),e&&e.is("input")){var f=a(this.get("amdBase")+"compat/inputData");this.options.dataAdapter=d.Decorate(this.options.dataAdapter,f)}}return e.prototype.fromElement=function(a){function c(a,b){return b.toUpperCase()}var e=["select2"];null==this.options.multiple&&(this.options.multiple=a.prop("multiple")),null==this.options.disabled&&(this.options.disabled=a.prop("disabled")),null==this.options.language&&(a.prop("lang")?this.options.language=a.prop("lang").toLowerCase():a.closest("[lang]").prop("lang")&&(this.options.language=a.closest("[lang]").prop("lang"))),null==this.options.dir&&(a.prop("dir")?this.options.dir=a.prop("dir"):a.closest("[dir]").prop("dir")?this.options.dir=a.closest("[dir]").prop("dir"):this.options.dir="ltr"),a.prop("disabled",this.options.disabled),a.prop("multiple",this.options.multiple),d.GetData(a[0],"select2Tags")&&(this.options.debug&&window.console&&console.warn&&console.warn('Select2: The `data-select2-tags` attribute has been changed to use the `data-data` and `data-tags="true"` attributes and will be removed in future versions of Select2.'),d.StoreData(a[0],"data",d.GetData(a[0],"select2Tags")),d.StoreData(a[0],"tags",!0)),d.GetData(a[0],"ajaxUrl")&&(this.options.debug&&window.console&&console.warn&&console.warn("Select2: The `data-ajax-url` attribute has been changed to `data-ajax--url` and support for the old attribute will be removed in future versions of Select2."),a.attr("ajax--url",d.GetData(a[0],"ajaxUrl")),d.StoreData(a[0],"ajax-Url",d.GetData(a[0],"ajaxUrl")));for(var f={},g=0;g-1||(b.isPlainObject(this.options[m])?b.extend(this.options[m],l[m]):this.options[m]=l[m]);return this},e.prototype.get=function(a){return this.options[a]},e.prototype.set=function(a,b){this.options[a]=b},e}),b.define("select2/core",["jquery","./options","./utils","./keys"],function(a,b,c,d){var e=function(a,d){null!=c.GetData(a[0],"select2")&&c.GetData(a[0],"select2").destroy(),this.$element=a,this.id=this._generateId(a),d=d||{},this.options=new b(d,a),e.__super__.constructor.call(this);var f=a.attr("tabindex")||0;c.StoreData(a[0],"old-tabindex",f),a.attr("tabindex","-1");var g=this.options.get("dataAdapter");this.dataAdapter=new g(a,this.options);var h=this.render();this._placeContainer(h);var i=this.options.get("selectionAdapter");this.selection=new i(a,this.options),this.$selection=this.selection.render(),this.selection.position(this.$selection,h);var j=this.options.get("dropdownAdapter");this.dropdown=new j(a,this.options),this.$dropdown=this.dropdown.render(),this.dropdown.position(this.$dropdown,h);var k=this.options.get("resultsAdapter");this.results=new k(a,this.options,this.dataAdapter),this.$results=this.results.render(),this.results.position(this.$results,this.$dropdown);var l=this;this._bindAdapters(),this._registerDomEvents(),this._registerDataEvents(),this._registerSelectionEvents(),this._registerDropdownEvents(),this._registerResultsEvents(),this._registerEvents(),this.dataAdapter.current(function(a){l.trigger("selection:update",{data:a})}),a.addClass("select2-hidden-accessible"),a.attr("aria-hidden","true"),this._syncAttributes(),c.StoreData(a[0],"select2",this),a.data("select2",this)};return c.Extend(e,c.Observable),e.prototype._generateId=function(a){var b="";return b=null!=a.attr("id")?a.attr("id"):null!=a.attr("name")?a.attr("name")+"-"+c.generateChars(2):c.generateChars(4),b=b.replace(/(:|\.|\[|\]|,)/g,""),b="select2-"+b},e.prototype._placeContainer=function(a){a.insertAfter(this.$element);var b=this._resolveWidth(this.$element,this.options.get("width"));null!=b&&a.css("width",b)},e.prototype._resolveWidth=function(a,b){var c=/^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;if("resolve"==b){var d=this._resolveWidth(a,"style");return null!=d?d:this._resolveWidth(a,"element")}if("element"==b){var e=a.outerWidth(!1);return e<=0?"auto":e+"px"}if("style"==b){var f=a.attr("style");if("string"!=typeof f)return null;for(var g=f.split(";"),h=0,i=g.length;h=1)return k[1]}return null}return b},e.prototype._bindAdapters=function(){this.dataAdapter.bind(this,this.$container),this.selection.bind(this,this.$container),this.dropdown.bind(this,this.$container),this.results.bind(this,this.$container)},e.prototype._registerDomEvents=function(){var b=this;this.$element.on("change.select2",function(){b.dataAdapter.current(function(a){b.trigger("selection:update",{data:a})})}),this.$element.on("focus.select2",function(a){b.trigger("focus",a)}),this._syncA=c.bind(this._syncAttributes,this),this._syncS=c.bind(this._syncSubtree,this),this.$element[0].attachEvent&&this.$element[0].attachEvent("onpropertychange",this._syncA);var d=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;null!=d?(this._observer=new d(function(c){a.each(c,b._syncA),a.each(c,b._syncS)}),this._observer.observe(this.$element[0],{attributes:!0,childList:!0,subtree:!1})):this.$element[0].addEventListener&&(this.$element[0].addEventListener("DOMAttrModified",b._syncA,!1),this.$element[0].addEventListener("DOMNodeInserted",b._syncS,!1),this.$element[0].addEventListener("DOMNodeRemoved",b._syncS,!1))},e.prototype._registerDataEvents=function(){var a=this;this.dataAdapter.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerSelectionEvents=function(){var b=this,c=["toggle","focus"];this.selection.on("toggle",function(){b.toggleDropdown()}),this.selection.on("focus",function(a){b.focus(a)}),this.selection.on("*",function(d,e){-1===a.inArray(d,c)&&b.trigger(d,e)})},e.prototype._registerDropdownEvents=function(){var a=this;this.dropdown.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerResultsEvents=function(){var a=this;this.results.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerEvents=function(){var a=this;this.on("open",function(){a.$container.addClass("select2-container--open")}),this.on("close",function(){a.$container.removeClass("select2-container--open")}),this.on("enable",function(){a.$container.removeClass("select2-container--disabled")}),this.on("disable",function(){a.$container.addClass("select2-container--disabled")}),this.on("blur",function(){a.$container.removeClass("select2-container--focus")}),this.on("query",function(b){a.isOpen()||a.trigger("open",{}),this.dataAdapter.query(b,function(c){a.trigger("results:all",{data:c,query:b})})}),this.on("query:append",function(b){this.dataAdapter.query(b,function(c){a.trigger("results:append",{data:c,query:b})})}),this.on("keypress",function(b){var c=b.which;a.isOpen()?c===d.ESC||c===d.TAB||c===d.UP&&b.altKey?(a.close(),b.preventDefault()):c===d.ENTER?(a.trigger("results:select",{}),b.preventDefault()):c===d.SPACE&&b.ctrlKey?(a.trigger("results:toggle",{}),b.preventDefault()):c===d.UP?(a.trigger("results:previous",{}),b.preventDefault()):c===d.DOWN&&(a.trigger("results:next",{}),b.preventDefault()):(c===d.ENTER||c===d.SPACE||c===d.DOWN&&b.altKey)&&(a.open(),b.preventDefault())})},e.prototype._syncAttributes=function(){this.options.set("disabled",this.$element.prop("disabled")),this.options.get("disabled")?(this.isOpen()&&this.close(),this.trigger("disable",{})):this.trigger("enable",{})},e.prototype._syncSubtree=function(a,b){var c=!1,d=this;if(!a||!a.target||"OPTION"===a.target.nodeName||"OPTGROUP"===a.target.nodeName){if(b)if(b.addedNodes&&b.addedNodes.length>0)for(var e=0;e0&&(c=!0);else c=!0;c&&this.dataAdapter.current(function(a){d.trigger("selection:update",{data:a})})}},e.prototype.trigger=function(a,b){var c=e.__super__.trigger,d={open:"opening",close:"closing",select:"selecting",unselect:"unselecting",clear:"clearing"};if(void 0===b&&(b={}),a in d){var f=d[a],g={prevented:!1,name:a,args:b};if(c.call(this,f,g),g.prevented)return void(b.prevented=!0)}c.call(this,a,b)},e.prototype.toggleDropdown=function(){this.options.get("disabled")||(this.isOpen()?this.close():this.open())},e.prototype.open=function(){this.isOpen()||this.trigger("query",{})},e.prototype.close=function(){this.isOpen()&&this.trigger("close",{})},e.prototype.isOpen=function(){return this.$container.hasClass("select2-container--open")},e.prototype.hasFocus=function(){return this.$container.hasClass("select2-container--focus")},e.prototype.focus=function(a){this.hasFocus()||(this.$container.addClass("select2-container--focus"),this.trigger("focus",{}))},e.prototype.enable=function(a){this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("enable")` method has been deprecated and will be removed in later Select2 versions. Use $element.prop("disabled") instead.'),null!=a&&0!==a.length||(a=[!0]);var b=!a[0];this.$element.prop("disabled",b)},e.prototype.data=function(){this.options.get("debug")&&arguments.length>0&&window.console&&console.warn&&console.warn('Select2: Data can no longer be set using `select2("data")`. You should consider setting the value instead using `$element.val()`.');var a=[];return this.dataAdapter.current(function(b){a=b}),a},e.prototype.val=function(b){if(this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("val")` method has been deprecated and will be removed in later Select2 versions. Use $element.val() instead.'),null==b||0===b.length)return this.$element.val();var c=b[0];a.isArray(c)&&(c=a.map(c,function(a){return a.toString()})),this.$element.val(c).trigger("change")},e.prototype.destroy=function(){this.$container.remove(),this.$element[0].detachEvent&&this.$element[0].detachEvent("onpropertychange",this._syncA),null!=this._observer?(this._observer.disconnect(),this._observer=null):this.$element[0].removeEventListener&&(this.$element[0].removeEventListener("DOMAttrModified",this._syncA,!1),this.$element[0].removeEventListener("DOMNodeInserted",this._syncS,!1),this.$element[0].removeEventListener("DOMNodeRemoved",this._syncS,!1)),this._syncA=null,this._syncS=null,this.$element.off(".select2"),this.$element.attr("tabindex",c.GetData(this.$element[0],"old-tabindex")),this.$element.removeClass("select2-hidden-accessible"),this.$element.attr("aria-hidden","false"),c.RemoveData(this.$element[0]),this.$element.removeData("select2"),this.dataAdapter.destroy(),this.selection.destroy(),this.dropdown.destroy(),this.results.destroy(),this.dataAdapter=null,this.selection=null,this.dropdown=null,this.results=null},e.prototype.render=function(){var b=a('');return b.attr("dir",this.options.get("dir")),this.$container=b,this.$container.addClass("select2-container--"+this.options.get("theme")),c.StoreData(b[0],"element",this.$element),b},e}),b.define("jquery-mousewheel",["jquery"],function(a){return a}),b.define("jquery.select2",["jquery","jquery-mousewheel","./select2/core","./select2/defaults","./select2/utils"],function(a,b,c,d,e){if(null==a.fn.select2){var f=["open","close","destroy"];a.fn.select2=function(b){if("object"==typeof(b=b||{}))return this.each(function(){var d=a.extend(!0,{},b);new c(a(this),d)}),this;if("string"==typeof b){var d,g=Array.prototype.slice.call(arguments,1);return this.each(function(){var a=e.GetData(this,"select2");null==a&&window.console&&console.error&&console.error("The select2('"+b+"') method was called on an element that is not using Select2."),d=a[b].apply(a,g)}),a.inArray(b,f)>-1?this:d}throw new Error("Invalid arguments for Select2: "+b)}}return null==a.fn.select2.defaults&&(a.fn.select2.defaults=d),c}),{define:b.define,require:b.require}}(),c=b.require("jquery.select2");return a.fn.select2.amd=b,c}); \ No newline at end of file +/*! Select2 4.0.7 | https://github.com/select2/select2/blob/master/LICENSE.md */!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof module&&module.exports?module.exports=function(b,c){return void 0===c&&(c="undefined"!=typeof window?require("jquery"):require("jquery")(b)),a(c),c}:a(jQuery)}(function(a){var b=function(){if(a&&a.fn&&a.fn.select2&&a.fn.select2.amd)var b=a.fn.select2.amd;var b;return function(){if(!b||!b.requirejs){b?c=b:b={};var a,c,d;!function(b){function e(a,b){return v.call(a,b)}function f(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o=b&&b.split("/"),p=t.map,q=p&&p["*"]||{};if(a){for(a=a.split("/"),g=a.length-1,t.nodeIdCompat&&x.test(a[g])&&(a[g]=a[g].replace(x,"")),"."===a[0].charAt(0)&&o&&(n=o.slice(0,o.length-1),a=n.concat(a)),k=0;k0&&(a.splice(k-1,2),k-=2)}a=a.join("/")}if((o||q)&&p){for(c=a.split("/"),k=c.length;k>0;k-=1){if(d=c.slice(0,k).join("/"),o)for(l=o.length;l>0;l-=1)if((e=p[o.slice(0,l).join("/")])&&(e=e[d])){f=e,h=k;break}if(f)break;!i&&q&&q[d]&&(i=q[d],j=k)}!f&&i&&(f=i,h=j),f&&(c.splice(0,h,f),a=c.join("/"))}return a}function g(a,c){return function(){var d=w.call(arguments,0);return"string"!=typeof d[0]&&1===d.length&&d.push(null),o.apply(b,d.concat([a,c]))}}function h(a){return function(b){return f(b,a)}}function i(a){return function(b){r[a]=b}}function j(a){if(e(s,a)){var c=s[a];delete s[a],u[a]=!0,n.apply(b,c)}if(!e(r,a)&&!e(u,a))throw new Error("No "+a);return r[a]}function k(a){var b,c=a?a.indexOf("!"):-1;return c>-1&&(b=a.substring(0,c),a=a.substring(c+1,a.length)),[b,a]}function l(a){return a?k(a):[]}function m(a){return function(){return t&&t.config&&t.config[a]||{}}}var n,o,p,q,r={},s={},t={},u={},v=Object.prototype.hasOwnProperty,w=[].slice,x=/\.js$/;p=function(a,b){var c,d=k(a),e=d[0],g=b[1];return a=d[1],e&&(e=f(e,g),c=j(e)),e?a=c&&c.normalize?c.normalize(a,h(g)):f(a,g):(a=f(a,g),d=k(a),e=d[0],a=d[1],e&&(c=j(e))),{f:e?e+"!"+a:a,n:a,pr:e,p:c}},q={require:function(a){return g(a)},exports:function(a){var b=r[a];return void 0!==b?b:r[a]={}},module:function(a){return{id:a,uri:"",exports:r[a],config:m(a)}}},n=function(a,c,d,f){var h,k,m,n,o,t,v,w=[],x=typeof d;if(f=f||a,t=l(f),"undefined"===x||"function"===x){for(c=!c.length&&d.length?["require","exports","module"]:c,o=0;o0&&(b.call(arguments,a.prototype.constructor),e=c.prototype.constructor),e.apply(this,arguments)}function e(){this.constructor=d}var f=b(c),g=b(a);c.displayName=a.displayName,d.prototype=new e;for(var h=0;h":">",'"':""","'":"'","/":"/"};return"string"!=typeof a?a:String(a).replace(/[&<>"'\/\\]/g,function(a){return b[a]})},c.appendMany=function(b,c){if("1.7"===a.fn.jquery.substr(0,3)){var d=a();a.map(c,function(a){d=d.add(a)}),c=d}b.append(c)},c.__cache={};var e=0;return c.GetUniqueElementId=function(a){var b=a.getAttribute("data-select2-id");return null==b&&(a.id?(b=a.id,a.setAttribute("data-select2-id",b)):(a.setAttribute("data-select2-id",++e),b=e.toString())),b},c.StoreData=function(a,b,d){var e=c.GetUniqueElementId(a);c.__cache[e]||(c.__cache[e]={}),c.__cache[e][b]=d},c.GetData=function(b,d){var e=c.GetUniqueElementId(b);return d?c.__cache[e]&&null!=c.__cache[e][d]?c.__cache[e][d]:a(b).data(d):c.__cache[e]},c.RemoveData=function(a){var b=c.GetUniqueElementId(a);null!=c.__cache[b]&&delete c.__cache[b]},c}),b.define("select2/results",["jquery","./utils"],function(a,b){function c(a,b,d){this.$element=a,this.data=d,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('
      ');return this.options.get("multiple")&&b.attr("aria-multiselectable","true"),this.$results=b,b},c.prototype.clear=function(){this.$results.empty()},c.prototype.displayMessage=function(b){var c=this.options.get("escapeMarkup");this.clear(),this.hideLoading();var d=a('
    • '),e=this.options.get("translations").get(b.message);d.append(c(e(b.args))),d[0].className+=" select2-results__message",this.$results.append(d)},c.prototype.hideMessages=function(){this.$results.find(".select2-results__message").remove()},c.prototype.append=function(a){this.hideLoading();var b=[];if(null==a.results||0===a.results.length)return void(0===this.$results.children().length&&this.trigger("results:message",{message:"noResults"}));a.results=this.sort(a.results);for(var c=0;c0?b.first().trigger("mouseenter"):a.first().trigger("mouseenter"),this.ensureHighlightVisible()},c.prototype.setClasses=function(){var c=this;this.data.current(function(d){var e=a.map(d,function(a){return a.id.toString()});c.$results.find(".select2-results__option[aria-selected]").each(function(){var c=a(this),d=b.GetData(this,"data"),f=""+d.id;null!=d.element&&d.element.selected||null==d.element&&a.inArray(f,e)>-1?c.attr("aria-selected","true"):c.attr("aria-selected","false")})})},c.prototype.showLoading=function(a){this.hideLoading();var b=this.options.get("translations").get("searching"),c={disabled:!0,loading:!0,text:b(a)},d=this.option(c);d.className+=" loading-results",this.$results.prepend(d)},c.prototype.hideLoading=function(){this.$results.find(".loading-results").remove()},c.prototype.option=function(c){var d=document.createElement("li");d.className="select2-results__option";var e={role:"treeitem","aria-selected":"false"};c.disabled&&(delete e["aria-selected"],e["aria-disabled"]="true"),null==c.id&&delete e["aria-selected"],null!=c._resultId&&(d.id=c._resultId),c.title&&(d.title=c.title),c.children&&(e.role="group",e["aria-label"]=c.text,delete e["aria-selected"]);for(var f in e){var g=e[f];d.setAttribute(f,g)}if(c.children){var h=a(d),i=document.createElement("strong");i.className="select2-results__group";a(i);this.template(c,i);for(var j=[],k=0;k",{class:"select2-results__options select2-results__options--nested"});n.append(j),h.append(i),h.append(n)}else this.template(c,d);return b.StoreData(d,"data",c),d},c.prototype.bind=function(c,d){var e=this,f=c.id+"-results";this.$results.attr("id",f),c.on("results:all",function(a){e.clear(),e.append(a.data),c.isOpen()&&(e.setClasses(),e.highlightFirstItem())}),c.on("results:append",function(a){e.append(a.data),c.isOpen()&&e.setClasses()}),c.on("query",function(a){e.hideMessages(),e.showLoading(a)}),c.on("select",function(){c.isOpen()&&(e.setClasses(),e.options.get("scrollAfterSelect")&&e.highlightFirstItem())}),c.on("unselect",function(){c.isOpen()&&(e.setClasses(),e.options.get("scrollAfterSelect")&&e.highlightFirstItem())}),c.on("open",function(){e.$results.attr("aria-expanded","true"),e.$results.attr("aria-hidden","false"),e.setClasses(),e.ensureHighlightVisible()}),c.on("close",function(){e.$results.attr("aria-expanded","false"),e.$results.attr("aria-hidden","true"),e.$results.removeAttr("aria-activedescendant")}),c.on("results:toggle",function(){var a=e.getHighlightedResults();0!==a.length&&a.trigger("mouseup")}),c.on("results:select",function(){var a=e.getHighlightedResults();if(0!==a.length){var c=b.GetData(a[0],"data");"true"==a.attr("aria-selected")?e.trigger("close",{}):e.trigger("select",{data:c})}}),c.on("results:previous",function(){var a=e.getHighlightedResults(),b=e.$results.find("[aria-selected]"),c=b.index(a);if(!(c<=0)){var d=c-1;0===a.length&&(d=0);var f=b.eq(d);f.trigger("mouseenter");var g=e.$results.offset().top,h=f.offset().top,i=e.$results.scrollTop()+(h-g);0===d?e.$results.scrollTop(0):h-g<0&&e.$results.scrollTop(i)}}),c.on("results:next",function(){var a=e.getHighlightedResults(),b=e.$results.find("[aria-selected]"),c=b.index(a),d=c+1;if(!(d>=b.length)){var f=b.eq(d);f.trigger("mouseenter");var g=e.$results.offset().top+e.$results.outerHeight(!1),h=f.offset().top+f.outerHeight(!1),i=e.$results.scrollTop()+h-g;0===d?e.$results.scrollTop(0):h>g&&e.$results.scrollTop(i)}}),c.on("results:focus",function(a){a.element.addClass("select2-results__option--highlighted")}),c.on("results:message",function(a){e.displayMessage(a)}),a.fn.mousewheel&&this.$results.on("mousewheel",function(a){var b=e.$results.scrollTop(),c=e.$results.get(0).scrollHeight-b+a.deltaY,d=a.deltaY>0&&b-a.deltaY<=0,f=a.deltaY<0&&c<=e.$results.height();d?(e.$results.scrollTop(0),a.preventDefault(),a.stopPropagation()):f&&(e.$results.scrollTop(e.$results.get(0).scrollHeight-e.$results.height()),a.preventDefault(),a.stopPropagation())}),this.$results.on("mouseup",".select2-results__option[aria-selected]",function(c){var d=a(this),f=b.GetData(this,"data");if("true"===d.attr("aria-selected"))return void(e.options.get("multiple")?e.trigger("unselect",{originalEvent:c,data:f}):e.trigger("close",{}));e.trigger("select",{originalEvent:c,data:f})}),this.$results.on("mouseenter",".select2-results__option[aria-selected]",function(c){var d=b.GetData(this,"data");e.getHighlightedResults().removeClass("select2-results__option--highlighted"),e.trigger("results:focus",{data:d,element:a(this)})})},c.prototype.getHighlightedResults=function(){return this.$results.find(".select2-results__option--highlighted")},c.prototype.destroy=function(){this.$results.remove()},c.prototype.ensureHighlightVisible=function(){var a=this.getHighlightedResults();if(0!==a.length){var b=this.$results.find("[aria-selected]"),c=b.index(a),d=this.$results.offset().top,e=a.offset().top,f=this.$results.scrollTop()+(e-d),g=e-d;f-=2*a.outerHeight(!1),c<=2?this.$results.scrollTop(0):(g>this.$results.outerHeight()||g<0)&&this.$results.scrollTop(f)}},c.prototype.template=function(b,c){var d=this.options.get("templateResult"),e=this.options.get("escapeMarkup"),f=d(b,c);null==f?c.style.display="none":"string"==typeof f?c.innerHTML=e(f):a(c).append(f)},c}),b.define("select2/keys",[],function(){return{BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46}}),b.define("select2/selection/base",["jquery","../utils","../keys"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,b.Observable),d.prototype.render=function(){var c=a('');return this._tabindex=0,null!=b.GetData(this.$element[0],"old-tabindex")?this._tabindex=b.GetData(this.$element[0],"old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),c.attr("title",this.$element.attr("title")),c.attr("tabindex",this._tabindex),this.$selection=c,c},d.prototype.bind=function(a,b){var d=this,e=(a.id,a.id+"-results");this.container=a,this.$selection.on("focus",function(a){d.trigger("focus",a)}),this.$selection.on("blur",function(a){d._handleBlur(a)}),this.$selection.on("keydown",function(a){d.trigger("keypress",a),a.which===c.SPACE&&a.preventDefault()}),a.on("results:focus",function(a){d.$selection.attr("aria-activedescendant",a.data._resultId)}),a.on("selection:update",function(a){d.update(a.data)}),a.on("open",function(){d.$selection.attr("aria-expanded","true"),d.$selection.attr("aria-owns",e),d._attachCloseHandler(a)}),a.on("close",function(){d.$selection.attr("aria-expanded","false"),d.$selection.removeAttr("aria-activedescendant"),d.$selection.removeAttr("aria-owns"),window.setTimeout(function(){d.$selection.focus()},0),d._detachCloseHandler(a)}),a.on("enable",function(){d.$selection.attr("tabindex",d._tabindex)}),a.on("disable",function(){d.$selection.attr("tabindex","-1")})},d.prototype._handleBlur=function(b){var c=this;window.setTimeout(function(){document.activeElement==c.$selection[0]||a.contains(c.$selection[0],document.activeElement)||c.trigger("blur",b)},1)},d.prototype._attachCloseHandler=function(c){a(document.body).on("mousedown.select2."+c.id,function(c){var d=a(c.target),e=d.closest(".select2");a(".select2.select2-container--open").each(function(){a(this),this!=e[0]&&b.GetData(this,"element").select2("close")})})},d.prototype._detachCloseHandler=function(b){a(document.body).off("mousedown.select2."+b.id)},d.prototype.position=function(a,b){b.find(".selection").append(a)},d.prototype.destroy=function(){this._detachCloseHandler(this.container)},d.prototype.update=function(a){throw new Error("The `update` method must be defined in child classes.")},d}),b.define("select2/selection/single",["jquery","./base","../utils","../keys"],function(a,b,c,d){function e(){e.__super__.constructor.apply(this,arguments)}return c.Extend(e,b),e.prototype.render=function(){var a=e.__super__.render.call(this);return a.addClass("select2-selection--single"),a.html(''),a},e.prototype.bind=function(a,b){var c=this;e.__super__.bind.apply(this,arguments);var d=a.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",d).attr("role","textbox").attr("aria-readonly","true"),this.$selection.attr("aria-labelledby",d),this.$selection.on("mousedown",function(a){1===a.which&&c.trigger("toggle",{originalEvent:a})}),this.$selection.on("focus",function(a){}),this.$selection.on("blur",function(a){}),a.on("focus",function(b){a.isOpen()||c.$selection.focus()})},e.prototype.clear=function(){var a=this.$selection.find(".select2-selection__rendered");a.empty(),a.removeAttr("title")},e.prototype.display=function(a,b){var c=this.options.get("templateSelection");return this.options.get("escapeMarkup")(c(a,b))},e.prototype.selectionContainer=function(){return a("")},e.prototype.update=function(a){if(0===a.length)return void this.clear();var b=a[0],c=this.$selection.find(".select2-selection__rendered"),d=this.display(b,c);c.empty().append(d),c.attr("title",b.title||b.text)},e}),b.define("select2/selection/multiple",["jquery","./base","../utils"],function(a,b,c){function d(a,b){d.__super__.constructor.apply(this,arguments)}return c.Extend(d,b),d.prototype.render=function(){var a=d.__super__.render.call(this);return a.addClass("select2-selection--multiple"),a.html('
        '),a},d.prototype.bind=function(b,e){var f=this;d.__super__.bind.apply(this,arguments),this.$selection.on("click",function(a){f.trigger("toggle",{originalEvent:a})}),this.$selection.on("click",".select2-selection__choice__remove",function(b){if(!f.options.get("disabled")){var d=a(this),e=d.parent(),g=c.GetData(e[0],"data");f.trigger("unselect",{originalEvent:b,data:g})}})},d.prototype.clear=function(){var a=this.$selection.find(".select2-selection__rendered");a.empty(),a.removeAttr("title")},d.prototype.display=function(a,b){var c=this.options.get("templateSelection");return this.options.get("escapeMarkup")(c(a,b))},d.prototype.selectionContainer=function(){return a('
      • ×
      • ')},d.prototype.update=function(a){if(this.clear(),0!==a.length){for(var b=[],d=0;d1||c)return a.call(this,b);this.clear();var d=this.createPlaceholder(this.placeholder);this.$selection.find(".select2-selection__rendered").append(d)},b}),b.define("select2/selection/allowClear",["jquery","../keys","../utils"],function(a,b,c){function d(){}return d.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),null==this.placeholder&&this.options.get("debug")&&window.console&&console.error&&console.error("Select2: The `allowClear` option should be used in combination with the `placeholder` option."),this.$selection.on("mousedown",".select2-selection__clear",function(a){d._handleClear(a)}),b.on("keypress",function(a){d._handleKeyboardClear(a,b)})},d.prototype._handleClear=function(a,b){if(!this.options.get("disabled")){var d=this.$selection.find(".select2-selection__clear");if(0!==d.length){b.stopPropagation();var e=c.GetData(d[0],"data"),f=this.$element.val();this.$element.val(this.placeholder.id);var g={data:e};if(this.trigger("clear",g),g.prevented)return void this.$element.val(f);for(var h=0;h0||0===d.length)){var e=this.options.get("translations").get("removeAllItems"),f=a('×');c.StoreData(f[0],"data",d),this.$selection.find(".select2-selection__rendered").prepend(f)}},d}),b.define("select2/selection/search",["jquery","../utils","../keys"],function(a,b,c){function d(a,b,c){a.call(this,b,c)}return d.prototype.render=function(b){var c=a('');this.$searchContainer=c,this.$search=c.find("input");var d=b.call(this);return this._transferTabIndex(),d},d.prototype.bind=function(a,d,e){var f=this;a.call(this,d,e),d.on("open",function(){f.$search.trigger("focus")}),d.on("close",function(){f.$search.val(""),f.$search.removeAttr("aria-activedescendant"),f.$search.trigger("focus")}),d.on("enable",function(){f.$search.prop("disabled",!1),f._transferTabIndex()}),d.on("disable",function(){f.$search.prop("disabled",!0)}),d.on("focus",function(a){f.$search.trigger("focus")}),d.on("results:focus",function(a){f.$search.attr("aria-activedescendant",a.id)}),this.$selection.on("focusin",".select2-search--inline",function(a){f.trigger("focus",a)}),this.$selection.on("focusout",".select2-search--inline",function(a){f._handleBlur(a)}),this.$selection.on("keydown",".select2-search--inline",function(a){if(a.stopPropagation(),f.trigger("keypress",a),f._keyUpPrevented=a.isDefaultPrevented(),a.which===c.BACKSPACE&&""===f.$search.val()){var d=f.$searchContainer.prev(".select2-selection__choice");if(d.length>0){var e=b.GetData(d[0],"data");f.searchRemoveChoice(e),a.preventDefault()}}});var g=document.documentMode,h=g&&g<=11;this.$selection.on("input.searchcheck",".select2-search--inline",function(a){if(h)return void f.$selection.off("input.search input.searchcheck");f.$selection.off("keyup.search")}),this.$selection.on("keyup.search input.search",".select2-search--inline",function(a){if(h&&"input"===a.type)return void f.$selection.off("input.search input.searchcheck");var b=a.which;b!=c.SHIFT&&b!=c.CTRL&&b!=c.ALT&&b!=c.TAB&&f.handleSearch(a)})},d.prototype._transferTabIndex=function(a){this.$search.attr("tabindex",this.$selection.attr("tabindex")),this.$selection.attr("tabindex","-1")},d.prototype.createPlaceholder=function(a,b){this.$search.attr("placeholder",b.text)},d.prototype.update=function(a,b){var c=this.$search[0]==document.activeElement;if(this.$search.attr("placeholder",""),a.call(this,b),this.$selection.find(".select2-selection__rendered").append(this.$searchContainer),this.resizeSearch(),c){this.$element.find("[data-select2-tag]").length?this.$element.focus():this.$search.focus()}},d.prototype.handleSearch=function(){if(this.resizeSearch(),!this._keyUpPrevented){var a=this.$search.val();this.trigger("query",{term:a})}this._keyUpPrevented=!1},d.prototype.searchRemoveChoice=function(a,b){this.trigger("unselect",{data:b}),this.$search.val(b.text),this.handleSearch()},d.prototype.resizeSearch=function(){this.$search.css("width","25px");var a="";if(""!==this.$search.attr("placeholder"))a=this.$selection.find(".select2-selection__rendered").innerWidth();else{a=.75*(this.$search.val().length+1)+"em"}this.$search.css("width",a)},d}),b.define("select2/selection/eventRelay",["jquery"],function(a){function b(){}return b.prototype.bind=function(b,c,d){var e=this,f=["open","opening","close","closing","select","selecting","unselect","unselecting","clear","clearing"],g=["opening","closing","selecting","unselecting","clearing"];b.call(this,c,d),c.on("*",function(b,c){if(-1!==a.inArray(b,f)){c=c||{};var d=a.Event("select2:"+b,{params:c});e.$element.trigger(d),-1!==a.inArray(b,g)&&(c.prevented=d.isDefaultPrevented())}})},b}),b.define("select2/translation",["jquery","require"],function(a,b){function c(a){this.dict=a||{}}return c.prototype.all=function(){return this.dict},c.prototype.get=function(a){return this.dict[a]},c.prototype.extend=function(b){this.dict=a.extend({},b.all(),this.dict)},c._cache={},c.loadPath=function(a){if(!(a in c._cache)){var d=b(a);c._cache[a]=d}return new c(c._cache[a])},c}),b.define("select2/diacritics",[],function(){return{"Ⓐ":"A","A":"A","À":"A","Á":"A","Â":"A","Ầ":"A","Ấ":"A","Ẫ":"A","Ẩ":"A","Ã":"A","Ā":"A","Ă":"A","Ằ":"A","Ắ":"A","Ẵ":"A","Ẳ":"A","Ȧ":"A","Ǡ":"A","Ä":"A","Ǟ":"A","Ả":"A","Å":"A","Ǻ":"A","Ǎ":"A","Ȁ":"A","Ȃ":"A","Ạ":"A","Ậ":"A","Ặ":"A","Ḁ":"A","Ą":"A","Ⱥ":"A","Ɐ":"A","Ꜳ":"AA","Æ":"AE","Ǽ":"AE","Ǣ":"AE","Ꜵ":"AO","Ꜷ":"AU","Ꜹ":"AV","Ꜻ":"AV","Ꜽ":"AY","Ⓑ":"B","B":"B","Ḃ":"B","Ḅ":"B","Ḇ":"B","Ƀ":"B","Ƃ":"B","Ɓ":"B","Ⓒ":"C","C":"C","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","Ç":"C","Ḉ":"C","Ƈ":"C","Ȼ":"C","Ꜿ":"C","Ⓓ":"D","D":"D","Ḋ":"D","Ď":"D","Ḍ":"D","Ḑ":"D","Ḓ":"D","Ḏ":"D","Đ":"D","Ƌ":"D","Ɗ":"D","Ɖ":"D","Ꝺ":"D","DZ":"DZ","DŽ":"DZ","Dz":"Dz","Dž":"Dz","Ⓔ":"E","E":"E","È":"E","É":"E","Ê":"E","Ề":"E","Ế":"E","Ễ":"E","Ể":"E","Ẽ":"E","Ē":"E","Ḕ":"E","Ḗ":"E","Ĕ":"E","Ė":"E","Ë":"E","Ẻ":"E","Ě":"E","Ȅ":"E","Ȇ":"E","Ẹ":"E","Ệ":"E","Ȩ":"E","Ḝ":"E","Ę":"E","Ḙ":"E","Ḛ":"E","Ɛ":"E","Ǝ":"E","Ⓕ":"F","F":"F","Ḟ":"F","Ƒ":"F","Ꝼ":"F","Ⓖ":"G","G":"G","Ǵ":"G","Ĝ":"G","Ḡ":"G","Ğ":"G","Ġ":"G","Ǧ":"G","Ģ":"G","Ǥ":"G","Ɠ":"G","Ꞡ":"G","Ᵹ":"G","Ꝿ":"G","Ⓗ":"H","H":"H","Ĥ":"H","Ḣ":"H","Ḧ":"H","Ȟ":"H","Ḥ":"H","Ḩ":"H","Ḫ":"H","Ħ":"H","Ⱨ":"H","Ⱶ":"H","Ɥ":"H","Ⓘ":"I","I":"I","Ì":"I","Í":"I","Î":"I","Ĩ":"I","Ī":"I","Ĭ":"I","İ":"I","Ï":"I","Ḯ":"I","Ỉ":"I","Ǐ":"I","Ȉ":"I","Ȋ":"I","Ị":"I","Į":"I","Ḭ":"I","Ɨ":"I","Ⓙ":"J","J":"J","Ĵ":"J","Ɉ":"J","Ⓚ":"K","K":"K","Ḱ":"K","Ǩ":"K","Ḳ":"K","Ķ":"K","Ḵ":"K","Ƙ":"K","Ⱪ":"K","Ꝁ":"K","Ꝃ":"K","Ꝅ":"K","Ꞣ":"K","Ⓛ":"L","L":"L","Ŀ":"L","Ĺ":"L","Ľ":"L","Ḷ":"L","Ḹ":"L","Ļ":"L","Ḽ":"L","Ḻ":"L","Ł":"L","Ƚ":"L","Ɫ":"L","Ⱡ":"L","Ꝉ":"L","Ꝇ":"L","Ꞁ":"L","LJ":"LJ","Lj":"Lj","Ⓜ":"M","M":"M","Ḿ":"M","Ṁ":"M","Ṃ":"M","Ɱ":"M","Ɯ":"M","Ⓝ":"N","N":"N","Ǹ":"N","Ń":"N","Ñ":"N","Ṅ":"N","Ň":"N","Ṇ":"N","Ņ":"N","Ṋ":"N","Ṉ":"N","Ƞ":"N","Ɲ":"N","Ꞑ":"N","Ꞥ":"N","NJ":"NJ","Nj":"Nj","Ⓞ":"O","O":"O","Ò":"O","Ó":"O","Ô":"O","Ồ":"O","Ố":"O","Ỗ":"O","Ổ":"O","Õ":"O","Ṍ":"O","Ȭ":"O","Ṏ":"O","Ō":"O","Ṑ":"O","Ṓ":"O","Ŏ":"O","Ȯ":"O","Ȱ":"O","Ö":"O","Ȫ":"O","Ỏ":"O","Ő":"O","Ǒ":"O","Ȍ":"O","Ȏ":"O","Ơ":"O","Ờ":"O","Ớ":"O","Ỡ":"O","Ở":"O","Ợ":"O","Ọ":"O","Ộ":"O","Ǫ":"O","Ǭ":"O","Ø":"O","Ǿ":"O","Ɔ":"O","Ɵ":"O","Ꝋ":"O","Ꝍ":"O","Œ":"OE","Ƣ":"OI","Ꝏ":"OO","Ȣ":"OU","Ⓟ":"P","P":"P","Ṕ":"P","Ṗ":"P","Ƥ":"P","Ᵽ":"P","Ꝑ":"P","Ꝓ":"P","Ꝕ":"P","Ⓠ":"Q","Q":"Q","Ꝗ":"Q","Ꝙ":"Q","Ɋ":"Q","Ⓡ":"R","R":"R","Ŕ":"R","Ṙ":"R","Ř":"R","Ȑ":"R","Ȓ":"R","Ṛ":"R","Ṝ":"R","Ŗ":"R","Ṟ":"R","Ɍ":"R","Ɽ":"R","Ꝛ":"R","Ꞧ":"R","Ꞃ":"R","Ⓢ":"S","S":"S","ẞ":"S","Ś":"S","Ṥ":"S","Ŝ":"S","Ṡ":"S","Š":"S","Ṧ":"S","Ṣ":"S","Ṩ":"S","Ș":"S","Ş":"S","Ȿ":"S","Ꞩ":"S","Ꞅ":"S","Ⓣ":"T","T":"T","Ṫ":"T","Ť":"T","Ṭ":"T","Ț":"T","Ţ":"T","Ṱ":"T","Ṯ":"T","Ŧ":"T","Ƭ":"T","Ʈ":"T","Ⱦ":"T","Ꞇ":"T","Ꜩ":"TZ","Ⓤ":"U","U":"U","Ù":"U","Ú":"U","Û":"U","Ũ":"U","Ṹ":"U","Ū":"U","Ṻ":"U","Ŭ":"U","Ü":"U","Ǜ":"U","Ǘ":"U","Ǖ":"U","Ǚ":"U","Ủ":"U","Ů":"U","Ű":"U","Ǔ":"U","Ȕ":"U","Ȗ":"U","Ư":"U","Ừ":"U","Ứ":"U","Ữ":"U","Ử":"U","Ự":"U","Ụ":"U","Ṳ":"U","Ų":"U","Ṷ":"U","Ṵ":"U","Ʉ":"U","Ⓥ":"V","V":"V","Ṽ":"V","Ṿ":"V","Ʋ":"V","Ꝟ":"V","Ʌ":"V","Ꝡ":"VY","Ⓦ":"W","W":"W","Ẁ":"W","Ẃ":"W","Ŵ":"W","Ẇ":"W","Ẅ":"W","Ẉ":"W","Ⱳ":"W","Ⓧ":"X","X":"X","Ẋ":"X","Ẍ":"X","Ⓨ":"Y","Y":"Y","Ỳ":"Y","Ý":"Y","Ŷ":"Y","Ỹ":"Y","Ȳ":"Y","Ẏ":"Y","Ÿ":"Y","Ỷ":"Y","Ỵ":"Y","Ƴ":"Y","Ɏ":"Y","Ỿ":"Y","Ⓩ":"Z","Z":"Z","Ź":"Z","Ẑ":"Z","Ż":"Z","Ž":"Z","Ẓ":"Z","Ẕ":"Z","Ƶ":"Z","Ȥ":"Z","Ɀ":"Z","Ⱬ":"Z","Ꝣ":"Z","ⓐ":"a","a":"a","ẚ":"a","à":"a","á":"a","â":"a","ầ":"a","ấ":"a","ẫ":"a","ẩ":"a","ã":"a","ā":"a","ă":"a","ằ":"a","ắ":"a","ẵ":"a","ẳ":"a","ȧ":"a","ǡ":"a","ä":"a","ǟ":"a","ả":"a","å":"a","ǻ":"a","ǎ":"a","ȁ":"a","ȃ":"a","ạ":"a","ậ":"a","ặ":"a","ḁ":"a","ą":"a","ⱥ":"a","ɐ":"a","ꜳ":"aa","æ":"ae","ǽ":"ae","ǣ":"ae","ꜵ":"ao","ꜷ":"au","ꜹ":"av","ꜻ":"av","ꜽ":"ay","ⓑ":"b","b":"b","ḃ":"b","ḅ":"b","ḇ":"b","ƀ":"b","ƃ":"b","ɓ":"b","ⓒ":"c","c":"c","ć":"c","ĉ":"c","ċ":"c","č":"c","ç":"c","ḉ":"c","ƈ":"c","ȼ":"c","ꜿ":"c","ↄ":"c","ⓓ":"d","d":"d","ḋ":"d","ď":"d","ḍ":"d","ḑ":"d","ḓ":"d","ḏ":"d","đ":"d","ƌ":"d","ɖ":"d","ɗ":"d","ꝺ":"d","dz":"dz","dž":"dz","ⓔ":"e","e":"e","è":"e","é":"e","ê":"e","ề":"e","ế":"e","ễ":"e","ể":"e","ẽ":"e","ē":"e","ḕ":"e","ḗ":"e","ĕ":"e","ė":"e","ë":"e","ẻ":"e","ě":"e","ȅ":"e","ȇ":"e","ẹ":"e","ệ":"e","ȩ":"e","ḝ":"e","ę":"e","ḙ":"e","ḛ":"e","ɇ":"e","ɛ":"e","ǝ":"e","ⓕ":"f","f":"f","ḟ":"f","ƒ":"f","ꝼ":"f","ⓖ":"g","g":"g","ǵ":"g","ĝ":"g","ḡ":"g","ğ":"g","ġ":"g","ǧ":"g","ģ":"g","ǥ":"g","ɠ":"g","ꞡ":"g","ᵹ":"g","ꝿ":"g","ⓗ":"h","h":"h","ĥ":"h","ḣ":"h","ḧ":"h","ȟ":"h","ḥ":"h","ḩ":"h","ḫ":"h","ẖ":"h","ħ":"h","ⱨ":"h","ⱶ":"h","ɥ":"h","ƕ":"hv","ⓘ":"i","i":"i","ì":"i","í":"i","î":"i","ĩ":"i","ī":"i","ĭ":"i","ï":"i","ḯ":"i","ỉ":"i","ǐ":"i","ȉ":"i","ȋ":"i","ị":"i","į":"i","ḭ":"i","ɨ":"i","ı":"i","ⓙ":"j","j":"j","ĵ":"j","ǰ":"j","ɉ":"j","ⓚ":"k","k":"k","ḱ":"k","ǩ":"k","ḳ":"k","ķ":"k","ḵ":"k","ƙ":"k","ⱪ":"k","ꝁ":"k","ꝃ":"k","ꝅ":"k","ꞣ":"k","ⓛ":"l","l":"l","ŀ":"l","ĺ":"l","ľ":"l","ḷ":"l","ḹ":"l","ļ":"l","ḽ":"l","ḻ":"l","ſ":"l","ł":"l","ƚ":"l","ɫ":"l","ⱡ":"l","ꝉ":"l","ꞁ":"l","ꝇ":"l","lj":"lj","ⓜ":"m","m":"m","ḿ":"m","ṁ":"m","ṃ":"m","ɱ":"m","ɯ":"m","ⓝ":"n","n":"n","ǹ":"n","ń":"n","ñ":"n","ṅ":"n","ň":"n","ṇ":"n","ņ":"n","ṋ":"n","ṉ":"n","ƞ":"n","ɲ":"n","ʼn":"n","ꞑ":"n","ꞥ":"n","nj":"nj","ⓞ":"o","o":"o","ò":"o","ó":"o","ô":"o","ồ":"o","ố":"o","ỗ":"o","ổ":"o","õ":"o","ṍ":"o","ȭ":"o","ṏ":"o","ō":"o","ṑ":"o","ṓ":"o","ŏ":"o","ȯ":"o","ȱ":"o","ö":"o","ȫ":"o","ỏ":"o","ő":"o","ǒ":"o","ȍ":"o","ȏ":"o","ơ":"o","ờ":"o","ớ":"o","ỡ":"o","ở":"o","ợ":"o","ọ":"o","ộ":"o","ǫ":"o","ǭ":"o","ø":"o","ǿ":"o","ɔ":"o","ꝋ":"o","ꝍ":"o","ɵ":"o","œ":"oe","ƣ":"oi","ȣ":"ou","ꝏ":"oo","ⓟ":"p","p":"p","ṕ":"p","ṗ":"p","ƥ":"p","ᵽ":"p","ꝑ":"p","ꝓ":"p","ꝕ":"p","ⓠ":"q","q":"q","ɋ":"q","ꝗ":"q","ꝙ":"q","ⓡ":"r","r":"r","ŕ":"r","ṙ":"r","ř":"r","ȑ":"r","ȓ":"r","ṛ":"r","ṝ":"r","ŗ":"r","ṟ":"r","ɍ":"r","ɽ":"r","ꝛ":"r","ꞧ":"r","ꞃ":"r","ⓢ":"s","s":"s","ß":"s","ś":"s","ṥ":"s","ŝ":"s","ṡ":"s","š":"s","ṧ":"s","ṣ":"s","ṩ":"s","ș":"s","ş":"s","ȿ":"s","ꞩ":"s","ꞅ":"s","ẛ":"s","ⓣ":"t","t":"t","ṫ":"t","ẗ":"t","ť":"t","ṭ":"t","ț":"t","ţ":"t","ṱ":"t","ṯ":"t","ŧ":"t","ƭ":"t","ʈ":"t","ⱦ":"t","ꞇ":"t","ꜩ":"tz","ⓤ":"u","u":"u","ù":"u","ú":"u","û":"u","ũ":"u","ṹ":"u","ū":"u","ṻ":"u","ŭ":"u","ü":"u","ǜ":"u","ǘ":"u","ǖ":"u","ǚ":"u","ủ":"u","ů":"u","ű":"u","ǔ":"u","ȕ":"u","ȗ":"u","ư":"u","ừ":"u","ứ":"u","ữ":"u","ử":"u","ự":"u","ụ":"u","ṳ":"u","ų":"u","ṷ":"u","ṵ":"u","ʉ":"u","ⓥ":"v","v":"v","ṽ":"v","ṿ":"v","ʋ":"v","ꝟ":"v","ʌ":"v","ꝡ":"vy","ⓦ":"w","w":"w","ẁ":"w","ẃ":"w","ŵ":"w","ẇ":"w","ẅ":"w","ẘ":"w","ẉ":"w","ⱳ":"w","ⓧ":"x","x":"x","ẋ":"x","ẍ":"x","ⓨ":"y","y":"y","ỳ":"y","ý":"y","ŷ":"y","ỹ":"y","ȳ":"y","ẏ":"y","ÿ":"y","ỷ":"y","ẙ":"y","ỵ":"y","ƴ":"y","ɏ":"y","ỿ":"y","ⓩ":"z","z":"z","ź":"z","ẑ":"z","ż":"z","ž":"z","ẓ":"z","ẕ":"z","ƶ":"z","ȥ":"z","ɀ":"z","ⱬ":"z","ꝣ":"z","Ά":"Α","Έ":"Ε","Ή":"Η","Ί":"Ι","Ϊ":"Ι","Ό":"Ο","Ύ":"Υ","Ϋ":"Υ","Ώ":"Ω","ά":"α","έ":"ε","ή":"η","ί":"ι","ϊ":"ι","ΐ":"ι","ό":"ο","ύ":"υ","ϋ":"υ","ΰ":"υ","ώ":"ω","ς":"σ","’":"'"}}),b.define("select2/data/base",["../utils"],function(a){function b(a,c){b.__super__.constructor.call(this)}return a.Extend(b,a.Observable),b.prototype.current=function(a){throw new Error("The `current` method must be defined in child classes.")},b.prototype.query=function(a,b){throw new Error("The `query` method must be defined in child classes.")},b.prototype.bind=function(a,b){},b.prototype.destroy=function(){},b.prototype.generateResultId=function(b,c){var d=b.id+"-result-";return d+=a.generateChars(4),null!=c.id?d+="-"+c.id.toString():d+="-"+a.generateChars(4),d},b}),b.define("select2/data/select",["./base","../utils","jquery"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,a),d.prototype.current=function(a){var b=[],d=this;this.$element.find(":selected").each(function(){var a=c(this),e=d.item(a);b.push(e)}),a(b)},d.prototype.select=function(a){var b=this;if(a.selected=!0,c(a.element).is("option"))return a.element.selected=!0,void this.$element.trigger("change");if(this.$element.prop("multiple"))this.current(function(d){var e=[];a=[a],a.push.apply(a,d);for(var f=0;f=0){var k=f.filter(d(j)),l=this.item(k),m=c.extend(!0,{},j,l),n=this.option(m);k.replaceWith(n)}else{var o=this.option(j);if(j.children){var p=this.convertToOptions(j.children);b.appendMany(o,p)}h.push(o)}}return h},d}),b.define("select2/data/ajax",["./array","../utils","jquery"],function(a,b,c){function d(a,b){this.ajaxOptions=this._applyDefaults(b.get("ajax")),null!=this.ajaxOptions.processResults&&(this.processResults=this.ajaxOptions.processResults),d.__super__.constructor.call(this,a,b)}return b.Extend(d,a),d.prototype._applyDefaults=function(a){var b={data:function(a){return c.extend({},a,{q:a.term})},transport:function(a,b,d){var e=c.ajax(a);return e.then(b),e.fail(d),e}};return c.extend({},b,a,!0)},d.prototype.processResults=function(a){return a},d.prototype.query=function(a,b){function d(){var d=f.transport(f,function(d){var f=e.processResults(d,a);e.options.get("debug")&&window.console&&console.error&&(f&&f.results&&c.isArray(f.results)||console.error("Select2: The AJAX results did not return an array in the `results` key of the response.")),b(f)},function(){"status"in d&&(0===d.status||"0"===d.status)||e.trigger("results:message",{message:"errorLoading"})});e._request=d}var e=this;null!=this._request&&(c.isFunction(this._request.abort)&&this._request.abort(),this._request=null);var f=c.extend({type:"GET"},this.ajaxOptions);"function"==typeof f.url&&(f.url=f.url.call(this.$element,a)),"function"==typeof f.data&&(f.data=f.data.call(this.$element,a)),this.ajaxOptions.delay&&null!=a.term?(this._queryTimeout&&window.clearTimeout(this._queryTimeout),this._queryTimeout=window.setTimeout(d,this.ajaxOptions.delay)):d()},d}),b.define("select2/data/tags",["jquery"],function(a){function b(b,c,d){var e=d.get("tags"),f=d.get("createTag");void 0!==f&&(this.createTag=f);var g=d.get("insertTag");if(void 0!==g&&(this.insertTag=g),b.call(this,c,d),a.isArray(e))for(var h=0;h0&&b.term.length>this.maximumInputLength)return void this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:b.term,params:b}});a.call(this,b,c)},a}),b.define("select2/data/maximumSelectionLength",[],function(){function a(a,b,c){this.maximumSelectionLength=c.get("maximumSelectionLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){var d=this;this.current(function(e){var f=null!=e?e.length:0;if(d.maximumSelectionLength>0&&f>=d.maximumSelectionLength)return void d.trigger("results:message",{message:"maximumSelected",args:{maximum:d.maximumSelectionLength}});a.call(d,b,c)})},a}),b.define("select2/dropdown",["jquery","./utils"],function(a,b){function c(a,b){this.$element=a,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('');return b.attr("dir",this.options.get("dir")),this.$dropdown=b,b},c.prototype.bind=function(){},c.prototype.position=function(a,b){},c.prototype.destroy=function(){this.$dropdown.remove()},c}),b.define("select2/dropdown/search",["jquery","../utils"],function(a,b){function c(){}return c.prototype.render=function(b){var c=b.call(this),d=a('');return this.$searchContainer=d,this.$search=d.find("input"),c.prepend(d),c},c.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),this.$search.on("keydown",function(a){e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented()}),this.$search.on("input",function(b){a(this).off("keyup")}),this.$search.on("keyup input",function(a){e.handleSearch(a)}),c.on("open",function(){e.$search.attr("tabindex",0),e.$search.focus(),window.setTimeout(function(){e.$search.focus()},0)}),c.on("close",function(){e.$search.attr("tabindex",-1),e.$search.val(""),e.$search.blur()}),c.on("focus",function(){c.isOpen()||e.$search.focus()}),c.on("results:all",function(a){if(null==a.query.term||""===a.query.term){e.showSearch(a)?e.$searchContainer.removeClass("select2-search--hide"):e.$searchContainer.addClass("select2-search--hide")}})},c.prototype.handleSearch=function(a){if(!this._keyUpPrevented){var b=this.$search.val();this.trigger("query",{term:b})}this._keyUpPrevented=!1},c.prototype.showSearch=function(a,b){return!0},c}),b.define("select2/dropdown/hidePlaceholder",[],function(){function a(a,b,c,d){this.placeholder=this.normalizePlaceholder(c.get("placeholder")),a.call(this,b,c,d)}return a.prototype.append=function(a,b){b.results=this.removePlaceholder(b.results),a.call(this,b)},a.prototype.normalizePlaceholder=function(a,b){return"string"==typeof b&&(b={id:"",text:b}),b},a.prototype.removePlaceholder=function(a,b){for(var c=b.slice(0),d=b.length-1;d>=0;d--){var e=b[d];this.placeholder.id===e.id&&c.splice(d,1)}return c},a}),b.define("select2/dropdown/infiniteScroll",["jquery"],function(a){function b(a,b,c,d){this.lastParams={},a.call(this,b,c,d),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return b.prototype.append=function(a,b){this.$loadingMore.remove(),this.loading=!1,a.call(this,b),this.showLoadingMore(b)&&this.$results.append(this.$loadingMore)},b.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),c.on("query",function(a){e.lastParams=a,e.loading=!0}),c.on("query:append",function(a){e.lastParams=a,e.loading=!0}),this.$results.on("scroll",function(){var b=a.contains(document.documentElement,e.$loadingMore[0]);if(!e.loading&&b){e.$results.offset().top+e.$results.outerHeight(!1)+50>=e.$loadingMore.offset().top+e.$loadingMore.outerHeight(!1)&&e.loadMore()}})},b.prototype.loadMore=function(){this.loading=!0;var b=a.extend({},{page:1},this.lastParams);b.page++,this.trigger("query:append",b)},b.prototype.showLoadingMore=function(a,b){return b.pagination&&b.pagination.more},b.prototype.createLoadingMore=function(){var b=a('
      • '),c=this.options.get("translations").get("loadingMore");return b.html(c(this.lastParams)),b},b}),b.define("select2/dropdown/attachBody",["jquery","../utils"],function(a,b){function c(b,c,d){this.$dropdownParent=d.get("dropdownParent")||a(document.body),b.call(this,c,d)}return c.prototype.bind=function(a,b,c){var d=this,e=!1;a.call(this,b,c),b.on("open",function(){d._showDropdown(),d._attachPositioningHandler(b),e||(e=!0,b.on("results:all",function(){d._positionDropdown(),d._resizeDropdown()}),b.on("results:append",function(){d._positionDropdown(),d._resizeDropdown()}))}),b.on("close",function(){d._hideDropdown(),d._detachPositioningHandler(b)}),this.$dropdownContainer.on("mousedown",function(a){a.stopPropagation()})},c.prototype.destroy=function(a){a.call(this),this.$dropdownContainer.remove()},c.prototype.position=function(a,b,c){b.attr("class",c.attr("class")),b.removeClass("select2"),b.addClass("select2-container--open"),b.css({position:"absolute",top:-999999}),this.$container=c},c.prototype.render=function(b){var c=a(""),d=b.call(this);return c.append(d),this.$dropdownContainer=c,c},c.prototype._hideDropdown=function(a){this.$dropdownContainer.detach()},c.prototype._attachPositioningHandler=function(c,d){var e=this,f="scroll.select2."+d.id,g="resize.select2."+d.id,h="orientationchange.select2."+d.id,i=this.$container.parents().filter(b.hasScroll);i.each(function(){b.StoreData(this,"select2-scroll-position",{x:a(this).scrollLeft(),y:a(this).scrollTop()})}),i.on(f,function(c){var d=b.GetData(this,"select2-scroll-position");a(this).scrollTop(d.y)}),a(window).on(f+" "+g+" "+h,function(a){e._positionDropdown(),e._resizeDropdown()})},c.prototype._detachPositioningHandler=function(c,d){var e="scroll.select2."+d.id,f="resize.select2."+d.id,g="orientationchange.select2."+d.id;this.$container.parents().filter(b.hasScroll).off(e),a(window).off(e+" "+f+" "+g)},c.prototype._positionDropdown=function(){var b=a(window),c=this.$dropdown.hasClass("select2-dropdown--above"),d=this.$dropdown.hasClass("select2-dropdown--below"),e=null,f=this.$container.offset();f.bottom=f.top+this.$container.outerHeight(!1);var g={height:this.$container.outerHeight(!1)};g.top=f.top,g.bottom=f.top+g.height;var h={height:this.$dropdown.outerHeight(!1)},i={top:b.scrollTop(),bottom:b.scrollTop()+b.height()},j=i.topf.bottom+h.height,l={left:f.left,top:g.bottom},m=this.$dropdownParent;"static"===m.css("position")&&(m=m.offsetParent());var n=m.offset();l.top-=n.top,l.left-=n.left,c||d||(e="below"),k||!j||c?!j&&k&&c&&(e="below"):e="above",("above"==e||c&&"below"!==e)&&(l.top=g.top-n.top-h.height),null!=e&&(this.$dropdown.removeClass("select2-dropdown--below select2-dropdown--above").addClass("select2-dropdown--"+e),this.$container.removeClass("select2-container--below select2-container--above").addClass("select2-container--"+e)),this.$dropdownContainer.css(l)},c.prototype._resizeDropdown=function(){var a={width:this.$container.outerWidth(!1)+"px"};this.options.get("dropdownAutoWidth")&&(a.minWidth=a.width,a.position="relative",a.width="auto"),this.$dropdown.css(a)},c.prototype._showDropdown=function(a){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},c}),b.define("select2/dropdown/minimumResultsForSearch",[],function(){function a(b){for(var c=0,d=0;d0&&(l.dataAdapter=j.Decorate(l.dataAdapter,r)),l.maximumInputLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,s)),l.maximumSelectionLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,t)),l.tags&&(l.dataAdapter=j.Decorate(l.dataAdapter,p)),null==l.tokenSeparators&&null==l.tokenizer||(l.dataAdapter=j.Decorate(l.dataAdapter,q)),null!=l.query){var C=b(l.amdBase+"compat/query");l.dataAdapter=j.Decorate(l.dataAdapter,C)}if(null!=l.initSelection){var D=b(l.amdBase+"compat/initSelection");l.dataAdapter=j.Decorate(l.dataAdapter,D)}}if(null==l.resultsAdapter&&(l.resultsAdapter=c,null!=l.ajax&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,x)),null!=l.placeholder&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,w)),l.selectOnClose&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,A))),null==l.dropdownAdapter){if(l.multiple)l.dropdownAdapter=u;else{var E=j.Decorate(u,v);l.dropdownAdapter=E}if(0!==l.minimumResultsForSearch&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,z)),l.closeOnSelect&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,B)),null!=l.dropdownCssClass||null!=l.dropdownCss||null!=l.adaptDropdownCssClass){var F=b(l.amdBase+"compat/dropdownCss");l.dropdownAdapter=j.Decorate(l.dropdownAdapter,F)}l.dropdownAdapter=j.Decorate(l.dropdownAdapter,y)}if(null==l.selectionAdapter){if(l.multiple?l.selectionAdapter=e:l.selectionAdapter=d,null!=l.placeholder&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,f)),l.allowClear&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,g)),l.multiple&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,h)),null!=l.containerCssClass||null!=l.containerCss||null!=l.adaptContainerCssClass){var G=b(l.amdBase+"compat/containerCss");l.selectionAdapter=j.Decorate(l.selectionAdapter,G)}l.selectionAdapter=j.Decorate(l.selectionAdapter,i)}if("string"==typeof l.language)if(l.language.indexOf("-")>0){var H=l.language.split("-"),I=H[0];l.language=[l.language,I]}else l.language=[l.language];if(a.isArray(l.language)){var J=new k;l.language.push("en");for(var K=l.language,L=0;L0){for(var f=a.extend(!0,{},e),g=e.children.length-1;g>=0;g--){null==c(d,e.children[g])&&f.children.splice(g,1)}return f.children.length>0?f:c(d,f)}var h=b(e.text).toUpperCase(),i=b(d.term).toUpperCase();return h.indexOf(i)>-1?e:null}this.defaults={amdBase:"./",amdLanguageBase:"./i18n/",closeOnSelect:!0,debug:!1,dropdownAutoWidth:!1,escapeMarkup:j.escapeMarkup,language:C,matcher:c,minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:!1,scrollAfterSelect:!1,sorter:function(a){return a},templateResult:function(a){return a.text},templateSelection:function(a){return a.text},theme:"default",width:"resolve"}},D.prototype.set=function(b,c){var d=a.camelCase(b),e={};e[d]=c;var f=j._convertData(e);a.extend(!0,this.defaults,f)},new D}),b.define("select2/options",["require","jquery","./defaults","./utils"],function(a,b,c,d){function e(b,e){if(this.options=b,null!=e&&this.fromElement(e),this.options=c.apply(this.options),e&&e.is("input")){var f=a(this.get("amdBase")+"compat/inputData");this.options.dataAdapter=d.Decorate(this.options.dataAdapter,f)}}return e.prototype.fromElement=function(a){function c(a,b){return b.toUpperCase()}var e=["select2"];null==this.options.multiple&&(this.options.multiple=a.prop("multiple")),null==this.options.disabled&&(this.options.disabled=a.prop("disabled")),null==this.options.language&&(a.prop("lang")?this.options.language=a.prop("lang").toLowerCase():a.closest("[lang]").prop("lang")&&(this.options.language=a.closest("[lang]").prop("lang"))),null==this.options.dir&&(a.prop("dir")?this.options.dir=a.prop("dir"):a.closest("[dir]").prop("dir")?this.options.dir=a.closest("[dir]").prop("dir"):this.options.dir="ltr"),a.prop("disabled",this.options.disabled),a.prop("multiple",this.options.multiple),d.GetData(a[0],"select2Tags")&&(this.options.debug&&window.console&&console.warn&&console.warn('Select2: The `data-select2-tags` attribute has been changed to use the `data-data` and `data-tags="true"` attributes and will be removed in future versions of Select2.'),d.StoreData(a[0],"data",d.GetData(a[0],"select2Tags")),d.StoreData(a[0],"tags",!0)),d.GetData(a[0],"ajaxUrl")&&(this.options.debug&&window.console&&console.warn&&console.warn("Select2: The `data-ajax-url` attribute has been changed to `data-ajax--url` and support for the old attribute will be removed in future versions of Select2."),a.attr("ajax--url",d.GetData(a[0],"ajaxUrl")),d.StoreData(a[0],"ajax-Url",d.GetData(a[0],"ajaxUrl")));for(var f={},g=0;g-1||(b.isPlainObject(this.options[m])?b.extend(this.options[m],l[m]):this.options[m]=l[m]);return this},e.prototype.get=function(a){return this.options[a]},e.prototype.set=function(a,b){this.options[a]=b},e}),b.define("select2/core",["jquery","./options","./utils","./keys"],function(a,b,c,d){var e=function(a,d){null!=c.GetData(a[0],"select2")&&c.GetData(a[0],"select2").destroy(),this.$element=a,this.id=this._generateId(a),d=d||{},this.options=new b(d,a),e.__super__.constructor.call(this);var f=a.attr("tabindex")||0;c.StoreData(a[0],"old-tabindex",f),a.attr("tabindex","-1");var g=this.options.get("dataAdapter");this.dataAdapter=new g(a,this.options);var h=this.render();this._placeContainer(h);var i=this.options.get("selectionAdapter");this.selection=new i(a,this.options),this.$selection=this.selection.render(),this.selection.position(this.$selection,h);var j=this.options.get("dropdownAdapter");this.dropdown=new j(a,this.options),this.$dropdown=this.dropdown.render(),this.dropdown.position(this.$dropdown,h);var k=this.options.get("resultsAdapter");this.results=new k(a,this.options,this.dataAdapter),this.$results=this.results.render(),this.results.position(this.$results,this.$dropdown);var l=this;this._bindAdapters(),this._registerDomEvents(),this._registerDataEvents(),this._registerSelectionEvents(),this._registerDropdownEvents(),this._registerResultsEvents(),this._registerEvents(),this.dataAdapter.current(function(a){l.trigger("selection:update",{data:a})}),a.addClass("select2-hidden-accessible"),a.attr("aria-hidden","true"),this._syncAttributes(),c.StoreData(a[0],"select2",this),a.data("select2",this)};return c.Extend(e,c.Observable),e.prototype._generateId=function(a){var b="";return b=null!=a.attr("id")?a.attr("id"):null!=a.attr("name")?a.attr("name")+"-"+c.generateChars(2):c.generateChars(4),b=b.replace(/(:|\.|\[|\]|,)/g,""),b="select2-"+b},e.prototype._placeContainer=function(a){a.insertAfter(this.$element);var b=this._resolveWidth(this.$element,this.options.get("width"));null!=b&&a.css("width",b)},e.prototype._resolveWidth=function(a,b){var c=/^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;if("resolve"==b){var d=this._resolveWidth(a,"style");return null!=d?d:this._resolveWidth(a,"element")}if("element"==b){var e=a.outerWidth(!1);return e<=0?"auto":e+"px"}if("style"==b){var f=a.attr("style");if("string"!=typeof f)return null;for(var g=f.split(";"),h=0,i=g.length;h=1)return k[1]}return null}return b},e.prototype._bindAdapters=function(){this.dataAdapter.bind(this,this.$container),this.selection.bind(this,this.$container),this.dropdown.bind(this,this.$container),this.results.bind(this,this.$container)},e.prototype._registerDomEvents=function(){var b=this;this.$element.on("change.select2",function(){b.dataAdapter.current(function(a){b.trigger("selection:update",{data:a})})}),this.$element.on("focus.select2",function(a){b.trigger("focus",a)}),this._syncA=c.bind(this._syncAttributes,this),this._syncS=c.bind(this._syncSubtree,this),this.$element[0].attachEvent&&this.$element[0].attachEvent("onpropertychange",this._syncA);var d=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;null!=d?(this._observer=new d(function(c){a.each(c,b._syncA),a.each(c,b._syncS)}),this._observer.observe(this.$element[0],{attributes:!0,childList:!0,subtree:!1})):this.$element[0].addEventListener&&(this.$element[0].addEventListener("DOMAttrModified",b._syncA,!1),this.$element[0].addEventListener("DOMNodeInserted",b._syncS,!1),this.$element[0].addEventListener("DOMNodeRemoved",b._syncS,!1))},e.prototype._registerDataEvents=function(){var a=this;this.dataAdapter.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerSelectionEvents=function(){var b=this,c=["toggle","focus"];this.selection.on("toggle",function(){b.toggleDropdown()}),this.selection.on("focus",function(a){b.focus(a)}),this.selection.on("*",function(d,e){-1===a.inArray(d,c)&&b.trigger(d,e)})},e.prototype._registerDropdownEvents=function(){var a=this;this.dropdown.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerResultsEvents=function(){var a=this;this.results.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerEvents=function(){var a=this;this.on("open",function(){a.$container.addClass("select2-container--open")}),this.on("close",function(){a.$container.removeClass("select2-container--open")}),this.on("enable",function(){a.$container.removeClass("select2-container--disabled")}),this.on("disable",function(){a.$container.addClass("select2-container--disabled")}),this.on("blur",function(){a.$container.removeClass("select2-container--focus")}),this.on("query",function(b){a.isOpen()||a.trigger("open",{}),this.dataAdapter.query(b,function(c){a.trigger("results:all",{data:c,query:b})})}),this.on("query:append",function(b){this.dataAdapter.query(b,function(c){a.trigger("results:append",{data:c,query:b})})}),this.on("keypress",function(b){var c=b.which;a.isOpen()?c===d.ESC||c===d.TAB||c===d.UP&&b.altKey?(a.close(),b.preventDefault()):c===d.ENTER?(a.trigger("results:select",{}),b.preventDefault()):c===d.SPACE&&b.ctrlKey?(a.trigger("results:toggle",{}),b.preventDefault()):c===d.UP?(a.trigger("results:previous",{}),b.preventDefault()):c===d.DOWN&&(a.trigger("results:next",{}),b.preventDefault()):(c===d.ENTER||c===d.SPACE||c===d.DOWN&&b.altKey)&&(a.open(),b.preventDefault())})},e.prototype._syncAttributes=function(){this.options.set("disabled",this.$element.prop("disabled")),this.options.get("disabled")?(this.isOpen()&&this.close(),this.trigger("disable",{})):this.trigger("enable",{})},e.prototype._syncSubtree=function(a,b){var c=!1,d=this;if(!a||!a.target||"OPTION"===a.target.nodeName||"OPTGROUP"===a.target.nodeName){if(b)if(b.addedNodes&&b.addedNodes.length>0)for(var e=0;e0&&(c=!0);else c=!0;c&&this.dataAdapter.current(function(a){d.trigger("selection:update",{data:a})})}},e.prototype.trigger=function(a,b){var c=e.__super__.trigger,d={open:"opening",close:"closing",select:"selecting",unselect:"unselecting",clear:"clearing"};if(void 0===b&&(b={}),a in d){var f=d[a],g={prevented:!1,name:a,args:b};if(c.call(this,f,g),g.prevented)return void(b.prevented=!0)}c.call(this,a,b)},e.prototype.toggleDropdown=function(){this.options.get("disabled")||(this.isOpen()?this.close():this.open())},e.prototype.open=function(){this.isOpen()||this.trigger("query",{})},e.prototype.close=function(){this.isOpen()&&this.trigger("close",{})},e.prototype.isOpen=function(){return this.$container.hasClass("select2-container--open")},e.prototype.hasFocus=function(){return this.$container.hasClass("select2-container--focus")},e.prototype.focus=function(a){this.hasFocus()||(this.$container.addClass("select2-container--focus"),this.trigger("focus",{}))},e.prototype.enable=function(a){this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("enable")` method has been deprecated and will be removed in later Select2 versions. Use $element.assets("disabled") instead.'),null!=a&&0!==a.length||(a=[!0]);var b=!a[0];this.$element.prop("disabled",b)},e.prototype.data=function(){this.options.get("debug")&&arguments.length>0&&window.console&&console.warn&&console.warn('Select2: Data can no longer be set using `select2("data")`. You should consider setting the value instead using `$element.val()`.');var a=[];return this.dataAdapter.current(function(b){a=b}),a},e.prototype.val=function(b){if(this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("val")` method has been deprecated and will be removed in later Select2 versions. Use $element.val() instead.'),null==b||0===b.length)return this.$element.val();var c=b[0];a.isArray(c)&&(c=a.map(c,function(a){return a.toString()})),this.$element.val(c).trigger("change")},e.prototype.destroy=function(){this.$container.remove(),this.$element[0].detachEvent&&this.$element[0].detachEvent("onpropertychange",this._syncA),null!=this._observer?(this._observer.disconnect(),this._observer=null):this.$element[0].removeEventListener&&(this.$element[0].removeEventListener("DOMAttrModified",this._syncA,!1),this.$element[0].removeEventListener("DOMNodeInserted",this._syncS,!1),this.$element[0].removeEventListener("DOMNodeRemoved",this._syncS,!1)),this._syncA=null,this._syncS=null,this.$element.off(".select2"),this.$element.attr("tabindex",c.GetData(this.$element[0],"old-tabindex")),this.$element.removeClass("select2-hidden-accessible"),this.$element.attr("aria-hidden","false"),c.RemoveData(this.$element[0]),this.$element.removeData("select2"),this.dataAdapter.destroy(),this.selection.destroy(),this.dropdown.destroy(),this.results.destroy(),this.dataAdapter=null,this.selection=null,this.dropdown=null,this.results=null},e.prototype.render=function(){var b=a('');return b.attr("dir",this.options.get("dir")),this.$container=b,this.$container.addClass("select2-container--"+this.options.get("theme")),c.StoreData(b[0],"element",this.$element),b},e}),b.define("jquery-mousewheel",["jquery"],function(a){return a}),b.define("jquery.select2",["jquery","jquery-mousewheel","./select2/core","./select2/defaults","./select2/utils"],function(a,b,c,d,e){if(null==a.fn.select2){var f=["open","close","destroy"];a.fn.select2=function(b){if("object"==typeof(b=b||{}))return this.each(function(){var d=a.extend(!0,{},b);new c(a(this),d)}),this;if("string"==typeof b){var d,g=Array.prototype.slice.call(arguments,1);return this.each(function(){var a=e.GetData(this,"select2");null==a&&window.console&&console.error&&console.error("The select2('"+b+"') method was called on an element that is not using Select2."),d=a[b].apply(a,g)}),a.inArray(b,f)>-1?this:d}throw new Error("Invalid arguments for Select2: "+b)}}return null==a.fn.select2.defaults&&(a.fn.select2.defaults=d),c}),{define:b.define,require:b.require}}(),c=b.require("jquery.select2");return a.fn.select2.amd=b,c}); \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/static/ajax/libs/staps/jquery.steps.js b/ruoyi-admin/src/main/resources/static/ajax/libs/staps/jquery.steps.js index 3ffcf50f7..ecb2345bf 100644 --- a/ruoyi-admin/src/main/resources/static/ajax/libs/staps/jquery.steps.js +++ b/ruoyi-admin/src/main/resources/static/ajax/libs/staps/jquery.steps.js @@ -63,7 +63,7 @@ if (!String.prototype.format) * * @static * @private - * @property _uniqueId + * @assets _uniqueId * @type Integer **/ var _uniqueId = 0; @@ -73,7 +73,7 @@ var _uniqueId = 0; * * @final * @private - * @property _cookiePrefix + * @assets _cookiePrefix * @type String **/ var _cookiePrefix = "jQu3ry_5teps_St@te_"; @@ -83,7 +83,7 @@ var _cookiePrefix = "jQu3ry_5teps_St@te_"; * * @final * @private - * @property _tabSuffix + * @assets _tabSuffix * @type String * @since 0.9.7 **/ @@ -94,7 +94,7 @@ var _tabSuffix = "-t-"; * * @final * @private - * @property _tabpanelSuffix + * @assets _tabpanelSuffix * @type String * @since 0.9.7 **/ @@ -105,7 +105,7 @@ var _tabpanelSuffix = "-p-"; * * @final * @private - * @property _titleSuffix + * @assets _titleSuffix * @type String * @since 0.9.7 **/ @@ -116,7 +116,7 @@ var _titleSuffix = "-h-"; * * @final * @private - * @property _indexOutOfRangeErrorMessage + * @assets _indexOutOfRangeErrorMessage * @type String **/ var _indexOutOfRangeErrorMessage = "Index out of range."; @@ -126,7 +126,7 @@ var _indexOutOfRangeErrorMessage = "Index out of range."; * * @final * @private - * @property _missingCorrespondingElementErrorMessage + * @assets _missingCorrespondingElementErrorMessage * @type String **/ var _missingCorrespondingElementErrorMessage = "One or more corresponding step {0} are missing."; @@ -1485,7 +1485,7 @@ var contentMode = $.fn.steps.contentMode = { * HTML embedded content * * @readOnly - * @property html + * @assets html * @type Integer * @for contentMode **/ @@ -1495,7 +1495,7 @@ var contentMode = $.fn.steps.contentMode = { * IFrame embedded content * * @readOnly - * @property iframe + * @assets iframe * @type Integer * @for contentMode **/ @@ -1505,7 +1505,7 @@ var contentMode = $.fn.steps.contentMode = { * Async embedded content * * @readOnly - * @property async + * @assets async * @type Integer * @for contentMode **/ @@ -1523,7 +1523,7 @@ var stepsOrientation = $.fn.steps.stepsOrientation = { * Horizontal orientation * * @readOnly - * @property horizontal + * @assets horizontal * @type Integer * @for stepsOrientation **/ @@ -1533,7 +1533,7 @@ var stepsOrientation = $.fn.steps.stepsOrientation = { * Vertical orientation * * @readOnly - * @property vertical + * @assets vertical * @type Integer * @for stepsOrientation **/ @@ -1551,7 +1551,7 @@ var transitionEffect = $.fn.steps.transitionEffect = { * No transition animation * * @readOnly - * @property none + * @assets none * @type Integer * @for transitionEffect **/ @@ -1561,7 +1561,7 @@ var transitionEffect = $.fn.steps.transitionEffect = { * Fade in transition * * @readOnly - * @property fade + * @assets fade * @type Integer * @for transitionEffect **/ @@ -1571,7 +1571,7 @@ var transitionEffect = $.fn.steps.transitionEffect = { * Slide up transition * * @readOnly - * @property slide + * @assets slide * @type Integer * @for transitionEffect **/ @@ -1581,7 +1581,7 @@ var transitionEffect = $.fn.steps.transitionEffect = { * Slide left transition * * @readOnly - * @property slideLeft + * @assets slideLeft * @type Integer * @for transitionEffect **/ @@ -1615,7 +1615,7 @@ var defaults = $.fn.steps.defaults = { /** * The header tag is used to find the step button text within the declared wizard area. * - * @property headerTag + * @assets headerTag * @type String * @default "h1" * @for defaults @@ -1625,7 +1625,7 @@ var defaults = $.fn.steps.defaults = { /** * The body tag is used to find the step content within the declared wizard area. * - * @property bodyTag + * @assets bodyTag * @type String * @default "div" * @for defaults @@ -1635,7 +1635,7 @@ var defaults = $.fn.steps.defaults = { /** * The content container tag which will be used to wrap all step contents. * - * @property contentContainerTag + * @assets contentContainerTag * @type String * @default "div" * @for defaults @@ -1645,7 +1645,7 @@ var defaults = $.fn.steps.defaults = { /** * The action container tag which will be used to wrap the pagination navigation. * - * @property actionContainerTag + * @assets actionContainerTag * @type String * @default "div" * @for defaults @@ -1655,7 +1655,7 @@ var defaults = $.fn.steps.defaults = { /** * The steps container tag which will be used to wrap the steps navigation. * - * @property stepsContainerTag + * @assets stepsContainerTag * @type String * @default "div" * @for defaults @@ -1665,7 +1665,7 @@ var defaults = $.fn.steps.defaults = { /** * The css class which will be added to the outer component wrapper. * - * @property cssClass + * @assets cssClass * @type String * @default "wizard" * @for defaults @@ -1679,7 +1679,7 @@ var defaults = $.fn.steps.defaults = { /** * The css class which will be used for floating scenarios. * - * @property clearFixCssClass + * @assets clearFixCssClass * @type String * @default "clearfix" * @for defaults @@ -1689,7 +1689,7 @@ var defaults = $.fn.steps.defaults = { /** * Determines whether the steps are vertically or horizontally oriented. * - * @property stepsOrientation + * @assets stepsOrientation * @type stepsOrientation * @default horizontal * @for defaults @@ -1704,7 +1704,7 @@ var defaults = $.fn.steps.defaults = { /** * The title template which will be used to create a step button. * - * @property titleTemplate + * @assets titleTemplate * @type String * @default "#index#. #title#" * @for defaults @@ -1714,7 +1714,7 @@ var defaults = $.fn.steps.defaults = { /** * The loading template which will be used to create the loading animation. * - * @property loadingTemplate + * @assets loadingTemplate * @type String * @default " #text#" * @for defaults @@ -1728,7 +1728,7 @@ var defaults = $.fn.steps.defaults = { /** * Sets the focus to the first wizard instance in order to enable the key navigation from the begining if `true`. * - * @property autoFocus + * @assets autoFocus * @type Boolean * @default false * @for defaults @@ -1739,7 +1739,7 @@ var defaults = $.fn.steps.defaults = { /** * Enables all steps from the begining if `true` (all steps are clickable). * - * @property enableAllSteps + * @assets enableAllSteps * @type Boolean * @default false * @for defaults @@ -1749,7 +1749,7 @@ var defaults = $.fn.steps.defaults = { /** * Enables keyboard navigation if `true` (arrow left and arrow right). * - * @property enableKeyNavigation + * @assets enableKeyNavigation * @type Boolean * @default true * @for defaults @@ -1759,7 +1759,7 @@ var defaults = $.fn.steps.defaults = { /** * Enables pagination if `true`. * - * @property enablePagination + * @assets enablePagination * @type Boolean * @default true * @for defaults @@ -1769,7 +1769,7 @@ var defaults = $.fn.steps.defaults = { /** * Suppresses pagination if a form field is focused. * - * @property suppressPaginationOnFocus + * @assets suppressPaginationOnFocus * @type Boolean * @default true * @for defaults @@ -1779,7 +1779,7 @@ var defaults = $.fn.steps.defaults = { /** * Enables cache for async loaded or iframe embedded content. * - * @property enableContentCache + * @assets enableContentCache * @type Boolean * @default true * @for defaults @@ -1789,7 +1789,7 @@ var defaults = $.fn.steps.defaults = { /** * Shows the cancel button if enabled. * - * @property enableCancelButton + * @assets enableCancelButton * @type Boolean * @default false * @for defaults @@ -1799,7 +1799,7 @@ var defaults = $.fn.steps.defaults = { /** * Shows the finish button if enabled. * - * @property enableFinishButton + * @assets enableFinishButton * @type Boolean * @default true * @for defaults @@ -1809,7 +1809,7 @@ var defaults = $.fn.steps.defaults = { /** * Not yet implemented. * - * @property preloadContent + * @assets preloadContent * @type Boolean * @default false * @for defaults @@ -1820,7 +1820,7 @@ var defaults = $.fn.steps.defaults = { * Shows the finish button always (on each step; right beside the next button) if `true`. * Otherwise the next button will be replaced by the finish button if the last step becomes active. * - * @property showFinishButtonAlways + * @assets showFinishButtonAlways * @type Boolean * @default false * @for defaults @@ -1830,7 +1830,7 @@ var defaults = $.fn.steps.defaults = { /** * Prevents jumping to a previous step. * - * @property forceMoveForward + * @assets forceMoveForward * @type Boolean * @default false * @for defaults @@ -1841,7 +1841,7 @@ var defaults = $.fn.steps.defaults = { * Saves the current state (step position) to a cookie. * By coming next time the last active step becomes activated. * - * @property saveState + * @assets saveState * @type Boolean * @default false * @for defaults @@ -1851,7 +1851,7 @@ var defaults = $.fn.steps.defaults = { /** * The position to start on (zero-based). * - * @property startIndex + * @assets startIndex * @type Integer * @default 0 * @for defaults @@ -1865,7 +1865,7 @@ var defaults = $.fn.steps.defaults = { /** * The animation effect which will be used for step transitions. * - * @property transitionEffect + * @assets transitionEffect * @type transitionEffect * @default none * @for defaults @@ -1875,7 +1875,7 @@ var defaults = $.fn.steps.defaults = { /** * Animation speed for step transitions (in milliseconds). * - * @property transitionEffectSpeed + * @assets transitionEffectSpeed * @type Integer * @default 200 * @for defaults @@ -1890,7 +1890,7 @@ var defaults = $.fn.steps.defaults = { * Fires before the step changes and can be used to prevent step changing by returning `false`. * Very useful for form validation. * - * @property onStepChanging + * @assets onStepChanging * @type Event * @default function (event, currentIndex, newIndex) { return true; } * @for defaults @@ -1900,7 +1900,7 @@ var defaults = $.fn.steps.defaults = { /** * Fires after the step has change. * - * @property onStepChanged + * @assets onStepChanged * @type Event * @default function (event, currentIndex, priorIndex) { } * @for defaults @@ -1910,7 +1910,7 @@ var defaults = $.fn.steps.defaults = { /** * Fires after cancelation. * - * @property onCanceled + * @assets onCanceled * @type Event * @default function (event) { } * @for defaults @@ -1921,7 +1921,7 @@ var defaults = $.fn.steps.defaults = { * Fires before finishing and can be used to prevent completion by returning `false`. * Very useful for form validation. * - * @property onFinishing + * @assets onFinishing * @type Event * @default function (event, currentIndex) { return true; } * @for defaults @@ -1931,7 +1931,7 @@ var defaults = $.fn.steps.defaults = { /** * Fires after completion. * - * @property onFinished + * @assets onFinished * @type Event * @default function (event, currentIndex) { } * @for defaults @@ -1941,7 +1941,7 @@ var defaults = $.fn.steps.defaults = { /** * Fires after async content is loaded. * - * @property onContentLoaded + * @assets onContentLoaded * @type Event * @default function (event, index) { } * @for defaults @@ -1951,7 +1951,7 @@ var defaults = $.fn.steps.defaults = { /** * Fires when the wizard is initialized. * - * @property onInit + * @assets onInit * @type Event * @default function (event) { } * @for defaults @@ -1961,7 +1961,7 @@ var defaults = $.fn.steps.defaults = { /** * Contains all labels. * - * @property labels + * @assets labels * @type Object * @for defaults **/ @@ -1969,7 +1969,7 @@ var defaults = $.fn.steps.defaults = { /** * Label for the cancel button. * - * @property cancel + * @assets cancel * @type String * @default "Cancel" * @for defaults @@ -1980,7 +1980,7 @@ var defaults = $.fn.steps.defaults = { * This label is important for accessability reasons. * Indicates which step is activated. * - * @property current + * @assets current * @type String * @default "current step:" * @for defaults @@ -1990,7 +1990,7 @@ var defaults = $.fn.steps.defaults = { /** * This label is important for accessability reasons and describes the kind of navigation. * - * @property pagination + * @assets pagination * @type String * @default "Pagination" * @for defaults @@ -2001,7 +2001,7 @@ var defaults = $.fn.steps.defaults = { /** * Label for the finish button. * - * @property finish + * @assets finish * @type String * @default "Finish" * @for defaults @@ -2011,7 +2011,7 @@ var defaults = $.fn.steps.defaults = { /** * Label for the next button. * - * @property next + * @assets next * @type String * @default "Next" * @for defaults @@ -2021,7 +2021,7 @@ var defaults = $.fn.steps.defaults = { /** * Label for the previous button. * - * @property previous + * @assets previous * @type String * @default "Previous" * @for defaults @@ -2031,7 +2031,7 @@ var defaults = $.fn.steps.defaults = { /** * Label for the loading animation. * - * @property loading + * @assets loading * @type String * @default "Loading ..." * @for defaults diff --git a/ruoyi-admin/src/main/resources/static/ajax/libs/summernote/summernote.js b/ruoyi-admin/src/main/resources/static/ajax/libs/summernote/summernote.js index a62224bef..0a726a58f 100644 --- a/ruoyi-admin/src/main/resources/static/ajax/libs/summernote/summernote.js +++ b/ruoyi-admin/src/main/resources/static/ajax/libs/summernote/summernote.js @@ -1797,13 +1797,13 @@ return node && !isText(node) && lists.contains(node.classList, 'note-styletag'); } var dom = { - /** @property {String} NBSP_CHAR */ + /** @assets {String} NBSP_CHAR */ NBSP_CHAR: NBSP_CHAR, - /** @property {String} ZERO_WIDTH_NBSP_CHAR */ + /** @assets {String} ZERO_WIDTH_NBSP_CHAR */ ZERO_WIDTH_NBSP_CHAR: ZERO_WIDTH_NBSP_CHAR, - /** @property {String} blank */ + /** @assets {String} blank */ blank: blankHTML, - /** @property {String} emptyPara */ + /** @assets {String} emptyPara */ emptyPara: "

        " + blankHTML + "

        ", makePredByNodeName: makePredByNodeName, isEditable: isEditable, @@ -2885,8 +2885,8 @@ ], keyCode); }, /** - * @property {Object} nameFromCode - * @property {String} nameFromCode.8 "BACKSPACE" + * @assets {Object} nameFromCode + * @assets {String} nameFromCode.8 "BACKSPACE" */ nameFromCode: func.invertObject(KEY_MAP), code: KEY_MAP @@ -3045,7 +3045,7 @@ * * [workaround] for old jQuery * passing an array of style properties to .css() - * will result in an object of property-value pairs. + * will result in an object of assets-value pairs. * (compability with version < 1.9) * * @private diff --git a/ruoyi-admin/src/main/resources/templates/assets/assetsCabinet/add.html b/ruoyi-admin/src/main/resources/templates/assets/assetsCabinet/add.html new file mode 100755 index 000000000..1b2001e7a --- /dev/null +++ b/ruoyi-admin/src/main/resources/templates/assets/assetsCabinet/add.html @@ -0,0 +1,77 @@ + + + + + + +
        +
        + + + + + + +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        +
        +
        + + + diff --git a/ruoyi-admin/src/main/resources/templates/assets/assetsCabinet/assetsCabinet.html b/ruoyi-admin/src/main/resources/templates/assets/assetsCabinet/assetsCabinet.html new file mode 100755 index 000000000..a232a7553 --- /dev/null +++ b/ruoyi-admin/src/main/resources/templates/assets/assetsCabinet/assetsCabinet.html @@ -0,0 +1,145 @@ + + + + + + +
        +
        +
        +
        +
        +
          +
        • + 机房: +
        • + +
        • + 机柜名称: +
        • + +
        • + 机柜所在区域: +
        • + +
        • + 机柜可用U数: +
        • + +
        • + 机柜可用电力: +
        • + +
        • + 机柜备注: +
        • + +
        • +  搜索 +  重置 +
        • +
        +
        +
        +
        + + +
        +
        +
        +
        +
        +
        + + + \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/templates/assets/assetsCabinet/edit.html b/ruoyi-admin/src/main/resources/templates/assets/assetsCabinet/edit.html new file mode 100755 index 000000000..28a82f5ce --- /dev/null +++ b/ruoyi-admin/src/main/resources/templates/assets/assetsCabinet/edit.html @@ -0,0 +1,71 @@ + + + + + + +
        +
        + +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        +
        +
        + + + diff --git a/ruoyi-admin/src/main/resources/templates/assets/assetsMachineRoom/add.html b/ruoyi-admin/src/main/resources/templates/assets/assetsMachineRoom/add.html new file mode 100755 index 000000000..a46b1f0fd --- /dev/null +++ b/ruoyi-admin/src/main/resources/templates/assets/assetsMachineRoom/add.html @@ -0,0 +1,96 @@ + + + + + + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        +
        +
        + + + diff --git a/ruoyi-admin/src/main/resources/templates/assets/assetsMachineRoom/assetsMachineRoom.html b/ruoyi-admin/src/main/resources/templates/assets/assetsMachineRoom/assetsMachineRoom.html new file mode 100755 index 000000000..933d43370 --- /dev/null +++ b/ruoyi-admin/src/main/resources/templates/assets/assetsMachineRoom/assetsMachineRoom.html @@ -0,0 +1,183 @@ + + + + + + +
        +
        +
        +
        +
        +
          +
        • + 机房名称: +
        • + +
        • + 带宽类型: +
        • + +
        • + 带宽大小: +
        • + +
        • + 所在国家: +
        • + +
        • + 所在省: +
        • + +
        • + 所在市: +
        • + +
        • + 所在区: +
        • + +
        • + 地址: +
        • + +
        • + 联系人: +
        • + +
        • + 联系电话: +
        • + +
        • + 邮箱: +
        • + +
        • +  搜索 +  重置 +
        • +
        +
        +
        +
        + + +
        +
        +
        +
        +
        +
        + + + \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/templates/assets/assetsMachineRoom/edit.html b/ruoyi-admin/src/main/resources/templates/assets/assetsMachineRoom/edit.html new file mode 100755 index 000000000..ff9d06c63 --- /dev/null +++ b/ruoyi-admin/src/main/resources/templates/assets/assetsMachineRoom/edit.html @@ -0,0 +1,102 @@ + + + + + + +
        +
        + +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        +
        +
        + + + diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseEntity.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseEntity.java index fbc9ce98d..22a06b1fe 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseEntity.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseEntity.java @@ -1,16 +1,16 @@ package com.ruoyi.common.core.domain; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; + import java.io.Serializable; import java.util.Date; import java.util.HashMap; import java.util.Map; -import com.fasterxml.jackson.annotation.JsonFormat; -import com.fasterxml.jackson.annotation.JsonIgnore; - /** * Entity基类 - * + * * @author ruoyi */ public class BaseEntity implements Serializable { diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/security/PermissionUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/security/PermissionUtils.java index 3b6f098ca..ab4797153 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/security/PermissionUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/security/PermissionUtils.java @@ -109,7 +109,7 @@ public class PermissionUtils } catch (Exception e) { - log.error("Error reading property [{}] from principal of type [{}]", property, + log.error("Error reading assets [{}] from principal of type [{}]", property, principal.getClass().getName()); } } diff --git a/ruoyi-generator/src/main/resources/generator.yml b/ruoyi-generator/src/main/resources/generator.yml index 67c537295..eb4085f68 100644 --- a/ruoyi-generator/src/main/resources/generator.yml +++ b/ruoyi-generator/src/main/resources/generator.yml @@ -4,7 +4,7 @@ gen: # 作者 author: TP # 默认生成包路径 system 需改成自己的模块名称 如 system monitor tool - packageName: com.ruoyi.template + packageName: com.ruoyi.assets # 自动去除表前缀,默认是true autoRemovePre: fasle # 表前缀(类名不会包含表前缀) diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/config/ScheduleConfig.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/config/ScheduleConfig.java index e466ed057..1b3e9dccd 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/config/ScheduleConfig.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/config/ScheduleConfig.java @@ -37,7 +37,7 @@ public class ScheduleConfig prop.put("org.quartz.jobStore.txIsolationLevelSerializable", "true"); // sqlserver 启用 - // prop.put("org.quartz.jobStore.selectWithLockSQL", "SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ?"); + // assets.put("org.quartz.jobStore.selectWithLockSQL", "SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ?"); prop.put("org.quartz.jobStore.misfireThreshold", "12000"); prop.put("org.quartz.jobStore.tablePrefix", "QRTZ_"); factory.setQuartzProperties(prop); diff --git a/ruoyi-system/src/main/java/com/ruoyi/assets/domain/AssetsCabinet.java b/ruoyi-system/src/main/java/com/ruoyi/assets/domain/AssetsCabinet.java new file mode 100755 index 000000000..0e1807ee8 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/assets/domain/AssetsCabinet.java @@ -0,0 +1,101 @@ +package com.ruoyi.assets.domain; + +import com.ruoyi.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 机柜类型表 assets_cabinet + * + * @author TP + * @date 2019-06-17 + */ +public class AssetsCabinet extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 机柜编号 + */ + private Integer cabinetId; + /** + * 机房编号 + */ + private AssetsMachineRoom machineRoom; + /** + * 机柜名称 + */ + private String cabinetName; + /** + * 机柜所在区域 + */ + private Long cabinetArea; + /** + * 机柜可用U数 + */ + private Integer cabinetAvailU; + /** + * 机柜可用电力 + */ + private Integer cabinetAvailElec; + + public Integer getCabinetId() { + return cabinetId; + } + + public void setCabinetId(Integer cabinetId) { + this.cabinetId = cabinetId; + } + + public AssetsMachineRoom getMachineRoom() { + return machineRoom; + } + + public void setMachineRoom(AssetsMachineRoom machineRoom) { + this.machineRoom = machineRoom; + } + + public String getCabinetName() { + return cabinetName; + } + + public void setCabinetName(String cabinetName) { + this.cabinetName = cabinetName; + } + + public Long getCabinetArea() { + return cabinetArea; + } + + public void setCabinetArea(Long cabinetArea) { + this.cabinetArea = cabinetArea; + } + + public Integer getCabinetAvailU() { + return cabinetAvailU; + } + + public void setCabinetAvailU(Integer cabinetAvailU) { + this.cabinetAvailU = cabinetAvailU; + } + + public Integer getCabinetAvailElec() { + return cabinetAvailElec; + } + + public void setCabinetAvailElec(Integer cabinetAvailElec) { + this.cabinetAvailElec = cabinetAvailElec; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("cabinetId", getCabinetId()) + .append("machineRoomId", getMachineRoom()) + .append("cabinetName", getCabinetName()) + .append("cabinetArea", getCabinetArea()) + .append("cabinetAvailU", getCabinetAvailU()) + .append("cabinetAvailElec", getCabinetAvailElec()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/assets/domain/AssetsMachineRoom.java b/ruoyi-system/src/main/java/com/ruoyi/assets/domain/AssetsMachineRoom.java new file mode 100755 index 000000000..a3752a647 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/assets/domain/AssetsMachineRoom.java @@ -0,0 +1,178 @@ +package com.ruoyi.assets.domain; + +import com.ruoyi.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 机房表 assets_machine_room + * + * @author TP + * @date 2019-06-17 + */ +public class AssetsMachineRoom extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 机房编号 + */ + private Integer machineRoomId; + /** + * 机房名称 + */ + private String machineRoomName; + /** + * 带宽类型 + */ + private Long bandwidthType; + /** + * 带宽大小 + */ + private Integer bandwidthSize; + /** + * 所在国家 + */ + private String country; + /** + * 所在省 + */ + private String province; + /** + * 所在市 + */ + private String city; + /** + * 所在区 + */ + private String area; + /** + * 地址 + */ + private String location; + /** + * 联系人 + */ + private String contactPerson; + /** + * 联系电话 + */ + private String contactPhone; + /** + * 邮箱 + */ + private String email; + + public Integer getMachineRoomId() { + return machineRoomId; + } + + public void setMachineRoomId(Integer machineRoomId) { + this.machineRoomId = machineRoomId; + } + + public String getMachineRoomName() { + return machineRoomName; + } + + public void setMachineRoomName(String machineRoomName) { + this.machineRoomName = machineRoomName; + } + + public Long getBandwidthType() { + return bandwidthType; + } + + public void setBandwidthType(Long bandwidthType) { + this.bandwidthType = bandwidthType; + } + + public Integer getBandwidthSize() { + return bandwidthSize; + } + + public void setBandwidthSize(Integer bandwidthSize) { + this.bandwidthSize = bandwidthSize; + } + + public String getCountry() { + return country; + } + + public void setCountry(String country) { + this.country = country; + } + + public String getProvince() { + return province; + } + + public void setProvince(String province) { + this.province = province; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getLocation() { + return location; + } + + public void setLocation(String location) { + this.location = location; + } + + public String getContactPerson() { + return contactPerson; + } + + public void setContactPerson(String contactPerson) { + this.contactPerson = contactPerson; + } + + public String getContactPhone() { + return contactPhone; + } + + public void setContactPhone(String contactPhone) { + this.contactPhone = contactPhone; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("machineRoomId", getMachineRoomId()) + .append("machineRoomName", getMachineRoomName()) + .append("bandwidthType", getBandwidthType()) + .append("bandwidthSize", getBandwidthSize()) + .append("country", getCountry()) + .append("province", getProvince()) + .append("city", getCity()) + .append("area", getArea()) + .append("location", getLocation()) + .append("contactPerson", getContactPerson()) + .append("contactPhone", getContactPhone()) + .append("email", getEmail()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/assets/mapper/AssetsCabinetMapper.java b/ruoyi-system/src/main/java/com/ruoyi/assets/mapper/AssetsCabinetMapper.java new file mode 100755 index 000000000..4103559e7 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/assets/mapper/AssetsCabinetMapper.java @@ -0,0 +1,62 @@ +package com.ruoyi.assets.mapper; + +import com.ruoyi.assets.domain.AssetsCabinet; + +import java.util.List; + +/** + * 机柜类型 数据层 + * + * @author TP + * @date 2019-06-17 + */ +public interface AssetsCabinetMapper { + /** + * 查询机柜类型信息 + * + * @param cabinetId 机柜类型ID + * @return 机柜类型信息 + */ + public AssetsCabinet selectAssetsCabinetById(Integer cabinetId); + + /** + * 查询机柜类型列表 + * + * @param assetsCabinet 机柜类型信息 + * @return 机柜类型集合 + */ + public List selectAssetsCabinetList(AssetsCabinet assetsCabinet); + + /** + * 新增机柜类型 + * + * @param assetsCabinet 机柜类型信息 + * @return 结果 + */ + public int insertAssetsCabinet(AssetsCabinet assetsCabinet); + + /** + * 修改机柜类型 + * + * @param assetsCabinet 机柜类型信息 + * @return 结果 + */ + public int updateAssetsCabinet(AssetsCabinet assetsCabinet); + + /** + * 删除机柜类型 + * + * @param cabinetId 机柜类型ID + * @return 结果 + */ + public int deleteAssetsCabinetById(Integer cabinetId); + + /** + * 批量删除机柜类型 + * + * @param cabinetIds 需要删除的数据ID + * @return 结果 + */ + public int deleteAssetsCabinetByIds(String[] cabinetIds); + +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/assets/mapper/AssetsMachineRoomMapper.java b/ruoyi-system/src/main/java/com/ruoyi/assets/mapper/AssetsMachineRoomMapper.java new file mode 100755 index 000000000..fc9962c35 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/assets/mapper/AssetsMachineRoomMapper.java @@ -0,0 +1,62 @@ +package com.ruoyi.assets.mapper; + +import com.ruoyi.assets.domain.AssetsMachineRoom; + +import java.util.List; + +/** + * 机房 数据层 + * + * @author TP + * @date 2019-06-17 + */ +public interface AssetsMachineRoomMapper { + /** + * 查询机房信息 + * + * @param machineRoomId 机房ID + * @return 机房信息 + */ + public AssetsMachineRoom selectAssetsMachineRoomById(Integer machineRoomId); + + /** + * 查询机房列表 + * + * @param assetsMachineRoom 机房信息 + * @return 机房集合 + */ + public List selectAssetsMachineRoomList(AssetsMachineRoom assetsMachineRoom); + + /** + * 新增机房 + * + * @param assetsMachineRoom 机房信息 + * @return 结果 + */ + public int insertAssetsMachineRoom(AssetsMachineRoom assetsMachineRoom); + + /** + * 修改机房 + * + * @param assetsMachineRoom 机房信息 + * @return 结果 + */ + public int updateAssetsMachineRoom(AssetsMachineRoom assetsMachineRoom); + + /** + * 删除机房 + * + * @param machineRoomId 机房ID + * @return 结果 + */ + public int deleteAssetsMachineRoomById(Integer machineRoomId); + + /** + * 批量删除机房 + * + * @param machineRoomIds 需要删除的数据ID + * @return 结果 + */ + public int deleteAssetsMachineRoomByIds(String[] machineRoomIds); + +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/assets/service/IAssetsCabinetService.java b/ruoyi-system/src/main/java/com/ruoyi/assets/service/IAssetsCabinetService.java new file mode 100755 index 000000000..b651e4ed5 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/assets/service/IAssetsCabinetService.java @@ -0,0 +1,54 @@ +package com.ruoyi.assets.service; + +import com.ruoyi.assets.domain.AssetsCabinet; +import java.util.List; + +/** + * 机柜类型 服务层 + * + * @author TP + * @date 2019-06-17 + */ +public interface IAssetsCabinetService +{ + /** + * 查询机柜类型信息 + * + * @param cabinetId 机柜类型ID + * @return 机柜类型信息 + */ + public AssetsCabinet selectAssetsCabinetById(Integer cabinetId); + + /** + * 查询机柜类型列表 + * + * @param assetsCabinet 机柜类型信息 + * @return 机柜类型集合 + */ + public List selectAssetsCabinetList(AssetsCabinet assetsCabinet); + + /** + * 新增机柜类型 + * + * @param assetsCabinet 机柜类型信息 + * @return 结果 + */ + public int insertAssetsCabinet(AssetsCabinet assetsCabinet); + + /** + * 修改机柜类型 + * + * @param assetsCabinet 机柜类型信息 + * @return 结果 + */ + public int updateAssetsCabinet(AssetsCabinet assetsCabinet); + + /** + * 删除机柜类型信息 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteAssetsCabinetByIds(String ids); + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/assets/service/IAssetsMachineRoomService.java b/ruoyi-system/src/main/java/com/ruoyi/assets/service/IAssetsMachineRoomService.java new file mode 100755 index 000000000..66979b599 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/assets/service/IAssetsMachineRoomService.java @@ -0,0 +1,54 @@ +package com.ruoyi.assets.service; + +import com.ruoyi.assets.domain.AssetsMachineRoom; +import java.util.List; + +/** + * 机房 服务层 + * + * @author TP + * @date 2019-06-17 + */ +public interface IAssetsMachineRoomService +{ + /** + * 查询机房信息 + * + * @param machineRoomId 机房ID + * @return 机房信息 + */ + public AssetsMachineRoom selectAssetsMachineRoomById(Integer machineRoomId); + + /** + * 查询机房列表 + * + * @param assetsMachineRoom 机房信息 + * @return 机房集合 + */ + public List selectAssetsMachineRoomList(AssetsMachineRoom assetsMachineRoom); + + /** + * 新增机房 + * + * @param assetsMachineRoom 机房信息 + * @return 结果 + */ + public int insertAssetsMachineRoom(AssetsMachineRoom assetsMachineRoom); + + /** + * 修改机房 + * + * @param assetsMachineRoom 机房信息 + * @return 结果 + */ + public int updateAssetsMachineRoom(AssetsMachineRoom assetsMachineRoom); + + /** + * 删除机房信息 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteAssetsMachineRoomByIds(String ids); + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/assets/service/impl/AssetsCabinetServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/assets/service/impl/AssetsCabinetServiceImpl.java new file mode 100755 index 000000000..28fe2ad19 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/assets/service/impl/AssetsCabinetServiceImpl.java @@ -0,0 +1,78 @@ +package com.ruoyi.assets.service.impl; + +import com.ruoyi.assets.domain.AssetsCabinet; +import com.ruoyi.assets.mapper.AssetsCabinetMapper; +import com.ruoyi.assets.service.IAssetsCabinetService; +import com.ruoyi.common.core.text.Convert; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 机柜类型 服务层实现 + * + * @author TP + * @date 2019-06-17 + */ +@Service +public class AssetsCabinetServiceImpl implements IAssetsCabinetService { + @Autowired + private AssetsCabinetMapper assetsCabinetMapper; + + /** + * 查询机柜类型信息 + * + * @param cabinetId 机柜类型ID + * @return 机柜类型信息 + */ + @Override + public AssetsCabinet selectAssetsCabinetById(Integer cabinetId) { + return assetsCabinetMapper.selectAssetsCabinetById(cabinetId); + } + + /** + * 查询机柜类型列表 + * + * @param assetsCabinet 机柜类型信息 + * @return 机柜类型集合 + */ + @Override + public List selectAssetsCabinetList(AssetsCabinet assetsCabinet) { + return assetsCabinetMapper.selectAssetsCabinetList(assetsCabinet); + } + + /** + * 新增机柜类型 + * + * @param assetsCabinet 机柜类型信息 + * @return 结果 + */ + @Override + public int insertAssetsCabinet(AssetsCabinet assetsCabinet) { + return assetsCabinetMapper.insertAssetsCabinet(assetsCabinet); + } + + /** + * 修改机柜类型 + * + * @param assetsCabinet 机柜类型信息 + * @return 结果 + */ + @Override + public int updateAssetsCabinet(AssetsCabinet assetsCabinet) { + return assetsCabinetMapper.updateAssetsCabinet(assetsCabinet); + } + + /** + * 删除机柜类型对象 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + @Override + public int deleteAssetsCabinetByIds(String ids) { + return assetsCabinetMapper.deleteAssetsCabinetByIds(Convert.toStrArray(ids)); + } + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/assets/service/impl/AssetsMachineRoomServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/assets/service/impl/AssetsMachineRoomServiceImpl.java new file mode 100755 index 000000000..3e6f5f6e9 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/assets/service/impl/AssetsMachineRoomServiceImpl.java @@ -0,0 +1,78 @@ +package com.ruoyi.assets.service.impl; + +import com.ruoyi.assets.domain.AssetsMachineRoom; +import com.ruoyi.assets.mapper.AssetsMachineRoomMapper; +import com.ruoyi.assets.service.IAssetsMachineRoomService; +import com.ruoyi.common.core.text.Convert; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 机房 服务层实现 + * + * @author TP + * @date 2019-06-17 + */ +@Service +public class AssetsMachineRoomServiceImpl implements IAssetsMachineRoomService { + @Autowired + private AssetsMachineRoomMapper assetsMachineRoomMapper; + + /** + * 查询机房信息 + * + * @param machineRoomId 机房ID + * @return 机房信息 + */ + @Override + public AssetsMachineRoom selectAssetsMachineRoomById(Integer machineRoomId) { + return assetsMachineRoomMapper.selectAssetsMachineRoomById(machineRoomId); + } + + /** + * 查询机房列表 + * + * @param assetsMachineRoom 机房信息 + * @return 机房集合 + */ + @Override + public List selectAssetsMachineRoomList(AssetsMachineRoom assetsMachineRoom) { + return assetsMachineRoomMapper.selectAssetsMachineRoomList(assetsMachineRoom); + } + + /** + * 新增机房 + * + * @param assetsMachineRoom 机房信息 + * @return 结果 + */ + @Override + public int insertAssetsMachineRoom(AssetsMachineRoom assetsMachineRoom) { + return assetsMachineRoomMapper.insertAssetsMachineRoom(assetsMachineRoom); + } + + /** + * 修改机房 + * + * @param assetsMachineRoom 机房信息 + * @return 结果 + */ + @Override + public int updateAssetsMachineRoom(AssetsMachineRoom assetsMachineRoom) { + return assetsMachineRoomMapper.updateAssetsMachineRoom(assetsMachineRoom); + } + + /** + * 删除机房对象 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + @Override + public int deleteAssetsMachineRoomByIds(String ids) { + return assetsMachineRoomMapper.deleteAssetsMachineRoomByIds(Convert.toStrArray(ids)); + } + +} diff --git a/ruoyi-system/src/main/resources/mapper/assets/AssetsCabinetMapper.xml b/ruoyi-system/src/main/resources/mapper/assets/AssetsCabinetMapper.xml new file mode 100755 index 000000000..89be37b20 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/assets/AssetsCabinetMapper.xml @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + select cabinet_id, machine_room_id, cabinet_name, cabinet_area, cabinet_avail_u, cabinet_avail_elec, remark from assets_cabinet + + + + + + + + insert into assets_cabinet + + machine_room_id, + cabinet_name, + cabinet_area, + cabinet_avail_u, + cabinet_avail_elec, + remark, + + + #{machineRoom.machineRoomId}, + #{cabinetName}, + #{cabinetArea}, + #{cabinetAvailU}, + #{cabinetAvailElec}, + #{remark}, + + + + + update assets_cabinet + + machine_room_id = #{machineRoom.machineRoomId}, + cabinet_name = #{cabinetName}, + cabinet_area = #{cabinetArea}, + cabinet_avail_u = #{cabinetAvailU}, + cabinet_avail_elec = #{cabinetAvailElec}, + remark = #{remark}, + + where cabinet_id = #{cabinetId} + + + + delete from assets_cabinet where cabinet_id = #{cabinetId} + + + + delete from assets_cabinet where cabinet_id in + + #{cabinetId} + + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/assets/AssetsMachineRoomMapper.xml b/ruoyi-system/src/main/resources/mapper/assets/AssetsMachineRoomMapper.xml new file mode 100755 index 000000000..49853f18b --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/assets/AssetsMachineRoomMapper.xml @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + select machine_room_id, machine_room_name, bandwidth_type, bandwidth_size, country, province, city, area, location, contact_person, contact_phone, email from assets_machine_room + + + + + + + + insert into assets_machine_room + + machine_room_name, + bandwidth_type, + bandwidth_size, + country, + province, + city, + area, + location, + contact_person, + contact_phone, + email, + + + #{machineRoomName}, + #{bandwidthType}, + #{bandwidthSize}, + #{country}, + #{province}, + #{city}, + #{area}, + #{location}, + #{contactPerson}, + #{contactPhone}, + #{email}, + + + + + update assets_machine_room + + machine_room_name = #{machineRoomName}, + bandwidth_type = #{bandwidthType}, + bandwidth_size = #{bandwidthSize}, + country = #{country}, + province = #{province}, + city = #{city}, + area = #{area}, + location = #{location}, + contact_person = #{contactPerson}, + contact_phone = #{contactPhone}, + email = #{email}, + + where machine_room_id = #{machineRoomId} + + + + delete from assets_machine_room where machine_room_id = #{machineRoomId} + + + + delete from assets_machine_room where machine_room_id in + + #{machineRoomId} + + + + \ No newline at end of file From bf1e675967144c0c5a15082ccd99d3cbaf742468 Mon Sep 17 00:00:00 2001 From: tangpeng Date: Tue, 18 Jun 2019 01:55:40 +0800 Subject: [PATCH 23/26] =?UTF-8?q?=E6=9C=BA=E6=9F=9C=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../assets/AssetsCabinetController.java | 179 +++++++++--------- .../templates/assets/assetsCabinet/add.html | 46 +++-- .../templates/assets/assetsCabinet/edit.html | 36 +++- .../template/tmplServer/tmplServer.html | 1 - .../assets/service/IAssetsCabinetService.java | 46 ++--- .../service/IAssetsMachineRoomService.java | 46 ++--- 6 files changed, 197 insertions(+), 157 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/assets/AssetsCabinetController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/assets/AssetsCabinetController.java index 98c20f980..fdef89478 100755 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/assets/AssetsCabinetController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/assets/AssetsCabinetController.java @@ -1,7 +1,9 @@ package com.ruoyi.web.controller.assets; import com.ruoyi.assets.domain.AssetsCabinet; +import com.ruoyi.assets.domain.AssetsMachineRoom; import com.ruoyi.assets.service.IAssetsCabinetService; +import com.ruoyi.assets.service.IAssetsMachineRoomService; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; @@ -18,107 +20,104 @@ import java.util.List; /** * 机柜类型 信息操作处理 - * + * * @author TP * @date 2019-06-17 */ @Controller @RequestMapping("/assets/assetsCabinet") -public class AssetsCabinetController extends BaseController -{ +public class AssetsCabinetController extends BaseController { private String prefix = "assets/assetsCabinet"; - - @Autowired - private IAssetsCabinetService assetsCabinetService; - - @RequiresPermissions("assets:assetsCabinet:view") - @GetMapping() - public String assetsCabinet() - { - return prefix + "/assetsCabinet"; - } - - /** - * 查询机柜类型列表 - */ - @RequiresPermissions("assets:assetsCabinet:list") - @PostMapping("/list") - @ResponseBody - public TableDataInfo list(AssetsCabinet assetsCabinet) - { - startPage(); + + @Autowired + private IAssetsCabinetService assetsCabinetService; + @Autowired + private IAssetsMachineRoomService assetsMachineRoomService; + + @RequiresPermissions("assets:assetsCabinet:view") + @GetMapping() + public String assetsCabinet() { + return prefix + "/assetsCabinet"; + } + + /** + * 查询机柜类型列表 + */ + @RequiresPermissions("assets:assetsCabinet:list") + @PostMapping("/list") + @ResponseBody + public TableDataInfo list(AssetsCabinet assetsCabinet) { + startPage(); List list = assetsCabinetService.selectAssetsCabinetList(assetsCabinet); - return getDataTable(list); - } - - - /** - * 导出机柜类型列表 - */ - @RequiresPermissions("assets:assetsCabinet:export") + return getDataTable(list); + } + + + /** + * 导出机柜类型列表 + */ + @RequiresPermissions("assets:assetsCabinet:export") @PostMapping("/export") @ResponseBody - public AjaxResult export(AssetsCabinet assetsCabinet) - { - List list = assetsCabinetService.selectAssetsCabinetList(assetsCabinet); + public AjaxResult export(AssetsCabinet assetsCabinet) { + List list = assetsCabinetService.selectAssetsCabinetList(assetsCabinet); ExcelUtil util = new ExcelUtil(AssetsCabinet.class); return util.exportExcel(list, "assetsCabinet"); } - - /** - * 新增机柜类型 - */ - @GetMapping("/add") - public String add() - { - return prefix + "/add"; - } - - /** - * 新增保存机柜类型 - */ - @RequiresPermissions("assets:assetsCabinet:add") - @Log(title = "机柜类型", businessType = BusinessType.INSERT) - @PostMapping("/add") - @ResponseBody - public AjaxResult addSave(AssetsCabinet assetsCabinet) - { - return toAjax(assetsCabinetService.insertAssetsCabinet(assetsCabinet)); - } - /** - * 修改机柜类型 - */ - @GetMapping("/edit/{cabinetId}") - public String edit(@PathVariable("cabinetId") Integer cabinetId, ModelMap mmap) - { - AssetsCabinet assetsCabinet = assetsCabinetService.selectAssetsCabinetById(cabinetId); - mmap.put("assetsCabinet", assetsCabinet); - return prefix + "/edit"; - } - - /** - * 修改保存机柜类型 - */ - @RequiresPermissions("assets:assetsCabinet:edit") - @Log(title = "机柜类型", businessType = BusinessType.UPDATE) - @PostMapping("/edit") - @ResponseBody - public AjaxResult editSave(AssetsCabinet assetsCabinet) - { - return toAjax(assetsCabinetService.updateAssetsCabinet(assetsCabinet)); - } - - /** - * 删除机柜类型 - */ - @RequiresPermissions("assets:assetsCabinet:remove") - @Log(title = "机柜类型", businessType = BusinessType.DELETE) - @PostMapping( "/remove") - @ResponseBody - public AjaxResult remove(String ids) - { - return toAjax(assetsCabinetService.deleteAssetsCabinetByIds(ids)); - } - + /** + * 新增机柜类型 + */ + @GetMapping("/add") + public String add(ModelMap mmap) { + List list = assetsMachineRoomService.selectAssetsMachineRoomList(new AssetsMachineRoom()); + mmap.put("machineRooms",list); + return prefix + "/add"; + } + + /** + * 新增保存机柜类型 + */ + @RequiresPermissions("assets:assetsCabinet:add") + @Log(title = "机柜类型", businessType = BusinessType.INSERT) + @PostMapping("/add") + @ResponseBody + public AjaxResult addSave(AssetsCabinet assetsCabinet) { + return toAjax(assetsCabinetService.insertAssetsCabinet(assetsCabinet)); + } + + /** + * 修改机柜类型 + */ + @GetMapping("/edit/{cabinetId}") + public String edit(@PathVariable("cabinetId") Integer cabinetId, ModelMap mmap) { + AssetsCabinet assetsCabinet = assetsCabinetService.selectAssetsCabinetById(cabinetId); + List list = assetsMachineRoomService.selectAssetsMachineRoomList(new AssetsMachineRoom()); + mmap.put("machineRooms",list); + mmap.put("assetsCabinet", assetsCabinet); + return prefix + "/edit"; + } + + /** + * 修改保存机柜类型 + */ + @RequiresPermissions("assets:assetsCabinet:edit") + @Log(title = "机柜类型", businessType = BusinessType.UPDATE) + @PostMapping("/edit") + @ResponseBody + public AjaxResult editSave(AssetsCabinet assetsCabinet) { + return toAjax(assetsCabinetService.updateAssetsCabinet(assetsCabinet)); + } + + /** + * 删除机柜类型 + */ + @RequiresPermissions("assets:assetsCabinet:remove") + @Log(title = "机柜类型", businessType = BusinessType.DELETE) + @PostMapping("/remove") + @ResponseBody + public AjaxResult remove(String ids) { + return toAjax(assetsCabinetService.deleteAssetsCabinetByIds(ids)); + } + } diff --git a/ruoyi-admin/src/main/resources/templates/assets/assetsCabinet/add.html b/ruoyi-admin/src/main/resources/templates/assets/assetsCabinet/add.html index 1b2001e7a..5320fb942 100755 --- a/ruoyi-admin/src/main/resources/templates/assets/assetsCabinet/add.html +++ b/ruoyi-admin/src/main/resources/templates/assets/assetsCabinet/add.html @@ -6,19 +6,13 @@
        - - - - - -
        - + +
        @@ -38,13 +32,13 @@
        - +
        - +
        @@ -57,12 +51,34 @@
        +
        + +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        + +
        +
        + diff --git a/ruoyi-admin/src/main/resources/templates/assets/assetsMachineRoom/assetsMachineRoom.html b/ruoyi-admin/src/main/resources/templates/assets/assetsMachineRoom/assetsMachineRoom.html index 933d43370..11dedc8dc 100755 --- a/ruoyi-admin/src/main/resources/templates/assets/assetsMachineRoom/assetsMachineRoom.html +++ b/ruoyi-admin/src/main/resources/templates/assets/assetsMachineRoom/assetsMachineRoom.html @@ -15,7 +15,7 @@
      • - 带宽类型: + 带宽类型:
      • @@ -116,7 +116,7 @@ sortable: true }, { - field: 'bandwidthType', + field: 'bandwidthType.dictLabel', title: '带宽类型', sortable: true }, diff --git a/ruoyi-admin/src/main/resources/templates/assets/assetsMachineRoom/edit.html b/ruoyi-admin/src/main/resources/templates/assets/assetsMachineRoom/edit.html index ff9d06c63..94574e015 100755 --- a/ruoyi-admin/src/main/resources/templates/assets/assetsMachineRoom/edit.html +++ b/ruoyi-admin/src/main/resources/templates/assets/assetsMachineRoom/edit.html @@ -17,8 +17,14 @@
        - +
        @@ -85,9 +91,47 @@ var prefix = ctx + "assets/assetsMachineRoom"; $("#form-assetsMachineRoom-edit").validate({ rules: { - xxxx: { - required: true, + "bandwidthType.dictCode": { + required: true }, + machineRoomName: { + required: true, + minlength: 1, + maxlength: 10 + }, + bandwidthSize: { + required: true, + minlength: 1, + maxlength: 10 + }, + country: { + required: true, + minlength: 1, + maxlength: 10 + }, + province: { + required: true, + minlength: 1, + maxlength: 10 + }, + city: { + required: true, + minlength: 1, + maxlength: 10 + }, + area: { + required: true, + minlength: 1, + maxlength: 10 + }, + email: { + required: false, + email: true + }, + contactPhone: { + required: false, + isPhone: true + } }, focusCleanup: true }); diff --git a/ruoyi-system/src/main/java/com/ruoyi/assets/domain/AssetsCabinet.java b/ruoyi-system/src/main/java/com/ruoyi/assets/domain/AssetsCabinet.java index 0e1807ee8..c2c1dacab 100755 --- a/ruoyi-system/src/main/java/com/ruoyi/assets/domain/AssetsCabinet.java +++ b/ruoyi-system/src/main/java/com/ruoyi/assets/domain/AssetsCabinet.java @@ -20,7 +20,12 @@ public class AssetsCabinet extends BaseEntity { /** * 机房编号 */ + private Integer dictCode; + /** + * 机房对象 + */ private AssetsMachineRoom machineRoom; + /** * 机柜名称 */ @@ -46,6 +51,14 @@ public class AssetsCabinet extends BaseEntity { this.cabinetId = cabinetId; } + public Integer getDictCode() { + return dictCode; + } + + public void setDictCode(Integer dictCode) { + this.dictCode = dictCode; + } + public AssetsMachineRoom getMachineRoom() { return machineRoom; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/assets/domain/AssetsMachineRoom.java b/ruoyi-system/src/main/java/com/ruoyi/assets/domain/AssetsMachineRoom.java index a3752a647..5e7295b4c 100755 --- a/ruoyi-system/src/main/java/com/ruoyi/assets/domain/AssetsMachineRoom.java +++ b/ruoyi-system/src/main/java/com/ruoyi/assets/domain/AssetsMachineRoom.java @@ -1,9 +1,12 @@ package com.ruoyi.assets.domain; import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.system.domain.SysDictData; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; +import java.beans.Transient; + /** * 机房表 assets_machine_room * @@ -24,7 +27,11 @@ public class AssetsMachineRoom extends BaseEntity { /** * 带宽类型 */ - private Long bandwidthType; + private Integer dictCode; + /** + * 带宽类型 实体关联 + */ + private SysDictData bandwidthType; /** * 带宽大小 */ @@ -78,11 +85,20 @@ public class AssetsMachineRoom extends BaseEntity { this.machineRoomName = machineRoomName; } - public Long getBandwidthType() { + @Transient + public Integer getDictCode() { + return dictCode; + } + + public void setDictCode(Integer dictCode) { + this.dictCode = dictCode; + } + + public SysDictData getBandwidthType() { return bandwidthType; } - public void setBandwidthType(Long bandwidthType) { + public void setBandwidthType(SysDictData bandwidthType) { this.bandwidthType = bandwidthType; } diff --git a/ruoyi-system/src/main/resources/mapper/assets/AssetsCabinetMapper.xml b/ruoyi-system/src/main/resources/mapper/assets/AssetsCabinetMapper.xml index 89be37b20..fe567a8f8 100755 --- a/ruoyi-system/src/main/resources/mapper/assets/AssetsCabinetMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/assets/AssetsCabinetMapper.xml @@ -6,7 +6,6 @@ - @@ -25,7 +24,7 @@ and cabinet_id = #{cabinetId} - and machine_room_id = #{machineRoom.machineRoomId} + and machine_room_id = #{dictCode} and cabinet_name = #{cabinetName} and cabinet_area = #{cabinetArea} and cabinet_avail_u = #{cabinetAvailU} diff --git a/ruoyi-system/src/main/resources/mapper/assets/AssetsMachineRoomMapper.xml b/ruoyi-system/src/main/resources/mapper/assets/AssetsMachineRoomMapper.xml index 49853f18b..bbc4cba95 100755 --- a/ruoyi-system/src/main/resources/mapper/assets/AssetsMachineRoomMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/assets/AssetsMachineRoomMapper.xml @@ -1,86 +1,90 @@ + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + - - - - - - - - - - - - + + + + + + + + + + + + + - - + + select machine_room_id, machine_room_name, bandwidth_type, bandwidth_size, country, province, city, area, location, contact_person, contact_phone, email from assets_machine_room - + - + - - + + insert into assets_machine_room - - machine_room_name, - bandwidth_type, - bandwidth_size, - country, - province, - city, - area, - location, - contact_person, - contact_phone, - email, - + + machine_room_name, + bandwidth_type, + bandwidth_size, + country, + province, + city, + area, + location, + contact_person, + contact_phone, + email, + - #{machineRoomName}, - #{bandwidthType}, - #{bandwidthSize}, - #{country}, - #{province}, - #{city}, - #{area}, - #{location}, - #{contactPerson}, - #{contactPhone}, - #{email}, - + #{machineRoomName}, + #{bandwidthType.dictCode}, + #{bandwidthSize}, + #{country}, + #{province}, + #{city}, + #{area}, + #{location}, + #{contactPerson}, + #{contactPhone}, + #{email}, + - + update assets_machine_room machine_room_name = #{machineRoomName}, - bandwidth_type = #{bandwidthType}, + bandwidth_type = #{bandwidthType.dictCode}, bandwidth_size = #{bandwidthSize}, country = #{country}, province = #{province}, @@ -94,15 +98,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where machine_room_id = #{machineRoomId} - + delete from assets_machine_room where machine_room_id = #{machineRoomId} - + - delete from assets_machine_room where machine_room_id in + delete from assets_machine_room where machine_room_id in #{machineRoomId} - + \ No newline at end of file From ff080bc307ea38b785138394554390405a20317a Mon Sep 17 00:00:00 2001 From: tangpeng Date: Tue, 18 Jun 2019 15:29:55 +0800 Subject: [PATCH 25/26] =?UTF-8?q?=E7=9C=81=E5=B8=82=E5=8C=BA=E9=80=89?= =?UTF-8?q?=E6=8B=A9=E6=8F=92=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../assets/AssetsCabinetController.java | 10 +- .../assets/AssetsMachineRoomController.java | 171 +- .../node_modules/distpicker/CHANGELOG.md | 101 + .../static/node_modules/distpicker/LICENSE | 21 + .../static/node_modules/distpicker/README.md | 259 ++ .../node_modules/distpicker/package.json | 112 + .../node_modules/distpicker/src/constants.js | 3 + .../node_modules/distpicker/src/defaults.js | 23 + .../node_modules/distpicker/src/distpicker.js | 195 + .../node_modules/distpicker/src/districts.js | 4105 +++++++++++++++++ .../node_modules/distpicker/src/index.js | 59 + .../main/resources/static/package-lock.json | 11 + .../assets/assetsMachineRoom/add.html | 22 +- .../assetsMachineRoom/assetsMachineRoom.html | 35 +- .../assets/assetsMachineRoom/edit.html | 32 +- .../src/main/resources/templates/include.html | 1 + 16 files changed, 5021 insertions(+), 139 deletions(-) create mode 100755 ruoyi-admin/src/main/resources/static/node_modules/distpicker/CHANGELOG.md create mode 100644 ruoyi-admin/src/main/resources/static/node_modules/distpicker/LICENSE create mode 100644 ruoyi-admin/src/main/resources/static/node_modules/distpicker/README.md create mode 100644 ruoyi-admin/src/main/resources/static/node_modules/distpicker/package.json create mode 100644 ruoyi-admin/src/main/resources/static/node_modules/distpicker/src/constants.js create mode 100644 ruoyi-admin/src/main/resources/static/node_modules/distpicker/src/defaults.js create mode 100644 ruoyi-admin/src/main/resources/static/node_modules/distpicker/src/distpicker.js create mode 100644 ruoyi-admin/src/main/resources/static/node_modules/distpicker/src/districts.js create mode 100644 ruoyi-admin/src/main/resources/static/node_modules/distpicker/src/index.js create mode 100644 ruoyi-admin/src/main/resources/static/package-lock.json diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/assets/AssetsCabinetController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/assets/AssetsCabinetController.java index fdef89478..23f189b11 100755 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/assets/AssetsCabinetController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/assets/AssetsCabinetController.java @@ -71,7 +71,7 @@ public class AssetsCabinetController extends BaseController { @GetMapping("/add") public String add(ModelMap mmap) { List list = assetsMachineRoomService.selectAssetsMachineRoomList(new AssetsMachineRoom()); - mmap.put("machineRooms",list); + mmap.put("machineRooms", list); return prefix + "/add"; } @@ -79,7 +79,7 @@ public class AssetsCabinetController extends BaseController { * 新增保存机柜类型 */ @RequiresPermissions("assets:assetsCabinet:add") - @Log(title = "机柜类型", businessType = BusinessType.INSERT) + @Log(title = "机柜管理", businessType = BusinessType.INSERT) @PostMapping("/add") @ResponseBody public AjaxResult addSave(AssetsCabinet assetsCabinet) { @@ -93,7 +93,7 @@ public class AssetsCabinetController extends BaseController { public String edit(@PathVariable("cabinetId") Integer cabinetId, ModelMap mmap) { AssetsCabinet assetsCabinet = assetsCabinetService.selectAssetsCabinetById(cabinetId); List list = assetsMachineRoomService.selectAssetsMachineRoomList(new AssetsMachineRoom()); - mmap.put("machineRooms",list); + mmap.put("machineRooms", list); mmap.put("assetsCabinet", assetsCabinet); return prefix + "/edit"; } @@ -102,7 +102,7 @@ public class AssetsCabinetController extends BaseController { * 修改保存机柜类型 */ @RequiresPermissions("assets:assetsCabinet:edit") - @Log(title = "机柜类型", businessType = BusinessType.UPDATE) + @Log(title = "机柜管理", businessType = BusinessType.UPDATE) @PostMapping("/edit") @ResponseBody public AjaxResult editSave(AssetsCabinet assetsCabinet) { @@ -113,7 +113,7 @@ public class AssetsCabinetController extends BaseController { * 删除机柜类型 */ @RequiresPermissions("assets:assetsCabinet:remove") - @Log(title = "机柜类型", businessType = BusinessType.DELETE) + @Log(title = "机柜管理", businessType = BusinessType.DELETE) @PostMapping("/remove") @ResponseBody public AjaxResult remove(String ids) { diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/assets/AssetsMachineRoomController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/assets/AssetsMachineRoomController.java index b359da010..c4a74b67c 100755 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/assets/AssetsMachineRoomController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/assets/AssetsMachineRoomController.java @@ -18,107 +18,98 @@ import java.util.List; /** * 机房 信息操作处理 - * + * * @author TP * @date 2019-06-17 */ @Controller @RequestMapping("/assets/assetsMachineRoom") -public class AssetsMachineRoomController extends BaseController -{ +public class AssetsMachineRoomController extends BaseController { private String prefix = "assets/assetsMachineRoom"; - - @Autowired - private IAssetsMachineRoomService assetsMachineRoomService; - - @RequiresPermissions("assets:assetsMachineRoom:view") - @GetMapping() - public String assetsMachineRoom() - { - return prefix + "/assetsMachineRoom"; - } - - /** - * 查询机房列表 - */ - @RequiresPermissions("assets:assetsMachineRoom:list") - @PostMapping("/list") - @ResponseBody - public TableDataInfo list(AssetsMachineRoom assetsMachineRoom) - { - startPage(); + + @Autowired + private IAssetsMachineRoomService assetsMachineRoomService; + + @RequiresPermissions("assets:assetsMachineRoom:view") + @GetMapping() + public String assetsMachineRoom() { + return prefix + "/assetsMachineRoom"; + } + + /** + * 查询机房列表 + */ + @RequiresPermissions("assets:assetsMachineRoom:list") + @PostMapping("/list") + @ResponseBody + public TableDataInfo list(AssetsMachineRoom assetsMachineRoom) { + startPage(); List list = assetsMachineRoomService.selectAssetsMachineRoomList(assetsMachineRoom); - return getDataTable(list); - } - - - /** - * 导出机房列表 - */ - @RequiresPermissions("assets:assetsMachineRoom:export") + return getDataTable(list); + } + + + /** + * 导出机房列表 + */ + @RequiresPermissions("assets:assetsMachineRoom:export") @PostMapping("/export") @ResponseBody - public AjaxResult export(AssetsMachineRoom assetsMachineRoom) - { - List list = assetsMachineRoomService.selectAssetsMachineRoomList(assetsMachineRoom); + public AjaxResult export(AssetsMachineRoom assetsMachineRoom) { + List list = assetsMachineRoomService.selectAssetsMachineRoomList(assetsMachineRoom); ExcelUtil util = new ExcelUtil(AssetsMachineRoom.class); return util.exportExcel(list, "assetsMachineRoom"); } - - /** - * 新增机房 - */ - @GetMapping("/add") - public String add() - { - return prefix + "/add"; - } - - /** - * 新增保存机房 - */ - @RequiresPermissions("assets:assetsMachineRoom:add") - @Log(title = "机房", businessType = BusinessType.INSERT) - @PostMapping("/add") - @ResponseBody - public AjaxResult addSave(AssetsMachineRoom assetsMachineRoom) - { - return toAjax(assetsMachineRoomService.insertAssetsMachineRoom(assetsMachineRoom)); - } - /** - * 修改机房 - */ - @GetMapping("/edit/{machineRoomId}") - public String edit(@PathVariable("machineRoomId") Integer machineRoomId, ModelMap mmap) - { - AssetsMachineRoom assetsMachineRoom = assetsMachineRoomService.selectAssetsMachineRoomById(machineRoomId); - mmap.put("assetsMachineRoom", assetsMachineRoom); - return prefix + "/edit"; - } - - /** - * 修改保存机房 - */ - @RequiresPermissions("assets:assetsMachineRoom:edit") - @Log(title = "机房", businessType = BusinessType.UPDATE) - @PostMapping("/edit") - @ResponseBody - public AjaxResult editSave(AssetsMachineRoom assetsMachineRoom) - { - return toAjax(assetsMachineRoomService.updateAssetsMachineRoom(assetsMachineRoom)); - } - - /** - * 删除机房 - */ - @RequiresPermissions("assets:assetsMachineRoom:remove") - @Log(title = "机房", businessType = BusinessType.DELETE) - @PostMapping( "/remove") - @ResponseBody - public AjaxResult remove(String ids) - { - return toAjax(assetsMachineRoomService.deleteAssetsMachineRoomByIds(ids)); - } - + /** + * 新增机房 + */ + @GetMapping("/add") + public String add() { + return prefix + "/add"; + } + + /** + * 新增保存机房 + */ + @RequiresPermissions("assets:assetsMachineRoom:add") + @Log(title = "机房管理", businessType = BusinessType.INSERT) + @PostMapping("/add") + @ResponseBody + public AjaxResult addSave(AssetsMachineRoom assetsMachineRoom) { + return toAjax(assetsMachineRoomService.insertAssetsMachineRoom(assetsMachineRoom)); + } + + /** + * 修改机房 + */ + @GetMapping("/edit/{machineRoomId}") + public String edit(@PathVariable("machineRoomId") Integer machineRoomId, ModelMap mmap) { + AssetsMachineRoom assetsMachineRoom = assetsMachineRoomService.selectAssetsMachineRoomById(machineRoomId); + mmap.put("assetsMachineRoom", assetsMachineRoom); + return prefix + "/edit"; + } + + /** + * 修改保存机房 + */ + @RequiresPermissions("assets:assetsMachineRoom:edit") + @Log(title = "机房管理", businessType = BusinessType.UPDATE) + @PostMapping("/edit") + @ResponseBody + public AjaxResult editSave(AssetsMachineRoom assetsMachineRoom) { + return toAjax(assetsMachineRoomService.updateAssetsMachineRoom(assetsMachineRoom)); + } + + /** + * 删除机房 + */ + @RequiresPermissions("assets:assetsMachineRoom:remove") + @Log(title = "机房管理", businessType = BusinessType.DELETE) + @PostMapping("/remove") + @ResponseBody + public AjaxResult remove(String ids) { + return toAjax(assetsMachineRoomService.deleteAssetsMachineRoomByIds(ids)); + } + } diff --git a/ruoyi-admin/src/main/resources/static/node_modules/distpicker/CHANGELOG.md b/ruoyi-admin/src/main/resources/static/node_modules/distpicker/CHANGELOG.md new file mode 100755 index 000000000..7bb0aefee --- /dev/null +++ b/ruoyi-admin/src/main/resources/static/node_modules/distpicker/CHANGELOG.md @@ -0,0 +1,101 @@ +# Changelog + +## 2.0.5 (Dec 1, 2018) + +- Fixed the issue of trigger change event twice (#68). + +## 2.0.4 (Jun 1, 2018) + +- Update districts. + +## 2.0.3 (Mar 1, 2018) + +- Update districts. + +## 2.0.2 (Dec 1, 2017) + +- Trigger change event once district changed. +- Support to load in node environment. +- Update districts. + +## 2.0.1 (Sep 1, 2017) + +- Update districts. + +## 2.0.0 (Jun 1, 2017) + +- Update districts. +- Use `window.jQuery` instead of `window.$` for browser side usage. +- Change the `main` field value from `dist/distpicker.js` (UMD) to `dist/distpicker.common.js` (CommonJS). +- Added `module` and `browser` fields to `package.json`. + +## 2.0.0-rc (Mar 4, 2017) + +- Update districts. + +## 2.0.0-beta.2 (Dec 8, 2016) + +- Build the source code with [Rollup](https://github.com/rollup/rollup). + +## 2.0.0-beta.1 (Oct 15, 2016) + +- Fixed the issue of restoring saved districts by code (#19). + +## 2.0.0-alpha.2 (Sep 6, 2016) + +- Rename `autoSelect` option to `autoselect`. +- Subdivide optional values for `autoselect` option (#13). +- Fixed the wrong value of the ` + + +
        +``` + +### Usage + +#### Initialize with `data-toggle="distpicker"` attribute + +Basic + +```html +
        + + + +
        +``` + +Custom placeholders + +```html +
        + + + +
        +``` + +Custom districts + +```html +
        + + + +
        +``` + +#### Initialize with `$.fn.distpicker` method + +Basic + +```js +$('#target').distpicker(); +``` + +Custom placeholders + +```js +$('#target').distpicker({ + province: '---- 所在省 ----', + city: '---- 所在市 ----', + district: '---- 所在区 ----' +}); +``` + +Custom districts + +```js +$('#target').distpicker({ + province: '浙江省', + city: '杭州市', + district: '西湖区' +}); +``` + +[⬆ back to top](#table-of-contents) + +## Options + +- Change the default options with `$().distpicker(options)`. +- Change the global default options with `$.fn.distpicker.setDefaults(options)`. + +Also supports to set the options by `data-*` attributes: + +```html +
        ...
        +``` + +### autoselect + +- Type: `Number` +- Options: + - `0`: Disable autoselect. + - `1`: Autoselect province only. + - `2`: Autoselect province and city only. + - `3`: Autoselect all (province, city and district). +- Default: `0` + +Selects the districts automatically. + +### placeholder + +- Type: `Boolean` +- Default: `true` + +Show placeholder (with an ``); + }); + + return list.join(''); + } + + // eslint-disable-next-line class-methods-use-this + getDistricts(code = DEFAULT_CODE) { + return DISTRICTS[code] || null; + } + + reset(deep) { + if (!deep) { + this.output(PROVINCE); + this.output(CITY); + this.output(DISTRICT); + } else if (this.$province) { + this.$province.find(':first').prop('selected', true).end().trigger(EVENT_CHANGE); + } + } + + destroy() { + this.unbind(); + } + + static setDefaults(options) { + $.extend(DEFAULTS, $.isPlainObject(options) && options); + } +} diff --git a/ruoyi-admin/src/main/resources/static/node_modules/distpicker/src/districts.js b/ruoyi-admin/src/main/resources/static/node_modules/distpicker/src/districts.js new file mode 100644 index 000000000..af6830a90 --- /dev/null +++ b/ruoyi-admin/src/main/resources/static/node_modules/distpicker/src/districts.js @@ -0,0 +1,4105 @@ +export default { + 100000: { + 110000: '北京市', + 120000: '天津市', + 130000: '河北省', + 140000: '山西省', + 150000: '内蒙古自治区', + 210000: '辽宁省', + 220000: '吉林省', + 230000: '黑龙江省', + 310000: '上海市', + 320000: '江苏省', + 330000: '浙江省', + 340000: '安徽省', + 350000: '福建省', + 360000: '江西省', + 370000: '山东省', + 410000: '河南省', + 420000: '湖北省', + 430000: '湖南省', + 440000: '广东省', + 450000: '广西壮族自治区', + 460000: '海南省', + 500000: '重庆市', + 510000: '四川省', + 520000: '贵州省', + 530000: '云南省', + 540000: '西藏自治区', + 610000: '陕西省', + 620000: '甘肃省', + 630000: '青海省', + 640000: '宁夏回族自治区', + 650000: '新疆维吾尔自治区', + 710000: '台湾省', + 810000: '香港特别行政区', + 820000: '澳门特别行政区', + }, + 110000: { + 110100: '北京城区', + }, + 110100: { + 110101: '东城区', + 110102: '西城区', + 110105: '朝阳区', + 110106: '丰台区', + 110107: '石景山区', + 110108: '海淀区', + 110109: '门头沟区', + 110111: '房山区', + 110112: '通州区', + 110113: '顺义区', + 110114: '昌平区', + 110115: '大兴区', + 110116: '怀柔区', + 110117: '平谷区', + 110118: '密云区', + 110119: '延庆区', + }, + 120000: { + 120100: '天津城区', + }, + 120100: { + 120101: '和平区', + 120102: '河东区', + 120103: '河西区', + 120104: '南开区', + 120105: '河北区', + 120106: '红桥区', + 120110: '东丽区', + 120111: '西青区', + 120112: '津南区', + 120113: '北辰区', + 120114: '武清区', + 120115: '宝坻区', + 120116: '滨海新区', + 120117: '宁河区', + 120118: '静海区', + 120119: '蓟州区', + }, + 130000: { + 130100: '石家庄市', + 130200: '唐山市', + 130300: '秦皇岛市', + 130400: '邯郸市', + 130500: '邢台市', + 130600: '保定市', + 130700: '张家口市', + 130800: '承德市', + 130900: '沧州市', + 131000: '廊坊市', + 131100: '衡水市', + }, + 130100: { + 130102: '长安区', + 130104: '桥西区', + 130105: '新华区', + 130107: '井陉矿区', + 130108: '裕华区', + 130109: '藁城区', + 130110: '鹿泉区', + 130111: '栾城区', + 130121: '井陉县', + 130123: '正定县', + 130125: '行唐县', + 130126: '灵寿县', + 130127: '高邑县', + 130128: '深泽县', + 130129: '赞皇县', + 130130: '无极县', + 130131: '平山县', + 130132: '元氏县', + 130133: '赵县', + 130181: '辛集市', + 130183: '晋州市', + 130184: '新乐市', + }, + 130200: { + 130202: '路南区', + 130203: '路北区', + 130204: '古冶区', + 130205: '开平区', + 130207: '丰南区', + 130208: '丰润区', + 130209: '曹妃甸区', + 130223: '滦县', + 130224: '滦南县', + 130225: '乐亭县', + 130227: '迁西县', + 130229: '玉田县', + 130281: '遵化市', + 130283: '迁安市', + }, + 130300: { + 130302: '海港区', + 130303: '山海关区', + 130304: '北戴河区', + 130306: '抚宁区', + 130321: '青龙满族自治县', + 130322: '昌黎县', + 130324: '卢龙县', + }, + 130400: { + 130402: '邯山区', + 130403: '丛台区', + 130404: '复兴区', + 130406: '峰峰矿区', + 130407: '肥乡区', + 130408: '永年区', + 130423: '临漳县', + 130424: '成安县', + 130425: '大名县', + 130426: '涉县', + 130427: '磁县', + 130430: '邱县', + 130431: '鸡泽县', + 130432: '广平县', + 130433: '馆陶县', + 130434: '魏县', + 130435: '曲周县', + 130481: '武安市', + }, + 130500: { + 130502: '桥东区', + 130503: '桥西区', + 130521: '邢台县', + 130522: '临城县', + 130523: '内丘县', + 130524: '柏乡县', + 130525: '隆尧县', + 130526: '任县', + 130527: '南和县', + 130528: '宁晋县', + 130529: '巨鹿县', + 130530: '新河县', + 130531: '广宗县', + 130532: '平乡县', + 130533: '威县', + 130534: '清河县', + 130535: '临西县', + 130581: '南宫市', + 130582: '沙河市', + }, + 130600: { + 130602: '竞秀区', + 130606: '莲池区', + 130607: '满城区', + 130608: '清苑区', + 130609: '徐水区', + 130623: '涞水县', + 130624: '阜平县', + 130626: '定兴县', + 130627: '唐县', + 130628: '高阳县', + 130629: '容城县', + 130630: '涞源县', + 130631: '望都县', + 130632: '安新县', + 130633: '易县', + 130634: '曲阳县', + 130635: '蠡县', + 130636: '顺平县', + 130637: '博野县', + 130638: '雄县', + 130681: '涿州市', + 130682: '定州市', + 130683: '安国市', + 130684: '高碑店市', + }, + 130700: { + 130702: '桥东区', + 130703: '桥西区', + 130705: '宣化区', + 130706: '下花园区', + 130708: '万全区', + 130709: '崇礼区', + 130722: '张北县', + 130723: '康保县', + 130724: '沽源县', + 130725: '尚义县', + 130726: '蔚县', + 130727: '阳原县', + 130728: '怀安县', + 130730: '怀来县', + 130731: '涿鹿县', + 130732: '赤城县', + }, + 130800: { + 130802: '双桥区', + 130803: '双滦区', + 130804: '鹰手营子矿区', + 130821: '承德县', + 130822: '兴隆县', + 130824: '滦平县', + 130825: '隆化县', + 130826: '丰宁满族自治县', + 130827: '宽城满族自治县', + 130828: '围场满族蒙古族自治县', + 130881: '平泉市', + }, + 130900: { + 130902: '新华区', + 130903: '运河区', + 130921: '沧县', + 130922: '青县', + 130923: '东光县', + 130924: '海兴县', + 130925: '盐山县', + 130926: '肃宁县', + 130927: '南皮县', + 130928: '吴桥县', + 130929: '献县', + 130930: '孟村回族自治县', + 130981: '泊头市', + 130982: '任丘市', + 130983: '黄骅市', + 130984: '河间市', + }, + 131000: { + 131002: '安次区', + 131003: '广阳区', + 131022: '固安县', + 131023: '永清县', + 131024: '香河县', + 131025: '大城县', + 131026: '文安县', + 131028: '大厂回族自治县', + 131081: '霸州市', + 131082: '三河市', + }, + 131100: { + 131102: '桃城区', + 131103: '冀州区', + 131121: '枣强县', + 131122: '武邑县', + 131123: '武强县', + 131124: '饶阳县', + 131125: '安平县', + 131126: '故城县', + 131127: '景县', + 131128: '阜城县', + 131182: '深州市', + }, + 140000: { + 140100: '太原市', + 140200: '大同市', + 140300: '阳泉市', + 140400: '长治市', + 140500: '晋城市', + 140600: '朔州市', + 140700: '晋中市', + 140800: '运城市', + 140900: '忻州市', + 141000: '临汾市', + 141100: '吕梁市', + }, + 140100: { + 140105: '小店区', + 140106: '迎泽区', + 140107: '杏花岭区', + 140108: '尖草坪区', + 140109: '万柏林区', + 140110: '晋源区', + 140121: '清徐县', + 140122: '阳曲县', + 140123: '娄烦县', + 140181: '古交市', + }, + 140200: { + 140202: '城区', + 140203: '矿区', + 140211: '南郊区', + 140212: '新荣区', + 140221: '阳高县', + 140222: '天镇县', + 140223: '广灵县', + 140224: '灵丘县', + 140225: '浑源县', + 140226: '左云县', + 140227: '大同县', + }, + 140300: { + 140302: '城区', + 140303: '矿区', + 140311: '郊区', + 140321: '平定县', + 140322: '盂县', + }, + 140400: { + 140402: '城区', + 140411: '郊区', + 140421: '长治县', + 140423: '襄垣县', + 140424: '屯留县', + 140425: '平顺县', + 140426: '黎城县', + 140427: '壶关县', + 140428: '长子县', + 140429: '武乡县', + 140430: '沁县', + 140431: '沁源县', + 140481: '潞城市', + }, + 140500: { + 140502: '城区', + 140521: '沁水县', + 140522: '阳城县', + 140524: '陵川县', + 140525: '泽州县', + 140581: '高平市', + }, + 140600: { + 140602: '朔城区', + 140603: '平鲁区', + 140621: '山阴县', + 140622: '应县', + 140623: '右玉县', + 140624: '怀仁县', + }, + 140700: { + 140702: '榆次区', + 140721: '榆社县', + 140722: '左权县', + 140723: '和顺县', + 140724: '昔阳县', + 140725: '寿阳县', + 140726: '太谷县', + 140727: '祁县', + 140728: '平遥县', + 140729: '灵石县', + 140781: '介休市', + }, + 140800: { + 140802: '盐湖区', + 140821: '临猗县', + 140822: '万荣县', + 140823: '闻喜县', + 140824: '稷山县', + 140825: '新绛县', + 140826: '绛县', + 140827: '垣曲县', + 140828: '夏县', + 140829: '平陆县', + 140830: '芮城县', + 140881: '永济市', + 140882: '河津市', + }, + 140900: { + 140902: '忻府区', + 140921: '定襄县', + 140922: '五台县', + 140923: '代县', + 140924: '繁峙县', + 140925: '宁武县', + 140926: '静乐县', + 140927: '神池县', + 140928: '五寨县', + 140929: '岢岚县', + 140930: '河曲县', + 140931: '保德县', + 140932: '偏关县', + 140981: '原平市', + }, + 141000: { + 141002: '尧都区', + 141021: '曲沃县', + 141022: '翼城县', + 141023: '襄汾县', + 141024: '洪洞县', + 141025: '古县', + 141026: '安泽县', + 141027: '浮山县', + 141028: '吉县', + 141029: '乡宁县', + 141030: '大宁县', + 141031: '隰县', + 141032: '永和县', + 141033: '蒲县', + 141034: '汾西县', + 141081: '侯马市', + 141082: '霍州市', + }, + 141100: { + 141102: '离石区', + 141121: '文水县', + 141122: '交城县', + 141123: '兴县', + 141124: '临县', + 141125: '柳林县', + 141126: '石楼县', + 141127: '岚县', + 141128: '方山县', + 141129: '中阳县', + 141130: '交口县', + 141181: '孝义市', + 141182: '汾阳市', + }, + 150000: { + 150100: '呼和浩特市', + 150200: '包头市', + 150300: '乌海市', + 150400: '赤峰市', + 150500: '通辽市', + 150600: '鄂尔多斯市', + 150700: '呼伦贝尔市', + 150800: '巴彦淖尔市', + 150900: '乌兰察布市', + 152200: '兴安盟', + 152500: '锡林郭勒盟', + 152900: '阿拉善盟', + }, + 150100: { + 150102: '新城区', + 150103: '回民区', + 150104: '玉泉区', + 150105: '赛罕区', + 150121: '土默特左旗', + 150122: '托克托县', + 150123: '和林格尔县', + 150124: '清水河县', + 150125: '武川县', + }, + 150200: { + 150202: '东河区', + 150203: '昆都仑区', + 150204: '青山区', + 150205: '石拐区', + 150206: '白云鄂博矿区', + 150207: '九原区', + 150221: '土默特右旗', + 150222: '固阳县', + 150223: '达尔罕茂明安联合旗', + }, + 150300: { + 150302: '海勃湾区', + 150303: '海南区', + 150304: '乌达区', + }, + 150400: { + 150402: '红山区', + 150403: '元宝山区', + 150404: '松山区', + 150421: '阿鲁科尔沁旗', + 150422: '巴林左旗', + 150423: '巴林右旗', + 150424: '林西县', + 150425: '克什克腾旗', + 150426: '翁牛特旗', + 150428: '喀喇沁旗', + 150429: '宁城县', + 150430: '敖汉旗', + }, + 150500: { + 150502: '科尔沁区', + 150521: '科尔沁左翼中旗', + 150522: '科尔沁左翼后旗', + 150523: '开鲁县', + 150524: '库伦旗', + 150525: '奈曼旗', + 150526: '扎鲁特旗', + 150581: '霍林郭勒市', + }, + 150600: { + 150602: '东胜区', + 150603: '康巴什区', + 150621: '达拉特旗', + 150622: '准格尔旗', + 150623: '鄂托克前旗', + 150624: '鄂托克旗', + 150625: '杭锦旗', + 150626: '乌审旗', + 150627: '伊金霍洛旗', + }, + 150700: { + 150702: '海拉尔区', + 150703: '扎赉诺尔区', + 150721: '阿荣旗', + 150722: '莫力达瓦达斡尔族自治旗', + 150723: '鄂伦春自治旗', + 150724: '鄂温克族自治旗', + 150725: '陈巴尔虎旗', + 150726: '新巴尔虎左旗', + 150727: '新巴尔虎右旗', + 150781: '满洲里市', + 150782: '牙克石市', + 150783: '扎兰屯市', + 150784: '额尔古纳市', + 150785: '根河市', + }, + 150800: { + 150802: '临河区', + 150821: '五原县', + 150822: '磴口县', + 150823: '乌拉特前旗', + 150824: '乌拉特中旗', + 150825: '乌拉特后旗', + 150826: '杭锦后旗', + }, + 150900: { + 150902: '集宁区', + 150921: '卓资县', + 150922: '化德县', + 150923: '商都县', + 150924: '兴和县', + 150925: '凉城县', + 150926: '察哈尔右翼前旗', + 150927: '察哈尔右翼中旗', + 150928: '察哈尔右翼后旗', + 150929: '四子王旗', + 150981: '丰镇市', + }, + 152200: { + 152201: '乌兰浩特市', + 152202: '阿尔山市', + 152221: '科尔沁右翼前旗', + 152222: '科尔沁右翼中旗', + 152223: '扎赉特旗', + 152224: '突泉县', + }, + 152500: { + 152501: '二连浩特市', + 152502: '锡林浩特市', + 152522: '阿巴嘎旗', + 152523: '苏尼特左旗', + 152524: '苏尼特右旗', + 152525: '东乌珠穆沁旗', + 152526: '西乌珠穆沁旗', + 152527: '太仆寺旗', + 152528: '镶黄旗', + 152529: '正镶白旗', + 152530: '正蓝旗', + 152531: '多伦县', + }, + 152900: { + 152921: '阿拉善左旗', + 152922: '阿拉善右旗', + 152923: '额济纳旗', + }, + 210000: { + 210100: '沈阳市', + 210200: '大连市', + 210300: '鞍山市', + 210400: '抚顺市', + 210500: '本溪市', + 210600: '丹东市', + 210700: '锦州市', + 210800: '营口市', + 210900: '阜新市', + 211000: '辽阳市', + 211100: '盘锦市', + 211200: '铁岭市', + 211300: '朝阳市', + 211400: '葫芦岛市', + }, + 210100: { + 210102: '和平区', + 210103: '沈河区', + 210104: '大东区', + 210105: '皇姑区', + 210106: '铁西区', + 210111: '苏家屯区', + 210112: '浑南区', + 210113: '沈北新区', + 210114: '于洪区', + 210115: '辽中区', + 210123: '康平县', + 210124: '法库县', + 210181: '新民市', + }, + 210200: { + 210202: '中山区', + 210203: '西岗区', + 210204: '沙河口区', + 210211: '甘井子区', + 210212: '旅顺口区', + 210213: '金州区', + 210214: '普兰店区', + 210224: '长海县', + 210281: '瓦房店市', + 210283: '庄河市', + }, + 210300: { + 210302: '铁东区', + 210303: '铁西区', + 210304: '立山区', + 210311: '千山区', + 210321: '台安县', + 210323: '岫岩满族自治县', + 210381: '海城市', + }, + 210400: { + 210402: '新抚区', + 210403: '东洲区', + 210404: '望花区', + 210411: '顺城区', + 210421: '抚顺县', + 210422: '新宾满族自治县', + 210423: '清原满族自治县', + }, + 210500: { + 210502: '平山区', + 210503: '溪湖区', + 210504: '明山区', + 210505: '南芬区', + 210521: '本溪满族自治县', + 210522: '桓仁满族自治县', + }, + 210600: { + 210602: '元宝区', + 210603: '振兴区', + 210604: '振安区', + 210624: '宽甸满族自治县', + 210681: '东港市', + 210682: '凤城市', + }, + 210700: { + 210702: '古塔区', + 210703: '凌河区', + 210711: '太和区', + 210726: '黑山县', + 210727: '义县', + 210781: '凌海市', + 210782: '北镇市', + }, + 210800: { + 210802: '站前区', + 210803: '西市区', + 210804: '鲅鱼圈区', + 210811: '老边区', + 210881: '盖州市', + 210882: '大石桥市', + }, + 210900: { + 210902: '海州区', + 210903: '新邱区', + 210904: '太平区', + 210905: '清河门区', + 210911: '细河区', + 210921: '阜新蒙古族自治县', + 210922: '彰武县', + }, + 211000: { + 211002: '白塔区', + 211003: '文圣区', + 211004: '宏伟区', + 211005: '弓长岭区', + 211011: '太子河区', + 211021: '辽阳县', + 211081: '灯塔市', + }, + 211100: { + 211102: '双台子区', + 211103: '兴隆台区', + 211104: '大洼区', + 211122: '盘山县', + }, + 211200: { + 211202: '银州区', + 211204: '清河区', + 211221: '铁岭县', + 211223: '西丰县', + 211224: '昌图县', + 211281: '调兵山市', + 211282: '开原市', + }, + 211300: { + 211302: '双塔区', + 211303: '龙城区', + 211321: '朝阳县', + 211322: '建平县', + 211324: '喀喇沁左翼蒙古族自治县', + 211381: '北票市', + 211382: '凌源市', + }, + 211400: { + 211402: '连山区', + 211403: '龙港区', + 211404: '南票区', + 211421: '绥中县', + 211422: '建昌县', + 211481: '兴城市', + }, + 220000: { + 220100: '长春市', + 220200: '吉林市', + 220300: '四平市', + 220400: '辽源市', + 220500: '通化市', + 220600: '白山市', + 220700: '松原市', + 220800: '白城市', + 222400: '延边朝鲜族自治州', + }, + 220100: { + 220102: '南关区', + 220103: '宽城区', + 220104: '朝阳区', + 220105: '二道区', + 220106: '绿园区', + 220112: '双阳区', + 220113: '九台区', + 220122: '农安县', + 220182: '榆树市', + 220183: '德惠市', + }, + 220200: { + 220202: '昌邑区', + 220203: '龙潭区', + 220204: '船营区', + 220211: '丰满区', + 220221: '永吉县', + 220281: '蛟河市', + 220282: '桦甸市', + 220283: '舒兰市', + 220284: '磐石市', + }, + 220300: { + 220302: '铁西区', + 220303: '铁东区', + 220322: '梨树县', + 220323: '伊通满族自治县', + 220381: '公主岭市', + 220382: '双辽市', + }, + 220400: { + 220402: '龙山区', + 220403: '西安区', + 220421: '东丰县', + 220422: '东辽县', + }, + 220500: { + 220502: '东昌区', + 220503: '二道江区', + 220521: '通化县', + 220523: '辉南县', + 220524: '柳河县', + 220581: '梅河口市', + 220582: '集安市', + }, + 220600: { + 220602: '浑江区', + 220605: '江源区', + 220621: '抚松县', + 220622: '靖宇县', + 220623: '长白朝鲜族自治县', + 220681: '临江市', + }, + 220700: { + 220702: '宁江区', + 220721: '前郭尔罗斯蒙古族自治县', + 220722: '长岭县', + 220723: '乾安县', + 220781: '扶余市', + }, + 220800: { + 220802: '洮北区', + 220821: '镇赉县', + 220822: '通榆县', + 220881: '洮南市', + 220882: '大安市', + }, + 222400: { + 222401: '延吉市', + 222402: '图们市', + 222403: '敦化市', + 222404: '珲春市', + 222405: '龙井市', + 222406: '和龙市', + 222424: '汪清县', + 222426: '安图县', + }, + 230000: { + 230100: '哈尔滨市', + 230200: '齐齐哈尔市', + 230300: '鸡西市', + 230400: '鹤岗市', + 230500: '双鸭山市', + 230600: '大庆市', + 230700: '伊春市', + 230800: '佳木斯市', + 230900: '七台河市', + 231000: '牡丹江市', + 231100: '黑河市', + 231200: '绥化市', + 232700: '大兴安岭地区', + }, + 230100: { + 230102: '道里区', + 230103: '南岗区', + 230104: '道外区', + 230108: '平房区', + 230109: '松北区', + 230110: '香坊区', + 230111: '呼兰区', + 230112: '阿城区', + 230113: '双城区', + 230123: '依兰县', + 230124: '方正县', + 230125: '宾县', + 230126: '巴彦县', + 230127: '木兰县', + 230128: '通河县', + 230129: '延寿县', + 230183: '尚志市', + 230184: '五常市', + }, + 230200: { + 230202: '龙沙区', + 230203: '建华区', + 230204: '铁锋区', + 230205: '昂昂溪区', + 230206: '富拉尔基区', + 230207: '碾子山区', + 230208: '梅里斯达斡尔族区', + 230221: '龙江县', + 230223: '依安县', + 230224: '泰来县', + 230225: '甘南县', + 230227: '富裕县', + 230229: '克山县', + 230230: '克东县', + 230231: '拜泉县', + 230281: '讷河市', + }, + 230300: { + 230302: '鸡冠区', + 230303: '恒山区', + 230304: '滴道区', + 230305: '梨树区', + 230306: '城子河区', + 230307: '麻山区', + 230321: '鸡东县', + 230381: '虎林市', + 230382: '密山市', + }, + 230400: { + 230402: '向阳区', + 230403: '工农区', + 230404: '南山区', + 230405: '兴安区', + 230406: '东山区', + 230407: '兴山区', + 230421: '萝北县', + 230422: '绥滨县', + }, + 230500: { + 230502: '尖山区', + 230503: '岭东区', + 230505: '四方台区', + 230506: '宝山区', + 230521: '集贤县', + 230522: '友谊县', + 230523: '宝清县', + 230524: '饶河县', + }, + 230600: { + 230602: '萨尔图区', + 230603: '龙凤区', + 230604: '让胡路区', + 230605: '红岗区', + 230606: '大同区', + 230621: '肇州县', + 230622: '肇源县', + 230623: '林甸县', + 230624: '杜尔伯特蒙古族自治县', + }, + 230700: { + 230702: '伊春区', + 230703: '南岔区', + 230704: '友好区', + 230705: '西林区', + 230706: '翠峦区', + 230707: '新青区', + 230708: '美溪区', + 230709: '金山屯区', + 230710: '五营区', + 230711: '乌马河区', + 230712: '汤旺河区', + 230713: '带岭区', + 230714: '乌伊岭区', + 230715: '红星区', + 230716: '上甘岭区', + 230722: '嘉荫县', + 230781: '铁力市', + }, + 230800: { + 230803: '向阳区', + 230804: '前进区', + 230805: '东风区', + 230811: '郊区', + 230822: '桦南县', + 230826: '桦川县', + 230828: '汤原县', + 230881: '同江市', + 230882: '富锦市', + 230883: '抚远市', + }, + 230900: { + 230902: '新兴区', + 230903: '桃山区', + 230904: '茄子河区', + 230921: '勃利县', + }, + 231000: { + 231002: '东安区', + 231003: '阳明区', + 231004: '爱民区', + 231005: '西安区', + 231025: '林口县', + 231081: '绥芬河市', + 231083: '海林市', + 231084: '宁安市', + 231085: '穆棱市', + 231086: '东宁市', + }, + 231100: { + 231102: '爱辉区', + 231121: '嫩江县', + 231123: '逊克县', + 231124: '孙吴县', + 231181: '北安市', + 231182: '五大连池市', + }, + 231200: { + 231202: '北林区', + 231221: '望奎县', + 231222: '兰西县', + 231223: '青冈县', + 231224: '庆安县', + 231225: '明水县', + 231226: '绥棱县', + 231281: '安达市', + 231282: '肇东市', + 231283: '海伦市', + }, + 232700: { + 232701: '加格达奇区', + 232721: '呼玛县', + 232722: '塔河县', + 232723: '漠河县', + }, + 310000: { + 310100: '上海城区', + }, + 310100: { + 310101: '黄浦区', + 310104: '徐汇区', + 310105: '长宁区', + 310106: '静安区', + 310107: '普陀区', + 310109: '虹口区', + 310110: '杨浦区', + 310112: '闵行区', + 310113: '宝山区', + 310114: '嘉定区', + 310115: '浦东新区', + 310116: '金山区', + 310117: '松江区', + 310118: '青浦区', + 310120: '奉贤区', + 310151: '崇明区', + }, + 320000: { + 320100: '南京市', + 320200: '无锡市', + 320300: '徐州市', + 320400: '常州市', + 320500: '苏州市', + 320600: '南通市', + 320700: '连云港市', + 320800: '淮安市', + 320900: '盐城市', + 321000: '扬州市', + 321100: '镇江市', + 321200: '泰州市', + 321300: '宿迁市', + }, + 320100: { + 320102: '玄武区', + 320104: '秦淮区', + 320105: '建邺区', + 320106: '鼓楼区', + 320111: '浦口区', + 320113: '栖霞区', + 320114: '雨花台区', + 320115: '江宁区', + 320116: '六合区', + 320117: '溧水区', + 320118: '高淳区', + }, + 320200: { + 320205: '锡山区', + 320206: '惠山区', + 320211: '滨湖区', + 320213: '梁溪区', + 320214: '新吴区', + 320281: '江阴市', + 320282: '宜兴市', + }, + 320300: { + 320302: '鼓楼区', + 320303: '云龙区', + 320305: '贾汪区', + 320311: '泉山区', + 320312: '铜山区', + 320321: '丰县', + 320322: '沛县', + 320324: '睢宁县', + 320381: '新沂市', + 320382: '邳州市', + }, + 320400: { + 320402: '天宁区', + 320404: '钟楼区', + 320411: '新北区', + 320412: '武进区', + 320413: '金坛区', + 320481: '溧阳市', + }, + 320500: { + 320505: '虎丘区', + 320506: '吴中区', + 320507: '相城区', + 320508: '姑苏区', + 320509: '吴江区', + 320581: '常熟市', + 320582: '张家港市', + 320583: '昆山市', + 320585: '太仓市', + }, + 320600: { + 320602: '崇川区', + 320611: '港闸区', + 320612: '通州区', + 320621: '海安县', + 320623: '如东县', + 320681: '启东市', + 320682: '如皋市', + 320684: '海门市', + }, + 320700: { + 320703: '连云区', + 320706: '海州区', + 320707: '赣榆区', + 320722: '东海县', + 320723: '灌云县', + 320724: '灌南县', + }, + 320800: { + 320803: '淮安区', + 320804: '淮阴区', + 320812: '清江浦区', + 320813: '洪泽区', + 320826: '涟水县', + 320830: '盱眙县', + 320831: '金湖县', + }, + 320900: { + 320902: '亭湖区', + 320903: '盐都区', + 320904: '大丰区', + 320921: '响水县', + 320922: '滨海县', + 320923: '阜宁县', + 320924: '射阳县', + 320925: '建湖县', + 320981: '东台市', + }, + 321000: { + 321002: '广陵区', + 321003: '邗江区', + 321012: '江都区', + 321023: '宝应县', + 321081: '仪征市', + 321084: '高邮市', + }, + 321100: { + 321102: '京口区', + 321111: '润州区', + 321112: '丹徒区', + 321181: '丹阳市', + 321182: '扬中市', + 321183: '句容市', + }, + 321200: { + 321202: '海陵区', + 321203: '高港区', + 321204: '姜堰区', + 321281: '兴化市', + 321282: '靖江市', + 321283: '泰兴市', + }, + 321300: { + 321302: '宿城区', + 321311: '宿豫区', + 321322: '沭阳县', + 321323: '泗阳县', + 321324: '泗洪县', + }, + 330000: { + 330100: '杭州市', + 330200: '宁波市', + 330300: '温州市', + 330400: '嘉兴市', + 330500: '湖州市', + 330600: '绍兴市', + 330700: '金华市', + 330800: '衢州市', + 330900: '舟山市', + 331000: '台州市', + 331100: '丽水市', + }, + 330100: { + 330102: '上城区', + 330103: '下城区', + 330104: '江干区', + 330105: '拱墅区', + 330106: '西湖区', + 330108: '滨江区', + 330109: '萧山区', + 330110: '余杭区', + 330111: '富阳区', + 330112: '临安区', + 330122: '桐庐县', + 330127: '淳安县', + 330182: '建德市', + }, + 330200: { + 330203: '海曙区', + 330205: '江北区', + 330206: '北仑区', + 330211: '镇海区', + 330212: '鄞州区', + 330213: '奉化区', + 330225: '象山县', + 330226: '宁海县', + 330281: '余姚市', + 330282: '慈溪市', + }, + 330300: { + 330302: '鹿城区', + 330303: '龙湾区', + 330304: '瓯海区', + 330305: '洞头区', + 330324: '永嘉县', + 330326: '平阳县', + 330327: '苍南县', + 330328: '文成县', + 330329: '泰顺县', + 330381: '瑞安市', + 330382: '乐清市', + }, + 330400: { + 330402: '南湖区', + 330411: '秀洲区', + 330421: '嘉善县', + 330424: '海盐县', + 330481: '海宁市', + 330482: '平湖市', + 330483: '桐乡市', + }, + 330500: { + 330502: '吴兴区', + 330503: '南浔区', + 330521: '德清县', + 330522: '长兴县', + 330523: '安吉县', + }, + 330600: { + 330602: '越城区', + 330603: '柯桥区', + 330604: '上虞区', + 330624: '新昌县', + 330681: '诸暨市', + 330683: '嵊州市', + }, + 330700: { + 330702: '婺城区', + 330703: '金东区', + 330723: '武义县', + 330726: '浦江县', + 330727: '磐安县', + 330781: '兰溪市', + 330782: '义乌市', + 330783: '东阳市', + 330784: '永康市', + }, + 330800: { + 330802: '柯城区', + 330803: '衢江区', + 330822: '常山县', + 330824: '开化县', + 330825: '龙游县', + 330881: '江山市', + }, + 330900: { + 330902: '定海区', + 330903: '普陀区', + 330921: '岱山县', + 330922: '嵊泗县', + }, + 331000: { + 331002: '椒江区', + 331003: '黄岩区', + 331004: '路桥区', + 331022: '三门县', + 331023: '天台县', + 331024: '仙居县', + 331081: '温岭市', + 331082: '临海市', + 331083: '玉环市', + }, + 331100: { + 331102: '莲都区', + 331121: '青田县', + 331122: '缙云县', + 331123: '遂昌县', + 331124: '松阳县', + 331125: '云和县', + 331126: '庆元县', + 331127: '景宁畲族自治县', + 331181: '龙泉市', + }, + 340000: { + 340100: '合肥市', + 340200: '芜湖市', + 340300: '蚌埠市', + 340400: '淮南市', + 340500: '马鞍山市', + 340600: '淮北市', + 340700: '铜陵市', + 340800: '安庆市', + 341000: '黄山市', + 341100: '滁州市', + 341200: '阜阳市', + 341300: '宿州市', + 341500: '六安市', + 341600: '亳州市', + 341700: '池州市', + 341800: '宣城市', + }, + 340100: { + 340102: '瑶海区', + 340103: '庐阳区', + 340104: '蜀山区', + 340111: '包河区', + 340121: '长丰县', + 340122: '肥东县', + 340123: '肥西县', + 340124: '庐江县', + 340181: '巢湖市', + }, + 340200: { + 340202: '镜湖区', + 340203: '弋江区', + 340207: '鸠江区', + 340208: '三山区', + 340221: '芜湖县', + 340222: '繁昌县', + 340223: '南陵县', + 340225: '无为县', + }, + 340300: { + 340302: '龙子湖区', + 340303: '蚌山区', + 340304: '禹会区', + 340311: '淮上区', + 340321: '怀远县', + 340322: '五河县', + 340323: '固镇县', + }, + 340400: { + 340402: '大通区', + 340403: '田家庵区', + 340404: '谢家集区', + 340405: '八公山区', + 340406: '潘集区', + 340421: '凤台县', + 340422: '寿县', + }, + 340500: { + 340503: '花山区', + 340504: '雨山区', + 340506: '博望区', + 340521: '当涂县', + 340522: '含山县', + 340523: '和县', + }, + 340600: { + 340602: '杜集区', + 340603: '相山区', + 340604: '烈山区', + 340621: '濉溪县', + }, + 340700: { + 340705: '铜官区', + 340706: '义安区', + 340711: '郊区', + 340722: '枞阳县', + }, + 340800: { + 340802: '迎江区', + 340803: '大观区', + 340811: '宜秀区', + 340822: '怀宁县', + 340824: '潜山县', + 340825: '太湖县', + 340826: '宿松县', + 340827: '望江县', + 340828: '岳西县', + 340881: '桐城市', + }, + 341000: { + 341002: '屯溪区', + 341003: '黄山区', + 341004: '徽州区', + 341021: '歙县', + 341022: '休宁县', + 341023: '黟县', + 341024: '祁门县', + }, + 341100: { + 341102: '琅琊区', + 341103: '南谯区', + 341122: '来安县', + 341124: '全椒县', + 341125: '定远县', + 341126: '凤阳县', + 341181: '天长市', + 341182: '明光市', + }, + 341200: { + 341202: '颍州区', + 341203: '颍东区', + 341204: '颍泉区', + 341221: '临泉县', + 341222: '太和县', + 341225: '阜南县', + 341226: '颍上县', + 341282: '界首市', + }, + 341300: { + 341302: '埇桥区', + 341321: '砀山县', + 341322: '萧县', + 341323: '灵璧县', + 341324: '泗县', + }, + 341500: { + 341502: '金安区', + 341503: '裕安区', + 341504: '叶集区', + 341522: '霍邱县', + 341523: '舒城县', + 341524: '金寨县', + 341525: '霍山县', + }, + 341600: { + 341602: '谯城区', + 341621: '涡阳县', + 341622: '蒙城县', + 341623: '利辛县', + }, + 341700: { + 341702: '贵池区', + 341721: '东至县', + 341722: '石台县', + 341723: '青阳县', + }, + 341800: { + 341802: '宣州区', + 341821: '郎溪县', + 341822: '广德县', + 341823: '泾县', + 341824: '绩溪县', + 341825: '旌德县', + 341881: '宁国市', + }, + 350000: { + 350100: '福州市', + 350200: '厦门市', + 350300: '莆田市', + 350400: '三明市', + 350500: '泉州市', + 350600: '漳州市', + 350700: '南平市', + 350800: '龙岩市', + 350900: '宁德市', + }, + 350100: { + 350102: '鼓楼区', + 350103: '台江区', + 350104: '仓山区', + 350105: '马尾区', + 350111: '晋安区', + 350112: '长乐区', + 350121: '闽侯县', + 350122: '连江县', + 350123: '罗源县', + 350124: '闽清县', + 350125: '永泰县', + 350128: '平潭县', + 350181: '福清市', + }, + 350200: { + 350203: '思明区', + 350205: '海沧区', + 350206: '湖里区', + 350211: '集美区', + 350212: '同安区', + 350213: '翔安区', + }, + 350300: { + 350302: '城厢区', + 350303: '涵江区', + 350304: '荔城区', + 350305: '秀屿区', + 350322: '仙游县', + }, + 350400: { + 350402: '梅列区', + 350403: '三元区', + 350421: '明溪县', + 350423: '清流县', + 350424: '宁化县', + 350425: '大田县', + 350426: '尤溪县', + 350427: '沙县', + 350428: '将乐县', + 350429: '泰宁县', + 350430: '建宁县', + 350481: '永安市', + }, + 350500: { + 350502: '鲤城区', + 350503: '丰泽区', + 350504: '洛江区', + 350505: '泉港区', + 350521: '惠安县', + 350524: '安溪县', + 350525: '永春县', + 350526: '德化县', + 350527: '金门县', + 350581: '石狮市', + 350582: '晋江市', + 350583: '南安市', + }, + 350600: { + 350602: '芗城区', + 350603: '龙文区', + 350622: '云霄县', + 350623: '漳浦县', + 350624: '诏安县', + 350625: '长泰县', + 350626: '东山县', + 350627: '南靖县', + 350628: '平和县', + 350629: '华安县', + 350681: '龙海市', + }, + 350700: { + 350702: '延平区', + 350703: '建阳区', + 350721: '顺昌县', + 350722: '浦城县', + 350723: '光泽县', + 350724: '松溪县', + 350725: '政和县', + 350781: '邵武市', + 350782: '武夷山市', + 350783: '建瓯市', + }, + 350800: { + 350802: '新罗区', + 350803: '永定区', + 350821: '长汀县', + 350823: '上杭县', + 350824: '武平县', + 350825: '连城县', + 350881: '漳平市', + }, + 350900: { + 350902: '蕉城区', + 350921: '霞浦县', + 350922: '古田县', + 350923: '屏南县', + 350924: '寿宁县', + 350925: '周宁县', + 350926: '柘荣县', + 350981: '福安市', + 350982: '福鼎市', + }, + 360000: { + 360100: '南昌市', + 360200: '景德镇市', + 360300: '萍乡市', + 360400: '九江市', + 360500: '新余市', + 360600: '鹰潭市', + 360700: '赣州市', + 360800: '吉安市', + 360900: '宜春市', + 361000: '抚州市', + 361100: '上饶市', + }, + 360100: { + 360102: '东湖区', + 360103: '西湖区', + 360104: '青云谱区', + 360105: '湾里区', + 360111: '青山湖区', + 360112: '新建区', + 360121: '南昌县', + 360123: '安义县', + 360124: '进贤县', + }, + 360200: { + 360202: '昌江区', + 360203: '珠山区', + 360222: '浮梁县', + 360281: '乐平市', + }, + 360300: { + 360302: '安源区', + 360313: '湘东区', + 360321: '莲花县', + 360322: '上栗县', + 360323: '芦溪县', + }, + 360400: { + 360402: '濂溪区', + 360403: '浔阳区', + 360404: '柴桑区', + 360423: '武宁县', + 360424: '修水县', + 360425: '永修县', + 360426: '德安县', + 360428: '都昌县', + 360429: '湖口县', + 360430: '彭泽县', + 360481: '瑞昌市', + 360482: '共青城市', + 360483: '庐山市', + }, + 360500: { + 360502: '渝水区', + 360521: '分宜县', + }, + 360600: { + 360602: '月湖区', + 360622: '余江县', + 360681: '贵溪市', + }, + 360700: { + 360702: '章贡区', + 360703: '南康区', + 360704: '赣县区', + 360722: '信丰县', + 360723: '大余县', + 360724: '上犹县', + 360725: '崇义县', + 360726: '安远县', + 360727: '龙南县', + 360728: '定南县', + 360729: '全南县', + 360730: '宁都县', + 360731: '于都县', + 360732: '兴国县', + 360733: '会昌县', + 360734: '寻乌县', + 360735: '石城县', + 360781: '瑞金市', + }, + 360800: { + 360802: '吉州区', + 360803: '青原区', + 360821: '吉安县', + 360822: '吉水县', + 360823: '峡江县', + 360824: '新干县', + 360825: '永丰县', + 360826: '泰和县', + 360827: '遂川县', + 360828: '万安县', + 360829: '安福县', + 360830: '永新县', + 360881: '井冈山市', + }, + 360900: { + 360902: '袁州区', + 360921: '奉新县', + 360922: '万载县', + 360923: '上高县', + 360924: '宜丰县', + 360925: '靖安县', + 360926: '铜鼓县', + 360981: '丰城市', + 360982: '樟树市', + 360983: '高安市', + }, + 361000: { + 361002: '临川区', + 361003: '东乡区', + 361021: '南城县', + 361022: '黎川县', + 361023: '南丰县', + 361024: '崇仁县', + 361025: '乐安县', + 361026: '宜黄县', + 361027: '金溪县', + 361028: '资溪县', + 361030: '广昌县', + }, + 361100: { + 361102: '信州区', + 361103: '广丰区', + 361121: '广信区', + 361123: '玉山县', + 361124: '铅山县', + 361125: '横峰县', + 361126: '弋阳县', + 361127: '余干县', + 361128: '鄱阳县', + 361129: '万年县', + 361130: '婺源县', + 361181: '德兴市', + }, + 370000: { + 370100: '济南市', + 370200: '青岛市', + 370300: '淄博市', + 370400: '枣庄市', + 370500: '东营市', + 370600: '烟台市', + 370700: '潍坊市', + 370800: '济宁市', + 370900: '泰安市', + 371000: '威海市', + 371100: '日照市', + 371200: '莱芜市', + 371300: '临沂市', + 371400: '德州市', + 371500: '聊城市', + 371600: '滨州市', + 371700: '菏泽市', + }, + 370100: { + 370102: '历下区', + 370103: '市中区', + 370104: '槐荫区', + 370105: '天桥区', + 370112: '历城区', + 370113: '长清区', + 370114: '章丘区', + 370124: '平阴县', + 370125: '济阳县', + 370126: '商河县', + }, + 370200: { + 370202: '市南区', + 370203: '市北区', + 370211: '黄岛区', + 370212: '崂山区', + 370213: '李沧区', + 370214: '城阳区', + 370215: '即墨区', + 370281: '胶州市', + 370283: '平度市', + 370285: '莱西市', + }, + 370300: { + 370302: '淄川区', + 370303: '张店区', + 370304: '博山区', + 370305: '临淄区', + 370306: '周村区', + 370321: '桓台县', + 370322: '高青县', + 370323: '沂源县', + }, + 370400: { + 370402: '市中区', + 370403: '薛城区', + 370404: '峄城区', + 370405: '台儿庄区', + 370406: '山亭区', + 370481: '滕州市', + }, + 370500: { + 370502: '东营区', + 370503: '河口区', + 370505: '垦利区', + 370522: '利津县', + 370523: '广饶县', + }, + 370600: { + 370602: '芝罘区', + 370611: '福山区', + 370612: '牟平区', + 370613: '莱山区', + 370634: '长岛县', + 370681: '龙口市', + 370682: '莱阳市', + 370683: '莱州市', + 370684: '蓬莱市', + 370685: '招远市', + 370686: '栖霞市', + 370687: '海阳市', + }, + 370700: { + 370702: '潍城区', + 370703: '寒亭区', + 370704: '坊子区', + 370705: '奎文区', + 370724: '临朐县', + 370725: '昌乐县', + 370781: '青州市', + 370782: '诸城市', + 370783: '寿光市', + 370784: '安丘市', + 370785: '高密市', + 370786: '昌邑市', + }, + 370800: { + 370811: '任城区', + 370812: '兖州区', + 370826: '微山县', + 370827: '鱼台县', + 370828: '金乡县', + 370829: '嘉祥县', + 370830: '汶上县', + 370831: '泗水县', + 370832: '梁山县', + 370881: '曲阜市', + 370883: '邹城市', + }, + 370900: { + 370902: '泰山区', + 370911: '岱岳区', + 370921: '宁阳县', + 370923: '东平县', + 370982: '新泰市', + 370983: '肥城市', + }, + 371000: { + 371002: '环翠区', + 371003: '文登区', + 371082: '荣成市', + 371083: '乳山市', + }, + 371100: { + 371102: '东港区', + 371103: '岚山区', + 371121: '五莲县', + 371122: '莒县', + }, + 371200: { + 371202: '莱城区', + 371203: '钢城区', + }, + 371300: { + 371302: '兰山区', + 371311: '罗庄区', + 371312: '河东区', + 371321: '沂南县', + 371322: '郯城县', + 371323: '沂水县', + 371324: '兰陵县', + 371325: '费县', + 371326: '平邑县', + 371327: '莒南县', + 371328: '蒙阴县', + 371329: '临沭县', + }, + 371400: { + 371402: '德城区', + 371403: '陵城区', + 371422: '宁津县', + 371423: '庆云县', + 371424: '临邑县', + 371425: '齐河县', + 371426: '平原县', + 371427: '夏津县', + 371428: '武城县', + 371481: '乐陵市', + 371482: '禹城市', + }, + 371500: { + 371502: '东昌府区', + 371521: '阳谷县', + 371522: '莘县', + 371523: '茌平县', + 371524: '东阿县', + 371525: '冠县', + 371526: '高唐县', + 371581: '临清市', + }, + 371600: { + 371602: '滨城区', + 371603: '沾化区', + 371621: '惠民县', + 371622: '阳信县', + 371623: '无棣县', + 371625: '博兴县', + 371626: '邹平县', + }, + 371700: { + 371702: '牡丹区', + 371703: '定陶区', + 371721: '曹县', + 371722: '单县', + 371723: '成武县', + 371724: '巨野县', + 371725: '郓城县', + 371726: '鄄城县', + 371728: '东明县', + }, + 410000: { + 410100: '郑州市', + 410200: '开封市', + 410300: '洛阳市', + 410400: '平顶山市', + 410500: '安阳市', + 410600: '鹤壁市', + 410700: '新乡市', + 410800: '焦作市', + 410900: '濮阳市', + 411000: '许昌市', + 411100: '漯河市', + 411200: '三门峡市', + 411300: '南阳市', + 411400: '商丘市', + 411500: '信阳市', + 411600: '周口市', + 411700: '驻马店市', + 419001: '济源市', + }, + 410100: { + 410102: '中原区', + 410103: '二七区', + 410104: '管城回族区', + 410105: '金水区', + 410106: '上街区', + 410108: '惠济区', + 410122: '中牟县', + 410181: '巩义市', + 410182: '荥阳市', + 410183: '新密市', + 410184: '新郑市', + 410185: '登封市', + }, + 410200: { + 410202: '龙亭区', + 410203: '顺河回族区', + 410204: '鼓楼区', + 410205: '禹王台区', + 410212: '祥符区', + 410221: '杞县', + 410222: '通许县', + 410223: '尉氏县', + 410225: '兰考县', + }, + 410300: { + 410302: '老城区', + 410303: '西工区', + 410304: '瀍河回族区', + 410305: '涧西区', + 410306: '吉利区', + 410311: '洛龙区', + 410322: '孟津县', + 410323: '新安县', + 410324: '栾川县', + 410325: '嵩县', + 410326: '汝阳县', + 410327: '宜阳县', + 410328: '洛宁县', + 410329: '伊川县', + 410381: '偃师市', + }, + 410400: { + 410402: '新华区', + 410403: '卫东区', + 410404: '石龙区', + 410411: '湛河区', + 410421: '宝丰县', + 410422: '叶县', + 410423: '鲁山县', + 410425: '郏县', + 410481: '舞钢市', + 410482: '汝州市', + }, + 410500: { + 410502: '文峰区', + 410503: '北关区', + 410505: '殷都区', + 410506: '龙安区', + 410522: '安阳县', + 410523: '汤阴县', + 410526: '滑县', + 410527: '内黄县', + 410581: '林州市', + }, + 410600: { + 410602: '鹤山区', + 410603: '山城区', + 410611: '淇滨区', + 410621: '浚县', + 410622: '淇县', + }, + 410700: { + 410702: '红旗区', + 410703: '卫滨区', + 410704: '凤泉区', + 410711: '牧野区', + 410721: '新乡县', + 410724: '获嘉县', + 410725: '原阳县', + 410726: '延津县', + 410727: '封丘县', + 410728: '长垣县', + 410781: '卫辉市', + 410782: '辉县市', + }, + 410800: { + 410802: '解放区', + 410803: '中站区', + 410804: '马村区', + 410811: '山阳区', + 410821: '修武县', + 410822: '博爱县', + 410823: '武陟县', + 410825: '温县', + 410882: '沁阳市', + 410883: '孟州市', + }, + 410900: { + 410902: '华龙区', + 410922: '清丰县', + 410923: '南乐县', + 410926: '范县', + 410927: '台前县', + 410928: '濮阳县', + }, + 411000: { + 411002: '魏都区', + 411003: '建安区', + 411024: '鄢陵县', + 411025: '襄城县', + 411081: '禹州市', + 411082: '长葛市', + }, + 411100: { + 411102: '源汇区', + 411103: '郾城区', + 411104: '召陵区', + 411121: '舞阳县', + 411122: '临颍县', + }, + 411200: { + 411202: '湖滨区', + 411203: '陕州区', + 411221: '渑池县', + 411224: '卢氏县', + 411281: '义马市', + 411282: '灵宝市', + }, + 411300: { + 411302: '宛城区', + 411303: '卧龙区', + 411321: '南召县', + 411322: '方城县', + 411323: '西峡县', + 411324: '镇平县', + 411325: '内乡县', + 411326: '淅川县', + 411327: '社旗县', + 411328: '唐河县', + 411329: '新野县', + 411330: '桐柏县', + 411381: '邓州市', + }, + 411400: { + 411402: '梁园区', + 411403: '睢阳区', + 411421: '民权县', + 411422: '睢县', + 411423: '宁陵县', + 411424: '柘城县', + 411425: '虞城县', + 411426: '夏邑县', + 411481: '永城市', + }, + 411500: { + 411502: '浉河区', + 411503: '平桥区', + 411521: '罗山县', + 411522: '光山县', + 411523: '新县', + 411524: '商城县', + 411525: '固始县', + 411526: '潢川县', + 411527: '淮滨县', + 411528: '息县', + }, + 411600: { + 411602: '川汇区', + 411621: '扶沟县', + 411622: '西华县', + 411623: '商水县', + 411624: '沈丘县', + 411625: '郸城县', + 411626: '淮阳县', + 411627: '太康县', + 411628: '鹿邑县', + 411681: '项城市', + }, + 411700: { + 411702: '驿城区', + 411721: '西平县', + 411722: '上蔡县', + 411723: '平舆县', + 411724: '正阳县', + 411725: '确山县', + 411726: '泌阳县', + 411727: '汝南县', + 411728: '遂平县', + 411729: '新蔡县', + }, + 419001: { + 419001: '济源市', + }, + 420000: { + 420100: '武汉市', + 420200: '黄石市', + 420300: '十堰市', + 420500: '宜昌市', + 420600: '襄阳市', + 420700: '鄂州市', + 420800: '荆门市', + 420900: '孝感市', + 421000: '荆州市', + 421100: '黄冈市', + 421200: '咸宁市', + 421300: '随州市', + 422800: '恩施土家族苗族自治州', + 429004: '仙桃市', + 429005: '潜江市', + 429006: '天门市', + 429021: '神农架林区', + }, + 420100: { + 420102: '江岸区', + 420103: '江汉区', + 420104: '硚口区', + 420105: '汉阳区', + 420106: '武昌区', + 420107: '青山区', + 420111: '洪山区', + 420112: '东西湖区', + 420113: '汉南区', + 420114: '蔡甸区', + 420115: '江夏区', + 420116: '黄陂区', + 420117: '新洲区', + }, + 420200: { + 420202: '黄石港区', + 420203: '西塞山区', + 420204: '下陆区', + 420205: '铁山区', + 420222: '阳新县', + 420281: '大冶市', + }, + 420300: { + 420302: '茅箭区', + 420303: '张湾区', + 420304: '郧阳区', + 420322: '郧西县', + 420323: '竹山县', + 420324: '竹溪县', + 420325: '房县', + 420381: '丹江口市', + }, + 420500: { + 420502: '西陵区', + 420503: '伍家岗区', + 420504: '点军区', + 420505: '猇亭区', + 420506: '夷陵区', + 420525: '远安县', + 420526: '兴山县', + 420527: '秭归县', + 420528: '长阳土家族自治县', + 420529: '五峰土家族自治县', + 420581: '宜都市', + 420582: '当阳市', + 420583: '枝江市', + }, + 420600: { + 420602: '襄城区', + 420606: '樊城区', + 420607: '襄州区', + 420624: '南漳县', + 420625: '谷城县', + 420626: '保康县', + 420682: '老河口市', + 420683: '枣阳市', + 420684: '宜城市', + }, + 420700: { + 420702: '梁子湖区', + 420703: '华容区', + 420704: '鄂城区', + }, + 420800: { + 420802: '东宝区', + 420804: '掇刀区', + 420821: '京山县', + 420822: '沙洋县', + 420881: '钟祥市', + }, + 420900: { + 420902: '孝南区', + 420921: '孝昌县', + 420922: '大悟县', + 420923: '云梦县', + 420981: '应城市', + 420982: '安陆市', + 420984: '汉川市', + }, + 421000: { + 421002: '沙市区', + 421003: '荆州区', + 421022: '公安县', + 421023: '监利县', + 421024: '江陵县', + 421081: '石首市', + 421083: '洪湖市', + 421087: '松滋市', + }, + 421100: { + 421102: '黄州区', + 421121: '团风县', + 421122: '红安县', + 421123: '罗田县', + 421124: '英山县', + 421125: '浠水县', + 421126: '蕲春县', + 421127: '黄梅县', + 421181: '麻城市', + 421182: '武穴市', + }, + 421200: { + 421202: '咸安区', + 421221: '嘉鱼县', + 421222: '通城县', + 421223: '崇阳县', + 421224: '通山县', + 421281: '赤壁市', + }, + 421300: { + 421303: '曾都区', + 421321: '随县', + 421381: '广水市', + }, + 422800: { + 422801: '恩施市', + 422802: '利川市', + 422822: '建始县', + 422823: '巴东县', + 422825: '宣恩县', + 422826: '咸丰县', + 422827: '来凤县', + 422828: '鹤峰县', + }, + 429004: { + 429004: '仙桃市', + }, + 429005: { + 429005: '潜江市', + }, + 429006: { + 429006: '天门市', + }, + 429021: { + 429021: '神农架林区', + }, + 430000: { + 430100: '长沙市', + 430200: '株洲市', + 430300: '湘潭市', + 430400: '衡阳市', + 430500: '邵阳市', + 430600: '岳阳市', + 430700: '常德市', + 430800: '张家界市', + 430900: '益阳市', + 431000: '郴州市', + 431100: '永州市', + 431200: '怀化市', + 431300: '娄底市', + 433100: '湘西土家族苗族自治州', + }, + 430100: { + 430102: '芙蓉区', + 430103: '天心区', + 430104: '岳麓区', + 430105: '开福区', + 430111: '雨花区', + 430112: '望城区', + 430121: '长沙县', + 430181: '浏阳市', + 430182: '宁乡市', + }, + 430200: { + 430202: '荷塘区', + 430203: '芦淞区', + 430204: '石峰区', + 430211: '天元区', + 430221: '株洲县', + 430223: '攸县', + 430224: '茶陵县', + 430225: '炎陵县', + 430281: '醴陵市', + }, + 430300: { + 430302: '雨湖区', + 430304: '岳塘区', + 430321: '湘潭县', + 430381: '湘乡市', + 430382: '韶山市', + }, + 430400: { + 430405: '珠晖区', + 430406: '雁峰区', + 430407: '石鼓区', + 430408: '蒸湘区', + 430412: '南岳区', + 430421: '衡阳县', + 430422: '衡南县', + 430423: '衡山县', + 430424: '衡东县', + 430426: '祁东县', + 430481: '耒阳市', + 430482: '常宁市', + }, + 430500: { + 430502: '双清区', + 430503: '大祥区', + 430511: '北塔区', + 430521: '邵东县', + 430522: '新邵县', + 430523: '邵阳县', + 430524: '隆回县', + 430525: '洞口县', + 430527: '绥宁县', + 430528: '新宁县', + 430529: '城步苗族自治县', + 430581: '武冈市', + }, + 430600: { + 430602: '岳阳楼区', + 430603: '云溪区', + 430611: '君山区', + 430621: '岳阳县', + 430623: '华容县', + 430624: '湘阴县', + 430626: '平江县', + 430681: '汨罗市', + 430682: '临湘市', + }, + 430700: { + 430702: '武陵区', + 430703: '鼎城区', + 430721: '安乡县', + 430722: '汉寿县', + 430723: '澧县', + 430724: '临澧县', + 430725: '桃源县', + 430726: '石门县', + 430781: '津市市', + }, + 430800: { + 430802: '永定区', + 430811: '武陵源区', + 430821: '慈利县', + 430822: '桑植县', + }, + 430900: { + 430902: '资阳区', + 430903: '赫山区', + 430921: '南县', + 430922: '桃江县', + 430923: '安化县', + 430981: '沅江市', + }, + 431000: { + 431002: '北湖区', + 431003: '苏仙区', + 431021: '桂阳县', + 431022: '宜章县', + 431023: '永兴县', + 431024: '嘉禾县', + 431025: '临武县', + 431026: '汝城县', + 431027: '桂东县', + 431028: '安仁县', + 431081: '资兴市', + }, + 431100: { + 431102: '零陵区', + 431103: '冷水滩区', + 431121: '祁阳县', + 431122: '东安县', + 431123: '双牌县', + 431124: '道县', + 431125: '江永县', + 431126: '宁远县', + 431127: '蓝山县', + 431128: '新田县', + 431129: '江华瑶族自治县', + }, + 431200: { + 431202: '鹤城区', + 431221: '中方县', + 431222: '沅陵县', + 431223: '辰溪县', + 431224: '溆浦县', + 431225: '会同县', + 431226: '麻阳苗族自治县', + 431227: '新晃侗族自治县', + 431228: '芷江侗族自治县', + 431229: '靖州苗族侗族自治县', + 431230: '通道侗族自治县', + 431281: '洪江市', + }, + 431300: { + 431302: '娄星区', + 431321: '双峰县', + 431322: '新化县', + 431381: '冷水江市', + 431382: '涟源市', + }, + 433100: { + 433101: '吉首市', + 433122: '泸溪县', + 433123: '凤凰县', + 433124: '花垣县', + 433125: '保靖县', + 433126: '古丈县', + 433127: '永顺县', + 433130: '龙山县', + }, + 440000: { + 440100: '广州市', + 440200: '韶关市', + 440300: '深圳市', + 440400: '珠海市', + 440500: '汕头市', + 440600: '佛山市', + 440700: '江门市', + 440800: '湛江市', + 440900: '茂名市', + 441200: '肇庆市', + 441300: '惠州市', + 441400: '梅州市', + 441500: '汕尾市', + 441600: '河源市', + 441700: '阳江市', + 441800: '清远市', + 441900: '东莞市', + 442000: '中山市', + 442100: '东沙群岛', + 445100: '潮州市', + 445200: '揭阳市', + 445300: '云浮市', + }, + 440100: { + 440103: '荔湾区', + 440104: '越秀区', + 440105: '海珠区', + 440106: '天河区', + 440111: '白云区', + 440112: '黄埔区', + 440113: '番禺区', + 440114: '花都区', + 440115: '南沙区', + 440117: '从化区', + 440118: '增城区', + }, + 440200: { + 440203: '武江区', + 440204: '浈江区', + 440205: '曲江区', + 440222: '始兴县', + 440224: '仁化县', + 440229: '翁源县', + 440232: '乳源瑶族自治县', + 440233: '新丰县', + 440281: '乐昌市', + 440282: '南雄市', + }, + 440300: { + 440303: '罗湖区', + 440304: '福田区', + 440305: '南山区', + 440306: '宝安区', + 440307: '龙岗区', + 440308: '盐田区', + 440309: '龙华区', + 440310: '坪山区', + }, + 440400: { + 440402: '香洲区', + 440403: '斗门区', + 440404: '金湾区', + 440499: '澳门大学横琴校区(由澳门管辖)', + }, + 440500: { + 440507: '龙湖区', + 440511: '金平区', + 440512: '濠江区', + 440513: '潮阳区', + 440514: '潮南区', + 440515: '澄海区', + 440523: '南澳县', + }, + 440600: { + 440604: '禅城区', + 440605: '南海区', + 440606: '顺德区', + 440607: '三水区', + 440608: '高明区', + }, + 440700: { + 440703: '蓬江区', + 440704: '江海区', + 440705: '新会区', + 440781: '台山市', + 440783: '开平市', + 440784: '鹤山市', + 440785: '恩平市', + }, + 440800: { + 440802: '赤坎区', + 440803: '霞山区', + 440804: '坡头区', + 440811: '麻章区', + 440823: '遂溪县', + 440825: '徐闻县', + 440881: '廉江市', + 440882: '雷州市', + 440883: '吴川市', + }, + 440900: { + 440902: '茂南区', + 440904: '电白区', + 440981: '高州市', + 440982: '化州市', + 440983: '信宜市', + }, + 441200: { + 441202: '端州区', + 441203: '鼎湖区', + 441204: '高要区', + 441223: '广宁县', + 441224: '怀集县', + 441225: '封开县', + 441226: '德庆县', + 441284: '四会市', + }, + 441300: { + 441302: '惠城区', + 441303: '惠阳区', + 441322: '博罗县', + 441323: '惠东县', + 441324: '龙门县', + }, + 441400: { + 441402: '梅江区', + 441403: '梅县区', + 441422: '大埔县', + 441423: '丰顺县', + 441424: '五华县', + 441426: '平远县', + 441427: '蕉岭县', + 441481: '兴宁市', + }, + 441500: { + 441502: '城区', + 441521: '海丰县', + 441523: '陆河县', + 441581: '陆丰市', + }, + 441600: { + 441602: '源城区', + 441621: '紫金县', + 441622: '龙川县', + 441623: '连平县', + 441624: '和平县', + 441625: '东源县', + }, + 441700: { + 441702: '江城区', + 441704: '阳东区', + 441721: '阳西县', + 441781: '阳春市', + }, + 441800: { + 441802: '清城区', + 441803: '清新区', + 441821: '佛冈县', + 441823: '阳山县', + 441825: '连山壮族瑶族自治县', + 441826: '连南瑶族自治县', + 441881: '英德市', + 441882: '连州市', + }, + 441900: { + 441900: '东莞市', + }, + 442000: { + 442000: '中山市', + }, + 442100: { + 442100: '东沙群岛', + }, + 445100: { + 445102: '湘桥区', + 445103: '潮安区', + 445122: '饶平县', + }, + 445200: { + 445202: '榕城区', + 445203: '揭东区', + 445222: '揭西县', + 445224: '惠来县', + 445281: '普宁市', + }, + 445300: { + 445302: '云城区', + 445303: '云安区', + 445321: '新兴县', + 445322: '郁南县', + 445381: '罗定市', + }, + 450000: { + 450100: '南宁市', + 450200: '柳州市', + 450300: '桂林市', + 450400: '梧州市', + 450500: '北海市', + 450600: '防城港市', + 450700: '钦州市', + 450800: '贵港市', + 450900: '玉林市', + 451000: '百色市', + 451100: '贺州市', + 451200: '河池市', + 451300: '来宾市', + 451400: '崇左市', + }, + 450100: { + 450102: '兴宁区', + 450103: '青秀区', + 450105: '江南区', + 450107: '西乡塘区', + 450108: '良庆区', + 450109: '邕宁区', + 450110: '武鸣区', + 450123: '隆安县', + 450124: '马山县', + 450125: '上林县', + 450126: '宾阳县', + 450127: '横县', + }, + 450200: { + 450202: '城中区', + 450203: '鱼峰区', + 450204: '柳南区', + 450205: '柳北区', + 450206: '柳江区', + 450222: '柳城县', + 450223: '鹿寨县', + 450224: '融安县', + 450225: '融水苗族自治县', + 450226: '三江侗族自治县', + }, + 450300: { + 450302: '秀峰区', + 450303: '叠彩区', + 450304: '象山区', + 450305: '七星区', + 450311: '雁山区', + 450312: '临桂区', + 450321: '阳朔县', + 450323: '灵川县', + 450324: '全州县', + 450325: '兴安县', + 450326: '永福县', + 450327: '灌阳县', + 450328: '龙胜各族自治县', + 450329: '资源县', + 450330: '平乐县', + 450331: '荔浦县', + 450332: '恭城瑶族自治县', + }, + 450400: { + 450403: '万秀区', + 450405: '长洲区', + 450406: '龙圩区', + 450421: '苍梧县', + 450422: '藤县', + 450423: '蒙山县', + 450481: '岑溪市', + }, + 450500: { + 450502: '海城区', + 450503: '银海区', + 450512: '铁山港区', + 450521: '合浦县', + }, + 450600: { + 450602: '港口区', + 450603: '防城区', + 450621: '上思县', + 450681: '东兴市', + }, + 450700: { + 450702: '钦南区', + 450703: '钦北区', + 450721: '灵山县', + 450722: '浦北县', + }, + 450800: { + 450802: '港北区', + 450803: '港南区', + 450804: '覃塘区', + 450821: '平南县', + 450881: '桂平市', + }, + 450900: { + 450902: '玉州区', + 450903: '福绵区', + 450921: '容县', + 450922: '陆川县', + 450923: '博白县', + 450924: '兴业县', + 450981: '北流市', + }, + 451000: { + 451002: '右江区', + 451021: '田阳区', + 451022: '田东县', + 451023: '平果县', + 451024: '德保县', + 451026: '那坡县', + 451027: '凌云县', + 451028: '乐业县', + 451029: '田林县', + 451030: '西林县', + 451031: '隆林各族自治县', + 451081: '靖西市', + }, + 451100: { + 451102: '八步区', + 451103: '平桂区', + 451121: '昭平县', + 451122: '钟山县', + 451123: '富川瑶族自治县', + }, + 451200: { + 451202: '金城江区', + 451203: '宜州区', + 451221: '南丹县', + 451222: '天峨县', + 451223: '凤山县', + 451224: '东兰县', + 451225: '罗城仫佬族自治县', + 451226: '环江毛南族自治县', + 451227: '巴马瑶族自治县', + 451228: '都安瑶族自治县', + 451229: '大化瑶族自治县', + }, + 451300: { + 451302: '兴宾区', + 451321: '忻城县', + 451322: '象州县', + 451323: '武宣县', + 451324: '金秀瑶族自治县', + 451381: '合山市', + }, + 451400: { + 451402: '江州区', + 451421: '扶绥县', + 451422: '宁明县', + 451423: '龙州县', + 451424: '大新县', + 451425: '天等县', + 451481: '凭祥市', + }, + 460000: { + 460100: '海口市', + 460200: '三亚市', + 460300: '三沙市', + 460400: '儋州市', + 469001: '五指山市', + 469002: '琼海市', + 469005: '文昌市', + 469006: '万宁市', + 469007: '东方市', + 469021: '定安县', + 469022: '屯昌县', + 469023: '澄迈县', + 469024: '临高县', + 469025: '白沙黎族自治县', + 469026: '昌江黎族自治县', + 469027: '乐东黎族自治县', + 469028: '陵水黎族自治县', + 469029: '保亭黎族苗族自治县', + 469030: '琼中黎族苗族自治县', + }, + 460100: { + 460105: '秀英区', + 460106: '龙华区', + 460107: '琼山区', + 460108: '美兰区', + }, + 460200: { + 460202: '海棠区', + 460203: '吉阳区', + 460204: '天涯区', + 460205: '崖州区', + }, + 460300: { + 460321: '西沙群岛', + 460322: '南沙群岛', + 460323: '中沙群岛的岛礁及其海域', + }, + 460400: { + 460400: '儋州市', + }, + 469001: { + 469001: '五指山市', + }, + 469002: { + 469002: '琼海市', + }, + 469005: { + 469005: '文昌市', + }, + 469006: { + 469006: '万宁市', + }, + 469007: { + 469007: '东方市', + }, + 469021: { + 469021: '定安县', + }, + 469022: { + 469022: '屯昌县', + }, + 469023: { + 469023: '澄迈县', + }, + 469024: { + 469024: '临高县', + }, + 469025: { + 469025: '白沙黎族自治县', + }, + 469026: { + 469026: '昌江黎族自治县', + }, + 469027: { + 469027: '乐东黎族自治县', + }, + 469028: { + 469028: '陵水黎族自治县', + }, + 469029: { + 469029: '保亭黎族苗族自治县', + }, + 469030: { + 469030: '琼中黎族苗族自治县', + }, + 500000: { + 500100: '重庆城区', + 500200: '重庆郊县', + }, + 500100: { + 500101: '万州区', + 500102: '涪陵区', + 500103: '渝中区', + 500104: '大渡口区', + 500105: '江北区', + 500106: '沙坪坝区', + 500107: '九龙坡区', + 500108: '南岸区', + 500109: '北碚区', + 500110: '綦江区', + 500111: '大足区', + 500112: '渝北区', + 500113: '巴南区', + 500114: '黔江区', + 500115: '长寿区', + 500116: '江津区', + 500117: '合川区', + 500118: '永川区', + 500119: '南川区', + 500120: '璧山区', + 500151: '铜梁区', + 500152: '潼南区', + 500153: '荣昌区', + 500154: '开州区', + 500155: '梁平区', + 500156: '武隆区', + }, + 500200: { + 500229: '城口县', + 500230: '丰都县', + 500231: '垫江县', + 500233: '忠县', + 500235: '云阳县', + 500236: '奉节县', + 500237: '巫山县', + 500238: '巫溪县', + 500240: '石柱土家族自治县', + 500241: '秀山土家族苗族自治县', + 500242: '酉阳土家族苗族自治县', + 500243: '彭水苗族土家族自治县', + }, + 510000: { + 510100: '成都市', + 510300: '自贡市', + 510400: '攀枝花市', + 510500: '泸州市', + 510600: '德阳市', + 510700: '绵阳市', + 510800: '广元市', + 510900: '遂宁市', + 511000: '内江市', + 511100: '乐山市', + 511300: '南充市', + 511400: '眉山市', + 511500: '宜宾市', + 511600: '广安市', + 511700: '达州市', + 511800: '雅安市', + 511900: '巴中市', + 512000: '资阳市', + 513200: '阿坝藏族羌族自治州', + 513300: '甘孜藏族自治州', + 513400: '凉山彝族自治州', + }, + 510100: { + 510104: '锦江区', + 510105: '青羊区', + 510106: '金牛区', + 510107: '武侯区', + 510108: '成华区', + 510112: '龙泉驿区', + 510113: '青白江区', + 510114: '新都区', + 510115: '温江区', + 510116: '双流区', + 510117: '郫都区', + 510121: '金堂县', + 510129: '大邑县', + 510131: '蒲江县', + 510132: '新津县', + 510181: '都江堰市', + 510182: '彭州市', + 510183: '邛崃市', + 510184: '崇州市', + 510185: '简阳市', + }, + 510300: { + 510302: '自流井区', + 510303: '贡井区', + 510304: '大安区', + 510311: '沿滩区', + 510321: '荣县', + 510322: '富顺县', + }, + 510400: { + 510402: '东区', + 510403: '西区', + 510411: '仁和区', + 510421: '米易县', + 510422: '盐边县', + }, + 510500: { + 510502: '江阳区', + 510503: '纳溪区', + 510504: '龙马潭区', + 510521: '泸县', + 510522: '合江县', + 510524: '叙永县', + 510525: '古蔺县', + }, + 510600: { + 510603: '旌阳区', + 510623: '中江县', + 510626: '罗江区', + 510681: '广汉市', + 510682: '什邡市', + 510683: '绵竹市', + }, + 510700: { + 510703: '涪城区', + 510704: '游仙区', + 510705: '安州区', + 510722: '三台县', + 510723: '盐亭县', + 510725: '梓潼县', + 510726: '北川羌族自治县', + 510727: '平武县', + 510781: '江油市', + }, + 510800: { + 510802: '利州区', + 510811: '昭化区', + 510812: '朝天区', + 510821: '旺苍县', + 510822: '青川县', + 510823: '剑阁县', + 510824: '苍溪县', + }, + 510900: { + 510903: '船山区', + 510904: '安居区', + 510921: '蓬溪县', + 510922: '射洪县', + 510923: '大英县', + }, + 511000: { + 511002: '市中区', + 511011: '东兴区', + 511024: '威远县', + 511025: '资中县', + 511083: '隆昌市', + }, + 511100: { + 511102: '市中区', + 511111: '沙湾区', + 511112: '五通桥区', + 511113: '金口河区', + 511123: '犍为县', + 511124: '井研县', + 511126: '夹江县', + 511129: '沐川县', + 511132: '峨边彝族自治县', + 511133: '马边彝族自治县', + 511181: '峨眉山市', + }, + 511300: { + 511302: '顺庆区', + 511303: '高坪区', + 511304: '嘉陵区', + 511321: '南部县', + 511322: '营山县', + 511323: '蓬安县', + 511324: '仪陇县', + 511325: '西充县', + 511381: '阆中市', + }, + 511400: { + 511402: '东坡区', + 511403: '彭山区', + 511421: '仁寿县', + 511423: '洪雅县', + 511424: '丹棱县', + 511425: '青神县', + }, + 511500: { + 511502: '翠屏区', + 511503: '南溪区', + 511521: '宜宾县', + 511523: '江安县', + 511524: '长宁县', + 511525: '高县', + 511526: '珙县', + 511527: '筠连县', + 511528: '兴文县', + 511529: '屏山县', + }, + 511600: { + 511602: '广安区', + 511603: '前锋区', + 511621: '岳池县', + 511622: '武胜县', + 511623: '邻水县', + 511681: '华蓥市', + }, + 511700: { + 511702: '通川区', + 511703: '达川区', + 511722: '宣汉县', + 511723: '开江县', + 511724: '大竹县', + 511725: '渠县', + 511781: '万源市', + }, + 511800: { + 511802: '雨城区', + 511803: '名山区', + 511822: '荥经县', + 511823: '汉源县', + 511824: '石棉县', + 511825: '天全县', + 511826: '芦山县', + 511827: '宝兴县', + }, + 511900: { + 511902: '巴州区', + 511903: '恩阳区', + 511921: '通江县', + 511922: '南江县', + 511923: '平昌县', + }, + 512000: { + 512002: '雁江区', + 512021: '安岳县', + 512022: '乐至县', + }, + 513200: { + 513201: '马尔康市', + 513221: '汶川县', + 513222: '理县', + 513223: '茂县', + 513224: '松潘县', + 513225: '九寨沟市', + 513226: '金川县', + 513227: '小金县', + 513228: '黑水县', + 513230: '壤塘县', + 513231: '阿坝县', + 513232: '若尔盖县', + 513233: '红原县', + }, + 513300: { + 513301: '康定市', + 513322: '泸定县', + 513323: '丹巴县', + 513324: '九龙县', + 513325: '雅江县', + 513326: '道孚县', + 513327: '炉霍县', + 513328: '甘孜县', + 513329: '新龙县', + 513330: '德格县', + 513331: '白玉县', + 513332: '石渠县', + 513333: '色达县', + 513334: '理塘县', + 513335: '巴塘县', + 513336: '乡城县', + 513337: '稻城县', + 513338: '得荣县', + }, + 513400: { + 513401: '西昌市', + 513422: '木里藏族自治县', + 513423: '盐源县', + 513424: '德昌县', + 513425: '会理县', + 513426: '会东县', + 513427: '宁南县', + 513428: '普格县', + 513429: '布拖县', + 513430: '金阳县', + 513431: '昭觉县', + 513432: '喜德县', + 513433: '冕宁县', + 513434: '越西县', + 513435: '甘洛县', + 513436: '美姑县', + 513437: '雷波县', + }, + 520000: { + 520100: '贵阳市', + 520200: '六盘水市', + 520300: '遵义市', + 520400: '安顺市', + 520500: '毕节市', + 520600: '铜仁市', + 522300: '黔西南布依族苗族自治州', + 522600: '黔东南苗族侗族自治州', + 522700: '黔南布依族苗族自治州', + }, + 520100: { + 520102: '南明区', + 520103: '云岩区', + 520111: '花溪区', + 520112: '乌当区', + 520113: '白云区', + 520115: '观山湖区', + 520121: '开阳县', + 520122: '息烽县', + 520123: '修文县', + 520181: '清镇市', + }, + 520200: { + 520201: '钟山区', + 520203: '六枝特区', + 520221: '水城县', + 520281: '盘州市', + }, + 520300: { + 520302: '红花岗区', + 520303: '汇川区', + 520304: '播州区', + 520322: '桐梓县', + 520323: '绥阳县', + 520324: '正安县', + 520325: '道真仡佬族苗族自治县', + 520326: '务川仡佬族苗族自治县', + 520327: '凤冈县', + 520328: '湄潭县', + 520329: '余庆县', + 520330: '习水县', + 520381: '赤水市', + 520382: '仁怀市', + }, + 520400: { + 520402: '西秀区', + 520403: '平坝区', + 520422: '普定县', + 520423: '镇宁布依族苗族自治县', + 520424: '关岭布依族苗族自治县', + 520425: '紫云苗族布依族自治县', + }, + 520500: { + 520502: '七星关区', + 520521: '大方县', + 520522: '黔西县', + 520523: '金沙县', + 520524: '织金县', + 520525: '纳雍县', + 520526: '威宁彝族回族苗族自治县', + 520527: '赫章县', + }, + 520600: { + 520602: '碧江区', + 520603: '万山区', + 520621: '江口县', + 520622: '玉屏侗族自治县', + 520623: '石阡县', + 520624: '思南县', + 520625: '印江土家族苗族自治县', + 520626: '德江县', + 520627: '沿河土家族自治县', + 520628: '松桃苗族自治县', + }, + 522300: { + 522301: '兴义市', + 522322: '兴仁县', + 522323: '普安县', + 522324: '晴隆县', + 522325: '贞丰县', + 522326: '望谟县', + 522327: '册亨县', + 522328: '安龙县', + }, + 522600: { + 522601: '凯里市', + 522622: '黄平县', + 522623: '施秉县', + 522624: '三穗县', + 522625: '镇远县', + 522626: '岑巩县', + 522627: '天柱县', + 522628: '锦屏县', + 522629: '剑河县', + 522630: '台江县', + 522631: '黎平县', + 522632: '榕江县', + 522633: '从江县', + 522634: '雷山县', + 522635: '麻江县', + 522636: '丹寨县', + }, + 522700: { + 522701: '都匀市', + 522702: '福泉市', + 522722: '荔波县', + 522723: '贵定县', + 522725: '瓮安县', + 522726: '独山县', + 522727: '平塘县', + 522728: '罗甸县', + 522729: '长顺县', + 522730: '龙里县', + 522731: '惠水县', + 522732: '三都水族自治县', + }, + 530000: { + 530100: '昆明市', + 530300: '曲靖市', + 530400: '玉溪市', + 530500: '保山市', + 530600: '昭通市', + 530700: '丽江市', + 530800: '普洱市', + 530900: '临沧市', + 532300: '楚雄彝族自治州', + 532500: '红河哈尼族彝族自治州', + 532600: '文山壮族苗族自治州', + 532800: '西双版纳傣族自治州', + 532900: '大理白族自治州', + 533100: '德宏傣族景颇族自治州', + 533300: '怒江傈僳族自治州', + 533400: '迪庆藏族自治州', + }, + 530100: { + 530102: '五华区', + 530103: '盘龙区', + 530111: '官渡区', + 530112: '西山区', + 530113: '东川区', + 530114: '呈贡区', + 530115: '晋宁区', + 530124: '富民县', + 530125: '宜良县', + 530126: '石林彝族自治县', + 530127: '嵩明县', + 530128: '禄劝彝族苗族自治县', + 530129: '寻甸回族彝族自治县', + 530181: '安宁市', + }, + 530300: { + 530302: '麒麟区', + 530303: '沾益区', + 530321: '马龙县', + 530322: '陆良县', + 530323: '师宗县', + 530324: '罗平县', + 530325: '富源县', + 530326: '会泽县', + 530381: '宣威市', + }, + 530400: { + 530402: '红塔区', + 530403: '江川区', + 530422: '澄江县', + 530423: '通海县', + 530424: '华宁县', + 530425: '易门县', + 530426: '峨山彝族自治县', + 530427: '新平彝族傣族自治县', + 530428: '元江哈尼族彝族傣族自治县', + }, + 530500: { + 530502: '隆阳区', + 530521: '施甸县', + 530523: '龙陵县', + 530524: '昌宁县', + 530581: '腾冲市', + }, + 530600: { + 530602: '昭阳区', + 530621: '鲁甸县', + 530622: '巧家县', + 530623: '盐津县', + 530624: '大关县', + 530625: '永善县', + 530626: '绥江县', + 530627: '镇雄县', + 530628: '彝良县', + 530629: '威信县', + 530630: '水富县', + }, + 530700: { + 530702: '古城区', + 530721: '玉龙纳西族自治县', + 530722: '永胜县', + 530723: '华坪县', + 530724: '宁蒗彝族自治县', + }, + 530800: { + 530802: '思茅区', + 530821: '宁洱哈尼族彝族自治县', + 530822: '墨江哈尼族自治县', + 530823: '景东彝族自治县', + 530824: '景谷傣族彝族自治县', + 530825: '镇沅彝族哈尼族拉祜族自治县', + 530826: '江城哈尼族彝族自治县', + 530827: '孟连傣族拉祜族佤族自治县', + 530828: '澜沧拉祜族自治县', + 530829: '西盟佤族自治县', + }, + 530900: { + 530902: '临翔区', + 530921: '凤庆县', + 530922: '云县', + 530923: '永德县', + 530924: '镇康县', + 530925: '双江拉祜族佤族布朗族傣族自治县', + 530926: '耿马傣族佤族自治县', + 530927: '沧源佤族自治县', + }, + 532300: { + 532301: '楚雄市', + 532322: '双柏县', + 532323: '牟定县', + 532324: '南华县', + 532325: '姚安县', + 532326: '大姚县', + 532327: '永仁县', + 532328: '元谋县', + 532329: '武定县', + 532331: '禄丰县', + }, + 532500: { + 532501: '个旧市', + 532502: '开远市', + 532503: '蒙自市', + 532504: '弥勒市', + 532523: '屏边苗族自治县', + 532524: '建水县', + 532525: '石屏县', + 532527: '泸西县', + 532528: '元阳县', + 532529: '红河县', + 532530: '金平苗族瑶族傣族自治县', + 532531: '绿春县', + 532532: '河口瑶族自治县', + }, + 532600: { + 532601: '文山市', + 532622: '砚山县', + 532623: '西畴县', + 532624: '麻栗坡县', + 532625: '马关县', + 532626: '丘北县', + 532627: '广南县', + 532628: '富宁县', + }, + 532800: { + 532801: '景洪市', + 532822: '勐海县', + 532823: '勐腊县', + }, + 532900: { + 532901: '大理市', + 532922: '漾濞彝族自治县', + 532923: '祥云县', + 532924: '宾川县', + 532925: '弥渡县', + 532926: '南涧彝族自治县', + 532927: '巍山彝族回族自治县', + 532928: '永平县', + 532929: '云龙县', + 532930: '洱源县', + 532931: '剑川县', + 532932: '鹤庆县', + }, + 533100: { + 533102: '瑞丽市', + 533103: '芒市', + 533122: '梁河县', + 533123: '盈江县', + 533124: '陇川县', + }, + 533300: { + 533301: '泸水市', + 533323: '福贡县', + 533324: '贡山独龙族怒族自治县', + 533325: '兰坪白族普米族自治县', + }, + 533400: { + 533401: '香格里拉市', + 533422: '德钦县', + 533423: '维西傈僳族自治县', + }, + 540000: { + 540100: '拉萨市', + 540200: '日喀则市', + 540300: '昌都市', + 540400: '林芝市', + 540500: '山南市', + 540600: '那曲市', + 542500: '阿里地区', + }, + 540100: { + 540102: '城关区', + 540103: '堆龙德庆区', + 540104: '达孜区', + 540121: '林周县', + 540122: '当雄县', + 540123: '尼木县', + 540124: '曲水县', + 540127: '墨竹工卡县', + }, + 540200: { + 540202: '桑珠孜区', + 540221: '南木林县', + 540222: '江孜县', + 540223: '定日县', + 540224: '萨迦县', + 540225: '拉孜县', + 540226: '昂仁县', + 540227: '谢通门县', + 540228: '白朗县', + 540229: '仁布县', + 540230: '康马县', + 540231: '定结县', + 540232: '仲巴县', + 540233: '亚东县', + 540234: '吉隆县', + 540235: '聂拉木县', + 540236: '萨嘎县', + 540237: '岗巴县', + }, + 540300: { + 540302: '卡若区', + 540321: '江达县', + 540322: '贡觉县', + 540323: '类乌齐县', + 540324: '丁青县', + 540325: '察雅县', + 540326: '八宿县', + 540327: '左贡县', + 540328: '芒康县', + 540329: '洛隆县', + 540330: '边坝县', + }, + 540400: { + 540402: '巴宜区', + 540421: '工布江达县', + 540422: '米林县', + 540423: '墨脱县', + 540424: '波密县', + 540425: '察隅县', + 540426: '朗县', + }, + 540500: { + 540502: '乃东区', + 540521: '扎囊县', + 540522: '贡嘎县', + 540523: '桑日县', + 540524: '琼结县', + 540525: '曲松县', + 540526: '措美县', + 540527: '洛扎县', + 540528: '加查县', + 540529: '隆子县', + 540530: '错那县', + 540531: '浪卡子县', + }, + 540600: { + 540602: '色尼区', + 540621: '嘉黎县', + 540622: '比如县', + 540623: '聂荣县', + 540624: '安多县', + 540625: '申扎县', + 540626: '索县', + 540627: '班戈县', + 540628: '巴青县', + 540629: '尼玛县', + 540630: '双湖县', + }, + 542500: { + 542521: '普兰县', + 542522: '札达县', + 542523: '噶尔县', + 542524: '日土县', + 542525: '革吉县', + 542526: '改则县', + 542527: '措勤县', + }, + 610000: { + 610100: '西安市', + 610200: '铜川市', + 610300: '宝鸡市', + 610400: '咸阳市', + 610500: '渭南市', + 610600: '延安市', + 610700: '汉中市', + 610800: '榆林市', + 610900: '安康市', + 611000: '商洛市', + }, + 610100: { + 610102: '新城区', + 610103: '碑林区', + 610104: '莲湖区', + 610111: '灞桥区', + 610112: '未央区', + 610113: '雁塔区', + 610114: '阎良区', + 610115: '临潼区', + 610116: '长安区', + 610117: '高陵区', + 610118: '鄠邑区', + 610122: '蓝田县', + 610124: '周至县', + }, + 610200: { + 610202: '王益区', + 610203: '印台区', + 610204: '耀州区', + 610222: '宜君县', + }, + 610300: { + 610302: '渭滨区', + 610303: '金台区', + 610304: '陈仓区', + 610322: '凤翔县', + 610323: '岐山县', + 610324: '扶风县', + 610326: '眉县', + 610327: '陇县', + 610328: '千阳县', + 610329: '麟游县', + 610330: '凤县', + 610331: '太白县', + }, + 610400: { + 610402: '秦都区', + 610403: '杨陵区', + 610404: '渭城区', + 610422: '三原县', + 610423: '泾阳县', + 610424: '乾县', + 610425: '礼泉县', + 610426: '永寿县', + 610427: '彬县', + 610428: '长武县', + 610429: '旬邑县', + 610430: '淳化县', + 610431: '武功县', + 610481: '兴平市', + }, + 610500: { + 610502: '临渭区', + 610503: '华州区', + 610522: '潼关县', + 610523: '大荔县', + 610524: '合阳县', + 610525: '澄城县', + 610526: '蒲城县', + 610527: '白水县', + 610528: '富平县', + 610581: '韩城市', + 610582: '华阴市', + }, + 610600: { + 610602: '宝塔区', + 610603: '安塞区', + 610621: '延长县', + 610622: '延川县', + 610623: '子长县', + 610625: '志丹县', + 610626: '吴起县', + 610627: '甘泉县', + 610628: '富县', + 610629: '洛川县', + 610630: '宜川县', + 610631: '黄龙县', + 610632: '黄陵县', + }, + 610700: { + 610702: '汉台区', + 610703: '南郑区', + 610722: '城固县', + 610723: '洋县', + 610724: '西乡县', + 610725: '勉县', + 610726: '宁强县', + 610727: '略阳县', + 610728: '镇巴县', + 610729: '留坝县', + 610730: '佛坪县', + }, + 610800: { + 610802: '榆阳区', + 610803: '横山区', + 610822: '府谷县', + 610824: '靖边县', + 610825: '定边县', + 610826: '绥德县', + 610827: '米脂县', + 610828: '佳县', + 610829: '吴堡县', + 610830: '清涧县', + 610831: '子洲县', + 610881: '神木市', + }, + 610900: { + 610902: '汉滨区', + 610921: '汉阴县', + 610922: '石泉县', + 610923: '宁陕县', + 610924: '紫阳县', + 610925: '岚皋县', + 610926: '平利县', + 610927: '镇坪县', + 610928: '旬阳县', + 610929: '白河县', + }, + 611000: { + 611002: '商州区', + 611021: '洛南县', + 611022: '丹凤县', + 611023: '商南县', + 611024: '山阳县', + 611025: '镇安县', + 611026: '柞水县', + }, + 620000: { + 620100: '兰州市', + 620200: '嘉峪关市', + 620300: '金昌市', + 620400: '白银市', + 620500: '天水市', + 620600: '武威市', + 620700: '张掖市', + 620800: '平凉市', + 620900: '酒泉市', + 621000: '庆阳市', + 621100: '定西市', + 621200: '陇南市', + 622900: '临夏回族自治州', + 623000: '甘南藏族自治州', + }, + 620100: { + 620102: '城关区', + 620103: '七里河区', + 620104: '西固区', + 620105: '安宁区', + 620111: '红古区', + 620121: '永登县', + 620122: '皋兰县', + 620123: '榆中县', + }, + 620200: { + 620200: '嘉峪关市', + }, + 620300: { + 620302: '金川区', + 620321: '永昌县', + }, + 620400: { + 620402: '白银区', + 620403: '平川区', + 620421: '靖远县', + 620422: '会宁县', + 620423: '景泰县', + }, + 620500: { + 620502: '秦州区', + 620503: '麦积区', + 620521: '清水县', + 620522: '秦安县', + 620523: '甘谷县', + 620524: '武山县', + 620525: '张家川回族自治县', + }, + 620600: { + 620602: '凉州区', + 620621: '民勤县', + 620622: '古浪县', + 620623: '天祝藏族自治县', + }, + 620700: { + 620702: '甘州区', + 620721: '肃南裕固族自治县', + 620722: '民乐县', + 620723: '临泽县', + 620724: '高台县', + 620725: '山丹县', + }, + 620800: { + 620802: '崆峒区', + 620821: '泾川县', + 620822: '灵台县', + 620823: '崇信县', + 620824: '华亭县', + 620825: '庄浪县', + 620826: '静宁县', + }, + 620900: { + 620902: '肃州区', + 620921: '金塔县', + 620922: '瓜州县', + 620923: '肃北蒙古族自治县', + 620924: '阿克塞哈萨克族自治县', + 620981: '玉门市', + 620982: '敦煌市', + }, + 621000: { + 621002: '西峰区', + 621021: '庆城县', + 621022: '环县', + 621023: '华池县', + 621024: '合水县', + 621025: '正宁县', + 621026: '宁县', + 621027: '镇原县', + }, + 621100: { + 621102: '安定区', + 621121: '通渭县', + 621122: '陇西县', + 621123: '渭源县', + 621124: '临洮县', + 621125: '漳县', + 621126: '岷县', + }, + 621200: { + 621202: '武都区', + 621221: '成县', + 621222: '文县', + 621223: '宕昌县', + 621224: '康县', + 621225: '西和县', + 621226: '礼县', + 621227: '徽县', + 621228: '两当县', + }, + 622900: { + 622901: '临夏市', + 622921: '临夏县', + 622922: '康乐县', + 622923: '永靖县', + 622924: '广河县', + 622925: '和政县', + 622926: '东乡族自治县', + 622927: '积石山保安族东乡族撒拉族自治县', + }, + 623000: { + 623001: '合作市', + 623021: '临潭县', + 623022: '卓尼县', + 623023: '舟曲县', + 623024: '迭部县', + 623025: '玛曲县', + 623026: '碌曲县', + 623027: '夏河县', + }, + 630000: { + 630100: '西宁市', + 630200: '海东市', + 632200: '海北藏族自治州', + 632300: '黄南藏族自治州', + 632500: '海南藏族自治州', + 632600: '果洛藏族自治州', + 632700: '玉树藏族自治州', + 632800: '海西蒙古族藏族自治州', + }, + 630100: { + 630102: '城东区', + 630103: '城中区', + 630104: '城西区', + 630105: '城北区', + 630121: '大通回族土族自治县', + 630122: '湟中县', + 630123: '湟源县', + }, + 630200: { + 630202: '乐都区', + 630203: '平安区', + 630222: '民和回族土族自治县', + 630223: '互助土族自治县', + 630224: '化隆回族自治县', + 630225: '循化撒拉族自治县', + }, + 632200: { + 632221: '门源回族自治县', + 632222: '祁连县', + 632223: '海晏县', + 632224: '刚察县', + }, + 632300: { + 632321: '同仁县', + 632322: '尖扎县', + 632323: '泽库县', + 632324: '河南蒙古族自治县', + }, + 632500: { + 632521: '共和县', + 632522: '同德县', + 632523: '贵德县', + 632524: '兴海县', + 632525: '贵南县', + }, + 632600: { + 632621: '玛沁县', + 632622: '班玛县', + 632623: '甘德县', + 632624: '达日县', + 632625: '久治县', + 632626: '玛多县', + }, + 632700: { + 632701: '玉树市', + 632722: '杂多县', + 632723: '称多县', + 632724: '治多县', + 632725: '囊谦县', + 632726: '曲麻莱县', + }, + 632800: { + 632801: '格尔木市', + 632802: '德令哈市', + 632821: '乌兰县', + 632822: '都兰县', + 632823: '天峻县', + 632825: '海西蒙古族藏族自治州直辖', + }, + 640000: { + 640100: '银川市', + 640200: '石嘴山市', + 640300: '吴忠市', + 640400: '固原市', + 640500: '中卫市', + }, + 640100: { + 640104: '兴庆区', + 640105: '西夏区', + 640106: '金凤区', + 640121: '永宁县', + 640122: '贺兰县', + 640181: '灵武市', + }, + 640200: { + 640202: '大武口区', + 640205: '惠农区', + 640221: '平罗县', + }, + 640300: { + 640302: '利通区', + 640303: '红寺堡区', + 640323: '盐池县', + 640324: '同心县', + 640381: '青铜峡市', + }, + 640400: { + 640402: '原州区', + 640422: '西吉县', + 640423: '隆德县', + 640424: '泾源县', + 640425: '彭阳县', + }, + 640500: { + 640502: '沙坡头区', + 640521: '中宁县', + 640522: '海原县', + }, + 650000: { + 650100: '乌鲁木齐市', + 650200: '克拉玛依市', + 650400: '吐鲁番市', + 650500: '哈密市', + 652300: '昌吉回族自治州', + 652700: '博尔塔拉蒙古自治州', + 652800: '巴音郭楞蒙古自治州', + 652900: '阿克苏地区', + 653000: '克孜勒苏柯尔克孜自治州', + 653100: '喀什地区', + 653200: '和田地区', + 654000: '伊犁哈萨克自治州', + 654200: '塔城地区', + 654300: '阿勒泰地区', + 659001: '石河子市', + 659002: '阿拉尔市', + 659003: '图木舒克市', + 659004: '五家渠市', + 659005: '北屯市', + 659006: '铁门关市', + 659007: '双河市', + 659008: '可克达拉市', + 659009: '昆玉市', + }, + 650100: { + 650102: '天山区', + 650103: '沙依巴克区', + 650104: '新市区', + 650105: '水磨沟区', + 650106: '头屯河区', + 650107: '达坂城区', + 650109: '米东区', + 650121: '乌鲁木齐县', + }, + 650200: { + 650202: '独山子区', + 650203: '克拉玛依区', + 650204: '白碱滩区', + 650205: '乌尔禾区', + }, + 650400: { + 650402: '高昌区', + 650421: '鄯善县', + 650422: '托克逊县', + }, + 650500: { + 650502: '伊州区', + 650521: '巴里坤哈萨克自治县', + 650522: '伊吾县', + }, + 652300: { + 652301: '昌吉市', + 652302: '阜康市', + 652323: '呼图壁县', + 652324: '玛纳斯县', + 652325: '奇台县', + 652327: '吉木萨尔县', + 652328: '木垒哈萨克自治县', + }, + 652700: { + 652701: '博乐市', + 652702: '阿拉山口市', + 652722: '精河县', + 652723: '温泉县', + }, + 652800: { + 652801: '库尔勒市', + 652822: '轮台县', + 652823: '尉犁县', + 652824: '若羌县', + 652825: '且末县', + 652826: '焉耆回族自治县', + 652827: '和静县', + 652828: '和硕县', + 652829: '博湖县', + }, + 652900: { + 652901: '阿克苏市', + 652922: '温宿县', + 652923: '库车县', + 652924: '沙雅县', + 652925: '新和县', + 652926: '拜城县', + 652927: '乌什县', + 652928: '阿瓦提县', + 652929: '柯坪县', + }, + 653000: { + 653001: '阿图什市', + 653022: '阿克陶县', + 653023: '阿合奇县', + 653024: '乌恰县', + }, + 653100: { + 653101: '喀什市', + 653121: '疏附县', + 653122: '疏勒县', + 653123: '英吉沙县', + 653124: '泽普县', + 653125: '莎车县', + 653126: '叶城县', + 653127: '麦盖提县', + 653128: '岳普湖县', + 653129: '伽师县', + 653130: '巴楚县', + 653131: '塔什库尔干塔吉克自治县', + }, + 653200: { + 653201: '和田市', + 653221: '和田县', + 653222: '墨玉县', + 653223: '皮山县', + 653224: '洛浦县', + 653225: '策勒县', + 653226: '于田县', + 653227: '民丰县', + }, + 654000: { + 654002: '伊宁市', + 654003: '奎屯市', + 654004: '霍尔果斯市', + 654021: '伊宁县', + 654022: '察布查尔锡伯自治县', + 654023: '霍城县', + 654024: '巩留县', + 654025: '新源县', + 654026: '昭苏县', + 654027: '特克斯县', + 654028: '尼勒克县', + }, + 654200: { + 654201: '塔城市', + 654202: '乌苏市', + 654221: '额敏县', + 654223: '沙湾县', + 654224: '托里县', + 654225: '裕民县', + 654226: '和布克赛尔蒙古自治县', + }, + 654300: { + 654301: '阿勒泰市', + 654321: '布尔津县', + 654322: '富蕴县', + 654323: '福海县', + 654324: '哈巴河县', + 654325: '青河县', + 654326: '吉木乃县', + }, + 659001: { + 659001: '石河子市', + }, + 659002: { + 659002: '阿拉尔市', + }, + 659003: { + 659003: '图木舒克市', + }, + 659004: { + 659004: '五家渠市', + }, + 659005: { + 659005: '北屯市', + }, + 659006: { + 659006: '铁门关市', + }, + 659007: { + 659007: '双河市', + }, + 659008: { + 659008: '可克达拉市', + }, + 659009: { + 659009: '昆玉市', + }, + 810000: { + 810100: '香港城区', + }, + 810100: { + 810101: '中西区', + 810102: '湾仔区', + 810103: '东区', + 810104: '南区', + 810105: '油尖旺区', + 810106: '深水埗区', + 810107: '九龙城区', + 810108: '黄大仙区', + 810109: '观塘区', + 810110: '荃湾区', + 810111: '屯门区', + 810112: '元朗区', + 810113: '北区', + 810114: '大埔区', + 810115: '西贡区', + 810116: '沙田区', + 810117: '葵青区', + 810118: '离岛区', + }, + 820000: { + 820100: '澳门城区', + }, + 820100: { + 820101: '花地玛堂区', + 820102: '花王堂区', + 820103: '望德堂区', + 820104: '大堂区', + 820105: '风顺堂区', + 820106: '嘉模堂区', + 820107: '路凼填海区', + 820108: '圣方济各堂区', + }, +}; diff --git a/ruoyi-admin/src/main/resources/static/node_modules/distpicker/src/index.js b/ruoyi-admin/src/main/resources/static/node_modules/distpicker/src/index.js new file mode 100644 index 000000000..85ea9249e --- /dev/null +++ b/ruoyi-admin/src/main/resources/static/node_modules/distpicker/src/index.js @@ -0,0 +1,59 @@ +import $ from 'jquery'; +import Distpicker from './distpicker'; +import { + NAMESPACE, + WINDOW, +} from './constants'; + +if ($.fn) { + const AnotherDistpicker = $.fn.distpicker; + + $.fn.distpicker = function jQueryDistpicker(option, ...args) { + let result; + + this.each((i, element) => { + const $element = $(element); + const isDestroy = option === 'destroy'; + let distpicker = $element.data(NAMESPACE); + + if (!distpicker) { + if (isDestroy) { + return; + } + + const options = $.extend({}, $element.data(), $.isPlainObject(option) && option); + + distpicker = new Distpicker(element, options); + $element.data(NAMESPACE, distpicker); + } + + if (typeof option === 'string') { + const fn = distpicker[option]; + + if ($.isFunction(fn)) { + result = fn.apply(distpicker, args); + + if (isDestroy) { + $element.removeData(NAMESPACE); + } + } + } + }); + + return typeof result === 'undefined' ? this : result; + }; + + $.fn.distpicker.Constructor = Distpicker; + $.fn.distpicker.setDefaults = Distpicker.setDefaults; + + $.fn.distpicker.noConflict = function noConflict() { + $.fn.distpicker = AnotherDistpicker; + return this; + }; +} + +if (WINDOW.document) { + $(() => { + $(`[data-toggle="${NAMESPACE}"]`).distpicker(); + }); +} diff --git a/ruoyi-admin/src/main/resources/static/package-lock.json b/ruoyi-admin/src/main/resources/static/package-lock.json new file mode 100644 index 000000000..1c1229d5a --- /dev/null +++ b/ruoyi-admin/src/main/resources/static/package-lock.json @@ -0,0 +1,11 @@ +{ + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "distpicker": { + "version": "2.0.5", + "resolved": "https://registry.npm.taobao.org/distpicker/download/distpicker-2.0.5.tgz", + "integrity": "sha1-hMJXkksIm5EpvflpHUb6FHEJEcU=" + } + } +} diff --git a/ruoyi-admin/src/main/resources/templates/assets/assetsMachineRoom/add.html b/ruoyi-admin/src/main/resources/templates/assets/assetsMachineRoom/add.html index 8803a3a4c..5e1bc4109 100755 --- a/ruoyi-admin/src/main/resources/templates/assets/assetsMachineRoom/add.html +++ b/ruoyi-admin/src/main/resources/templates/assets/assetsMachineRoom/add.html @@ -36,26 +36,16 @@
      • -
        - +
        +
        - + + +
        - -
        - -
        -
        -
        - -
        - -
        -
        -
        - +
        diff --git a/ruoyi-admin/src/main/resources/templates/assets/assetsMachineRoom/assetsMachineRoom.html b/ruoyi-admin/src/main/resources/templates/assets/assetsMachineRoom/assetsMachineRoom.html index 11dedc8dc..96eac2f86 100755 --- a/ruoyi-admin/src/main/resources/templates/assets/assetsMachineRoom/assetsMachineRoom.html +++ b/ruoyi-admin/src/main/resources/templates/assets/assetsMachineRoom/assetsMachineRoom.html @@ -130,20 +130,29 @@ title: '所在国家', sortable: true }, + // { + // field: 'province', + // title: '所在省', + // sortable: true + // }, + // { + // field: 'city', + // title: '所在市', + // sortable: true + // }, + // { + // field: 'area', + // title: '所在区', + // sortable: true + // }, { - field: 'province', - title: '所在省', - sortable: true - }, - { - field: 'city', - title: '所在市', - sortable: true - }, - { - field: 'area', - title: '所在区', - sortable: true + title: '省市区', + formatter: function (value, row, index) { + if (row) { + value = row.province + row.city + row.area; + } + return value; + } }, { field: 'location', diff --git a/ruoyi-admin/src/main/resources/templates/assets/assetsMachineRoom/edit.html b/ruoyi-admin/src/main/resources/templates/assets/assetsMachineRoom/edit.html index 94574e015..615cbf974 100755 --- a/ruoyi-admin/src/main/resources/templates/assets/assetsMachineRoom/edit.html +++ b/ruoyi-admin/src/main/resources/templates/assets/assetsMachineRoom/edit.html @@ -40,22 +40,12 @@
        -
        - +
        +
        - -
        -
        -
        - -
        - -
        -
        -
        - -
        - + + +
        @@ -141,6 +131,18 @@ $.operate.save(prefix + "/edit", $('#form-assetsMachineRoom-edit').serialize()); } } + + /* + * 修改时手动回显省市区 + */ + $(function () { + var machineRoom = [[${assetsMachineRoom}]]; + $("#province").val(machineRoom.province); + $("#province").trigger("change"); + $("#city").val(machineRoom.city); + $("#city").trigger("change"); + $("#area").val(machineRoom.area); + }); diff --git a/ruoyi-admin/src/main/resources/templates/include.html b/ruoyi-admin/src/main/resources/templates/include.html index 86bfa557d..803560c9c 100644 --- a/ruoyi-admin/src/main/resources/templates/include.html +++ b/ruoyi-admin/src/main/resources/templates/include.html @@ -41,6 +41,7 @@ +
        From ffe45a27b6ff9e7aae5d277100df1b19313fa3ea Mon Sep 17 00:00:00 2001 From: tangpeng Date: Tue, 18 Jun 2019 21:11:11 +0800 Subject: [PATCH 26/26] =?UTF-8?q?=E7=BD=91=E7=BB=9CIP=E5=9C=B0=E5=9D=80?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E5=A4=96=E9=94=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network/NetIpAddressController.java | 171 +++++++------ .../assetsMachineRoom/assetsMachineRoom.html | 62 ++--- .../assets/assetsMachineRoom/edit.html | 2 +- .../templates/network/netIpAddress/add.html | 24 +- .../templates/network/netIpAddress/edit.html | 131 +++++----- .../network/netIpAddress/netIpAddress.html | 225 +++++++++--------- .../template/tmplSwitch/tmplSwitch.html | 2 +- .../ruoyi/network/domain/NetIpAddress.java | 149 ++++++------ .../system/mapper/SysDictDataMapper.java | 32 +-- .../mapper/network/NetIpAddressMapper.xml | 49 ++-- 10 files changed, 451 insertions(+), 396 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/network/NetIpAddressController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/network/NetIpAddressController.java index db747d198..1e8f0dfe8 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/network/NetIpAddressController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/network/NetIpAddressController.java @@ -18,107 +18,98 @@ import java.util.List; /** * 网络IP 信息操作处理 - * + * * @author TP * @date 2019-06-15 */ @Controller @RequestMapping("/network/netIpAddress") -public class NetIpAddressController extends BaseController -{ +public class NetIpAddressController extends BaseController { private String prefix = "network/netIpAddress"; - - @Autowired - private INetIpAddressService netIpAddressService; - - @RequiresPermissions("network:netIpAddress:view") - @GetMapping() - public String netIpAddress() - { - return prefix + "/netIpAddress"; - } - - /** - * 查询网络IP列表 - */ - @RequiresPermissions("network:netIpAddress:list") - @PostMapping("/list") - @ResponseBody - public TableDataInfo list(NetIpAddress netIpAddress) - { - startPage(); + + @Autowired + private INetIpAddressService netIpAddressService; + + @RequiresPermissions("network:netIpAddress:view") + @GetMapping() + public String netIpAddress() { + return prefix + "/netIpAddress"; + } + + /** + * 查询网络IP列表 + */ + @RequiresPermissions("network:netIpAddress:list") + @PostMapping("/list") + @ResponseBody + public TableDataInfo list(NetIpAddress netIpAddress) { + startPage(); List list = netIpAddressService.selectNetIpAddressList(netIpAddress); - return getDataTable(list); - } - - - /** - * 导出网络IP列表 - */ - @RequiresPermissions("network:netIpAddress:export") + return getDataTable(list); + } + + + /** + * 导出网络IP列表 + */ + @RequiresPermissions("network:netIpAddress:export") @PostMapping("/export") @ResponseBody - public AjaxResult export(NetIpAddress netIpAddress) - { - List list = netIpAddressService.selectNetIpAddressList(netIpAddress); + public AjaxResult export(NetIpAddress netIpAddress) { + List list = netIpAddressService.selectNetIpAddressList(netIpAddress); ExcelUtil util = new ExcelUtil(NetIpAddress.class); return util.exportExcel(list, "netIpAddress"); } - - /** - * 新增网络IP - */ - @GetMapping("/add") - public String add() - { - return prefix + "/add"; - } - - /** - * 新增保存网络IP - */ - @RequiresPermissions("network:netIpAddress:add") - @Log(title = "网络IP", businessType = BusinessType.INSERT) - @PostMapping("/add") - @ResponseBody - public AjaxResult addSave(NetIpAddress netIpAddress) - { - return toAjax(netIpAddressService.insertNetIpAddress(netIpAddress)); - } - /** - * 修改网络IP - */ - @GetMapping("/edit/{ipAddressId}") - public String edit(@PathVariable("ipAddressId") Integer ipAddressId, ModelMap mmap) - { - NetIpAddress netIpAddress = netIpAddressService.selectNetIpAddressById(ipAddressId); - mmap.put("netIpAddress", netIpAddress); - return prefix + "/edit"; - } - - /** - * 修改保存网络IP - */ - @RequiresPermissions("network:netIpAddress:edit") - @Log(title = "网络IP", businessType = BusinessType.UPDATE) - @PostMapping("/edit") - @ResponseBody - public AjaxResult editSave(NetIpAddress netIpAddress) - { - return toAjax(netIpAddressService.updateNetIpAddress(netIpAddress)); - } - - /** - * 删除网络IP - */ - @RequiresPermissions("network:netIpAddress:remove") - @Log(title = "网络IP", businessType = BusinessType.DELETE) - @PostMapping( "/remove") - @ResponseBody - public AjaxResult remove(String ids) - { - return toAjax(netIpAddressService.deleteNetIpAddressByIds(ids)); - } - + /** + * 新增网络IP + */ + @GetMapping("/add") + public String add() { + return prefix + "/add"; + } + + /** + * 新增保存网络IP + */ + @RequiresPermissions("network:netIpAddress:add") + @Log(title = "网络IP", businessType = BusinessType.INSERT) + @PostMapping("/add") + @ResponseBody + public AjaxResult addSave(NetIpAddress netIpAddress) { + return toAjax(netIpAddressService.insertNetIpAddress(netIpAddress)); + } + + /** + * 修改网络IP + */ + @GetMapping("/edit/{ipAddressId}") + public String edit(@PathVariable("ipAddressId") Integer ipAddressId, ModelMap mmap) { + NetIpAddress netIpAddress = netIpAddressService.selectNetIpAddressById(ipAddressId); + mmap.put("netIpAddress", netIpAddress); + return prefix + "/edit"; + } + + /** + * 修改保存网络IP + */ + @RequiresPermissions("network:netIpAddress:edit") + @Log(title = "网络IP", businessType = BusinessType.UPDATE) + @PostMapping("/edit") + @ResponseBody + public AjaxResult editSave(NetIpAddress netIpAddress) { + return toAjax(netIpAddressService.updateNetIpAddress(netIpAddress)); + } + + /** + * 删除网络IP + */ + @RequiresPermissions("network:netIpAddress:remove") + @Log(title = "网络IP", businessType = BusinessType.DELETE) + @PostMapping("/remove") + @ResponseBody + public AjaxResult remove(String ids) { + return toAjax(netIpAddressService.deleteNetIpAddressByIds(ids)); + } + } diff --git a/ruoyi-admin/src/main/resources/templates/assets/assetsMachineRoom/assetsMachineRoom.html b/ruoyi-admin/src/main/resources/templates/assets/assetsMachineRoom/assetsMachineRoom.html index 96eac2f86..b3faaf884 100755 --- a/ruoyi-admin/src/main/resources/templates/assets/assetsMachineRoom/assetsMachineRoom.html +++ b/ruoyi-admin/src/main/resources/templates/assets/assetsMachineRoom/assetsMachineRoom.html @@ -122,29 +122,14 @@ }, { field: 'bandwidthSize', - title: '带宽大小', + title: '带宽(M)', sortable: true }, { field: 'country', - title: '所在国家', + title: '国家', sortable: true }, - // { - // field: 'province', - // title: '所在省', - // sortable: true - // }, - // { - // field: 'city', - // title: '所在市', - // sortable: true - // }, - // { - // field: 'area', - // title: '所在区', - // sortable: true - // }, { title: '省市区', formatter: function (value, row, index) { @@ -173,18 +158,41 @@ field: 'email', title: '邮箱', sortable: true - }, - { - title: '操作', - align: 'center', - formatter: function (value, row, index) { - var actions = []; - actions.push('编辑 '); - actions.push('删除'); - return actions.join(''); - } }] }; + $.each([[${@dict.getType('dict_net_ip_type')}]], function (index, dict) { + options.columns.push({ + field: dict.dictCode, + title: dict.dictLabel, + align: 'center', + formatter: function (value, row, index) { + if (row.switchPorts) { + $.each(row.switchPorts, function (index, switchPort) { + if (switchPort.switchPortType == dict.dictCode) { + value = switchPort.switchPortNum; + } else { + + } + }); + } + var title = "'新增" + dict.dictLabel + "IP'"; + var url = "/network/netIpAddress/add?"; + value = "新增"; + return value; + } + }); + }); + options.columns.push({ + title: '操作', + align: 'center', + formatter: function (value, row, index) { + var actions = []; + actions.push('编辑 '); + actions.push('删除'); + return actions.join(''); + } + }); $.table.init(options); }); diff --git a/ruoyi-admin/src/main/resources/templates/assets/assetsMachineRoom/edit.html b/ruoyi-admin/src/main/resources/templates/assets/assetsMachineRoom/edit.html index 615cbf974..b574a39ed 100755 --- a/ruoyi-admin/src/main/resources/templates/assets/assetsMachineRoom/edit.html +++ b/ruoyi-admin/src/main/resources/templates/assets/assetsMachineRoom/edit.html @@ -28,7 +28,7 @@
        - +
        diff --git a/ruoyi-admin/src/main/resources/templates/network/netIpAddress/add.html b/ruoyi-admin/src/main/resources/templates/network/netIpAddress/add.html index 0d813d217..580e705a2 100644 --- a/ruoyi-admin/src/main/resources/templates/network/netIpAddress/add.html +++ b/ruoyi-admin/src/main/resources/templates/network/netIpAddress/add.html @@ -9,7 +9,13 @@
        - +
        @@ -21,7 +27,7 @@
        - +
        @@ -44,7 +50,12 @@ $("#form-netIpAddress-add").validate({ onkeyup: false, rules: { - ipAddressType: { + machineRoomId: { + required: true, + minlength: 1, + maxlength: 2 + }, + "ipAddressType.dictCode": { required: true, minlength: 1, maxlength: 20 @@ -53,12 +64,7 @@ required: true, minlength: 1, maxlength: 20 - }, - machingRoomId: { - required: true, - minlength: 1, - maxlength: 2 - }, + } }, focusCleanup: true }); diff --git a/ruoyi-admin/src/main/resources/templates/network/netIpAddress/edit.html b/ruoyi-admin/src/main/resources/templates/network/netIpAddress/edit.html index 84b6a9b36..76c4c873d 100644 --- a/ruoyi-admin/src/main/resources/templates/network/netIpAddress/edit.html +++ b/ruoyi-admin/src/main/resources/templates/network/netIpAddress/edit.html @@ -1,61 +1,82 @@ - + - + -
        -
        - -
        - -
        - -
        -
        -
        - -
        - -
        -
        -
        - -
        - -
        -
        -
        - -
        - -
        -
        -
        - -
        - -
        -
        -
        -
        -
        - +
        +
        + +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        +
        +
        + diff --git a/ruoyi-admin/src/main/resources/templates/network/netIpAddress/netIpAddress.html b/ruoyi-admin/src/main/resources/templates/network/netIpAddress/netIpAddress.html index 1b66f844c..c31e413c6 100644 --- a/ruoyi-admin/src/main/resources/templates/network/netIpAddress/netIpAddress.html +++ b/ruoyi-admin/src/main/resources/templates/network/netIpAddress/netIpAddress.html @@ -1,124 +1,129 @@ - + -
        -
        -
        -
        -
        -
          -
        • - IP地址类型: -
        • +
          +
          +
          + +
          +
            +
          • + IP地址类型: +
          • -
          • - IP地址段: -
          • +
          • + IP地址段: +
          • -
          • - 所属机房编号: -
          • +
          • + 所属机房编号: +
          • -
          • - IP使用规则: -
          • +
          • + IP使用规则: +
          • -
          • - IP地址分配规则: -
          • +
          • + IP地址分配规则: +
          • -
          • -  搜索 -  重置 -
          • -
          -
          - -
          - - -
          -
          -
          -
          -
          -
          - + return actions.join(''); + } + }] + }; + $.table.init(options); + }); + \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/templates/template/tmplSwitch/tmplSwitch.html b/ruoyi-admin/src/main/resources/templates/template/tmplSwitch/tmplSwitch.html index 0c90c4275..c9e8b8959 100644 --- a/ruoyi-admin/src/main/resources/templates/template/tmplSwitch/tmplSwitch.html +++ b/ruoyi-admin/src/main/resources/templates/template/tmplSwitch/tmplSwitch.html @@ -123,7 +123,7 @@ actions.push('删除'); return actions.join(''); } - }) + }); $.table.init(options); }); diff --git a/ruoyi-system/src/main/java/com/ruoyi/network/domain/NetIpAddress.java b/ruoyi-system/src/main/java/com/ruoyi/network/domain/NetIpAddress.java index 6e063a50c..1f3dde7fe 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/network/domain/NetIpAddress.java +++ b/ruoyi-system/src/main/java/com/ruoyi/network/domain/NetIpAddress.java @@ -1,6 +1,7 @@ package com.ruoyi.network.domain; import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.system.domain.SysDictData; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; @@ -11,86 +12,98 @@ import org.apache.commons.lang3.builder.ToStringStyle; * @date 2019-06-15 */ public class NetIpAddress extends BaseEntity { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; - /** - * IP地址编号 - */ - private Integer ipAddressId; - /** - * IP地址类型 - */ - private String ipAddressType; - /** - * IP地址段 - */ - private String ipAddressSection; - /** - * 所属机房编号 - */ - private String machingRoomId; - /** - * IP使用规则 - */ - private String ipUseRule; - /** - * IP地址分配规则 - */ - private String ipAllocRule; + /** + * IP地址编号 + */ + private Integer ipAddressId; + /** + * IP地址类型 + */ + private Integer dictCode; + /** + * IP地址类型 实体关联 + */ + private SysDictData ipAddressType; + /** + * IP地址段 + */ + private String ipAddressSection; + /** + * 所属机房编号 + */ + private Integer machineRoomId; + /** + * IP使用规则 + */ + private String ipUseRule; + /** + * IP地址分配规则 + */ + private String ipAllocRule; - public Integer getIpAddressId() { - return ipAddressId; - } + public Integer getIpAddressId() { + return ipAddressId; + } - public void setIpAddressId(Integer ipAddressId) { - this.ipAddressId = ipAddressId; - } + public void setIpAddressId(Integer ipAddressId) { + this.ipAddressId = ipAddressId; + } - public String getIpAddressType() { - return ipAddressType; - } + public Integer getDictCode() { + return dictCode; + } - public void setIpAddressType(String ipAddressType) { - this.ipAddressType = ipAddressType; - } + public void setDictCode(Integer dictCode) { + this.dictCode = dictCode; + } - public String getIpAddressSection() { - return ipAddressSection; - } + public SysDictData getIpAddressType() { + return ipAddressType; + } - public void setIpAddressSection(String ipAddressSection) { - this.ipAddressSection = ipAddressSection; - } + public void setIpAddressType(SysDictData ipAddressType) { + this.ipAddressType = ipAddressType; + } - public String getMachingRoomId() { - return machingRoomId; - } + public String getIpAddressSection() { + return ipAddressSection; + } - public void setMachingRoomId(String machingRoomId) { - this.machingRoomId = machingRoomId; - } + public void setIpAddressSection(String ipAddressSection) { + this.ipAddressSection = ipAddressSection; + } - public String getIpUseRule() { - return ipUseRule; - } + public Integer getMachineRoomId() { + return machineRoomId; + } - public void setIpUseRule(String ipUseRule) { - this.ipUseRule = ipUseRule; - } + public void setMachineRoomId(Integer machineRoomId) { + this.machineRoomId = machineRoomId; + } - public String getIpAllocRule() { - return ipAllocRule; - } + public String getIpUseRule() { + return ipUseRule; + } - public void setIpAllocRule(String ipAllocRule) { - this.ipAllocRule = ipAllocRule; - } + public void setIpUseRule(String ipUseRule) { + this.ipUseRule = ipUseRule; + } - @Override - public String toString() { - return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).append("ipAddressId", getIpAddressId()) - .append("ipAddressType", getIpAddressType()).append("ipAddressSection", getIpAddressSection()) - .append("machingRoomId", getMachingRoomId()).append("ipUseRule", getIpUseRule()) - .append("ipAllocRule", getIpAllocRule()).toString(); - } + public String getIpAllocRule() { + return ipAllocRule; + } + + public void setIpAllocRule(String ipAllocRule) { + this.ipAllocRule = ipAllocRule; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).append("ipAddressId", getIpAddressId()) + .append("ipAddressType", getIpAddressType()).append("ipAddressSection", getIpAddressSection()) + .append("machineRoomId", getMachineRoomId()).append("ipUseRule", getIpUseRule()) + .append("ipAllocRule", getIpAllocRule()).toString(); + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java index ad251fdea..c55d820f9 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java @@ -1,19 +1,19 @@ package com.ruoyi.system.mapper; -import java.util.List; -import org.apache.ibatis.annotations.Param; import com.ruoyi.system.domain.SysDictData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * 字典表 数据层 - * + * * @author ruoyi */ -public interface SysDictDataMapper -{ +public interface SysDictDataMapper { /** * 根据条件分页查询字典数据 - * + * * @param dictData 字典数据信息 * @return 字典数据集合信息 */ @@ -21,7 +21,7 @@ public interface SysDictDataMapper /** * 根据字典类型查询字典数据 - * + * * @param dictType 字典类型 * @return 字典数据集合信息 */ @@ -29,8 +29,8 @@ public interface SysDictDataMapper /** * 根据字典类型和字典键值查询字典数据信息 - * - * @param dictType 字典类型 + * + * @param dictType 字典类型 * @param dictValue 字典键值 * @return 字典标签 */ @@ -38,7 +38,7 @@ public interface SysDictDataMapper /** * 根据字典数据ID查询信息 - * + * * @param dictCode 字典数据ID * @return 字典数据 */ @@ -46,7 +46,7 @@ public interface SysDictDataMapper /** * 查询字典数据 - * + * * @param dictType 字典类型 * @return 字典数据 */ @@ -54,7 +54,7 @@ public interface SysDictDataMapper /** * 通过字典ID删除字典数据信息 - * + * * @param dictCode 字典数据ID * @return 结果 */ @@ -62,7 +62,7 @@ public interface SysDictDataMapper /** * 批量删除字典数据 - * + * * @param ids 需要删除的数据 * @return 结果 */ @@ -70,7 +70,7 @@ public interface SysDictDataMapper /** * 新增字典数据信息 - * + * * @param dictData 字典数据信息 * @return 结果 */ @@ -78,7 +78,7 @@ public interface SysDictDataMapper /** * 修改字典数据信息 - * + * * @param dictData 字典数据信息 * @return 结果 */ @@ -86,7 +86,7 @@ public interface SysDictDataMapper /** * 同步修改字典类型 - * + * * @param oldDictType 旧字典类型 * @param newDictType 新旧字典类型 * @return 结果 diff --git a/ruoyi-system/src/main/resources/mapper/network/NetIpAddressMapper.xml b/ruoyi-system/src/main/resources/mapper/network/NetIpAddressMapper.xml index e937cae00..6729a6691 100644 --- a/ruoyi-system/src/main/resources/mapper/network/NetIpAddressMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/network/NetIpAddressMapper.xml @@ -6,62 +6,71 @@ - + - + + + - select ip_address_id, ip_address_type, ip_address_section, maching_room_id, ip_use_rule, ip_alloc_rule from net_ip_address - + select ip_address_id, ip_address_type, ip_address_section, + machine_room_id, + ip_use_rule, ip_alloc_rule from net_ip_address + - and ip_address_id = #{ipAddressId} - and ip_address_type = #{ipAddressType} + and ip_address_type = #{dictCode} and ip_address_section = #{ipAddressSection} - and maching_room_id = #{machingRoomId} + and machine_room_id = #{machineRoomId} and ip_use_rule = #{ipUseRule} and ip_alloc_rule = #{ipAllocRule} - where ip_address_id = #{ipAddressId} - + insert into net_ip_address - ip_address_type, + ip_address_type, ip_address_section, - maching_room_id, + machine_room_id, ip_use_rule, ip_alloc_rule, - #{ipAddressType}, + #{ipAddressType.dictCode}, #{ipAddressSection}, - #{machingRoomId}, + #{machineRoomId}, #{ipUseRule}, - #{ipAllocRule}, + #{ipAllocRule}, update net_ip_address - ip_address_type = #{ipAddressType}, + ip_address_type = #{ipAddressType.dictCode}, ip_address_section = #{ipAddressSection}, - maching_room_id = #{machingRoomId}, + machine_room_id = #{machineRoomId}, ip_use_rule = #{ipUseRule}, ip_alloc_rule = #{ipAllocRule}, @@ -69,12 +78,14 @@ - delete from net_ip_address where ip_address_id = #{ipAddressId} - + delete from + net_ip_address where ip_address_id = #{ipAddressId} + delete from net_ip_address where ip_address_id in - + #{ipAddressId}