import http from './request' import type { ApiResp, PageData } from './request' // ---------- 类型定义 ---------- export interface Role { id: number name: string code: string description: string is_system: boolean status: number permissions?: Permission[] } export interface Permission { id: number name: string code: string module: string description: string } export interface User { id: number username: string email: string role_id: number role?: Role status: number storage_used: number storage_limit: number last_login_at?: string last_login_ip?: string created_at?: string } export interface Project { id: number user_id: number name: string description: string storage_used: number storage_limit: number status: number created_at?: string } export interface FileItem { id: number project_id: number user_id: number filename: string size: number mime_type: string md5: string visibility: number download_count: number status: number created_at?: string project?: Project } export interface TempLink { token: string url: string expires_at: string has_password: boolean max_count: number } export interface APIKey { id: number access_key: string name: string status: number last_used_at?: string created_at?: string } export interface Webhook { id: number project_id?: number url: string events: string status: number created_at?: string } export interface OperationLog { id: number user_id?: number username: string action: string resource_type: string resource_id: number resource_name: string ip: string request_path: string request_method: string status: number error_message: string created_at?: string } export interface SystemLog { id: number level: string module: string message: string request_id: string ip: string created_at?: string } export interface SystemSetting { id: number key: string value: string description: string group_name: string } // ---------- 认证 ---------- export const authApi = { register(data: { username: string; email: string; password: string }) { return http.post('/auth/register', data) }, login(data: { account: string; password: string }) { return http.post>('/auth/login', data) }, createAPIKey(name: string) { return http.post>('/auth/apikeys', { name }) }, listAPIKeys() { return http.get>('/auth/apikeys') }, deleteAPIKey(id: number) { return http.delete(`/auth/apikeys/${id}`) }, } // ---------- 用户资料 ---------- export const userApi = { getProfile() { return http.get>('/user/profile') }, updateProfile(email: string) { return http.put('/user/profile', { email }) }, changePassword(oldPassword: string, newPassword: string) { return http.put('/user/password', { old_password: oldPassword, new_password: newPassword, }) }, } // ---------- 项目 ---------- export const projectApi = { create(data: { name: string; description?: string; storage_limit?: number }) { return http.post>('/projects', data) }, list(params: { page?: number; page_size?: number; keyword?: string }) { return http.get>>('/projects', { params }) }, get(id: number) { return http.get>(`/projects/${id}`) }, update(id: number, data: { name?: string; description?: string; storage_limit?: number }) { return http.put>(`/projects/${id}`, data) }, remove(id: number) { return http.delete(`/projects/${id}`) }, } // ---------- 文件 ---------- export interface FileListParams { project_id?: number filename?: string prefix?: string trash?: boolean page?: number page_size?: number } export const fileApi = { upload(formData: FormData) { return http.post>('/files/upload', formData, { headers: { 'Content-Type': 'multipart/form-data' }, timeout: 300000, }) }, list(params: FileListParams) { return http.get>>('/files', { params }) }, info(id: number) { return http.get>(`/files/${id}`) }, // 下载为blob(需认证头) download(id: number) { return http.get(`/files/${id}/download`, { responseType: 'blob', timeout: 300000 }) }, remove(id: number, permanent = false) { return http.delete(`/files/${id}`, { params: permanent ? { permanent: 'true' } : {} }) }, restore(id: number) { return http.post(`/files/${id}/restore`) }, createTempLink(id: number, data: { password?: string; max_count?: number; expires_in?: number }) { return http.post>(`/files/${id}/temp-link`, data) }, } // ---------- 统计 ---------- export const statsApi = { user() { return http.get('/stats/user') }, project(id: number) { return http.get(`/stats/project/${id}`) }, traffic(days = 30) { return http.get('/stats/traffic', { params: { days } }) }, } // ---------- Webhook ---------- export const webhookApi = { create(data: { url: string; events: string; project_id?: number; secret?: string }) { return http.post>('/webhooks', data) }, list() { return http.get>('/webhooks') }, update(id: number, data: { url?: string; events?: string; status?: number }) { return http.put>(`/webhooks/${id}`, data) }, remove(id: number) { return http.delete(`/webhooks/${id}`) }, } // ---------- 管理后台 ---------- export const adminApi = { // 用户管理 listUsers(params: { page?: number; page_size?: number; keyword?: string; role_id?: number; status?: string }) { return http.get>>('/admin/users', { params }) }, createUser(data: { username: string; email: string; password: string; role_id?: number; storage_limit?: number }) { return http.post>('/admin/users', data) }, updateUser(id: number, data: { email?: string; role_id?: number; storage_limit?: number }) { return http.put>(`/admin/users/${id}`, data) }, deleteUser(id: number) { return http.delete(`/admin/users/${id}`) }, setUserStatus(id: number, status: number) { return http.put(`/admin/users/${id}/status`, { status }) }, assignRole(id: number, roleId: number) { return http.put(`/admin/users/${id}/role`, { role_id: roleId }) }, resetPassword(id: number, password: string) { return http.post(`/admin/users/${id}/reset-password`, { password }) }, // 角色权限 listRoles() { return http.get>('/admin/roles') }, createRole(data: { name: string; code: string; description?: string; permissions?: number[] }) { return http.post>('/admin/roles', data) }, updateRole(id: number, data: { name?: string; description?: string; permissions?: number[] }) { return http.put>(`/admin/roles/${id}`, data) }, deleteRole(id: number) { return http.delete(`/admin/roles/${id}`) }, setRolePermissions(id: number, permissions: number[]) { return http.put(`/admin/roles/${id}/permissions`, { permissions }) }, listPermissions() { return http.get>('/admin/permissions') }, // 系统设置 getSettings() { return http.get>>('/admin/settings') }, updateSettings(values: Record) { return http.put('/admin/settings', values) }, // 日志 listOperationLogs(params: { page?: number; page_size?: number; username?: string; action?: string; days?: number }) { return http.get>>('/admin/logs/operation', { params }) }, listSystemLogs(params: { page?: number; page_size?: number; level?: string; module?: string; days?: number }) { return http.get>>('/admin/logs/system', { params }) }, cleanupLogs(days: number) { return http.delete('/admin/logs/cleanup', { params: { days } }) }, // 备份 backup() { return http.post>('/admin/backup') }, listBackups() { return http.get>('/admin/backups') }, downloadBackup(name: string) { return http.get('/admin/backups/download', { params: { name }, responseType: 'blob', timeout: 300000 }) }, } // ---------- 站点状态(公开) ---------- export const siteApi = { status() { return http.get('/status') }, }