2
0
mirror of https://github.com/acepanel/panel.git synced 2026-02-04 22:07:16 +08:00
Files
panel/web/src/utils/http/index.ts
2025-02-09 22:06:07 +08:00

68 lines
2.0 KiB
Go

import { resolveResError } from '@/utils/http/helpers'
import type { AlovaXHRResponse } from '@alova/adapter-xhr'
import { xhrRequestAdapter } from '@alova/adapter-xhr'
import { createAlova, Method } from 'alova'
import VueHook from 'alova/vue'
export const http = createAlova({
id: 'panel',
cacheFor: null,
statesHook: VueHook,
requestAdapter: xhrRequestAdapter(),
baseURL: import.meta.env.VITE_BASE_API,
responded: {
onSuccess: async (response: AlovaXHRResponse, method: Method) => {
const ct = response.headers['Content-Type'] || response.headers['content-type']
let json
try {
if (ct && ct.includes('application/json')) {
json = typeof response.data === 'string' ? JSON.parse(response.data) : response.data
} else {
json = { code: response.status, message: response.data }
}
} catch (error) {
json = { code: response.status, message: 'JSON 解析失败' }
}
const { status, statusText } = response
const { meta } = method
if (status !== 200) {
const code = json?.code ?? status
const message = resolveResError(
code,
(typeof json?.message === 'string' && json.message.trim()) || statusText
)
const noAlert = meta?.noAlert
if (!noAlert) {
if (code === 422) {
window.$message.error(message)
} else if (code !== 401) {
window.$dialog.error({
title: '错误',
content: message,
maskClosable: false
})
}
}
throw new Error(message)
}
return json.data
},
onError: (error: any, method: Method) => {
const { code, message } = error
const { meta } = method
const errorMessage = resolveResError(code, message)
const noAlert = meta?.noAlert
if (!noAlert) {
window.$dialog.error({
title: '接口请求失败',
content: errorMessage,
maskClosable: false
})
}
throw error
}
}
})