ForcePilot/web/src/apis/admin_api.js

369 lines
9.0 KiB
JavaScript

import { apiGet, apiPost, apiPut, apiDelete } from './base'
import { useUserStore } from '@/stores/user'
/**
* 管理员API模块
* 只有管理员和超级管理员可以访问的API
* 权限要求: admin 或 superadmin
*
* 注意: 请确保在使用这些API之前检查用户是否具有管理员权限
*/
// 检查当前用户是否有管理员权限
const checkAdminPermission = () => {
const userStore = useUserStore()
if (!userStore.isAdmin) {
throw new Error('需要管理员权限')
}
return true
}
// 检查当前用户是否有超级管理员权限
const checkSuperAdminPermission = () => {
const userStore = useUserStore()
if (!userStore.isSuperAdmin) {
throw new Error('需要超级管理员权限')
}
return true
}
// 用户管理API
export const userManagementApi = {
/**
* 获取用户列表
* @returns {Promise} - 用户列表
*/
getUsers: async () => {
checkAdminPermission()
return apiGet('/api/auth/users', {}, true)
},
/**
* 创建新用户
* @param {Object} userData - 用户数据
* @returns {Promise} - 创建结果
*/
createUser: async (userData) => {
checkAdminPermission()
return apiPost('/api/auth/users', userData, {}, true)
},
/**
* 更新用户
* @param {number} userId - 用户ID
* @param {Object} userData - 用户数据
* @returns {Promise} - 更新结果
*/
updateUser: async (userId, userData) => {
checkAdminPermission()
return apiPut(`/api/auth/users/${userId}`, userData, {}, true)
},
/**
* 删除用户
* @param {number} userId - 用户ID
* @returns {Promise} - 删除结果
*/
deleteUser: async (userId) => {
checkAdminPermission()
return apiDelete(`/api/auth/users/${userId}`, {}, true)
},
}
// 知识库管理API
export const knowledgeBaseApi = {
/**
* 获取所有知识库
* @returns {Promise} - 知识库列表
*/
getDatabases: async () => {
checkAdminPermission()
return apiGet('/api/data/', {}, true)
},
/**
* 创建知识库
* @param {Object} databaseData - 知识库数据
* @returns {Promise} - 创建结果
*/
createDatabase: async (databaseData) => {
checkAdminPermission()
return apiPost('/api/data/', databaseData, {}, true)
},
/**
* 获取知识库详情
* @param {string} dbId - 知识库ID
* @returns {Promise} - 知识库详情
*/
getDatabaseInfo: async (dbId) => {
checkAdminPermission()
return apiGet(`/api/data/info?db_id=${dbId}`, {}, true)
},
/**
* 删除知识库
* @param {string} dbId - 知识库ID
* @returns {Promise} - 删除结果
*/
deleteDatabase: async (dbId) => {
checkAdminPermission()
return apiDelete(`/api/data/?db_id=${dbId}`, {}, true)
},
/**
* 上传文件到知识库
* @param {FormData} formData - 包含文件的FormData
* @param {string} dbId - 知识库ID
* @returns {Promise} - 上传结果
*/
uploadFile: async (formData, dbId) => {
checkAdminPermission()
const userStore = useUserStore()
const authHeaders = userStore.getAuthHeaders()
return fetch(`/api/data/upload?db_id=${dbId}`, {
method: 'POST',
headers: {
...authHeaders
},
body: formData
}).then(res => {
if (!res.ok) {
throw new Error(`上传失败: ${res.status} ${res.statusText}`)
}
return res.json()
})
},
/**
* 删除文件
* @param {string} dbId - 知识库ID
* @param {string} fileId - 文件ID
* @returns {Promise} - 删除结果
*/
deleteFile: async (dbId, fileId) => {
checkAdminPermission()
return apiDelete('/api/data/document', {
body: JSON.stringify({ db_id: dbId, file_id: fileId })
}, true)
},
/**
* 将文件分块
* @param {Object} data - 分块参数
* @returns {Promise} - 分块结果
*/
fileToChunk: async (data) => {
checkAdminPermission()
return apiPost('/api/data/file-to-chunk', data, {}, true)
},
/**
* 将分块添加到数据库
* @param {Object} data - 包含db_id和file_chunks的数据
* @returns {Promise} - 添加结果
*/
addByChunks: async (data) => {
checkAdminPermission()
return apiPost('/api/data/add-by-chunks', data, {}, true)
},
/**
* 查询测试
* @param {Object} data - 查询参数
* @returns {Promise} - 查询结果
*/
queryTest: async (data) => {
checkAdminPermission()
return apiPost('/api/data/query-test', data, {}, true)
},
/**
* 获取文档详情
* @param {string} dbId - 知识库ID
* @param {string} fileId - 文件ID
* @returns {Promise} - 文档详情
*/
getDocumentDetail: async (dbId, fileId) => {
checkAdminPermission()
return apiGet(`/api/data/document?db_id=${dbId}&file_id=${fileId}`, {}, true)
},
/**
* 将URL转换为分块
* @param {Object} data - 分块参数
* @returns {Promise} - 分块结果
*/
urlToChunk: async (data) => {
checkAdminPermission()
return apiPost('/api/data/url-to-chunk', data, {}, true)
},
/**
* 更新知识库信息
* @param {string} dbId - 知识库ID
* @param {Object} data - 包含name和description的数据对象
* @returns {Promise} - 更新结果
*/
updateDatabaseInfo: async (dbId, data) => {
checkAdminPermission()
return apiPost('/api/data/update', {
db_id: dbId,
...data
}, {}, true)
},
}
// 图数据库管理API
export const graphApi = {
/**
* 获取图数据库状态
* @returns {Promise} - 图数据库状态
*/
getGraphInfo: async () => {
checkAdminPermission()
return apiGet('/api/data/graph', {}, true)
},
/**
* 获取节点
* @param {string} dbName - 图数据库名称
* @param {number} num - 节点数量
* @returns {Promise} - 节点数据
*/
getNodes: async (dbName, num) => {
checkAdminPermission()
return apiGet(`/api/data/graph/nodes?kgdb_name=${dbName}&num=${num}`, {}, true)
},
/**
* 查询实体
* @param {string} entityName - 实体名称
* @returns {Promise} - 查询结果
*/
queryNode: async (entityName) => {
checkAdminPermission()
return apiGet(`/api/data/graph/node?entity_name=${entityName}`, {}, true)
},
/**
* 添加JSONL文件到图数据库
* @param {string} filePath - 文件路径
* @returns {Promise} - 添加结果
*/
addByJsonl: async (filePath) => {
checkAdminPermission()
return apiPost('/api/data/graph/add-by-jsonl', { file_path: filePath }, {}, true)
},
/**
* 为未索引节点添加索引
* @param {string} dbName - 图数据库名称
* @returns {Promise} - 索引结果
*/
indexNodes: async (dbName) => {
checkAdminPermission()
return apiPost('/api/data/graph/index-nodes', { kgdb_name: dbName }, {}, true)
},
}
// 系统配置API
export const systemConfigApi = {
/**
* 设置默认智能体
* @param {string} agentId - 智能体ID
* @returns {Promise} - 设置结果
*/
setDefaultAgent: async (agentId) => {
checkAdminPermission()
return apiPost('/api/chat/set_default_agent', { agent_id: agentId }, {}, true)
},
/**
* 获取系统配置
* @returns {Promise} - 系统配置
*/
getSystemConfig: async () => {
checkAdminPermission()
return apiGet('/api/config', {}, true)
},
/**
* 获取智能体配置
* @param {string} agentId - 智能体ID
* @returns {Promise} - 智能体配置
*/
getAgentConfig: async (agentId) => {
checkAdminPermission()
return apiGet(`/api/chat/agent/${agentId}/config`, {}, true)
},
/**
* 保存智能体配置
* @param {string} agentId - 智能体ID
* @param {Object} config - 配置内容
* @returns {Promise} - 保存结果
*/
saveAgentConfig: async (agentId, config) => {
checkAdminPermission()
return apiPost(`/api/chat/agent/${agentId}/config`, config, {}, true)
},
/**
* 更新某个配置
* @param {Object} items - 配置项
* @returns {Promise} - 更新结果
*/
updateConfigItems: async (items) => {
checkAdminPermission()
console.log("updateConfigItems", items)
return apiPost('/api/config/update', items, {}, true)
},
/**
* 重启服务
* @returns {Promise} - 重启结果
*/
restartServer: async () => {
checkSuperAdminPermission()
return apiPost('/api/restart', {}, {}, true)
}
}
// 日志API
export const logApi = {
/**
* 获取系统日志
* @param {Object} params - 日志查询参数
* @returns {Promise} - 日志数据
*/
getLogs: async (params = {}) => {
checkAdminPermission()
return apiGet('/api/log', { params }, true)
},
}
// 通用admin
export const adminApi = {
/**
* 获取所有智能体
* @param {Object} params - 查询参数
* @returns {Promise} - 查询结果
*/
adminGet: async (params, url) => {
checkAdminPermission()
return apiGet(url, { params }, true)
},
/**
* 更新某个配置
* @param {Object} items - 配置项
* @returns {Promise} - 更新结果
*/
adminPost: async (data, url) => {
checkAdminPermission()
return apiPost(url, data, {}, true)
},
}