|
@@ -21,7 +21,7 @@
|
|
|
</Select>
|
|
|
</template>
|
|
|
<script lang="ts">
|
|
|
- import { defineComponent, PropType, ref, watchEffect, computed, unref, watch } from 'vue';
|
|
|
+ import { defineComponent, PropType, ref, computed, unref, watch } from 'vue';
|
|
|
import { Select } from 'ant-design-vue';
|
|
|
import { isFunction } from '/@/utils/is';
|
|
|
import { useRuleFormItem } from '/@/hooks/component/useFormItem';
|
|
@@ -61,7 +61,8 @@
|
|
|
setup(props, { emit }) {
|
|
|
const options = ref<OptionsItem[]>([]);
|
|
|
const loading = ref(false);
|
|
|
- const isFirstLoad = ref(true);
|
|
|
+ // 首次是否加载过了
|
|
|
+ const isFirstLoaded = ref(false);
|
|
|
const emitData = ref<any[]>([]);
|
|
|
const attrs = useAttrs();
|
|
|
const { t } = useI18n();
|
|
@@ -86,10 +87,6 @@
|
|
|
return data.length > 0 ? data : props.options;
|
|
|
});
|
|
|
|
|
|
- watchEffect(() => {
|
|
|
- props.immediate && !props.alwaysLoad && fetch();
|
|
|
- });
|
|
|
-
|
|
|
watch(
|
|
|
() => state.value,
|
|
|
(v) => {
|
|
@@ -100,18 +97,19 @@
|
|
|
watch(
|
|
|
() => props.params,
|
|
|
() => {
|
|
|
- !unref(isFirstLoad) && fetch();
|
|
|
+ !unref(isFirstLoaded) && fetch();
|
|
|
},
|
|
|
- { deep: true },
|
|
|
+ { deep: true, immediate: props.immediate },
|
|
|
);
|
|
|
|
|
|
async function fetch() {
|
|
|
const api = props.api;
|
|
|
- if (!api || !isFunction(api)) return;
|
|
|
+ if (!api || !isFunction(api) || loading.value) return;
|
|
|
options.value = [];
|
|
|
try {
|
|
|
loading.value = true;
|
|
|
const res = await api(props.params);
|
|
|
+ isFirstLoaded.value = true;
|
|
|
if (Array.isArray(res)) {
|
|
|
options.value = res;
|
|
|
emitChange();
|
|
@@ -128,13 +126,12 @@
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- async function handleFetch(visible) {
|
|
|
+ async function handleFetch(visible: boolean) {
|
|
|
if (visible) {
|
|
|
if (props.alwaysLoad) {
|
|
|
await fetch();
|
|
|
- } else if (!props.immediate && unref(isFirstLoad)) {
|
|
|
+ } else if (!props.immediate && !unref(isFirstLoaded)) {
|
|
|
await fetch();
|
|
|
- isFirstLoad.value = false;
|
|
|
}
|
|
|
}
|
|
|
}
|