合并冲突
Change-Id: I3b6ac5ae87aad8fe746eceecc8f92fc5574b50a8
diff --git a/src/pages/Home/index.tsx b/src/pages/Home/index.tsx
index 5f0caa0..7234c32 100644
--- a/src/pages/Home/index.tsx
+++ b/src/pages/Home/index.tsx
@@ -1,95 +1,413 @@
-import React, { useState } from 'react';
+// 写一个简单的欢迎界面
+import React, { useEffect, useState } from 'react';
+import { Card, Statistic, Row, Col, Divider, Button } from 'antd';
+import { LikeOutlined, HeartOutlined, EyeOutlined } from '@ant-design/icons';
+import { getUserInfo } from '@/services/session';
+import styles from './index.module.css'; // 假设我们创建了一个CSS模块文件
+import './css/stars-style.css'
+import { Flex } from 'antd';
+import { Typography } from "@mui/material";
+import { useRequest } from '@umijs/max';
+import { getPlanetList, updatePlanet, getUserPlanet, getPlanetInfo, PlanetEntity } from '@/services/planets/api';
-const planets = [
- { name: 'Mercury', desc: 'The smallest planet.', img: 'https://images.unsplash.com/photo-1462331940025-496dfbfc7564?auto=format&fit=crop&w=400&q=80' },
- { name: 'Venus', desc: 'The hottest planet.', img: 'https://images.unsplash.com/photo-1465101046530-73398c7f28ca?auto=format&fit=crop&w=400&q=80' },
- { name: 'Earth', desc: 'Our home planet.', img: 'https://images.unsplash.com/photo-1465101178521-c1a9136a3b99?auto=format&fit=crop&w=400&q=80' },
- { name: 'Mars', desc: 'The red planet.', img: 'https://images.unsplash.com/photo-1462331940025-496dfbfc7564?auto=format&fit=crop&w=400&q=80' },
- { name: 'Jupiter', desc: 'The largest planet.', img: 'https://images.unsplash.com/photo-1465101178521-c1a9136a3b99?auto=format&fit=crop&w=400&q=80' },
-];
+const Welcome: React.FC = () => {
+ // 获取用户信息
+ // const { data: userInfo, loading } = useRequest(async () => {
+ // return { data: await getUserInfo() };
+ // });
-const navItems = ['首页', '资源', '关于', '联系'];
+ const { data: userInfo, loading } = useRequest(async () => {
+ const userRes = await getUserInfo();
+ // 假设 userId 为字符串类型,需要将其转换为数字类型,同时处理可能的 undefined 情况
+ const userId = userRes.user.userId ? parseInt(userRes.user.userId, 10) : 1;
+ const UserplanetRes = await getUserPlanet({ userId });
+ const planetId = UserplanetRes.planetId || 1;
+ const planetRes = await getPlanetInfo({ planetId });
-const Home: React.FC = () => {
- const [search, setSearch] = useState('');
+ return {
+ data: {
+ ...userRes.user,
+ planet: planetRes
+ }
+ };
+ });
- const filteredPlanets = planets.filter(p =>
- p.name.toLowerCase().includes(search.toLowerCase())
- );
+ if (loading) {
+ return <div>loading...</div>;
+ }
- return (
- <div style={{ fontFamily: 'sans-serif', background: 'linear-gradient(to bottom, #0f2027, #2c5364)', minHeight: '100vh', color: '#fff' }}>
- {/* 导航栏 */}
- <nav style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', padding: '24px 48px', background: 'rgba(0,0,0,0.4)' }}>
- <div style={{ fontWeight: 'bold', fontSize: 28, letterSpacing: 2 }}>🌌 PT星球</div>
- <div>
- {navItems.map(item => (
- <a
- key={item}
- href="#"
- style={{
- color: '#fff',
- margin: '0 18px',
- textDecoration: 'none',
- fontSize: 18,
- transition: 'color 0.2s',
- }}
- >
- {item}
- </a>
- ))}
- </div>
- </nav>
+ const currentUser = userInfo;
- {/* 搜索框 */}
- <div style={{ display: 'flex', justifyContent: 'center', margin: '48px 0 32px 0' }}>
- <input
- type="text"
- placeholder="搜索星球资源..."
- value={search}
- onChange={e => setSearch(e.target.value)}
- style={{
- width: 360,
- padding: '12px 20px',
- borderRadius: 24,
- border: 'none',
- fontSize: 18,
- outline: 'none',
- boxShadow: '0 2px 12px rgba(0,0,0,0.2)',
- }}
- />
- </div>
-
- {/* 资源卡片 */}
- <div style={{
- display: 'flex',
- flexWrap: 'wrap',
- justifyContent: 'center',
- gap: '32px',
- padding: '0 48px 48px 48px'
- }}>
- {filteredPlanets.map(planet => (
- <div
- key={planet.name}
- style={{
- background: 'rgba(255,255,255,0.08)',
- borderRadius: 18,
- width: 260,
- boxShadow: '0 4px 24px rgba(0,0,0,0.18)',
- overflow: 'hidden',
- transition: 'transform 0.2s',
- }}
- >
- <img src={planet.img} alt={planet.name} style={{ width: '100%', height: 140, objectFit: 'cover' }} />
- <div style={{ padding: 20 }}>
- <div style={{ fontWeight: 'bold', fontSize: 22, marginBottom: 8 }}>{planet.name}</div>
- <div style={{ fontSize: 16, color: '#cfd8dc' }}>{planet.desc}</div>
- </div>
- </div>
- ))}
- </div>
+ console.log(currentUser)
+ return (
+ <div>
+ <div className="origin">
+ <div className="control">
+ <div className="galaxy">
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ <div className="star"></div>
+ </div>
</div>
- );
+ </div>
+ <div className="main">
+ <div>
+
+ {/* 第一排:悬浮搜索框 */}
+ <div className={styles.searchBarContainer}>
+ <input type="text" placeholder="Search for everything..." className={styles.searchInput} />
+ </div>
+ <div style={{ display: "flex", marginTop: '40px' }}>
+ <div className={styles.leftBox}>
+ <div className={styles.textContent}>
+ <Typography
+ variant="h4"
+ sx={{
+ color: "#fff",
+ fontWeight: 600,
+ mb: 2,
+ letterSpacing: 2,
+ textShadow: "0 2px 16px #0ea5e9",
+ }}
+ >
+ Welcome Back!
+ </Typography>
+
+ <h2 className={styles.titlebox}>{currentUser?.nickName},整点什么?</h2>
+ <Button style={{ width: "100px" }} size='small' type="primary" onClick={() => window.location.href = '/relation'}>我的形象</Button>
+ </div>
+ <div className={styles.gitAnimation}>
+ <img
+ src={`/images/planets/${userInfo?.planet?.filename}.gif`}
+ alt="用户形象"
+ style={{
+ width: 150,
+ height: 150,
+ borderRadius: '50%',
+ border: '2px solid #4a4a7a',
+ boxShadow: '0 0 15px #6a5acd'
+ }}
+ />
+ </div>
+ </div>
+
+ {/* 新增右侧统计卡片(使用Ant Design组件) */}
+ <Card className={styles.rightCard} title="种子统计" bordered={false}>
+ <Row gutter={16}>
+ <Col span={8}>
+ <Statistic title="总种子数" value={128} />
+ </Col>
+ <Col span={8}>
+ <Statistic title="活跃种子" value={42} />
+ </Col>
+ <Col span={8}>
+ <Statistic title="完成种子" value={86} />
+ </Col>
+ </Row>
+ <Divider />
+ </Card>
+ <Card className={styles.rightCard2} >
+
+ <Flex className={styles.buttonGroup}>
+ <div style={{
+ fontSize: '16px',
+ color: '#a8b2d1',
+ letterSpacing: '1px'
+ }}>来看看星球的
+ </div>
+ <div style={{
+ fontSize: '23px',
+ color: '#0abde3',
+ letterSpacing: '1px',
+ fontWeight: 'bold',
+ }}>
+ 种子
+ </div>
+ <Button type="primary" onClick={() => window.location.href = '/torrent-upload'}>新建种子</Button>
+ <Button onClick={() => window.location.href = '/torrent-list'}>我的种子</Button>
+ </Flex>
+ </Card>
+
+ <Card className={styles.rightCard2} >
+
+ <Flex className={styles.buttonGroup}>
+ <div style={{
+ fontSize: '16px',
+ color: '#a8b2d1',
+ letterSpacing: '1px'
+ }}>现在看看星球
+ </div>
+ <div style={{
+ fontSize: '23px',
+ color: '#e1b12c',
+ letterSpacing: '1px',
+ fontWeight: 'bold',
+ }}>
+ 动态
+ </div>
+ <Button color="orange" variant="solid" onClick={() => window.location.href = '/user-center'}>立即创作</Button>
+ <Button onClick={() => window.location.href = '/user-center'}>我的创作</Button>
+ </Flex>
+ </Card>
+
+ </div>
+
+ <div className={styles.homeContainer}>
+
+ {/* 第二排:左侧欢迎信息和右侧通知公告 */}
+ <div className={styles.secondRow}>
+ {/* 左侧框 */}
+ {/* 中间框:最新热点 */}
+ <div className={styles.middleBox}>
+ <div className={styles.hotSpot}>
+ <h3 className={styles.hotTitle}>排行榜动态</h3>
+ <ul className={styles.hotList}>
+ {Array.from({ length: 5 }, (_, i) => (
+ <li key={i} className={styles.hotItem}>
+ <span className={styles.hotItemNumber}>{`${i + 1}`}</span>
+ <span className={styles.hotItemText}>综合榜{`${i + 1}`}</span>
+ </li>
+ ))}
+ </ul>
+ </div>
+ </div>
+
+ {/* 右侧框:通知公告(轮播样式) */}
+ <div className={styles.rightBox}>
+ <div className={styles.carouselContainer}>
+ {/* 轮播内容,这里用几个div模拟 */}
+ <div className={styles.carouselItem}>通知公告 1</div>
+ <div className={styles.carouselItem}>通知公告 2</div>
+ <div className={styles.carouselItem}>通知公告 3</div>
+ </div>
+ </div>
+ </div>
+ {/* 第三排:帖子卡片 */}
+ <div className={styles.thirdRow}>
+ {Array.from({ length: 16 }, (_, i) => (
+ <div className={styles.postCard} key={i}>
+ <div className={styles.cardContent}>
+ <h3 className={styles.postTitle}>模拟帖子标题{`${i + 1}`}(这是一个可能会很长的标题测试单行缩略效果)</h3>
+ <img src="/images/post-cover.jpg" alt="帖子封面" className={styles.cardImage} />
+ <div className={styles.infoWrapper}>
+ <p className={styles.postAuthor}>作者:用户{`${i + 1}`}</p>
+ <div className={styles.tagsContainer}>
+ {['技术', '生活', '分享'].map((tag, idx) => (
+ <span className={styles.tag} key={idx}>{tag}</span>
+ ))}
+ </div>
+ <div className={styles.statsContainer}>
+ <span className={styles.statItem}><LikeOutlined /> {Math.floor(Math.random() * 1000)}</span>
+ <span className={styles.statItem}><HeartOutlined /> {Math.floor(Math.random() * 500)}</span>
+ <span className={styles.statItem}><EyeOutlined /> {Math.floor(Math.random() * 5000)}</span>
+ </div>
+ </div>
+ </div>
+ </div>
+ ))}
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ );
};
-export default Home;
\ No newline at end of file
+export default Welcome;