{"version":3,"file":"use-request.mjs","sources":["../../../../packages/hooks/use-request.ts"],"sourcesContent":["import { ref } from 'vue'\nimport { type Ref } from 'vue'\nimport type { Api, ReqAfter, ReqBefore, Method } from '@el-plus/utils/http'\nimport type { Canceler } from 'axios'\nimport axios from 'axios'\nimport { http } from '@el-plus/utils/http'\ntype UseRequest = (config: {\n  api?: Api\n  method?: Method\n  reqData?: Record<string, unknown>\n  reqParams?: Record<string, unknown>\n  reqBefore?: ReqBefore\n  reqAfter?: ReqAfter\n  cancelToken?: boolean\n  hooks?: {\n    success?: (data: unknown) => void\n    fail?: (error: unknown) => void\n  }\n}) => {\n  loading?: Ref<boolean>\n  requestFn?: (data?: Record<string, unknown>) => Promise<void>\n}\n\nexport const useRequest: UseRequest = ({\n  api,\n  method = 'post',\n  reqData,\n  reqParams,\n  reqBefore,\n  reqAfter,\n  cancelToken,\n  hooks,\n}) => {\n  if (!api) return {}\n  const loading = ref(false)\n  let cancelRequest: Canceler\n  let apiFn\n  if (typeof api === 'string') {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const config: Record<string, any> = {\n      method,\n    }\n    apiFn = (data: Record<string, any> = {}, params?: Record<string, any>) => {\n      if (config.method === 'get') {\n        config.params = data\n      } else {\n        config.data = data\n        config.params = params\n      }\n      config.data = {\n        ...reqData,\n        ...config.data,\n      }\n      config.params = {\n        ...reqParams,\n        ...config.params,\n      }\n      // 替换$query为$searchValue\n      if (config.data.$query) {\n        config.data[config.data.$query] = data.$searchValue\n        delete config.data.$searchValue\n        delete config.data.$query\n      }\n\n      if (reqBefore) {\n        reqBefore(config)\n      }\n      if (cancelToken) {\n        config.cancelToken = new axios.CancelToken(function (cancel) {\n          cancelRequest = cancel\n        })\n      }\n      return http.request(api, config)\n    }\n  } else {\n    apiFn = api\n  }\n  const requestFn = async (data: Record<string, unknown> = {}, params?: Record<string, unknown>) => {\n    if (loading.value && !cancelToken) return\n    loading.value = true\n    try {\n      cancelRequest && cancelRequest()\n      const res = await apiFn(data, params)\n      // 如果api是函数,直接追加success,data\n      if (reqAfter) {\n        reqAfter(res)\n      }\n      if (hooks?.success) {\n        hooks.success(typeof api === 'function' ? res : res.data)\n      }\n      loading.value = false\n\n    } catch (error) {\n      if (hooks?.fail) {\n        hooks.fail(error)\n      }\n      if(axios.isCancel(error)){\n        return\n      }\n      loading.value = false\n    } finally {\n    }\n  }\n  return {\n    loading,\n    requestFn,\n  }\n}\n"],"names":[],"mappings":"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"}