同步前端功能修改
This commit is contained in:
+24
-12
@@ -3,6 +3,7 @@ import qs from 'qs'
|
||||
import { getToken, getRefreshToken } from './common'
|
||||
import { useRuntimeConfig, navigateTo, useCookie } from 'nuxt/app'
|
||||
import { useMemberStore } from '~/stores/member'
|
||||
import { decryptEncryptedResponse, prepareEncryptedRequest } from '~/utils/security/api-encrypt'
|
||||
|
||||
// 响应数据类型定义
|
||||
interface ResponseData<T = any> {
|
||||
@@ -15,7 +16,7 @@ interface ResponseData<T = any> {
|
||||
interface ConfigOption {
|
||||
showErrorMessage?: boolean
|
||||
showSuccessMessage?: boolean,
|
||||
headers?: Headers
|
||||
headers?: HeadersInit
|
||||
// 控制是否返回完整响应对象(默认 false 返回 data)
|
||||
returnFullResponse?: boolean
|
||||
// 响应类型
|
||||
@@ -215,19 +216,28 @@ class Http {
|
||||
}
|
||||
|
||||
// 构建请求选项
|
||||
const requestHeaders: Record<string, string> = {
|
||||
'Content-Type': 'application/json',
|
||||
...(this.options.headers as Record<string, string>),
|
||||
...((config.headers || {}) as Record<string, string>),
|
||||
...((param.headers || {}) as Record<string, string>)
|
||||
}
|
||||
|
||||
const requestOptions: RequestInit = {
|
||||
method,
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
...this.options.headers,
|
||||
...(config.headers || {}),
|
||||
...(param.headers || {})
|
||||
}
|
||||
headers: requestHeaders
|
||||
}
|
||||
|
||||
let encryptSession: any = null
|
||||
|
||||
// 添加请求体
|
||||
if (param.body) {
|
||||
requestOptions.body = JSON.stringify(param.body)
|
||||
const encryptedRequest = await prepareEncryptedRequest(baseURL, `/${normalizedUrl}`, method, param.body)
|
||||
encryptSession = encryptedRequest.session
|
||||
|
||||
Object.assign(requestHeaders, encryptedRequest.headers)
|
||||
|
||||
if (encryptedRequest.body) {
|
||||
requestOptions.body = encryptedRequest.body
|
||||
}
|
||||
|
||||
// 发送请求
|
||||
@@ -248,11 +258,12 @@ class Http {
|
||||
|
||||
if (responseType === 'json') {
|
||||
data = await response.json()
|
||||
data = await decryptEncryptedResponse(data, encryptSession)
|
||||
} else if (responseType === 'blob') {
|
||||
// 对于blob类型,直接读取blob并返回
|
||||
try {
|
||||
const blob = await response.blob()
|
||||
resolve(blob)
|
||||
resolve(blob as T)
|
||||
return
|
||||
} catch (error) {
|
||||
console.error('[request] Error reading blob:', error)
|
||||
@@ -304,10 +315,11 @@ class Http {
|
||||
console.log('[request] New token:', newToken?.substring(0, 20) + '...')
|
||||
// 重新发送请求
|
||||
this.options.headers['Authorization'] = `Bearer ${newToken}`
|
||||
requestOptions.headers['Authorization'] = `Bearer ${newToken}`
|
||||
requestHeaders['Authorization'] = `Bearer ${newToken}`
|
||||
return fetch(fullURL, requestOptions)
|
||||
}).then(async (newResponse) => {
|
||||
const newData = await newResponse.json()
|
||||
let newData = await newResponse.json()
|
||||
newData = await decryptEncryptedResponse(newData, encryptSession)
|
||||
if (newData.code == 0) {
|
||||
if (config.returnFullResponse) {
|
||||
resolve(newData as T)
|
||||
|
||||
Reference in New Issue
Block a user