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
