论坛,聊天室前后端对接
Change-Id: I90740329ab40dc050e8a791a382ab187900d673a
diff --git a/src/api/forum.js b/src/api/forum.js
new file mode 100644
index 0000000..b228024
--- /dev/null
+++ b/src/api/forum.js
@@ -0,0 +1,38 @@
+import request from './request'
+
+export function getAllForums() {
+ return request({
+ url: '/api/forums',
+ method: 'get'
+ })
+}
+
+export function getForumById(id) {
+ return request({
+ url: `/api/forums/${id}`,
+ method: 'get'
+ })
+}
+
+export function createForum(data) {
+ return request({
+ url: '/api/forums',
+ method: 'post',
+ data
+ })
+}
+
+export function updateForum(id, data) {
+ return request({
+ url: `/api/forums/${id}`,
+ method: 'put',
+ data
+ })
+}
+
+export function deleteForum(id) {
+ return request({
+ url: `/api/forums/${id}`,
+ method: 'delete'
+ })
+}
\ No newline at end of file
diff --git a/src/api/forumTag.js b/src/api/forumTag.js
new file mode 100644
index 0000000..a63895e
--- /dev/null
+++ b/src/api/forumTag.js
@@ -0,0 +1,38 @@
+import request from './request'
+
+export function getAllTags() {
+ return request({
+ url: '/api/tags',
+ method: 'get'
+ })
+}
+
+export function createTag(data) {
+ return request({
+ url: '/api/tags',
+ method: 'post',
+ data
+ })
+}
+
+export function deleteTag(tagId) {
+ return request({
+ url: `/api/tags/${tagId}`,
+ method: 'delete'
+ })
+}
+
+export function getTopicTags(topicId) {
+ return request({
+ url: `/api/tags/topics/${topicId}`,
+ method: 'get'
+ })
+}
+
+export function assignTagsToTopic(topicId, tagNames) {
+ return request({
+ url: `/api/tags/topics/${topicId}/assign`,
+ method: 'post',
+ data: tagNames
+ })
+}
\ No newline at end of file
diff --git a/src/api/post.js b/src/api/post.js
new file mode 100644
index 0000000..c49293b
--- /dev/null
+++ b/src/api/post.js
@@ -0,0 +1,52 @@
+import request from './request'
+
+export function getPostsByTopic(topicId) {
+ return request({
+ url: `/api/posts/topic/${topicId}`,
+ method: 'get'
+ })
+}
+
+export function getPostTreeByTopic(topicId) {
+ return request({
+ url: `/api/posts/topic/${topicId}/tree`,
+ method: 'get'
+ })
+}
+
+export function createPost(data) {
+ return request({
+ url: '/api/posts',
+ method: 'post',
+ data
+ })
+}
+
+export function getPostById(id) {
+ return request({
+ url: `/api/posts/${id}`,
+ method: 'get'
+ })
+}
+
+export function updatePost(id, data) {
+ return request({
+ url: `/api/posts/${id}`,
+ method: 'put',
+ data
+ })
+}
+
+export function deletePost(id) {
+ return request({
+ url: `/api/posts/${id}`,
+ method: 'delete'
+ })
+}
+
+export function getUserPosts(userId) {
+ return request({
+ url: `/api/posts/user/${userId}`,
+ method: 'get'
+ })
+}
\ No newline at end of file
diff --git a/src/api/postLike.js b/src/api/postLike.js
new file mode 100644
index 0000000..9ad674a
--- /dev/null
+++ b/src/api/postLike.js
@@ -0,0 +1,22 @@
+import request from './request'
+
+export function likePost(postId, userId) {
+ return request({
+ url: `/api/post-likes/${postId}/like/${userId}`,
+ method: 'post'
+ })
+}
+
+export function unlikePost(postId, userId) {
+ return request({
+ url: `/api/post-likes/${postId}/unlike/${userId}`,
+ method: 'delete'
+ })
+}
+
+export function getPostLikeCount(postId) {
+ return request({
+ url: `/api/post-likes/${postId}/count`,
+ method: 'get'
+ })
+}
\ No newline at end of file
diff --git a/src/api/posts.js b/src/api/posts.js
new file mode 100644
index 0000000..01a347e
--- /dev/null
+++ b/src/api/posts.js
@@ -0,0 +1,7 @@
+import request from './request';
+
+export const getTopicDetail = (id) => request.get(` /posts/${id}`);
+export const getTopicPosts = (topicId, page = 1, size = 20) => request.get(`/posts/topic/${topicId}`, { params: { page, size } });
+export const createPost = (data) => request.post('/posts', data);
+export const updatePost = (id, data) => request.put(`/posts/${id}`, data);
+export const deletePost = (id) => request.delete(`/posts/${id}`);
\ No newline at end of file
diff --git a/src/api/request.js b/src/api/request.js
index 0e06f0a..01da8a3 100644
--- a/src/api/request.js
+++ b/src/api/request.js
@@ -5,7 +5,7 @@
const request = axios.create({
// 关键:不要设置baseURL,或者设置为空字符串
// 这样请求会发送到当前域名(8080),然后被代理转发到8081
- baseURL: process.env.VUE_APP_BASE_API || '/api',
+ baseURL: process.env.VUE_APP_BASE_API || '',
timeout: 10000,
headers: {
// 'Content-Type': 'application/json'
@@ -15,15 +15,27 @@
request.interceptors.request.use(
config => {
const token = localStorage.getItem('token')
- console.log('📤 添加 token 到请求头:', token)
+ console.log('📤 Token长度:', token ? token.length : 0)
+ console.log('📤 Token前50字符:', token ? token.substring(0, 50) + '...' : 'null')
+
if (token) {
+ // 检查token是否过大
+ if (token.length > 8000) {
+ console.warn('⚠️ Token过大,长度:', token.length)
+ // 清除过大的token
+ localStorage.removeItem('token')
+ localStorage.removeItem('tokenInfo')
+ localStorage.removeItem('userInfo')
+ localStorage.removeItem('isLoggedIn')
+ ElMessage.error('登录信息过大,请重新登录')
+ router.push('/login')
+ return Promise.reject(new Error('Token过大'))
+ }
config.headers.Authorization = `Bearer ${token}`
}
console.log('🚀 发送请求:', config.method?.toUpperCase(), config.url)
console.log('📤 请求数据:', config.data)
- console.log('🔍 VUE_APP_BASE_API:', process.env.VUE_APP_BASE_API)
- console.log('🔍 VUE_APP_BACKEND:', process.env.VUE_APP_BACKEND)
return config
},
@@ -59,6 +71,15 @@
ElMessage.error('API接口不存在')
console.error('❌ 请求的URL:', error.config.url)
break
+ case 431:
+ console.error('❌ 请求头太大 (431),可能是Token过大')
+ localStorage.removeItem('token')
+ localStorage.removeItem('tokenInfo')
+ localStorage.removeItem('userInfo')
+ localStorage.removeItem('isLoggedIn')
+ ElMessage.error('登录信息过大,请重新登录')
+ router.push('/login')
+ break
case 500:
ElMessage.error('服务器内部错误')
break
diff --git a/src/api/subscription.js b/src/api/subscription.js
new file mode 100644
index 0000000..0090fa4
--- /dev/null
+++ b/src/api/subscription.js
@@ -0,0 +1,32 @@
+import request from './request'
+
+export function subscribeTopic(data) {
+ return request({
+ url: '/api/subscriptions/subscribe',
+ method: 'post',
+ data
+ })
+}
+
+export function unsubscribeTopic(data) {
+ return request({
+ url: '/api/subscriptions/unsubscribe',
+ method: 'post',
+ data
+ })
+}
+
+export function checkSubscription(topicId) {
+ return request({
+ url: '/api/subscriptions/check',
+ method: 'get',
+ params: { topicId }
+ })
+}
+
+export function getSubscriptionList() {
+ return request({
+ url: '/api/subscriptions/list',
+ method: 'get'
+ })
+}
\ No newline at end of file
diff --git a/src/api/topic.js b/src/api/topic.js
new file mode 100644
index 0000000..629b71f
--- /dev/null
+++ b/src/api/topic.js
@@ -0,0 +1,53 @@
+import request from './request'
+
+export function getAllTopics() {
+ return request({
+ url: '/api/topics',
+ method: 'get'
+ })
+}
+
+export function getTopicById(id) {
+ return request({
+ url: `/api/topics/${id}`,
+ method: 'get'
+ })
+}
+
+export function getTopicsByForum(forumId) {
+ return request({
+ url: `/api/topics/forum/${forumId}`,
+ method: 'get'
+ })
+}
+
+export function createTopic(data) {
+ return request({
+ url: '/api/topics',
+ method: 'post',
+ data
+ })
+}
+
+export function updateTopic(id, data) {
+ return request({
+ url: `/api/topics/${id}`,
+ method: 'put',
+ data
+ })
+}
+
+export function deleteTopic(id) {
+ return request({
+ url: `/api/topics/${id}`,
+ method: 'delete'
+ })
+}
+
+export function searchTopics(query, forumId, page = 0, size = 10) {
+ return request({
+ url: '/api/topics/search',
+ method: 'get',
+ params: { q: query, forumId, page, size }
+ })
+}
diff --git a/src/api/topicView.js b/src/api/topicView.js
new file mode 100644
index 0000000..f4410e1
--- /dev/null
+++ b/src/api/topicView.js
@@ -0,0 +1,16 @@
+import request from './request'
+
+export function recordTopicView(params) {
+ return request({
+ url: '/topic-views/record',
+ method: 'post',
+ params
+ })
+}
+
+export function getUserViewHistory() {
+ return request({
+ url: '/topic-views',
+ method: 'get'
+ })
+}
\ No newline at end of file
diff --git a/src/api/user.js b/src/api/user.js
index 2cfb40c..32073b1 100644
--- a/src/api/user.js
+++ b/src/api/user.js
@@ -7,7 +7,18 @@
*/
getCurrentUser() {
return request({
- url: '/user/profile',
+ url: '/auth/status',
+ method: 'get'
+ })
+ },
+
+ /**
+ * 获取用户分享率和统计信息
+ * @returns {Promise<Object>} 分享率统计信息
+ */
+ getUserRatioInfo() {
+ return request({
+ url: '/torrent/ratio/info',
method: 'get'
})
},
diff --git a/src/api/userHistory.js b/src/api/userHistory.js
new file mode 100644
index 0000000..2853d92
--- /dev/null
+++ b/src/api/userHistory.js
@@ -0,0 +1,15 @@
+import request from './request'
+
+export function getUserHistory(userId) {
+ return request({
+ url: `/api/history/${userId}`,
+ method: 'get'
+ })
+}
+
+export function getUserHistoryByType(userId, type) {
+ return request({
+ url: `/api/history/${userId}/${type}`,
+ method: 'get'
+ })
+}
\ No newline at end of file