91 lines
4.2 KiB
JavaScript
91 lines
4.2 KiB
JavaScript
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" } })
|