mirror of
https://github.com/acepanel/panel.git
synced 2026-02-04 22:07:16 +08:00
68 lines
2.0 KiB
Go
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
|
|
}
|
|
}
|
|
})
|