UNPKG

hongluan-business-ui

Version:
143 lines (140 loc) 4.93 kB
import { defineComponent, ref, computed, normalizeClass, resolveComponent, openBlock, createElementBlock, createElementVNode, toDisplayString, createVNode, withCtx, createCommentVNode, mergeProps, withDirectives, vShow, renderSlot } from 'vue'; import { HlInput, HlTree, HlIcon, SystemSearch, useLocale } from 'hongluan-ui'; import { debounce } from 'lodash-unified'; import _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs'; const _sfc_main = defineComponent({ name: "TreePanel", components: { HlInput, HlTree, HlIcon, SystemSearch, OptionContent: ({ option }) => option }, props: { treeProps: Object, placeholder: String, title: String, filterable: Boolean, optionRender: Function }, emits: ["checked-change"], setup(props, { emit, slots }) { const { t } = useLocale(); const hlTree = ref(null); const query = ref(""); const inputHover = ref(false); const hasFooter = computed(() => !!slots.default()[0].children.length); const showClose = computed(() => { return query.value.length > 0 && inputHover.value ? "show-close" : ""; }); const onInput = debounce((val) => { hlTree.value.filter(val); }, 300); const clearQuery = () => { if (showClose.value === "show-close") { query.value = ""; hlTree.value.filter(""); } }; const callTreeMethod = (name, ...args) => { if (hlTree.value[name]) { return hlTree.value[name](...args); } console.error("tree method don't exist!!"); }; const checkChange = () => { emit("checked-change"); }; return { t, hlTree, query, inputHover, showClose, onInput, clearQuery, hasFooter, checkChange, callTreeMethod }; } }); const _hoisted_1 = { class: /* @__PURE__ */ normalizeClass(["transfer-panel tree-panel"]) }; const _hoisted_2 = { class: "panel-header" }; const _hoisted_3 = { key: 0, class: "panel-filter" }; const _hoisted_4 = { key: 0, class: "panel-footer" }; function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { const _component_system_search = resolveComponent("system-search"); const _component_hl_icon = resolveComponent("hl-icon"); const _component_hl_input = resolveComponent("hl-input"); const _component_option_content = resolveComponent("option-content"); const _component_hl_tree = resolveComponent("hl-tree"); return openBlock(), createElementBlock("div", _hoisted_1, [ createElementVNode("div", _hoisted_2, toDisplayString(_ctx.title), 1), createElementVNode("div", { class: normalizeClass(["panel-body", _ctx.hasFooter ? "is-with-footer" : ""]) }, [ _ctx.filterable ? (openBlock(), createElementBlock("div", _hoisted_3, [ createVNode(_component_hl_input, { modelValue: _ctx.query, "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => _ctx.query = $event), block: "", fill: "", placeholder: _ctx.placeholder, onInput: _ctx.onInput, onMouseenter: _cache[2] || (_cache[2] = ($event) => _ctx.inputHover = true), onMouseleave: _cache[3] || (_cache[3] = ($event) => _ctx.inputHover = false) }, { suffix: withCtx(() => [ createElementVNode("i", { class: normalizeClass(["input-close", _ctx.showClose]), onClick: _cache[0] || (_cache[0] = (...args) => _ctx.clearQuery && _ctx.clearQuery(...args)) }, null, 2) ]), prefix: withCtx(() => [ createVNode(_component_hl_icon, null, { default: withCtx(() => [ createVNode(_component_system_search) ]), _: 1 }) ]), _: 1 }, 8, ["modelValue", "placeholder", "onInput"]) ])) : createCommentVNode("v-if", true), createVNode(_component_hl_tree, mergeProps({ ref: "hlTree", class: "panel-list", "node-key": "id" }, _ctx.treeProps, { "show-checkbox": true, onCheckChange: _ctx.checkChange }), { default: withCtx(({ data }) => [ createVNode(_component_option_content, { option: _ctx.optionRender(data) }, null, 8, ["option"]) ]), _: 1 }, 16, ["onCheckChange"]), withDirectives(createElementVNode("p", { class: "panel-empty" }, toDisplayString(_ctx.t("hl.transfer.noData")), 513), [ [vShow, _ctx.treeProps.data && _ctx.treeProps.data.length === 0] ]) ], 2), _ctx.hasFooter ? (openBlock(), createElementBlock("p", _hoisted_4, [ renderSlot(_ctx.$slots, "default") ])) : createCommentVNode("v-if", true) ]); } var TreePanel = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]); export { TreePanel as default }; //# sourceMappingURL=tree-panel.mjs.map