From 2b3715f1610b4176d7abe33e34542389cef61853 Mon Sep 17 00:00:00 2001 From: zhuguifei <zhuguifei@zhuguifeideiMac.local> Date: 星期六, 12 四月 2025 17:12:22 +0800 Subject: [PATCH] Merge branch 'main' of http://lanpucloud.cn:1111/r/eims-master --- eims-ui-mobile/src/hooks/useRequest.ts | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 44 insertions(+), 0 deletions(-) diff --git a/eims-ui-mobile/src/hooks/useRequest.ts b/eims-ui-mobile/src/hooks/useRequest.ts new file mode 100644 index 0000000..9a0c8e5 --- /dev/null +++ b/eims-ui-mobile/src/hooks/useRequest.ts @@ -0,0 +1,44 @@ +import { UnwrapRef } from 'vue' + +type IUseRequestOptions<T> = { + /** 鏄惁绔嬪嵆鎵ц */ + immediate?: boolean + /** 鍒濆鍖栨暟鎹� */ + initialData?: T +} + +/** + * useRequest鏄竴涓畾鍒跺寲鐨勮姹傞挬瀛愶紝鐢ㄤ簬澶勭悊寮傛璇锋眰鍜屽搷搴斻�� + * @param func 涓�涓墽琛屽紓姝ヨ姹傜殑鍑芥暟锛岃繑鍥炰竴涓寘鍚搷搴旀暟鎹殑Promise銆� + * @param options 鍖呭惈璇锋眰閫夐」鐨勫璞� {immediate, initialData}銆� + * @param options.immediate 鏄惁绔嬪嵆鎵ц璇锋眰锛岄粯璁や负false銆� + * @param options.initialData 鍒濆鍖栨暟鎹紝榛樿涓簎ndefined銆� + * @returns 杩斿洖涓�涓璞loading, error, data, run}锛屽寘鍚姹傜殑鍔犺浇鐘舵�併�侀敊璇俊鎭�佸搷搴旀暟鎹拰鎵嬪姩瑙﹀彂璇锋眰鐨勫嚱鏁般�� + */ +export default function useRequest<T>( + func: () => Promise<IResData<T>>, + options: IUseRequestOptions<T> = { immediate: false }, +) { + const loading = ref(false) + const error = ref(false) + const data = ref<T>(options.initialData) + const run = async () => { + loading.value = true + return func() + .then((res) => { + data.value = res.data as UnwrapRef<T> + error.value = false + return data.value + }) + .catch((err) => { + error.value = err + throw err + }) + .finally(() => { + loading.value = false + }) + } + + options.immediate && run() + return { loading, error, data, run } +} -- Gitblit v1.9.3