diff --git a/src/components/Dashboard.jsx b/src/components/Dashboard.jsx
index f8f5dd3..40bd19d 100644
--- a/src/components/Dashboard.jsx
+++ b/src/components/Dashboard.jsx
@@ -1,9 +1,13 @@
 import React, {useEffect, useState} from 'react';
 import {useNavigate, useLocation, useParams} from 'react-router-dom';  
-import {createTorrent, getTorrents, searchTorrents} from '../api/torrent';
+import {createTorrent, getTorrents, downloadTorrent, getDownloadProgress, deleteTorrent, searchTorrents} from '../api/torrent';
 import './Dashboard.css';
-import {createPost, getPosts, getPostDetail, searchPosts} from '../api/helpPost';
-import { getUserInfo, isAdmin } from '../api/auth';
+import {createHelpPost, getHelpPosts, getHelpPostDetail, searchHelpPosts} from '../api/helpPost';
+import {createRequestPost, getRequestPosts, getRequestPostDetail, searchRequestPosts} from '../api/requestPost';
+import { message } from 'antd'; // 用于显示提示消息
+import { getAnnouncements,getLatestAnnouncements,getAnnouncementDetail } from '../api/announcement'; 
+import { getAllDiscounts } from '../api/administer'; 
+   import { getUserInfo, isAdmin } from '../api/auth';
 import { api } from '../api/auth'; 
 
 
@@ -36,6 +40,11 @@
     const [currentPage, setCurrentPage] = useState(1);
     const [totalPages, setTotalPages] = useState(1);
     const [likedPosts,setLikedPosts] = useState({});
+    const [announcements, setAnnouncements] = useState([]);
+    const [carouselDiscounts, setCarouselDiscounts] = useState([]);
+    const [requestLoading, setRequestLoading] = useState(false);
+    const [requestError, setRequestError] = useState(null);
+    const [requestPosts, setRequestPosts] = useState([]);
 
 
     // 添加状态
@@ -46,6 +55,13 @@
     const [filteredResources, setFilteredResources] = useState(torrentPosts);
     const [isAdmin, setIsAdmin] = useState(false);
 
+    // 在组件状态中添加
+    const [showDownloadModal, setShowDownloadModal] = useState(false);
+    const [selectedTorrent, setSelectedTorrent] = useState(null);
+    const [downloadProgress, setDownloadProgress] = useState(0);
+    const [isDownloading, setIsDownloading] = useState(false);
+    const [downloadPath, setDownloadPath] = useState('D:/studies/ptPlatform/torrent');
+
     // 新增搜索状态
     const [announcementSearch, setAnnouncementSearch] = useState('');
     const [shareSearch, setShareSearch] = useState('');
@@ -66,150 +82,54 @@
         });
     };
 
-    //公告区
-    const [announcements] = useState([
-        {
-            id: 1,
-            title: '系统维护与更新',
-            content: '2023-10-15 02:00-06:00将进行系统维护升级，期间网站将无法访问。本次更新包含：\n1. 数据库服务器迁移\n2. 安全补丁更新\n3. CDN节点优化\n\n请提前做好下载安排。',
-            author: '系统管理员',
-            date: '2023-10-10',
-            excerpt: '2023-10-15 02:00-06:00将进行系统维护，期间无法访问',
-            category: '系统'
-        },
-        {
-            id: 2,
-            title: '资源上新',
-            content: '最新热门电影《奥本海默》4K REMUX资源已上线，包含：\n- 4K HDR版本 (56.8GB)\n- 1080P标准版 (12.3GB)\n- 中英双语字幕\n\n欢迎下载保种！',
-            author: '资源组',
-            date: '2023-10-08',
-            excerpt: '最新热门电影《奥本海默》4K资源已上线',
-            category: '资源'
-        },
-        {
-            id: 3,
-            title: '积分规则调整',
-            content: '自11月1日起，上传资源积分奖励提升20%，具体规则如下：\n- 上传电影资源：每GB 10积分\n- 上传电视剧资源：每GB 8积分\n- 上传动漫资源：每GB 6积分\n\n感谢大家的支持与贡献！',
-            author: '管理员',
-            date: '2023-10-05',
-            excerpt: '自11月1日起，上传资源积分奖励提升20%',
-            category: '公告'
-        },
-        {
-            id: 4,
-            title: '违规处理公告',
-            content: '用户user123因发布虚假资源已被封禁，相关资源已删除。请大家遵守社区规则，维护良好的分享环境。',
-            author: '管理员',
-            date: '2023-10-03',
-            excerpt: '用户user123因发布虚假资源已被封禁',
-            category: '违规'
-        },
-        {
-            id: 5,
-            title: '节日活动',
-            content: '国庆期间所有资源下载积分减半，活动时间：2023年10月1日至2023年10月7日。',
-            author: '活动组',
-            date: '2023-09-30',
-            excerpt: '国庆期间所有资源下载积分减半',
-            category: '活动'
-        },
-        {
-            id: 6,
-            title: '客户端更新',
-            content: 'PT客户端v2.5.0已发布，修复多个BUG，新增资源搜索功能。请尽快更新到最新版本以获得更好的使用体验。',
-            author: '开发组',
-            date: '2023-09-28',
-            excerpt: 'PT客户端v2.5.0已发布，修复多个BUG',
-            category: '更新'
-        },
-        // 其他公告...
-    ]);
-
-    // 公告区搜索处理
-    const handleSearchAnnouncement = (e) => {
-        setAnnouncementSearch(e.target.value);
-    };
-
-    // 修改后的搜索函数
-    const handleSearchShare = async () => {
-        try {
-            setTorrentLoading(true);
-            const response = await searchTorrents(shareSearch, 1);
-            if (response.data.code === 200) {
-                setTorrentPosts(response.data.data.records);
-                const total = response.data.data.total;
-                setTotalPages(Math.ceil(total / 5));
-                setCurrentPage(1);
-            } else {
-                setTorrentError(response.data.message || '搜索失败');
-            }
-        } catch (err) {
-            setTorrentError(err.message || '搜索失败');
-        } finally {
-            setTorrentLoading(false);
-        }
-    };
-
-    const handleResetShareSearch = async () => {
-        setShareSearch('');
-        setSelectedFilters(
-            Object.keys(filterCategories).reduce((acc, category) => {
-                acc[category] = 'all';
-                return acc;
-            }, {})
-        );
-        await fetchTorrentPosts(1, true);
-    };
-
-    // 求种区搜索处理
-    const handleSearchRequest = (e) => {
-        setRequestSearch(e.target.value);
-    };
-
-    // 添加搜索函数
-    const handleSearchHelp = async () => {
-        try {
-        setHelpLoading(true);
-        const response = await searchPosts(helpSearch, currentPage);
-        if (response.data.code === 200) {
-            const postsWithCounts = await Promise.all(
-            response.data.data.records.map(async (post) => {
-                try {
-                const detailResponse = await getPostDetail(post.id);
-                if (detailResponse.data.code === 200) {
-                    return {
-                    ...post,
-                    replyCount: detailResponse.data.data.post.replyCount || 0,
-                    isLiked: false
-                    };
-                }
-                return post;
-                } catch (err) {
-                console.error(`获取帖子${post.id}详情失败:`, err);
-                return post;
-                }
-            })
-            );
-            setHelpPosts(postsWithCounts);
-            setTotalPages(Math.ceil(response.data.data.total / 5));
-        } else {
-            setHelpError(response.data.message || '搜索失败');
-        }
-        } catch (err) {
-        setHelpError(err.message || '搜索失败');
-        } finally {
-        setHelpLoading(false);
-        }
-    };
     
-    // 添加重置搜索函数
-    const handleResetHelpSearch = async () => {
-        setHelpSearch('');
-        await fetchHelpPosts(1); // 重置到第一页
+
+    //公告区
+    // 添加获取公告的方法
+    const fetchAnnouncements = async () => {
+    try {
+        const response = await getLatestAnnouncements();
+        setAnnouncements(response.data.data.announcements || []);
+    } catch (error) {
+        console.error('获取公告失败:', error);
+    }
     };
 
+    useEffect(() => {
+        if (activeTab === 'announcement') {
+            fetchAnnouncements();
+            fetchDiscountsForCarousel();
+        }
+    }, [activeTab]);
 
+    const fetchDiscountsForCarousel = async () => {
+        try {
+            const all = await getAllDiscounts();
+            console.log("返回的折扣数据：", all);
+            const now = new Date();
 
+            // ⚠️ 使用 Date.parse 确保兼容 ISO 格式
+            const ongoing = all.filter(d =>
+            Date.parse(d.startTime) <= now.getTime() && Date.parse(d.endTime) >= now.getTime()
+            );
+
+            const upcoming = all
+            .filter(d => Date.parse(d.startTime) > now.getTime())
+            .sort((a, b) => Date.parse(a.startTime) - Date.parse(b.startTime));
+
+            const selected = [...ongoing.slice(0, 3)];
+
+            while (selected.length < 3 && upcoming.length > 0) {
+            selected.push(upcoming.shift());
+            }
+
+            setCarouselDiscounts(selected);
+        } catch (e) {
+            console.error("获取折扣失败:", e);
+        }
+    };
+
+    // 修改handleAnnouncementClick函数中的state传递，移除不必要的字段
     const handleAnnouncementClick = (announcement, e) => {
         if (!e.target.closest('.exclude-click')) {
             navigate(`/announcement/${announcement.id}`, {
@@ -223,6 +143,129 @@
         }
     };
 
+    
+   // 公告区搜索处理
+    const handleSearchAnnouncement = (e) => {
+        setAnnouncementSearch(e.target.value);
+    };
+
+    // 修改后的搜索函数
+    const handleSearchShare = async () => {
+        try {
+            setTorrentLoading(true);
+            const response = await searchTorrents(shareSearch, 1);
+            if (response.data.code === 200) {
+                setTorrentPosts(response.data.data.records);
+                const total = response.data.data.total;
+                setTotalPages(Math.ceil(total / 5));
+                setCurrentPage(1);
+            } else {
+                setTorrentError(response.data.message || '搜索失败');
+            }
+        } catch (err) {
+            setTorrentError(err.message || '搜索失败');
+        } finally {
+            setTorrentLoading(false);
+        }
+    };
+
+    const handleResetShareSearch = async () => {
+        setShareSearch('');
+        setSelectedFilters(
+            Object.keys(filterCategories).reduce((acc, category) => {
+                acc[category] = 'all';
+                return acc;
+            }, {})
+        );
+        await fetchTorrentPosts(1, true);
+    };
+
+    // 添加搜索函数
+    const handleSearchRequest = async () => {
+        try {
+        setRequestLoading(true);
+        const response = await searchRequestPosts(requestSearch, currentPage);
+        if (response.data.code === 200) {
+            const postsWithCounts = await Promise.all(
+            response.data.data.records.map(async (post) => {
+                try {
+                const detailResponse = await getRequestPostDetail(post.id);
+                if (detailResponse.data.code === 200) {
+                    return {
+                    ...post,
+                    replyCount: detailResponse.data.data.post.replyCount || 0,
+                    isLiked: false
+                    };
+                }
+                return post;
+                } catch (err) {
+                console.error(`获取帖子${post.id}详情失败:`, err);
+                return post;
+                }
+            })
+            );
+            setRequestPosts(postsWithCounts);
+            setTotalPages(Math.ceil(response.data.data.total / 5));
+        } else {
+            setRequestError(response.data.message || '搜索失败');
+        }
+        } catch (err) {
+        setRequestError(err.message || '搜索失败');
+        } finally {
+        setRequestLoading(false);
+        }
+    };
+    
+    // 添加重置搜索函数
+    const handleResetRequestSearch = async () => {
+        setRequestSearch('');
+        await fetchRequestPosts(1); // 重置到第一页
+ };
+
+   // 添加搜索函数
+    const handleSearchHelp = async () => {
+        try {
+        setHelpLoading(true);
+        const response = await searchHelpPosts(helpSearch, currentPage);
+        if (response.data.code === 200) {
+            const postsWithCounts = await Promise.all(
+            response.data.data.records.map(async (post) => {
+                try {
+                const detailResponse = await getHelpPostDetail(post.id);
+                if (detailResponse.data.code === 200) {
+                    return {
+                    ...post,
+                    replyCount: detailResponse.data.data.post.replyCount || 0,
+                    isLiked: false
+                    };
+                }
+                return post;
+                } catch (err) {
+                console.error(`获取帖子${post.id}详情失败:`, err);
+                return post;
+                }
+            })
+            );
+            setHelpPosts(postsWithCounts);
+            setTotalPages(Math.ceil(response.data.data.total / 5));
+        } else {
+            setHelpError(response.data.message || '搜索失败');
+        }
+        } catch (err) {
+        setHelpError(err.message || '搜索失败');
+        } finally {
+        setHelpLoading(false);
+        }
+    };
+    
+    // 添加重置搜索函数
+    const handleResetHelpSearch = async () => {
+        setHelpSearch('');
+        await fetchHelpPosts(1); // 重置到第一页
+ };
+
+
+
 
     //资源区
     const handleFileChange = (e) => {
@@ -243,7 +286,10 @@
                 subtitle: uploadData.subtitle
             };
 
-            await createTorrent(torrentData, uploadData.file);
+            await createTorrent(uploadData.file, torrentData, (progress) => {
+                console.log(`上传进度: ${progress}%`);
+                // 这里可以添加进度条更新逻辑
+                });
 
             // 上传成功处理
             setShowUploadModal(false);
@@ -269,11 +315,164 @@
         }
     };
 
-    const handlePostSubmit = async (e) => {
+    // 处理下载按钮点击
+    const handleDownloadClick = (torrent, e) => {
+        e.stopPropagation();
+        setSelectedTorrent(torrent);
+        setShowDownloadModal(true);
+    };
+
+    // 执行下载
+    const handleDownload = async () => {
+    if (!selectedTorrent || !downloadPath) return;
+
+    setIsDownloading(true);
+    setDownloadProgress(0);
+
+    try {
+        // 标准化路径
+        const cleanPath = downloadPath
+        .replace(/\\/g, '/')  // 统一使用正斜杠
+        .replace(/\/+/g, '/') // 去除多余斜杠
+        .trim();
+
+        // 确保路径以斜杠结尾
+        const finalPath = cleanPath.endsWith('/') ? cleanPath : cleanPath + '/';
+
+        // 发起下载请求
+        await downloadTorrent(selectedTorrent.id, finalPath);
+        
+        // 开始轮询进度
+        const interval = setInterval(async () => {
+            try {
+                const res = await getDownloadProgress();
+                const progresses = res.data.progresses;
+                
+                if (progresses) {
+                    // 使用完整的 torrent 文件路径作为键
+                    const torrentPath = selectedTorrent.filePath.replace(/\\/g, '/');
+                    const torrentHash = selectedTorrent.hash;
+                    // 查找匹配的进度
+                    let foundProgress = null;
+                    for (const [key, value] of Object.entries(progresses)) {
+                        const normalizedKey = key.replace(/\\/g, '/');
+                        if (normalizedKey.includes(selectedTorrent.hash) || 
+                            normalizedKey.includes(selectedTorrent.torrentName)) {
+                            foundProgress = value;
+                            break;
+                        }
+                    }
+                    if (foundProgress !== null) {
+                        const newProgress = Math.round(foundProgress * 100);
+                        setDownloadProgress(newProgress);
+                        
+                        // 检查是否下载完成
+                        if (newProgress >= 100) {
+                        clearInterval(interval);
+                        setIsDownloading(false);
+                        message.success('下载完成！');
+                        setTimeout(() => setShowDownloadModal(false), 2000);
+                        }
+                    } else {
+                        console.log('当前下载进度:', progresses); // 添加日志
+                    }
+                    }
+                } catch (error) {
+                    console.error('获取进度失败:', error);
+                    // 如果获取进度失败但文件已存在，也视为完成
+                    const filePath = `${finalPath}${selectedTorrent.torrentName || 'downloaded_file'}`;
+                    try {
+                    const exists = await checkFileExists(filePath);
+                    if (exists) {
+                        clearInterval(interval);
+                        setDownloadProgress(100);
+                        setIsDownloading(false);
+                        message.success('下载完成！');
+                        setTimeout(() => setShowDownloadModal(false), 2000);
+                    }
+                    } catch (e) {
+                    console.error('文件检查失败:', e);
+                    }
+                }
+                }, 2000);
+
+        return () => clearInterval(interval);
+    } catch (error) {
+        setIsDownloading(false);
+        if (error.response && error.response.status === 409) {
+        message.error('分享率不足，无法下载此资源');
+        } else {
+        message.error('下载失败: ' + (error.message || '未知错误'));
+        }
+    }
+    };
+
+    const checkFileExists = async (filePath) => {
+        try {
+            // 这里需要根据您的实际环境实现文件存在性检查
+            // 如果是Electron应用，可以使用Node.js的fs模块
+            // 如果是纯前端，可能需要通过API请求后端检查
+            return true; // 暂时返回true，实际实现需要修改
+        } catch (e) {
+            console.error('检查文件存在性失败:', e);
+            return false;
+        }
+    };
+
+    const handleDeleteTorrent = async (torrentId, e) => {
+        e.stopPropagation(); // 阻止事件冒泡，避免触发资源项的点击事件
+        
+        try {
+            // 确认删除
+            if (!window.confirm('确定要删除这个种子吗？此操作不可撤销！')) {
+            return;
+            }
+            
+            // 调用删除API
+            await deleteTorrent(torrentId);
+            
+            // 删除成功后刷新列表
+            message.success('种子删除成功');
+            await fetchTorrentPosts(currentPage);
+        } catch (error) {
+            console.error('删除种子失败:', error);
+            message.error('删除种子失败: ' + (error.response?.data?.message || error.message));
+        }
+        };
+
+        const handleRequestPostSubmit = async (e) => {
         e.preventDefault();
         try {
           const username = localStorage.getItem('username');
-          const response = await createPost(
+          const response = await createRequestPost(
+            postTitle,
+            postContent,
+            username,
+            selectedImage
+          );
+          
+          if (response.data.code === 200) {
+            // 刷新帖子列表
+           
+            await fetchRequestPosts(currentPage);
+            // 重置表单
+            setShowPostModal(false);
+            setPostTitle('');
+            setPostContent('');
+            setSelectedImage(null);
+          } else {
+            setHelpError(response.data.message || '发帖失败');
+          }
+        } catch (err) {
+          setHelpError(err.message || '发帖失败');
+        }
+      };
+
+    const handleHelpPostSubmit = async (e) => {
+        e.preventDefault();
+        try {
+          const username = localStorage.getItem('username');
+          const response = await createHelpPost(
             postTitle,
             postContent,
             username,
@@ -283,6 +482,7 @@
           if (response.data.code === 200) {
             // 刷新帖子列表
             await fetchHelpPosts(currentPage);
+            
             // 重置表单
             setShowPostModal(false);
             setPostTitle('');
@@ -339,6 +539,42 @@
         }
     }, [activeTab]);
 
+const fetchRequestPosts = async (page = 1) => {
+        setRequestLoading(true);
+        try {
+          const response = await getRequestPosts(page);
+          if (response.data.code === 200) {
+            const postsWithCounts = await Promise.all(
+              response.data.data.records.map(async (post) => {
+                try {
+                  const detailResponse = await getRequestPostDetail(post.id);
+                  if (detailResponse.data.code === 200) {
+                    return {
+                      ...post,
+                      replyCount: detailResponse.data.data.post.replyCount || 0,
+                      isLiked: false // 根据需要添加其他字段
+                    };
+                  }
+                  return post; // 如果获取详情失败，返回原始帖子数据
+                } catch (err) {
+                  console.error(`获取帖子${post.id}详情失败:`, err);
+                  return post;
+                }
+              })
+            );
+            setRequestPosts(postsWithCounts);
+            setTotalPages(Math.ceil(response.data.data.total / 5)); // 假设每页5条
+            setCurrentPage(page);
+          } else {
+            setRequestError(response.data.message || '获取求助帖失败');
+          }
+        } catch (err) {
+          setRequestError(err.message || '获取求助帖失败');
+        } finally {
+          setRequestLoading(false);
+        }
+      };
+
     const handleImageUpload = (e) => {
         setSelectedImage(e.target.files[0]);
     };
@@ -347,12 +583,12 @@
     const fetchHelpPosts = async (page = 1) => {
         setHelpLoading(true);
         try {
-          const response = await getPosts(page);
+          const response = await getHelpPosts(page);
           if (response.data.code === 200) {
             const postsWithCounts = await Promise.all(
               response.data.data.records.map(async (post) => {
                 try {
-                  const detailResponse = await getPostDetail(post.id);
+                  const detailResponse = await getHelpPostDetail(post.id);
                   if (detailResponse.data.code === 200) {
                     return {
                       ...post,
@@ -382,8 +618,8 @@
 
 
     useEffect(() => {
-        if (activeTab === 'help') {
-            fetchHelpPosts(currentPage);
+        if (activeTab === 'request') {
+            fetchRequestPosts(currentPage);
         }
     }, [activeTab, currentPage]); // 添加 currentPage 作为依赖
 
@@ -541,7 +777,10 @@
     useEffect(() => {
         if (activeTab === 'announcement') {
             const timer = setInterval(() => {
-                setCurrentSlide(prev => (prev + 1) % 3); // 3张轮播图循环
+                setCurrentSlide(prev => {
+                    const count = carouselDiscounts.length || 1;
+                    return (prev + 1) % count;
+                });
             }, 3000);
             return () => clearInterval(timer);
         }
@@ -551,7 +790,9 @@
         if (activeTab === 'help') {
             fetchHelpPosts();
         }
-    }, [activeTab]);
+    }, [activeTab, currentPage]); // 添加 currentPage 作为依赖
+
+    
 
     const renderContent = () => {
         switch (activeTab) {
@@ -575,22 +816,30 @@
                             </button>
                         </div>
                         {/* 轮播图区域 */}
-                        <div className="carousel-container">
-                            <div className={`carousel-slide ${currentSlide === 0 ? 'active' : ''}`}>
-                                <div className="carousel-image gray-bg">促销活动1</div>
+                       <div className="carousel-container">
+                        {carouselDiscounts.length === 0 ? (
+                            <div className="carousel-slide active">
+                            <div className="carousel-image gray-bg">暂无折扣活动</div>
                             </div>
-                            <div className={`carousel-slide ${currentSlide === 1 ? 'active' : ''}`}>
-                                <div className="carousel-image gray-bg">促销活动2</div>
+                        ) : (
+                            carouselDiscounts.map((discount, index) => (
+                            <div key={index} className={`carousel-slide ${currentSlide === index ? 'active' : ''}`}>
+                                <div className="carousel-image gray-bg">
+                                <h3>{discount.type}</h3>
+                                <p>{discount.name}</p>
+                                <p>{new Date(discount.startTime).toLocaleDateString()} ~ {new Date(discount.endTime).toLocaleDateString()}</p>
+                                </div>
                             </div>
-                            <div className={`carousel-slide ${currentSlide === 2 ? 'active' : ''}`}>
-                                <div className="carousel-image gray-bg">促销活动3</div>
-                            </div>
-                            <div className="carousel-dots">
-                                <span className={`dot ${currentSlide === 0 ? 'active' : ''}`}></span>
-                                <span className={`dot ${currentSlide === 1 ? 'active' : ''}`}></span>
-                                <span className={`dot ${currentSlide === 2 ? 'active' : ''}`}></span>
-                            </div>
+                            ))
+                        )}
+                        <div className="carousel-dots">
+                            {carouselDiscounts.map((_, index) => (
+                            <span key={index} className={`dot ${currentSlide === index ? 'active' : ''}`}></span>
+                            ))}
                         </div>
+                        </div>
+
+
 
                         {/* 公告区块区域 */}
                         <div className="announcement-grid">
@@ -601,9 +850,8 @@
                                     onClick={(e) => handleAnnouncementClick(announcement, e)}
                                 >
                                     <h3>{announcement.title}</h3>
-                                    <p>{announcement.excerpt}</p>
+                                    <p>{announcement.content.substring(0, 100)}...</p>
                                     <div className="announcement-footer exclude-click">
-                                        <span>{announcement.author}</span>
                                         <span>{announcement.date}</span>
                                     </div>
                                 </div>
@@ -845,13 +1093,19 @@
                                     </div>
                                     <button
                                         className="download-btn"
-                                        onClick={(e) => {
-                                            e.stopPropagation();
-                                            // 下载逻辑
-                                        }}
+                                        onClick={(e) => handleDownloadClick(torrent, e)}
                                     >
                                         立即下载
                                     </button>
+                                    {/* 添加删除按钮 - 只有管理员或发布者可见 */}
+                                    {(userInfo?.isAdmin || userInfo?.name === torrent.username) && (
+                                        <button
+                                        className="delete-btn"
+                                        onClick={(e) => handleDeleteTorrent(torrent.id, e)}
+                                        >
+                                        删除
+                                        </button>
+                                    )}
                                 </div>
                             ))}
                         </div>
@@ -889,11 +1143,11 @@
             case 'request':
                 return (
                     <div className="content-area" data-testid="request-section">
-                        {/* 求种区搜索框 */}
+                        {/* 求助区搜索框 */}
                         <div className="section-search-container">
                             <input
                                 type="text"
-                                placeholder="搜索求种..."
+                                placeholder="搜索求助..."
                                 value={requestSearch}
                                 onChange={(e) => setRequestSearch(e.target.value)}
                                 className="section-search-input"
@@ -905,51 +1159,160 @@
                             >
                                 搜索
                             </button>
+                            <button 
+                                className="reset-button"
+                                onClick={handleResetRequestSearch}
+                                style={{marginLeft: '10px'}}
+                            >
+                                重置
+                            </button>
                         </div>
+
+                         {/* 新增发帖按钮 */}
+                        <div className="post-header">
+                            <button
+                                className="create-post-btn"
+                                onClick={() => setShowPostModal(true)}
+                            >
+                                ＋ 发帖求助
+                            </button>
+                        </div>
+
+                        {/* 加载状态和错误提示 */}
+                        {requestLoading && <div className="loading">加载中...</div>}
+                        {requestError && <div className="error">{helpError}</div>}
                         {/* 求种区帖子列表 */}
                         <div className="request-list">
-                            {[
-                                {
-                                    id: 1,
-                                    title: '求《药屋少女的呢喃》第二季全集',
-                                    content: '求1080P带中文字幕版本，最好是内嵌字幕不是外挂的',
-                                    author: '动漫爱好者',
-                                    authorAvatar: 'https://via.placeholder.com/40',
-                                    date: '2023-10-15',
-                                    likeCount: 24,
-                                    commentCount: 8
-                                },
-                                {
-                                    id: 2,
-                                    title: '求《奥本海默》IMAX版',
-                                    content: '最好是原盘或者高码率的版本，谢谢各位大佬',
-                                    author: '电影收藏家',
-                                    authorAvatar: 'https://via.placeholder.com/40',
-                                    date: '2023-10-14',
-                                    likeCount: 15,
-                                    commentCount: 5
-                                }
-                            ].map(post => (
+                            {requestPosts.map(post => (
                                 <div
                                     key={post.id}
-                                    className="request-post"
+                                    className={`request-post ${post.isSolved ? 'solved' : ''}`}
                                     onClick={() => navigate(`/request/${post.id}`)}
                                 >
                                     <div className="post-header">
-                                        <img src={post.authorAvatar} alt={post.author} className="post-avatar"/>
-                                        <div className="post-author">{post.author}</div>
-                                        <div className="post-date">{post.date}</div>
+                                        <img
+                                            src={post.authorAvatar || 'https://via.placeholder.com/40'}
+                                            alt={post.authorId}
+                                            className="post-avatar"
+                                        />
+                                        <div className="post-author">{post.authorId}</div>
+                                        <div className="post-date">
+                                            {new Date(post.createTime).toLocaleDateString()}
+                                        </div>
+                                        {post.isSolved && <span className="solved-badge">已解决</span>}
                                     </div>
                                     <h3 className="post-title">{post.title}</h3>
                                     <p className="post-content">{post.content}</p>
                                     <div className="post-stats">
-                                        <span className="post-likes">👍 {post.likeCount}</span>
-                                        <span className="post-comments">💬 {post.commentCount}</span>
+                                        <span className="post-likes">👍 {post.likeCount || 0}</span>
+                                        <span className="post-comments">💬 {post.replyCount || 0}</span>
                                     </div>
                                 </div>
                             ))}
                         </div>
+                        {/* 在帖子列表后添加分页控件 */}
+                        <div className="pagination">
+                            <button
+                                onClick={() => fetchRequestPosts(currentPage - 1)}
+                                disabled={currentPage === 1}
+                            >
+                                上一页
+                            </button>
+
+                            {Array.from({length: totalPages}, (_, i) => i + 1).map(page => (
+                                <button
+                                    key={page}
+                                    onClick={() => fetchRequestPosts(page)}
+                                    className={currentPage === page ? 'active' : ''}
+                                >
+                                    {page}
+                                </button>
+                            ))}
+
+                            <button
+                                onClick={() => fetchRequestPosts(currentPage + 1)}
+                                disabled={currentPage === totalPages}
+                            >
+                                下一页
+                            </button>
+                        </div>
+                        {/* 新增发帖弹窗 */}
+                        {showPostModal && (
+                            <div className="post-modal-overlay">
+                                <div className="post-modal">
+                                    <h3>发布求种帖</h3>
+                                    <button
+                                        className="modal-close-btn"
+                                        onClick={() => setShowPostModal(false)}
+                                    >
+                                        ×
+                                    </button>
+
+                                    <form onSubmit={handleRequestPostSubmit}>
+                                        <div className="form-group">
+                                            <label>帖子标题</label>
+                                            <input
+                                                type="text"
+                                                value={postTitle}
+                                                onChange={(e) => setPostTitle(e.target.value)}
+                                                placeholder="请输入标题"
+                                                required
+                                            />
+                                        </div>
+
+                                        <div className="form-group">
+                                            <label>帖子内容</label>
+                                            <textarea
+                                                value={postContent}
+                                                onChange={(e) => setPostContent(e.target.value)}
+                                                placeholder="详细描述你的问题"
+                                                required
+                                            />
+                                        </div>
+
+                                        <div className="form-group">
+                                            <label>上传图片</label>
+                                            <div className="upload-image-btn">
+                                                <input
+                                                    type="file"
+                                                    id="image-upload"
+                                                    accept="image/*"
+                                                    onChange={handleImageUpload}
+                                                    style={{display: 'none'}}
+                                                />
+                                                <label htmlFor="image-upload">
+                                                    {selectedImage ? '已选择图片' : '选择图片'}
+                                                </label>
+                                                {selectedImage && (
+                                                    <span className="image-name">{selectedImage.name}</span>
+                                                )}
+                                            </div>
+                                        </div>
+
+                                        <div className="form-actions">
+                                            <button
+                                                type="button"
+                                                className="cancel-btn"
+                                                onClick={() => setShowPostModal(false)}
+                                            >
+                                                取消
+                                            </button>
+                                            <button
+                                                type="submit"
+                                                className="submit-btn"
+                                            >
+                                                确认发帖
+                                            </button>
+                                        </div>
+                                    </form>
+                                </div>
+                            </div>
+                        )}
                     </div>
+                    
+                
+
+                    
                 );
             // 在Dashboard.jsx的renderContent函数中修改case 'help'部分
             case 'help':
@@ -1063,7 +1426,7 @@
                                         ×
                                     </button>
 
-                                    <form onSubmit={handlePostSubmit}>
+                                    <form onSubmit={handleHelpPostSubmit}>
                                         <div className="form-group">
                                             <label>帖子标题</label>
                                             <input
@@ -1128,6 +1491,7 @@
             default:
                 return <div className="content-area" data-testid="default-section">公告区内容</div>;
         }
+        
     };
 
     if (loading) return <div className="loading">加载中...</div>;
@@ -1198,6 +1562,62 @@
 
             {/* 内容区 */}
             {renderContent()}
+            {/* 下载模态框 - 添加在这里 */}
+            {showDownloadModal && selectedTorrent && (
+                <div className="modal-overlay">
+                    <div className="download-modal">
+                        <h3>下载 {selectedTorrent.torrentName}</h3>
+                        <button 
+                            className="close-btn"
+                            onClick={() => !isDownloading && setShowDownloadModal(false)}
+                            disabled={isDownloading}
+                        >
+                            ×
+                        </button>
+                        
+                        <div className="form-group">
+                            <label>下载路径:</label>
+                            <input
+                                type="text"
+                                value={downloadPath}
+                                onChange={(e) => {
+                                    // 实时格式化显示
+                                    let path = e.target.value
+                                        .replace(/\t/g, '')
+                                        .replace(/\\/g, '/')
+                                        .replace(/\s+/g, ' ');
+                                    setDownloadPath(path);
+                                }}
+                                disabled={isDownloading}
+                                placeholder="例如: D:/downloads/"
+                            />
+                        </div>
+                        
+                        {isDownloading && (
+                            <div className="progress-container">
+                                <div className="progress-bar" style={{ width: `${downloadProgress}%` }}>
+                                    {downloadProgress}%
+                                </div>
+                            </div>
+                        )}
+                        
+                        <div className="modal-actions">
+                            <button
+                                onClick={() => !isDownloading && setShowDownloadModal(false)}
+                                disabled={isDownloading}
+                            >
+                                取消
+                            </button>
+                            <button
+                                onClick={handleDownload}
+                                disabled={isDownloading || !downloadPath}
+                            >
+                                {isDownloading ? '下载中...' : '开始下载'}
+                            </button>
+                        </div>
+                    </div>
+                </div>
+            )}
         </div>
     );
 };
