refactor: 前端全面替换 any 为 unknown 并统一错误处理,后端用量记录补写请求头/体

- 前端 API 层、stores、conversation 解析器、组件全面替换 any 为 unknown/具体类型
- 错误处理统一使用 parseApiError/getErrorStatus 替代 err.response?.data?.detail 模式
- 后端 handler/TaskService/UsageLifecycle/StreamTracker 链路传递 request_headers/request_body
- streaming/pending 状态更新时可补写客户端和提供商的请求头及请求体
- 新增 TaskService 和 UsageService 相关测试
This commit is contained in:
fawney19
2026-02-22 00:43:41 +08:00
parent 98e60e8f74
commit cf2eee222e
121 changed files with 1652 additions and 1179 deletions

View File

@@ -266,7 +266,8 @@ import {
type ProviderMappingPreviewResponse
} from '@/api/endpoints'
import { updateModel } from '@/api/endpoints/models'
import { parseTestModelError } from '@/utils/errorParser'
import { parseApiError, parseTestModelError } from '@/utils/errorParser'
import type { ProviderWithEndpointsSummary } from '@/api/endpoints'
interface Endpoint {
id: string
@@ -276,7 +277,7 @@ interface Endpoint {
}
const props = defineProps<{
provider: any
provider: ProviderWithEndpointsSummary
endpoints?: Endpoint[]
models?: Model[]
mappingPreview?: ProviderMappingPreviewResponse | null
@@ -464,8 +465,8 @@ async function toggleModelActive(model: Model) {
await updateModel(props.provider.id, model.id, { is_active: newStatus })
model.is_active = newStatus
showSuccess(newStatus ? '模型已启用' : '模型已停用')
} catch (err: any) {
showError(err.response?.data?.detail || '操作失败', '错误')
} catch (err: unknown) {
showError(parseApiError(err, '操作失败'), '错误')
} finally {
togglingModelId.value = null
}
@@ -529,9 +530,8 @@ async function testModelConnection(model: Model, apiFormat?: string) {
} else {
showError(`模型测试失败: ${parseTestModelError(result)}`)
}
} catch (err: any) {
const errorMsg = err.response?.data?.detail || err.message || '测试请求失败'
showError(`模型测试失败: ${errorMsg}`)
} catch (err: unknown) {
showError(`模型测试失败: ${parseApiError(err, '测试请求失败')}`)
} finally {
testingModelId.value = null
}