diff --git a/src/components/Form/src/components/ApiTreeSelect.vue b/src/components/Form/src/components/ApiTreeSelect.vue index dcb2123..fa89eff 100644 --- a/src/components/Form/src/components/ApiTreeSelect.vue +++ b/src/components/Form/src/components/ApiTreeSelect.vue @@ -13,6 +13,7 @@ const props = defineProps({ api: { type: Function as PropType<(arg?: Recordable) => Promise> }, params: { type: Object }, immediate: propTypes.bool.def(true), + async: propTypes.bool.def(false), resultField: propTypes.string.def(''), handleTree: propTypes.string.def(''), parentId: propTypes.number.def(0), @@ -20,7 +21,7 @@ const props = defineProps({ parentFiled: propTypes.string.def('name'), alwaysLoad: propTypes.bool.def(true), }) -const emit = defineEmits(['optionsChange', 'change']) +const emit = defineEmits(['optionsChange', 'change', 'load-data']) const attrs = useAttrs() const treeData = ref([]) @@ -64,6 +65,16 @@ onMounted(() => { props.immediate && fetch() }) +function onLoadData(treeNode) { + return new Promise((resolve: (value?: unknown) => void) => { + if (isArray(treeNode.children) && treeNode.children.length > 0) { + resolve() + return + } + emit('load-data', { treeData, treeNode, resolve }) + }) +} + async function fetch() { const { api } = props if (!api || !isFunction(api)) @@ -102,7 +113,7 @@ async function fetch() {