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