@layui/layui-vue
Version:
a component library for Vue 3 base on layui-vue
76 lines (75 loc) • 8.62 kB
JavaScript
import { defineComponent as se, provide as de, computed as T, useSlots as ie, ref as s, watch as j, nextTick as re, openBlock as n, createElementBlock as V, unref as y, normalizeClass as B, createVNode as C, withCtx as h, withDirectives as R, createSlots as ce, renderList as $, renderSlot as H, createCommentVNode as ne, vShow as P, createElementVNode as ve, Fragment as pe, toDisplayString as me, createBlock as _, withKeys as fe, withModifiers as ye } from "vue";
/* empty css */
import { LayIcon as W } from "@layui/icons-vue";
import he from "../dropdown/index2.js";
import ge from "../input/index2.js";
import be from "../tagInput/index2.js";
import Ve from "../scroll/index2.js";
import Ce from "../empty/index2.js";
import Se from "../cascaderPanel/index2.js";
import ke from "./index.hooks.js";
import { CASCADER_CONTEXT_KEY as we } from "./cascader.js";
import Be from "../cascaderPanel/index.hook.js";
import { isValueArray as xe } from "../utils/arrayUtil.js";
const ze = ["size"], Ke = { key: 0, class: "slot-area" }, Te = { key: 1 }, _e = ["onClick"], He = se({ name: "LayCascader", __name: "index", props: { options: { default: void 0 }, modelValue: { default: "" }, decollator: { default: "/" }, placeholder: { default: "" }, onlyLastLevel: { type: Boolean, default: !1 }, disabled: { type: Boolean, default: !1 }, replaceFields: { default: () => ({ label: "label", value: "value", children: "children" }) }, allowClear: { type: Boolean, default: !1 }, size: {}, trigger: { default: () => ["click"] }, contentClass: {}, contentStyle: { type: [Boolean, null, String, Object, Array] }, changeOnSelect: { type: Boolean, default: !1 }, multiple: { type: Boolean, default: !1 }, lazy: { type: Boolean, default: !1 }, load: { type: Function, default: void 0 }, checkStrictly: { type: Boolean, default: !1 }, fullpath: { type: Boolean, default: !0 }, search: { type: Boolean }, searchMethod: {}, minCollapsedNum: { default: 3 }, collapseTagsTooltip: { type: Boolean, default: !0 }, teleportProps: {} }, emits: ["update:modelValue", "change", "clear"], setup(X, { emit: Y }) {
var A, D, U;
const a = X, E = Be(a);
de(we, E);
const q = T(() => p.value ? xe(a.modelValue) : !!a.modelValue), { size: L } = ke(a), v = Y, N = ie(), S = s(), f = s(!1), g = s(!1), x = s(""), z = s([]), o = T(() => E), G = s(a.options), p = s(a.multiple), K = s(a.decollator), J = s(a.onlyLastLevel), Q = s(a.disabled), F = s(a.checkStrictly), Z = s({ label: ((A = a.replaceFields) == null ? void 0 : A.label) ?? "label", value: ((D = a.replaceFields) == null ? void 0 : D.value) ?? "value", children: ((U = a.replaceFields) == null ? void 0 : U.children) ?? "children" }), u = s(o.value.selectKeys.value), b = T({ get: () => o.value.selectLabel.value, set: (e) => {
} }), ee = s(a.changeOnSelect), I = () => {
o.value.multipleSelectItem.value.forEach((e) => e.checked = e.indeterminate = !1), o.value.buildMultipleStatus(), o.value.multipleSelectItem.value.clear(), o.value.selectKeys.value = [], u.value = [], v("update:modelValue", p.value ? [] : void 0), v("clear");
}, le = (e, t) => {
var c;
let l = e.split(K.value);
const d = l.shift();
let i = o.value.flatData.value.find((r) => r.label === d);
for (; i && l.length; ) {
const r = l.shift();
i = (c = i.children) == null ? void 0 : c.find((k) => k.label === r);
}
i !== void 0 && o.value.selectKeys.value.splice(o.value.selectKeys.value.findIndex((r) => r === i.value), 1), i.checked = i.indeterminate = !1, o.value.multipleSelectItem.value.delete(i.value), o.value.buildMultipleStatus(), u.value = [...u.value.filter((r) => r !== i.value)], v("update:modelValue", u.value), S.value.hide();
}, ae = (e) => {
o.value.selectKeys.value = typeof e == "string" ? e.split(a.decollator) : e, p.value || S.value.hide();
let t = typeof a.modelValue == "string" ? typeof e == "string" ? e : e.join(a.decollator) : e;
v("update:modelValue", t);
}, te = (e) => {
v("update:modelValue", Array.from(e.keys()));
}, ue = (e) => {
v("update:modelValue", e);
}, M = (e, t = !1) => {
let l = e, d = [];
for (; l; )
d.push(t ? l.value : l.label), l = l.parent;
return t ? d.reverse() : d.reverse().join(K.value);
}, O = (e) => {
var t;
g.value = e.length > 0, g.value && (S.value.show(), z.value = (t = e, a.search && a.searchMethod && o.value.sanitizer(a.searchMethod(t), void 0) || o.value.flatData.value.filter((l) => l.label.includes(t))));
};
return j(() => f.value, (e) => {
e || (!p.value && a.search && (o.value.selectKeys.value = [], re(() => {
o.value.selectKeys.value = o.value.showKeys.value = u.value;
})), g.value = !1, x.value = "");
}), j(() => a.modelValue, () => {
o.value.modelValue.value = a.modelValue;
}), (e, t) => (n(), V("div", { size: y(L), class: B([{ "layui-cascader-opend": f.value, "layui-cascader-disabled": e.disabled, "layui-cascader": !0, "layui-cascader-multiple": e.multiple, "has-content": q.value, "has-clear": e.allowClear }]) }, [C(he, { ref_key: "dropdownRef", ref: S, trigger: e.trigger, autoFitMinWidth: !1, disabled: e.disabled, contentClass: e.contentClass, contentStyle: e.contentStyle, onShow: t[5] || (t[5] = (l) => f.value = !0), onHide: t[6] || (t[6] = (l) => f.value = !1) }, { content: h(() => [R(C(Se, { modelValue: u.value, "onUpdate:modelValue": [t[4] || (t[4] = (l) => u.value = l), ae], options: G.value, "replace-fields": Z.value, multiple: p.value, decollator: K.value, "only-last-level": J.value, disabled: Q.value, "check-strictly": F.value, lazy: a.lazy, load: a.load, changeOnSelect: ee.value, fullpath: a.fullpath, onChange: ue, "onUpdate:multipleSelectItem": te }, ce({ _: 2 }, [$(y(N), (l, d) => ({ name: d, fn: h(() => [d != "default" ? H(e.$slots, d, { key: 0 }) : ne("", !0)]) }))]), 1032, ["modelValue", "options", "replace-fields", "multiple", "decollator", "only-last-level", "disabled", "check-strictly", "lazy", "load", "changeOnSelect", "fullpath"]), [[P, !g.value]]), R(ve("div", null, [C(Ve, { height: "200px", class: "layui-cascader-search-result-list" }, { default: h(() => [z.value.length > 0 ? (n(!0), V(pe, { key: 0 }, $(z.value, (l, d) => (n(), V("div", { class: B(["layui-cascader-search-result-item", { "layui-cascader-search-result-item-active": e.multiple ? u.value.includes(l.value) : u.value.at(u.value.length - 1) == l.value }]), key: d, onClick: (i) => ((c) => {
if (p.value)
if (F.value)
u.value.includes(c.value) ? u.value.splice(u.value.indexOf(c.value), 1) : u.value.push(c.value);
else {
const r = [], k = (m) => {
var w;
(w = m.children) != null && w.length ? m.children.forEach((oe) => k(oe)) : r.push(m);
};
k(c), r.forEach((m) => {
u.value.includes(m.value) ? u.value = [...u.value.filter((w) => w !== m.value)] : u.value = [...u.value, m.value];
});
}
else
u.value = M(c, !0);
v("update:modelValue", u.value);
})(l) }, me(M(l)), 11, _e))), 128)) : (n(), _(Ce, { key: 1, class: "layui-cascader-empty" }))]), _: 1 })], 512), [[P, g.value]])]), default: h(() => [y(N).default ? (n(), V("div", Ke, [H(e.$slots, "default")])) : (n(), V("div", Te, [p.value ? (n(), _(be, { key: 1, modelValue: b.value, "onUpdate:modelValue": t[1] || (t[1] = (l) => b.value = l), "input-value": x.value, "onUpdate:inputValue": [t[2] || (t[2] = (l) => x.value = l), O], placeholder: e.placeholder, "allow-clear": e.allowClear, disabled: e.disabled, readonly: !e.search, minCollapsedNum: e.minCollapsedNum, collapseTagsTooltip: e.collapseTagsTooltip, onClear: I, onRemove: le, onKeyupCapture: t[3] || (t[3] = fe(ye(() => {
}, ["prevent", "stop"]), ["delete"])) }, { suffix: h(() => [C(y(W), { class: B({ "is-expand": f.value }), type: "layui-icon-triangle-d" }, null, 8, ["class"])]), _: 1 }, 8, ["modelValue", "input-value", "placeholder", "allow-clear", "disabled", "readonly", "minCollapsedNum", "collapseTagsTooltip"])) : (n(), _(ge, { key: 0, modelValue: b.value, "onUpdate:modelValue": t[0] || (t[0] = (l) => b.value = l), "suffix-icon": "layui-icon-triangle-d", placeholder: e.placeholder, title: b.value, "allow-clear": e.allowClear, disabled: e.disabled, readonly: !e.search, size: y(L), onClear: I, onInput: O }, { suffix: h(() => [C(y(W), { class: B({ "is-expand": f.value }), type: "layui-icon-triangle-d" }, null, 8, ["class"])]), _: 1 }, 8, ["modelValue", "placeholder", "title", "allow-clear", "disabled", "readonly", "size"]))]))]), _: 3 }, 8, ["trigger", "disabled", "contentClass", "contentStyle"])], 10, ze));
} });
export {
He as default
};