Spaces:
Sleeping
Sleeping
File size: 4,416 Bytes
e85fa50 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
import axios from 'axios';
// 创建 axios 实例
const api = axios.create({
baseURL: 'https://samlax12-promptbackend.hf.space/api', // 使用实际后端地址
headers: {
'Content-Type': 'application/json'
}
});
// 请求拦截器,添加认证信息
api.interceptors.request.use(config => {
const token = localStorage.getItem('authToken');
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
}, error => {
return Promise.reject(error);
});
// 响应拦截器,处理错误
api.interceptors.response.use(response => {
return response;
}, error => {
if (error.response && error.response.status === 401) {
// 认证失败,清除登录信息并重定向到登录页
localStorage.removeItem('authToken');
localStorage.removeItem('user');
window.location.href = '/login';
}
return Promise.reject(error);
});
// 用户认证相关 API
export const authAPI = {
login: async (username: string, password: string) => {
const response = await api.post('/auth/login', { username, password });
// eslint-disable-next-line
const { token, _id, username: user } = response.data;
localStorage.setItem('authToken', token);
localStorage.setItem('user', user);
return response.data;
},
getProfile: async () => {
return api.get('/auth/profile');
},
logout: () => {
localStorage.removeItem('authToken');
localStorage.removeItem('user');
}
};
// 分类相关 API
export const categoryAPI = {
getAll: async () => {
const response = await api.get('/categories');
return response.data;
},
create: async (data: { name: string; color: string }) => {
const response = await api.post('/categories', data);
return response.data;
},
update: async (id: string, data: { name: string; color: string }) => {
const response = await api.put(`/categories/${id}`, data);
return response.data;
},
delete: async (id: string) => {
const response = await api.delete(`/categories/${id}`);
return response.data;
}
};
// 提示词组相关 API
export const promptGroupAPI = {
getAll: async () => {
const response = await api.get('/prompt-groups');
return response.data;
},
getById: async (id: string) => {
const response = await api.get(`/prompt-groups/${id}`);
return response.data;
},
create: async (data: { name: string; description: string; category: string }) => {
const response = await api.post('/prompt-groups', data);
return response.data;
},
update: async (id: string, data: { name: string; description: string; category: string }) => {
const response = await api.put(`/prompt-groups/${id}`, data);
return response.data;
},
delete: async (id: string) => {
const response = await api.delete(`/prompt-groups/${id}`);
return response.data;
},
// 提示词相关操作
addPrompt: async (groupId: string, data: { title: string; content: string; tags: string[] }) => {
const response = await api.post(`/prompt-groups/${groupId}/prompts`, data);
return response.data;
},
updatePrompt: async (groupId: string, promptId: string, data: { title: string; content: string; tags: string[] }) => {
const response = await api.put(`/prompt-groups/${groupId}/prompts/${promptId}`, data);
return response.data;
},
deletePrompt: async (groupId: string, promptId: string) => {
const response = await api.delete(`/prompt-groups/${groupId}/prompts/${promptId}`);
return response.data;
},
// DSL 文件相关操作 - 更新为支持内容上传
addDslFile: async (groupId: string, data: { name: string; content?: string; fileData?: string; mimeType?: string }) => {
const response = await api.post(`/prompt-groups/${groupId}/dsl-files`, data);
return response.data;
},
updateDslFile: async (groupId: string, fileId: string, data: { name?: string; content?: string }) => {
const response = await api.put(`/prompt-groups/${groupId}/dsl-files/${fileId}`, data);
return response.data;
},
deleteDslFile: async (groupId: string, fileId: string) => {
const response = await api.delete(`/prompt-groups/${groupId}/dsl-files/${fileId}`);
return response.data;
}
};
export default api; |