@layui/layui-vue
Version:
a component library for Vue 3 base on layui-vue
58 lines (57 loc) • 5.62 kB
JavaScript
import { defineComponent as X, inject as Y, useSlots as q, ref as J, computed as Q, openBlock as i, createElementBlock as r, normalizeStyle as W, unref as u, Fragment as S, renderList as G, normalizeClass as N, createVNode as Z, withCtx as ee, withModifiers as ae, renderSlot as T, createElementVNode as le, createBlock as g, createCommentVNode as b, createTextVNode as te, toDisplayString as ie } from "vue";
import { LayIcon as w } from "@layui/icons-vue";
import ue from "../radio/index2.js";
import oe from "../checkboxV2/index2.js";
import ne from "../scroll/index2.js";
import de from "../empty/index2.js";
import ce from "./index.hook.js";
/* empty css */
import { FLUSH_SIGNAL as d } from "./interface.js";
import { CASCADER_CONTEXT_KEY as se } from "../cascader/cascader.js";
const re = { key: 0, class: "layui-cascader-panel-container" }, me = ["onClick", "title"], pe = { class: "layui-cascader-panel-selection" }, Ie = X({ name: "LayCascaderPanel", __name: "index", props: { options: { default: () => [] }, modelValue: { default: () => [] }, decollator: { default: () => "/" }, replaceFields: { default: () => ({ label: "label", value: "value", children: "children" }) }, style: { default: () => ({ stripe: !1, loadingTheme: "" }) }, multiple: { type: Boolean, default: !1 }, onlyLastLevel: { type: Boolean, default: !1 }, lazy: { type: Boolean, default: !1 }, load: { type: Function, default: void 0 }, alwaysLazy: { type: Boolean, default: !1 }, value: {}, height: { default: "200px" }, checkStrictly: { type: Boolean, default: !1 }, changeOnSelect: { type: Boolean, default: !1 }, fullpath: { type: Boolean, default: !0 } }, emits: ["update:modelValue", "update:multipleSelectItem", "change"], setup(M, { emit: _ }) {
var x;
const k = _, o = M, { dataSource: L, sanitizer: H, multiple: p, checkStrictly: V, multipleSelectItem: h, alwaysLazy: P, loadingTheme: F, selectKeys: I, showKeys: m, flatData: D, changeOnSelect: K, buildMultipleStatus: O, modelValue: B } = (Y(se) || null) ?? ce(o), $ = q(), j = J((x = o.style) == null ? void 0 : x.stripe), U = Q(() => typeof o.height == "number" ? `${o.height}px` : o.height ?? "200px"), y = (a) => {
switch (a) {
case d.CHANGE:
k("change", m.value);
break;
case d.SINGLE:
k("update:modelValue", I.value);
break;
case d.MULTIPLE:
O(), k("update:multipleSelectItem", h.value), k("update:modelValue", Array.from(h.value.keys()));
}
}, z = (a) => {
var n;
p.value && (!((n = a.children) != null && n.length) || V.value ? a.checked ? h.value.set(a.value, a) : h.value.delete(a.value) : a.children.forEach((t) => {
t.checked = a.checked, z(t);
}));
}, A = (a, n) => {
var t;
R(a, n), K.value && y(d.CHANGE), o.lazy && o.load ? ((l) => {
var e, E;
!P.value && ((e = l.children) != null && e.length) || (l.loading = !0, (E = o.load) == null || E.call(o, l, (c) => {
var s;
l.children = [], c || (c = []), l.children = H(c, l), l.orig.children = c, l.loading = !1, (s = l.children) != null && s.length ? B.value instanceof Array && B.value.forEach((v) => {
const f = D.value.find((C) => C.value === v);
f ? (f.checked = !0, h.value.set(v, f)) : h.value.delete(v);
}) : (I.value = m.value, y(p.value ? d.MULTIPLE : d.SINGLE));
}));
})(a) : (t = a.children) != null && t.length && !V.value || (I.value = m.value, y(p.value ? d.MULTIPLE : d.SINGLE));
}, R = (a, n) => {
if (a.disabled)
return;
let t = m.value;
for (n < t.length && (t = t.filter((l, e) => e <= n)); t.length <= n; )
t.push(p.value ? a.value : "");
m.value = t, m.value[n] = a.value;
};
return (a, n) => (i(), r("div", { class: "layui-cascader-panel", style: W({ height: U.value, minHeight: U.value }) }, [u(L) && u(L).length ? (i(), r("div", re, [(i(!0), r(S, null, G(u(L), (t, l) => (i(), r("ul", { class: N(["layui-cascader-panel-list", [{ "layui-cascader-panel-list-striped": j.value }]]), key: l }, [Z(ne, null, { default: ee(() => [(i(!0), r(S, null, G(t, (e, E) => (i(), r("li", { class: N(["layui-cascader-panel-item", [{ "layui-cascader-panel-item-active": e.value === u(m).at(l), "layui-cascader-panel-item-disabled": e.disabled }]]), key: E, onClick: ae((c) => A(e, l), ["stop"]), title: e.label }, [T(a.$slots, "default", {}, () => [le("div", pe, [u(V) || u(p) ? (i(), r(S, { key: 0 }, [u(p) ? e.loading ? b("", !0) : (i(), g(oe, { key: 1, size: "md", skin: "primary", modelValue: e.checked, "onUpdate:modelValue": [(c) => e.checked = c, (c) => ((s) => {
z(s), y(d.MULTIPLE);
})(e)], value: e.checked ? 1 : 0, isIndeterminate: e.indeterminate }, null, 8, ["modelValue", "onUpdate:modelValue", "value", "isIndeterminate"])) : (i(), g(ue, { key: 0, value: !e.selected, "onUpdate:modelValue": (c) => ((s, v) => {
L.value.forEach((f) => f.forEach((C) => C.selected = !1)), s.selected = !s.selected, A(s, v), y(d.CHANGE);
})(e, l) }, null, 8, ["value", "onUpdate:modelValue"]))], 64)) : b("", !0), e.slot && u($)[e.slot] ? T(a.$slots, e.slot, { key: 1 }) : (i(), r(S, { key: 2 }, [te(ie(e.label), 1)], 64))]), e.loading ? (i(), g(u(w), { key: 0, class: N(["layui-cascader-panel-item-icon", "layui-anim", "layui-anim-rotate", "layui-anim-loop"]), type: "layui-icon-loading", theme: u(F) }, null, 8, ["theme"])) : e.children && e.children.length ? (i(), g(u(w), { key: 1, class: "layui-cascader-panel-item-icon", type: "layui-icon-right" })) : b("", !0)])], 10, me))), 128))]), _: 2 }, 1024)], 2))), 128))])) : (i(), g(de, { key: 1 }))], 4));
} });
export {
Ie as default
};