refactor(frontend): 优化工具和 API 模块

- 改进 sanitize 工具函数
- 优化 mocks 数据和处理器
- 优化 auth API 模块
This commit is contained in:
fawney19
2025-12-12 20:22:22 +08:00
parent fc0ca3944e
commit 66307f8f49
4 changed files with 6 additions and 4 deletions

View File

@@ -1,4 +1,5 @@
import apiClient from './client' import apiClient from './client'
import { log } from '@/utils/logger'
export interface LoginRequest { export interface LoginRequest {
email: string email: string
@@ -65,7 +66,7 @@ export const authApi = {
await apiClient.post('/api/auth/logout', {}) await apiClient.post('/api/auth/logout', {})
} catch (error) { } catch (error) {
// 即使后端登出失败,也要清除本地认证信息 // 即使后端登出失败,也要清除本地认证信息
console.warn('后端登出失败,仅清除本地认证信息:', error) log.warn('后端登出失败,仅清除本地认证信息:', error)
} finally { } finally {
// 清除本地认证信息 // 清除本地认证信息
apiClient.clearAuth() apiClient.clearAuth()

View File

@@ -6,7 +6,7 @@
import type { User, LoginResponse } from '@/api/auth' import type { User, LoginResponse } from '@/api/auth'
import type { DashboardStatsResponse, RecentRequest, ProviderStatus, DailyStatsResponse } from '@/api/dashboard' import type { DashboardStatsResponse, RecentRequest, ProviderStatus, DailyStatsResponse } from '@/api/dashboard'
import type { User as AdminUser, ApiKey } from '@/api/users' import type { User as AdminUser, ApiKey } from '@/api/users'
import type { AdminApiKey, AdminApiKeysResponse } from '@/api/admin' import type { AdminApiKeysResponse } from '@/api/admin'
import type { Profile, UsageResponse } from '@/api/me' import type { Profile, UsageResponse } from '@/api/me'
import type { ProviderWithEndpointsSummary, GlobalModelResponse } from '@/api/endpoints/types' import type { ProviderWithEndpointsSummary, GlobalModelResponse } from '@/api/endpoints/types'

View File

@@ -1571,7 +1571,7 @@ registerDynamicRoute('GET', '/api/admin/providers/:providerId/available-source-m
}) })
// 分配 GlobalModels 到 Provider // 分配 GlobalModels 到 Provider
registerDynamicRoute('POST', '/api/admin/providers/:providerId/assign-global-models', async (config, params) => { registerDynamicRoute('POST', '/api/admin/providers/:providerId/assign-global-models', async (config, _params) => {
await delay() await delay()
requireAdmin() requireAdmin()
const body = JSON.parse(config.data || '{}') const body = JSON.parse(config.data || '{}')
@@ -1620,7 +1620,7 @@ registerDynamicRoute('DELETE', '/api/admin/models/global/:modelId', async (_conf
}) })
// GlobalModel 批量分配到 Providers // GlobalModel 批量分配到 Providers
registerDynamicRoute('POST', '/api/admin/models/global/:modelId/assign-to-providers', async (config, params) => { registerDynamicRoute('POST', '/api/admin/models/global/:modelId/assign-to-providers', async (config, _params) => {
await delay() await delay()
requireAdmin() requireAdmin()
const body = JSON.parse(config.data || '{}') const body = JSON.parse(config.data || '{}')

View File

@@ -19,6 +19,7 @@ const DOMPURIFY_CONFIG = {
'class', 'id' 'class', 'id'
], ],
// 允许的URI协议 // 允许的URI协议
// eslint-disable-next-line no-useless-escape
ALLOWED_URI_REGEXP: /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i ALLOWED_URI_REGEXP: /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i
} }