diff --git a/src/components/RequestDetail.jsx b/src/components/RequestDetail.jsx
new file mode 100644
index 0000000..993fe8e
--- /dev/null
+++ b/src/components/RequestDetail.jsx
@@ -0,0 +1,198 @@
+import React, { useState } from 'react';
+import { useParams, useNavigate,useLocation } from 'react-router-dom';
+import './RequestDetail.css';
+
+const RequestDetail = () => {
+  const { id } = useParams();
+  const navigate = useNavigate();
+  const location = useLocation();
+  
+  // 模拟数据
+  const [post, setPost] = useState({
+    id: 1,
+    title: '求《药屋少女的呢喃》第二季全集',
+    content: '求1080P带中文字幕版本，最好是内嵌字幕不是外挂的。\n\n希望有热心大佬能分享，可以给积分奖励！',
+    author: '动漫爱好者',
+    authorAvatar: 'https://via.placeholder.com/40',
+    date: '2023-10-15',
+    likeCount: 24,
+    isLiked: false,
+    isFavorited: false
+  });
+
+  const [comments, setComments] = useState([
+    {
+      id: 1,
+      type: 'text',
+      author: '资源达人',
+      authorAvatar: 'https://via.placeholder.com/40',
+      content: '我有第1-5集，需要的话可以私聊',
+      date: '2023-10-15 14:30',
+      likeCount: 5
+    },
+    {
+      id: 2,
+      type: 'torrent',
+      title: '药屋少女的呢喃第二季第8集',
+      size: '1.2GB',
+      author: '种子分享者',
+      authorAvatar: 'https://via.placeholder.com/40',
+      date: '2023-10-16 09:15',
+      likeCount: 8
+    }
+  ]);
+
+  const [newComment, setNewComment] = useState('');
+
+  const handleLikePost = () => {
+    setPost(prev => ({
+      ...prev,
+      likeCount: prev.isLiked ? prev.likeCount - 1 : prev.likeCount + 1,
+      isLiked: !prev.isLiked
+    }));
+  };
+
+  const handleFavoritePost = () => {
+    setPost(prev => ({
+      ...prev,
+      isFavorited: !prev.isFavorited
+    }));
+  };
+
+  const handleCommentSubmit = (e) => {
+    e.preventDefault();
+    if (!newComment.trim()) return;
+    
+    const newCommentObj = {
+      id: comments.length + 1,
+      type: 'text',
+      author: '当前用户',
+      authorAvatar: 'https://via.placeholder.com/40',
+      content: newComment,
+      date: new Date().toLocaleString(),
+      likeCount: 0
+    };
+    
+    setComments([...comments, newCommentObj]);
+    setNewComment('');
+  };
+
+  const handleDownloadTorrent = (commentId) => {
+    console.log('下载种子', commentId);
+    // 实际下载逻辑
+  };
+
+  const handleBack = () => {
+    const fromTab = location.state?.fromTab; // 从跳转时传递的 state 中获取
+    if (fromTab) {
+      navigate(`/dashboard/${fromTab}`); // 明确返回对应标签页
+    } else {
+      navigate(-1); // 保底策略
+    }
+  }
+
+  return (
+    <div className="request-detail-container">
+      <button className="back-button" onClick={handleBack}>
+        &larr; 返回求种区
+      </button>
+      
+      <div className="request-post">
+        <div className="post-header">
+          <img src={post.authorAvatar} alt={post.author} className="post-avatar" />
+          <div className="post-meta">
+            <div className="post-author">{post.author}</div>
+            <div className="post-date">{post.date}</div>
+          </div>
+        </div>
+        
+        <h1 className="post-title">{post.title}</h1>
+        
+        <div className="post-content">
+          {post.content.split('\n').map((para, i) => (
+            <p key={i}>{para}</p>
+          ))}
+        </div>
+        
+        <div className="post-actions">
+          <button 
+            className={`like-button ${post.isLiked ? 'liked' : ''}`}
+            onClick={handleLikePost}
+          >
+            👍 点赞 ({post.likeCount})
+          </button>
+          <button 
+            className={`favorite-button ${post.isFavorited ? 'favorited' : ''}`}
+            onClick={handleFavoritePost}
+          >
+            {post.isFavorited ? '★ 已收藏' : '☆ 收藏'}
+          </button>
+        </div>
+      </div>
+      
+      <div className="comments-section">
+        <h2>回应 ({comments.length})</h2>
+        
+        <form onSubmit={handleCommentSubmit} className="comment-form">
+          <textarea
+            value={newComment}
+            onChange={(e) => setNewComment(e.target.value)}
+            placeholder="写下你的回应..."
+            rows="3"
+            required
+          />
+          <div className="form-actions">
+            <button type="submit" className="submit-comment">发表文字回应</button>
+            <button 
+              type="button" 
+              className="submit-torrent"
+              onClick={() => console.log('打开种子上传对话框')}
+            >
+              上传种子回应
+            </button>
+          </div>
+        </form>
+        
+        <div className="comment-list">
+          {comments.map(comment => (
+            <div key={comment.id} className={`comment-item ${comment.type}`}>
+              <img 
+                src={comment.authorAvatar} 
+                alt={comment.author} 
+                className="comment-avatar"
+              />
+              
+              <div className="comment-content">
+                <div className="comment-header">
+                  <span className="comment-author">{comment.author}</span>
+                  <span className="comment-date">{comment.date}</span>
+                </div>
+                
+                {comment.type === 'text' ? (
+                  <p className="comment-text">{comment.content}</p>
+                ) : (
+                  <div className="torrent-comment">
+                    <span className="torrent-title">{comment.title}</span>
+                    <span className="torrent-size">{comment.size}</span>
+                    <button 
+                      className="download-torrent"
+                      onClick={() => handleDownloadTorrent(comment.id)}
+                    >
+                      立即下载
+                    </button>
+                  </div>
+                )}
+                
+                <button className="comment-like">
+                  👍 ({comment.likeCount})
+                </button>
+              </div>
+            </div>
+          ))}
+        </div>
+      </div>
+    </div>
+  );
+};
+
+export default RequestDetail;
\ No newline at end of file
