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/error.js |   56 +++++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 51 insertions(+), 5 deletions(-)

diff --git a/rsf-design/src/utils/http/error.js b/rsf-design/src/utils/http/error.js
index 499538f..7488f6f 100644
--- a/rsf-design/src/utils/http/error.js
+++ b/rsf-design/src/utils/http/error.js
@@ -9,6 +9,8 @@
     this.timestamp = /* @__PURE__ */ new Date().toISOString()
     this.url = options?.url
     this.method = options?.method
+    this.status = options?.status
+    this.contentType = options?.contentType
   }
   toLogData() {
     return {
@@ -18,8 +20,50 @@
       timestamp: this.timestamp,
       url: this.url,
       method: this.method,
+      status: this.status,
+      contentType: this.contentType,
       stack: this.stack
     }
+  }
+}
+function resolveRequestUrl(config) {
+  const baseURL = String(config?.baseURL || '').trim()
+  const requestUrl = String(config?.url || '').trim()
+  if (!baseURL && !requestUrl) {
+    return void 0
+  }
+  if (!baseURL) {
+    return requestUrl || void 0
+  }
+  if (!requestUrl) {
+    return baseURL
+  }
+  const isAbsoluteBase = /^https?:\/\//i.test(baseURL)
+  if (!isAbsoluteBase) {
+    const normalizedBase = baseURL.replace(/\/+$/, '')
+    const normalizedUrl = requestUrl.replace(/^\/+/, '')
+    if (!normalizedBase) {
+      return requestUrl
+    }
+    if (!normalizedUrl) {
+      return normalizedBase
+    }
+    return `${normalizedBase}/${normalizedUrl}`
+  }
+  try {
+    const origin = globalThis?.location?.origin || 'http://localhost'
+    const normalizedBase = new URL(baseURL, origin)
+    return new URL(requestUrl, normalizedBase).toString()
+  } catch {
+    const normalizedBase = baseURL.replace(/\/+$/, '')
+    const normalizedUrl = requestUrl.replace(/^\/+/, '')
+    if (!normalizedBase) {
+      return requestUrl
+    }
+    if (!normalizedUrl) {
+      return normalizedBase
+    }
+    return `${normalizedBase}/${normalizedUrl}`
   }
 }
 const getErrorMessage = (status) => {
@@ -52,7 +96,7 @@
   const requestConfig = error.config
   if (isRequestCancelled(error)) {
     throw new HttpError($t('httpMsg.requestCancelled'), 'REQUEST_CANCELLED', {
-      url: requestConfig?.url,
+      url: resolveRequestUrl(requestConfig),
       method: requestConfig?.method?.toUpperCase()
     })
   }
@@ -60,7 +104,7 @@
   const errorMessage = error.response?.data?.msg || error.message
   if (!error.response) {
     throw new HttpError($t('httpMsg.networkError'), ApiStatus.error, {
-      url: requestConfig?.url,
+      url: resolveRequestUrl(requestConfig),
       method: requestConfig?.method?.toUpperCase()
     })
   }
@@ -69,8 +113,10 @@
     : errorMessage || $t('httpMsg.requestFailed')
   throw new HttpError(message, statusCode || ApiStatus.error, {
     data: error.response.data,
-    url: requestConfig?.url,
-    method: requestConfig?.method?.toUpperCase()
+    url: resolveRequestUrl(requestConfig),
+    method: requestConfig?.method?.toUpperCase(),
+    status: statusCode,
+    contentType: error.response?.headers?.['content-type']
   })
 }
 function showError(error, showMessage = true) {
@@ -90,4 +136,4 @@
 const isHttpError = (error) => {
   return error instanceof HttpError
 }
-export { HttpError, handleError, isHttpError, showError, showSuccess }
+export { HttpError, handleError, isHttpError, resolveRequestUrl, showError, showSuccess }

--
Gitblit v1.9.1