import { isArray } from '~/utils/utils' import useUserStore from '~/stores/user' // import refreshToken from "~/utils/RefreshToken"; type FetchType = typeof $fetch export type FetchOptions = Parameters[1] const useClientRequest = async (url: string, opts?: FetchOptions) => { const token = useCookie('token') const runtimeConfig = useRuntimeConfig() const userStore = useUserStore() const defaultOptions: FetchOptions = { baseURL: runtimeConfig.public.apiBase, onRequest({ options }) { options.headers = options.headers || 'application/json' if (token.value || userStore.token) { options.headers.set('Authorization', `Bearer ${token.value || userStore.token}`) } }, onResponse({ response }) { if (+response.status === 200 && +response._data.code !== 0) { ElMessage.error(response._data.msg) } }, onResponseError({ response }) { ElMessage.error(isArray(response._data.data.msg) ? response._data.data.msg[0] : response._data.data.msg) }, } // 明确转换返回类型 const response = await $fetch(url, { ...defaultOptions, ...opts }) return response as unknown as T } // GET请求 export const get = (endpoint: string, config?: Omit): Promise => { return useClientRequest(endpoint, { ...config, method: 'GET' }) } // POST请求 export const post = (endpoint: string, body?: any, config?: Omit): Promise => { return useClientRequest(endpoint, { ...config, method: 'POST', body }) } // DELETE请求 export const del = (endpoint: string, config?: Omit): Promise => { return useClientRequest(endpoint, { ...config, method: 'DELETE' }) } // PUT请求 export const put = (endpoint: string, body?: any, config?: Omit): Promise => { console.log({ ...config, method: 'PUT', body }) return useClientRequest(endpoint, { ...config, method: 'PUT', body }) }