feat: 修改端口

This commit is contained in:
2025-11-11 23:51:17 +08:00
parent 5a4f528e4b
commit f7ca591f1c
12 changed files with 283 additions and 13 deletions

View File

@@ -4,3 +4,5 @@ VITE_DEV_TOKEN=a498c8db4b4e4dbfb9e28ad2606713ec
VITE_BASE_URL=/webApi
# 接口地址
VITE_API_URL=/admin-api
VITE_TENANT_ID=1

View File

@@ -3,3 +3,5 @@ VITE_TIKHUB_XHS_TOKEN=pZM4CJ484F+rxlyfLL+XmAzwMCKXVb5l2x7WsUOyCMu1rm61FiDcRQmPCQ
VITE_BASE_URL=/webApi
# 接口地址
VITE_API_URL=/admin-api
VITE_TENANT_ID=1

View File

@@ -0,0 +1,118 @@
# API 统一管理说明
## 📁 目录结构
```
api/
├── config.js # API 基础配置(统一管理所有基础 URL
├── index.js # 统一导出入口(所有 API 服务从这里导出)
├── http.js # Axios 实例和拦截器
├── auth.js # 认证相关 API
├── chat.js # 聊天相关 API
├── common.js # 通用服务 API
└── tikhub/ # TikHub 相关 API
├── index.js
├── tikhub.js
└── types.js
```
## 🚀 使用方式
### 方式一:从统一入口导入(推荐)
```javascript
// 导入所有 API
import { ChatMessageApi, AuthApi, CommonService, TikhubService } from '@/api'
// 或按需导入
import { ChatMessageApi } from '@/api'
import { AuthApi } from '@/api'
```
### 方式二:从具体文件导入(兼容旧代码)
```javascript
// 仍然支持原有的导入方式
import { ChatMessageApi } from '@/api/chat'
import { CommonService } from '@/api/common'
```
### 方式三:使用配置工具函数
```javascript
import { getApiUrl, API_BASE } from '@/api/config'
// 获取完整 API URL
const url = getApiUrl('ADMIN_AI', '/chat/conversation/create-my')
// 结果: /admin-api/ai/chat/conversation/create-my
// 直接使用配置
const baseUrl = API_BASE.ADMIN_AI
```
## 📝 API 配置说明
### config.js
所有 API 基础 URL 统一在 `config.js` 中管理:
```javascript
export const API_BASE = {
ADMIN: '/admin-api', // 管理后台基础路径
APP: '/app-api', // 会员端基础路径
ADMIN_AI: '/admin-api/ai', // AI 模块(管理后台)
APP_MEMBER: '/app-api/member', // 会员模块
TIKHUB: '/webApi/admin-api/ai/tikHup', // TikHub管理后台
TIKHUB_APP: '/app-api/api/tikHup', // TikHub会员端
}
```
### 添加新的 API 模块
1.`config.js` 中添加新的基础路径:
```javascript
export const API_BASE = {
// ... 现有配置
NEW_MODULE: `${BASE_URL}/admin-api/new-module`,
}
```
2. 创建新的 API 文件(如 `new-module.js`
```javascript
import request from '@/api/http'
import { API_BASE } from '@/api/config'
const BASE = API_BASE.NEW_MODULE
export const NewModuleApi = {
getList: () => request.get(`${BASE}/list`),
create: (data) => request.post(`${BASE}/create`, data),
}
```
3.`index.js` 中导出:
```javascript
export { NewModuleApi } from './new-module'
```
## 🔧 HTTP 实例
所有 API 都使用统一的 HTTP 实例(`http.js`),已配置:
- ✅ 自动 Token 注入
- ✅ 统一错误处理
- ✅ 请求/响应拦截器
- ✅ 白名单机制(无需 Token 的接口)
## 📌 注意事项
1. **基础 URL 配置**:所有 API 的基础 URL 都应该在 `config.js` 中定义,不要在业务文件中硬编码
2. **统一导出**:新增 API 服务后,记得在 `index.js` 中导出
3. **向后兼容**:保持原有的导入方式仍然可用,方便逐步迁移
## 🎯 最佳实践
1. **使用统一入口**:优先使用 `@/api` 统一导入
2. **配置集中管理**:所有 URL 配置都在 `config.js`
3. **类型安全**:使用 TypeScript 时,可以为 API 添加类型定义
4. **错误处理**:利用 HTTP 拦截器统一处理错误

View File

@@ -1,8 +1,9 @@
import api from '@/api/http'
import { setToken, getRefreshToken } from '@/utils/auth'
import { API_BASE } from '@/api/config'
const SERVER_BASE = import.meta.env.VITE_BASE_URL + '/app-api/member'
const SERVER_BASE = API_BASE.APP_MEMBER
/**
* 保存 token 的辅助函数

View File

@@ -1,7 +1,9 @@
import request from '@/api/http'
import { fetchEventSource } from '@microsoft/fetch-event-source'
import { getAccessToken } from '@/utils/auth'
const SERVER_BASE_AI= import.meta.env.VITE_BASE_URL + '/admin-api/ai'
import { API_BASE } from '@/api/config'
const SERVER_BASE_AI = API_BASE.ADMIN_AI

View File

@@ -1,9 +1,10 @@
import http from '@/api/http'
import { fetchEventSource } from '@microsoft/fetch-event-source'
import { getAuthHeader } from '@/utils/token-manager'
import { API_BASE } from '@/api/config'
// 使用本地代理前缀 /tikhub开发环境通过 Vite 代理到 https://api.tikhub.io
const SERVER_BASE = '/webApi/admin-api/ai/tikHup'
const SERVER_BASE = API_BASE.TIKHUB
export const CommonService = {
videoToCharacters(data) {

View File

@@ -0,0 +1,34 @@
/**
* API 基础配置
* 统一管理所有 API 的基础 URL
*/
const BASE_URL = import.meta.env.VITE_BASE_URL || ''
/**
* API 基础路径配置
*/
export const API_BASE = {
// 会员端 API
APP: `${BASE_URL}`,
// 具体模块路径
ADMIN_AI: `${BASE_URL}/admin-api/ai`,
APP_MEMBER: `${BASE_URL}/member`,
// 特殊路径
TIKHUB_APP: `${BASE_URL}/api/tikHup`,
}
/**
* 获取完整的 API 路径
* @param {string} module - 模块名称 (如 'ADMIN_AI', 'APP_MEMBER')
* @param {string} path - 接口路径 (如 '/chat/conversation/create-my')
* @returns {string} 完整的 API URL
*/
export function getApiUrl(module, path) {
const base = API_BASE[module] || API_BASE.ADMIN
return `${base}${path.startsWith('/') ? path : '/' + path}`
}
export default API_BASE

View File

@@ -0,0 +1,71 @@
/**
* API 使用示例
* 此文件仅作为参考,展示如何使用统一的 API 管理
*/
// ========== 方式一:从统一入口导入(推荐) ==========
import {
ChatMessageApi,
CommonService,
TikhubService,
API_BASE,
getApiUrl,
http
} from '@/api'
// 使用示例
async function example1() {
// 使用 ChatMessageApi
const conversationId = await ChatMessageApi.createChatConversationMy({
roleId: 1
})
// 使用 CommonService
const result = await CommonService.videoToCharacters({ videoUrl: 'xxx' })
// 使用 TikhubService
await TikhubService.postTikHup({
type: 'DOUYIN_WEB_HOT_SEARCH',
methodType: 'GET',
urlParams: { keyword: '测试' }
})
// 使用配置
const baseUrl = API_BASE.ADMIN_AI
const fullUrl = getApiUrl('ADMIN_AI', '/chat/conversation/create-my')
// 直接使用 http 实例
await http.get('/some-endpoint')
}
// ========== 方式二:从具体文件导入(兼容旧代码) ==========
import { ChatMessageApi } from '@/api/chat'
import { CommonService } from '@/api/common'
import { API_BASE } from '@/api/config'
async function example2() {
// 原有方式仍然可用
await ChatMessageApi.createChatConversationMy({ roleId: 1 })
}
// ========== 方式三:按需导入认证 API ==========
import {
loginBySms,
sendSmsCode,
SMS_SCENE
} from '@/api'
async function example3() {
// 发送验证码
await sendSmsCode('13800138000', SMS_SCENE.MEMBER_LOGIN)
// 短信登录
await loginBySms('13800138000', '123456')
}
export default {
example1,
example2,
example3
}

View File

@@ -25,13 +25,8 @@ function isInWhiteList(url) {
return WHITE_LIST.some((path) => url.includes(path))
}
/**
* 可选:多租户场景可在此处统一注入 tenant-id
* api.interceptors.request.use((config) => {
* config.headers['tenant-id'] = '1';
* return config;
* });
*/
// 创建 axios 实例
const http = axios.create({
baseURL: '/',
@@ -42,7 +37,7 @@ const http = axios.create({
http.interceptors.request.use((config) => {
// 检查是否需要 token不在白名单中且未显式设置 isToken = false
const needToken = config.headers?.isToken !== false && !isInWhiteList(config.url || '')
config.headers['tenant-id'] = import.meta.env.VITE_TENANT_ID
if (needToken) {
// 使用统一的 token 管理器获取 header
const authHeader = getAuthHeader()

View File

@@ -0,0 +1,42 @@
/**
* API 统一导出入口
* 所有 API 服务都从这里导出,方便统一管理和使用
*/
// 配置
export { default as API_BASE, getApiUrl } from './config'
// HTTP 实例
export { default as http, default as request } from './http'
// 认证相关 API
export * from './auth'
// 聊天相关 API
export { ChatMessageApi } from './chat'
// 通用服务 API
export { CommonService } from './common'
export { default as CommonServiceDefault } from './common'
// TikHub API
export { TikhubService, default as TikhubServiceDefault } from './tikhub'
export { InterfaceType, MethodType, InterfaceUrlMap, ParamType } from './tikhub/types'
/**
* 统一导出所有 API 服务(便于按需导入)
*/
export default {
// 配置
config: () => import('./config'),
// HTTP 实例
http: () => import('./http'),
// API 服务
auth: () => import('./auth'),
chat: () => import('./chat'),
common: () => import('./common'),
tikhub: () => import('./tikhub'),
}

View File

@@ -1,8 +1,10 @@
import http from '@/api/http'
import { InterfaceType, MethodType, InterfaceUrlMap, ParamType } from './types'
import qs from 'qs'
import { API_BASE } from '@/api/config'
// 使用本地代理前缀 /tikhub开发环境通过 Vite 代理到 https://api.tikhub.io
const SERVER_TIKHUB =import.meta.env.VITE_BASE_URL + '/app-api/api/tikHup'
const SERVER_TIKHUB = API_BASE.TIKHUB_APP
/**
* TikHub API 服务类