100 lines
4.7 KiB
JavaScript
100 lines
4.7 KiB
JavaScript
import axios from 'axios';
|
|
|
|
const api = axios.create({
|
|
baseURL: import.meta.env.VITE_API_URL || 'http://localhost:8000/api',
|
|
timeout: 8000, // 增加超时时间到 10秒
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
}
|
|
});
|
|
|
|
// 请求拦截器:自动附加 Token
|
|
api.interceptors.request.use((config) => {
|
|
const token = localStorage.getItem('token');
|
|
if (token) {
|
|
config.headers.Authorization = `Bearer ${token}`;
|
|
}
|
|
return config;
|
|
}, (error) => {
|
|
return Promise.reject(error);
|
|
});
|
|
|
|
export const getConfigs = () => api.get('/configs/');
|
|
export const createOrder = (data) => api.post('/orders/', data);
|
|
export const nativePay = (data) => api.post('/pay/', data);
|
|
export const getOrder = (id) => api.get(`/orders/${id}/`);
|
|
export const queryOrderStatus = (id) => api.get(`/orders/${id}/query_status/`);
|
|
export const initiatePayment = (orderId) => api.post(`/orders/${orderId}/initiate_payment/`);
|
|
export const confirmPayment = (orderId) => api.post(`/orders/${orderId}/confirm_payment/`);
|
|
|
|
export const getServices = () => api.get('/services/');
|
|
export const getServiceDetail = (id) => api.get(`/services/${id}/`);
|
|
export const createServiceOrder = (data) => api.post('/service-orders/', data);
|
|
export const getVCCourses = () => api.get('/courses/');
|
|
export const getVCCourseDetail = (id) => api.get(`/courses/${id}/`, { params: { _t: Date.now() } });
|
|
export const enrollCourse = (data) => api.post('/course-enrollments/', data);
|
|
|
|
export const sendSms = (data) => api.post('/auth/send-sms/', data);
|
|
export const queryMyOrders = (data) => api.post('/orders/my_orders/', data);
|
|
export const phoneLogin = (data) => api.post('/auth/phone-login/', data);
|
|
export const getUserInfo = () => api.get('/users/me/');
|
|
export const updateUserInfo = (data) => api.post('/wechat/update/', data);
|
|
export const uploadUserAvatar = (data) => {
|
|
// 使用 axios 直接请求外部接口,避免 base URL 和拦截器干扰
|
|
return axios.post('https://data.tangledup-ai.com/upload?folder=uploads/market/avator', data, {
|
|
headers: {
|
|
'Content-Type': 'multipart/form-data',
|
|
}
|
|
});
|
|
};
|
|
|
|
// Community / Forum API
|
|
export const getTopics = (params) => api.get('/community/topics/', { params });
|
|
export const getTopicDetail = (id) => api.get(`/community/topics/${id}/`);
|
|
export const likeTopic = (id) => api.post(`/community/topics/${id}/like/`);
|
|
export const createTopic = (data) => api.post('/community/topics/', data);
|
|
export const updateTopic = (id, data) => api.patch(`/community/topics/${id}/`, data);
|
|
export const getReplies = (params) => api.get('/community/replies/', { params });
|
|
export const likeReply = (id) => api.post(`/community/replies/${id}/like/`);
|
|
export const createReply = (data) => api.post('/community/replies/', data);
|
|
export const uploadMedia = (data) => {
|
|
return api.post('/community/media/', data, {
|
|
headers: {
|
|
'Content-Type': 'multipart/form-data',
|
|
}
|
|
});
|
|
};
|
|
export const getStarUsers = () => api.get('/users/stars/');
|
|
export const getMyPaidItems = () => api.get('/users/paid-items/');
|
|
export const getAnnouncements = () => api.get('/community/announcements/');
|
|
export const getActivities = () => api.get('/community/activities/');
|
|
export const getActivityDetail = (id) => api.get(`/community/activities/${id}/`);
|
|
export const signUpActivity = (id, data) => api.post(`/community/activities/${id}/signup/`, data);
|
|
export const getMySignups = () => api.get('/community/activities/my_signups/');
|
|
|
|
// Competition API
|
|
export const getCompetitions = (params) => api.get('/competition/competitions/', { params });
|
|
export const getCompetitionDetail = (id) => api.get(`/competition/competitions/${id}/`);
|
|
export const enrollCompetition = (id, data) => api.post(`/competition/competitions/${id}/enroll/`, data);
|
|
export const getMyCompetitionEnrollment = (id) => api.get(`/competition/competitions/${id}/my_enrollment/`);
|
|
|
|
export const getProjects = (params) => api.get('/competition/projects/', { params });
|
|
export const getProjectDetail = (id) => api.get(`/competition/projects/${id}/`);
|
|
export const createProject = (data) => api.post('/competition/projects/', data);
|
|
export const updateProject = (id, data) => api.patch(`/competition/projects/${id}/`, data);
|
|
export const submitProject = (id) => api.post(`/competition/projects/${id}/submit/`);
|
|
|
|
export const uploadProjectFile = (data) => {
|
|
return api.post('/competition/files/', data, {
|
|
headers: {
|
|
'Content-Type': 'multipart/form-data',
|
|
}
|
|
});
|
|
};
|
|
|
|
export const createScore = (data) => api.post('/competition/scores/', data);
|
|
export const createComment = (data) => api.post('/competition/comments/', data);
|
|
export const getComments = (params) => api.get('/competition/comments/', { params });
|
|
|
|
export default api;
|