完成主页, 作品页,作品编辑页
> 未对接后端接口
Change-Id: I5d62663602656da4940707e00f76bfe09d824c2c
diff --git a/src/api/User/UserApi.ts b/src/api/User/UserApi.ts
index 56152fc..cd7aa55 100644
--- a/src/api/User/UserApi.ts
+++ b/src/api/User/UserApi.ts
@@ -1,12 +1,17 @@
import type { AxiosResponse } from "axios";
import axios from "axios";
-import type { UserInfo } from "./type";
+import type { UserDetailInfo, UserInfo } from "./type";
import type { CommonResponse } from "../type";
class UserAPi {
static getMe() :Promise<AxiosResponse<CommonResponse<UserInfo>>> {
return axios.get('/api/user/me');
}
+
+ static getMeDetail(userid:string) :Promise<AxiosResponse<CommonResponse<UserDetailInfo>>> {
+ return axios.get(`/api/user/${userid}`);
+ }
}
+
export default UserAPi;
\ No newline at end of file
diff --git a/src/api/User/type.ts b/src/api/User/type.ts
index a7a1503..1410aa8 100644
--- a/src/api/User/type.ts
+++ b/src/api/User/type.ts
@@ -6,5 +6,5 @@
export interface UserDetailInfo {
userid: string,
username: string,
- // ...
+ email: string,
}
\ No newline at end of file
diff --git a/src/api/categoryApi.ts b/src/api/categoryApi.ts
deleted file mode 100644
index 816ac71..0000000
--- a/src/api/categoryApi.ts
+++ /dev/null
@@ -1,90 +0,0 @@
-import axios from 'axios';
-import type { CategoryDTO, Category, WorkResponse } from './otherType';
-
-const API_BASE_URL = '/api';
-
-class CategoryAPI {
- /**
- * 获取全部分区(树形结构)
- * @returns 返回分区的树形结构数据
- */
- static getCategoryTree(): Promise<CategoryDTO[]> {
- return axios.get<CategoryDTO[]>(`${API_BASE_URL}/categories`)
- .then(response => response.data);
- }
-
- /**
- * 获取单个分区详情
- * @param id 分区ID
- * @returns 返回单个分区的详细信息
- */
- static getCategory(id: number): Promise<Category> {
- return axios.get<Category>(`${API_BASE_URL}/categories/${id}`)
- .then(response => response.data);
- }
-
- /**
- * 创建新分区
- * @param category 分区数据(不包含ID)
- * @returns 返回创建成功的消息
- */
- static createCategory(category: Omit<Category, 'id'>): Promise<string> {
- return axios.post<string>(`${API_BASE_URL}/categories`, category)
- .then(response => response.data);
- }
-
- /**
- * 更新分区信息
- * @param id 分区ID
- * @param category 更新后的分区数据
- * @returns 返回更新成功的消息
- */
- static updateCategory(id: number, category: Partial<Category>): Promise<string> {
- return axios.put<string>(`${API_BASE_URL}/categories/${id}`, category)
- .then(response => response.data);
- }
-
- /**
- * 删除分区
- * @param id 分区ID
- * @returns 返回删除成功的消息
- */
- static deleteCategory(id: number): Promise<string> {
- return axios.delete<string>(`${API_BASE_URL}/categories/${id}`)
- .then(response => response.data);
- }
-
- /**
- * 获取分区下的作品列表(带分页)
- * @param categoryId 分区ID
- * @param params 分页和排序参数
- * @returns 返回作品列表和分页信息
- */
- static getWorksByCategory(
- categoryId: number,
- params?: {
- page?: number;
- size?: number;
- sort?: string;
- }
- ): Promise<WorkResponse> {
- return axios.get<WorkResponse>(`${API_BASE_URL}/works`, {
- params: {
- categoryId,
- ...params
- }
- }).then(response => response.data);
- }
-
- /**
- * 获取子分区列表
- * @param parentId 父分区ID
- * @returns 返回子分区列表
- */
- static getSubCategories(parentId: number): Promise<CategoryDTO[]> {
- return axios.get<CategoryDTO[]>(`${API_BASE_URL}/categories/${parentId}/children`)
- .then(response => response.data);
- }
-}
-
-export default CategoryAPI;
\ No newline at end of file
diff --git a/src/api/categoryTypes.ts b/src/api/categoryTypes.ts
deleted file mode 100644
index 4a46034..0000000
--- a/src/api/categoryTypes.ts
+++ /dev/null
@@ -1,67 +0,0 @@
-import type { ReactNode } from "react";
-
-// 基础分类接口
-export interface CategoryDTO {
- id: number;
- name: string;
- description?: string;
- parentId?: number; // 移除了 null 类型,只保留 number | undefined
- children?: CategoryDTO[];
- workCount?: number;
-}
-
-
-// 基础资源接口
-interface BaseResource {
- id: number;
- title: string;
- categoryId: number;
- categoryName: string;
- uploadDate: string;
- uploader: string;
- size: string;
- seeders: number;
- leechers: number;
- downloadCount: number;
- hash: string;
-}
-
-// 音乐资源
-export interface MusicResource extends BaseResource {
- category: ReactNode;
- artist: string;
- quality: 'MP3 128k' | 'MP3 320k' | 'FLAC' | 'APE' | 'Hi-Res' | 'DSD';
- genre: string[];
-}
-
-// 影视资源
-export interface MovieResource extends BaseResource {
- director: string;
- actors: string[];
- resolution: '1080p' | '720p' | '4K' | '8K';
- duration: string;
-}
-
-// 游戏资源
-export interface GameResource extends BaseResource {
- developer: string;
- publisher: string;
- platform: 'PC' | 'PS' | 'Xbox' | 'Switch';
- releaseDate: string;
-}
-
-// 其他资源
-export interface OtherResource extends BaseResource {
- description: string;
- fileType: string;
-}
-
-// 分类DTO
-export interface CategoryDTO {
- id: number;
- name: string;
- description?: string;
- parentId?: number;
- children?: CategoryDTO[];
- workCount?: number;
-}
\ No newline at end of file
diff --git a/src/api/commentApi.ts b/src/api/commentApi.ts
deleted file mode 100644
index 360e659..0000000
--- a/src/api/commentApi.ts
+++ /dev/null
@@ -1,77 +0,0 @@
-import axios from 'axios';
-import type { Comment, CommentFormData, CommentReply, ReplyFormData } from './otherType';
-
-const API_BASE_URL = '/api';
-
-class CommentAPI {
- /**
- * 添加评论
- */
- static addComment(data: CommentFormData): Promise<Comment> {
- return axios.post<Comment>(`${API_BASE_URL}/comments`, data)
- .then(response => response.data);
- }
-
- /**
- * 删除评论
- */
- static deleteComment(commentId: number): Promise<void> {
- return axios.delete(`${API_BASE_URL}/comments/${commentId}`);
- }
-
- /**
- * 更新评论
- */
- static updateComment(commentId: number, data: CommentFormData): Promise<Comment> {
- return axios.put<Comment>(`${API_BASE_URL}/comments/${commentId}`, data)
- .then(response => response.data);
- }
-
- /**
- * 获取单个评论
- */
- static getCommentById(commentId: number): Promise<Comment> {
- return axios.get<Comment>(`${API_BASE_URL}/comments/${commentId}`)
- .then(response => response.data);
- }
-
- /**
- * 获取帖子下的所有评论
- */
- static getCommentsByPostId(postId: number): Promise<Comment[]> {
- return axios.get<Comment[]>(`${API_BASE_URL}/comments/post/${postId}`)
- .then(response => response.data);
- }
-
- /**
- * 添加回复
- */
- static addReply(commentId: number, data: ReplyFormData): Promise<CommentReply> {
- return axios.post<CommentReply>(`${API_BASE_URL}/comments/${commentId}/replies`, data)
- .then(response => response.data);
- }
-
- /**
- * 获取评论的所有回复
- */
- static getReplies(commentId: number): Promise<CommentReply[]> {
- return axios.get<CommentReply[]>(`${API_BASE_URL}/comments/${commentId}/replies`)
- .then(response => response.data);
- }
-
- /**
- * 点赞评论
- */
- static likeComment(commentId: number): Promise<void> {
- return axios.post(`${API_BASE_URL}/comments/${commentId}/like`);
- }
-
- /**
- * 举报评论
- */
- static reportComment(commentId: number, reason: string): Promise<void> {
- return axios.post(`${API_BASE_URL}/comments/${commentId}/report`, { reason });
- }
-}
-
-export default CommentAPI;
\ No newline at end of file
diff --git a/src/api/interceptors.ts b/src/api/interceptors.ts
index 3c0863b..04bdcb3 100644
--- a/src/api/interceptors.ts
+++ b/src/api/interceptors.ts
@@ -26,7 +26,7 @@
code,
message: msg,
data,
- success: code === 0, // 根据 code 判断请求是否成功
+ ...response.data
},
};
},
diff --git a/src/api/otherType.ts b/src/api/otherType.ts
deleted file mode 100644
index 60523d0..0000000
--- a/src/api/otherType.ts
+++ /dev/null
@@ -1,164 +0,0 @@
-// 认证相关类型
-export interface LoginRequest {
- email: string;
- password: string;
-}
-
-export interface LoginResponse {
- user: string;
- token: string;
- refreshToken: string;
-}
-
-export interface CommonResponse<T= null> {
- code: number;
- message: string;
- data: T;
-}
-
-// 作品相关类型
-export interface Work {
- size: string;
- data(data: any): unknown;
- artist: string;
- quality: string;
- genre: string[];
- id: number;
- title: string;
- author: string;
- authorId: number;
- views: number;
- likes: number;
- categoryId: number;
- categoryName: string;
- description: string;
- content: string;
- coverUrl: string;
- createTime: string;
- attachments: Attachment[];
- bugCount: number;
- discussionCount: number;
-}
-
-export interface WorkResponse {
- content: Work[];
- totalElements: number;
- totalPages: number;
-}
-
-export interface WorkFormData {
- title: string;
- categoryId: number;
- description: string;
- content: string;
- coverFile?: File;
- attachments?: File[];
-}
-
-// Bug反馈相关类型
-export interface BugReport {
- id: number;
- title: string;
- description: string;
- severity: 'low' | 'medium' | 'high';
- status: 'open' | 'resolved' | 'wontfix';
- reporter: string;
- reporterId: number;
- workId: number;
- createTime: string;
-}
-
-// 讨论区相关类型
-export interface Discussion {
- id: number;
- title: string;
- content: string;
- author: string;
- authorId: number;
- workId: number;
- isPinned: boolean;
- commentCount: number;
- createTime: string;
- lastUpdateTime: string;
-}
-
-export interface DiscussionFormData {
- workId: number;
- title: string;
- content: string;
-}
-
-// 评论相关类型
-export interface Comment {
- id: number;
- author: string;
- avatar: string;
- content: string;
- likes: number;
- replyCount: number;
- createTime: string;
- replies?: CommentReply[];
-}
-
-export interface CommentFormData {
- postId: number; // 可以是作品ID或讨论区ID
- content: string;
- parentId?: number; // 用于回复评论
-}
-
-export interface CommentReply {
- id: number;
- author: string;
- avatar: string;
- content: string;
- likes: number;
- createTime: string;
-}
-
-export interface ReplyFormData {
- content: string;
-}
-
-// 分区相关类型
-export interface Category {
- id: number;
- name: string;
- description?: string;
- parentId?: number | null;
- coverUrl?: string;
- createdAt?: string;
- updatedAt?: string;
-}
-
-export interface CategoryDTO extends Category {
- children?: CategoryDTO[];
- workCount?: number;
-}
-
-// 用户相关类型
-export interface User {
- id: number;
- username: string;
- email: string;
- avatar?: string;
- role: 'user' | 'admin';
- createdAt: string;
- worksCount: number;
- completedWorks: number;
-}
-
-// 通用类型
-export interface Attachment {
- id: number;
- name: string;
- url: string;
- size: string;
-}
-
-// API响应通用类型
-export interface ApiResponse<T> {
- success: boolean;
- data?: T;
- message?: string;
- error?: string;
-}
\ No newline at end of file
diff --git a/src/api/workApi.ts b/src/api/workApi.ts
deleted file mode 100644
index d624821..0000000
--- a/src/api/workApi.ts
+++ /dev/null
@@ -1,105 +0,0 @@
-import axios from 'axios';
-import type { Work, WorkResponse, WorkFormData, BugReport, Discussion } from './otherType';
-
-const API_BASE_URL = '/api';
-
-class WorkAPI {
- /**
- * 获取作品列表(支持分页、分类筛选和搜索)
- */
- static getWorks(params?: {
- categoryId?: number;
- page?: number;
- size?: number;
- search?: string;
- }): Promise<WorkResponse> {
- return axios.get<WorkResponse>(`${API_BASE_URL}/works`, { params })
- .then(response => response.data);
- }
-
- /**
- * 获取单个作品详情
- */
- static getWorkById(id: number): Promise<Work> {
- return axios.get<Work>(`${API_BASE_URL}/works/${id}`)
- .then(response => response.data);
- }
-
- /**
- * 创建新作品
- */
- static createWork(data: WorkFormData): Promise<Work> {
- return axios.post<Work>(`${API_BASE_URL}/works`, data)
- .then(response => response.data);
- }
-
- /**
- * 更新作品信息
- */
- static updateWork(id: number, data: WorkFormData): Promise<Work> {
- return axios.put<Work>(`${API_BASE_URL}/works/${id}`, data)
- .then(response => response.data);
- }
-
- /**
- * 删除作品
- */
- static deleteWork(id: number): Promise<void> {
- return axios.delete(`${API_BASE_URL}/works/${id}`);
- }
-
- /**
- * 点赞作品
- */
- static likeWork(id: number): Promise<void> {
- return axios.post(`${API_BASE_URL}/works/${id}/like`);
- }
-
- /**
- * 根据作者查询作品
- */
- static getWorksByAuthor(author: string): Promise<Work[]> {
- return axios.get<Work[]>(`${API_BASE_URL}/works/byAuthor`, { params: { author } })
- .then(response => response.data);
- }
-
- /**
- * 获取作品Bug反馈列表
- */
- static getBugReports(workId: number): Promise<BugReport[]> {
- return axios.get<BugReport[]>(`${API_BASE_URL}/works/${workId}/bugs`)
- .then(response => response.data);
- }
-
- /**
- * 提交Bug反馈
- */
- static reportBug(workId: number, data: {
- title: string;
- description: string;
- severity: 'low' | 'medium' | 'high';
- }): Promise<void> {
- return axios.post(`${API_BASE_URL}/works/${workId}/bugs`, data);
- }
-
- /**
- * 获取作品讨论区列表
- */
- static getDiscussions(workId: number): Promise<Discussion[]> {
- return axios.get<Discussion[]>(`${API_BASE_URL}/works/${workId}/discussions`)
- .then(response => response.data);
- }
-
- /**
- * 创建新讨论
- */
- static createDiscussion(data: {
- workId: number;
- title: string;
- content: string;
- }): Promise<void> {
- return axios.post(`${API_BASE_URL}/discussions`, data);
- }
-}
-
-export default WorkAPI;
\ No newline at end of file