From 33bd4dd1f0e41131cd8e5bbf87204a1f0b72bb08 Mon Sep 17 00:00:00 2001
From: zhou zhou <3272660260@qq.com>
Date: 星期六, 11 四月 2026 07:45:59 +0800
Subject: [PATCH] #页面优化

---
 rsf-design/src/utils/http/index.js |   69 +++++++++++++++++++++++++++++++---
 1 files changed, 62 insertions(+), 7 deletions(-)

diff --git a/rsf-design/src/utils/http/index.js b/rsf-design/src/utils/http/index.js
index 64720ae..129210c 100644
--- a/rsf-design/src/utils/http/index.js
+++ b/rsf-design/src/utils/http/index.js
@@ -1,7 +1,7 @@
 import axios from 'axios'
 import { useUserStore } from '@/store/modules/user'
 import { ApiStatus } from './status'
-import { HttpError, handleError, showError, showSuccess } from './error'
+import { HttpError, handleError, resolveRequestUrl, showError, showSuccess } from './error'
 import { $t } from '@/locales'
 const REQUEST_TIMEOUT = 30e3
 const LOGOUT_DELAY = 500
@@ -51,21 +51,40 @@
 )
 axiosInstance.interceptors.response.use(
   (response) => {
+    if (!isStandardResponse(response.data)) {
+      throw createInvalidResponseError(response)
+    }
     const { code, msg } = response.data
     if (code === ApiStatus.success) return response
-    if (code === ApiStatus.unauthorized) handleUnauthorizedError(msg)
-    throw createHttpError(msg || $t('httpMsg.requestFailed'), code)
+    if (code === ApiStatus.unauthorized) handleUnauthorizedError(msg, response.config)
+    throw createHttpError(
+      msg || $t('httpMsg.requestFailed'),
+      code ?? ApiStatus.error,
+      createErrorOptions(
+        response.config,
+        {
+          data: response.data,
+          status: response.status,
+          contentType: response.headers?.['content-type']
+        },
+        response
+      )
+    )
   },
   (error) => {
     if (error.response?.status === ApiStatus.unauthorized) handleUnauthorizedError()
     return Promise.reject(handleError(error))
   }
 )
-function createHttpError(message, code) {
-  return new HttpError(message, code)
+function createHttpError(message, code, options) {
+  return new HttpError(message, code, options)
 }
-function handleUnauthorizedError(message) {
-  const error = createHttpError(message || $t('httpMsg.unauthorized'), ApiStatus.unauthorized)
+function handleUnauthorizedError(message, config) {
+  const error = createHttpError(
+    message || $t('httpMsg.unauthorized'),
+    ApiStatus.unauthorized,
+    createErrorOptions(config)
+  )
   if (!isUnauthorizedErrorShown) {
     isUnauthorizedErrorShown = true
     logOut()
@@ -94,6 +113,42 @@
     ApiStatus.gatewayTimeout
   ].includes(statusCode)
 }
+function createErrorOptions(config, extra = {}, response) {
+  return {
+    url: response?.request?.responseURL || resolveRequestUrl(config),
+    method: config?.method?.toUpperCase(),
+    ...extra
+  }
+}
+function isStandardResponse(payload) {
+  return payload !== null && typeof payload === 'object' && !Array.isArray(payload) && 'code' in payload
+}
+function createInvalidResponseError(response) {
+  const responseData = response?.data
+  const responseText =
+    typeof responseData === 'string' ? responseData.slice(0, 300) : responseData
+  const contentType = String(response?.headers?.['content-type'] || '')
+  const looksLikeHtml =
+    contentType.includes('text/html') ||
+    (typeof responseData === 'string' &&
+      /<(!doctype|html|head|body)\b/i.test(responseData.trim().slice(0, 120)))
+  const message = looksLikeHtml
+    ? $t('httpMsg.invalidHtmlResponse')
+    : $t('httpMsg.invalidResponseFormat')
+  return createHttpError(
+    message,
+    ApiStatus.error,
+    createErrorOptions(
+      response?.config,
+      {
+        data: responseText,
+        status: response?.status,
+        contentType
+      },
+      response
+    )
+  )
+}
 async function retryRequest(config, retries = MAX_RETRIES) {
   try {
     return await request(config)

--
Gitblit v1.9.1