From 64423bf1176b525ce4a182ebb9e6ef6a355d3d74 Mon Sep 17 00:00:00 2001
From: LSH
Date: 星期日, 10 九月 2023 20:40:54 +0800
Subject: [PATCH] #
---
src/main/webapp/static/layui/lay/modules/cascader/cascader.js | 573 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 572 insertions(+), 1 deletions(-)
diff --git a/src/main/webapp/static/layui/lay/modules/cascader/cascader.js b/src/main/webapp/static/layui/lay/modules/cascader/cascader.js
index 7cd916d..6175aaa 100644
--- a/src/main/webapp/static/layui/lay/modules/cascader/cascader.js
+++ b/src/main/webapp/static/layui/lay/modules/cascader/cascader.js
@@ -1,2 +1,573 @@
/** 绾ц仈閫夋嫨鍣ㄦā鍧� date:2020-03-11 License By http://easyweb.vip */
-layui.define(["jquery"],function(a){var e=layui.jquery;if(e("#ew-css-cascader").length<=0){layui.link(layui.cache.base+"cascader/cascader.css")}var f=[];var b={render:function(q){var E={renderFormat:function(J,i){return J.join(" / ")},clearable:true,clearAllActive:false,disabled:false,trigger:"click",changeOnSelect:false,filterable:false,notFoundText:"娌℃湁鍖归厤鏁版嵁"};q=e.extend(E,q);var B=q.elem;var A=q.data;var F=q.renderFormat;var I=q.clearable;var l=q.clearAllActive;var p=q.disabled;var u=q.trigger;var v=q.changeOnSelect;var s=q.reqData;var n=q.filterable;var m=q.notFoundText;var D=q.reqSearch;var y=q.onChange;var H=q.onVisibleChange;var x=q.itemHeight;var t=true;var h=e(B);if(h.next().hasClass("ew-cascader-group")){h.next().remove();for(var z=0;z<f.length;z++){if(B==f[z].elem){f.splice(z,1);break}}}f.push({elem:B,onVisibleChange:H});h.addClass("ew-cascader-hide");var r='<div class="ew-cascader-group">';r+=' <div class="ew-cascader-input-group">';r+=' <input class="layui-input ew-cascader-input" readonly/>';r+=' <input class="layui-input ew-cascader-input-search"/>';r+=' <i class="layui-icon layui-icon-triangle-d ew-icon-arrow"></i>';r+=' <i class="layui-icon layui-icon-loading-1 layui-anim layui-anim-rotate layui-anim-loop ew-icon-loading"></i>';r+=' <i class="layui-icon layui-icon-close-fill ew-icon-clear"></i>';r+=" </div>";r+=' <div class="ew-cascader-dropdown layui-anim layui-anim-upbit"></div>';r+=' <div class="ew-cascader-search-list"></div>';r+=" </div>";h.after(r);var G=h.next();var o=G.children(".ew-cascader-input-group");var k=o.children(".ew-cascader-input");var C=o.children(".ew-cascader-input-search");var j=G.children(".ew-cascader-dropdown");var w=G.children(".ew-cascader-search-list");k.attr("placeholder",h.attr("placeholder"));p&&k.addClass("layui-disabled");var g={data:A,getData:function(){return A},open:function(){if(G.hasClass("ew-cascader-open")){return}b.hideAll();G.addClass("ew-cascader-open");b.checkWidthPosition(j);b.checkHeightPosition(j);H&&H(true);if(n){o.addClass("show-search");C.focus()}},hide:function(){if(!G.hasClass("ew-cascader-open")){return}G.removeClass("ew-cascader-open");G.removeClass("dropdown-show-top");G.removeClass("dropdown-show-left");b.hideAllSearch();H&&H(false)},removeLoading:function(){G.removeClass("show-loading");j.find(".ew-cascader-dropdown-list-item").removeClass("show-loading")},setDisabled:function(i){p=i;if(i){k.addClass("layui-disabled");g.hide()}else{k.removeClass("layui-disabled")}},getValue:function(){return h.val()},getLabel:function(){return k.val()},setValue:function(J){if(J==undefined||J==null||!J.toString()){k.val("");h.val("");if(l||v){j.children(".ew-cascader-dropdown-list").not(":first").remove();j.find(".ew-cascader-dropdown-list-item").removeClass("active");b.checkWidthPosition(j)}else{j.find(".ew-cascader-dropdown-list-item.is-last").removeClass("active")}o.removeClass("show-clear");return}J=J.toString().split(",");var K=[];function i(Q,O,N,M,P){if(!Q&&O){Q=[];L(O)}else{if(Q&&O&&O.children){L(O.children)}else{G.addClass("show-loading");s(Q,function(R){if(Q){O.children=R}else{A=R;Q=[]}L(R)},O)}}function L(S){for(var R=0;R<S.length;R++){if(S[R].value==M[N]){K[N]=S[R].label;Q[N]=S[R].value;if(N<M.length-1){i(Q,S[R],N+1,M,P)}else{P()}break}}}}i(undefined,A,0,J,function(){G.removeClass("show-loading");k.val(F(K,J));h.val(J.join(","))})}};g.setValue(h.val());o.off("click").on("click",function(J){if(k.hasClass("layui-disabled")){return}if(G.hasClass("show-loading")){return}if(G.hasClass("ew-cascader-open")){if(!n){g.hide()}return}if(t){if(A){t=false;d(j,A,undefined,x);i();g.open()}else{G.addClass("show-loading");s(undefined,function(K){t=false;A=K;d(j,K,undefined,x);G.removeClass("show-loading");g.open()},undefined)}}else{i();g.open()}function i(){var M=h.val().toString();if(M){M=M.split(",");for(var L=0;L<M.length;L++){var K=j.children(".ew-cascader-dropdown-list").eq(L).children('.ew-cascader-dropdown-list-item[data-value="'+M[L]+'"]');if(L==M.length-1){K.addClass("active")}else{K.trigger("click")}}}else{g.setValue()}}});o.children(".ew-icon-arrow").off("click").on("click",function(i){if(G.hasClass("ew-cascader-open")){g.hide();i.stopPropagation()}});j.off("click").on("click",".ew-cascader-dropdown-list-item",function(){var P=e(this);if(P.hasClass("active")){if(P.hasClass("is-last")){g.hide()}return}if(P.hasClass("ew-cascader-disabled")){return}if(P.parent().parent().find(".ew-cascader-dropdown-list-item").hasClass("show-loading")){return}var O=P.data("index").toString();var K=O.split("-");var L=A[parseInt(K[0])],Q=[L.value],N=[L.label];for(var M=1;M<K.length;M++){L=L.children[parseInt(K[M])];Q[M]=L.value;N[M]=L.label}if(L.haveChildren){if(L.children){P.parent().nextAll().remove();b.checkWidthPosition(j);J();d(j,L.children,O,x)}else{P.addClass("show-loading");s(Q,function(i){L.children=i;P.parent().nextAll().remove();b.checkWidthPosition(j);J();d(j,i,O,x);P.removeClass("show-loading")},L)}if(v){J();R()}}else{P.parent().nextAll().remove();J();R();g.hide()}function J(){P.parent().children(".ew-cascader-dropdown-list-item").removeClass("active");P.addClass("active")}function R(){k.val(F(N,Q));h.val(Q.join(","));h.removeClass("layui-form-danger");y&&y(Q,L)}});if(u=="hover"){j.off("mouseenter").on("mouseenter",".ew-cascader-dropdown-list-item",function(){if(!e(this).hasClass("is-last")){e(this).trigger("click")}})}if(I){o.off("mouseenter").on("mouseenter",function(){if(h.val().toString()&&!k.hasClass("layui-disabled")){e(this).addClass("show-clear")}});o.off("mouseleave").on("mouseleave",function(){e(this).removeClass("show-clear")});o.children(".ew-icon-clear").off("click").on("click",function(i){i.stopPropagation();g.setValue();y&&y()})}if(n){C.off("input").on("input",function(){var N=e(this).val();if(!N){G.removeClass("show-search-list");o.removeClass("have-value");return}o.addClass("have-value");if(D){D(N,function(i){c(w,i,m);G.addClass("show-search-list")},A)}else{var M=[],O=[];function J(P,Q,U,S){for(var R=0;R<P.length;R++){var T=P[R];T.__label=Q?Q+" / "+T.label:T.label;T.__value=U?U+","+T.value:T.value;T.__disabled=T.disabled?T.disabled:S;if(T.children&&T.children.length){J(T.children,T.__label,T.__value,T.__disabled);delete T.__label;delete T.__value}else{M.push({label:T.__label,value:T.__value,disabled:T.__disabled})}}}J(A);for(var K=0;K<M.length;K++){var L=M[K];if(L.label.indexOf(N)>-1){L.label=L.label.replace(new RegExp(N,"g"),'<span class="search-keyword">'+N+"</span>");O.push(L)}}c(w,O,m);G.addClass("show-search-list")}});w.off("click").on("click",".ew-cascader-search-list-item",function(O){O.stopPropagation();if(e(this).hasClass("ew-cascader-disabled")){return}var N=e(this).data("value").toString();g.hide();g.setValue(N);var J=N.split(",");var M=g.getData();for(var L=0;L<J.length;L++){for(var K=0;K<M.length;K++){if(M[K].value==J[L]){if(L===J.length-1){M=M[K]}else{M=M[K].children}break}}}y&&y(J,M)})}return g},hideAll:function(){b.hideAllSearch();for(var j=0;j<f.length;j++){var k=f[j].elem;var h=f[j].onVisibleChange;var g=e(k).next();if(g.hasClass("ew-cascader-open")){g.removeClass("ew-cascader-open");g.removeClass("dropdown-show-top");g.removeClass("dropdown-show-left");h&&h(false)}}},hideAllSearch:function(){e(".ew-cascader-input-group").removeClass("show-search");e(".ew-cascader-group").removeClass("show-search-list");e(".ew-cascader-input-group").removeClass("have-value");e(".ew-cascader-input-search").val("")},getPageHeight:function(){return document.documentElement.clientHeight||document.body.clientHeight},getPageWidth:function(){return document.documentElement.clientWidth||document.body.clientWidth},checkWidthPosition:function(g){if(g.offset().left+g.outerWidth()>b.getPageWidth()){g.parent().addClass("dropdown-show-left")}else{g.parent().removeClass("dropdown-show-left")}},checkHeightPosition:function(g){if(g.offset().top+g.outerHeight()>b.getPageHeight()){g.parent().addClass("dropdown-show-top");if(g.offset().top<0){g.parent().removeClass("dropdown-show-top")}}}};b.getCityData=function(h){for(var g=0;g<h.length;g++){h[g].value=h[g].label;if(h[g].children){h[g].children=b.getCityData(h[g].children)}}return h};b.getCity=function(k){for(var h=0;h<k.length;h++){for(var g=0;g<k[h].children.length;g++){delete k[h].children[g].children}}return k};b.getProvince=function(h){for(var g=0;g<h.length;g++){delete h[g].children}return h};var d=function(n,p,o,j){var h=j?' style="height:'+j+';"':"";var g='<div class="ew-cascader-dropdown-list" '+h+">";for(var k=0;k<p.length;k++){var q=p[k];var l=o==undefined?k:(o+"-"+k);if(q.haveChildren==undefined){q.haveChildren=q.children?true:false}var m=q.haveChildren?"":" is-last";q.disabled&&(m+=" ew-cascader-disabled");g+=' <div class="ew-cascader-dropdown-list-item'+m+'" data-index="'+l+'" data-value="'+q.value+'">'+q.label+'<i class="layui-icon layui-icon-right ew-icon-right"></i><i class="layui-icon layui-icon-loading-1 layui-anim layui-anim-rotate layui-anim-loop ew-icon-loading"></i></div>'}g+=" </div>";n.append(g);b.checkWidthPosition(n)};var c=function(m,h,l){var n="";if(h.length==0){n='<div class="ew-cascader-search-list-empty">'+l+"</div>"}else{for(var g=0;g<h.length;g++){var k=h[g];var j=k.disabled?" ew-cascader-disabled":"";n+='<div class="ew-cascader-search-list-item'+j+'" data-value="'+k.value+'">'+k.label+"</div>"}}m.html(n)};e(document).off("click.cascader").on("click.cascader",function(l){try{var m=l.target.className.split(" ");var k=["ew-cascader-group","ew-cascader-input","ew-icon-arrow","ew-cascader-dropdown","ew-cascader-dropdown-list","ew-cascader-dropdown-list-item","ew-icon-right","ew-cascader-input-search","ew-cascader-search-list","ew-cascader-search-list-item"];for(var h in m){for(var g in k){if(m[h]==k[g]){return}}}}catch(l){}b.hideAll()});a("cascader",b)});
+layui.define(['jquery'], function (exports) {
+ var $ = layui.jquery;
+ if ($('#ew-css-cascader').length <= 0) {
+ layui.link(layui.cache.base + 'cascader/cascader.css');
+ }
+ var onVisibleChangeList = []; // 鎵�鏈夊睍寮�鍜屽叧闂洖璋�
+
+ var cascader = {
+ /* 鍒濆鍖� */
+ render: function (param) {
+ // 榛樿鍙傛暟
+ var defaultOptions = {
+ renderFormat: function (labels, values) {
+ return labels.join(' / ');
+ },
+ clearable: true,
+ clearAllActive: false,
+ disabled: false,
+ trigger: 'click',
+ changeOnSelect: false,
+ filterable: false,
+ notFoundText: '娌℃湁鍖归厤鏁版嵁'
+ };
+ param = $.extend(defaultOptions, param);
+ var elem = param.elem; // 鐩爣鍏冪礌
+ var mDataList = param.data; // 鏁版嵁
+ var renderFormat = param.renderFormat; // 閫夋嫨鍚庣敤浜庡睍绀虹殑鍑芥暟
+ var clearable = param.clearable; // 鏄惁鏀寔娓呴櫎
+ var clearAllActive = param.clearAllActive; // 娓呴櫎鎵�鏈夐�変腑
+ var disabled = param.disabled; // 鏄惁绂佺敤
+ var trigger = param.trigger; // 娆$骇鑿滃崟瑙﹀彂鏂瑰紡
+ var changeOnSelect = param.changeOnSelect; // 鏄惁鐐瑰嚮姣忛」閫夐」鍊奸兘鏀瑰彉
+ var reqData = param.reqData; // 鑷畾涔夎幏鍙栨暟鎹殑鏂规硶
+ var filterable = param.filterable; // 鏄惁寮�鍚悳绱�
+ var notFoundText = param.notFoundText; // 鎼滅储鍒楄〃涓虹┖鏃舵樉绀虹殑鍐呭
+ var reqSearch = param.reqSearch; // 鑷畾涔夋悳绱㈢殑鏂规硶
+ var onChange = param.onChange; // 鏁版嵁閫夋嫨瀹屾垚鐨勫洖璋�
+ var onVisibleChange = param.onVisibleChange; // 灞曞紑鍜屽叧闂脊绐楁椂瑙﹀彂
+ var itemHeight = param.itemHeight; // 涓嬫媺鍒楄〃姣忎竴椤归珮搴�
+ var isFirst = true;
+ // 濡傛灉娓叉煋杩囬噸鏂版覆鏌�
+ var $elem = $(elem);
+ if ($elem.next().hasClass('ew-cascader-group')) {
+ $elem.next().remove();
+ for (var i = 0; i < onVisibleChangeList.length; i++) {
+ if (elem == onVisibleChangeList[i].elem) {
+ onVisibleChangeList.splice(i, 1);
+ break;
+ }
+ }
+ }
+ onVisibleChangeList.push({elem: elem, onVisibleChange: onVisibleChange});
+ $elem.addClass('ew-cascader-hide');
+ var htmlStr = '<div class="ew-cascader-group">';
+ htmlStr += ' <div class="ew-cascader-input-group">';
+ htmlStr += ' <input class="layui-input ew-cascader-input" readonly/>';
+ htmlStr += ' <input class="layui-input ew-cascader-input-search"/>';
+ htmlStr += ' <i class="layui-icon layui-icon-triangle-d ew-icon-arrow"></i>';
+ htmlStr += ' <i class="layui-icon layui-icon-loading-1 layui-anim layui-anim-rotate layui-anim-loop ew-icon-loading"></i>';
+ htmlStr += ' <i class="layui-icon layui-icon-close-fill ew-icon-clear"></i>';
+ htmlStr += ' </div>';
+ htmlStr += ' <div class="ew-cascader-dropdown layui-anim layui-anim-upbit"></div>';
+ htmlStr += ' <div class="ew-cascader-search-list"></div>';
+ htmlStr += ' </div>';
+ $elem.after(htmlStr);
+
+ var $cascader = $elem.next();
+ var $inputGroup = $cascader.children('.ew-cascader-input-group');
+ var $input = $inputGroup.children('.ew-cascader-input');
+ var $inputSearch = $inputGroup.children('.ew-cascader-input-search');
+ var $dropdown = $cascader.children('.ew-cascader-dropdown');
+ var $search = $cascader.children('.ew-cascader-search-list');
+
+ $input.attr('placeholder', $elem.attr('placeholder'));
+ disabled && $input.addClass('layui-disabled');
+
+ // 鏋勫缓娓叉煋鍚庣殑瀹炰緥
+ var _instance = {
+ data: mDataList,
+ getData: function () {
+ return mDataList;
+ },
+ /* 灞曞紑 */
+ open: function () {
+ if ($cascader.hasClass('ew-cascader-open')) {
+ return;
+ }
+ cascader.hideAll();
+ $cascader.addClass('ew-cascader-open');
+ cascader.checkWidthPosition($dropdown); // 婧㈠嚭灞忓箷鍒ゆ柇
+ cascader.checkHeightPosition($dropdown); // 婧㈠嚭灞忓箷鍒ゆ柇
+ onVisibleChange && onVisibleChange(true); // 灞曞紑鍥炶皟
+ if (filterable) { // 濡傛灉寮�鍚悳绱㈠姛鑳借杈撳叆妗嗚幏鍙栫劍鐐�
+ $inputGroup.addClass('show-search');
+ $inputSearch.focus();
+ }
+ },
+ /* 鍏抽棴 */
+ hide: function () {
+ if (!$cascader.hasClass('ew-cascader-open')) {
+ return;
+ }
+ $cascader.removeClass('ew-cascader-open');
+ $cascader.removeClass('dropdown-show-top');
+ $cascader.removeClass('dropdown-show-left');
+ cascader.hideAllSearch();
+ onVisibleChange && onVisibleChange(false); // 鍏抽棴鍥炶皟
+ },
+ /* 绉婚櫎鍔犺浇涓殑鐘舵��*/
+ removeLoading: function () {
+ $cascader.removeClass('show-loading');
+ $dropdown.find('.ew-cascader-dropdown-list-item').removeClass('show-loading');
+ },
+ /* 璁剧疆绂佺敤鐘舵�� */
+ setDisabled: function (dis) {
+ disabled = dis;
+ if (dis) {
+ $input.addClass('layui-disabled');
+ _instance.hide();
+ } else {
+ $input.removeClass('layui-disabled');
+ }
+ },
+ /* 鑾峰彇鍊�*/
+ getValue: function () {
+ return $elem.val();
+ },
+ /* 鑾峰彇label */
+ getLabel: function () {
+ return $input.val();
+ },
+ /* 璁剧疆鍊�*/
+ setValue: function (value) {
+ if (value == undefined || value == null || !value.toString()) {
+ $input.val('');
+ $elem.val('');
+ if (clearAllActive || changeOnSelect) { // 娓呴櫎鎵�鏈�
+ $dropdown.children('.ew-cascader-dropdown-list').not(':first').remove();
+ $dropdown.find('.ew-cascader-dropdown-list-item').removeClass('active');
+ cascader.checkWidthPosition($dropdown); // 婧㈠嚭灞忓箷鍒ゆ柇
+ } else { // 浠呮竻闄ゆ渶鍚庝竴椤�
+ $dropdown.find('.ew-cascader-dropdown-list-item.is-last').removeClass('active');
+ }
+ $inputGroup.removeClass('show-clear');
+ return;
+ }
+ value = value.toString().split(',');
+ var labels = [];
+
+ // 閫氳繃閫掑綊鎺у埗寮傛鍔犺浇鍥炴樉榛樿鍊煎搴攍abel鏃剁殑璇锋眰椤哄簭
+ function doReqData(tValues, data, i, values, callback) {
+ if (!tValues && data) {
+ tValues = [];
+ setData(data);
+ } else if (tValues && data && data.children) {
+ setData(data.children);
+ } else { // 鏁版嵁涓嶅瓨鍦ㄦ椂鎵嶅幓璇锋眰鏁版嵁
+ $cascader.addClass('show-loading');
+ reqData(tValues, function (dataList) {
+ if (tValues) {
+ data.children = dataList;
+ } else {
+ mDataList = dataList;
+ tValues = [];
+ }
+ setData(dataList);
+ }, data);
+ }
+
+ function setData(dataList) {
+ for (var j = 0; j < dataList.length; j++) {
+ if (dataList[j].value == values[i]) {
+ labels[i] = dataList[j].label;
+ tValues[i] = dataList[j].value;
+ if (i < values.length - 1) {
+ doReqData(tValues, dataList[j], i + 1, values, callback);
+ } else {
+ callback();
+ }
+ break;
+ }
+ }
+ }
+ }
+
+ doReqData(undefined, mDataList, 0, value, function () {
+ $cascader.removeClass('show-loading');
+ $input.val(renderFormat(labels, value));
+ $elem.val(value.join(','));
+ });
+ }
+ };
+
+ // 鍥炴樉鍒濆鍊�
+ _instance.setValue($elem.val());
+
+ // 鐐瑰嚮灞曞紑/鍏抽棴涓嬫媺鍒楄〃
+ $inputGroup.off('click').on('click', function (e) {
+ // 鍒ゆ柇鏄惁鏄鐢ㄧ姸鎬�
+ if ($input.hasClass('layui-disabled')) {
+ return;
+ }
+ // 鍒ゆ柇鏄惁鏄姞杞戒腑鐘舵��
+ if ($cascader.hasClass('show-loading')) {
+ return;
+ }
+ // 鍏抽棴
+ if ($cascader.hasClass('ew-cascader-open')) {
+ if (!filterable) { // 鏄惁寮�鍚悳绱㈠姛鑳�
+ _instance.hide();
+ }
+ return;
+ }
+ // 灞曞紑
+ if (isFirst) { // 绗竴娆″睍寮�娓叉煋绗竴鍒楁暟鎹�
+ if (mDataList) {
+ isFirst = false;
+ renderList($dropdown, mDataList, undefined, itemHeight);
+ initLabel();
+ _instance.open();
+ } else { // 寮傛鏂瑰紡
+ $cascader.addClass('show-loading');
+ reqData(undefined, function (dataList) {
+ isFirst = false;
+ mDataList = dataList;
+ renderList($dropdown, dataList, undefined, itemHeight);
+ $cascader.removeClass('show-loading');
+ _instance.open();
+ }, undefined);
+ }
+ } else {
+ initLabel();
+ _instance.open();
+ }
+
+ // 鍥炴樉涓婃閫変腑椤�
+ function initLabel() {
+ var value = $elem.val().toString();
+ if (value) {
+ value = value.split(',');
+ for (var i = 0; i < value.length; i++) {
+ var $item = $dropdown.children('.ew-cascader-dropdown-list').eq(i).children('.ew-cascader-dropdown-list-item[data-value="' + value[i] + '"]');
+ if (i == value.length - 1) {
+ $item.addClass('active');
+ } else {
+ $item.trigger('click');
+ }
+ }
+ } else {
+ _instance.setValue();
+ }
+ }
+ });
+ $inputGroup.children('.ew-icon-arrow').off('click').on('click', function (e) {
+ if ($cascader.hasClass('ew-cascader-open')) {
+ _instance.hide();
+ e.stopPropagation();
+ }
+ });
+
+ // 鐐瑰嚮娓叉煋娆$骇鍒楄〃
+ $dropdown.off('click').on('click', '.ew-cascader-dropdown-list-item', function () {
+ var $this = $(this);
+ // 闃叉閲嶅鐐瑰嚮
+ if ($this.hasClass('active')) {
+ if ($this.hasClass('is-last')) {
+ _instance.hide();
+ }
+ return;
+ }
+ // 鍒ゆ柇鏄惁鏄鐢ㄧ姸鎬�
+ if ($this.hasClass('ew-cascader-disabled')) {
+ return;
+ }
+ // 鍒ゆ柇鏄惁鏄姞杞戒腑鐘舵��
+ if ($this.parent().parent().find('.ew-cascader-dropdown-list-item').hasClass('show-loading')) {
+ return;
+ }
+ var index = $this.data('index').toString();
+ var indexList = index.split('-');
+ var data = mDataList[parseInt(indexList[0])], values = [data.value], labels = [data.label];
+ for (var i = 1; i < indexList.length; i++) {
+ data = data.children[parseInt(indexList[i])];
+ values[i] = data.value;
+ labels[i] = data.label;
+ }
+ if (data.haveChildren) { // 闈炴渶鍚庝竴椤�
+ if (data.children) { // 鏁版嵁鏂瑰紡鎴栧凡缁忓紓姝ュ姞杞界洿鎺ユ覆鏌�
+ $this.parent().nextAll().remove();
+ cascader.checkWidthPosition($dropdown); // 妫�鏌ユ槸鍚︽孩鍑哄睆骞�
+ activeThis();
+ renderList($dropdown, data.children, index, itemHeight);
+ } else { // 寮傛鏂瑰紡鍏堣姹傛暟鎹啀娓叉煋
+ $this.addClass('show-loading');
+ reqData(values, function (dataList) {
+ data.children = dataList;
+ $this.parent().nextAll().remove();
+ cascader.checkWidthPosition($dropdown); // 妫�鏌ユ槸鍚︽孩鍑哄睆骞�
+ activeThis();
+ renderList($dropdown, dataList, index, itemHeight);
+ $this.removeClass('show-loading');
+ }, data);
+ }
+ // 鐐瑰嚮闈炴渶鍚庝竴椤逛篃瑙﹀彂閫変腑
+ if (changeOnSelect) {
+ activeThis();
+ doChange();
+ }
+ } else { // 鏈�鍚庝竴椤�
+ $this.parent().nextAll().remove();
+ activeThis();
+ doChange();
+ _instance.hide(); // 閫変腑鍚庡叧闂�
+ }
+
+ /* 閫変腑褰撳墠 */
+ function activeThis() {
+ $this.parent().children('.ew-cascader-dropdown-list-item').removeClass('active');
+ $this.addClass('active');
+ }
+
+ /* 瑙﹀彂閫変腑鍥炶皟 */
+ function doChange() {
+ $input.val(renderFormat(labels, values)); // 璧嬪�糽abel
+ $elem.val(values.join(',')); // 璧嬪�紇alue
+ $elem.removeClass('layui-form-danger'); // 绉婚櫎琛ㄥ崟楠岃瘉
+ onChange && onChange(values, data); // 閫変腑鍥炶皟
+ }
+ });
+
+ // hover鏂瑰紡瑙﹀彂
+ if (trigger == 'hover') {
+ $dropdown.off('mouseenter').on('mouseenter', '.ew-cascader-dropdown-list-item', function () {
+ if (!$(this).hasClass('is-last')) {
+ $(this).trigger('click');
+ }
+ });
+ }
+
+ // 寮�鍚竻闄ゅ姛鑳�
+ if (clearable) {
+ $inputGroup.off('mouseenter').on('mouseenter', function () {
+ if ($elem.val().toString() && !$input.hasClass('layui-disabled')) {
+ $(this).addClass('show-clear');
+ }
+ });
+ $inputGroup.off('mouseleave').on('mouseleave', function () {
+ $(this).removeClass('show-clear');
+ });
+ // 鐐瑰嚮娓呴櫎
+ $inputGroup.children('.ew-icon-clear').off('click').on('click', function (e) {
+ e.stopPropagation();
+ _instance.setValue();
+ onChange && onChange(); // 閫変腑鍥炶皟
+ });
+ }
+
+ // 寮�鍚悳绱㈠姛鑳�
+ if (filterable) {
+ $inputSearch.off('input').on('input', function () {
+ var value = $(this).val();
+ if (!value) {
+ $cascader.removeClass('show-search-list');
+ $inputGroup.removeClass('have-value');
+ return;
+ }
+ $inputGroup.addClass('have-value');
+ if (reqSearch) { // 寮傛鎼滅储
+ reqSearch(value, function (rsList) {
+ // 娓叉煋鎼滅储缁撴灉
+ renderSearchList($search, rsList, notFoundText);
+ $cascader.addClass('show-search-list');
+ }, mDataList);
+ } else { // 鍓嶇鎼滅储
+ var allList = [], rsList = [];
+
+ // 鎶婃爲褰ist杞竴缁磍ist
+ function toAllList(arr, label, value, disabled) {
+ for (var i = 0; i < arr.length; i++) {
+ var item = arr[i];
+ item.__label = label ? label + ' / ' + item.label : item.label;
+ item.__value = value ? value + ',' + item.value : item.value;
+ item.__disabled = item.disabled ? item.disabled : disabled;
+
+ if (item.children && item.children.length) {
+ toAllList(item.children, item.__label, item.__value, item.__disabled);
+ delete item.__label;
+ delete item.__value;
+ } else {
+ allList.push({
+ label: item.__label,
+ value: item.__value,
+ disabled: item.__disabled
+ });
+ }
+ }
+ }
+
+ toAllList(mDataList);
+
+ // 杩囨护鏁版嵁
+ for (var i = 0; i < allList.length; i++) {
+ var item = allList[i];
+ if (item.label.indexOf(value) > -1) {
+ item.label = item.label.replace(new RegExp(value, 'g'), '<span class="search-keyword">' + value + '</span>');
+ rsList.push(item);
+ }
+ }
+ // 娓叉煋鎼滅储缁撴灉
+ renderSearchList($search, rsList, notFoundText);
+ $cascader.addClass('show-search-list');
+ }
+ });
+ $search.off('click').on('click', '.ew-cascader-search-list-item', function (e) {
+ e.stopPropagation();
+ if ($(this).hasClass('ew-cascader-disabled')) { // 鏄惁绂佺敤
+ return;
+ }
+ var value = $(this).data('value').toString();
+ _instance.hide();
+ _instance.setValue(value);
+ var values = value.split(',');
+ var data = _instance.getData();
+ for (var i = 0; i < values.length; i++) {
+ for (var j = 0; j < data.length; j++) {
+ if (data[j].value == values[i]) {
+ if (i === values.length - 1) {
+ data = data[j];
+ } else {
+ data = data[j].children;
+ }
+ break;
+ }
+ }
+ }
+ onChange && onChange(values, data); // 閫変腑鍥炶皟
+ });
+ }
+
+ return _instance;
+ },
+ /** 鍏抽棴鎵�鏈� */
+ hideAll: function () {
+ cascader.hideAllSearch();
+ for (var i = 0; i < onVisibleChangeList.length; i++) {
+ var elem = onVisibleChangeList[i].elem;
+ var onVisibleChange = onVisibleChangeList[i].onVisibleChange;
+ var $cascader = $(elem).next();
+ if ($cascader.hasClass('ew-cascader-open')) {
+ $cascader.removeClass('ew-cascader-open');
+ $cascader.removeClass('dropdown-show-top');
+ $cascader.removeClass('dropdown-show-left');
+ onVisibleChange && onVisibleChange(false);
+ }
+ }
+ },
+ /** 鍏抽棴鎵�鏈夋悳绱㈤潰鏉� */
+ hideAllSearch: function () {
+ $('.ew-cascader-input-group').removeClass('show-search');
+ $('.ew-cascader-group').removeClass('show-search-list');
+ $('.ew-cascader-input-group').removeClass('have-value');
+ $('.ew-cascader-input-search').val('');
+ },
+ /* 鑾峰彇娴忚鍣ㄩ珮搴� */
+ getPageHeight: function () {
+ return document.documentElement.clientHeight || document.body.clientHeight;
+ },
+ /* 鑾峰彇娴忚鍣ㄥ搴� */
+ getPageWidth: function () {
+ return document.documentElement.clientWidth || document.body.clientWidth;
+ },
+ /* 妫�鏌ュ搴︽槸鍚︽孩鍑哄睆骞� */
+ checkWidthPosition: function ($dropdown) {
+ if ($dropdown.offset().left + $dropdown.outerWidth() > cascader.getPageWidth()) {
+ $dropdown.parent().addClass('dropdown-show-left');
+ } else {
+ $dropdown.parent().removeClass('dropdown-show-left');
+ }
+ },
+ /* 妫�鏌ラ珮搴︽槸鍚︽孩鍑哄睆骞� */
+ checkHeightPosition: function ($dropdown) {
+ if ($dropdown.offset().top + $dropdown.outerHeight() > cascader.getPageHeight()) {
+ $dropdown.parent().addClass('dropdown-show-top');
+ if ($dropdown.offset().top < 0) {
+ $dropdown.parent().removeClass('dropdown-show-top');
+ }
+ }
+ }
+ };
+
+ /* 澶勭悊鐪佸競鍖烘暟鎹紝value鍙樹腑鏂� */
+ cascader.getCityData = function (data) {
+ for (var i = 0; i < data.length; i++) {
+ data[i].value = data[i].label;
+ if (data[i].children) {
+ data[i].children = cascader.getCityData(data[i].children);
+ }
+ }
+ return data;
+ };
+
+ /* 澶勭悊鐪佸競鍖烘暟鎹紝涓嶈鍖哄煙 */
+ cascader.getCity = function (data) {
+ for (var i = 0; i < data.length; i++) {
+ for (var j = 0; j < data[i].children.length; j++) {
+ delete data[i].children[j].children;
+ }
+ }
+ return data;
+ };
+
+ /* 澶勭悊鐪佸競鍖烘暟鎹紝鍙鐪� */
+ cascader.getProvince = function (data) {
+ for (var i = 0; i < data.length; i++) {
+ delete data[i].children;
+ }
+ return data;
+ };
+
+ /** 娓叉煋鍒楄〃 */
+ var renderList = function ($dropdown, dataList, pIndex, itemHeight) {
+ var style = itemHeight ? ' style="height:' + itemHeight + ';"' : '';
+ var htmlStr = '<div class="ew-cascader-dropdown-list" ' + style + '>';
+ for (var i = 0; i < dataList.length; i++) {
+ var item = dataList[i];
+ var index = pIndex == undefined ? i : (pIndex + '-' + i);
+ if (item.haveChildren == undefined) {
+ item.haveChildren = item.children ? true : false;
+ }
+ var className = item.haveChildren ? '' : ' is-last'; // 鏄惁鏄彾瀛愯妭鐐�
+ item.disabled && (className += ' ew-cascader-disabled'); // 鏄惁绂佺敤
+ htmlStr += ' <div class="ew-cascader-dropdown-list-item' + className + '" data-index="' + index + '" data-value="' + item.value + '">' + item.label + '<i class="layui-icon layui-icon-right ew-icon-right"></i><i class="layui-icon layui-icon-loading-1 layui-anim layui-anim-rotate layui-anim-loop ew-icon-loading"></i></div>';
+ }
+ htmlStr += ' </div>';
+ $dropdown.append(htmlStr);
+ cascader.checkWidthPosition($dropdown); // 妫�鏌ユ槸鍚︽孩鍑哄睆骞�
+ };
+
+ /** 娓叉煋鎼滅储鍒楄〃 */
+ var renderSearchList = function ($search, dataList, notFoundText) {
+ var htmlStr = '';
+ if (dataList.length == 0) {
+ htmlStr = '<div class="ew-cascader-search-list-empty">' + notFoundText + '</div>';
+ } else {
+ for (var i = 0; i < dataList.length; i++) {
+ var item = dataList[i];
+ var className = item.disabled ? ' ew-cascader-disabled' : ''; // 鏄惁绂佺敤
+ htmlStr += '<div class="ew-cascader-search-list-item' + className + '" data-value="' + item.value + '">' + item.label + '</div>';
+ }
+ }
+ $search.html(htmlStr);
+ };
+
+ // 鐐瑰嚮绌虹櫧鍖哄煙鍏抽棴涓嬫媺鍒楄〃
+ $(document).off('click.cascader').on('click.cascader', function (e) {
+ try {
+ var classNames = e.target.className.split(' ');
+ var cascaders = ['ew-cascader-group', 'ew-cascader-input', 'ew-icon-arrow', 'ew-cascader-dropdown', 'ew-cascader-dropdown-list', 'ew-cascader-dropdown-list-item', 'ew-icon-right', 'ew-cascader-input-search', 'ew-cascader-search-list', 'ew-cascader-search-list-item'];
+ for (var i in classNames) {
+ for (var j in cascaders) {
+ if (classNames[i] == cascaders[j]) {
+ return;
+ }
+ }
+ }
+ } catch (e) {
+ }
+ cascader.hideAll();
+ });
+
+ exports('cascader', cascader);
+});
--
Gitblit v1.9.1