hongluan-business-ui
Version:
Hongluan Business Component Library for Vue 3
1 lines • 7.5 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","sources":["../../../../../../packages/components/tree-selector/src/index.vue"],"sourcesContent":["<template>\n <hl-selector\n ref=\"hlSelector\"\n :popper-class=\"`${prefix}-tree-selector-popper ${popperClass}`\"\n :size=\"size\"\n :disabled=\"disabled\"\n :clearable=\"clearable\"\n :placeholder=\"placeholder\"\n :placement=\"placement\"\n :collapse-tags=\"collapseTags\"\n :filterable=\"filterable\"\n :multiple=\"treeProps.showCheckbox\"\n @resize=\"resizePopper\"\n @input=\"onInput\"\n @clear=\"onClear\"\n @remove-tag=\"removeTag\"\n >\n <template #default>\n <hl-scrollbar\n ref=\"scrollbar\"\n wrap-class=\"selector-dropdown-wrap\"\n view-class=\"selector-dropdown-list\"\n >\n <hl-tree\n ref=\"selectorTree\"\n class=\"selector-tree\"\n node-key=\"id\"\n v-bind=\"treeProps\"\n :style=\"treeStyle\"\n @node-click=\"nodeClick\"\n @check-change=\"checkChange\"\n >\n <template #default=\"{ node, data }\">\n <slot name=\"tree-node\" :node=\"node\" :data=\"data\">\n <span class=\"tree-node-label\">{{ node.label }}</span>\n </slot>\n </template>\n </hl-tree>\n </hl-scrollbar>\n </template>\n <template #tag=\"{ tag }\">\n <slot name=\"tag\" :tag=\"tag\">\n <span v-if=\"tag.key==='-1'\">{{ tag.text }}</span>\n <span v-else>{{ tag.text[propsLabel] }}</span>\n </slot>\n </template>\n <template v-if=\"$slots.prefix\" #prefix>\n <slot name=\"prefix\"></slot>\n </template>\n </hl-selector>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, inject, onMounted, ref, watch } from 'vue'\nimport { HlSelector, HlScrollbar, HlTree, formItemContextKey, FormItemEvents } from 'hongluan-ui'\nimport { usePrefix } from '@hongluan-business-ui/utils/util'\n\nimport type { PropType } from 'vue'\nimport type { FormItemContext } from 'hongluan-ui'\nimport type { Indexable } from '@hongluan-business-ui/utils/types'\nimport type { TreeProps } from './tree.type'\n\nexport default defineComponent({\n name: 'TreeSelector',\n components: {\n HlSelector,\n HlTree,\n HlScrollbar,\n },\n props: {\n modelValue: [Array, String, Number, Object],\n treeProps: Object as PropType<TreeProps>,\n clearable: Boolean,\n placeholder: String,\n placement: String,\n collapseTags: Boolean,\n filterable: Boolean,\n size: {\n type: String,\n default: null,\n },\n popperClass: {\n type: String,\n default: '',\n },\n disabled: Boolean,\n },\n emits: ['update:modelValue', 'change'],\n setup(props, { emit }) {\n const { prefix } = usePrefix()\n const hlSelector = ref(null)\n const selectorTree = ref(null)\n const treeStyle = ref<Indexable<string>>({})\n const propsLabel = computed(() => {\n return props.treeProps.props.label || 'label'\n })\n\n const formItem = inject(formItemContextKey, {} as FormItemContext)\n\n watch(() => props.modelValue, () => {\n setSelected()\n })\n watch(() => props.treeProps.data, () => {\n setSelected()\n })\n\n const valueChange = value => {\n emit('update:modelValue', value)\n emit('change', value)\n formItem.validate?.(FormItemEvents.change)\n }\n const nodeClick = (data, node, component) => {\n const treeProps = props.treeProps\n const children = data[treeProps.props.children]\n const value = data[treeProps.nodeKey]\n if (\n ((children && children.length) ||\n (treeProps.lazy && !data['isLeaf'])) && !treeProps.checkStrictly\n ) {\n component.proxy.handleExpandIconClick()\n } else if (!treeProps.showCheckbox && !data.disabled) {\n if (value !== props.modelValue) {\n valueChange(value)\n }\n hlSelector.value.togglePopperVisible(false)\n }\n }\n const checkChange = () => {\n const leafOnly = !props.treeProps.checkStrictly\n const keys = selectorTree.value.getCheckedKeys(leafOnly)\n valueChange(keys)\n }\n const setSelected = () => {\n if (props.treeProps.showCheckbox && Array.isArray(props.modelValue)) {\n selectorTree.value.setCheckedKeys(props.modelValue)\n const selectedNodes = selectorTree.value.getCheckedNodes(!props.treeProps.checkStrictly)\n hlSelector.value.setValue(selectedNodes)\n } else {\n const selectedNode = selectorTree.value.getNode(props.modelValue)\n hlSelector.value.setValue(selectedNode ? selectedNode.data[propsLabel.value] : '')\n }\n }\n const resizePopper = (inputWrapper: HTMLElement) => {\n treeStyle.value.width = 30 + inputWrapper.offsetWidth + 'px'\n }\n const onInput = val => {\n if (props.filterable) {\n selectorTree.value.filter(val)\n }\n }\n const onClear = () => {\n if (props.filterable) {\n selectorTree.value.filter('')\n }\n selectorTree.value.setCheckedNodes([])\n valueChange(props.treeProps.showCheckbox ? [] : '')\n }\n const removeTag = tag => {\n let treeNodes = selectorTree.value.getCheckedNodes(!props.treeProps.checkStrictly)\n treeNodes = treeNodes.filter(n => n !== tag.text)\n selectorTree.value.setCheckedNodes(treeNodes)\n }\n\n onMounted(() => {\n setSelected()\n })\n\n return {\n prefix,\n hlSelector,\n selectorTree,\n treeStyle,\n propsLabel,\n onInput,\n onClear,\n removeTag,\n nodeClick,\n checkChange,\n resizePopper,\n }\n },\n})\n</script>\n"],"names":["_openBlock"],"mappings":";;;;;AA8DA,MAAK,YAAa,gBAAa;AAAA,EAC7B,MAAM;AAAA,EACN,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA;AAAA,EAEF,OAAO;AAAA,IACL,YAAY,CAAC,OAAO,QAAQ,QAAQ;AAAA,IACpC,WAAW;AAAA,IACX,WAAW;AAAA,IACX,aAAa;AAAA,IACb,WAAW;AAAA,IACX,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA;AAAA,IAEX,aAAa;AAAA,MACX,MAAM;AAAA,MACN,SAAS;AAAA;AAAA,IAEX,UAAU;AAAA;AAAA,EAEZ,OAAO,CAAC,qBAAqB;AAAA,EAC7B,MAAM,OAAO,EAAE,QAAQ;AACrB,UAAM,EAAE,WAAW;AACnB,UAAM,aAAa,IAAI;AACvB,UAAM,eAAe,IAAI;AACzB,UAAM,YAAY,IAAuB;AACzC,UAAM,aAAa,SAAS,MAAM;AAChC,aAAO,MAAM,UAAU,MAAM,SAAS;AAAA;AAGxC,UAAM,WAAW,OAAO,oBAAoB;AAE5C,UAAM,MAAM,MAAM,YAAY,MAAM;AAClC;AAAA;AAEF,UAAM,MAAM,MAAM,UAAU,MAAM,MAAM;AACtC;AAAA;AAGF,UAAM,cAAc,WAAS;AAC3B;AACA,WAAK;AACL,0BAAoB;AAAe;AAErC;AACE;AACA,YAAM;AACN,YAAM,QAAQ;AACd,0CAEK;AAEH;AAAgB,iBACP,CAAC,2BAA2B;AACrC,4BAAoB,YAAY;AAC9B,sBAAY;AAAA;AAEd;AAAqC;AAAA;AAGzC;AACE,wBAAkB,MAAM;AACxB,YAAM,yCAAyC;AAC/C;AAAY;AAEd;AACE,UAAI;AACF,0CAAkC,MAAM;AACxC;AACA;AAA0B;AAE1B;AACA,8DAAsD;AAAyB;AAAA;AAGnF;AACE,sBAAgB;AAAwC;AAE1D;AACE,UAAI;AACF;AAA0B;AAAA;AAG9B;AACE,UAAI;AACF;AAA0B;AAE5B;AACA,kBAAY,MAAM;AAA8B;AAElD;AACE,UAAI,YAAY;AAChB,mCAA6B;AAC7B;AAAmC;AAGrC;AACE;AAAA;AAGF;AAAO;AACL,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA;AAAA;;;;;;;;;AAjIU,SA/CRA;AAAA,IACH;AAAgD,IAChD;AAAM,IACN,UAAU;AAAA,IACV;AAAW,IACX;AAAa,IACb,WAAW;AAAA,IACX;AAAe,IACf;AAAY,IACZ,UAAU;AAAU,IACpB,UAAQ;AAAA,IACR;AAAO,IACP,SAAO;AAAA,IACP,aAAY;AAAA;;AAuBI;AAAA;AAnBT,QACJ;AAAW,QACX,cAAW;AAAA;;AAgBD;AAAA;AAbJ,YACJ;AAAM,YACN;AAAS;AACQ;AACT,YACP;AAAY,YACZ;AAAc;YAEJ;AAAqB;AAGvB;AAFiB,gBAAa;AAAA;AAE9B;AADsC;AAAA;AAAA;;;;;;;AAMhC,iBAIZ;AAAA;AAD8B;AAAA;AAAA;;;;AAGP;AACH,QAA3B;AAA2B;AAAA;;;;;;;;"}