Files
huihuiSquare/frontend/src/api/index.js

91 lines
4.2 KiB
JavaScript
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.
import axios from 'axios'
import { ElMessage } from 'element-plus'
const request = axios.create({
baseURL: '/api',
timeout: 30000,
})
// 递归把响应里所有 +00:00 时区标识替换为 +08:00数据库存北京时间后端误标为 UTC
function fixDatetimeTZ(obj) {
if (typeof obj === 'string') {
return obj.replace(/T(\d{2}:\d{2}:\d{2})\+00:00/g, 'T$1+08:00')
}
if (Array.isArray(obj)) return obj.map(fixDatetimeTZ)
if (obj && typeof obj === 'object') {
const result = {}
for (const k in obj) result[k] = fixDatetimeTZ(obj[k])
return result
}
return obj
}
request.interceptors.response.use(
res => {
const data = fixDatetimeTZ(res.data)
if (data.code && data.code !== 200) {
ElMessage.error(data.message || '请求失败')
return Promise.reject(new Error(data.message))
}
return data
},
err => {
const msg = err.response?.data?.detail || err.response?.data?.message || err.message || '网络错误'
ElMessage.error(msg)
return Promise.reject(err)
}
)
// Dashboard
export const getDashboard = () => request.get('/dashboard')
export const getTokenTrend = (days = 30) => request.get('/dashboard/token-trend', { params: { days } })
export const getMonthlyTokenTrend = () => request.get('/dashboard/monthly-token-trend')
// Users
export const getUsers = (params) => request.get('/users', { params })
export const createUser = (data) => request.post('/users', data)
export const updateUser = (id, data) => request.put(`/users/${id}`, data)
export const deleteUser = (id) => request.delete(`/users/${id}`)
export const batchUserAction = (data) => request.post('/users/batch/action', data)
export const loginUser = (id) => request.post(`/users/${id}/login`)
export const logoutUser = (id) => request.post(`/users/${id}/logout`)
export const generatePersonality = (id) => request.post(`/users/${id}/personality/generate`)
export const updatePersonality = (id, data) => request.put(`/users/${id}/personality`, data)
export const importUsers = (formData) => request.post('/users/excel/import', formData, {
headers: { 'Content-Type': 'multipart/form-data' }
})
export const downloadTemplate = () => request.get('/users/excel/template', { responseType: 'blob' })
export const exportUsers = () => request.get('/users/excel/export', { responseType: 'blob' })
export const deduplicateUsers = () => request.post('/users/deduplicate')
export const clearAllUsers = () => request.post('/users/clear-all')
export const loginAllUsers = () => request.post('/users/login-all')
export const syncAllProfiles = () => request.post('/users/sync-all-profiles')
export const cancelInteraction = (id) => request.post(`/interactions/${id}/cancel`)
export const runInteractionNow = () => request.post('/system/interaction/run-now')
// Interactions
export const getInteractions = (params) => request.get('/interactions', { params })
export const retryInteraction = (id) => request.post(`/interactions/${id}/retry`)
export const exportInteractions = (params) => request.get('/interactions/export', { params, responseType: 'blob' })
// AI Models
export const getAIModels = () => request.get('/ai-models')
export const createAIModel = (data) => request.post('/ai-models', data)
export const updateAIModel = (id, data) => request.put(`/ai-models/${id}`, data)
export const deleteAIModel = (id) => request.delete(`/ai-models/${id}`)
export const testAIModel = (data) => request.post('/ai-models/test', data)
// System
export const getSystemConfigs = () => request.get('/system/configs')
export const updateSystemConfigs = (data) => request.put('/system/configs', data)
export const toggleScheduler = (enabled) => request.post('/system/scheduler/toggle', { enabled })
export const resetAllSessions = () => request.post('/system/sessions/reset-all')
// Logs
export const getLoginLogs = (params) => request.get('/logs/login', { params })
export const getLogFiles = () => request.get('/logs/files')
export const tailLogFile = (filename, lines = 100) => request.get(`/logs/files/${filename}/tail`, { params: { lines } })
export default request
export const uploadAvatar = (userId, formData) => request.post(`/users/${userId}/upload-avatar`, formData, { headers: { "Content-Type": "multipart/form-data" } })