diff --git a/src/pages/Torrent/torrentDetail.tsx b/src/pages/Torrent/torrentDetail.tsx
new file mode 100644
index 0000000..d841b04
--- /dev/null
+++ b/src/pages/Torrent/torrentDetail.tsx
@@ -0,0 +1,334 @@
+import React, { useEffect, useState } from 'react';
+import { useParams, useNavigate } from 'react-router-dom';
+import { Button, Input, message, Spin, Tag, Card, Avatar, List, Pagination } from 'antd';
+import { DownloadOutlined, ArrowLeftOutlined, SendOutlined } from '@ant-design/icons';
+import {
+    getTorrentInfo,
+    downloadTorrent,
+    addComment,
+    getComments,
+    getCategories,
+} from '../../services/bt/index';
+
+const PAGE_SIZE = 10;
+
+const TorrentDetail: React.FC = () => {
+const { id } = useParams<{ id: string }>();
+const navigate = useNavigate();
+
+const [loading, setLoading] = useState(true);
+const [torrent, setTorrent] = useState<any>(null);
+const [categories, setCategories] = useState<any[]>([]);
+const [comments, setComments] = useState<any[]>([]);
+const [commentLoading, setCommentLoading] = useState(false);
+const [comment, setComment] = useState('');
+const [commentsTotal, setCommentsTotal] = useState(0);
+const [pageNum, setPageNum] = useState(1);
+
+useEffect(() => {
+    setLoading(true);
+    getTorrentInfo({ id: id! })
+        .then((res) => setTorrent(res.data))
+        .finally(() => setLoading(false));
+    getCategories().then((res) => setCategories(res.data || []));
+}, [id]);
+
+useEffect(() => {
+    fetchComments(pageNum);
+    // eslint-disable-next-line
+}, [id, pageNum]);
+
+const fetchComments = (page: number) => {
+    setCommentLoading(true);
+    getComments({ torrentId: Number(id), pageNum: page, pageSize: PAGE_SIZE })
+        .then((res) => {0
+            setComments(res.data?.list || []);
+            setCommentsTotal(res.data?.total || 0);
+        })
+        .finally(() => setCommentLoading(false));
+};
+
+const handleDownload = async () => {
+    try {
+        const res = await downloadTorrent({ id: id! });
+        const blob = new Blob([res], { type: 'application/x-bittorrent' });
+        const url = window.URL.createObjectURL(blob);
+        const a = document.createElement('a');
+        a.href = url;
+        a.download = `${torrent?.title || 'torrent'}.torrent`;
+        a.click();
+        window.URL.revokeObjectURL(url);
+    } catch {
+        message.error('下载失败');
+    }
+};
+
+const handleAddComment = async () => {
+    if (!comment.trim()) return;
+    await addComment({ torrentId: Number(id), comment });
+    setComment('');
+    fetchComments(1);
+    setPageNum(1);
+    message.success('评论成功');
+};
+
+const getCategoryName = (catId: number) => {
+    return categories.find((c) => c.id === catId)?.name || '未知分类';
+};
+
+const statusMap: Record<number, string> = {
+    0: '候选中',
+    1: '已发布',
+    2: '审核不通过',
+    3: '已上架修改重审中',
+    10: '已下架',
+};
+
+// 星球主题样式
+const planetBg = {
+    background: 'radial-gradient(circle at 60% 40%, #2b6cb0 0%, #1a202c 100%)',
+    minHeight: '100vh',
+    padding: '32px 0',
+};
+
+return (
+    <div style={planetBg}>
+        <div style={{ maxWidth: 900, margin: '0 auto', background: 'rgba(255,255,255,0.08)', borderRadius: 16, boxShadow: '0 8px 32px rgba(0,0,0,0.2)', padding: 24 }}>
+            <Button
+                icon={<ArrowLeftOutlined />}
+                type="link"
+                onClick={() => navigate(-1)}
+                style={{ color: '#fff', marginBottom: 16 }}
+            >
+                返回
+            </Button>
+            {loading ? (
+                <Spin size="large" />
+            ) : (
+                <>
+                    {torrent?.status !== 1 ? (
+                        <div style={{ color: '#fff', fontSize: 24, textAlign: 'center', padding: '80px 0' }}>
+                            当前状态：{statusMap[torrent?.status] || '未知状态'}
+                        </div>
+                    ) : (
+                        <>
+                            <div style={{ display: 'flex', alignItems: 'center', gap: 24 }}>
+                                <Avatar
+                                    size={96}
+                                    src={torrent?.cover || 'https://img.icons8.com/color/96/planet.png'}
+                                    style={{ boxShadow: '0 0 24px #4299e1' }}
+                                />
+                                <div>
+                                    <h1 style={{ color: '#fff', fontSize: 32, marginBottom: 8 }}>
+                                        {torrent?.title}
+                                    </h1>
+                                    <div style={{ marginBottom: 8 }}>
+                                        <Tag color="geekblue">{getCategoryName(torrent?.categoryId)}</Tag>
+                                        {torrent?.tags?.map((tag: string) => (
+                                            <Tag key={tag} color="blue">{tag}</Tag>
+                                        ))}
+                                    </div>
+                                    <div style={{ color: '#cbd5e1', marginBottom: 8 }}>
+                                        上传者：{torrent?.owner} | 上传时间：{torrent?.createdAt}
+                                    </div>
+                                    <Button
+                                        type="primary"
+                                        icon={<DownloadOutlined />}
+                                        onClick={handleDownload}
+                                        style={{ background: 'linear-gradient(90deg,#4299e1,#805ad5)', border: 'none' }}
+                                    >
+                                        下载种子
+                                    </Button>
+                                </div>
+                            </div>
+                            <Card
+                                style={{
+                                    marginTop: 32,
+                                    background: 'rgba(255,255,255,0.12)',
+                                    border: 'none',
+                                    borderRadius: 12,
+                                    color: '#fff',
+                                }}
+                                title={<span style={{ color: '#fff' }}>种子详情</span>}
+                            >
+                                <div dangerouslySetInnerHTML={{ __html: torrent?.description || '' }} />
+                                <div style={{ marginTop: 16, color: '#cbd5e1' }}>
+                                    <span>文件大小：{torrent?.size}</span>
+                                    <span style={{ marginLeft: 24 }}>做种人数：{torrent?.seeders}</span>
+                                    <span style={{ marginLeft: 24 }}>下载人数：{torrent?.leechers}</span>
+                                    <span style={{ marginLeft: 24 }}>完成次数：{torrent?.completed}</span>
+                                </div>
+                            </Card>
+                            <Card
+                                style={{
+                                    marginTop: 32,
+                                    background: 'rgba(255,255,255,0.10)',
+                                    border: 'none',
+                                    borderRadius: 12,
+                                    color: '#fff',
+                                }}
+                                title={<span style={{ color: '#fff' }}>星球评论</span>}
+                            >
+                                <List
+                                    loading={commentLoading}
+                                    dataSource={comments}
+                                    locale={{ emptyText: '暂无评论' }}
+                                    renderItem={(item: any) => {
+                                        // 只渲染顶级评论（pid为null）
+                                        if (item.pid !== null) return null;
+                                        const [expanded, setExpanded] = useState(false);
+                                        const [replyContent, setReplyContent] = useState('');
+                                        const [replying, setReplying] = useState(false);
+
+                                        const handleReply = async () => {
+                                            if (!replyContent.trim()) return;
+                                            setReplying(true);
+                                            await addComment({ torrentId: Number(id), comment: replyContent, pid: item.id });
+                                            setReplyContent('');
+                                            setReplying(false);
+                                            fetchComments(pageNum);
+                                            message.success('回复成功');
+                                        };
+
+                                        return (
+                                            <List.Item
+                                                style={{
+                                                    alignItems: 'flex-start',
+                                                    border: 'none',
+                                                    background: 'transparent',
+                                                    padding: '20px 0',
+                                                    borderBottom: '1px solid rgba(255,255,255,0.08)',
+                                                }}
+                                            >
+                                                <List.Item.Meta
+                                                    avatar={
+                                                        <Avatar
+                                                            src={item.avatar ? item.avatar.startsWith('http') ? item.avatar : `${item.avatar}` : 'https://img.icons8.com/color/48/planet.png'}
+                                                            size={48}
+                                                            style={{ boxShadow: '0 2px 8px #4299e1' }}
+                                                        />
+                                                    }
+                                                    title={
+                                                        <span style={{ color: '#fff', fontWeight: 500 }}>
+                                                            {item.username || '匿名用户'}
+                                                        </span>
+                                                    }
+                                                    description={
+                                                        <span style={{ color: '#cbd5e1', fontSize: 16 }}>
+                                                            {item.comment}
+                                                            <span style={{ marginLeft: 16, fontSize: 12, color: '#a0aec0' }}>
+                                                                {item.createTime}
+                                                            </span>
+                                                            <Button
+                                                                type="link"
+                                                                size="small"
+                                                                style={{ marginLeft: 16, color: '#4299e1' }}
+                                                                onClick={() => setExpanded((v) => !v)}
+                                                            >
+                                                                {expanded ? '收起回复' : `展开回复${item.children?.length ? ` (${item.children.length})` : ''}`}
+                                                            </Button>
+                                                        </span>
+                                                    }
+                                                />
+                                                {expanded && (
+                                                    <div style={{ width: '100%', marginTop: 12, marginLeft: 56 }}>
+                                                        <List
+                                                            dataSource={item.children}
+                                                            itemLayout="horizontal"
+                                                            locale={{ emptyText: '暂无子评论' }}
+                                                            renderItem={(child: any) => (
+                                                                <List.Item
+                                                                    style={{
+                                                                        border: 'none',
+                                                                        background: 'transparent',
+                                                                        padding: '12px 0 0 0',
+                                                                        marginLeft: 0,
+                                                                    }}
+                                                                >
+                                                                    <List.Item.Meta
+                                                                        avatar={
+                                                                            <Avatar
+                                                                                src={child.avatar ? child.avatar.startsWith('http') ? child.avatar : `${child.avatar}` : 'https://img.icons8.com/color/48/planet.png'}
+                                                                                size={36}
+                                                                                style={{ boxShadow: '0 1px 4px #805ad5' }}
+                                                                            />
+                                                                        }
+                                                                        title={
+                                                                            <span style={{ color: '#c3bfff', fontWeight: 500, fontSize: 15 }}>
+                                                                                {child.username || '匿名用户'}
+                                                                            </span>
+                                                                        }
+                                                                        description={
+                                                                            <span style={{ color: '#e0e7ef', fontSize: 15 }}>
+                                                                                {child.comment}
+                                                                                <span style={{ marginLeft: 12, fontSize: 12, color: '#a0aec0' }}>
+                                                                                    {child.createTime}
+                                                                                </span>
+                                                                            </span>
+                                                                        }
+                                                                    />
+                                                                </List.Item>
+                                                            )}
+                                                        />
+                                                        <div style={{ display: 'flex', marginTop: 12, gap: 8 }}>
+                                                            <Input.TextArea
+                                                                value={replyContent}
+                                                                onChange={e => setReplyContent(e.target.value)}
+                                                                placeholder="回复该评论"
+                                                                autoSize={{ minRows: 1, maxRows: 3 }}
+                                                                style={{ background: 'rgba(255,255,255,0.15)', color: '#fff', border: 'none' }}
+                                                            />
+                                                            <Button
+                                                                type="primary"
+                                                                icon={<SendOutlined />}
+                                                                loading={replying}
+                                                                onClick={handleReply}
+                                                                disabled={!replyContent.trim()}
+                                                                style={{ background: 'linear-gradient(90deg,#4299e1,#805ad5)', border: 'none', height: 40 }}
+                                                            >
+                                                                发送
+                                                            </Button>
+                                                        </div>
+                                                    </div>
+                                                )}
+                                            </List.Item>
+                                        );
+                                    }}
+                                />
+                                <Pagination
+                                    style={{ marginTop: 16, textAlign: 'right' }}
+                                    current={pageNum}
+                                    pageSize={PAGE_SIZE}
+                                    total={commentsTotal}
+                                    onChange={setPageNum}
+                                    showSizeChanger={false}
+                                />
+                                <div style={{ display: 'flex', marginTop: 24, gap: 8 }}>
+                                    <Input.TextArea
+                                        value={comment}
+                                        onChange={e => setComment(e.target.value)}
+                                        placeholder="在星球上留下你的评论吧~"
+                                        autoSize={{ minRows: 2, maxRows: 4 }}
+                                        style={{ background: 'rgba(255,255,255,0.15)', color: '#fff', border: 'none' }}
+                                    />
+                                    <Button
+                                        type="primary"
+                                        icon={<SendOutlined />}
+                                        onClick={handleAddComment}
+                                        disabled={!comment.trim()}
+                                        style={{ background: 'linear-gradient(90deg,#4299e1,#805ad5)', border: 'none', height: 48 }}
+                                    >
+                                        发送
+                                    </Button>
+                                </div>
+                            </Card>
+                        </>
+                    )}
+                </>
+            )}
+        </div>
+    </div>
+);
+};
+
+export default TorrentDetail;
\ No newline at end of file
