| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473 |
- /**
- * 级联选择器模块
- * date:2020-02-08 License By http://easyweb.vip
- */
- layui.define(["jquery"], function (a) {
- var e = layui.jquery;
- 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, 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()
- })
- }
- 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 (i) {
- i.stopPropagation();
- if (e(this).hasClass("ew-cascader-disabled")) {
- return
- }
- g.hide();
- g.setValue(e(this).data("value"))
- })
- }
- 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)
- });
|