import axios from 'axios'; import { getGlobalConfig } from './utils.ts'; import type { MinioUploadPolicy, OSSUploadPolicy } from '@d8d-appcontainer/types'; import 'dayjs/locale/zh-cn'; import type { User, FileLibrary, FileCategory, ThemeSettings, SystemSetting, SystemSettingGroupData, LoginLocation, LoginLocationDetail, Message, UserMessage } from '../share/types.ts'; // 定义API基础URL const API_BASE_URL = '/api'; // 获取OSS完整URL export const getOssUrl = (path: string): string => { // 获取全局配置中的OSS_HOST,如果不存在使用默认值 const ossHost = getGlobalConfig('OSS_BASE_URL') || ''; // 确保path不以/开头 const ossPath = path.startsWith('/') ? path.substring(1) : path; return `${ossHost}/${ossPath}`; }; // =================== // Auth API 定义部分 // =================== // 定义API返回数据类型 interface AuthLoginResponse { message: string; token: string; refreshToken?: string; user: User; } interface AuthResponse { message: string; [key: string]: any; } // 定义Auth API接口类型 interface AuthAPIType { login: (username: string, password: string, latitude?: number, longitude?: number) => Promise; register: (username: string, email: string, password: string) => Promise; logout: () => Promise; getCurrentUser: () => Promise; updateUser: (userId: number, userData: Partial) => Promise; changePassword: (oldPassword: string, newPassword: string) => Promise; requestPasswordReset: (email: string) => Promise; resetPassword: (token: string, newPassword: string) => Promise; } // Auth相关API export const AuthAPI: AuthAPIType = { // 登录API login: async (username: string, password: string, latitude?: number, longitude?: number) => { try { const response = await axios.post(`${API_BASE_URL}/auth/login`, { username, password, latitude, longitude }); return response.data; } catch (error) { throw error; } }, // 注册API register: async (username: string, email: string, password: string) => { try { const response = await axios.post(`${API_BASE_URL}/auth/register`, { username, email, password }); return response.data; } catch (error) { throw error; } }, // 登出API logout: async () => { try { const response = await axios.post(`${API_BASE_URL}/auth/logout`); return response.data; } catch (error) { throw error; } }, // 获取当前用户信息 getCurrentUser: async () => { try { const response = await axios.get(`${API_BASE_URL}/auth/me`); return response.data; } catch (error) { throw error; } }, // 更新用户信息 updateUser: async (userId: number, userData: Partial) => { try { const response = await axios.put(`${API_BASE_URL}/auth/users/${userId}`, userData); return response.data; } catch (error) { throw error; } }, // 修改密码 changePassword: async (oldPassword: string, newPassword: string) => { try { const response = await axios.post(`${API_BASE_URL}/auth/change-password`, { oldPassword, newPassword }); return response.data; } catch (error) { throw error; } }, // 请求重置密码 requestPasswordReset: async (email: string) => { try { const response = await axios.post(`${API_BASE_URL}/auth/request-password-reset`, { email }); return response.data; } catch (error) { throw error; } }, // 重置密码 resetPassword: async (token: string, newPassword: string) => { try { const response = await axios.post(`${API_BASE_URL}/auth/reset-password`, { token, newPassword }); return response.data; } catch (error) { throw error; } } }; // 为UserAPI添加的接口响应类型 interface UsersResponse { data: User[]; pagination: { total: number; current: number; pageSize: number; totalPages: number; }; } interface UserResponse { data: User; message?: string; } interface UserCreateResponse { message: string; data: User; } interface UserUpdateResponse { message: string; data: User; } interface UserDeleteResponse { message: string; id: number; } // 用户管理API export const UserAPI = { // 获取用户列表 getUsers: async (params?: { page?: number, limit?: number, search?: string }): Promise => { try { const response = await axios.get(`${API_BASE_URL}/users`, { params }); return response.data; } catch (error) { throw error; } }, // 获取单个用户详情 getUser: async (userId: number): Promise => { try { const response = await axios.get(`${API_BASE_URL}/users/${userId}`); return response.data; } catch (error) { throw error; } }, // 创建用户 createUser: async (userData: Partial): Promise => { try { const response = await axios.post(`${API_BASE_URL}/users`, userData); return response.data; } catch (error) { throw error; } }, // 更新用户信息 updateUser: async (userId: number, userData: Partial): Promise => { try { const response = await axios.put(`${API_BASE_URL}/users/${userId}`, userData); return response.data; } catch (error) { throw error; } }, // 删除用户 deleteUser: async (userId: number): Promise => { try { const response = await axios.delete(`${API_BASE_URL}/users/${userId}`); return response.data; } catch (error) { throw error; } } }; // 定义文件相关接口类型 interface FileUploadPolicyResponse { message: string; data: MinioUploadPolicy | OSSUploadPolicy; } interface FileListResponse { message: string; data: { list: FileLibrary[]; pagination: { current: number; pageSize: number; total: number; }; }; } interface FileSaveResponse { message: string; data: FileLibrary; } interface FileInfoResponse { message: string; data: FileLibrary; } interface FileDeleteResponse { message: string; } interface FileCategoryListResponse { data: FileCategory[]; total: number; page: number; pageSize: number; } interface FileCategoryCreateResponse { message: string; data: FileCategory; } interface FileCategoryUpdateResponse { message: string; data: FileCategory; } interface FileCategoryDeleteResponse { message: string; } // 文件API接口定义 export const FileAPI = { // 获取文件上传策略 getUploadPolicy: async (filename: string, prefix: string = 'uploads/', maxSize: number = 10 * 1024 * 1024): Promise => { try { const response = await axios.get(`${API_BASE_URL}/upload/policy`, { params: { filename, prefix, maxSize } }); return response.data; } catch (error) { throw error; } }, // 保存文件信息 saveFileInfo: async (fileData: Partial): Promise => { try { const response = await axios.post(`${API_BASE_URL}/upload/save`, fileData); return response.data; } catch (error) { throw error; } }, // 获取文件列表 getFileList: async (params?: { page?: number, pageSize?: number, category_id?: number, fileType?: string, keyword?: string }): Promise => { try { const response = await axios.get(`${API_BASE_URL}/upload/list`, { params }); return response.data; } catch (error) { throw error; } }, // 获取单个文件信息 getFileInfo: async (id: number): Promise => { try { const response = await axios.get(`${API_BASE_URL}/upload/${id}`); return response.data; } catch (error) { throw error; } }, // 更新文件下载计数 updateDownloadCount: async (id: number): Promise => { try { const response = await axios.post(`${API_BASE_URL}/upload/${id}/download`); return response.data; } catch (error) { throw error; } }, // 删除文件 deleteFile: async (id: number): Promise => { try { const response = await axios.delete(`${API_BASE_URL}/upload/${id}`); return response.data; } catch (error) { throw error; } }, // 获取文件分类列表 getCategories: async (params?: { page?: number, pageSize?: number, search?: string }): Promise => { try { const response = await axios.get(`${API_BASE_URL}/file-categories`, { params }); return response.data; } catch (error) { throw error; } }, // 创建文件分类 createCategory: async (data: Partial): Promise => { try { const response = await axios.post(`${API_BASE_URL}/file-categories`, data); return response.data; } catch (error) { throw error; } }, // 更新文件分类 updateCategory: async (id: number, data: Partial): Promise => { try { const response = await axios.put(`${API_BASE_URL}/file-categories/${id}`, data); return response.data; } catch (error) { throw error; } }, // 删除文件分类 deleteCategory: async (id: number): Promise => { try { const response = await axios.delete(`${API_BASE_URL}/file-categories/${id}`); return response.data; } catch (error) { throw error; } } }; // Theme API 响应类型 export interface ThemeSettingsResponse { message: string; data: ThemeSettings; } // Theme API 定义 export const ThemeAPI = { // 获取主题设置 getThemeSettings: async (): Promise => { try { const response = await axios.get(`${API_BASE_URL}/theme`); return response.data.data; } catch (error) { throw error; } }, // 更新主题设置 updateThemeSettings: async (themeData: Partial): Promise => { try { const response = await axios.put(`${API_BASE_URL}/theme`, themeData); return response.data.data; } catch (error) { throw error; } }, // 重置主题设置 resetThemeSettings: async (): Promise => { try { const response = await axios.post(`${API_BASE_URL}/theme/reset`); return response.data.data; } catch (error) { throw error; } } }; // 图表数据API接口类型 interface ChartDataResponse { message: string; data: T; } interface UserActivityData { date: string; count: number; } interface FileUploadsData { month: string; count: number; } interface FileTypesData { type: string; value: number; } interface DashboardOverviewData { userCount: number; fileCount: number; articleCount: number; todayLoginCount: number; } // 图表数据API export const ChartAPI = { // 获取用户活跃度数据 getUserActivity: async (): Promise> => { try { const response = await axios.get(`${API_BASE_URL}/charts/user-activity`); return response.data; } catch (error) { throw error; } }, // 获取文件上传统计数据 getFileUploads: async (): Promise> => { try { const response = await axios.get(`${API_BASE_URL}/charts/file-uploads`); return response.data; } catch (error) { throw error; } }, // 获取文件类型分布数据 getFileTypes: async (): Promise> => { try { const response = await axios.get(`${API_BASE_URL}/charts/file-types`); return response.data; } catch (error) { throw error; } }, // 获取仪表盘概览数据 getDashboardOverview: async (): Promise> => { try { const response = await axios.get(`${API_BASE_URL}/charts/dashboard-overview`); return response.data; } catch (error) { throw error; } } }; // 消息API接口类型 interface MessagesResponse { data: UserMessage[]; pagination: { total: number; current: number; pageSize: number; totalPages: number; }; } interface MessageResponse { data: Message; message?: string; } interface MessageCountResponse { count: number; } // 消息API export const MessageAPI = { // 获取消息列表 getMessages: async (params?: { page?: number, pageSize?: number, type?: string, status?: string, search?: string }): Promise => { try { const response = await axios.get(`${API_BASE_URL}/messages`, { params }); return response.data; } catch (error) { throw error; } }, // 发送消息 sendMessage: async (data: { title: string, content: string, type: string, receiver_ids: number[] }): Promise => { try { const response = await axios.post(`${API_BASE_URL}/messages`, data); return response.data; } catch (error) { throw error; } }, // 获取未读消息数 getUnreadCount: async (): Promise => { try { const response = await axios.get(`${API_BASE_URL}/messages/count/unread`); return response.data; } catch (error) { throw error; } }, // 标记消息为已读 markAsRead: async (id: number): Promise => { try { const response = await axios.post(`${API_BASE_URL}/messages/${id}/read`); return response.data; } catch (error) { throw error; } }, // 删除消息 deleteMessage: async (id: number): Promise => { try { const response = await axios.delete(`${API_BASE_URL}/messages/${id}`); return response.data; } catch (error) { throw error; } } }; // 地图相关API的接口类型定义 export interface LoginLocationResponse { message: string; data: LoginLocation[]; } export interface LoginLocationDetailResponse { message: string; data: LoginLocationDetail; } export interface LoginLocationUpdateResponse { message: string; data: LoginLocationDetail; } // 地图相关API export const MapAPI = { // 获取地图标记点数据 getMarkers: async (params?: { startTime?: string; endTime?: string; userId?: number }): Promise => { try { const response = await axios.get(`${API_BASE_URL}/map/markers`, { params }); return response.data; } catch (error) { throw error; } }, // 获取登录位置详情 getLocationDetail: async (locationId: number): Promise => { try { const response = await axios.get(`${API_BASE_URL}/map/location/${locationId}`); return response.data; } catch (error) { throw error; } }, // 更新登录位置信息 updateLocation: async (locationId: number, data: { longitude: number; latitude: number; location_name?: string; }): Promise => { try { const response = await axios.put(`${API_BASE_URL}/map/location/${locationId}`, data); return response.data; } catch (error) { throw error; } } }; // 系统设置API export const SystemAPI = { // 获取所有系统设置 getSettings: async (): Promise => { try { const response = await axios.get(`${API_BASE_URL}/settings`); return response.data.data; } catch (error) { throw error; } }, // 获取指定分组的系统设置 getSettingsByGroup: async (group: string): Promise => { try { const response = await axios.get(`${API_BASE_URL}/settings/group/${group}`); return response.data.data; } catch (error) { throw error; } }, // 更新系统设置 updateSettings: async (settings: Partial[]): Promise => { try { const response = await axios.put(`${API_BASE_URL}/settings`, settings); return response.data.data; } catch (error) { throw error; } }, // 重置系统设置 resetSettings: async (): Promise => { try { const response = await axios.post(`${API_BASE_URL}/settings/reset`); return response.data.data; } catch (error) { throw error; } } };