UNPKG

@layui/layui-vue

Version:

a component library for Vue 3 base on layui-vue

97 lines (96 loc) 6.86 kB
import { defineComponent as X, useSlots as Z, computed as v, ref as n, watch as _, provide as $, openBlock as x, createElementBlock as ee, normalizeClass as z, createVNode as h, withCtx as g, createElementVNode as le, mergeProps as P, createSlots as ae, renderList as te, unref as i, createBlock as j, withKeys as M, withModifiers as O } from "vue"; import oe from "../_components/render.js"; import ue from "../dropdown/index2.js"; import ne from "../input/index2.js"; import se from "../tagInput/index2.js"; import { treeReplaceFields as re } from "../tree/constant.js"; import ie from "../tree/index2.js"; import { LayIcon as H } from "@layui/icons-vue"; import { useDebounceFn as de } from "@vueuse/core"; import ce from "./index.hooks.js"; import { LAYUI_TREE_SELECT as pe } from "./useTreeSelect.js"; /* empty css */ import { isArray as me, isValueArray as ve } from "../utils/arrayUtil.js"; const fe = { class: "layui-tree-select-content" }, ze = X({ name: "LayTreeSelect", __name: "index", props: { modelValue: {}, data: {}, size: {}, multiple: { type: Boolean, default: !1 }, allowClear: { type: Boolean, default: !1 }, disabled: { type: Boolean, default: !1 }, placeholder: {}, checkStrictly: { type: Boolean, default: !0 }, collapseTagsTooltip: { type: Boolean, default: !0 }, minCollapsedNum: { default: 3 }, search: { type: Boolean, default: !1 }, searchNodeMethod: { type: Function, default: (b, k) => b.title.includes(k) }, lazy: { type: Boolean }, load: {}, contentClass: {}, contentStyle: { type: [Boolean, null, String, Object, Array] }, replaceFields: {}, defaultExpandAll: { type: Boolean, default: void 0 }, teleportProps: {}, tailNodeIcon: {}, cacheData: {} }, emits: ["update:modelValue", "change", "search"], setup(b, { emit: k }) { const a = b, u = k, T = Z(), { size: A } = ce(a), d = v(() => Object.assign({}, re, a.replaceFields)), f = n(""), N = n(""), C = n([]), c = n(!1), w = n(), V = n(!1), y = n(), Y = v(() => { const e = [], l = (t) => { t.forEach((o) => { e.push(o); const m = o[d.value.children]; ve(m) && l(m); }); }; return l(me(a.data) ? a.data : [a.data]), [...e, ...a.cacheData || []]; }); function B(e) { var t; const { id: l } = d.value; return y.value ? (t = y.value.getFlatTree().value.find((o) => o.id === e)) == null ? void 0 : t.original : Y.value.find((o) => o[l] === e); } const p = n(!1), s = v({ get: () => a.multiple ? "" : a.modelValue, set(e) { a.multiple || a.modelValue === e || (u("update:modelValue", e), p.value && u("change", e)), p.value || (p.value = !0); } }), r = v({ get: () => a.multiple ? a.modelValue : [], set(e) { a.multiple && (u("update:modelValue", e), p.value && u("change", e)), p.value || (p.value = !0); } }); function F() { a.multiple ? u("update:modelValue", []) : u("update:modelValue", ""); } function q() { a.multiple || w.value.hide(); } function G(e) { if (w.value.hide(), a.checkStrictly) u("update:modelValue", r.value.filter((l) => l !== e)); else { const l = function(t) { const o = [], { id: m, children: R } = d.value; function U(S, D) { D.push(S[m]), S[R] && S[R].forEach((W) => { U(W, D); }); } return U(t, o), o; }(B(e)); u("update:modelValue", r.value.filter((t) => !l.includes(t))); } } _(() => [s.value, r.value, a.data], () => { if (a.multiple) try { C.value = r.value.map((e) => { let l = B(e); return l = l ? { label: l.title || l[d.value.title], value: l.id, closable: !l.disabled } : { label: e, value: e, closable: !0 }, l; }); } catch { throw new Error("v-model / model-value is not an array type"); } else { const e = B(s.value); N.value = e ? String(e.title || e[d.value.title]) : ""; } }, { immediate: !0, deep: !0 }); const I = v(() => a.multiple ? r.value.length > 0 : Array.isArray(s.value) ? s.value.length : s.value), K = v(() => I.value ? "" : a.placeholder); function E(e) { V.value || (u("search", e), f.value = e); } function J() { V.value = !0; } function Q(e) { V.value = !1, E(e.target.value); } _(f, de(() => { y.value && y.value.filter(f.value); }, 500)), _(c, () => { c.value || (f.value = ""); }); const L = n(null); return $(pe, { inputEl: L, setInputEl: function(e) { a.search && (L.value = e); } }), (e, l) => (x(), ee("div", { class: z(["layui-tree-select", { "layui-disabled": e.disabled, "has-content": I.value, "has-clear": e.allowClear }]) }, [h(ue, { ref_key: "dropdownRef", ref: w, disabled: e.disabled, "content-class": e.contentClass, "content-style": e.contentStyle, "teleport-props": e.teleportProps, "click-to-close": !1, onShow: l[5] || (l[5] = (t) => c.value = !0), onHide: l[6] || (l[6] = (t) => c.value = !1) }, { content: g(() => [le("div", fe, [h(ie, P({ ref_key: "treeRef", ref: y }, a, { "selected-key": s.value, "onUpdate:selectedKey": l[3] || (l[3] = (t) => s.value = t), "checked-keys": r.value, "onUpdate:checkedKeys": l[4] || (l[4] = (t) => r.value = t), "only-icon-control": !0, "show-checkbox": e.multiple, "replace-fields": d.value, onNodeClick: q }), ae({ _: 2 }, [te(i(T), (t, o) => ({ name: o, fn: g((m) => [h(i(oe), P({ slots: i(T), render: o }, m), null, 16, ["slots", "render"])]) }))]), 1040, ["selected-key", "checked-keys", "show-checkbox", "replace-fields"])])]), default: g(() => [e.multiple ? (x(), j(se, { key: 0, modelValue: C.value, "onUpdate:modelValue": l[0] || (l[0] = (t) => C.value = t), size: i(A), "allow-clear": e.allowClear, placeholder: K.value, "collapse-tags-tooltip": e.collapseTagsTooltip, "min-collapsed-num": e.minCollapsedNum, "disabled-input": !e.search, "input-value": f.value, onInputValueChange: E, onRemove: G, onClear: F, onKeyupCapture: l[1] || (l[1] = M(O(() => { }, ["prevent", "stop"]), ["delete"])), onKeydownCapture: l[2] || (l[2] = M(O(() => { }, ["prevent", "stop"]), ["enter"])) }, { suffix: g(() => [h(i(H), { type: "layui-icon-triangle-d", class: z({ triangle: c.value }) }, null, 8, ["class"])]), _: 1 }, 8, ["modelValue", "size", "allow-clear", "placeholder", "collapse-tags-tooltip", "min-collapsed-num", "disabled-input", "input-value"])) : (x(), j(ne, { key: 1, "model-value": N.value, "allow-clear": e.allowClear, placeholder: K.value, disabled: e.disabled, readonly: !e.search, size: i(A), onClear: F, onInput: E, onCompositionstart: J, onCompositionend: Q }, { suffix: g(() => [h(i(H), { type: "layui-icon-triangle-d", class: z({ triangle: c.value }) }, null, 8, ["class"])]), _: 1 }, 8, ["model-value", "allow-clear", "placeholder", "disabled", "readonly", "size"]))]), _: 1 }, 8, ["disabled", "content-class", "content-style", "teleport-props"])], 2)); } }); export { ze as default };