import axios from './axios' import { AxiosRequestConfig } from 'axios' import { shallowRef, ref } from 'vue' import { IResponse } from './types' function useHttp(config: AxiosRequestConfig) { return axios(config) } export default { get(url: string) { const loading = ref(false) const result = shallowRef | undefined>(undefined) const request = (successCb?: () => any, params?: Record) => { if (loading.value) return loading.value = true axios.get>(url, { params }).then(({ data }) => { result.value = data successCb && successCb() }).finally(() => { loading.value = false }) } return { result, loading, request } }, post(url: string) { const loading = ref(false) const result = shallowRef | undefined>(undefined) const request = (successCb?: () => void, data?: Record) => { if (loading.value) return loading.value = true axios.post>(url, data).then(({ data }) => { result.value = data successCb && successCb() }).finally(() => { loading.value = false }) } return { result, loading, request } }, put(url: string) { const loading = ref(false) const result = shallowRef | undefined>(undefined) const request = (successCb?: () => void, data?: Record) => { if (loading.value) return loading.value = true axios.put>(url, data).then(({ data }) => { result.value = data successCb && successCb() }).finally(() => { loading.value = false }) } return { result, loading, request } }, delete(url: string) { const loading = ref(false) const result = shallowRef | undefined>(undefined) const request = (successCb?: () => void, data?: Record) => { if (loading.value) return loading.value = true axios.delete>(url, { data }).then(({ data }) => { result.value = data successCb && successCb() }).finally(() => { loading.value = false }) } return { result, loading, request } } } export { useHttp }