2026-01-05 09:57:25 +08:00

355 lines
7.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# API 接口文档
## 概述
本文档说明项目中API的使用方式和接口定义。
## API结构
项目中的API分为三个层次
1. **API定义层** (`src/api/`): 业务API封装
2. **服务层** (`src/servers/`): 自动生成的API服务
3. **请求层** (`src/request/`): HTTP请求封装
## 请求封装
### HTTP请求 (`src/request/http.ts`)
#### 基础配置
- **BaseURL**: `/dada`
- **超时时间**: 60000ms (60秒)
- **认证方式**: Token + TenantId
#### 请求头自动添加
所有请求会自动添加以下请求头:
- `Token`: 用户认证Token
- `TenantId`: 租户ID
- `AuthId`: 客户端ID (固定值)
- `ApplicationId`: 应用ID (固定值: 3)
#### 请求方法
##### GET请求
```typescript
import { get } from '@/request/http'
// 基本用法
const data = await get('/api/endpoint', { param1: 'value1' })
// 带loading
const data = await get('/api/endpoint', params, loadingRef)
// 自定义请求头
const data = await get('/api/endpoint', params, loadingRef, customHeaders)
// 自定义超时
const data = await get('/api/endpoint', params, loadingRef, headers, 30000)
```
##### POST请求
```typescript
import { post } from '@/request/http'
// 基本用法
const result = await post('/api/endpoint', { key: 'value' })
// 带查询参数
const result = await post('/api/endpoint', bodyData, queryParams)
// 带loading
const result = await post('/api/endpoint', bodyData, queryParams, loadingRef)
```
##### PUT请求
```typescript
import { put } from '@/request/http'
const result = await put('/api/endpoint', updateData, queryParams, loadingRef)
```
##### DELETE请求
```typescript
import { del } from '@/request/http'
const result = await del('/api/endpoint', queryParams, bodyData, loadingRef)
```
##### 文件导出
```typescript
import { exportExcel, exportFile, exportExcelPost } from '@/request/http'
// 导出Excel (GET)
await exportExcel('文件名.xlsx', '/api/export', params, loadingRef)
// 导出文件 (GET)
await exportFile('文件名.zip', '/api/export', params, loadingRef)
// 导出Excel (POST)
await exportExcelPost('文件名.xlsx', '/api/export', queryParams, bodyData, loadingRef)
```
##### 流式请求
```typescript
import { postStream } from '@/request/http'
const response = await postStream('/api/stream', { data: 'value' })
```
### 其他请求封装
#### 审核请求 (`src/request/reviewHttp.ts`)
专门用于审核模块的HTTP请求封装baseURL为 `/ai-review/api`
#### 写作请求 (`src/request/writingHttp.ts`)
专门用于写作模块的HTTP请求封装baseURL为 `/ai-doc/api`
#### 可取消请求 (`src/request/fetchWithAbort.ts`)
支持取消的请求封装用于SSE等场景
## 错误处理
### 认证错误码
以下错误码表示认证失效会自动清除token并跳转登录
- `11011`: 未能读取到有效Token
- `11012`: Token无效
- `11013`: Token已过期
- `11014`: Token已被顶下线
- `11015`: Token已被踢下线
- `11016`: 已被冻结
### 权限错误码
- `11051`: 无此权限
### 错误处理示例
```typescript
try {
const data = await get('/api/endpoint')
// 处理成功数据
} catch (error) {
// 错误已在拦截器中处理,这里可以做一些额外处理
console.error('请求失败:', error)
}
```
## API定义层 (`src/api/`)
### 用户认证API (`api/dada.ts`)
用户登录、登出、获取用户信息等
### Finyx Bot API (`api/finyxbot.ts`)
```typescript
import { aiChat } from '@/api/finyxbot'
// AI助手对话 (SSE)
const abortController = aiChat({
message: '你好',
chatId: 'xxx'
})
```
### 审核API (`api/review.ts`)
审核相关的API接口
### 写作API (`api/writing.ts`)
写作相关的API接口
## 服务层 (`src/servers/`)
### 基础服务 (`servers/base/api/`)
#### 组织管理 (`zuzhi.ts`)
- 组织CRUD操作
- 组织树查询
#### 员工管理 (`yuangong.ts`)
- 员工信息管理
- 员工查询
#### 角色管理 (`jiaose.ts`)
- 角色CRUD操作
#### 岗位管理 (`gangwei.ts`)
- 岗位管理
#### 文件上传 (`wenjianshangchuan.ts`)
- 文件上传接口
#### 业务附件 (`yewufujian.ts`)
- 业务附件管理
### Finyx业务服务 (`servers/finyx/api/`)
#### 知识库 (`zhishiku.ts`)
- 知识库CRUD
- 知识库查询
#### 文档 (`wendang.ts`)
- 文档管理
- 文档查询
#### 智能体 (`zhinengti.ts`)
- 智能体创建
- 智能体配置
- 智能体查询
#### 智能写作 (`zhinengxiezuo.ts`)
- 写作任务创建
- 写作内容生成
#### 智能问答对话记录 (`zhinengtiduihuajilu.ts`)
- 对话记录查询
- 对话历史管理
#### 机器人服务 (`jiqirenfuwu.ts`)
- 机器人服务管理
### 认证服务 (`servers/oauth/api/`)
#### 登录登出 (`denglutuichuzhuce.ts`)
- 用户登录
- 用户登出
- 用户注册
#### 用户信息 (`yonghujibenxinxi.ts`)
- 获取用户基本信息
#### 验证码 (`yanzhengma.ts`)
- 获取验证码
## 使用示例
### 完整示例:获取知识库列表
```typescript
import { get } from '@/request/http'
import { ref } from 'vue'
const loading = ref(false)
const knowledgeList = ref([])
async function fetchKnowledgeList() {
try {
const data = await get('/finyx/knowledge/list', {
page: 1,
size: 10
}, loading)
knowledgeList.value = data
} catch (error) {
console.error('获取知识库列表失败:', error)
}
}
```
### 完整示例:创建智能体
```typescript
import { post } from '@/request/http'
import { ref } from 'vue'
const loading = ref(false)
async function createAgent(agentData: any) {
try {
const result = await post('/finyx/agent/create', {
name: agentData.name,
description: agentData.description,
modelId: agentData.modelId
}, null, loading)
return result
} catch (error) {
console.error('创建智能体失败:', error)
throw error
}
}
```
### 完整示例:文件上传
```typescript
import { post } from '@/request/http'
import { ref } from 'vue'
const loading = ref(false)
async function uploadFile(file: File) {
const formData = new FormData()
formData.append('file', file)
try {
const result = await post('/base/file/upload', formData, null, loading, {
'Content-Type': 'multipart/form-data'
})
return result
} catch (error) {
console.error('文件上传失败:', error)
throw error
}
}
```
### 完整示例SSE流式请求
```typescript
import { aiChat } from '@/api/finyxbot'
let abortController: AbortController | null = null
async function startChat(message: string) {
// 取消之前的请求
if (abortController) {
abortController.abort()
}
abortController = aiChat({
message,
chatId: 'xxx'
})
// 处理流式响应
// ... 处理逻辑
}
function stopChat() {
if (abortController) {
abortController.abort()
abortController = null
}
}
```
## 代理配置
开发环境的API代理配置在 `vite.config.ts` 中:
```typescript
proxyConf['/ai-review/api'] = {
target: 'https://finyxdev.datacubeworld.com',
changeOrigin: true,
rewrite: (path) => path.replace(ENV.VITE_BASE_PATH, '/')
}
proxyConf['/ai-doc/api'] = {
target: 'https://finyxdev.datacubeworld.com',
changeOrigin: true,
rewrite: (path) => path.replace(ENV.VITE_BASE_PATH, '/')
}
proxyConf['/finyx-bot/api'] = {
target: 'https://finyxdev.datacubeworld.com',
changeOrigin: true,
rewrite: (path) => path.replace(ENV.VITE_BASE_PATH, '/')
}
proxyConf['/dada'] = {
target: 'https://finyxdev.datacubeworld.com',
changeOrigin: true,
rewrite: (path) => path.replace(ENV.VITE_BASE_PATH, '/')
}
```
## 注意事项
1. **Token管理**: Token会自动从store中获取无需手动添加
2. **错误处理**: 所有认证错误会自动处理,无需手动跳转
3. **Loading状态**: 可以传入ref来控制loading状态
4. **超时处理**: 默认超时60秒可以自定义
5. **文件上传**: 需要设置正确的Content-Type
6. **流式请求**: 使用fetchWithAbort支持取消操作