核心改进: - HTTP客户端:工厂函数模式,支持自定义拦截器和401/403处理 - 认证服务:函数式实现,消除this绑定问题,支持业务码+HTTP状态码双通道 - Token管理:简化为直接实例导出,移除bind()和箭头函数包装 - 路由守卫:优化逻辑,移除冗余代码,更简洁易维护 技术亮点: - 统一401/403错误处理(业务code和HTTP status双检查) - 自动刷新token并重试请求,保留自定义拦截器 - 分层清晰:clientAxios (Mono) -> http (应用) -> AuthService - 支持扩展:业务代码可创建自定义HTTP实例并添加拦截器 文件变更: - 新增 AuthService.js (函数式) 和 Login.vue - 重构 http.js、token-manager.js、router/index.js - 删除 TokenInput.vue、utils/auth.js 等冗余文件 - 更新所有API调用点使用直接实例导入 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
87 lines
1.9 KiB
JavaScript
87 lines
1.9 KiB
JavaScript
/**
|
||
* 应用层 API 服务
|
||
* 封装应用特定的 API 调用,使用 mono 级别的服务
|
||
*/
|
||
|
||
import { fetchEventSource } from '@microsoft/fetch-event-source'
|
||
// 直接使用实例(最简单、最可靠)
|
||
import tokenManager from '@gold/utils/token-manager'
|
||
import { TikHubService } from '@gold/api/services'
|
||
import { API_BASE } from '@gold/config/api'
|
||
|
||
/**
|
||
* TikHub API 基础路径
|
||
*/
|
||
const TIKHUB_BASE = API_BASE.TIKHUB_APP || API_BASE.TIKHUB || ''
|
||
|
||
/**
|
||
* 应用层通用服务
|
||
*/
|
||
export const CommonService = {
|
||
/**
|
||
* 视频转字符(音频转文字)
|
||
* 直接使用 mono 级别的 TikHub 服务
|
||
*/
|
||
videoToCharacters(data) {
|
||
return TikHubService.videoToCharacters(data)
|
||
},
|
||
|
||
/**
|
||
* 调用工作流
|
||
*/
|
||
callWorkflow(data) {
|
||
return TikHubService.callWorkflow(data)
|
||
},
|
||
|
||
/**
|
||
* 流式调用工作流(SSE)
|
||
*/
|
||
async callWorkflowStream(options) {
|
||
const {
|
||
data,
|
||
ctrl,
|
||
onMessage,
|
||
onError,
|
||
onClose
|
||
} = options || {}
|
||
|
||
const authHeader = tokenManager.getAuthHeader()
|
||
|
||
let retryCount = 0
|
||
const maxRetries = 0
|
||
|
||
return fetchEventSource(`${TIKHUB_BASE}/callWorkflow`, {
|
||
method: 'post',
|
||
headers: {
|
||
'Content-Type': 'application/json',
|
||
...(authHeader ? { Authorization: authHeader } : {})
|
||
},
|
||
openWhenHidden: true,
|
||
body: JSON.stringify(data),
|
||
onmessage: onMessage,
|
||
onerror: (err) => {
|
||
retryCount++
|
||
console.error('SSE错误,重试次数:', retryCount, err)
|
||
|
||
if (typeof onError === 'function') {
|
||
onError(err)
|
||
}
|
||
|
||
if (retryCount > maxRetries) {
|
||
throw err
|
||
}
|
||
},
|
||
onclose: () => {
|
||
if (typeof onClose === 'function') {
|
||
onClose()
|
||
}
|
||
},
|
||
signal: ctrl ? ctrl.signal : undefined
|
||
})
|
||
}
|
||
}
|
||
|
||
export default CommonService
|
||
|
||
|