diff --git a/API/API-TRM/.gitignore b/API/API-TRM/.gitignore
deleted file mode 100644
index efc0820..0000000
--- a/API/API-TRM/.gitignore
+++ /dev/null
@@ -1,10 +0,0 @@
-node_modules/
-.vscode/
-dist/
-*.log
-.DS_Store
-.env
-.env.local
-.env.production
-.env.development
-package-lock.json
diff --git a/API/API-TRM/TRM/Back/app/__pycache__/routes.cpython-310.pyc b/API/API-TRM/TRM/Back/app/__pycache__/routes.cpython-310.pyc
deleted file mode 100644
index af72069..0000000
--- a/API/API-TRM/TRM/Back/app/__pycache__/routes.cpython-310.pyc
+++ /dev/null
Binary files differ
diff --git a/API/API-TRM/TRM/Back/app/functions/__pycache__/Fpost.cpython-310.pyc b/API/API-TRM/TRM/Back/app/functions/__pycache__/Fpost.cpython-310.pyc
deleted file mode 100644
index 2b6cd6d..0000000
--- a/API/API-TRM/TRM/Back/app/functions/__pycache__/Fpost.cpython-310.pyc
+++ /dev/null
Binary files differ
diff --git a/API/API-TRM/TRM/Back/app/routes.py b/API/API-TRM/TRM/Back/app/routes.py
deleted file mode 100644
index 1238364..0000000
--- a/API/API-TRM/TRM/Back/app/routes.py
+++ /dev/null
@@ -1,44 +0,0 @@
-from flask import Blueprint, render_template
-from .functions.Fpost import Fpost;
-from sqlalchemy import create_engine
-from sqlalchemy.orm import sessionmaker
-from config import Config
-from flask import jsonify,request
-
-main = Blueprint('main', __name__)
-
-
-@main.route('/spostlist',methods=['POST','GET'])
-def postlist():
-    data=request.get_json()
-    engine=create_engine(Config.SQLURL)
-    SessionLocal = sessionmaker(bind=engine)
-    session = SessionLocal()
-    f=Fpost(session)
-    checres=f.checkid(data['userid'])
-    if(not checres):
-        return jsonify()
-    res=f.getlist()
-    respons=[]
-    for datai in res:
-        respons.append({
-            'id': datai[0],
-            'title': datai[1],
-            'status': datai[2]
-        })
-    return jsonify(respons)
-
-@main.route('/sgetpost',methods=['POST','GET'])
-def post():
-    data=request.get_json()
-    engine=create_engine(Config.SQLURL)
-    SessionLocal = sessionmaker(bind=engine)
-    session = SessionLocal()
-    f=Fpost(session)
-    checres=f.checkid(data['userid'])
-    if(not checres):
-        return jsonify()
-    res=f.getpost(data['postid'])
-
-    return jsonify(res.to_dict() if res else {})
-
diff --git a/API/API-TRM/TRM/Back/tests/__pycache__/test_app.cpython-312-pytest-7.4.4.pyc b/API/API-TRM/TRM/Back/tests/__pycache__/test_app.cpython-312-pytest-7.4.4.pyc
deleted file mode 100644
index b21ba04..0000000
--- a/API/API-TRM/TRM/Back/tests/__pycache__/test_app.cpython-312-pytest-7.4.4.pyc
+++ /dev/null
Binary files differ
diff --git a/API/API-TRM/TRM/Front/trm-front/src/App.js b/API/API-TRM/TRM/Front/trm-front/src/App.js
deleted file mode 100644
index 3784575..0000000
--- a/API/API-TRM/TRM/Front/trm-front/src/App.js
+++ /dev/null
@@ -1,25 +0,0 @@
-import logo from './logo.svg';
-import './App.css';
-
-function App() {
-  return (
-    <div className="App">
-      <header className="App-header">
-        <img src={logo} className="App-logo" alt="logo" />
-        <p>
-          Edit <code>src/App.js</code> and save to reload.
-        </p>
-        <a
-          className="App-link"
-          href="https://reactjs.org"
-          target="_blank"
-          rel="noopener noreferrer"
-        >
-          Learn React
-        </a>
-      </header>
-    </div>
-  );
-}
-
-export default App;
diff --git a/API/API-TRM/TRM/Front/trm-front/src/index.js b/API/API-TRM/TRM/Front/trm-front/src/index.js
deleted file mode 100644
index d563c0f..0000000
--- a/API/API-TRM/TRM/Front/trm-front/src/index.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import React from 'react';
-import ReactDOM from 'react-dom/client';
-import './index.css';
-import App from './App';
-import reportWebVitals from './reportWebVitals';
-
-const root = ReactDOM.createRoot(document.getElementById('root'));
-root.render(
-  <React.StrictMode>
-    <App />
-  </React.StrictMode>
-);
-
-// If you want to start measuring performance in your app, pass a function
-// to log results (for example: reportWebVitals(console.log))
-// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
-reportWebVitals();
diff --git a/API/API-TRM/all_tables.sql b/API/API-TRM/all_tables.sql
deleted file mode 100644
index f1e8547..0000000
--- a/API/API-TRM/all_tables.sql
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
-数据库设计说明：
-1.	核心表结构：
-	users：存储用户信息，包含角色管理和账号状态
-	posts：核心内容表，支持多模态内容（图文/视频/文档）
-	behaviors：记录用户互动行为（点赞/收藏/浏览等）
-	comments：评论系统，支持多级回复
-	follows：用户社交关系
-2.	推荐系统支持：
-	posts.heat 字段存储动态计算的热度值
-	behaviors 表记录用户行为用于协同过滤
-	user_tags 表构建用户兴趣画像
-	通过 post_tags 实现内容标签分类
-3.	多模态内容处理：
-	posts.media_urls 使用 JSON 类型存储多个资源 URL
-	posts.type 区分不同类型的内容（图文/视频/文档）
-4.	审核与安全：
-	audits 表记录内容审核历史
-	posts.status 管理内容生命周期状态
-	logs 表记录系统操作和访问日志
-5.	性能优化：
-	为查询频繁字段添加索引（热度/行为类型/时间）
-	使用 JSON 类型存储灵活数据（通知内容/媒体资源）
-	通过 heat 字段预计算支持热门排序
-6.	扩展性设计：
-	用户画像系统通过 user_tags 表实现
-	通知系统支持多种互动类型
-	行为表设计支持未来扩展新行为类型
-*/
-
-
--- 创建数据库
-CREATE DATABASE IF NOT EXISTS redbook DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci;
-USE redbook;
-
--- 用户表
-CREATE TABLE users (
-    id INT AUTO_INCREMENT PRIMARY KEY COMMENT '用户ID',
-    username VARCHAR(50) NOT NULL UNIQUE COMMENT '用户名',
-    password VARCHAR(255) NOT NULL COMMENT '加密密码',
-    email VARCHAR(100) NOT NULL UNIQUE COMMENT '邮箱',
-    avatar VARCHAR(255) COMMENT '头像URL',
-    role ENUM('user', 'admin') DEFAULT 'user' COMMENT '角色',
-    bio VARCHAR(255) COMMENT '个人简介',
-    status ENUM('active', 'banned', 'muted') DEFAULT 'active' COMMENT '账号状态',
-    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
-    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
-) ENGINE=InnoDB COMMENT='用户表';
-
--- 标签表
-CREATE TABLE tags (
-    id INT AUTO_INCREMENT PRIMARY KEY COMMENT '标签ID',
-    name VARCHAR(50) NOT NULL UNIQUE COMMENT '标签名称',
-    description VARCHAR(255) COMMENT '标签描述',
-    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
-) ENGINE=InnoDB COMMENT='内容标签表';
-
--- 话题/超话表
-CREATE TABLE topics (
-    id INT AUTO_INCREMENT PRIMARY KEY COMMENT '话题ID',
-    name VARCHAR(100) NOT NULL UNIQUE COMMENT '话题名称',
-    description TEXT COMMENT '话题描述',
-    status ENUM('active', 'archived') DEFAULT 'active' COMMENT '状态',
-    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
-) ENGINE=InnoDB COMMENT='话题/超话表';
-
--- 内容帖子表
-CREATE TABLE posts (
-    id INT AUTO_INCREMENT PRIMARY KEY COMMENT '帖子ID',
-    user_id INT NOT NULL COMMENT '作者ID',
-    topic_id INT COMMENT '所属话题ID',
-    type ENUM('text', 'image', 'video', 'document') DEFAULT 'text' COMMENT '内容类型',
-    title VARCHAR(255) NOT NULL COMMENT '标题',
-    content TEXT NOT NULL COMMENT '正文内容',
-    media_urls JSON COMMENT '媒体资源URL数组',
-    status ENUM('draft', 'pending', 'published', 'deleted', 'rejected') DEFAULT 'draft' COMMENT '状态',
-    heat INT DEFAULT 0 COMMENT '热度值',
-    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
-    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
-    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
-    FOREIGN KEY (topic_id) REFERENCES topics(id) ON DELETE SET NULL
-) ENGINE=InnoDB COMMENT='内容帖子表';
-
--- 帖子标签关联表
-CREATE TABLE post_tags (
-    post_id INT NOT NULL COMMENT '帖子ID',
-    tag_id INT NOT NULL COMMENT '标签ID',
-    PRIMARY KEY (post_id, tag_id),
-    FOREIGN KEY (post_id) REFERENCES posts(id) ON DELETE CASCADE,
-    FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE
-) ENGINE=InnoDB COMMENT='帖子标签关联表';
-
--- 用户行为表
-CREATE TABLE behaviors (
-    id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '行为ID',
-    user_id INT NOT NULL COMMENT '用户ID',
-    post_id INT NOT NULL COMMENT '帖子ID',
-    type ENUM('like', 'comment', 'favorite', 'view', 'share') NOT NULL COMMENT '行为类型',
-    value INT DEFAULT 1 COMMENT '行为值',
-    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '行为时间',
-    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
-    FOREIGN KEY (post_id) REFERENCES posts(id) ON DELETE CASCADE
-) ENGINE=InnoDB COMMENT='用户行为记录表';
-
--- 评论表
-CREATE TABLE comments (
-    id INT AUTO_INCREMENT PRIMARY KEY COMMENT '评论ID',
-    post_id INT NOT NULL COMMENT '帖子ID',
-    user_id INT NOT NULL COMMENT '用户ID',
-    parent_id INT DEFAULT NULL COMMENT '父评论ID',
-    content TEXT NOT NULL COMMENT '评论内容',
-    status ENUM('active', 'deleted') DEFAULT 'active' COMMENT '状态',
-    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
-    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
-    FOREIGN KEY (post_id) REFERENCES posts(id) ON DELETE CASCADE,
-    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
-    FOREIGN KEY (parent_id) REFERENCES comments(id) ON DELETE CASCADE
-) ENGINE=InnoDB COMMENT='评论表';
-
--- 用户关注关系表
-CREATE TABLE follows (
-    follower_id INT NOT NULL COMMENT '关注者ID',
-    followee_id INT NOT NULL COMMENT '被关注者ID',
-    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '关注时间',
-    PRIMARY KEY (follower_id, followee_id),
-    FOREIGN KEY (follower_id) REFERENCES users(id) ON DELETE CASCADE,
-    FOREIGN KEY (followee_id) REFERENCES users(id) ON DELETE CASCADE
-) ENGINE=InnoDB COMMENT='用户关注关系表';
-
--- 通知表
-CREATE TABLE notifications (
-    id INT AUTO_INCREMENT PRIMARY KEY COMMENT '通知ID',
-    user_id INT NOT NULL COMMENT '接收用户ID',
-    type ENUM('like', 'comment', 'follow', 'system', 'audit') NOT NULL COMMENT '通知类型',
-    content JSON NOT NULL COMMENT '通知内容',
-    is_read BOOLEAN DEFAULT FALSE COMMENT '是否已读',
-    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
-    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
-) ENGINE=InnoDB COMMENT='用户通知表';
-
--- 审核记录表
-CREATE TABLE audits (
-    id INT AUTO_INCREMENT PRIMARY KEY COMMENT '审核ID',
-    post_id INT NOT NULL COMMENT '帖子ID',
-    admin_id INT NOT NULL COMMENT '管理员ID',
-    result ENUM('approved', 'rejected') NOT NULL COMMENT '审核结果',
-    reason VARCHAR(255) COMMENT '审核原因',
-    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '审核时间',
-    FOREIGN KEY (post_id) REFERENCES posts(id) ON DELETE CASCADE,
-    FOREIGN KEY (admin_id) REFERENCES users(id) ON DELETE CASCADE
-) ENGINE=InnoDB COMMENT='内容审核记录表';
-
--- 日志表
-CREATE TABLE logs (
-    id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '日志ID',
-    user_id INT DEFAULT NULL COMMENT '用户ID',
-    type ENUM('access', 'error', 'behavior', 'system') NOT NULL COMMENT '日志类型',
-    content TEXT NOT NULL COMMENT '日志内容',
-    ip VARCHAR(45) COMMENT 'IP地址',
-    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '记录时间',
-    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL
-) ENGINE=InnoDB COMMENT='系统日志表';
-
--- 用户兴趣标签表（用户画像）
-CREATE TABLE user_tags (
-    user_id INT NOT NULL COMMENT '用户ID',
-    tag_id INT NOT NULL COMMENT '标签ID',
-    weight FLOAT DEFAULT 1.0 COMMENT '兴趣权重',
-    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
-    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
-    PRIMARY KEY (user_id, tag_id),
-    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
-    FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE
-) ENGINE=InnoDB COMMENT='用户兴趣标签表';
-
--- 索引优化
-CREATE INDEX idx_posts_heat ON posts(heat);
-CREATE INDEX idx_behaviors_type ON behaviors(type);
-CREATE INDEX idx_notifications_read ON notifications(is_read);
-CREATE INDEX idx_logs_created ON logs(created_at);
-CREATE INDEX idx_comments_post ON comments(post_id);
\ No newline at end of file
diff --git a/API/API-TRM/xiaohongshu-upload-platform/README.md b/API/API-TRM/xiaohongshu-upload-platform/README.md
deleted file mode 100644
index 6f35930..0000000
--- a/API/API-TRM/xiaohongshu-upload-platform/README.md
+++ /dev/null
@@ -1,185 +0,0 @@
-# 小红书内容创作平台
-
-这是一个基于 React + Vite 构建的小红书内容创作平台界面，完全复制了小红书官方创作服务平台的设计和功能。
-
-## 功能特性 ✨
-
-### 🎨 界面设计
-- **完全还原小红书官方设计**：精确复制了小红书创作服务平台的视觉风格
-- **响应式布局**：支持桌面端和移动端适配
-- **现代化UI**：使用 Lucide React 图标库，提供清晰美观的界面
-
-### 📤 上传功能
-- **双模式上传**：支持图片上传和视频上传两种模式
-- **拖拽上传**：支持文件拖拽到上传区域
-- **点击上传**：点击按钮选择文件上传
-- **文件验证**：
-  - 图片：支持 JPEG、JPG、PNG、WebP 格式，最大 32MB
-  - 视频：支持 MP4、MOV、AVI 格式，最大 2GB
-- **实时进度显示**：带有动画效果的上传进度条
-
-### 🖼️ 文件管理
-- **文件预览**：上传后实时显示文件缩略图
-- **文件信息**：显示文件名、大小等详细信息
-- **批量管理**：支持单个删除和批量清除
-- **文件计数**：实时显示已上传文件数量
-
-### 🎯 交互体验
-- **拖拽反馈**：拖拽时提供视觉反馈效果
-- **加载状态**：上传过程中的加载动画
-- **操作提示**：完成上传后的成功提示
-- **悬停效果**：按钮和文件项的悬停交互
-
-### 🗂️ 导航系统
-- **侧边栏导航**：完整的功能菜单
-- **可展开子菜单**：数据看板等功能的子选项
-- **活跃状态**：当前选中页面的高亮显示
-- **固定布局**：头部和侧边栏固定定位
-
-## 技术栈 🛠️
-
-- **前端框架**：React 19.1.0
-- **构建工具**：Vite 6.0.5
-- **图标库**：Lucide React 0.468.0
-- **样式**：纯 CSS（无预处理器）
-- **开发语言**：JavaScript + JSX
-
-## 安装运行 🚀
-
-1. **安装依赖**
-   ```bash
-   npm install
-   ```
-
-2. **启动开发服务器**
-   ```bash
-   npm run dev
-   ```
-
-3. **打开浏览器**
-   ```
-   http://localhost:5173
-   ```
-
-4. **构建生产版本**
-   ```bash
-   npm run build
-   ```
-
-## 项目结构 📁
-
-```
-发布页面/
-├── public/              # 静态资源
-│   └── vite.svg        # Vite 图标
-├── src/
-│   ├── App.jsx         # 主应用组件
-│   ├── App.css         # 主样式文件
-│   ├── index.css       # 全局样式
-│   └── main.jsx        # 应用入口
-├── index.html          # HTML 入口文件
-├── package.json        # 项目配置
-├── vite.config.js      # Vite 配置
-└── README.md          # 项目说明
-```
-
-## 核心功能实现 💡
-
-### 文件上传处理
-```javascript
-const handleFileUpload = () => {
-  const input = document.createElement('input')
-  input.type = 'file'
-  input.accept = activeTab === 'video' ? 'video/*' : 'image/*'
-  input.multiple = activeTab === 'image'
-  
-  input.onchange = (e) => {
-    const files = Array.from(e.target.files)
-    if (files.length > 0 && validateFiles(files)) {
-      simulateUpload(files)
-    }
-  }
-  
-  input.click()
-}
-```
-
-### 拖拽上传实现
-```javascript
-const handleDrop = (e) => {
-  e.preventDefault()
-  e.stopPropagation()
-  setIsDragOver(false)
-  
-  const files = Array.from(e.dataTransfer.files)
-  if (files.length > 0 && validateFiles(files)) {
-    simulateUpload(files)
-  }
-}
-```
-
-### 文件验证机制
-```javascript
-const validateFiles = (files) => {
-  const validImageTypes = ['image/jpeg', 'image/jpg', 'image/png', 'image/webp']
-  const validVideoTypes = ['video/mp4', 'video/mov', 'video/avi']
-  
-  const validTypes = activeTab === 'video' ? validVideoTypes : validImageTypes
-  const maxSize = activeTab === 'video' ? 2 * 1024 * 1024 * 1024 : 32 * 1024 * 1024
-  
-  return files.every(file => 
-    validTypes.includes(file.type) && file.size <= maxSize
-  )
-}
-```
-
-## 样式特色 🎨
-
-### 响应式设计
-- 桌面端：固定侧边栏布局
-- 移动端：隐藏侧边栏，堆叠布局
-- 自适应文件网格：根据屏幕大小调整列数
-
-### 动画效果
-- 拖拽时的放大效果
-- 进度条的流光动画
-- 文件项的悬停过渡
-- 页面切换的淡入效果
-
-### 色彩方案
-- 主色调：#ff4757（小红书红）
-- 背景色：#f5f7fa（浅灰蓝）
-- 文字色：#333（深灰）
-- 边框色：#e8eaed（浅灰）
-
-## 待扩展功能 🔮
-
-- **后端集成**：连接真实的文件上传 API
-- **用户认证**：登录注册功能
-- **内容编辑**：笔记内容编辑器
-- **数据统计**：真实的数据看板功能
-- **社交功能**：评论、点赞等互动功能
-
-## 开发说明 📝
-
-这个项目完全基于前端实现，所有的上传功能都是模拟的。文件预览使用了 `URL.createObjectURL()` 来生成本地预览链接。在实际部署时，需要：
-
-1. 集成后端文件上传 API
-2. 实现用户认证系统
-3. 添加数据持久化
-4. 优化性能和安全性
-
-## 浏览器兼容性 🌐
-
-- Chrome 90+
-- Firefox 88+
-- Safari 14+
-- Edge 90+
-
-## 许可证 📄
-
-MIT License
-
----
-
-**注意**：本项目仅用于学习和演示目的，请遵守相关法律法规和平台使用条款。
diff --git a/API/API-TRM/xiaohongshu-upload-platform/index.html b/API/API-TRM/xiaohongshu-upload-platform/index.html
deleted file mode 100644
index b919940..0000000
--- a/API/API-TRM/xiaohongshu-upload-platform/index.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<!doctype html>
-<html lang="zh-CN">
-  <head>
-    <meta charset="UTF-8" />
-    <link rel="icon" type="image/svg+xml" href="/vite.svg" />
-    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <title>小红书创作服务平台</title>
-  </head>
-  <body>
-    <div id="root"></div>
-    <script type="module" src="/src/main.jsx"></script>
-  </body>
-</html>
diff --git a/API/API-TRM/xiaohongshu-upload-platform/package.json b/API/API-TRM/xiaohongshu-upload-platform/package.json
deleted file mode 100644
index 00a233f..0000000
--- a/API/API-TRM/xiaohongshu-upload-platform/package.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
-  "name": "xiaohongshu-creator-platform",
-  "private": true,
-  "version": "0.0.0",
-  "type": "module",
-  "scripts": {
-    "dev": "vite",
-    "build": "vite build",
-    "preview": "vite preview"
-  },
-  "dependencies": {
-    "react": "^18.3.1",
-    "react-dom": "^18.3.1",
-    "lucide-react": "^0.468.0"
-  },
-  "devDependencies": {
-    "@vitejs/plugin-react": "^4.3.4",
-    "vite": "^6.0.5"
-  }
-}
diff --git a/API/API-TRM/xiaohongshu-upload-platform/public/vite.svg b/API/API-TRM/xiaohongshu-upload-platform/public/vite.svg
deleted file mode 100644
index ee9fada..0000000
--- a/API/API-TRM/xiaohongshu-upload-platform/public/vite.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
diff --git a/API/API-TRM/xiaohongshu-upload-platform/src/App.css b/API/API-TRM/xiaohongshu-upload-platform/src/App.css
deleted file mode 100644
index 00d10d6..0000000
--- a/API/API-TRM/xiaohongshu-upload-platform/src/App.css
+++ /dev/null
@@ -1,583 +0,0 @@
-.app {
-  display: flex;
-  min-height: 100vh;
-  background-color: #f5f7fa;
-}
-
-/* Header */
-.header {
-  position: fixed;
-  top: 0;
-  left: 0;
-  right: 0;
-  height: 60px;
-  background: #fff;
-  border-bottom: 1px solid #e8eaed;
-  display: flex;
-  align-items: center;
-  padding: 0 20px;
-  z-index: 1000;
-  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
-}
-
-.header-left {
-  display: flex;
-  align-items: center;
-  gap: 12px;
-}
-
-.logo {
-  background: #ff4757;
-  color: white;
-  padding: 6px 12px;
-  border-radius: 6px;
-  font-size: 14px;
-  font-weight: bold;
-}
-
-.header-title {
-  font-size: 18px;
-  font-weight: 500;
-  color: #333;
-}
-
-.header-right {
-  margin-left: auto;
-  display: flex;
-  align-items: center;
-  gap: 12px;
-}
-
-.user-info {
-  display: flex;
-  align-items: center;
-  gap: 8px;
-  color: #666;
-  font-size: 14px;
-}
-
-/* Sidebar */
-.sidebar {
-  position: fixed;
-  left: 0;
-  top: 60px;
-  width: 200px;
-  height: calc(100vh - 60px);
-  background: #fff;
-  border-right: 1px solid #e8eaed;
-  overflow-y: auto;
-  z-index: 999;
-}
-
-.publish-btn {
-  margin: 16px;
-  background: #ff4757;
-  color: white;
-  padding: 10px 16px;
-  border-radius: 6px;
-  font-size: 14px;
-  font-weight: 500;
-  text-align: center;
-  transition: background 0.2s;
-}
-
-.publish-btn:hover {
-  background: #ff3742;
-}
-
-.nav-menu {
-  padding: 0;
-  list-style: none;
-}
-
-.nav-item {
-  border-bottom: 1px solid #f0f0f0;
-}
-
-.nav-link {
-  display: flex;
-  align-items: center;
-  padding: 12px 20px;
-  color: #333;
-  font-size: 14px;
-  transition: all 0.2s;
-  gap: 8px;
-}
-
-.nav-link:hover {
-  background: #f8f9fa;
-  color: #ff4757;
-}
-
-.nav-link.active {
-  background: linear-gradient(135deg, #ff4757, #ff6b7a);
-  color: white;
-  font-weight: 500;
-}
-
-.nav-link.active .lucide {
-  color: white;
-}
-
-.nav-submenu {
-  padding-left: 20px;
-  background: #fafafa;
-}
-
-.nav-submenu .nav-link {
-  padding: 8px 20px;
-  font-size: 13px;
-  color: #666;
-}
-
-.nav-submenu .nav-link:hover {
-  color: #ff4757;
-}
-
-/* Main Content */
-.main-content {
-  margin-left: 200px;
-  padding-top: 60px;
-  flex: 1;
-  min-height: 100vh;
-}
-
-.content-wrapper {
-  padding: 20px;
-  max-width: 1200px;
-  margin: 0 auto;
-}
-
-/* Upload Area */
-.upload-tabs {
-  display: flex;
-  gap: 20px;
-  margin-bottom: 30px;
-  border-bottom: 1px solid #e8eaed;
-}
-
-.upload-tab {
-  padding: 12px 0;
-  font-size: 16px;
-  color: #666;
-  cursor: pointer;
-  border-bottom: 2px solid transparent;
-  transition: all 0.2s;
-}
-
-.upload-tab.active {
-  color: #ff4757;
-  border-bottom-color: #ff4757;
-  font-weight: 500;
-}
-
-.upload-area {
-  background: #fff;
-  border-radius: 8px;
-  padding: 80px 40px;
-  text-align: center;
-  border: 2px dashed #ddd;
-  margin-bottom: 40px;
-  transition: all 0.2s;
-  min-height: 300px;
-  display: flex;
-  flex-direction: column;
-  justify-content: center;
-  align-items: center;
-  position: relative;
-}
-
-.upload-area:hover {
-  border-color: #ff4757;
-  background: #fff8f8;
-}
-
-.upload-area.drag-over {
-  border-color: #ff4757;
-  background: #fff0f0;
-  transform: scale(1.02);
-}
-
-.upload-icon {
-  width: 100px;
-  height: 100px;
-  margin: 0 auto 30px;
-  background: #f8f9fa;
-  border-radius: 50%;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  font-size: 40px;
-  color: #ccc;
-  transition: all 0.3s ease;
-}
-
-.upload-area:hover .upload-icon {
-  background: #ff475710;
-  color: #ff4757;
-  transform: scale(1.1);
-}
-
-.upload-area.drag-over .upload-icon {
-  background: #ff475720;
-  color: #ff4757;
-  transform: scale(1.2);
-}
-
-.upload-title {
-  font-size: 20px;
-  color: #333;
-  margin-bottom: 12px;
-  font-weight: 500;
-}
-
-.upload-subtitle {
-  font-size: 14px;
-  color: #999;
-  margin-bottom: 30px;
-}
-
-.upload-btn {
-  background: #ff4757;
-  color: white;
-  padding: 14px 28px;
-  border-radius: 6px;
-  font-size: 16px;
-  font-weight: 500;
-  transition: background 0.2s;
-  min-width: 120px;
-}
-
-.upload-btn:hover:not(:disabled) {
-  background: #ff3742;
-}
-
-.upload-btn:disabled {
-  background: #ccc;
-  cursor: not-allowed;
-}
-
-.upload-btn.uploading {
-  background: #ff4757;
-  opacity: 0.8;
-}
-
-/* File Preview */
-.file-preview-area {
-  background: #fff;
-  border-radius: 8px;
-  padding: 20px;
-  margin-bottom: 40px;
-  border: 1px solid #e8eaed;
-}
-
-/* Preview Header */
-.preview-header {
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-  margin-bottom: 16px;
-}
-
-.preview-title {
-  font-size: 16px;
-  color: #333;
-  margin-bottom: 16px;
-  font-weight: 500;
-}
-
-.clear-files-btn {
-  background: #ff4757;
-  color: white;
-  padding: 6px 12px;
-  border-radius: 4px;
-  font-size: 12px;
-  transition: background 0.2s;
-}
-
-.clear-files-btn:hover {
-  background: #ff3742;
-}
-
-.file-grid {
-  display: grid;
-  grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
-  gap: 16px;
-}
-
-.file-item {
-  display: flex;
-  flex-direction: column;
-  align-items: center;
-  padding: 12px;
-  border: 1px solid #f0f0f0;
-  border-radius: 6px;
-  transition: all 0.2s ease;
-  position: relative;
-}
-
-.file-item:hover {
-  border-color: #ff4757;
-  box-shadow: 0 2px 8px rgba(255, 71, 87, 0.1);
-}
-
-.file-item:hover .remove-file-btn {
-  opacity: 1;
-}
-
-.remove-file-btn {
-  position: absolute;
-  top: 4px;
-  right: 4px;
-  background: rgba(255, 71, 87, 0.8);
-  color: white;
-  border-radius: 50%;
-  width: 20px;
-  height: 20px;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  font-size: 14px;
-  font-weight: bold;
-  opacity: 0;
-  transition: all 0.2s;
-}
-
-.file-thumbnail {
-  width: 80px;
-  height: 80px;
-  border-radius: 6px;
-  overflow: hidden;
-  margin-bottom: 8px;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  background: #f8f9fa;
-}
-
-.file-thumbnail img {
-  width: 100%;
-  height: 100%;
-  object-fit: cover;
-}
-
-.video-thumbnail {
-  color: #666;
-}
-
-.file-info {
-  text-align: center;
-  width: 100%;
-}
-
-.file-name {
-  font-size: 12px;
-  color: #333;
-  margin-bottom: 4px;
-  font-weight: 500;
-}
-
-.file-size {
-  font-size: 11px;
-  color: #999;
-}
-
-/* Upload Progress */
-.progress-container {
-  margin-top: 20px;
-  width: 100%;
-  max-width: 400px;
-}
-
-.progress-bar {
-  width: 100%;
-  height: 8px;
-  background-color: #f0f0f0;
-  border-radius: 4px;
-  overflow: hidden;
-  margin-bottom: 8px;
-}
-
-.progress-fill {
-  height: 100%;
-  background: linear-gradient(90deg, #ff4757, #ff6b7a);
-  border-radius: 4px;
-  transition: width 0.3s ease;
-  position: relative;
-}
-
-.progress-fill::after {
-  content: '';
-  position: absolute;
-  top: 0;
-  left: 0;
-  right: 0;
-  bottom: 0;
-  background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent);
-  animation: shimmer 1.5s infinite;
-}
-
-@keyframes shimmer {
-  0% { transform: translateX(-100%); }
-  100% { transform: translateX(100%); }
-}
-
-.progress-text {
-  text-align: center;
-  font-size: 12px;
-  color: #666;
-  font-weight: 500;
-}
-
-/* Upload Info */
-.upload-info {
-  display: flex;
-  gap: 60px;
-  justify-content: center;
-  margin-top: 40px;
-  padding: 20px;
-  opacity: 1;
-  transition: opacity 0.3s ease;
-}
-
-.upload-info.fade-in {
-  animation: fadeIn 0.3s ease-in-out;
-}
-
-@keyframes fadeIn {
-  from {
-    opacity: 0;
-    transform: translateY(10px);
-  }
-  to {
-    opacity: 1;
-    transform: translateY(0);
-  }
-}
-
-.info-item {
-  text-align: center;
-  flex: 1;
-  max-width: 300px;
-}
-
-.info-title {
-  font-size: 16px;
-  color: #333;
-  margin-bottom: 12px;
-  font-weight: 500;
-}
-
-.info-desc {
-  font-size: 13px;
-  color: #666;
-  line-height: 1.6;
-}
-
-/* Page Content Styles */
-.page-content {
-  padding: 40px;
-  background: white;
-  border-radius: 12px;
-  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
-  margin: 20px 0;
-  min-height: 500px;
-}
-
-.page-header {
-  margin-bottom: 40px;
-  padding-bottom: 20px;
-  border-bottom: 1px solid #e8eaed;
-}
-
-.page-title {
-  font-size: 24px;
-  font-weight: 600;
-  color: #333;
-  margin: 0;
-}
-
-.page-body {
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  min-height: 400px;
-}
-
-.placeholder-content {
-  text-align: center;
-  max-width: 400px;
-}
-
-.placeholder-icon {
-  color: #ff4757;
-  margin-bottom: 20px;
-  display: flex;
-  justify-content: center;
-}
-
-.placeholder-title {
-  font-size: 20px;
-  font-weight: 500;
-  color: #333;
-  margin: 0 0 15px 0;
-}
-
-.placeholder-desc {
-  font-size: 14px;
-  color: #666;
-  line-height: 1.6;
-  margin: 0;
-}
-
-/* Responsive */
-@media (max-width: 768px) {
-  .sidebar {
-    transform: translateX(-100%);
-    transition: transform 0.3s;
-  }
-  
-  .main-content {
-    margin-left: 0;
-  }
-  
-  .header-title {
-    display: none;
-  }
-  
-  .upload-area {
-    padding: 60px 20px;
-    margin: 0 10px 30px;
-  }
-  
-  .upload-info {
-    flex-direction: column;
-    gap: 30px;
-    padding: 10px;
-  }
-  
-  .content-wrapper {
-    padding: 15px;
-  }
-  
-  .upload-tabs {
-    gap: 15px;
-  }
-  
-  .page-content {
-    padding: 20px;
-    margin: 10px;
-  }
-  
-  .page-title {
-    font-size: 20px;
-  }
-  
-  .placeholder-title {
-    font-size: 18px;
-  }
-  
-  .placeholder-desc {
-    font-size: 13px;
-  }
-}
diff --git a/API/API-TRM/xiaohongshu-upload-platform/src/App.jsx b/API/API-TRM/xiaohongshu-upload-platform/src/App.jsx
deleted file mode 100644
index 8388b7b..0000000
--- a/API/API-TRM/xiaohongshu-upload-platform/src/App.jsx
+++ /dev/null
@@ -1,410 +0,0 @@
-import React, { useState } from 'react'
-import { 
-  Home, 
-  Settings, 
-  BarChart3, 
-  PieChart, 
-  TrendingUp, 
-  Activity, 
-  BookOpen, 
-  Users, 
-  Upload, 
-  Image,
-  Video,
-  ChevronDown,
-  User
-} from 'lucide-react'
-import './App.css'
-
-function App() {
-  const [activeTab, setActiveTab] = useState('image')
-  const [expandedMenu, setExpandedMenu] = useState('dashboard')
-  const [activePage, setActivePage] = useState('dashboard') // 新增：当前激活的页面
-  const [isDragOver, setIsDragOver] = useState(false)
-  const [isUploading, setIsUploading] = useState(false)
-  const [uploadedFiles, setUploadedFiles] = useState([])
-  const [uploadProgress, setUploadProgress] = useState(0)
-
-  const validateFiles = (files) => {
-    const validImageTypes = ['image/jpeg', 'image/jpg', 'image/png', 'image/webp']
-    const validVideoTypes = ['video/mp4', 'video/mov', 'video/avi']
-    
-    const validTypes = activeTab === 'video' ? validVideoTypes : validImageTypes
-    const maxSize = activeTab === 'video' ? 2 * 1024 * 1024 * 1024 : 32 * 1024 * 1024 // 2GB for video, 32MB for images
-    
-    const invalidFiles = files.filter(file => {
-      return !validTypes.includes(file.type) || file.size > maxSize
-    })
-    
-    if (invalidFiles.length > 0) {
-      alert(`发现 ${invalidFiles.length} 个无效文件，请检查文件格式和大小`)
-      return false
-    }
-    
-    return true
-  }
-
-  const simulateUpload = (files) => {
-    setIsUploading(true)
-    setUploadProgress(0)
-    setUploadedFiles(files)
-    
-    // 模拟上传进度
-    const interval = setInterval(() => {
-      setUploadProgress(prev => {
-        if (prev >= 100) {
-          clearInterval(interval)
-          setIsUploading(false)
-          alert(`成功上传了 ${files.length} 个文件`)
-          return 100
-        }
-        return prev + 10
-      })
-    }, 200)
-  }
-
-  const handleFileUpload = () => {
-    if (isUploading) return
-    
-    const input = document.createElement('input')
-    input.type = 'file'
-    input.accept = activeTab === 'video' ? 'video/*' : 'image/*'
-    input.multiple = activeTab === 'image'
-    input.onchange = (e) => {
-      const files = Array.from(e.target.files)
-      if (files.length > 0 && validateFiles(files)) {
-        simulateUpload(files)
-      }
-    }
-    input.click()
-  }
-
-  const handleDragOver = (e) => {
-    e.preventDefault()
-    e.stopPropagation()
-    setIsDragOver(true)
-  }
-
-  const handleDragLeave = (e) => {
-    e.preventDefault()
-    e.stopPropagation()
-    setIsDragOver(false)
-  }
-
-  const handleDrop = (e) => {
-    e.preventDefault()
-    e.stopPropagation()
-    setIsDragOver(false)
-    
-    if (isUploading) return
-    
-    const files = Array.from(e.dataTransfer.files)
-    if (files.length > 0 && validateFiles(files)) {
-      simulateUpload(files)
-    }
-  }
-
-  const clearUploadedFiles = () => {
-    setUploadedFiles([])
-  }
-
-  const removeFile = (indexToRemove) => {
-    setUploadedFiles(prev => prev.filter((_, index) => index !== indexToRemove))
-  }
-
-  const menuItems = [
-    { id: 'home', label: '首页', icon: Home },
-    { id: 'notebooks', label: '笔记管理', icon: BookOpen },
-    {
-      id: 'dashboard',
-      label: '数据看板',
-      icon: BarChart3,
-      submenu: [
-        { id: 'overview', label: '账号概况' },
-        { id: 'content', label: '内容分析' },
-        { id: 'fans', label: '粉丝数据' }
-      ]
-    },
-    { id: 'activity', label: '活动中心', icon: Activity },
-    { id: 'notes', label: '笔记灵感', icon: BookOpen },
-    { id: 'creator', label: '创作学院', icon: Users },
-    { id: 'journal', label: '创作日刊', icon: BookOpen }
-  ]
-  const toggleMenu = (menuId) => {
-    setExpandedMenu(expandedMenu === menuId ? null : menuId)
-  }
-
-  // 新增：处理页面切换的函数
-  const handlePageChange = (pageId) => {
-    setActivePage(pageId)
-    // 如果点击的是有子菜单的项目，也要展开子菜单
-    const menuItem = menuItems.find(item => item.id === pageId)
-    if (menuItem && menuItem.submenu) {
-      setExpandedMenu(pageId)
-    }
-  }
-
-  return (
-    <div className="app">
-      {/* Header */}
-      <header className="header">
-        <div className="header-left">
-          <div className="logo">小红书</div>
-          <h1 className="header-title">创作服务平台</h1>
-        </div>
-        <div className="header-right">
-          <div className="user-info">
-            <User size={16} />
-            <span>小红薯63081EA1</span>
-          </div>
-        </div>
-      </header>
-
-      {/* Sidebar */}
-      <aside className="sidebar">
-        <button className="publish-btn">发布笔记</button>
-          <nav className="nav-menu">
-          {menuItems.map((item) => (
-            <div key={item.id} className="nav-item">
-              <a
-                href="#"
-                className={`nav-link ${activePage === item.id ? 'active' : ''}`}
-                onClick={(e) => {
-                  e.preventDefault()
-                  if (item.submenu) {
-                    toggleMenu(item.id)
-                  } else {
-                    handlePageChange(item.id)
-                  }
-                }}
-              >
-                <item.icon size={16} />
-                <span>{item.label}</span>
-                {item.submenu && <ChevronDown size={16} style={{ marginLeft: 'auto', transform: expandedMenu === item.id ? 'rotate(180deg)' : 'rotate(0deg)', transition: 'transform 0.3s ease' }} />}
-              </a>
-              
-              {item.submenu && expandedMenu === item.id && (
-                <div className="nav-submenu">
-                  {item.submenu.map((subItem) => (
-                    <a 
-                      key={subItem.id} 
-                      href="#" 
-                      className={`nav-link ${activePage === subItem.id ? 'active' : ''}`}
-                      onClick={(e) => {
-                        e.preventDefault()
-                        handlePageChange(subItem.id)
-                      }}
-                    >
-                      {subItem.label}
-                    </a>
-                  ))}
-                </div>
-              )}
-            </div>
-          ))}
-        </nav>
-      </aside>      {/* Main Content */}
-      <main className="main-content">
-        <div className="content-wrapper">
-          {activePage === 'dashboard' || activePage === 'overview' || activePage === 'content' || activePage === 'fans' ? (
-            // 上传页面内容（数据看板相关页面显示上传功能）
-            <>
-              {/* Upload Tabs */}
-              <div className="upload-tabs">
-                <button
-                  className={`upload-tab ${activeTab === 'video' ? 'active' : ''}`}
-                  onClick={() => setActiveTab('video')}
-                >
-                  上传视频
-                </button>
-                <button
-                  className={`upload-tab ${activeTab === 'image' ? 'active' : ''}`}
-                  onClick={() => setActiveTab('image')}
-                >
-                  上传图文
-                </button>
-              </div>
-
-              {/* Upload Area */}
-              <div 
-                className={`upload-area ${isDragOver ? 'drag-over' : ''}`}
-                onDragOver={handleDragOver}
-                onDragLeave={handleDragLeave}
-                onDrop={handleDrop}
-              >
-                <div className="upload-icon">
-                  {activeTab === 'video' ? <Video /> : <Image />}
-                </div>
-                <h2 className="upload-title">
-                  {activeTab === 'video' ? '拖拽视频到此处或点击上传' : '拖拽图片到此处或点击上传'}
-                </h2>
-                <p className="upload-subtitle">
-                  {activeTab === 'video' ? '(需支持上传格式)' : '(需支持上传格式)'}
-                </p>
-                <button 
-                  className={`upload-btn ${isUploading ? 'uploading' : ''}`} 
-                  onClick={handleFileUpload}
-                  disabled={isUploading}
-                >
-                  {isUploading ? `上传中... ${uploadProgress}%` : (activeTab === 'video' ? '上传视频' : '上传图片')}
-                </button>
-                
-                {/* Upload Progress Bar */}
-                {isUploading && (
-                  <div className="progress-container">
-                    <div className="progress-bar">
-                      <div 
-                        className="progress-fill" 
-                        style={{ width: `${uploadProgress}%` }}
-                      ></div>
-                    </div>
-                    <div className="progress-text">{uploadProgress}%</div>
-                  </div>
-                )}
-              </div>
-
-              {/* File Preview Area */}
-              {uploadedFiles.length > 0 && (
-                <div className="file-preview-area">
-                  <div className="preview-header">
-                    <h3 className="preview-title">已上传文件 ({uploadedFiles.length})</h3>
-                    <button className="clear-files-btn" onClick={clearUploadedFiles}>
-                      清除所有
-                    </button>
-                  </div>
-                  <div className="file-grid">
-                    {uploadedFiles.map((file, index) => (
-                      <div key={index} className="file-item">
-                        <button 
-                          className="remove-file-btn"
-                          onClick={() => removeFile(index)}
-                          title="删除文件"
-                        >
-                          ×
-                        </button>
-                        {file.type?.startsWith('image/') ? (
-                          <div className="file-thumbnail">
-                            <img src={URL.createObjectURL(file)} alt={file.name} />
-                          </div>
-                        ) : (
-                          <div className="file-thumbnail video-thumbnail">
-                            <Video size={24} />
-                          </div>
-                        )}
-                        <div className="file-info">
-                          <div className="file-name" title={file.name}>
-                            {file.name.length > 20 ? file.name.substring(0, 17) + '...' : file.name}
-                          </div>
-                          <div className="file-size">
-                            {(file.size / 1024 / 1024).toFixed(2)} MB
-                          </div>
-                        </div>
-                      </div>
-                    ))}
-                  </div>
-                </div>
-              )}
-
-              {/* Upload Info */}
-              <div className="upload-info fade-in" key={activeTab}>
-                {activeTab === 'image' ? (
-                  <>
-                    <div className="info-item">
-                      <h3 className="info-title">图片大小</h3>
-                      <p className="info-desc">
-                        支持上传的图片大小，<br />
-                        最大32MB的图片文件
-                      </p>
-                    </div>
-                    <div className="info-item">
-                      <h3 className="info-title">图片格式</h3>
-                      <p className="info-desc">
-                        支持上传的图片格式：<br />
-                        推荐使用png、jpg、jpeg、webp，不支持gif、live及其他转化的动图
-                      </p>
-                    </div>
-                    <div className="info-item">
-                      <h3 className="info-title">图片分辨率</h3>
-                      <p className="info-desc">
-                        不要竖图片尺寸，推荐上传3:4尺寸之间，分辨率不低于720*960的图片，<br />
-                        超过17张的时候图片将自动压缩至相配尺寸
-                      </p>
-                    </div>
-                  </>
-                ) : (
-                  <>
-                    <div className="info-item">
-                      <h3 className="info-title">视频大小</h3>
-                      <p className="info-desc">
-                        支持种类5分钟内视频，<br />
-                        最大2GB的视频文件
-                      </p>
-                    </div>
-                    <div className="info-item">
-                      <h3 className="info-title">视频格式</h3>
-                      <p className="info-desc">
-                        支持常用视频格式：<br />
-                        推荐使用mp4、mov
-                      </p>
-                    </div>
-                    <div className="info-item">
-                      <h3 className="info-title">视频分辨率</h3>
-                      <p className="info-desc">
-                        推荐上传720P (1280*720) 及以上视频，<br />
-                        超过1080P的视频可能可能导致上传稍慢且消耗流量
-                      </p>
-                    </div>
-                  </>
-                )}
-              </div>
-            </>
-          ) : (
-            // 其他页面的内容
-            <div className="page-content">
-              <div className="page-header">
-                <h1 className="page-title">
-                  {activePage === 'home' && '首页'}
-                  {activePage === 'notebooks' && '笔记管理'}
-                  {activePage === 'activity' && '活动中心'}
-                  {activePage === 'notes' && '笔记灵感'}
-                  {activePage === 'creator' && '创作学院'}
-                  {activePage === 'journal' && '创作日刊'}
-                </h1>
-              </div>
-              <div className="page-body">
-                <div className="placeholder-content">
-                  <div className="placeholder-icon">
-                    {activePage === 'home' && <Home size={48} />}
-                    {activePage === 'notebooks' && <BookOpen size={48} />}
-                    {activePage === 'activity' && <Activity size={48} />}
-                    {activePage === 'notes' && <BookOpen size={48} />}
-                    {activePage === 'creator' && <Users size={48} />}
-                    {activePage === 'journal' && <BookOpen size={48} />}
-                  </div>
-                  <h3 className="placeholder-title">
-                    {activePage === 'home' && '欢迎来到小红书创作平台'}
-                    {activePage === 'notebooks' && '笔记管理功能开发中'}
-                    {activePage === 'activity' && '活动中心功能开发中'}
-                    {activePage === 'notes' && '笔记灵感功能开发中'}
-                    {activePage === 'creator' && '创作学院功能开发中'}
-                    {activePage === 'journal' && '创作日刊功能开发中'}
-                  </h3>
-                  <p className="placeholder-desc">
-                    {activePage === 'home' && '在这里您可以管理您的创作内容，查看数据分析，获取创作灵感。'}
-                    {activePage === 'notebooks' && '这里将显示您的所有笔记，支持编辑、删除、分类等操作。'}
-                    {activePage === 'activity' && '这里将展示最新的平台活动，让您参与更多有趣的创作活动。'}
-                    {activePage === 'notes' && '这里将为您提供创作灵感和写作建议，帮助您创作更好的内容。'}
-                    {activePage === 'creator' && '这里将提供创作技巧教学和平台规则说明，助您成为优秀创作者。'}
-                    {activePage === 'journal' && '这里将展示创作相关的最新资讯和平台动态。'}
-                  </p>
-                </div>
-              </div>
-            </div>
-          )}
-        </div>
-      </main>
-    </div>
-  )
-}
-
-export default App
diff --git a/API/API-TRM/xiaohongshu-upload-platform/src/index.css b/API/API-TRM/xiaohongshu-upload-platform/src/index.css
deleted file mode 100644
index 72c144a..0000000
--- a/API/API-TRM/xiaohongshu-upload-platform/src/index.css
+++ /dev/null
@@ -1,29 +0,0 @@
-* {
-  margin: 0;
-  padding: 0;
-  box-sizing: border-box;
-}
-
-body {
-  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-  background-color: #f5f7fa;
-}
-
-button {
-  border: none;
-  background: none;
-  cursor: pointer;
-  font-family: inherit;
-}
-
-a {
-  text-decoration: none;
-  color: inherit;
-}
-
-#root {
-  width: 100%;
-  min-height: 100vh;
-}
diff --git a/API/API-TRM/xiaohongshu-upload-platform/src/main.jsx b/API/API-TRM/xiaohongshu-upload-platform/src/main.jsx
deleted file mode 100644
index b9a1a6d..0000000
--- a/API/API-TRM/xiaohongshu-upload-platform/src/main.jsx
+++ /dev/null
@@ -1,10 +0,0 @@
-import { StrictMode } from 'react'
-import { createRoot } from 'react-dom/client'
-import './index.css'
-import App from './App.jsx'
-
-createRoot(document.getElementById('root')).render(
-  <StrictMode>
-    <App />
-  </StrictMode>,
-)
diff --git a/API/API-TRM/xiaohongshu-upload-platform/vite.config.js b/API/API-TRM/xiaohongshu-upload-platform/vite.config.js
deleted file mode 100644
index 8b0f57b..0000000
--- a/API/API-TRM/xiaohongshu-upload-platform/vite.config.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import { defineConfig } from 'vite'
-import react from '@vitejs/plugin-react'
-
-// https://vite.dev/config/
-export default defineConfig({
-  plugins: [react()],
-})
diff --git "a/API/API-TRM/\351\241\271\347\233\256\346\201\242\345\244\215\346\212\245\345\221\212.md" "b/API/API-TRM/\351\241\271\347\233\256\346\201\242\345\244\215\346\212\245\345\221\212.md"
deleted file mode 100644
index 32a335b..0000000
--- "a/API/API-TRM/\351\241\271\347\233\256\346\201\242\345\244\215\346\212\245\345\221\212.md"
+++ /dev/null
@@ -1,105 +0,0 @@
-# 小红书创作平台 - 项目恢复完成 ✅
-
-## 恢复状态
-
-🎉 **项目已完全恢复！**所有代码和功能都已重新创建并正常工作。
-
-## 当前项目包含：
-
-### 📁 文件结构
-```
-e:\api大作业\发布页面/
-├── index.html              # HTML入口文件
-├── package.json            # 项目配置和依赖
-├── README.md              # 详细项目文档
-├── vite.config.js         # Vite构建配置
-├── public/
-│   └── vite.svg          # Vite图标
-└── src/
-    ├── App.css           # 主要样式文件
-    ├── App.jsx           # 主应用组件
-    ├── index.css         # 全局样式
-    └── main.jsx          # React应用入口
-```
-
-### 🚀 核心功能
-
-1. **完整的小红书创作平台界面**
-   - ✅ 头部导航栏（Logo + 用户信息）
-   - ✅ 侧边栏菜单（可展开子菜单）
-   - ✅ 上传区域（图片/视频切换）
-   - ✅ 文件预览网格
-   - ✅ 响应式设计
-
-2. **上传功能**
-   - ✅ 拖拽上传
-   - ✅ 点击上传
-   - ✅ 文件类型验证
-   - ✅ 文件大小限制
-   - ✅ 上传进度条
-   - ✅ 实时预览
-
-3. **文件管理**
-   - ✅ 文件缩略图显示
-   - ✅ 文件信息展示
-   - ✅ 单个文件删除
-   - ✅ 批量清除功能
-   - ✅ 文件计数
-
-4. **交互体验**
-   - ✅ 拖拽视觉反馈
-   - ✅ 悬停动画效果
-   - ✅ 加载状态显示
-   - ✅ 操作成功提示
-
-### 🛠️ 技术栈
-
-- **React 18.3.1** - 前端框架
-- **Vite 6.0.5** - 构建工具
-- **Lucide React 0.468.0** - 图标库
-- **纯CSS** - 样式设计
-
-### 📱 当前状态
-
-- ✅ 依赖安装完成
-- ✅ 开发服务器运行中
-- ✅ 浏览器已打开应用 (http://localhost:5173)
-- ✅ 所有功能正常工作
-- ✅ 无代码错误
-
-### 🎯 功能测试清单
-
-可以测试以下功能：
-
-1. **界面导航**
-   - [ ] 点击侧边栏菜单项
-   - [ ] 展开/收起数据看板子菜单
-   - [ ] 切换上传标签页（图片/视频）
-
-2. **文件上传**
-   - [ ] 点击上传按钮选择文件
-   - [ ] 拖拽文件到上传区域
-   - [ ] 观察上传进度条动画
-   - [ ] 查看文件预览效果
-
-3. **文件管理**
-   - [ ] 悬停文件项查看删除按钮
-   - [ ] 删除单个文件
-   - [ ] 清除所有文件
-
-4. **响应式测试**
-   - [ ] 调整浏览器窗口大小
-   - [ ] 测试移动端适配
-
-### 🔄 后续开发
-
-项目已为API集成做好准备：
-
-1. **替换模拟上传** → 真实API调用
-2. **添加用户认证** → 登录/注册功能
-3. **连接后端数据** → 真实数据存储
-4. **添加路由** → 页面导航功能
-
----
-
-**🎊 恢复完成！项目已经可以正常使用了！**
diff --git a/API/API-TRM/TRM/Back/README.md b/TRM/back/README.md
similarity index 100%
rename from API/API-TRM/TRM/Back/README.md
rename to TRM/back/README.md
diff --git a/API/API-TRM/TRM/Back/__pycache__/__init__.cpython-312.pyc b/TRM/back/__pycache__/__init__.cpython-312.pyc
similarity index 100%
rename from API/API-TRM/TRM/Back/__pycache__/__init__.cpython-312.pyc
rename to TRM/back/__pycache__/__init__.cpython-312.pyc
Binary files differ
diff --git a/API/API-TRM/TRM/Back/__pycache__/config.cpython-310.pyc b/TRM/back/__pycache__/config.cpython-310.pyc
similarity index 100%
rename from API/API-TRM/TRM/Back/__pycache__/config.cpython-310.pyc
rename to TRM/back/__pycache__/config.cpython-310.pyc
Binary files differ
diff --git a/API/API-TRM/TRM/Back/app.py b/TRM/back/app.py
similarity index 100%
rename from API/API-TRM/TRM/Back/app.py
rename to TRM/back/app.py
diff --git a/API/API-TRM/TRM/Back/app/__init__.py b/TRM/back/app/__init__.py
similarity index 100%
rename from API/API-TRM/TRM/Back/app/__init__.py
rename to TRM/back/app/__init__.py
diff --git a/API/API-TRM/TRM/Back/app/__pycache__/__init__.cpython-310.pyc b/TRM/back/app/__pycache__/__init__.cpython-310.pyc
similarity index 100%
rename from API/API-TRM/TRM/Back/app/__pycache__/__init__.cpython-310.pyc
rename to TRM/back/app/__pycache__/__init__.cpython-310.pyc
Binary files differ
diff --git a/API/API-TRM/TRM/Back/app/__pycache__/__init__.cpython-312.pyc b/TRM/back/app/__pycache__/__init__.cpython-312.pyc
similarity index 100%
rename from API/API-TRM/TRM/Back/app/__pycache__/__init__.cpython-312.pyc
rename to TRM/back/app/__pycache__/__init__.cpython-312.pyc
Binary files differ
diff --git a/TRM/back/app/__pycache__/routes.cpython-310.pyc b/TRM/back/app/__pycache__/routes.cpython-310.pyc
new file mode 100644
index 0000000..3293666
--- /dev/null
+++ b/TRM/back/app/__pycache__/routes.cpython-310.pyc
Binary files differ
diff --git a/API/API-TRM/TRM/Back/app/functions/Fpost.py b/TRM/back/app/functions/Fpost.py
similarity index 74%
rename from API/API-TRM/TRM/Back/app/functions/Fpost.py
rename to TRM/back/app/functions/Fpost.py
index e51cf5c..5651e8b 100644
--- a/API/API-TRM/TRM/Back/app/functions/Fpost.py
+++ b/TRM/back/app/functions/Fpost.py
@@ -20,4 +20,12 @@
             return False
         if res.role !='superadmin':
             return False
+        return True
+    
+    def review(self,postid,status):
+        res=self.session.query(post).filter(post.id==postid).first()
+        if not res:
+            return False
+        res.status=status
+        self.session.commit()
         return True
\ No newline at end of file
diff --git a/TRM/back/app/functions/__pycache__/Fpost.cpython-310.pyc b/TRM/back/app/functions/__pycache__/Fpost.cpython-310.pyc
new file mode 100644
index 0000000..fe0c6de
--- /dev/null
+++ b/TRM/back/app/functions/__pycache__/Fpost.cpython-310.pyc
Binary files differ
diff --git a/API/API-TRM/TRM/Back/app/models/__init__.py b/TRM/back/app/models/__init__.py
similarity index 100%
rename from API/API-TRM/TRM/Back/app/models/__init__.py
rename to TRM/back/app/models/__init__.py
diff --git a/API/API-TRM/TRM/Back/app/models/__pycache__/__init__.cpython-310.pyc b/TRM/back/app/models/__pycache__/__init__.cpython-310.pyc
similarity index 100%
rename from API/API-TRM/TRM/Back/app/models/__pycache__/__init__.cpython-310.pyc
rename to TRM/back/app/models/__pycache__/__init__.cpython-310.pyc
Binary files differ
diff --git a/API/API-TRM/TRM/Back/app/models/__pycache__/post.cpython-310.pyc b/TRM/back/app/models/__pycache__/post.cpython-310.pyc
similarity index 100%
rename from API/API-TRM/TRM/Back/app/models/__pycache__/post.cpython-310.pyc
rename to TRM/back/app/models/__pycache__/post.cpython-310.pyc
Binary files differ
diff --git a/API/API-TRM/TRM/Back/app/models/__pycache__/topics.cpython-310.pyc b/TRM/back/app/models/__pycache__/topics.cpython-310.pyc
similarity index 100%
rename from API/API-TRM/TRM/Back/app/models/__pycache__/topics.cpython-310.pyc
rename to TRM/back/app/models/__pycache__/topics.cpython-310.pyc
Binary files differ
diff --git a/API/API-TRM/TRM/Back/app/models/__pycache__/users.cpython-310.pyc b/TRM/back/app/models/__pycache__/users.cpython-310.pyc
similarity index 100%
rename from API/API-TRM/TRM/Back/app/models/__pycache__/users.cpython-310.pyc
rename to TRM/back/app/models/__pycache__/users.cpython-310.pyc
Binary files differ
diff --git a/API/API-TRM/TRM/Back/app/models/post.py b/TRM/back/app/models/post.py
similarity index 100%
rename from API/API-TRM/TRM/Back/app/models/post.py
rename to TRM/back/app/models/post.py
diff --git a/API/API-TRM/TRM/Back/app/models/topics.py b/TRM/back/app/models/topics.py
similarity index 100%
rename from API/API-TRM/TRM/Back/app/models/topics.py
rename to TRM/back/app/models/topics.py
diff --git a/API/API-TRM/TRM/Back/app/models/users.py b/TRM/back/app/models/users.py
similarity index 100%
rename from API/API-TRM/TRM/Back/app/models/users.py
rename to TRM/back/app/models/users.py
diff --git a/TRM/back/app/routes.py b/TRM/back/app/routes.py
new file mode 100644
index 0000000..90c9c5c
--- /dev/null
+++ b/TRM/back/app/routes.py
@@ -0,0 +1,63 @@
+from flask import Blueprint, render_template
+from .functions.Fpost import Fpost;
+from sqlalchemy import create_engine
+from sqlalchemy.orm import sessionmaker
+from config import Config
+from flask import jsonify,request
+
+main = Blueprint('main', __name__)
+
+
+@main.route('/apostlist',methods=['POST','GET'])
+def postlist():
+    data=request.get_json()
+    engine=create_engine(Config.SQLURL)
+    SessionLocal = sessionmaker(bind=engine)
+    session = SessionLocal()
+    f=Fpost(session)
+    checres=f.checkid(data['userid'])
+    if(not checres):
+        return jsonify({'status': 'error', 'message': 'Unauthorized'})
+    res=f.getlist()
+    respons=[]
+    for datai in res:
+        respons.append({
+            'id': datai[0],
+            'title': datai[1],
+            'status': datai[2]
+        })
+    return jsonify(respons)
+
+@main.route('/agetpost',methods=['POST','GET'])
+def post():
+    data=request.get_json()
+    engine=create_engine(Config.SQLURL)
+    SessionLocal = sessionmaker(bind=engine)
+    session = SessionLocal()
+    f=Fpost(session)
+    checres=f.checkid(data['userid'])
+    if(not checres):
+        return jsonify({'status': 'error', 'message': 'Unauthorized'})
+    res=f.getpost(data['postid'])
+
+    return jsonify(res.to_dict() if res else {})
+
+@main.route('/areview',methods=['POST','GET'])
+def review():
+    data=request.get_json()
+    engine=create_engine(Config.SQLURL)
+    SessionLocal = sessionmaker(bind=engine)
+    session = SessionLocal()
+    f=Fpost(session)
+    checres=f.checkid(data['userid'])
+    if(not checres):
+        return jsonify({'status': 'error', 'message': 'Unauthorized'})
+    
+    res=f.review(data['postid'],data['status'])
+    if not res:
+        return jsonify({'status': 'error', 'message': 'Post not found'})
+    
+    return jsonify({'status': 'success', 'message': 'Post reviewed successfully'})
+
+
+
diff --git a/API/API-TRM/TRM/Back/app/templates/base.html b/TRM/back/app/templates/base.html
similarity index 100%
rename from API/API-TRM/TRM/Back/app/templates/base.html
rename to TRM/back/app/templates/base.html
diff --git a/API/API-TRM/TRM/Back/app/templates/index.html b/TRM/back/app/templates/index.html
similarity index 100%
rename from API/API-TRM/TRM/Back/app/templates/index.html
rename to TRM/back/app/templates/index.html
diff --git a/API/API-TRM/TRM/Back/config.py b/TRM/back/config.py
similarity index 100%
rename from API/API-TRM/TRM/Back/config.py
rename to TRM/back/config.py
diff --git a/API/API-TRM/TRM/Back/requirements.txt b/TRM/back/requirements.txt
similarity index 100%
rename from API/API-TRM/TRM/Back/requirements.txt
rename to TRM/back/requirements.txt
diff --git a/API/API-TRM/TRM/Back/tests/__init__.py b/TRM/back/tests/__init__.py
similarity index 100%
rename from API/API-TRM/TRM/Back/tests/__init__.py
rename to TRM/back/tests/__init__.py
diff --git a/API/API-TRM/TRM/Back/tests/__pycache__/__init__.cpython-312.pyc b/TRM/back/tests/__pycache__/__init__.cpython-312.pyc
similarity index 100%
rename from API/API-TRM/TRM/Back/tests/__pycache__/__init__.cpython-312.pyc
rename to TRM/back/tests/__pycache__/__init__.cpython-312.pyc
Binary files differ
diff --git a/TRM/back/tests/__pycache__/test_app.cpython-312-pytest-7.4.4.pyc b/TRM/back/tests/__pycache__/test_app.cpython-312-pytest-7.4.4.pyc
new file mode 100644
index 0000000..9a2b7de
--- /dev/null
+++ b/TRM/back/tests/__pycache__/test_app.cpython-312-pytest-7.4.4.pyc
Binary files differ
diff --git a/API/API-TRM/TRM/Back/tests/test_app.py b/TRM/back/tests/test_app.py
similarity index 60%
rename from API/API-TRM/TRM/Back/tests/test_app.py
rename to TRM/back/tests/test_app.py
index 5643282..3ed6bf9 100644
--- a/API/API-TRM/TRM/Back/tests/test_app.py
+++ b/TRM/back/tests/test_app.py
@@ -3,7 +3,7 @@
 
 def test_get_postlist():
     print()
-    urlx=url+'spostlist'
+    urlx=url+'apostlist'
     payload = {
         'userid': 3
     }
@@ -15,7 +15,7 @@
 
 def test_get_post():
     print()
-    urlx=url+'sgetpost'
+    urlx=url+'agetpost'
     payload = {
         'userid': 3,
         'postid': 21
@@ -24,4 +24,18 @@
 
     resp = requests.get(urlx, json=payload, headers=headers)
     # print(resp.status_code)
+    print(resp.json())
+
+def test_review_post():
+    print()
+    urlx=url+'areview'
+    payload = {
+        'userid': 3,
+        'postid': 21,
+        'status': 'rejected'
+        }
+    headers = {'Content-Type': 'application/json'}
+
+    resp = requests.get(urlx, json=payload, headers=headers)
+    # print(resp.status_code)
     print(resp.json())
\ No newline at end of file
diff --git a/API/API-TRM/TRM/Front/trm-front/.gitignore b/TRM/front/.gitignore
similarity index 100%
rename from API/API-TRM/TRM/Front/trm-front/.gitignore
rename to TRM/front/.gitignore
diff --git a/API/API-TRM/TRM/Front/trm-front/README.md b/TRM/front/README.md
similarity index 100%
rename from API/API-TRM/TRM/Front/trm-front/README.md
rename to TRM/front/README.md
diff --git a/API/API-TRM/TRM/Front/trm-front/package.json b/TRM/front/package.json
similarity index 89%
rename from API/API-TRM/TRM/Front/trm-front/package.json
rename to TRM/front/package.json
index dbe27a6..142eb20 100644
--- a/API/API-TRM/TRM/Front/trm-front/package.json
+++ b/TRM/front/package.json
@@ -1,5 +1,5 @@
 {
-  "name": "trm-front",
+  "name": "front",
   "version": "0.1.0",
   "private": true,
   "dependencies": {
@@ -9,7 +9,8 @@
     "@testing-library/user-event": "^13.5.0",
     "react": "^19.1.0",
     "react-dom": "^19.1.0",
-    "react-scripts": "5.0.1",
+    "react-router-dom": "^6.14.1",
+    "react-scripts": "^5.0.1",
     "web-vitals": "^2.1.4"
   },
   "scripts": {
diff --git a/API/API-TRM/TRM/Front/trm-front/public/favicon.ico b/TRM/front/public/favicon.ico
similarity index 100%
rename from API/API-TRM/TRM/Front/trm-front/public/favicon.ico
rename to TRM/front/public/favicon.ico
Binary files differ
diff --git a/API/API-TRM/TRM/Front/trm-front/public/index.html b/TRM/front/public/index.html
similarity index 100%
rename from API/API-TRM/TRM/Front/trm-front/public/index.html
rename to TRM/front/public/index.html
diff --git a/API/API-TRM/TRM/Front/trm-front/public/logo192.png b/TRM/front/public/logo192.png
similarity index 100%
rename from API/API-TRM/TRM/Front/trm-front/public/logo192.png
rename to TRM/front/public/logo192.png
Binary files differ
diff --git a/API/API-TRM/TRM/Front/trm-front/public/logo512.png b/TRM/front/public/logo512.png
similarity index 100%
rename from API/API-TRM/TRM/Front/trm-front/public/logo512.png
rename to TRM/front/public/logo512.png
Binary files differ
diff --git a/API/API-TRM/TRM/Front/trm-front/public/manifest.json b/TRM/front/public/manifest.json
similarity index 100%
rename from API/API-TRM/TRM/Front/trm-front/public/manifest.json
rename to TRM/front/public/manifest.json
diff --git a/API/API-TRM/TRM/Front/trm-front/public/robots.txt b/TRM/front/public/robots.txt
similarity index 100%
rename from API/API-TRM/TRM/Front/trm-front/public/robots.txt
rename to TRM/front/public/robots.txt
diff --git a/TRM/front/src/Admin.css b/TRM/front/src/Admin.css
new file mode 100644
index 0000000..1697483
--- /dev/null
+++ b/TRM/front/src/Admin.css
@@ -0,0 +1,65 @@
+.admin-container {
+  padding: 24px;
+  background-color: #fff;
+  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
+}
+
+.admin-title {
+  font-size: 24px;
+  color: #e61515;
+  margin-bottom: 16px;
+}
+
+.admin-table {
+  width: 100%;
+  border-collapse: collapse;
+}
+
+.admin-table th,
+.admin-table td {
+  border: 1px solid #f0f0f0;
+  padding: 12px 16px;
+  text-align: left;
+}
+
+.admin-table th {
+  background-color: #fafafa;
+  color: #333;
+  font-weight: 500;
+}
+
+.status {
+  font-weight: 500;
+  text-transform: capitalize;
+}
+
+.status.pending {
+  color: #f29900;
+}
+
+.status.approved {
+  color: #28a745;
+}
+
+.status.banned {
+  color: #d73a49;
+}
+
+.btn {
+  padding: 6px 12px;
+  margin-right: 8px;
+  border: none;
+  border-radius: 4px;
+  cursor: pointer;
+  font-size: 14px;
+}
+
+.btn-approve {
+  background-color: #e61515;
+  color: #fff;
+}
+
+.btn-ban {
+  background-color: #f5f5f5;
+  color: #333;
+}
\ No newline at end of file
diff --git a/TRM/front/src/Admin.js b/TRM/front/src/Admin.js
new file mode 100644
index 0000000..1547706
--- /dev/null
+++ b/TRM/front/src/Admin.js
@@ -0,0 +1,75 @@
+import React, { useState, useEffect } from 'react';
+import './Admin.css';
+
+function AdminPage() {
+  const [posts, setPosts] = useState([]);
+
+  useEffect(() => {
+    // TODO: 替换成你后端真正的接口
+    fetch('/apostlist')
+      .then(res => res.json())
+      .then(data => setPosts(data))
+      .catch(console.error);
+  }, []);
+
+  const handleAction = (id, action) => {
+    // action: 'approve' | 'ban' | ...
+    fetch(`/api/posts/${id}/${action}`, { method: 'POST' })
+      .then(res => {
+        if (res.ok) {
+          // 简单地把该条移除或根据返回值更新状态
+          setPosts(ps => ps.filter(p => p.id !== id));
+        }
+      })
+      .catch(console.error);
+  };
+
+  return (
+    <div className="admin-container">
+      <h1 className="admin-title">小红书 · 管理员审核</h1>
+      <table className="admin-table">
+        <thead>
+          <tr>
+            <th>标题</th>
+            <th>发布时间</th>
+            <th>内容摘要</th>
+            <th>状态</th>
+            <th>操作</th>
+          </tr>
+        </thead>
+        <tbody>
+          {posts.map(p => {
+            const brief =
+              p.content.length > 80
+                ? p.content.slice(0, 80) + '...'
+                : p.content;
+            return (
+              <tr key={p.id}>
+                <td>{p.title}</td>
+                <td>{new Date(p.createdAt).toLocaleString()}</td>
+                <td>{brief}</td>
+                <td className={`status ${p.status}`}>{p.status}</td>
+                <td>
+                  <button
+                    className="btn btn-approve"
+                    onClick={() => handleAction(p.id, 'approve')}
+                  >
+                    审核
+                  </button>
+                  <button
+                    className="btn btn-ban"
+                    onClick={() => handleAction(p.id, 'ban')}
+                  >
+                    封禁
+                  </button>
+                </td>
+              </tr>
+            );
+          })}
+        </tbody>
+      </table>
+    </div>
+  );
+}
+
+export default AdminPage;
\ No newline at end of file
diff --git a/API/API-TRM/TRM/Front/trm-front/src/App.css b/TRM/front/src/App.css
similarity index 100%
rename from API/API-TRM/TRM/Front/trm-front/src/App.css
rename to TRM/front/src/App.css
diff --git a/TRM/front/src/App.js b/TRM/front/src/App.js
new file mode 100644
index 0000000..581dfe9
--- /dev/null
+++ b/TRM/front/src/App.js
@@ -0,0 +1,28 @@
+import React from 'react';
+import {
+  Routes,
+  Route,
+  Navigate,
+} from 'react-router-dom';
+import AdminPage from './Admin';
+import UserManagement from './UserManagement';
+import LogsDashboard from './LogsDashboard';
+import SuperAdmin from './SuperAdmin';
+
+export default function App() {
+  return (
+    <Routes>
+      <Route path="/" element={<Navigate to="admin" replace />} />
+
+      {/* 普通管理员，无 header */}
+      <Route path="admin" element={<AdminPage />} />
+
+      {/* 超级管理员，只用 SuperAdminLayout */}
+      <Route path="superadmin" element={<SuperAdmin />}>
+        <Route index element={<Navigate to="users" replace />} />
+        <Route path="users" element={<UserManagement />} />
+        <Route path="dashboard" element={<LogsDashboard />} />
+      </Route>
+    </Routes>
+  );
+}
\ No newline at end of file
diff --git a/API/API-TRM/TRM/Front/trm-front/src/App.test.js b/TRM/front/src/App.test.js
similarity index 100%
rename from API/API-TRM/TRM/Front/trm-front/src/App.test.js
rename to TRM/front/src/App.test.js
diff --git a/TRM/front/src/LogsDashboard.js b/TRM/front/src/LogsDashboard.js
new file mode 100644
index 0000000..c2e6239
--- /dev/null
+++ b/TRM/front/src/LogsDashboard.js
@@ -0,0 +1,45 @@
+import React, { useEffect, useState } from 'react';
+import './Admin.css';
+
+function LogsDashboard() {
+  const [logs, setLogs] = useState([]);
+  const [stats, setStats] = useState({});
+
+  useEffect(() => {
+    fetch('/api/logs')
+      .then(res => res.json())
+      .then(setLogs)
+      .catch(console.error);
+    fetch('/api/stats')
+      .then(res => res.json())
+      .then(setStats)
+      .catch(console.error);
+  }, []);
+
+  return (
+    <div className="admin-container">
+      <h2>运行日志 & 性能 Dashboard</h2>
+      <section className="dashboard-stats">
+        <pre>{JSON.stringify(stats, null, 2)}</pre>
+      </section>
+      <section className="dashboard-logs">
+        <table className="admin-table">
+          <thead>
+            <tr><th>时间</th><th>级别</th><th>消息</th></tr>
+          </thead>
+          <tbody>
+            {logs.map((log, i) => (
+              <tr key={i}>
+                <td>{new Date(log.time).toLocaleString()}</td>
+                <td>{log.level}</td>
+                <td>{log.message}</td>
+              </tr>
+            ))}
+          </tbody>
+        </table>
+      </section>
+    </div>
+  );
+}
+
+export default LogsDashboard;
diff --git a/TRM/front/src/SuperAdmin.css b/TRM/front/src/SuperAdmin.css
new file mode 100644
index 0000000..2295f8b
--- /dev/null
+++ b/TRM/front/src/SuperAdmin.css
@@ -0,0 +1,30 @@
+.super-admin-container {
+  display: flex;
+  height: 100vh;
+}
+
+.super-admin-sidebar {
+  width: 200px;
+  padding: 20px;
+  background: #f5f5f5;
+}
+
+.super-admin-sidebar ul {
+  list-style: none;
+  padding: 0;
+}
+
+.super-admin-sidebar li {
+  margin-bottom: 10px;
+}
+
+.super-admin-sidebar .active {
+  font-weight: bold;
+  color: #1890ff;
+}
+
+.super-admin-content {
+  flex: 1;
+  padding: 20px;
+  background: #fff;
+}
\ No newline at end of file
diff --git a/TRM/front/src/SuperAdmin.js b/TRM/front/src/SuperAdmin.js
new file mode 100644
index 0000000..0ddb9db
--- /dev/null
+++ b/TRM/front/src/SuperAdmin.js
@@ -0,0 +1,38 @@
+import React from 'react';
+import { NavLink, Outlet } from 'react-router-dom';
+import './SuperAdmin.css';  // 可选：自定义样式
+
+export default function SuperAdmin() {
+  return (
+    <div className="super-admin-container">
+      <aside className="super-admin-sidebar">
+        <h2>超级管理员</h2>
+        <nav>
+          <ul>
+            <li>
+              <NavLink 
+                to="users" 
+                end 
+                className={({ isActive }) => isActive ? 'active' : ''}
+              >
+                用户管理
+              </NavLink>
+            </li>
+            <li>
+              <NavLink 
+                to="dashboard" 
+                className={({ isActive }) => isActive ? 'active' : ''}
+              >
+                平台运行监控
+              </NavLink>
+            </li>
+          </ul>
+        </nav>
+      </aside>
+
+      <main className="super-admin-content">
+        <Outlet />
+      </main>
+    </div>
+  );
+}
\ No newline at end of file
diff --git a/TRM/front/src/UserManagement.js b/TRM/front/src/UserManagement.js
new file mode 100644
index 0000000..ec7cbc2
--- /dev/null
+++ b/TRM/front/src/UserManagement.js
@@ -0,0 +1,44 @@
+import React, { useState, useEffect } from 'react';
+import './Admin.css';
+
+function UserManagement() {
+  const [users, setUsers] = useState([]);
+
+  useEffect(() => {
+    fetch('/api/users')
+      .then(res => res.json())
+      .then(data => setUsers(data))
+      .catch(console.error);
+  }, []);
+
+  const handleUserAction = (id, action) => {
+    fetch(`/api/users/${id}/${action}`, { method: 'POST' })
+      .then(res => res.ok && setUsers(us => us.filter(u => u.id !== id)))
+      .catch(console.error);
+  };
+
+  return (
+    <div className="admin-container">
+      <h2>用户管理</h2>
+      <table className="admin-table">
+        <thead>
+          <tr><th>用户名</th><th>角色</th><th>操作</th></tr>
+        </thead>
+        <tbody>
+          {users.map(u => (
+            <tr key={u.id}>
+              <td>{u.username}</td>
+              <td>{u.role}</td>
+              <td>
+                <button onClick={() => handleUserAction(u.id, 'ban')}>封禁</button>
+                <button onClick={() => handleUserAction(u.id, 'promote')}>提升权限</button>
+              </td>
+            </tr>
+          ))}
+        </tbody>
+      </table>
+    </div>
+  );
+}
+
+export default UserManagement;
diff --git a/API/API-TRM/TRM/Front/trm-front/src/index.css b/TRM/front/src/index.css
similarity index 100%
rename from API/API-TRM/TRM/Front/trm-front/src/index.css
rename to TRM/front/src/index.css
diff --git a/TRM/front/src/index.js b/TRM/front/src/index.js
new file mode 100644
index 0000000..9c5a71b
--- /dev/null
+++ b/TRM/front/src/index.js
@@ -0,0 +1,14 @@
+import React from 'react';
+import ReactDOM from 'react-dom/client';
+import { BrowserRouter } from 'react-router-dom';
+import './index.css';
+import App from './App';
+
+const root = ReactDOM.createRoot(document.getElementById('root'));
+root.render(
+  <React.StrictMode>
+    <BrowserRouter>
+      <App />
+    </BrowserRouter>
+  </React.StrictMode>
+);
\ No newline at end of file
diff --git a/API/API-TRM/TRM/Front/trm-front/src/logo.svg b/TRM/front/src/logo.svg
similarity index 100%
rename from API/API-TRM/TRM/Front/trm-front/src/logo.svg
rename to TRM/front/src/logo.svg
diff --git a/API/API-TRM/TRM/Front/trm-front/src/reportWebVitals.js b/TRM/front/src/reportWebVitals.js
similarity index 100%
rename from API/API-TRM/TRM/Front/trm-front/src/reportWebVitals.js
rename to TRM/front/src/reportWebVitals.js
diff --git a/API/API-TRM/TRM/Front/trm-front/src/setupTests.js b/TRM/front/src/setupTests.js
similarity index 100%
rename from API/API-TRM/TRM/Front/trm-front/src/setupTests.js
rename to TRM/front/src/setupTests.js
diff --git a/API/API-TRM/WZY/xhs_front/README.md b/WZY/xhs_front/README.md
similarity index 100%
rename from API/API-TRM/WZY/xhs_front/README.md
rename to WZY/xhs_front/README.md
diff --git a/API/API-TRM/WZY/xhs_front/index.html b/WZY/xhs_front/index.html
similarity index 100%
rename from API/API-TRM/WZY/xhs_front/index.html
rename to WZY/xhs_front/index.html
diff --git a/API/API-TRM/WZY/xhs_front/package.json b/WZY/xhs_front/package.json
similarity index 100%
rename from API/API-TRM/WZY/xhs_front/package.json
rename to WZY/xhs_front/package.json
diff --git a/API/API-TRM/WZY/xhs_front/public/vite.svg b/WZY/xhs_front/public/vite.svg
similarity index 100%
rename from API/API-TRM/WZY/xhs_front/public/vite.svg
rename to WZY/xhs_front/public/vite.svg
diff --git a/API/API-TRM/WZY/xhs_front/src/App.css b/WZY/xhs_front/src/App.css
similarity index 100%
rename from API/API-TRM/WZY/xhs_front/src/App.css
rename to WZY/xhs_front/src/App.css
diff --git a/API/API-TRM/WZY/xhs_front/src/App.jsx b/WZY/xhs_front/src/App.jsx
similarity index 100%
rename from API/API-TRM/WZY/xhs_front/src/App.jsx
rename to WZY/xhs_front/src/App.jsx
diff --git a/API/API-TRM/WZY/xhs_front/src/api/posts.js b/WZY/xhs_front/src/api/posts.js
similarity index 100%
rename from API/API-TRM/WZY/xhs_front/src/api/posts.js
rename to WZY/xhs_front/src/api/posts.js
diff --git a/API/API-TRM/WZY/xhs_front/src/components/CreatePost.jsx b/WZY/xhs_front/src/components/CreatePost.jsx
similarity index 100%
rename from API/API-TRM/WZY/xhs_front/src/components/CreatePost.jsx
rename to WZY/xhs_front/src/components/CreatePost.jsx
diff --git a/API/API-TRM/WZY/xhs_front/src/components/Header.jsx b/WZY/xhs_front/src/components/Header.jsx
similarity index 100%
rename from API/API-TRM/WZY/xhs_front/src/components/Header.jsx
rename to WZY/xhs_front/src/components/Header.jsx
diff --git a/API/API-TRM/WZY/xhs_front/src/components/HomeFeed.jsx b/WZY/xhs_front/src/components/HomeFeed.jsx
similarity index 100%
rename from API/API-TRM/WZY/xhs_front/src/components/HomeFeed.jsx
rename to WZY/xhs_front/src/components/HomeFeed.jsx
diff --git a/API/API-TRM/WZY/xhs_front/src/components/PlaceholderPage.jsx b/WZY/xhs_front/src/components/PlaceholderPage.jsx
similarity index 100%
rename from API/API-TRM/WZY/xhs_front/src/components/PlaceholderPage.jsx
rename to WZY/xhs_front/src/components/PlaceholderPage.jsx
diff --git a/API/API-TRM/WZY/xhs_front/src/components/Sidebar.jsx b/WZY/xhs_front/src/components/Sidebar.jsx
similarity index 100%
rename from API/API-TRM/WZY/xhs_front/src/components/Sidebar.jsx
rename to WZY/xhs_front/src/components/Sidebar.jsx
diff --git a/API/API-TRM/WZY/xhs_front/src/components/UploadPage.jsx b/WZY/xhs_front/src/components/UploadPage.jsx
similarity index 100%
rename from API/API-TRM/WZY/xhs_front/src/components/UploadPage.jsx
rename to WZY/xhs_front/src/components/UploadPage.jsx
diff --git a/API/API-TRM/WZY/xhs_front/src/index.css b/WZY/xhs_front/src/index.css
similarity index 100%
rename from API/API-TRM/WZY/xhs_front/src/index.css
rename to WZY/xhs_front/src/index.css
diff --git a/API/API-TRM/WZY/xhs_front/src/main.jsx b/WZY/xhs_front/src/main.jsx
similarity index 100%
rename from API/API-TRM/WZY/xhs_front/src/main.jsx
rename to WZY/xhs_front/src/main.jsx
diff --git a/API/API-TRM/WZY/xhs_front/src/router/index.jsx b/WZY/xhs_front/src/router/index.jsx
similarity index 100%
rename from API/API-TRM/WZY/xhs_front/src/router/index.jsx
rename to WZY/xhs_front/src/router/index.jsx
diff --git a/API/API-TRM/WZY/xhs_front/src/style/CreatePost.css b/WZY/xhs_front/src/style/CreatePost.css
similarity index 100%
rename from API/API-TRM/WZY/xhs_front/src/style/CreatePost.css
rename to WZY/xhs_front/src/style/CreatePost.css
diff --git a/API/API-TRM/WZY/xhs_front/src/style/HomeFeed.css b/WZY/xhs_front/src/style/HomeFeed.css
similarity index 100%
rename from API/API-TRM/WZY/xhs_front/src/style/HomeFeed.css
rename to WZY/xhs_front/src/style/HomeFeed.css
diff --git a/API/API-TRM/WZY/xhs_front/vite.config.js b/WZY/xhs_front/vite.config.js
similarity index 100%
rename from API/API-TRM/WZY/xhs_front/vite.config.js
rename to WZY/xhs_front/vite.config.js
diff --git a/API/API-TRM/WZY/xhs_server/__pycache__/app.cpython-312.pyc b/WZY/xhs_server/__pycache__/app.cpython-312.pyc
similarity index 100%
rename from API/API-TRM/WZY/xhs_server/__pycache__/app.cpython-312.pyc
rename to WZY/xhs_server/__pycache__/app.cpython-312.pyc
Binary files differ
diff --git a/API/API-TRM/WZY/xhs_server/__pycache__/config.cpython-312.pyc b/WZY/xhs_server/__pycache__/config.cpython-312.pyc
similarity index 100%
rename from API/API-TRM/WZY/xhs_server/__pycache__/config.cpython-312.pyc
rename to WZY/xhs_server/__pycache__/config.cpython-312.pyc
Binary files differ
diff --git a/API/API-TRM/WZY/xhs_server/__pycache__/extensions.cpython-312.pyc b/WZY/xhs_server/__pycache__/extensions.cpython-312.pyc
similarity index 100%
rename from API/API-TRM/WZY/xhs_server/__pycache__/extensions.cpython-312.pyc
rename to WZY/xhs_server/__pycache__/extensions.cpython-312.pyc
Binary files differ
diff --git a/API/API-TRM/WZY/xhs_server/all_tables.sql b/WZY/xhs_server/all_tables.sql
similarity index 100%
rename from API/API-TRM/WZY/xhs_server/all_tables.sql
rename to WZY/xhs_server/all_tables.sql
diff --git a/API/API-TRM/WZY/xhs_server/app.py b/WZY/xhs_server/app.py
similarity index 100%
rename from API/API-TRM/WZY/xhs_server/app.py
rename to WZY/xhs_server/app.py
diff --git a/API/API-TRM/WZY/xhs_server/config.py b/WZY/xhs_server/config.py
similarity index 100%
rename from API/API-TRM/WZY/xhs_server/config.py
rename to WZY/xhs_server/config.py
diff --git a/API/API-TRM/WZY/xhs_server/extensions.py b/WZY/xhs_server/extensions.py
similarity index 100%
rename from API/API-TRM/WZY/xhs_server/extensions.py
rename to WZY/xhs_server/extensions.py
diff --git a/API/API-TRM/WZY/xhs_server/manage.py b/WZY/xhs_server/manage.py
similarity index 100%
rename from API/API-TRM/WZY/xhs_server/manage.py
rename to WZY/xhs_server/manage.py
diff --git a/API/API-TRM/WZY/xhs_server/models/__init__.py b/WZY/xhs_server/models/__init__.py
similarity index 100%
rename from API/API-TRM/WZY/xhs_server/models/__init__.py
rename to WZY/xhs_server/models/__init__.py
diff --git a/API/API-TRM/WZY/xhs_server/models/__pycache__/__init__.cpython-312.pyc b/WZY/xhs_server/models/__pycache__/__init__.cpython-312.pyc
similarity index 100%
rename from API/API-TRM/WZY/xhs_server/models/__pycache__/__init__.cpython-312.pyc
rename to WZY/xhs_server/models/__pycache__/__init__.cpython-312.pyc
Binary files differ
diff --git a/API/API-TRM/WZY/xhs_server/models/__pycache__/behavior.cpython-312.pyc b/WZY/xhs_server/models/__pycache__/behavior.cpython-312.pyc
similarity index 100%
rename from API/API-TRM/WZY/xhs_server/models/__pycache__/behavior.cpython-312.pyc
rename to WZY/xhs_server/models/__pycache__/behavior.cpython-312.pyc
Binary files differ
diff --git a/API/API-TRM/WZY/xhs_server/models/__pycache__/comment.cpython-312.pyc b/WZY/xhs_server/models/__pycache__/comment.cpython-312.pyc
similarity index 100%
rename from API/API-TRM/WZY/xhs_server/models/__pycache__/comment.cpython-312.pyc
rename to WZY/xhs_server/models/__pycache__/comment.cpython-312.pyc
Binary files differ
diff --git a/API/API-TRM/WZY/xhs_server/models/__pycache__/post.cpython-312.pyc b/WZY/xhs_server/models/__pycache__/post.cpython-312.pyc
similarity index 100%
rename from API/API-TRM/WZY/xhs_server/models/__pycache__/post.cpython-312.pyc
rename to WZY/xhs_server/models/__pycache__/post.cpython-312.pyc
Binary files differ
diff --git a/API/API-TRM/WZY/xhs_server/models/__pycache__/tag.cpython-312.pyc b/WZY/xhs_server/models/__pycache__/tag.cpython-312.pyc
similarity index 100%
rename from API/API-TRM/WZY/xhs_server/models/__pycache__/tag.cpython-312.pyc
rename to WZY/xhs_server/models/__pycache__/tag.cpython-312.pyc
Binary files differ
diff --git a/API/API-TRM/WZY/xhs_server/models/__pycache__/topic.cpython-312.pyc b/WZY/xhs_server/models/__pycache__/topic.cpython-312.pyc
similarity index 100%
rename from API/API-TRM/WZY/xhs_server/models/__pycache__/topic.cpython-312.pyc
rename to WZY/xhs_server/models/__pycache__/topic.cpython-312.pyc
Binary files differ
diff --git a/API/API-TRM/WZY/xhs_server/models/__pycache__/user.cpython-312.pyc b/WZY/xhs_server/models/__pycache__/user.cpython-312.pyc
similarity index 100%
rename from API/API-TRM/WZY/xhs_server/models/__pycache__/user.cpython-312.pyc
rename to WZY/xhs_server/models/__pycache__/user.cpython-312.pyc
Binary files differ
diff --git a/API/API-TRM/WZY/xhs_server/models/behavior.py b/WZY/xhs_server/models/behavior.py
similarity index 100%
rename from API/API-TRM/WZY/xhs_server/models/behavior.py
rename to WZY/xhs_server/models/behavior.py
diff --git a/API/API-TRM/WZY/xhs_server/models/comment.py b/WZY/xhs_server/models/comment.py
similarity index 100%
rename from API/API-TRM/WZY/xhs_server/models/comment.py
rename to WZY/xhs_server/models/comment.py
diff --git a/API/API-TRM/WZY/xhs_server/models/post.py b/WZY/xhs_server/models/post.py
similarity index 100%
rename from API/API-TRM/WZY/xhs_server/models/post.py
rename to WZY/xhs_server/models/post.py
diff --git a/API/API-TRM/WZY/xhs_server/models/tag.py b/WZY/xhs_server/models/tag.py
similarity index 100%
rename from API/API-TRM/WZY/xhs_server/models/tag.py
rename to WZY/xhs_server/models/tag.py
diff --git a/API/API-TRM/WZY/xhs_server/models/topic.py b/WZY/xhs_server/models/topic.py
similarity index 100%
rename from API/API-TRM/WZY/xhs_server/models/topic.py
rename to WZY/xhs_server/models/topic.py
diff --git a/API/API-TRM/WZY/xhs_server/models/user.py b/WZY/xhs_server/models/user.py
similarity index 100%
rename from API/API-TRM/WZY/xhs_server/models/user.py
rename to WZY/xhs_server/models/user.py
diff --git a/API/API-TRM/WZY/xhs_server/readme.md b/WZY/xhs_server/readme.md
similarity index 100%
rename from API/API-TRM/WZY/xhs_server/readme.md
rename to WZY/xhs_server/readme.md
diff --git a/API/API-TRM/WZY/xhs_server/requirements.txt b/WZY/xhs_server/requirements.txt
similarity index 100%
rename from API/API-TRM/WZY/xhs_server/requirements.txt
rename to WZY/xhs_server/requirements.txt
diff --git a/API/API-TRM/WZY/xhs_server/routes/__init__.py b/WZY/xhs_server/routes/__init__.py
similarity index 100%
rename from API/API-TRM/WZY/xhs_server/routes/__init__.py
rename to WZY/xhs_server/routes/__init__.py
diff --git a/API/API-TRM/WZY/xhs_server/routes/__pycache__/__init__.cpython-312.pyc b/WZY/xhs_server/routes/__pycache__/__init__.cpython-312.pyc
similarity index 100%
rename from API/API-TRM/WZY/xhs_server/routes/__pycache__/__init__.cpython-312.pyc
rename to WZY/xhs_server/routes/__pycache__/__init__.cpython-312.pyc
Binary files differ
diff --git a/API/API-TRM/WZY/xhs_server/routes/__pycache__/comments.cpython-312.pyc b/WZY/xhs_server/routes/__pycache__/comments.cpython-312.pyc
similarity index 100%
rename from API/API-TRM/WZY/xhs_server/routes/__pycache__/comments.cpython-312.pyc
rename to WZY/xhs_server/routes/__pycache__/comments.cpython-312.pyc
Binary files differ
diff --git a/API/API-TRM/WZY/xhs_server/routes/__pycache__/posts.cpython-312.pyc b/WZY/xhs_server/routes/__pycache__/posts.cpython-312.pyc
similarity index 100%
rename from API/API-TRM/WZY/xhs_server/routes/__pycache__/posts.cpython-312.pyc
rename to WZY/xhs_server/routes/__pycache__/posts.cpython-312.pyc
Binary files differ
diff --git a/API/API-TRM/WZY/xhs_server/routes/comments.py b/WZY/xhs_server/routes/comments.py
similarity index 100%
rename from API/API-TRM/WZY/xhs_server/routes/comments.py
rename to WZY/xhs_server/routes/comments.py
diff --git a/API/API-TRM/WZY/xhs_server/routes/posts.py b/WZY/xhs_server/routes/posts.py
similarity index 100%
rename from API/API-TRM/WZY/xhs_server/routes/posts.py
rename to WZY/xhs_server/routes/posts.py
diff --git a/API/API-TRM/WZY/xhs_server/utils/auth.py b/WZY/xhs_server/utils/auth.py
similarity index 100%
rename from API/API-TRM/WZY/xhs_server/utils/auth.py
rename to WZY/xhs_server/utils/auth.py
diff --git a/API/API-TRM/WZY/xhs_server/utils/serializers.py b/WZY/xhs_server/utils/serializers.py
similarity index 100%
rename from API/API-TRM/WZY/xhs_server/utils/serializers.py
rename to WZY/xhs_server/utils/serializers.py
diff --git a/xiaohongshu-upload-platform/README.md b/xiaohongshu-upload-platform/README.md
deleted file mode 100644
index 6f35930..0000000
--- a/xiaohongshu-upload-platform/README.md
+++ /dev/null
@@ -1,185 +0,0 @@
-# 小红书内容创作平台
-
-这是一个基于 React + Vite 构建的小红书内容创作平台界面，完全复制了小红书官方创作服务平台的设计和功能。
-
-## 功能特性 ✨
-
-### 🎨 界面设计
-- **完全还原小红书官方设计**：精确复制了小红书创作服务平台的视觉风格
-- **响应式布局**：支持桌面端和移动端适配
-- **现代化UI**：使用 Lucide React 图标库，提供清晰美观的界面
-
-### 📤 上传功能
-- **双模式上传**：支持图片上传和视频上传两种模式
-- **拖拽上传**：支持文件拖拽到上传区域
-- **点击上传**：点击按钮选择文件上传
-- **文件验证**：
-  - 图片：支持 JPEG、JPG、PNG、WebP 格式，最大 32MB
-  - 视频：支持 MP4、MOV、AVI 格式，最大 2GB
-- **实时进度显示**：带有动画效果的上传进度条
-
-### 🖼️ 文件管理
-- **文件预览**：上传后实时显示文件缩略图
-- **文件信息**：显示文件名、大小等详细信息
-- **批量管理**：支持单个删除和批量清除
-- **文件计数**：实时显示已上传文件数量
-
-### 🎯 交互体验
-- **拖拽反馈**：拖拽时提供视觉反馈效果
-- **加载状态**：上传过程中的加载动画
-- **操作提示**：完成上传后的成功提示
-- **悬停效果**：按钮和文件项的悬停交互
-
-### 🗂️ 导航系统
-- **侧边栏导航**：完整的功能菜单
-- **可展开子菜单**：数据看板等功能的子选项
-- **活跃状态**：当前选中页面的高亮显示
-- **固定布局**：头部和侧边栏固定定位
-
-## 技术栈 🛠️
-
-- **前端框架**：React 19.1.0
-- **构建工具**：Vite 6.0.5
-- **图标库**：Lucide React 0.468.0
-- **样式**：纯 CSS（无预处理器）
-- **开发语言**：JavaScript + JSX
-
-## 安装运行 🚀
-
-1. **安装依赖**
-   ```bash
-   npm install
-   ```
-
-2. **启动开发服务器**
-   ```bash
-   npm run dev
-   ```
-
-3. **打开浏览器**
-   ```
-   http://localhost:5173
-   ```
-
-4. **构建生产版本**
-   ```bash
-   npm run build
-   ```
-
-## 项目结构 📁
-
-```
-发布页面/
-├── public/              # 静态资源
-│   └── vite.svg        # Vite 图标
-├── src/
-│   ├── App.jsx         # 主应用组件
-│   ├── App.css         # 主样式文件
-│   ├── index.css       # 全局样式
-│   └── main.jsx        # 应用入口
-├── index.html          # HTML 入口文件
-├── package.json        # 项目配置
-├── vite.config.js      # Vite 配置
-└── README.md          # 项目说明
-```
-
-## 核心功能实现 💡
-
-### 文件上传处理
-```javascript
-const handleFileUpload = () => {
-  const input = document.createElement('input')
-  input.type = 'file'
-  input.accept = activeTab === 'video' ? 'video/*' : 'image/*'
-  input.multiple = activeTab === 'image'
-  
-  input.onchange = (e) => {
-    const files = Array.from(e.target.files)
-    if (files.length > 0 && validateFiles(files)) {
-      simulateUpload(files)
-    }
-  }
-  
-  input.click()
-}
-```
-
-### 拖拽上传实现
-```javascript
-const handleDrop = (e) => {
-  e.preventDefault()
-  e.stopPropagation()
-  setIsDragOver(false)
-  
-  const files = Array.from(e.dataTransfer.files)
-  if (files.length > 0 && validateFiles(files)) {
-    simulateUpload(files)
-  }
-}
-```
-
-### 文件验证机制
-```javascript
-const validateFiles = (files) => {
-  const validImageTypes = ['image/jpeg', 'image/jpg', 'image/png', 'image/webp']
-  const validVideoTypes = ['video/mp4', 'video/mov', 'video/avi']
-  
-  const validTypes = activeTab === 'video' ? validVideoTypes : validImageTypes
-  const maxSize = activeTab === 'video' ? 2 * 1024 * 1024 * 1024 : 32 * 1024 * 1024
-  
-  return files.every(file => 
-    validTypes.includes(file.type) && file.size <= maxSize
-  )
-}
-```
-
-## 样式特色 🎨
-
-### 响应式设计
-- 桌面端：固定侧边栏布局
-- 移动端：隐藏侧边栏，堆叠布局
-- 自适应文件网格：根据屏幕大小调整列数
-
-### 动画效果
-- 拖拽时的放大效果
-- 进度条的流光动画
-- 文件项的悬停过渡
-- 页面切换的淡入效果
-
-### 色彩方案
-- 主色调：#ff4757（小红书红）
-- 背景色：#f5f7fa（浅灰蓝）
-- 文字色：#333（深灰）
-- 边框色：#e8eaed（浅灰）
-
-## 待扩展功能 🔮
-
-- **后端集成**：连接真实的文件上传 API
-- **用户认证**：登录注册功能
-- **内容编辑**：笔记内容编辑器
-- **数据统计**：真实的数据看板功能
-- **社交功能**：评论、点赞等互动功能
-
-## 开发说明 📝
-
-这个项目完全基于前端实现，所有的上传功能都是模拟的。文件预览使用了 `URL.createObjectURL()` 来生成本地预览链接。在实际部署时，需要：
-
-1. 集成后端文件上传 API
-2. 实现用户认证系统
-3. 添加数据持久化
-4. 优化性能和安全性
-
-## 浏览器兼容性 🌐
-
-- Chrome 90+
-- Firefox 88+
-- Safari 14+
-- Edge 90+
-
-## 许可证 📄
-
-MIT License
-
----
-
-**注意**：本项目仅用于学习和演示目的，请遵守相关法律法规和平台使用条款。
diff --git a/xiaohongshu-upload-platform/index.html b/xiaohongshu-upload-platform/index.html
deleted file mode 100644
index b919940..0000000
--- a/xiaohongshu-upload-platform/index.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<!doctype html>
-<html lang="zh-CN">
-  <head>
-    <meta charset="UTF-8" />
-    <link rel="icon" type="image/svg+xml" href="/vite.svg" />
-    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <title>小红书创作服务平台</title>
-  </head>
-  <body>
-    <div id="root"></div>
-    <script type="module" src="/src/main.jsx"></script>
-  </body>
-</html>
diff --git a/xiaohongshu-upload-platform/package.json b/xiaohongshu-upload-platform/package.json
deleted file mode 100644
index 00a233f..0000000
--- a/xiaohongshu-upload-platform/package.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
-  "name": "xiaohongshu-creator-platform",
-  "private": true,
-  "version": "0.0.0",
-  "type": "module",
-  "scripts": {
-    "dev": "vite",
-    "build": "vite build",
-    "preview": "vite preview"
-  },
-  "dependencies": {
-    "react": "^18.3.1",
-    "react-dom": "^18.3.1",
-    "lucide-react": "^0.468.0"
-  },
-  "devDependencies": {
-    "@vitejs/plugin-react": "^4.3.4",
-    "vite": "^6.0.5"
-  }
-}
diff --git a/xiaohongshu-upload-platform/public/vite.svg b/xiaohongshu-upload-platform/public/vite.svg
deleted file mode 100644
index ee9fada..0000000
--- a/xiaohongshu-upload-platform/public/vite.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
diff --git a/xiaohongshu-upload-platform/src/App.css b/xiaohongshu-upload-platform/src/App.css
deleted file mode 100644
index 00d10d6..0000000
--- a/xiaohongshu-upload-platform/src/App.css
+++ /dev/null
@@ -1,583 +0,0 @@
-.app {
-  display: flex;
-  min-height: 100vh;
-  background-color: #f5f7fa;
-}
-
-/* Header */
-.header {
-  position: fixed;
-  top: 0;
-  left: 0;
-  right: 0;
-  height: 60px;
-  background: #fff;
-  border-bottom: 1px solid #e8eaed;
-  display: flex;
-  align-items: center;
-  padding: 0 20px;
-  z-index: 1000;
-  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
-}
-
-.header-left {
-  display: flex;
-  align-items: center;
-  gap: 12px;
-}
-
-.logo {
-  background: #ff4757;
-  color: white;
-  padding: 6px 12px;
-  border-radius: 6px;
-  font-size: 14px;
-  font-weight: bold;
-}
-
-.header-title {
-  font-size: 18px;
-  font-weight: 500;
-  color: #333;
-}
-
-.header-right {
-  margin-left: auto;
-  display: flex;
-  align-items: center;
-  gap: 12px;
-}
-
-.user-info {
-  display: flex;
-  align-items: center;
-  gap: 8px;
-  color: #666;
-  font-size: 14px;
-}
-
-/* Sidebar */
-.sidebar {
-  position: fixed;
-  left: 0;
-  top: 60px;
-  width: 200px;
-  height: calc(100vh - 60px);
-  background: #fff;
-  border-right: 1px solid #e8eaed;
-  overflow-y: auto;
-  z-index: 999;
-}
-
-.publish-btn {
-  margin: 16px;
-  background: #ff4757;
-  color: white;
-  padding: 10px 16px;
-  border-radius: 6px;
-  font-size: 14px;
-  font-weight: 500;
-  text-align: center;
-  transition: background 0.2s;
-}
-
-.publish-btn:hover {
-  background: #ff3742;
-}
-
-.nav-menu {
-  padding: 0;
-  list-style: none;
-}
-
-.nav-item {
-  border-bottom: 1px solid #f0f0f0;
-}
-
-.nav-link {
-  display: flex;
-  align-items: center;
-  padding: 12px 20px;
-  color: #333;
-  font-size: 14px;
-  transition: all 0.2s;
-  gap: 8px;
-}
-
-.nav-link:hover {
-  background: #f8f9fa;
-  color: #ff4757;
-}
-
-.nav-link.active {
-  background: linear-gradient(135deg, #ff4757, #ff6b7a);
-  color: white;
-  font-weight: 500;
-}
-
-.nav-link.active .lucide {
-  color: white;
-}
-
-.nav-submenu {
-  padding-left: 20px;
-  background: #fafafa;
-}
-
-.nav-submenu .nav-link {
-  padding: 8px 20px;
-  font-size: 13px;
-  color: #666;
-}
-
-.nav-submenu .nav-link:hover {
-  color: #ff4757;
-}
-
-/* Main Content */
-.main-content {
-  margin-left: 200px;
-  padding-top: 60px;
-  flex: 1;
-  min-height: 100vh;
-}
-
-.content-wrapper {
-  padding: 20px;
-  max-width: 1200px;
-  margin: 0 auto;
-}
-
-/* Upload Area */
-.upload-tabs {
-  display: flex;
-  gap: 20px;
-  margin-bottom: 30px;
-  border-bottom: 1px solid #e8eaed;
-}
-
-.upload-tab {
-  padding: 12px 0;
-  font-size: 16px;
-  color: #666;
-  cursor: pointer;
-  border-bottom: 2px solid transparent;
-  transition: all 0.2s;
-}
-
-.upload-tab.active {
-  color: #ff4757;
-  border-bottom-color: #ff4757;
-  font-weight: 500;
-}
-
-.upload-area {
-  background: #fff;
-  border-radius: 8px;
-  padding: 80px 40px;
-  text-align: center;
-  border: 2px dashed #ddd;
-  margin-bottom: 40px;
-  transition: all 0.2s;
-  min-height: 300px;
-  display: flex;
-  flex-direction: column;
-  justify-content: center;
-  align-items: center;
-  position: relative;
-}
-
-.upload-area:hover {
-  border-color: #ff4757;
-  background: #fff8f8;
-}
-
-.upload-area.drag-over {
-  border-color: #ff4757;
-  background: #fff0f0;
-  transform: scale(1.02);
-}
-
-.upload-icon {
-  width: 100px;
-  height: 100px;
-  margin: 0 auto 30px;
-  background: #f8f9fa;
-  border-radius: 50%;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  font-size: 40px;
-  color: #ccc;
-  transition: all 0.3s ease;
-}
-
-.upload-area:hover .upload-icon {
-  background: #ff475710;
-  color: #ff4757;
-  transform: scale(1.1);
-}
-
-.upload-area.drag-over .upload-icon {
-  background: #ff475720;
-  color: #ff4757;
-  transform: scale(1.2);
-}
-
-.upload-title {
-  font-size: 20px;
-  color: #333;
-  margin-bottom: 12px;
-  font-weight: 500;
-}
-
-.upload-subtitle {
-  font-size: 14px;
-  color: #999;
-  margin-bottom: 30px;
-}
-
-.upload-btn {
-  background: #ff4757;
-  color: white;
-  padding: 14px 28px;
-  border-radius: 6px;
-  font-size: 16px;
-  font-weight: 500;
-  transition: background 0.2s;
-  min-width: 120px;
-}
-
-.upload-btn:hover:not(:disabled) {
-  background: #ff3742;
-}
-
-.upload-btn:disabled {
-  background: #ccc;
-  cursor: not-allowed;
-}
-
-.upload-btn.uploading {
-  background: #ff4757;
-  opacity: 0.8;
-}
-
-/* File Preview */
-.file-preview-area {
-  background: #fff;
-  border-radius: 8px;
-  padding: 20px;
-  margin-bottom: 40px;
-  border: 1px solid #e8eaed;
-}
-
-/* Preview Header */
-.preview-header {
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-  margin-bottom: 16px;
-}
-
-.preview-title {
-  font-size: 16px;
-  color: #333;
-  margin-bottom: 16px;
-  font-weight: 500;
-}
-
-.clear-files-btn {
-  background: #ff4757;
-  color: white;
-  padding: 6px 12px;
-  border-radius: 4px;
-  font-size: 12px;
-  transition: background 0.2s;
-}
-
-.clear-files-btn:hover {
-  background: #ff3742;
-}
-
-.file-grid {
-  display: grid;
-  grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
-  gap: 16px;
-}
-
-.file-item {
-  display: flex;
-  flex-direction: column;
-  align-items: center;
-  padding: 12px;
-  border: 1px solid #f0f0f0;
-  border-radius: 6px;
-  transition: all 0.2s ease;
-  position: relative;
-}
-
-.file-item:hover {
-  border-color: #ff4757;
-  box-shadow: 0 2px 8px rgba(255, 71, 87, 0.1);
-}
-
-.file-item:hover .remove-file-btn {
-  opacity: 1;
-}
-
-.remove-file-btn {
-  position: absolute;
-  top: 4px;
-  right: 4px;
-  background: rgba(255, 71, 87, 0.8);
-  color: white;
-  border-radius: 50%;
-  width: 20px;
-  height: 20px;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  font-size: 14px;
-  font-weight: bold;
-  opacity: 0;
-  transition: all 0.2s;
-}
-
-.file-thumbnail {
-  width: 80px;
-  height: 80px;
-  border-radius: 6px;
-  overflow: hidden;
-  margin-bottom: 8px;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  background: #f8f9fa;
-}
-
-.file-thumbnail img {
-  width: 100%;
-  height: 100%;
-  object-fit: cover;
-}
-
-.video-thumbnail {
-  color: #666;
-}
-
-.file-info {
-  text-align: center;
-  width: 100%;
-}
-
-.file-name {
-  font-size: 12px;
-  color: #333;
-  margin-bottom: 4px;
-  font-weight: 500;
-}
-
-.file-size {
-  font-size: 11px;
-  color: #999;
-}
-
-/* Upload Progress */
-.progress-container {
-  margin-top: 20px;
-  width: 100%;
-  max-width: 400px;
-}
-
-.progress-bar {
-  width: 100%;
-  height: 8px;
-  background-color: #f0f0f0;
-  border-radius: 4px;
-  overflow: hidden;
-  margin-bottom: 8px;
-}
-
-.progress-fill {
-  height: 100%;
-  background: linear-gradient(90deg, #ff4757, #ff6b7a);
-  border-radius: 4px;
-  transition: width 0.3s ease;
-  position: relative;
-}
-
-.progress-fill::after {
-  content: '';
-  position: absolute;
-  top: 0;
-  left: 0;
-  right: 0;
-  bottom: 0;
-  background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent);
-  animation: shimmer 1.5s infinite;
-}
-
-@keyframes shimmer {
-  0% { transform: translateX(-100%); }
-  100% { transform: translateX(100%); }
-}
-
-.progress-text {
-  text-align: center;
-  font-size: 12px;
-  color: #666;
-  font-weight: 500;
-}
-
-/* Upload Info */
-.upload-info {
-  display: flex;
-  gap: 60px;
-  justify-content: center;
-  margin-top: 40px;
-  padding: 20px;
-  opacity: 1;
-  transition: opacity 0.3s ease;
-}
-
-.upload-info.fade-in {
-  animation: fadeIn 0.3s ease-in-out;
-}
-
-@keyframes fadeIn {
-  from {
-    opacity: 0;
-    transform: translateY(10px);
-  }
-  to {
-    opacity: 1;
-    transform: translateY(0);
-  }
-}
-
-.info-item {
-  text-align: center;
-  flex: 1;
-  max-width: 300px;
-}
-
-.info-title {
-  font-size: 16px;
-  color: #333;
-  margin-bottom: 12px;
-  font-weight: 500;
-}
-
-.info-desc {
-  font-size: 13px;
-  color: #666;
-  line-height: 1.6;
-}
-
-/* Page Content Styles */
-.page-content {
-  padding: 40px;
-  background: white;
-  border-radius: 12px;
-  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
-  margin: 20px 0;
-  min-height: 500px;
-}
-
-.page-header {
-  margin-bottom: 40px;
-  padding-bottom: 20px;
-  border-bottom: 1px solid #e8eaed;
-}
-
-.page-title {
-  font-size: 24px;
-  font-weight: 600;
-  color: #333;
-  margin: 0;
-}
-
-.page-body {
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  min-height: 400px;
-}
-
-.placeholder-content {
-  text-align: center;
-  max-width: 400px;
-}
-
-.placeholder-icon {
-  color: #ff4757;
-  margin-bottom: 20px;
-  display: flex;
-  justify-content: center;
-}
-
-.placeholder-title {
-  font-size: 20px;
-  font-weight: 500;
-  color: #333;
-  margin: 0 0 15px 0;
-}
-
-.placeholder-desc {
-  font-size: 14px;
-  color: #666;
-  line-height: 1.6;
-  margin: 0;
-}
-
-/* Responsive */
-@media (max-width: 768px) {
-  .sidebar {
-    transform: translateX(-100%);
-    transition: transform 0.3s;
-  }
-  
-  .main-content {
-    margin-left: 0;
-  }
-  
-  .header-title {
-    display: none;
-  }
-  
-  .upload-area {
-    padding: 60px 20px;
-    margin: 0 10px 30px;
-  }
-  
-  .upload-info {
-    flex-direction: column;
-    gap: 30px;
-    padding: 10px;
-  }
-  
-  .content-wrapper {
-    padding: 15px;
-  }
-  
-  .upload-tabs {
-    gap: 15px;
-  }
-  
-  .page-content {
-    padding: 20px;
-    margin: 10px;
-  }
-  
-  .page-title {
-    font-size: 20px;
-  }
-  
-  .placeholder-title {
-    font-size: 18px;
-  }
-  
-  .placeholder-desc {
-    font-size: 13px;
-  }
-}
diff --git a/xiaohongshu-upload-platform/src/App.jsx b/xiaohongshu-upload-platform/src/App.jsx
deleted file mode 100644
index 8388b7b..0000000
--- a/xiaohongshu-upload-platform/src/App.jsx
+++ /dev/null
@@ -1,410 +0,0 @@
-import React, { useState } from 'react'
-import { 
-  Home, 
-  Settings, 
-  BarChart3, 
-  PieChart, 
-  TrendingUp, 
-  Activity, 
-  BookOpen, 
-  Users, 
-  Upload, 
-  Image,
-  Video,
-  ChevronDown,
-  User
-} from 'lucide-react'
-import './App.css'
-
-function App() {
-  const [activeTab, setActiveTab] = useState('image')
-  const [expandedMenu, setExpandedMenu] = useState('dashboard')
-  const [activePage, setActivePage] = useState('dashboard') // 新增：当前激活的页面
-  const [isDragOver, setIsDragOver] = useState(false)
-  const [isUploading, setIsUploading] = useState(false)
-  const [uploadedFiles, setUploadedFiles] = useState([])
-  const [uploadProgress, setUploadProgress] = useState(0)
-
-  const validateFiles = (files) => {
-    const validImageTypes = ['image/jpeg', 'image/jpg', 'image/png', 'image/webp']
-    const validVideoTypes = ['video/mp4', 'video/mov', 'video/avi']
-    
-    const validTypes = activeTab === 'video' ? validVideoTypes : validImageTypes
-    const maxSize = activeTab === 'video' ? 2 * 1024 * 1024 * 1024 : 32 * 1024 * 1024 // 2GB for video, 32MB for images
-    
-    const invalidFiles = files.filter(file => {
-      return !validTypes.includes(file.type) || file.size > maxSize
-    })
-    
-    if (invalidFiles.length > 0) {
-      alert(`发现 ${invalidFiles.length} 个无效文件，请检查文件格式和大小`)
-      return false
-    }
-    
-    return true
-  }
-
-  const simulateUpload = (files) => {
-    setIsUploading(true)
-    setUploadProgress(0)
-    setUploadedFiles(files)
-    
-    // 模拟上传进度
-    const interval = setInterval(() => {
-      setUploadProgress(prev => {
-        if (prev >= 100) {
-          clearInterval(interval)
-          setIsUploading(false)
-          alert(`成功上传了 ${files.length} 个文件`)
-          return 100
-        }
-        return prev + 10
-      })
-    }, 200)
-  }
-
-  const handleFileUpload = () => {
-    if (isUploading) return
-    
-    const input = document.createElement('input')
-    input.type = 'file'
-    input.accept = activeTab === 'video' ? 'video/*' : 'image/*'
-    input.multiple = activeTab === 'image'
-    input.onchange = (e) => {
-      const files = Array.from(e.target.files)
-      if (files.length > 0 && validateFiles(files)) {
-        simulateUpload(files)
-      }
-    }
-    input.click()
-  }
-
-  const handleDragOver = (e) => {
-    e.preventDefault()
-    e.stopPropagation()
-    setIsDragOver(true)
-  }
-
-  const handleDragLeave = (e) => {
-    e.preventDefault()
-    e.stopPropagation()
-    setIsDragOver(false)
-  }
-
-  const handleDrop = (e) => {
-    e.preventDefault()
-    e.stopPropagation()
-    setIsDragOver(false)
-    
-    if (isUploading) return
-    
-    const files = Array.from(e.dataTransfer.files)
-    if (files.length > 0 && validateFiles(files)) {
-      simulateUpload(files)
-    }
-  }
-
-  const clearUploadedFiles = () => {
-    setUploadedFiles([])
-  }
-
-  const removeFile = (indexToRemove) => {
-    setUploadedFiles(prev => prev.filter((_, index) => index !== indexToRemove))
-  }
-
-  const menuItems = [
-    { id: 'home', label: '首页', icon: Home },
-    { id: 'notebooks', label: '笔记管理', icon: BookOpen },
-    {
-      id: 'dashboard',
-      label: '数据看板',
-      icon: BarChart3,
-      submenu: [
-        { id: 'overview', label: '账号概况' },
-        { id: 'content', label: '内容分析' },
-        { id: 'fans', label: '粉丝数据' }
-      ]
-    },
-    { id: 'activity', label: '活动中心', icon: Activity },
-    { id: 'notes', label: '笔记灵感', icon: BookOpen },
-    { id: 'creator', label: '创作学院', icon: Users },
-    { id: 'journal', label: '创作日刊', icon: BookOpen }
-  ]
-  const toggleMenu = (menuId) => {
-    setExpandedMenu(expandedMenu === menuId ? null : menuId)
-  }
-
-  // 新增：处理页面切换的函数
-  const handlePageChange = (pageId) => {
-    setActivePage(pageId)
-    // 如果点击的是有子菜单的项目，也要展开子菜单
-    const menuItem = menuItems.find(item => item.id === pageId)
-    if (menuItem && menuItem.submenu) {
-      setExpandedMenu(pageId)
-    }
-  }
-
-  return (
-    <div className="app">
-      {/* Header */}
-      <header className="header">
-        <div className="header-left">
-          <div className="logo">小红书</div>
-          <h1 className="header-title">创作服务平台</h1>
-        </div>
-        <div className="header-right">
-          <div className="user-info">
-            <User size={16} />
-            <span>小红薯63081EA1</span>
-          </div>
-        </div>
-      </header>
-
-      {/* Sidebar */}
-      <aside className="sidebar">
-        <button className="publish-btn">发布笔记</button>
-          <nav className="nav-menu">
-          {menuItems.map((item) => (
-            <div key={item.id} className="nav-item">
-              <a
-                href="#"
-                className={`nav-link ${activePage === item.id ? 'active' : ''}`}
-                onClick={(e) => {
-                  e.preventDefault()
-                  if (item.submenu) {
-                    toggleMenu(item.id)
-                  } else {
-                    handlePageChange(item.id)
-                  }
-                }}
-              >
-                <item.icon size={16} />
-                <span>{item.label}</span>
-                {item.submenu && <ChevronDown size={16} style={{ marginLeft: 'auto', transform: expandedMenu === item.id ? 'rotate(180deg)' : 'rotate(0deg)', transition: 'transform 0.3s ease' }} />}
-              </a>
-              
-              {item.submenu && expandedMenu === item.id && (
-                <div className="nav-submenu">
-                  {item.submenu.map((subItem) => (
-                    <a 
-                      key={subItem.id} 
-                      href="#" 
-                      className={`nav-link ${activePage === subItem.id ? 'active' : ''}`}
-                      onClick={(e) => {
-                        e.preventDefault()
-                        handlePageChange(subItem.id)
-                      }}
-                    >
-                      {subItem.label}
-                    </a>
-                  ))}
-                </div>
-              )}
-            </div>
-          ))}
-        </nav>
-      </aside>      {/* Main Content */}
-      <main className="main-content">
-        <div className="content-wrapper">
-          {activePage === 'dashboard' || activePage === 'overview' || activePage === 'content' || activePage === 'fans' ? (
-            // 上传页面内容（数据看板相关页面显示上传功能）
-            <>
-              {/* Upload Tabs */}
-              <div className="upload-tabs">
-                <button
-                  className={`upload-tab ${activeTab === 'video' ? 'active' : ''}`}
-                  onClick={() => setActiveTab('video')}
-                >
-                  上传视频
-                </button>
-                <button
-                  className={`upload-tab ${activeTab === 'image' ? 'active' : ''}`}
-                  onClick={() => setActiveTab('image')}
-                >
-                  上传图文
-                </button>
-              </div>
-
-              {/* Upload Area */}
-              <div 
-                className={`upload-area ${isDragOver ? 'drag-over' : ''}`}
-                onDragOver={handleDragOver}
-                onDragLeave={handleDragLeave}
-                onDrop={handleDrop}
-              >
-                <div className="upload-icon">
-                  {activeTab === 'video' ? <Video /> : <Image />}
-                </div>
-                <h2 className="upload-title">
-                  {activeTab === 'video' ? '拖拽视频到此处或点击上传' : '拖拽图片到此处或点击上传'}
-                </h2>
-                <p className="upload-subtitle">
-                  {activeTab === 'video' ? '(需支持上传格式)' : '(需支持上传格式)'}
-                </p>
-                <button 
-                  className={`upload-btn ${isUploading ? 'uploading' : ''}`} 
-                  onClick={handleFileUpload}
-                  disabled={isUploading}
-                >
-                  {isUploading ? `上传中... ${uploadProgress}%` : (activeTab === 'video' ? '上传视频' : '上传图片')}
-                </button>
-                
-                {/* Upload Progress Bar */}
-                {isUploading && (
-                  <div className="progress-container">
-                    <div className="progress-bar">
-                      <div 
-                        className="progress-fill" 
-                        style={{ width: `${uploadProgress}%` }}
-                      ></div>
-                    </div>
-                    <div className="progress-text">{uploadProgress}%</div>
-                  </div>
-                )}
-              </div>
-
-              {/* File Preview Area */}
-              {uploadedFiles.length > 0 && (
-                <div className="file-preview-area">
-                  <div className="preview-header">
-                    <h3 className="preview-title">已上传文件 ({uploadedFiles.length})</h3>
-                    <button className="clear-files-btn" onClick={clearUploadedFiles}>
-                      清除所有
-                    </button>
-                  </div>
-                  <div className="file-grid">
-                    {uploadedFiles.map((file, index) => (
-                      <div key={index} className="file-item">
-                        <button 
-                          className="remove-file-btn"
-                          onClick={() => removeFile(index)}
-                          title="删除文件"
-                        >
-                          ×
-                        </button>
-                        {file.type?.startsWith('image/') ? (
-                          <div className="file-thumbnail">
-                            <img src={URL.createObjectURL(file)} alt={file.name} />
-                          </div>
-                        ) : (
-                          <div className="file-thumbnail video-thumbnail">
-                            <Video size={24} />
-                          </div>
-                        )}
-                        <div className="file-info">
-                          <div className="file-name" title={file.name}>
-                            {file.name.length > 20 ? file.name.substring(0, 17) + '...' : file.name}
-                          </div>
-                          <div className="file-size">
-                            {(file.size / 1024 / 1024).toFixed(2)} MB
-                          </div>
-                        </div>
-                      </div>
-                    ))}
-                  </div>
-                </div>
-              )}
-
-              {/* Upload Info */}
-              <div className="upload-info fade-in" key={activeTab}>
-                {activeTab === 'image' ? (
-                  <>
-                    <div className="info-item">
-                      <h3 className="info-title">图片大小</h3>
-                      <p className="info-desc">
-                        支持上传的图片大小，<br />
-                        最大32MB的图片文件
-                      </p>
-                    </div>
-                    <div className="info-item">
-                      <h3 className="info-title">图片格式</h3>
-                      <p className="info-desc">
-                        支持上传的图片格式：<br />
-                        推荐使用png、jpg、jpeg、webp，不支持gif、live及其他转化的动图
-                      </p>
-                    </div>
-                    <div className="info-item">
-                      <h3 className="info-title">图片分辨率</h3>
-                      <p className="info-desc">
-                        不要竖图片尺寸，推荐上传3:4尺寸之间，分辨率不低于720*960的图片，<br />
-                        超过17张的时候图片将自动压缩至相配尺寸
-                      </p>
-                    </div>
-                  </>
-                ) : (
-                  <>
-                    <div className="info-item">
-                      <h3 className="info-title">视频大小</h3>
-                      <p className="info-desc">
-                        支持种类5分钟内视频，<br />
-                        最大2GB的视频文件
-                      </p>
-                    </div>
-                    <div className="info-item">
-                      <h3 className="info-title">视频格式</h3>
-                      <p className="info-desc">
-                        支持常用视频格式：<br />
-                        推荐使用mp4、mov
-                      </p>
-                    </div>
-                    <div className="info-item">
-                      <h3 className="info-title">视频分辨率</h3>
-                      <p className="info-desc">
-                        推荐上传720P (1280*720) 及以上视频，<br />
-                        超过1080P的视频可能可能导致上传稍慢且消耗流量
-                      </p>
-                    </div>
-                  </>
-                )}
-              </div>
-            </>
-          ) : (
-            // 其他页面的内容
-            <div className="page-content">
-              <div className="page-header">
-                <h1 className="page-title">
-                  {activePage === 'home' && '首页'}
-                  {activePage === 'notebooks' && '笔记管理'}
-                  {activePage === 'activity' && '活动中心'}
-                  {activePage === 'notes' && '笔记灵感'}
-                  {activePage === 'creator' && '创作学院'}
-                  {activePage === 'journal' && '创作日刊'}
-                </h1>
-              </div>
-              <div className="page-body">
-                <div className="placeholder-content">
-                  <div className="placeholder-icon">
-                    {activePage === 'home' && <Home size={48} />}
-                    {activePage === 'notebooks' && <BookOpen size={48} />}
-                    {activePage === 'activity' && <Activity size={48} />}
-                    {activePage === 'notes' && <BookOpen size={48} />}
-                    {activePage === 'creator' && <Users size={48} />}
-                    {activePage === 'journal' && <BookOpen size={48} />}
-                  </div>
-                  <h3 className="placeholder-title">
-                    {activePage === 'home' && '欢迎来到小红书创作平台'}
-                    {activePage === 'notebooks' && '笔记管理功能开发中'}
-                    {activePage === 'activity' && '活动中心功能开发中'}
-                    {activePage === 'notes' && '笔记灵感功能开发中'}
-                    {activePage === 'creator' && '创作学院功能开发中'}
-                    {activePage === 'journal' && '创作日刊功能开发中'}
-                  </h3>
-                  <p className="placeholder-desc">
-                    {activePage === 'home' && '在这里您可以管理您的创作内容，查看数据分析，获取创作灵感。'}
-                    {activePage === 'notebooks' && '这里将显示您的所有笔记，支持编辑、删除、分类等操作。'}
-                    {activePage === 'activity' && '这里将展示最新的平台活动，让您参与更多有趣的创作活动。'}
-                    {activePage === 'notes' && '这里将为您提供创作灵感和写作建议，帮助您创作更好的内容。'}
-                    {activePage === 'creator' && '这里将提供创作技巧教学和平台规则说明，助您成为优秀创作者。'}
-                    {activePage === 'journal' && '这里将展示创作相关的最新资讯和平台动态。'}
-                  </p>
-                </div>
-              </div>
-            </div>
-          )}
-        </div>
-      </main>
-    </div>
-  )
-}
-
-export default App
diff --git a/xiaohongshu-upload-platform/src/index.css b/xiaohongshu-upload-platform/src/index.css
deleted file mode 100644
index 72c144a..0000000
--- a/xiaohongshu-upload-platform/src/index.css
+++ /dev/null
@@ -1,29 +0,0 @@
-* {
-  margin: 0;
-  padding: 0;
-  box-sizing: border-box;
-}
-
-body {
-  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-  background-color: #f5f7fa;
-}
-
-button {
-  border: none;
-  background: none;
-  cursor: pointer;
-  font-family: inherit;
-}
-
-a {
-  text-decoration: none;
-  color: inherit;
-}
-
-#root {
-  width: 100%;
-  min-height: 100vh;
-}
diff --git a/xiaohongshu-upload-platform/src/ljc/back_end/app.py b/xiaohongshu-upload-platform/src/ljc/back_end/app.py
deleted file mode 100644
index cb62a4d..0000000
--- a/xiaohongshu-upload-platform/src/ljc/back_end/app.py
+++ /dev/null
@@ -1,460 +0,0 @@
-from flask import Flask, jsonify, request, session
-from flask_sqlalchemy import SQLAlchemy
-from flask_cors import CORS
-
-app = Flask(__name__)
-app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:123456@10.126.59.25/redbook'
-app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
-app.secret_key = 'your_secret_key'
-CORS(app, supports_credentials=True)
-
-db = SQLAlchemy(app)
-
-# 模型定义
-# 用户表
-class User(db.Model):
-    __tablename__ = 'users'
-    id = db.Column(db.Integer, primary_key=True, autoincrement=True, comment='用户ID')
-    username = db.Column(db.String(50), unique=True, nullable=False, comment='用户名')
-    password = db.Column(db.String(255), nullable=False, comment='加密密码')
-    email = db.Column(db.String(100), unique=True, nullable=False, comment='邮箱')
-    avatar = db.Column(db.String(255), comment='头像URL')
-    role = db.Column(db.Enum('superadmin', 'user', 'admin'), default='user', comment='角色')
-    bio = db.Column(db.String(255), comment='个人简介')
-    status = db.Column(db.Enum('active', 'banned', 'muted'), default='active', comment='账号状态')
-    created_at = db.Column(db.TIMESTAMP, server_default=db.func.current_timestamp(), comment='创建时间')
-    updated_at = db.Column(db.TIMESTAMP, server_default=db.func.current_timestamp(), 
-                          onupdate=db.func.current_timestamp(), comment='更新时间')
-    
-    # 关系定义
-    posts = db.relationship('Post', backref='author', lazy=True)
-    behaviors = db.relationship('Behavior', backref='user', lazy=True)
-    comments = db.relationship('Comment', backref='commenter', lazy=True)
-    notifications = db.relationship('Notification', backref='recipient', lazy=True)
-    audits = db.relationship('Audit', backref='admin', lazy=True)
-    logs = db.relationship('Log', backref='logger', lazy=True)
-    user_tags = db.relationship('UserTag', backref='user', lazy=True)
-
-# 标签表
-class Tag(db.Model):
-    __tablename__ = 'tags'
-    id = db.Column(db.Integer, primary_key=True, autoincrement=True, comment='标签ID')
-    name = db.Column(db.String(50), unique=True, nullable=False, comment='标签名称')
-    description = db.Column(db.String(255), comment='标签描述')
-    created_at = db.Column(db.TIMESTAMP, server_default=db.func.current_timestamp(), comment='创建时间')
-    
-    # 关系定义
-    post_tags = db.relationship('PostTag', backref='tag', lazy=True)
-    user_tags = db.relationship('UserTag', backref='tag', lazy=True)
-
-# 话题/超话表
-class Topic(db.Model):
-    __tablename__ = 'topics'
-    id = db.Column(db.Integer, primary_key=True, autoincrement=True, comment='话题ID')
-    name = db.Column(db.String(100), unique=True, nullable=False, comment='话题名称')
-    description = db.Column(db.Text, comment='话题描述')
-    status = db.Column(db.Enum('active', 'archived'), default='active', comment='状态')
-    created_at = db.Column(db.TIMESTAMP, server_default=db.func.current_timestamp(), comment='创建时间')
-    
-    # 关系定义
-    posts = db.relationship('Post', backref='topic', lazy=True)
-
-# 内容帖子表
-class Post(db.Model):
-    __tablename__ = 'posts'
-    id = db.Column(db.Integer, primary_key=True, autoincrement=True, comment='帖子ID')
-    user_id = db.Column(db.Integer, db.ForeignKey('users.id', ondelete='CASCADE'), nullable=False, comment='作者ID')
-    topic_id = db.Column(db.Integer, db.ForeignKey('topics.id', ondelete='SET NULL'), comment='所属话题ID')
-    type = db.Column(db.Enum('text', 'image', 'video', 'document'), default='text', comment='内容类型')
-    title = db.Column(db.String(255), nullable=False, comment='标题')
-    content = db.Column(db.Text, nullable=False, comment='正文内容')
-    media_urls = db.Column(db.JSON, comment='媒体资源URL数组')
-    status = db.Column(db.Enum('draft', 'pending', 'published', 'deleted', 'rejected'), default='draft', comment='状态')
-    heat = db.Column(db.Integer, default=0, comment='热度值')
-    created_at = db.Column(db.TIMESTAMP, server_default=db.func.current_timestamp(), comment='创建时间')
-    updated_at = db.Column(db.TIMESTAMP, server_default=db.func.current_timestamp(), 
-                          onupdate=db.func.current_timestamp(), comment='更新时间')
-    
-    # 关系定义
-    behaviors = db.relationship('Behavior', backref='post', lazy=True)
-    comments = db.relationship('Comment', backref='post', lazy=True)
-    post_tags = db.relationship('PostTag', backref='post', lazy=True)
-    audits = db.relationship('Audit', backref='post', lazy=True)
-
-# 帖子标签关联表
-class PostTag(db.Model):
-    __tablename__ = 'post_tags'
-    post_id = db.Column(db.Integer, db.ForeignKey('posts.id', ondelete='CASCADE'), primary_key=True, comment='帖子ID')
-    tag_id = db.Column(db.Integer, db.ForeignKey('tags.id', ondelete='CASCADE'), primary_key=True, comment='标签ID')
-
-# 用户行为表
-class Behavior(db.Model):
-    __tablename__ = 'behaviors'
-    id = db.Column(db.BigInteger, primary_key=True, autoincrement=True, comment='行为ID')
-    user_id = db.Column(db.Integer, db.ForeignKey('users.id', ondelete='CASCADE'), nullable=False, comment='用户ID')
-    post_id = db.Column(db.Integer, db.ForeignKey('posts.id', ondelete='CASCADE'), nullable=False, comment='帖子ID')
-    type = db.Column(db.Enum('like', 'comment', 'favorite', 'view', 'share'), nullable=False, comment='行为类型')
-    value = db.Column(db.Integer, default=1, comment='行为值')
-    created_at = db.Column(db.TIMESTAMP, server_default=db.func.current_timestamp(), comment='行为时间')
-
-# 评论表
-class Comment(db.Model):
-    __tablename__ = 'comments'
-    id = db.Column(db.Integer, primary_key=True, autoincrement=True, comment='评论ID')
-    post_id = db.Column(db.Integer, db.ForeignKey('posts.id', ondelete='CASCADE'), nullable=False, comment='帖子ID')
-    user_id = db.Column(db.Integer, db.ForeignKey('users.id', ondelete='CASCADE'), nullable=False, comment='用户ID')
-    parent_id = db.Column(db.Integer, db.ForeignKey('comments.id', ondelete='CASCADE'), comment='父评论ID')
-    content = db.Column(db.Text, nullable=False, comment='评论内容')
-    status = db.Column(db.Enum('active', 'deleted'), default='active', comment='状态')
-    created_at = db.Column(db.TIMESTAMP, server_default=db.func.current_timestamp(), comment='创建时间')
-    updated_at = db.Column(db.TIMESTAMP, server_default=db.func.current_timestamp(), 
-                          onupdate=db.func.current_timestamp(), comment='更新时间')
-    
-    # 关系定义
-    replies = db.relationship('Comment', backref=db.backref('parent', remote_side=[id]), lazy=True)
-
-# 用户关注关系表
-class Follow(db.Model):
-    __tablename__ = 'follows'
-    follower_id = db.Column(db.Integer, db.ForeignKey('users.id', ondelete='CASCADE'), primary_key=True, comment='关注者ID')
-    followee_id = db.Column(db.Integer, db.ForeignKey('users.id', ondelete='CASCADE'), primary_key=True, comment='被关注者ID')
-    created_at = db.Column(db.TIMESTAMP, server_default=db.func.current_timestamp(), comment='关注时间')
-    
-    # 关系定义
-    follower = db.relationship('User', foreign_keys=[follower_id], backref='following')
-    followee = db.relationship('User', foreign_keys=[followee_id], backref='followers')
-
-# 通知表
-class Notification(db.Model):
-    __tablename__ = 'notifications'
-    id = db.Column(db.Integer, primary_key=True, autoincrement=True, comment='通知ID')
-    user_id = db.Column(db.Integer, db.ForeignKey('users.id', ondelete='CASCADE'), nullable=False, comment='接收用户ID')
-    type = db.Column(db.Enum('like', 'comment', 'follow', 'system', 'audit'), nullable=False, comment='通知类型')
-    content = db.Column(db.JSON, nullable=False, comment='通知内容')
-    is_read = db.Column(db.Boolean, default=False, comment='是否已读')
-    created_at = db.Column(db.TIMESTAMP, server_default=db.func.current_timestamp(), comment='创建时间')
-
-# 审核记录表
-class Audit(db.Model):
-    __tablename__ = 'audits'
-    id = db.Column(db.Integer, primary_key=True, autoincrement=True, comment='审核ID')
-    post_id = db.Column(db.Integer, db.ForeignKey('posts.id', ondelete='CASCADE'), nullable=False, comment='帖子ID')
-    admin_id = db.Column(db.Integer, db.ForeignKey('users.id', ondelete='CASCADE'), nullable=False, comment='管理员ID')
-    result = db.Column(db.Enum('approved', 'rejected'), nullable=False, comment='审核结果')
-    reason = db.Column(db.String(255), comment='审核原因')
-    created_at = db.Column(db.TIMESTAMP, server_default=db.func.current_timestamp(), comment='审核时间')
-
-# 日志表
-class Log(db.Model):
-    __tablename__ = 'logs'
-    id = db.Column(db.BigInteger, primary_key=True, autoincrement=True, comment='日志ID')
-    user_id = db.Column(db.Integer, db.ForeignKey('users.id', ondelete='SET NULL'), comment='用户ID')
-    type = db.Column(db.Enum('access', 'error', 'behavior', 'system'), nullable=False, comment='日志类型')
-    content = db.Column(db.Text, nullable=False, comment='日志内容')
-    ip = db.Column(db.String(45), comment='IP地址')
-    created_at = db.Column(db.TIMESTAMP, server_default=db.func.current_timestamp(), comment='记录时间')
-
-# 用户兴趣标签表
-class UserTag(db.Model):
-    __tablename__ = 'user_tags'
-    user_id = db.Column(db.Integer, db.ForeignKey('users.id', ondelete='CASCADE'), primary_key=True, comment='用户ID')
-    tag_id = db.Column(db.Integer, db.ForeignKey('tags.id', ondelete='CASCADE'), primary_key=True, comment='标签ID')
-    weight = db.Column(db.Float, default=1.0, comment='兴趣权重')
-    created_at = db.Column(db.TIMESTAMP, server_default=db.func.current_timestamp(), comment='创建时间')
-    updated_at = db.Column(db.TIMESTAMP, server_default=db.func.current_timestamp(), 
-                          onupdate=db.func.current_timestamp(), comment='更新时间')
-    
-
-# 自动登录用户11
-@app.before_request
-def auto_login():
-    # 如果用户未登录，自动设置为用户11
-    if 'user_id' not in session:
-        session['user_id'] = 11
-
-# 获取当前用户信息
-@app.route('/api/current-user')
-def current_user():
-    user_id = session.get('user_id', 1)
-    user = User.query.get(user_id)
-    if not user:
-        return jsonify({'error': 'User not found'}), 404
-    
-    following_count = Follow.query.filter_by(follower_id=user_id).count()
-    followers_count = Follow.query.filter_by(followee_id=user_id).count()
-    
-    return jsonify({
-        'id': user.id,
-        'username': user.username,
-        'email': user.email,
-        'avatar': user.avatar,
-        'bio': user.bio,
-        'following_count': following_count,
-        'followers_count': followers_count
-    })
-
-# 获取指定用户信息
-@app.route('/api/user/<int:user_id>')
-def get_user(user_id):
-    current_user_id = session.get('user_id', 1)
-    user = User.query.get(user_id)
-    if not user:
-        return jsonify({'error': 'User not found'}), 404
-    
-    following_count = Follow.query.filter_by(follower_id=user_id).count()
-    followers_count = Follow.query.filter_by(followee_id=user_id).count()
-    
-    is_following = False
-    if current_user_id:
-        is_following = Follow.query.filter_by(
-            follower_id=current_user_id,
-            followee_id=user_id
-        ).first() is not None
-    
-    return jsonify({
-        'id': user.id,
-        'username': user.username,
-        'avatar': user.avatar,
-        'bio': user.bio,
-        'following_count': following_count,
-        'followers_count': followers_count,
-        'is_following': is_following
-    })
-
-# 更新用户信息
-@app.route('/api/user/<int:user_id>', methods=['PUT'])
-def update_user(user_id):
-    current_user_id = session.get('user_id', 1)
-    if current_user_id != user_id:
-        return jsonify({'error': 'Unauthorized'}), 403
-    
-    user = User.query.get(user_id)
-    if not user:
-        return jsonify({'error': 'User not found'}), 404
-    
-    data = request.json
-    if 'avatar' in data:
-        user.avatar = data['avatar']
-    if 'bio' in data:
-        user.bio = data['bio']
-    
-    db.session.commit()
-    return jsonify({
-        'id': user.id,
-        'avatar': user.avatar,
-        'bio': user.bio
-    })
-
-# 获取用户收藏
-@app.route('/api/user/<int:user_id>/favorites', methods=['GET'])
-def get_user_favorites(user_id):
-    # 检查用户是否登录
-    if 'user_id' not in session:
-        return jsonify({'error': '未登录'}), 401
-    
-    # 验证请求的用户ID与登录用户ID是否一致
-    if session['user_id'] != user_id:
-        return jsonify({'error': '无权访问其他用户的收藏'}), 403
-    
-    try:
-        # 获取收藏行为及其关联的帖子
-        favorites = db.session.query(Behavior, Post).join(
-            Post, Behavior.post_id == Post.id
-        ).filter(
-            Behavior.user_id == user_id,
-            Behavior.type == 'favorite'
-        ).all()
-        
-        # 构建响应数据
-        result = []
-        for behavior, post in favorites:
-            # 获取帖子作者信息
-            author = User.query.get(post.user_id)
-            
-            # 构建响应对象
-            result.append({
-                'behavior_id': behavior.id,
-                'post': {
-                    'id': post.id,
-                    'title': post.title,
-                    'type': post.type,
-                    'content_preview': post.content[:100] + '...' if len(post.content) > 100 else post.content,
-                    'media_urls': post.media_urls,
-                    'created_at': post.created_at.strftime('%Y-%m-%d %H:%M:%S'),
-                    'author': {
-                        'id': author.id,
-                        'username': author.username,
-                        'avatar': author.avatar
-                    }
-                },
-                'favorited_at': behavior.created_at.strftime('%Y-%m-%d %H:%M:%S')
-            })
-        
-        return jsonify(result)
-    
-    except Exception as e:
-        app.logger.error(f"获取收藏时出错: {str(e)}")
-        return jsonify({'error': '获取收藏失败'}), 500
-    
-
-# 获取用户发布的帖子
-@app.route('/api/user/<int:user_id>/posts')
-def get_user_posts(user_id):
-    # 允许任何人查看用户发布的帖子
-    posts = Post.query.filter_by(
-        user_id=user_id,
-        status='published'
-    ).all()
-    
-    return jsonify([{
-        'id': post.id,
-        'title': post.title,
-        'content': post.content[:100] + '...' if len(post.content) > 100 else post.content,
-        'type': post.type,
-        'heat': post.heat,
-        'created_at': post.created_at.strftime('%Y-%m-%d %H:%M')
-    } for post in posts])
-
-# 获取用户关注列表
-@app.route('/api/user/<int:user_id>/following')
-def get_user_following(user_id):
-    # 允许任何人查看用户的关注列表
-    following = Follow.query.filter_by(follower_id=user_id).all()
-    
-    # 获取被关注用户的详细信息
-    following_list = []
-    for follow in following:
-        user = User.query.get(follow.followee_id)
-        if user:
-            followers_count = Follow.query.filter_by(followee_id=user.id).count()
-            
-            following_list.append({
-                'id': user.id,
-                'username': user.username,
-                'avatar': user.avatar,
-                'followers_count': followers_count
-            })
-    
-    return jsonify(following_list)
-
-# 关注/取消关注用户
-@app.route('/api/follow/<int:followee_id>', methods=['POST', 'DELETE'])
-def follow_user(followee_id):
-    follower_id = session.get('user_id', 1)
-    if follower_id == followee_id:
-        return jsonify({'error': 'Cannot follow yourself'}), 400
-    
-    if request.method == 'POST':
-        existing = Follow.query.filter_by(
-            follower_id=follower_id,
-            followee_id=followee_id
-        ).first()
-        
-        if not existing:
-            follow = Follow(
-                follower_id=follower_id,
-                followee_id=followee_id
-            )
-            db.session.add(follow)
-            db.session.commit()
-        return jsonify({'message': 'Followed successfully'})
-    
-    elif request.method == 'DELETE':
-        follow = Follow.query.filter_by(
-            follower_id=follower_id,
-            followee_id=followee_id
-        ).first()
-        
-        if follow:
-            db.session.delete(follow)
-            db.session.commit()
-        return jsonify({'message': 'Unfollowed successfully'})
-    
-
-# 新增获取粉丝列表的API
-@app.route('/api/user/<int:user_id>/followers')
-def get_user_followers(user_id):
-    try:
-        # 查询关注该用户的用户列表
-        followers = db.session.query(User).join(
-            Follow, Follow.follower_id == User.id
-        ).filter(
-            Follow.followee_id == user_id
-        ).all()
-        
-        # 获取当前登录用户ID（如果有）
-        current_user_id = session.get('user_id') if 'user_id' in session else None
-        
-        # 构建响应数据
-        result = []
-        for user in followers:
-            # 检查当前用户是否关注了这个粉丝
-            is_following = False
-            if current_user_id:
-                follow_relation = Follow.query.filter_by(
-                    follower_id=current_user_id,
-                    followee_id=user.id
-                ).first()
-                is_following = follow_relation is not None
-            
-            # 计算该粉丝的粉丝数
-            followers_count = Follow.query.filter_by(followee_id=user.id).count()
-            
-            result.append({
-                'id': user.id,
-                'username': user.username,
-                'avatar': user.avatar,
-                'bio': user.bio,
-                'followers_count': followers_count,
-                'is_following': is_following
-            })
-
-        
-        return jsonify({
-            'success': True,
-            'data': result
-        })
-    
-    except Exception as e:
-        app.logger.error(f"获取粉丝列表失败: {str(e)}")
-        return jsonify({
-            'success': False,
-            'error': '获取粉丝列表失败'
-        }), 500
-
-# 辅助函数：检查当前用户是否关注了目标用户
-def check_following_status(follower_id, followee_id):
-    return Follow.query.filter_by(
-        follower_id=follower_id,
-        followee_id=followee_id
-    ).first() is not None
-
-
-# 记录用户点赞收藏总数
-@app.route('/api/user/<int:user_id>/interactions', methods=['GET'])
-def get_user_interactions(user_id):
-    try:
-        # 计算用户的获赞总数（所有帖子的点赞数）
-        like_count = db.session.query(db.func.sum(Behavior.value)).filter(
-            Behavior.post.has(user_id=user_id),
-            Behavior.type == 'like'
-        ).scalar() or 0
-        
-        # 计算用户的收藏总数（所有帖子的收藏数）
-        favorite_count = db.session.query(db.func.sum(Behavior.value)).filter(
-            Behavior.post.has(user_id=user_id),
-            Behavior.type == 'favorite'
-        ).scalar() or 0
-        
-        return jsonify({
-            'likes_count': like_count,
-            'favorites_count': favorite_count
-        })
-    
-    except Exception as e:
-        app.logger.error(f"获取用户互动数据失败: {str(e)}")
-        return jsonify({'error': '获取互动数据失败'}), 500
-
-
-if __name__ == '__main__':
-    app.run(debug=True)
\ No newline at end of file
diff --git a/xiaohongshu-upload-platform/src/ljc/personalpage/.gitignore b/xiaohongshu-upload-platform/src/ljc/personalpage/.gitignore
deleted file mode 100644
index 4d29575..0000000
--- a/xiaohongshu-upload-platform/src/ljc/personalpage/.gitignore
+++ /dev/null
@@ -1,23 +0,0 @@
-# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
-
-# dependencies
-/node_modules
-/.pnp
-.pnp.js
-
-# testing
-/coverage
-
-# production
-/build
-
-# misc
-.DS_Store
-.env.local
-.env.development.local
-.env.test.local
-.env.production.local
-
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
diff --git a/xiaohongshu-upload-platform/src/ljc/personalpage/README.md b/xiaohongshu-upload-platform/src/ljc/personalpage/README.md
deleted file mode 100644
index 58beeac..0000000
--- a/xiaohongshu-upload-platform/src/ljc/personalpage/README.md
+++ /dev/null
@@ -1,70 +0,0 @@
-# Getting Started with Create React App
-
-This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
-
-## Available Scripts
-
-In the project directory, you can run:
-
-### `npm start`
-
-Runs the app in the development mode.\
-Open [http://localhost:3000](http://localhost:3000) to view it in your browser.
-
-The page will reload when you make changes.\
-You may also see any lint errors in the console.
-
-### `npm test`
-
-Launches the test runner in the interactive watch mode.\
-See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
-
-### `npm run build`
-
-Builds the app for production to the `build` folder.\
-It correctly bundles React in production mode and optimizes the build for the best performance.
-
-The build is minified and the filenames include the hashes.\
-Your app is ready to be deployed!
-
-See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
-
-### `npm run eject`
-
-**Note: this is a one-way operation. Once you `eject`, you can't go back!**
-
-If you aren't satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.
-
-Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you're on your own.
-
-You don't have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn't feel obligated to use this feature. However we understand that this tool wouldn't be useful if you couldn't customize it when you are ready for it.
-
-## Learn More
-
-You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).
-
-To learn React, check out the [React documentation](https://reactjs.org/).
-
-### Code Splitting
-
-This section has moved here: [https://facebook.github.io/create-react-app/docs/code-splitting](https://facebook.github.io/create-react-app/docs/code-splitting)
-
-### Analyzing the Bundle Size
-
-This section has moved here: [https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size](https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size)
-
-### Making a Progressive Web App
-
-This section has moved here: [https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app](https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app)
-
-### Advanced Configuration
-
-This section has moved here: [https://facebook.github.io/create-react-app/docs/advanced-configuration](https://facebook.github.io/create-react-app/docs/advanced-configuration)
-
-### Deployment
-
-This section has moved here: [https://facebook.github.io/create-react-app/docs/deployment](https://facebook.github.io/create-react-app/docs/deployment)
-
-### `npm run build` fails to minify
-
-This section has moved here: [https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify](https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify)
diff --git a/xiaohongshu-upload-platform/src/ljc/personalpage/package.json b/xiaohongshu-upload-platform/src/ljc/personalpage/package.json
deleted file mode 100644
index 9cd7e67..0000000
--- a/xiaohongshu-upload-platform/src/ljc/personalpage/package.json
+++ /dev/null
@@ -1,49 +0,0 @@
-{
-  "name": "personalpage",
-  "version": "0.1.0",
-  "private": true,
-  "dependencies": {
-    "@emotion/react": "^11.14.0",
-    "@emotion/styled": "^11.14.0",
-    "@mui/icons-material": "^7.1.1",
-    "@mui/material": "^7.1.1",
-    "@testing-library/dom": "^10.4.0",
-    "@testing-library/jest-dom": "^6.6.3",
-    "@testing-library/react": "^16.3.0",
-    "@testing-library/user-event": "^13.5.0",
-    "ajv": "^8.0.0",
-    "ajv-keywords": "^5.0.0",
-    "axios": "^1.9.0",
-    "mui": "^0.0.1",
-    "react": "^19.1.0",
-    "react-dom": "^19.1.0",
-    "react-icons": "^5.5.0",
-    "react-router-dom": "^6.30.1",
-    "react-scripts": "5.0.1",
-    "web-vitals": "^2.1.4"
-  },
-  "scripts": {
-    "start": "react-scripts start",
-    "build": "react-scripts build",
-    "test": "react-scripts test",
-    "eject": "react-scripts eject"
-  },
-  "eslintConfig": {
-    "extends": [
-      "react-app",
-      "react-app/jest"
-    ]
-  },
-  "browserslist": {
-    "production": [
-      ">0.2%",
-      "not dead",
-      "not op_mini all"
-    ],
-    "development": [
-      "last 1 chrome version",
-      "last 1 firefox version",
-      "last 1 safari version"
-    ]
-  }
-}
diff --git a/xiaohongshu-upload-platform/src/ljc/personalpage/public/favicon.ico b/xiaohongshu-upload-platform/src/ljc/personalpage/public/favicon.ico
deleted file mode 100644
index a11777c..0000000
--- a/xiaohongshu-upload-platform/src/ljc/personalpage/public/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/xiaohongshu-upload-platform/src/ljc/personalpage/public/index.html b/xiaohongshu-upload-platform/src/ljc/personalpage/public/index.html
deleted file mode 100644
index aa069f2..0000000
--- a/xiaohongshu-upload-platform/src/ljc/personalpage/public/index.html
+++ /dev/null
@@ -1,43 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-  <head>
-    <meta charset="utf-8" />
-    <link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
-    <meta name="viewport" content="width=device-width, initial-scale=1" />
-    <meta name="theme-color" content="#000000" />
-    <meta
-      name="description"
-      content="Web site created using create-react-app"
-    />
-    <link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
-    <!--
-      manifest.json provides metadata used when your web app is installed on a
-      user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
-    -->
-    <link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
-    <!--
-      Notice the use of %PUBLIC_URL% in the tags above.
-      It will be replaced with the URL of the `public` folder during the build.
-      Only files inside the `public` folder can be referenced from the HTML.
-
-      Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
-      work correctly both with client-side routing and a non-root public URL.
-      Learn how to configure a non-root public URL by running `npm run build`.
-    -->
-    <title>React App</title>
-  </head>
-  <body>
-    <noscript>You need to enable JavaScript to run this app.</noscript>
-    <div id="root"></div>
-    <!--
-      This HTML file is a template.
-      If you open it directly in the browser, you will see an empty page.
-
-      You can add webfonts, meta tags, or analytics to this file.
-      The build step will place the bundled scripts into the <body> tag.
-
-      To begin the development, run `npm start` or `yarn start`.
-      To create a production bundle, use `npm run build` or `yarn build`.
-    -->
-  </body>
-</html>
diff --git a/xiaohongshu-upload-platform/src/ljc/personalpage/public/logo192.png b/xiaohongshu-upload-platform/src/ljc/personalpage/public/logo192.png
deleted file mode 100644
index fc44b0a..0000000
--- a/xiaohongshu-upload-platform/src/ljc/personalpage/public/logo192.png
+++ /dev/null
Binary files differ
diff --git a/xiaohongshu-upload-platform/src/ljc/personalpage/public/logo512.png b/xiaohongshu-upload-platform/src/ljc/personalpage/public/logo512.png
deleted file mode 100644
index a4e47a6..0000000
--- a/xiaohongshu-upload-platform/src/ljc/personalpage/public/logo512.png
+++ /dev/null
Binary files differ
diff --git a/xiaohongshu-upload-platform/src/ljc/personalpage/public/manifest.json b/xiaohongshu-upload-platform/src/ljc/personalpage/public/manifest.json
deleted file mode 100644
index 080d6c7..0000000
--- a/xiaohongshu-upload-platform/src/ljc/personalpage/public/manifest.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
-  "short_name": "React App",
-  "name": "Create React App Sample",
-  "icons": [
-    {
-      "src": "favicon.ico",
-      "sizes": "64x64 32x32 24x24 16x16",
-      "type": "image/x-icon"
-    },
-    {
-      "src": "logo192.png",
-      "type": "image/png",
-      "sizes": "192x192"
-    },
-    {
-      "src": "logo512.png",
-      "type": "image/png",
-      "sizes": "512x512"
-    }
-  ],
-  "start_url": ".",
-  "display": "standalone",
-  "theme_color": "#000000",
-  "background_color": "#ffffff"
-}
diff --git a/xiaohongshu-upload-platform/src/ljc/personalpage/public/robots.txt b/xiaohongshu-upload-platform/src/ljc/personalpage/public/robots.txt
deleted file mode 100644
index e9e57dc..0000000
--- a/xiaohongshu-upload-platform/src/ljc/personalpage/public/robots.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-# https://www.robotstxt.org/robotstxt.html
-User-agent: *
-Disallow:
diff --git a/xiaohongshu-upload-platform/src/ljc/personalpage/src/App.css b/xiaohongshu-upload-platform/src/ljc/personalpage/src/App.css
deleted file mode 100644
index 74b5e05..0000000
--- a/xiaohongshu-upload-platform/src/ljc/personalpage/src/App.css
+++ /dev/null
@@ -1,38 +0,0 @@
-.App {
-  text-align: center;
-}
-
-.App-logo {
-  height: 40vmin;
-  pointer-events: none;
-}
-
-@media (prefers-reduced-motion: no-preference) {
-  .App-logo {
-    animation: App-logo-spin infinite 20s linear;
-  }
-}
-
-.App-header {
-  background-color: #282c34;
-  min-height: 100vh;
-  display: flex;
-  flex-direction: column;
-  align-items: center;
-  justify-content: center;
-  font-size: calc(10px + 2vmin);
-  color: white;
-}
-
-.App-link {
-  color: #61dafb;
-}
-
-@keyframes App-logo-spin {
-  from {
-    transform: rotate(0deg);
-  }
-  to {
-    transform: rotate(360deg);
-  }
-}
diff --git a/xiaohongshu-upload-platform/src/ljc/personalpage/src/App.js b/xiaohongshu-upload-platform/src/ljc/personalpage/src/App.js
deleted file mode 100644
index ed241f4..0000000
--- a/xiaohongshu-upload-platform/src/ljc/personalpage/src/App.js
+++ /dev/null
@@ -1,77 +0,0 @@
-import React from 'react';
-import { BrowserRouter, Routes, Route, Navigate, useParams } from 'react-router-dom';
-import UserProfile from './components/UserProfile';
-import { FaHome, FaSearch, FaPlus, FaHeart, FaUser } from 'react-icons/fa';
-
-function App() {
-  return (
-    <BrowserRouter>
-      <div className="min-h-screen bg-gray-50">
-        {/* 顶部导航栏 */}
-        <header className="bg-white shadow-sm sticky top-0 z-10">
-          <div className="max-w-6xl mx-auto px-4 py-3 flex justify-between items-center">
-            <div className="flex items-center">
-              <div className="text-2xl font-bold text-red-500 mr-2">小红书</div>
-              <div className="hidden md:block text-sm text-gray-500">发现美好生活</div>
-            </div>
-            <div className="flex space-x-4">
-              <a href="/user/11" className="text-gray-600 hover:text-red-500">
-                用户11
-              </a>
-              <a href="/user/2" className="text-gray-600 hover:text-red-500">
-                用户2
-              </a>
-              <a href="/user/3" className="text-gray-600 hover:text-red-500">
-                用户3
-              </a>
-            </div>
-          </div>
-        </header>
-
-        <main className="py-5">
-          <div className="max-w-6xl mx-auto">
-            <Routes>
-              <Route path="/" element={<Navigate to="/user/11" replace />} />
-              <Route path="/user/:userId" element={<UserProfileRoute />} />
-            </Routes>
-          </div>
-        </main>
-
-        {/* 小红书风格底部导航栏 */}
-        <div className="fixed bottom-0 left-0 right-0 bg-white border-t border-gray-200 py-2 z-10">
-          <div className="max-w-md mx-auto grid grid-cols-5">
-            <button className="flex flex-col items-center text-red-500">
-              <FaHome className="text-xl" />
-              <span className="text-xs mt-1">首页</span>
-            </button>
-            <button className="flex flex-col items-center text-gray-500">
-              <FaSearch className="text-xl" />
-              <span className="text-xs mt-1">发现</span>
-            </button>
-            <button className="flex flex-col items-center text-gray-500">
-              <div className="bg-red-500 rounded-full p-2 -mt-3">
-                <FaPlus className="text-white text-lg" />
-              </div>
-              <span className="text-xs mt-2">发布</span>
-            </button>
-            <button className="flex flex-col items-center text-gray-500">
-              <FaHeart className="text-xl" />
-              <span className="text-xs mt-1">消息</span>
-            </button>
-            <button className="flex flex-col items-center text-gray-500">
-              <FaUser className="text-xl" />
-              <span className="text-xs mt-1">我</span>
-            </button>
-          </div>
-        </div>
-      </div>
-    </BrowserRouter>
-  );
-}
-
-function UserProfileRoute() {
-  const { userId } = useParams();
-  return <UserProfile userId={parseInt(userId)} />;
-}
-
-export default App;
\ No newline at end of file
diff --git a/xiaohongshu-upload-platform/src/ljc/personalpage/src/App.test.js b/xiaohongshu-upload-platform/src/ljc/personalpage/src/App.test.js
deleted file mode 100644
index 1f03afe..0000000
--- a/xiaohongshu-upload-platform/src/ljc/personalpage/src/App.test.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import { render, screen } from '@testing-library/react';
-import App from './App';
-
-test('renders learn react link', () => {
-  render(<App />);
-  const linkElement = screen.getByText(/learn react/i);
-  expect(linkElement).toBeInTheDocument();
-});
diff --git a/xiaohongshu-upload-platform/src/ljc/personalpage/src/components/EditProfileForm.jsx b/xiaohongshu-upload-platform/src/ljc/personalpage/src/components/EditProfileForm.jsx
deleted file mode 100644
index d33cbcb..0000000
--- a/xiaohongshu-upload-platform/src/ljc/personalpage/src/components/EditProfileForm.jsx
+++ /dev/null
@@ -1,116 +0,0 @@
-import React, { useState } from 'react';
-import { FaCamera, FaTimes } from 'react-icons/fa';
-
-const EditProfileForm = ({ user, onSave, onCancel }) => {
-  const [avatar, setAvatar] = useState(user.avatar || '');
-  const [bio, setBio] = useState(user.bio || '');
-  const [gender, setGender] = useState('secret');
-  const [birthday, setBirthday] = useState('');
-  const [location, setLocation] = useState('');
-
-  const handleSubmit = (e) => {
-    e.preventDefault();
-    onSave({ avatar, bio });
-  };
-
-  return (
-    <form onSubmit={handleSubmit}>
-      <div className="mb-6">
-        <label className="block text-sm font-medium text-gray-700 mb-2">头像</label>
-        <div className="flex items-center">
-          <div className="relative">
-            <div className="w-20 h-20 rounded-full bg-gradient-to-r from-pink-300 to-orange-300 flex items-center justify-center">
-              {avatar ? (
-                <img src={avatar} alt="Avatar" className="w-full h-full rounded-full" />
-              ) : (
-                <div className="text-white text-2xl">{user.username.charAt(0)}</div>
-              )}
-            </div>
-            <button 
-              type="button"
-              className="absolute bottom-0 right-0 bg-white rounded-full p-1 shadow-md"
-            >
-              <FaCamera className="text-gray-700 text-sm" />
-            </button>
-          </div>
-          <div className="ml-4">
-            <input
-              type="text"
-              value={avatar}
-              onChange={(e) => setAvatar(e.target.value)}
-              placeholder="输入头像URL"
-              className="w-full rounded-md border-gray-300 shadow-sm text-sm"
-            />
-          </div>
-        </div>
-      </div>
-      
-      <div className="mb-4">
-        <label className="block text-sm font-medium text-gray-700 mb-2">个人简介</label>
-        <textarea
-          value={bio}
-          onChange={(e) => setBio(e.target.value)}
-          rows="3"
-          maxLength="100"
-          className="mt-1 block w-full rounded-md border-gray-300 shadow-sm text-sm"
-          placeholder="介绍一下自己吧～"
-        />
-        <div className="text-right text-xs text-gray-500 mt-1">{bio.length}/100</div>
-      </div>
-      
-      <div className="grid grid-cols-2 gap-4 mb-4">
-        <div>
-          <label className="block text-sm font-medium text-gray-700 mb-2">性别</label>
-          <select
-            value={gender}
-            onChange={(e) => setGender(e.target.value)}
-            className="mt-1 block w-full rounded-md border-gray-300 shadow-sm text-sm"
-          >
-            <option value="secret">保密</option>
-            <option value="male">男</option>
-            <option value="female">女</option>
-          </select>
-        </div>
-        
-        <div>
-          <label className="block text-sm font-medium text-gray-700 mb-2">生日</label>
-          <input
-            type="date"
-            value={birthday}
-            onChange={(e) => setBirthday(e.target.value)}
-            className="mt-1 block w-full rounded-md border-gray-300 shadow-sm text-sm"
-          />
-        </div>
-      </div>
-      
-      <div className="mb-6">
-        <label className="block text-sm font-medium text-gray-700 mb-2">地区</label>
-        <input
-          type="text"
-          value={location}
-          onChange={(e) => setLocation(e.target.value)}
-          placeholder="填写你所在的城市"
-          className="mt-1 block w-full rounded-md border-gray-300 shadow-sm text-sm"
-        />
-      </div>
-      
-      <div className="flex justify-end space-x-3">
-        <button 
-          type="button"
-          onClick={onCancel}
-          className="px-5 py-2 bg-gray-100 text-gray-700 rounded-full text-sm hover:bg-gray-200"
-        >
-          取消
-        </button>
-        <button 
-          type="submit"
-          className="px-5 py-2 bg-red-500 text-white rounded-full text-sm hover:bg-red-600"
-        >
-          保存
-        </button>
-      </div>
-    </form>
-  );
-};
-
-export default EditProfileForm;
\ No newline at end of file
diff --git a/xiaohongshu-upload-platform/src/ljc/personalpage/src/components/FavoritePosts.jsx b/xiaohongshu-upload-platform/src/ljc/personalpage/src/components/FavoritePosts.jsx
deleted file mode 100644
index 4033d7b..0000000
--- a/xiaohongshu-upload-platform/src/ljc/personalpage/src/components/FavoritePosts.jsx
+++ /dev/null
@@ -1,95 +0,0 @@
-import React, { useState, useEffect } from 'react';
-import { getFavorites } from '../services/api';
-import { FaHeart } from 'react-icons/fa';
-
-const FavoritePosts = ({ userId }) => {
-  const [favorites, setFavorites] = useState([]);
-  const [loading, setLoading] = useState(true);
-
-  useEffect(() => {
-    const fetchFavorites = async () => {
-      try {
-        setLoading(true);
-        const response = await getFavorites(userId);
-        setFavorites(response.data);
-      } catch (error) {
-        console.error('Failed to fetch favorites:', error);
-      } finally {
-        setLoading(false);
-      }
-    };
-    
-    if (userId) {
-      fetchFavorites();
-    }
-  }, [userId]);
-
-  if (loading) {
-    return (
-      <div className="grid grid-cols-2 md:grid-cols-3 gap-4">
-        {[1, 2, 3, 4, 5, 6].map(item => (
-          <div key={item} className="bg-gray-100 rounded-xl aspect-square animate-pulse"></div>
-        ))}
-      </div>
-    );
-  }
-
-  if (favorites.length === 0) {
-    return (
-      <div className="text-center py-16">
-        <div className="inline-flex items-center justify-center w-16 h-16 rounded-full bg-red-100 text-red-500 mb-4">
-          <FaHeart className="text-2xl" />
-        </div>
-        <h3 className="text-lg font-medium text-gray-900">暂无收藏内容</h3>
-        <p className="mt-1 text-gray-500">你还没有收藏任何笔记</p>
-      </div>
-    );
-  }
-
-  // 模拟瀑布流布局数据
-  const waterfallData = favorites.map(post => ({
-    ...post,
-    height: Math.floor(Math.random() * 100) + 200 // 随机高度
-  }));
-
-  return (
-    <div className="grid grid-cols-2 md:grid-cols-3 gap-4">
-      {waterfallData.map(post => (
-        <div 
-          key={post.id} 
-          className="bg-white rounded-xl overflow-hidden shadow-sm hover:shadow-md transition-shadow"
-        >
-          <div 
-            className="relative bg-gray-200" 
-            style={{ height: `${post.height}px` }}
-          >
-            {/* 占位图片 */}
-            <div className="absolute inset-0 bg-gradient-to-br from-pink-100 to-orange-100"></div>
-            
-            {/* 类型标签 */}
-            <div className="absolute top-2 right-2 bg-black bg-opacity-50 text-white text-xs px-2 py-1 rounded-full">
-              {post.type === 'image' ? '图文' : 
-               post.type === 'video' ? '视频' : '文档'}
-            </div>
-            
-            {/* 收藏标记 */}
-            <div className="absolute bottom-2 right-2 bg-red-500 rounded-full p-1">
-              <FaHeart className="text-white text-xs" />
-            </div>
-          </div>
-          
-          <div className="p-3">
-            <h3 className="font-medium line-clamp-2">{post.title}</h3>
-            <div className="flex items-center mt-2 text-xs text-gray-500">
-              <span>❤️ 2.5k</span>
-              <span className="mx-2">•</span>
-              <span>⭐ 156</span>
-            </div>
-          </div>
-        </div>
-      ))}
-    </div>
-  );
-};
-
-export default FavoritePosts;
\ No newline at end of file
diff --git a/xiaohongshu-upload-platform/src/ljc/personalpage/src/components/FollowButton.jsx b/xiaohongshu-upload-platform/src/ljc/personalpage/src/components/FollowButton.jsx
deleted file mode 100644
index 9e738d4..0000000
--- a/xiaohongshu-upload-platform/src/ljc/personalpage/src/components/FollowButton.jsx
+++ /dev/null
@@ -1,33 +0,0 @@
-import React from 'react';
-import { followUser, unfollowUser } from '../services/api';
-
-const FollowButton = ({ userId, isFollowing, onFollowChange }) => {
-  const handleFollow = async () => {
-    try {
-      if (isFollowing) {
-        await unfollowUser(userId);
-        onFollowChange(false);
-      } else {
-        await followUser(userId);
-        onFollowChange(true);
-      }
-    } catch (error) {
-      console.error('关注操作失败:', error);
-    }
-  };
-
-  return (
-    <button 
-      onClick={handleFollow}
-      className={`px-6 py-2 rounded-full text-sm font-medium transition-all ${
-        isFollowing 
-          ? 'bg-gray-100 text-gray-800 hover:bg-gray-200' 
-          : 'bg-red-500 text-white hover:bg-red-600'
-      }`}
-    >
-      {isFollowing ? '已关注' : '关注'}
-    </button>
-  );
-};
-
-export default FollowButton;
\ No newline at end of file
diff --git a/xiaohongshu-upload-platform/src/ljc/personalpage/src/components/UserProfile.jsx b/xiaohongshu-upload-platform/src/ljc/personalpage/src/components/UserProfile.jsx
deleted file mode 100644
index ee361de..0000000
--- a/xiaohongshu-upload-platform/src/ljc/personalpage/src/components/UserProfile.jsx
+++ /dev/null
@@ -1,1144 +0,0 @@
-import React, { useState, useEffect } from 'react';
-import { 
-  Box, 
-  Grid, 
-  Typography, 
-  Avatar, 
-  Button, 
-  Tabs, 
-  Tab, 
-  Card, 
-  CardMedia, 
-  CardContent, 
-  CardActions, 
-  IconButton, 
-  Divider,
-  List,
-  ListItem,
-  ListItemAvatar,
-  ListItemText,
-  TextField,
-  InputAdornment,
-  Chip,
-  Badge,
-  Fab,
-  Paper,
-  MenuItem,
-  Container,
-  useMediaQuery,
-  useTheme,
-  CircularProgress,
-  Snackbar,
-  Alert
-} from '@mui/material';
-import { 
-  CameraAlt, 
-  Edit, 
-  Favorite, 
-  Bookmark, 
-  Share, 
-  MoreVert, 
-  LocationOn, 
-  Cake, 
-  Female, 
-  Male, 
-  Public, 
-  Add,
-  Search,
-  Notifications,
-  Person,
-  Collections,
-  Group,
-  ChevronLeft,
-  ChevronRight,
-  Close,
-  People
-} from '@mui/icons-material';
-import { createTheme, ThemeProvider } from '@mui/material/styles';
-import { Link, useNavigate } from 'react-router-dom';
-
-// 导入API服务
-import { 
-  getCurrentUser, 
-  getUser, 
-  updateUser as updateUserApi,
-  getFavorites,
-  followUser as followUserApi,
-  unfollowUser as unfollowUserApi,
-  getUserPosts,
-  getUserFollowing,
-  getUserInteractions,
-  getUserFollowers
-} from '../services/api';
-
-// 创建小红书主题
-const theme = createTheme({
-  palette: {
-    primary: {
-      main: '#ff4081',
-    },
-    secondary: {
-      main: '#f50057',
-    },
-    background: {
-      default: '#f5f5f5',
-    },
-  },
-  typography: {
-    fontFamily: '"PingFang SC", "Helvetica Neue", Arial, sans-serif',
-    h5: {
-      fontWeight: 600,
-    },
-    subtitle1: {
-      color: 'rgba(0, 0, 0, 0.6)',
-    },
-  },
-  components: {
-    MuiButton: {
-      styleOverrides: {
-        root: {
-          borderRadius: 20,
-          textTransform: 'none',
-          fontWeight: 500,
-        },
-      },
-    },
-    MuiCard: {
-      styleOverrides: {
-        root: {
-          borderRadius: 16,
-        },
-      },
-    },
-  },
-});
-
-const UserProfile = ({ userId }) => {
-  const theme = useTheme();
-  const isMobile = useMediaQuery(theme.breakpoints.down('sm'));
-  const navigate = useNavigate();
-  const [activeTab, setActiveTab] = useState(0);
-  const [isEditing, setIsEditing] = useState(false);
-  const [followers, setFollowers] = useState([]);
-  const [snackbar, setSnackbar] = useState({ open: false, message: '', severity: 'success' });
-  
-  // 用户数据状态
-  const [currentUser, setCurrentUser] = useState(null);
-  const [profileUser, setProfileUser] = useState(null);
-  const [favorites, setFavorites] = useState([]);
-  const [following, setFollowing] = useState([]);
-  const [posts, setPosts] = useState([]);
-  const [interactions, setInteractions] = useState({ 
-    likes_count: 0, 
-    favorites_count: 0 
-  });
-  
-  // 加载状态
-  const [loading, setLoading] = useState(true);
-  const [updating, setUpdating] = useState(false);
-  const [tabLoading, setTabLoading] = useState(false);
-  
-  // 表单状态
-  const [formData, setFormData] = useState({
-    avatar: '',
-    bio: '',
-    gender: 'female',
-    birthday: '1995-05-20',
-    location: '上海'
-  });
-
-  // 显示提示信息
-  const showSnackbar = (message, severity = 'success') => {
-    setSnackbar({ open: true, message, severity });
-  };
-
-  // 加载用户数据
-  useEffect(() => {
-    const fetchInteractions = async () => {
-    try {
-      const response = await getUserInteractions(userId);
-      if (response.data.success) {
-        setInteractions(response.data.data);
-      } else {
-        console.error(response.data.error);
-      }
-    } catch (error) {
-      console.error('获取互动数据失败:', error);
-    }
-  };
-  
-  fetchInteractions();
-
-    const handleFollowUser = async (followeeId) => {
-    try {
-      await followUserApi(followeeId);
-      showSnackbar('关注成功');
-      
-      // 更新粉丝列表状态（将刚关注的用户标记为已关注）
-      setFollowers(prev => prev.map(user => 
-        user.id === followeeId ? { ...user, is_following: true } : user
-      ));
-      
-      // 更新当前用户关注数
-      if (currentUser) {
-        setCurrentUser(prev => ({
-          ...prev,
-          following_count: prev.following_count + 1
-        }));
-      }
-      
-    } catch (error) {
-      console.error('关注操作失败:', error);
-      showSnackbar('关注失败，请重试', 'error');
-    }
-  };
-    const fetchData = async () => {
-      try {
-        setLoading(true);
-        
-        // 获取当前登录用户
-        const currentUserRes = await getCurrentUser();
-        setCurrentUser(currentUserRes.data);
-        
-        // 获取目标用户信息
-        const profileUserRes = await getUser(userId);
-        setProfileUser(profileUserRes.data);
-        setFormData({
-          avatar: profileUserRes.data.avatar || '',
-          bio: profileUserRes.data.bio || '',
-          gender: 'female',
-          birthday: '1995-05-20',
-          location: '上海'
-        });
-        
-        // 获取用户帖子
-        const postsRes = await getUserPosts(userId);
-        setPosts(postsRes.data);
-        
-        // 获取用户互动数据（获赞和收藏数量）
-        const interactionsRes = await getUserInteractions(userId);
-        setInteractions(interactionsRes.data);
-        
-      } catch (error) {
-        console.error('获取用户数据失败:', error);
-        showSnackbar('获取用户数据失败，请重试', 'error');
-      } finally {
-        setLoading(false);
-      }
-    };
-    
-    fetchData();
-  }, [userId]);
-
-  // 根据标签页加载数据
-  useEffect(() => {
-    const fetchTabData = async () => {
-      if (!profileUser) return;
-      
-      try {
-        setTabLoading(true);
-        
-        if (activeTab === 1) {
-          // 加载收藏数据
-          const favoritesRes = await getFavorites(userId);
-          setFavorites(favoritesRes.data);
-        } else if (activeTab === 2) {
-          // 加载关注列表
-          const followingRes = await getUserFollowing(userId);
-          setFollowing(followingRes.data);
-        }  else if (activeTab === 3) {
-          // 加载粉丝列表
-          const followersRes = await getUserFollowers(userId);
-          // 
-          setFollowers(followersRes.data);
-          console.log(followersRes.data)
-        }
-        
-      } catch (error) {
-        console.error('加载数据失败:', error);
-        showSnackbar('加载数据失败，请重试', 'error');
-      } finally {
-        setTabLoading(false);
-      }
-    };
-    
-    fetchTabData();
-  }, [activeTab, userId, profileUser]);
-
-  const handleTabChange = (event, newValue) => {
-    setActiveTab(newValue);
-  };
-
-  const handleFollowToggle = async () => {
-    if (!currentUser || !profileUser) return;
-    
-    try {
-      if (profileUser.is_following) {
-        await unfollowUserApi(profileUser.id);
-        showSnackbar('已取消关注');
-      } else {
-        await followUserApi(profileUser.id);
-        showSnackbar('关注成功');
-      }
-      
-      // 更新用户信息
-      const updatedUser = await getUser(userId);
-      setProfileUser(updatedUser.data);
-      
-    } catch (error) {
-      console.error('关注操作失败:', error);
-      showSnackbar('操作失败，请重试', 'error');
-    }
-  };
-
-  const handleFollowUser = async (followeeId) => {
-    try {
-      await followUserApi(followeeId);
-      showSnackbar('关注成功');
-      
-      // 更新粉丝列表状态
-      setFollowers(prev => prev.map(user => 
-        user.id === followeeId ? {...user, is_following: true} : user
-      ));
-      
-      // 更新当前用户关注数
-      if (currentUser) {
-        setCurrentUser(prev => ({
-          ...prev,
-          following_count: prev.following_count + 1
-        }));
-      }
-      
-    } catch (error) {
-      console.error('关注操作失败:', error);
-      showSnackbar('关注失败，请重试', 'error');
-    }
-  };
-
-  const handleUnfollow = async (followeeId, e) => {
-    e.stopPropagation(); // 阻止事件冒泡
-    
-    try {
-      await unfollowUserApi(followeeId);
-      showSnackbar('已取消关注');
-      
-      // 更新关注列表
-      setFollowing(prev => prev.filter(user => user.id !== followeeId));
-      
-      // 更新当前用户关注数
-      if (currentUser) {
-        setCurrentUser(prev => ({
-          ...prev,
-          following_count: prev.following_count - 1
-        }));
-      }
-      
-      // 更新目标用户粉丝数
-      setProfileUser(prev => ({
-        ...prev,
-        followers_count: prev.followers_count - 1
-      }));
-      
-    } catch (error) {
-      console.error('取消关注失败:', error);
-      showSnackbar('操作失败，请重试', 'error');
-    }
-  };
-
-  const handleFormChange = (e) => {
-    const { name, value } = e.target;
-    setFormData({ ...formData, [name]: value });
-  };
-
-  const handleUpdateProfile = async () => {
-    if (!profileUser) return;
-    
-    try {
-      setUpdating(true);
-      const data = { 
-        avatar: formData.avatar,
-        bio: formData.bio
-      };
-      
-      // 调用更新API
-      const updatedUser = await updateUserApi(profileUser.id, data);
-      
-      // 更新本地状态
-      setProfileUser({ ...profileUser, ...updatedUser.data });
-      setFormData({ ...formData, ...data });
-      
-      showSnackbar('个人资料更新成功');
-      setIsEditing(false);
-      
-    } catch (error) {
-      console.error('更新个人资料失败:', error);
-      showSnackbar('更新失败，请重试', 'error');
-    } finally {
-      setUpdating(false);
-    }
-  };
-
-  const navigateToUserProfile = (userId) => {
-    navigate(`/user/${userId}`);
-  };
-
-  if (loading) {
-    return (
-      <Box sx={{ 
-        display: 'flex', 
-        justifyContent: 'center', 
-        alignItems: 'center', 
-        height: '100vh' 
-      }}>
-        <CircularProgress size={60} />
-      </Box>
-    );
-  }
-
-  if (!profileUser) {
-    return (
-      <Box sx={{ 
-        display: 'flex', 
-        justifyContent: 'center', 
-        alignItems: 'center', 
-        height: '100vh',
-        flexDirection: 'column'
-      }}>
-        <Typography variant="h6" sx={{ mb: 2 }}>用户不存在</Typography>
-        <Button variant="outlined" onClick={() => window.location.reload()}>
-          重新加载
-        </Button>
-      </Box>
-    );
-  }
-
-  const isOwnProfile = currentUser && currentUser.id === parseInt(userId);
-
-  return (
-    <ThemeProvider theme={theme}>
-      <Box sx={{ 
-        bgcolor: 'background.default', 
-        minHeight: '100vh', 
-        pb: isMobile ? 8 : 4 
-      }}>
-        {/* 顶部横幅 */}
-        <Box sx={{
-          height: isMobile ? 200 : 250,
-          background: 'linear-gradient(135deg, #ff9a9e 0%, #fad0c4 100%)',
-          position: 'relative',
-          borderBottomLeftRadius: 24,
-          borderBottomRightRadius: 24,
-          boxShadow: 1
-        }}>
-          <Fab 
-            color="primary" 
-            size="small" 
-            sx={{ 
-              position: 'absolute', 
-              bottom: -20, 
-              right: 16 
-            }}
-          >
-            <CameraAlt />
-          </Fab>
-        </Box>
-
-        <Container maxWidth="lg">
-          {/* 用户信息区域 */}
-          <Box sx={{ px: isMobile ? 3 : 0, mt: -8, position: 'relative' }}>
-            <Grid container spacing={3}>
-              <Grid item xs={12} sm="auto">
-                <Badge
-                  overlap="circular"
-                  anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}
-                  badgeContent={
-                    <IconButton 
-                      size="small" 
-                      sx={{ 
-                        bgcolor: 'grey.200', 
-                        '&:hover': { bgcolor: 'grey.300' } 
-                      }}
-                      onClick={() => setIsEditing(true)}
-                      disabled={!isOwnProfile}
-                    >
-                      <Edit fontSize="small" />
-                    </IconButton>
-                  }
-                >
-                  <Avatar
-                    sx={{ 
-                      width: 120, 
-                      height: 120, 
-                      border: '4px solid white',
-                      boxShadow: 3
-                    }}
-                    src={profileUser.avatar || 'https://randomuser.me/api/portraits/women/12.jpg'}
-                  />
-                </Badge>
-              </Grid>
-              
-              <Grid item xs={12} sm>
-                <Box sx={{ display: 'flex', justifyContent: 'space-between', flexDirection: isMobile ? 'column' : 'row' }}>
-                  <Box>
-                    <Typography variant="h5" fontWeight="bold">
-                      {profileUser.username}
-                    </Typography>
-                    <Typography variant="subtitle1" sx={{ mt: 0.5, maxWidth: 600 }}>
-                      {profileUser.bio || '这个人很懒，还没有写简介～'}
-                    </Typography>
-                    <Box sx={{ display: 'flex', mt: 1, gap: 1, flexWrap: 'wrap' }}>
-                      <Chip 
-                        icon={<LocationOn fontSize="small" />} 
-                        label="上海" 
-                        size="small" 
-                        variant="outlined" 
-                      />
-                      <Chip 
-                        icon={<Cake fontSize="small" />} 
-                        label="1995-05-20" 
-                        size="small" 
-                        variant="outlined" 
-                      />
-                      <Chip 
-                        icon={<Female fontSize="small" />} 
-                        label="女" 
-                        size="small" 
-                        variant="outlined" 
-                      />
-                    </Box>
-                  </Box>
-                  
-                  <Box sx={{ mt: isMobile ? 2 : 0, alignSelf: 'flex-start' }}>
-                    {!isOwnProfile && currentUser && (
-                      <>
-                        <Button
-                          variant={profileUser.is_following ? "outlined" : "contained"}
-                          color="primary"
-                          onClick={handleFollowToggle}
-                          sx={{ 
-                            borderRadius: 20, 
-                            px: 3, 
-                            fontWeight: 'bold' 
-                          }}
-                        >
-                          {profileUser.is_following ? '已关注' : '关注'}
-                        </Button>
-                        <IconButton sx={{ ml: 1 }}>
-                          <MoreVert />
-                        </IconButton>
-                      </>
-                    )}
-                  </Box>
-                </Box>
-                
-                <Grid container spacing={2} sx={{ mt: 2 }}>
-                  <Grid item>
-                    <Box textAlign="center">
-                      <Typography variant="h6">{posts.length}</Typography>
-                      <Typography variant="body2" color="textSecondary">笔记</Typography>
-                    </Box>
-                  </Grid>
-                  <Grid item>
-                    <Box textAlign="center">
-                      <Typography variant="h6">{profileUser.followers_count || 0}</Typography>
-                      <Typography variant="body2" color="textSecondary">粉丝</Typography>
-                    </Box>
-                  </Grid>
-                  <Grid item>
-                    <Box textAlign="center">
-                      <Typography variant="h6">{profileUser.following_count || 0}</Typography>
-                      <Typography variant="body2" color="textSecondary">关注</Typography>
-                    </Box>
-                  </Grid>
-                  <Grid item>
-                    <Box textAlign="center">
-                      {/* 使用真实数据：获赞与收藏总数 */}
-                      <Typography variant="h6">
-                        {(interactions.likes_count + interactions.favorites_count).toLocaleString()}
-                      </Typography>
-                      <Typography variant="body2" color="textSecondary">获赞与收藏</Typography>
-                    </Box>
-                  </Grid>
-                </Grid>
-              </Grid>
-            </Grid>
-          </Box>
-
-          {/* 标签栏 */}
-          <Box sx={{ mt: 4 }}>
-            <Tabs 
-              value={activeTab} 
-              onChange={handleTabChange}
-              variant={isMobile ? "fullWidth" : "standard"}
-              indicatorColor="primary"
-              textColor="primary"
-              sx={{
-                borderBottom: 1,
-                borderColor: 'divider'
-              }}
-            >
-              <Tab icon={isMobile ? <Collections /> : null} label="笔记" />
-              <Tab icon={isMobile ? <Bookmark /> : null} label="收藏" />
-              <Tab icon={isMobile ? <Group /> : null} label="关注" />
-              <Tab icon={isMobile ? <People /> : null} label="粉丝" />
-            </Tabs>
-          </Box>
-
-          {/* 内容区域 */}
-          <Box sx={{ mt: 3 }}>
-            {activeTab === 0 && (
-              <Grid container spacing={3}>
-                {tabLoading ? (
-                  <Grid item xs={12} sx={{ display: 'flex', justifyContent: 'center', py: 4 }}>
-                    <CircularProgress />
-                  </Grid>
-                ) : posts.length > 0 ? (
-                  posts.map((post, index) => (
-                    <Grid item xs={12} sm={6} lg={3} key={post.id}>
-                      <Card elevation={0} sx={{ 
-                        bgcolor: 'white', 
-                        borderRadius: 3,
-                        height: '100%',
-                        display: 'flex',
-                        flexDirection: 'column'
-                      }}>
-                        <CardMedia
-                          component="img"
-                          height="180"
-                          image={`https://source.unsplash.com/random/400x300?${index + 1}`}
-                          alt={post.title}
-                        />
-                        <CardContent sx={{ flexGrow: 1 }}>
-                          <Typography gutterBottom variant="h6" component="div">
-                            {post.title}
-                          </Typography>
-                          <Typography variant="body2" color="text.secondary">
-                            {post.content.substring(0, 60)}...
-                          </Typography>
-                        </CardContent>
-                        <CardActions sx={{ justifyContent: 'space-between', px: 2, pb: 2 }}>
-                          <Box>
-                            <IconButton aria-label="add to favorites">
-                              <Favorite />
-                              <Typography variant="body2" sx={{ ml: 1 }}>
-                                {post.heat || Math.floor(Math.random() * 1000) + 1000}
-                              </Typography>
-                            </IconButton>
-                            <IconButton aria-label="share">
-                              <Share />
-                            </IconButton>
-                          </Box>
-                          <Chip 
-                            label={post.type === 'image' ? '图文' : post.type === 'video' ? '视频' : '文档'} 
-                            size="small" 
-                            color="primary" 
-                            variant="outlined" 
-                          />
-                        </CardActions>
-                      </Card>
-                    </Grid>
-                  ))
-                ) : (
-                  <Grid item xs={12}>
-                    <Box sx={{ 
-                      display: 'flex', 
-                      flexDirection: 'column', 
-                      alignItems: 'center', 
-                      py: 8,
-                      textAlign: 'center'
-                    }}>
-                      <Collections sx={{ fontSize: 60, color: 'grey.300', mb: 2 }} />
-                      <Typography variant="h6" sx={{ mb: 1 }}>
-                        还没有发布笔记
-                      </Typography>
-                      <Typography variant="body1" color="textSecondary" sx={{ mb: 3 }}>
-                        {isOwnProfile ? '分享你的生活点滴吧～' : '该用户还没有发布任何笔记'}
-                      </Typography>
-                      {isOwnProfile && (
-                        <Button variant="contained" color="primary">
-                          发布第一篇笔记
-                        </Button>
-                      )}
-                    </Box>
-                  </Grid>
-                )}
-                
-                {posts.length > 0 && (
-                  <Grid item xs={12}>
-                    <Box sx={{ display: 'flex', justifyContent: 'center', mt: 3 }}>
-                      <Button 
-                        variant="outlined" 
-                        sx={{ 
-                          borderRadius: 20, 
-                          px: 4,
-                          display: 'flex',
-                          alignItems: 'center'
-                        }}
-                      >
-                        <ChevronLeft sx={{ mr: 1 }} />
-                        上一页
-                        <ChevronRight sx={{ ml: 2 }} />
-                      </Button>
-                    </Box>
-                  </Grid>
-                )}
-              </Grid>
-            )}
-            
-            {activeTab === 1 && (
-              <Grid container spacing={3}>
-                {tabLoading ? (
-                  <Grid item xs={12} sx={{ display: 'flex', justifyContent: 'center', py: 4 }}>
-                    <CircularProgress />
-                  </Grid>
-                ) : favorites.length > 0 ? (
-                  favorites.map((favorite) => (
-                    <Grid item xs={12} sm={6} md={4} lg={3} key={favorite.id}>
-                      <Card elevation={0} sx={{ 
-                        bgcolor: 'white', 
-                        borderRadius: 3,
-                        transition: 'transform 0.3s, box-shadow 0.3s',
-                        '&:hover': {
-                          transform: 'translateY(-5px)',
-                          boxShadow: 3
-                        }
-                      }}>
-                        <Box sx={{ 
-                          height: 160, 
-                          position: 'relative',
-                          borderTopLeftRadius: 16,
-                          borderTopRightRadius: 16,
-                          overflow: 'hidden'
-                        }}>
-                          <CardMedia
-                            component="img"
-                            height="160"
-                            image={`https://source.unsplash.com/random/400x300?${favorite.id}`}
-                            alt={favorite.title}
-                          />
-                          <Box sx={{
-                            position: 'absolute',
-                            top: 8,
-                            right: 8,
-                            bgcolor: 'rgba(0,0,0,0.6)',
-                            color: 'white',
-                            px: 1,
-                            py: 0.5,
-                            borderRadius: 4,
-                            fontSize: 12
-                          }}>
-                            {favorite.type === 'image' ? '图文' : favorite.type === 'video' ? '视频' : '文档'}
-                          </Box>
-                        </Box>
-                        <CardContent>
-                          <Typography gutterBottom variant="subtitle1" fontWeight="medium">
-                            {favorite.title}
-                          </Typography>
-                          <Box sx={{ display: 'flex', justifyContent: 'space-between' }}>
-                            <Box sx={{ display: 'flex', alignItems: 'center' }}>
-                              <Favorite fontSize="small" color="error" />
-                              <Typography variant="body2" sx={{ ml: 0.5 }}>
-                                {favorite.heat || Math.floor(Math.random() * 1000) + 1000}
-                              </Typography>
-                            </Box>
-                            <Box sx={{ display: 'flex', alignItems: 'center' }}>
-                              <Bookmark fontSize="small" color="primary" />
-                              <Typography variant="body2" sx={{ ml: 0.5 }}>
-                                {Math.floor(Math.random() * 500) + 100}
-                              </Typography>
-                            </Box>
-                          </Box>
-                        </CardContent>
-                      </Card>
-                    </Grid>
-                  ))
-                ) : (
-                  <Grid item xs={12}>
-                    <Box sx={{ 
-                      display: 'flex', 
-                      flexDirection: 'column', 
-                      alignItems: 'center', 
-                      py: 8,
-                      textAlign: 'center'
-                    }}>
-                      <Bookmark sx={{ fontSize: 60, color: 'grey.300', mb: 2 }} />
-                      <Typography variant="h6" sx={{ mb: 1 }}>
-                        {isOwnProfile ? '你还没有收藏内容' : '该用户没有收藏内容'}
-                      </Typography>
-                      <Typography variant="body1" color="textSecondary">
-                        {isOwnProfile ? '看到喜欢的笔记可以收藏起来哦～' : ''}
-                      </Typography>
-                    </Box>
-                  </Grid>
-                )}
-              </Grid>
-            )}
-            
-            {activeTab === 2 && (
-              <Grid container spacing={3}>
-                {tabLoading ? (
-                  <Grid item xs={12} sx={{ display: 'flex', justifyContent: 'center', py: 4 }}>
-                    <CircularProgress />
-                  </Grid>
-                ) : following.length > 0 ? (
-                  following.map((follow) => (
-                    <Grid item xs={12} sm={6} md={4} key={follow.id}>
-                      <Paper 
-                        elevation={0} 
-                        sx={{ 
-                          bgcolor: 'white', 
-                          borderRadius: 3,
-                          p: 2,
-                          display: 'flex',
-                          alignItems: 'center',
-                          cursor: 'pointer',
-                          '&:hover': {
-                            boxShadow: 1
-                          }
-                        }}
-                        onClick={() => navigateToUserProfile(follow.id)}
-                      >
-                        <Avatar 
-                          src={follow.avatar || 'https://randomuser.me/api/portraits/men/22.jpg'} 
-                          sx={{ width: 60, height: 60 }} 
-                        />
-                        <Box sx={{ ml: 2, flexGrow: 1 }}>
-                          <Typography fontWeight="medium">{follow.username}</Typography>
-                          <Typography variant="body2" color="textSecondary">
-                            {follow.followers_count || Math.floor(Math.random() * 100) + 10} 粉丝
-                          </Typography>
-                        </Box>
-                        {isOwnProfile && (
-                          <Button 
-                            variant="outlined" 
-                            size="small"
-                            sx={{ borderRadius: 20 }}
-                            onClick={(e) => handleUnfollow(follow.id, e)}
-                          >
-                            已关注
-                          </Button>
-                        )}
-                      </Paper>
-                    </Grid>
-                  ))
-                ) : (
-                  <Grid item xs={12}>
-                    <Box sx={{ 
-                      display: 'flex', 
-                      flexDirection: 'column', 
-                      alignItems: 'center', 
-                      py: 8,
-                      textAlign: 'center'
-                    }}>
-                      <Group sx={{ fontSize: 60, color: 'grey.300', mb: 2 }} />
-                      <Typography variant="h6" sx={{ mb: 1 }}>
-                        {isOwnProfile ? '你还没有关注任何人' : '该用户还没有关注任何人'}
-                      </Typography>
-                      <Typography variant="body1" color="textSecondary">
-                        {isOwnProfile ? '发现有趣的人并关注他们吧～' : ''}
-                      </Typography>
-                    </Box>
-                  </Grid>
-                )}
-              </Grid>
-            )}
-            {activeTab === 3 && (
-              <Grid container spacing={3}>
-                {tabLoading ? (
-                  <Grid item xs={12} sx={{ display: 'flex', justifyContent: 'center', py: 4 }}>
-                    <CircularProgress />
-                  </Grid>
-                ) : followers.length > 0 ? (
-                  followers.map((follower) => (
-                    <Grid item xs={12} sm={6} md={4} key={follower.id}>
-                      <Paper 
-                        elevation={0} 
-                        sx={{ 
-                          bgcolor: 'white', 
-                          borderRadius: 3,
-                          p: 2,
-                          display: 'flex',
-                          alignItems: 'center',
-                          cursor: 'pointer',
-                          '&:hover': {
-                            boxShadow: 1
-                          }
-                        }}
-                        onClick={() => navigateToUserProfile(follower.id)}
-                      >
-                        <Avatar 
-                          src={follower.avatar || 'https://randomuser.me/api/portraits/men/22.jpg'} 
-                          sx={{ width: 60, height: 60 }} 
-                        />
-                        <Box sx={{ ml: 2, flexGrow: 1 }}>
-                          <Typography fontWeight="medium">{follower.username}</Typography>
-                          <Typography variant="body2" color="textSecondary">
-                            {follower.bio || '暂无简介'}
-                          </Typography>
-                        </Box>
-                        {currentUser && currentUser.id !== follower.id && (
-                          <Button 
-                            variant={follower.is_following ? "outlined" : "contained"}
-                            color="primary"
-                            size="small"
-                            sx={{ borderRadius: 20 }}
-                            onClick={(e) => {
-                              e.stopPropagation();
-                              if (follower.is_following) {
-                                handleUnfollow(follower.id, e);
-                              } else {
-                                handleFollowUser(follower.id);
-                              }
-                            }}
-                          >
-                            {follower.is_following ? '已关注' : '关注'}
-                          </Button>
-                        )}
-                      </Paper>
-                    </Grid>
-                  ))
-                ) : (
-                  <Grid item xs={12}>
-                    <Box sx={{ 
-                      display: 'flex', 
-                      flexDirection: 'column', 
-                      alignItems: 'center', 
-                      py: 8,
-                      textAlign: 'center'
-                    }}>
-                      <People sx={{ fontSize: 60, color: 'grey.300', mb: 2 }} />
-                      <Typography variant="h6" sx={{ mb: 1 }}>
-                        {isOwnProfile ? '你还没有粉丝' : '该用户还没有粉丝'}
-                      </Typography>
-                      <Typography variant="body1" color="textSecondary">
-                        {isOwnProfile ? '分享更多内容来吸引粉丝吧～' : ''}
-                      </Typography>
-                    </Box>
-                  </Grid>
-                )}
-              </Grid>
-            )}
-          </Box>
-        </Container>
-
-        {/* 底部导航栏 - 仅移动端显示 */}
-        {isMobile && (
-          <Box sx={{
-            position: 'fixed',
-            bottom: 0,
-            left: 0,
-            right: 0,
-            bgcolor: 'white',
-            boxShadow: 3,
-            py: 1,
-            display: 'flex',
-            justifyContent: 'space-around'
-          }}>
-            <IconButton color="primary">
-              <Search fontSize="large" />
-            </IconButton>
-            <IconButton>
-              <Collections fontSize="large" />
-            </IconButton>
-            <Fab color="primary" size="medium" sx={{ mt: -2 }}>
-              <Add />
-            </Fab>
-            <IconButton>
-              <Notifications fontSize="large" />
-            </IconButton>
-            <IconButton>
-              <Person fontSize="large" />
-            </IconButton>
-          </Box>
-        )}
-
-        {/* 编辑资料模态框 */}
-        {isEditing && (
-          <Box sx={{
-            position: 'fixed',
-            top: 0,
-            left: 0,
-            right: 0,
-            bottom: 0,
-            bgcolor: 'rgba(0,0,0,0.5)',
-            zIndex: 1300,
-            display: 'flex',
-            alignItems: 'center',
-            justifyContent: 'center',
-            px: 2
-          }}>
-            <Paper sx={{ 
-              width: '100%', 
-              maxWidth: 600, 
-              borderRadius: 4,
-              overflow: 'hidden'
-            }}>
-              <Box sx={{ 
-                bgcolor: 'primary.main', 
-                color: 'white', 
-                p: 2,
-                display: 'flex',
-                justifyContent: 'space-between',
-                alignItems: 'center'
-              }}>
-                <Typography variant="h6">编辑资料</Typography>
-                <IconButton color="inherit" onClick={() => setIsEditing(false)}>
-                  <Close />
-                </IconButton>
-              </Box>
-              
-              <Box sx={{ p: 3 }}>
-                <Box sx={{ display: 'flex', justifyContent: 'center', mb: 3 }}>
-                  <Badge
-                    overlap="circular"
-                    anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}
-                    badgeContent={
-                      <IconButton 
-                        size="small" 
-                        sx={{ 
-                          bgcolor: 'grey.200',
-                          '&:hover': { bgcolor: 'grey.300' }
-                        }}
-                      >
-                        <CameraAlt fontSize="small" />
-                      </IconButton>
-                    }
-                  >
-                    <Avatar
-                      sx={{ width: 100, height: 100 }}
-                      src={formData.avatar || 'https://randomuser.me/api/portraits/women/12.jpg'}
-                    />
-                  </Badge>
-                </Box>
-                
-                <TextField
-                  fullWidth
-                  label="用户名"
-                  value={profileUser.username}
-                  margin="normal"
-                  disabled
-                />
-                
-                <TextField
-                  fullWidth
-                  name="avatar"
-                  label="头像URL"
-                  value={formData.avatar}
-                  onChange={handleFormChange}
-                  margin="normal"
-                />
-                
-                <TextField
-                  fullWidth
-                  name="bio"
-                  label="个人简介"
-                  value={formData.bio}
-                  onChange={handleFormChange}
-                  margin="normal"
-                  multiline
-                  rows={3}
-                />
-                
-                <Grid container spacing={2} sx={{ mt: 1 }}>
-                  <Grid item xs={6}>
-                    <TextField
-                      select
-                      fullWidth
-                      name="gender"
-                      label="性别"
-                      value={formData.gender}
-                      onChange={handleFormChange}
-                      margin="normal"
-                    >
-                      <MenuItem value="female">
-                        <Box sx={{ display: 'flex', alignItems: 'center' }}>
-                          <Female sx={{ mr: 1 }} /> 女
-                        </Box>
-                      </MenuItem>
-                      <MenuItem value="male">
-                        <Box sx={{ display: 'flex', alignItems: 'center' }}>
-                          <Male sx={{ mr: 1 }} /> 男
-                        </Box>
-                      </MenuItem>
-                      <MenuItem value="other">
-                        <Box sx={{ display: 'flex', alignItems: 'center' }}>
-                          <Public sx={{ mr: 1 }} /> 其他
-                        </Box>
-                      </MenuItem>
-                    </TextField>
-                  </Grid>
-                  <Grid item xs={6}>
-                    <TextField
-                      fullWidth
-                      name="birthday"
-                      label="生日"
-                      type="date"
-                      value={formData.birthday}
-                      onChange={handleFormChange}
-                      margin="normal"
-                      InputLabelProps={{ shrink: true }}
-                    />
-                  </Grid>
-                </Grid>
-                
-                <TextField
-                  fullWidth
-                  name="location"
-                  label="地区"
-                  value={formData.location}
-                  onChange={handleFormChange}
-                  margin="normal"
-                  InputProps={{
-                    startAdornment: (
-                      <InputAdornment position="start">
-                        <LocationOn />
-                      </InputAdornment>
-                    ),
-                  }}
-                />
-                
-                <Box sx={{ display: 'flex', justifyContent: 'space-between', mt: 3 }}>
-                  <Button 
-                    variant="outlined" 
-                    sx={{ width: '48%' }}
-                    onClick={() => setIsEditing(false)}
-                    disabled={updating}
-                  >
-                    取消
-                  </Button>
-                  <Button 
-                    variant="contained" 
-                    color="primary" 
-                    sx={{ width: '48%' }}
-                    onClick={handleUpdateProfile}
-                    disabled={updating}
-                  >
-                    {updating ? <CircularProgress size={24} /> : '保存'}
-                  </Button>
-                </Box>
-              </Box>
-            </Paper>
-          </Box>
-        )}
-
-        {/* 提示信息 */}
-        <Snackbar
-          open={snackbar.open}
-          autoHideDuration={3000}
-          onClose={() => setSnackbar({ ...snackbar, open: false })}
-          anchorOrigin={{ vertical: 'top', horizontal: 'center' }}
-        >
-          <Alert 
-            severity={snackbar.severity} 
-            sx={{ width: '100%' }}
-            onClose={() => setSnackbar({ ...snackbar, open: false })}
-          >
-            {snackbar.message}
-          </Alert>
-        </Snackbar>
-      </Box>
-    </ThemeProvider>
-  );
-};
-
-export default UserProfile;
\ No newline at end of file
diff --git a/xiaohongshu-upload-platform/src/ljc/personalpage/src/index.css b/xiaohongshu-upload-platform/src/ljc/personalpage/src/index.css
deleted file mode 100644
index ec2585e..0000000
--- a/xiaohongshu-upload-platform/src/ljc/personalpage/src/index.css
+++ /dev/null
@@ -1,13 +0,0 @@
-body {
-  margin: 0;
-  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
-    'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
-    sans-serif;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-}
-
-code {
-  font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
-    monospace;
-}
diff --git a/xiaohongshu-upload-platform/src/ljc/personalpage/src/index.js b/xiaohongshu-upload-platform/src/ljc/personalpage/src/index.js
deleted file mode 100644
index d563c0f..0000000
--- a/xiaohongshu-upload-platform/src/ljc/personalpage/src/index.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import React from 'react';
-import ReactDOM from 'react-dom/client';
-import './index.css';
-import App from './App';
-import reportWebVitals from './reportWebVitals';
-
-const root = ReactDOM.createRoot(document.getElementById('root'));
-root.render(
-  <React.StrictMode>
-    <App />
-  </React.StrictMode>
-);
-
-// If you want to start measuring performance in your app, pass a function
-// to log results (for example: reportWebVitals(console.log))
-// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
-reportWebVitals();
diff --git a/xiaohongshu-upload-platform/src/ljc/personalpage/src/logo.svg b/xiaohongshu-upload-platform/src/ljc/personalpage/src/logo.svg
deleted file mode 100644
index 9dfc1c0..0000000
--- a/xiaohongshu-upload-platform/src/ljc/personalpage/src/logo.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 841.9 595.3"><g fill="#61DAFB"><path d="M666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9V78c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6V78.5c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zM421.2 430c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24 4.7 8 9.5 15.8 14.4 23.4zM420.7 163c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6 0-15.7 22.9-35.6 58.3-50.6 8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zM310 490c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6zM320.8 78.4z"/><circle cx="420.9" cy="296.5" r="45.7"/><path d="M520.5 78.1z"/></g></svg>
\ No newline at end of file
diff --git a/xiaohongshu-upload-platform/src/ljc/personalpage/src/reportWebVitals.js b/xiaohongshu-upload-platform/src/ljc/personalpage/src/reportWebVitals.js
deleted file mode 100644
index 5253d3a..0000000
--- a/xiaohongshu-upload-platform/src/ljc/personalpage/src/reportWebVitals.js
+++ /dev/null
@@ -1,13 +0,0 @@
-const reportWebVitals = onPerfEntry => {
-  if (onPerfEntry && onPerfEntry instanceof Function) {
-    import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
-      getCLS(onPerfEntry);
-      getFID(onPerfEntry);
-      getFCP(onPerfEntry);
-      getLCP(onPerfEntry);
-      getTTFB(onPerfEntry);
-    });
-  }
-};
-
-export default reportWebVitals;
diff --git a/xiaohongshu-upload-platform/src/ljc/personalpage/src/services/api.js b/xiaohongshu-upload-platform/src/ljc/personalpage/src/services/api.js
deleted file mode 100644
index a3ca1d1..0000000
--- a/xiaohongshu-upload-platform/src/ljc/personalpage/src/services/api.js
+++ /dev/null
@@ -1,31 +0,0 @@
-import axios from 'axios';
-
-const api = axios.create({
-  baseURL: 'http://localhost:5000/api',
-  withCredentials: true
-});
-
-// 用户相关API
-export const getCurrentUser = () => api.get('/current-user');
-export const getUser = (userId) => api.get(`/user/${userId}`);
-export const updateUser = (userId, data) => api.put(`/user/${userId}`, data);
-
-// 收藏相关API
-export const getFavorites = (userId) => api.get(`/user/${userId}/favorites`);
-
-// 关注相关API
-export const followUser = (followeeId) => api.post(`/follow/${followeeId}`);
-export const unfollowUser = (followeeId) => api.delete(`/follow/${followeeId}`);
-
-// 帖子相关API
-export const getUserPosts = (userId) => api.get(`/user/${userId}/posts`);
-
-// 关注列表API
-export const getUserFollowing = (userId) => api.get(`/user/${userId}/following`);
-
-// 用户互动数据API
-export const getUserInteractions = (userId) => api.get(`/user/${userId}/interactions`);
-// 获取粉丝
-export const getUserFollowers = (userId) => api.get(`/user/${userId}/followers`);
-
-export default api;
\ No newline at end of file
diff --git a/xiaohongshu-upload-platform/src/ljc/personalpage/src/setupTests.js b/xiaohongshu-upload-platform/src/ljc/personalpage/src/setupTests.js
deleted file mode 100644
index 8f2609b..0000000
--- a/xiaohongshu-upload-platform/src/ljc/personalpage/src/setupTests.js
+++ /dev/null
@@ -1,5 +0,0 @@
-// jest-dom adds custom jest matchers for asserting on DOM nodes.
-// allows you to do things like:
-// expect(element).toHaveTextContent(/react/i)
-// learn more: https://github.com/testing-library/jest-dom
-import '@testing-library/jest-dom';
diff --git a/xiaohongshu-upload-platform/src/main.jsx b/xiaohongshu-upload-platform/src/main.jsx
deleted file mode 100644
index b9a1a6d..0000000
--- a/xiaohongshu-upload-platform/src/main.jsx
+++ /dev/null
@@ -1,10 +0,0 @@
-import { StrictMode } from 'react'
-import { createRoot } from 'react-dom/client'
-import './index.css'
-import App from './App.jsx'
-
-createRoot(document.getElementById('root')).render(
-  <StrictMode>
-    <App />
-  </StrictMode>,
-)
diff --git a/xiaohongshu-upload-platform/vite.config.js b/xiaohongshu-upload-platform/vite.config.js
deleted file mode 100644
index 8b0f57b..0000000
--- a/xiaohongshu-upload-platform/vite.config.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import { defineConfig } from 'vite'
-import react from '@vitejs/plugin-react'
-
-// https://vite.dev/config/
-export default defineConfig({
-  plugins: [react()],
-})
