feat(ui): 优化上游模型查询错误提示

新增 parseUpstreamModelError 函数,将后端返回的原始错误信息
转换为用户友好的中文提示,支持解析 HTTP 状态码和 JSON 错误体
This commit is contained in:
fawney19
2026-01-11 00:41:41 +08:00
parent aec0326d40
commit 8d8b20aa47
4 changed files with 137 additions and 8 deletions

View File

@@ -187,6 +187,7 @@ import Button from '@/components/ui/button.vue'
import Badge from '@/components/ui/badge.vue'
import Checkbox from '@/components/ui/checkbox.vue'
import { useToast } from '@/composables/useToast'
import { parseUpstreamModelError } from '@/utils/errorParser'
import { adminApi } from '@/api/admin'
import {
importModelsFromUpstream,
@@ -289,13 +290,18 @@ async function fetchUpstreamModels() {
hasQueried.value = true
// 如果有部分失败,显示警告提示
if (response.data.error) {
showError(`部分格式获取失败: ${response.data.error}`, '警告')
// 使用友好的错误解析
showError(`部分格式获取失败: ${parseUpstreamModelError(response.data.error)}`, '警告')
}
} else {
errorMessage.value = response.data?.error || '获取上游模型失败'
// 使用友好的错误解析
const rawError = response.data?.error || '获取上游模型失败'
errorMessage.value = parseUpstreamModelError(rawError)
}
} catch (err: any) {
errorMessage.value = err.response?.data?.detail || '获取上游模型失败'
// 使用友好的错误解析
const rawError = err.response?.data?.detail || err.message || '获取上游模型失败'
errorMessage.value = parseUpstreamModelError(rawError)
} finally {
loading.value = false
}

View File

@@ -334,7 +334,7 @@ import {
} from 'lucide-vue-next'
import { Dialog, Button, Input, Checkbox, Badge } from '@/components/ui'
import { useToast } from '@/composables/useToast'
import { parseApiError } from '@/utils/errorParser'
import { parseApiError, parseUpstreamModelError } from '@/utils/errorParser'
import {
updateProviderKey,
API_FORMAT_LABELS,
@@ -522,11 +522,17 @@ async function fetchUpstreamModels() {
}
collapsedGroups.value = allGroups
} else {
showError(response.data?.error || '获取上游模型失败', '错误')
// 使用友好的错误解析
const errorMsg = response.data?.error
? parseUpstreamModelError(response.data.error)
: '获取上游模型失败'
showError(errorMsg, '获取上游模型失败')
}
} catch (err: any) {
if (loadingCancelled) return
showError(err.response?.data?.detail || '获取上游模型失败', '错误')
// 使用友好的错误解析
const rawError = err.response?.data?.detail || err.message || '获取上游模型失败'
showError(parseUpstreamModelError(rawError), '获取上游模型失败')
} finally {
fetchingUpstreamModels.value = false
}

View File

@@ -3,6 +3,7 @@
*/
import { ref } from 'vue'
import { adminApi } from '@/api/admin'
import { parseUpstreamModelError } from '@/utils/errorParser'
import type { UpstreamModel } from '@/api/endpoints/types'
// 扩展类型,包含可能的额外字段
@@ -63,10 +64,14 @@ export function useUpstreamModelsCache() {
})
return { models: response.data.models }
} else {
return { models: [], error: response.data?.error || '获取上游模型失败' }
// 使用友好的错误解析
const rawError = response.data?.error || '获取上游模型失败'
return { models: [], error: parseUpstreamModelError(rawError) }
}
} catch (err: any) {
return { models: [], error: err.response?.data?.detail || '获取上游模型失败' }
// 使用友好的错误解析
const rawError = err.response?.data?.detail || err.message || '获取上游模型失败'
return { models: [], error: parseUpstreamModelError(rawError) }
} finally {
loadingMap.value.set(providerId, false)
pendingRequests.delete(providerId)