|
|
|
@ -46,6 +46,8 @@ interface Props { |
|
|
|
alwaysLoad?: boolean; |
|
|
|
/** 在api请求之前的回调函数 */ |
|
|
|
beforeFetch?: AnyPromiseFunction<any, any>; |
|
|
|
/** 在api请求之前的判断是否允许请求的回调函数 */ |
|
|
|
shouldFetch?: AnyPromiseFunction<any, boolean>; |
|
|
|
/** 在api请求之后的回调函数 */ |
|
|
|
afterFetch?: AnyPromiseFunction<any, any>; |
|
|
|
/** 直接传入选项数据,也作为api返回空数据时的后备数据 */ |
|
|
|
@ -88,6 +90,7 @@ const props = withDefaults(defineProps<Props>(), { |
|
|
|
alwaysLoad: false, |
|
|
|
loadingSlot: '', |
|
|
|
beforeFetch: undefined, |
|
|
|
shouldFetch: undefined, |
|
|
|
afterFetch: undefined, |
|
|
|
modelPropName: 'modelValue', |
|
|
|
api: undefined, |
|
|
|
@ -159,7 +162,7 @@ const bindProps = computed(() => { |
|
|
|
}); |
|
|
|
|
|
|
|
async function fetchApi() { |
|
|
|
const { api, beforeFetch, afterFetch, resultField } = props; |
|
|
|
const { api, beforeFetch, shouldFetch, afterFetch, resultField } = props; |
|
|
|
|
|
|
|
if (!api || !isFunction(api)) { |
|
|
|
return; |
|
|
|
@ -178,6 +181,14 @@ async function fetchApi() { |
|
|
|
if (beforeFetch && isFunction(beforeFetch)) { |
|
|
|
finalParams = (await beforeFetch(cloneDeep(finalParams))) || finalParams; |
|
|
|
} |
|
|
|
// 判断是否需要控制执行中断 |
|
|
|
if ( |
|
|
|
shouldFetch && |
|
|
|
isFunction(shouldFetch) && |
|
|
|
!(await shouldFetch(finalParams)) |
|
|
|
) { |
|
|
|
return; |
|
|
|
} |
|
|
|
let res = await api(finalParams); |
|
|
|
if (afterFetch && isFunction(afterFetch)) { |
|
|
|
res = (await afterFetch(res)) || res; |
|
|
|
|