|
@@ -0,0 +1,85 @@
|
|
|
+import axios, { AxiosResponse, AxiosInstance, AxiosError } from 'axios'
|
|
|
+import { ElMessage, ElMessageBox, ElNotification } from 'element-plus'
|
|
|
+type _config = {
|
|
|
+ base_url: string
|
|
|
+ result_code: number | string
|
|
|
+ default_headers: AxiosHeaders
|
|
|
+ request_timeout: number
|
|
|
+}
|
|
|
+const config: _config = {
|
|
|
+ /**
|
|
|
+ * api请求基础路径
|
|
|
+ */
|
|
|
+ base_url: import.meta.env.VITE_BASE_URL,
|
|
|
+ /**
|
|
|
+ * 接口成功返回状态码
|
|
|
+ */
|
|
|
+ result_code: 200,
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 接口请求超时时间
|
|
|
+ */
|
|
|
+ request_timeout: 30000,
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 默认接口请求类型
|
|
|
+ * 可选值:application/x-www-form-urlencoded multipart/form-data
|
|
|
+ */
|
|
|
+ default_headers: 'application/json'
|
|
|
+}
|
|
|
+
|
|
|
+const axiosInstance: AxiosInstance = axios.create({
|
|
|
+ baseURL: config.base_url,
|
|
|
+ timeout: config.request_timeout
|
|
|
+})
|
|
|
+
|
|
|
+axiosInstance.interceptors.response.use(
|
|
|
+ async (response: AxiosResponse<any>) => {
|
|
|
+ const { data } = response
|
|
|
+ const code = data.code
|
|
|
+ const msg = data.msg
|
|
|
+ if (code !== 200) {
|
|
|
+ ElNotification.error({ title: msg })
|
|
|
+ return Promise.reject(data)
|
|
|
+ }
|
|
|
+ return Promise.resolve(data)
|
|
|
+ },
|
|
|
+ (error: AxiosError) => {
|
|
|
+ let { message } = error
|
|
|
+ const { t } = useI18n()
|
|
|
+ if (message === 'Network Error') {
|
|
|
+ message = t('sys.api.errorMessage')
|
|
|
+ } else if (message.includes('timeout')) {
|
|
|
+ message = t('sys.api.apiTimeoutMessage')
|
|
|
+ } else if (message.includes('Request failed with status code')) {
|
|
|
+ message = t('sys.api.apiRequestFailed') + message.substr(message.length - 3)
|
|
|
+ }
|
|
|
+ ElMessage.error(message)
|
|
|
+ return Promise.reject(error)
|
|
|
+ }
|
|
|
+)
|
|
|
+const request = (option: any) => {
|
|
|
+ const { url, method, params, data, headersType, responseType, ...config } = option
|
|
|
+ return axiosInstance({
|
|
|
+ url: url,
|
|
|
+ method,
|
|
|
+ params,
|
|
|
+ data,
|
|
|
+ ...config,
|
|
|
+ responseType: responseType,
|
|
|
+ headers: {
|
|
|
+ 'Content-Type': headersType || config.default_headers
|
|
|
+ }
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+export default {
|
|
|
+ get: async <T = any>(option: any) => {
|
|
|
+ const res = await request({ method: 'GET', ...option })
|
|
|
+ return res.data as unknown as T
|
|
|
+ },
|
|
|
+ post: async <T = any>(option: any) => {
|
|
|
+ const res = await request({ method: 'POST', ...option })
|
|
|
+ return res.data as unknown as T
|
|
|
+ },
|
|
|
+}
|