blob: 421e0ddee3bb13c495b4a1ab03f984b816eda21b [file] [log] [blame]
223011339e292152025-06-08 00:34:37 +08001import React, { useState, useEffect } from "react";
wht338fc032025-06-09 17:16:22 +08002import HomeIcon from "@mui/icons-material/Home";
956303669a32fc2c2025-06-02 19:45:53 +08003import MovieIcon from "@mui/icons-material/Movie";
TRM-codingfa3ffdf2025-06-09 22:47:42 +08004import TvIcon from "@mui/icons-material/Tv";
956303669a32fc2c2025-06-02 19:45:53 +08005import MusicNoteIcon from "@mui/icons-material/MusicNote";
TRM-codingfa3ffdf2025-06-09 22:47:42 +08006import AnimationIcon from "@mui/icons-material/Animation";
956303669a32fc2c2025-06-02 19:45:53 +08007import SportsEsportsIcon from "@mui/icons-material/SportsEsports";
8import SportsMartialArtsIcon from "@mui/icons-material/SportsMartialArts";
9import PersonIcon from "@mui/icons-material/Person";
10import AccountCircleIcon from "@mui/icons-material/AccountCircle";
2230113338fd3882025-06-06 23:33:57 +080011import ForumIcon from "@mui/icons-material/Forum";
whtdc90a032025-06-08 03:03:52 +080012import HelpIcon from "@mui/icons-material/Help";
wht338fc032025-06-09 17:16:22 +080013import { useNavigate } from "react-router-dom";
TRM-codingfa3ffdf2025-06-09 22:47:42 +080014import "./SharedStyles.css";
223011330f9623f2025-06-06 00:22:05 +080015import { API_BASE_URL } from "./config";
956303669a32fc2c2025-06-02 19:45:53 +080016
TRM-codingfa3ffdf2025-06-09 22:47:42 +080017// 导航栏
956303669a32fc2c2025-06-02 19:45:53 +080018const navItems = [
TRM-codingfa3ffdf2025-06-09 22:47:42 +080019 { label: "首页", icon: <HomeIcon className="emerald-nav-icon" />, path: "/home", type: "home" },
20 { label: "电影", icon: <MovieIcon className="emerald-nav-icon" />, path: "/movie", type: "movie" },
21 { label: "剧集", icon: <TvIcon className="emerald-nav-icon" />, path: "/tv", type: "tv" },
22 { label: "音乐", icon: <MusicNoteIcon className="emerald-nav-icon" />, path: "/music", type: "music" },
23 { label: "动漫", icon: <AnimationIcon className="emerald-nav-icon" />, path: "/anime", type: "anime" },
24 { label: "游戏", icon: <SportsEsportsIcon className="emerald-nav-icon" />, path: "/game", type: "game" },
25 { label: "体育", icon: <SportsMartialArtsIcon className="emerald-nav-icon" />, path: "/sport", type: "sport" },
26 { label: "资料", icon: <PersonIcon className="emerald-nav-icon" />, path: "/info", type: "info" },
27 { label: "论坛", icon: <ForumIcon className="emerald-nav-icon" />, path: "/forum", type: "forum" },
28 { label: "发布", icon: <AccountCircleIcon className="emerald-nav-icon" />, path: "/publish", type: "publish" },
29 { label: "求种", icon: <HelpIcon className="emerald-nav-icon" />, path: "/begseed", type: "help" },
956303669a32fc2c2025-06-02 19:45:53 +080030];
31
TRM-codingfa3ffdf2025-06-09 22:47:42 +080032// 电影地区标签
956303669a32fc2c2025-06-02 19:45:53 +080033const areaTabs = [
TRM-codingfa3ffdf2025-06-09 22:47:42 +080034 { label: "华语电影", value: "chinese" },
35 { label: "港台电影", value: "hk_tw" },
36 { label: "欧美电影", value: "western" },
37 { label: "日韩电影", value: "jp_kr" },
38 { label: "其他电影", value: "others" }
9563036699e95ae32025-06-02 21:42:11 +080039];
40
956303669a32fc2c2025-06-02 19:45:53 +080041export default function MoviePage() {
TRM-codingfa3ffdf2025-06-09 22:47:42 +080042 const navigate = useNavigate();
43 const [searchText, setSearchText] = React.useState('');
44 const [userInfo, setUserInfo] = useState({ avatar_url: '', username: '' });
45 const [userPT, setUserPT] = useState({ magic: 0, ratio: 0, upload: 0, download: 0 });
46 const [activeTab, setActiveTab] = React.useState(0);
47 const [movieList, setMovieList] = React.useState([]);
223011339e292152025-06-08 00:34:37 +080048
TRM-codingfa3ffdf2025-06-09 22:47:42 +080049 useEffect(() => {
50 const match = document.cookie.match('(^|;)\\s*userId=([^;]+)');
51 const userId = match ? match[2] : null;
52 if (!userId) return;
53 fetch(`${API_BASE_URL}/api/get-userpt?userid=${encodeURIComponent(userId)}`)
54 .then(res => res.json())
55 .then(data => {
56 setUserInfo({ avatar_url: data.user.avatar_url, username: data.user.username });
57 setUserPT({
58 magic: data.magic_value || data.magic || 0,
59 ratio: data.share_ratio || data.share || 0,
60 upload: data.upload_amount || data.upload || 0,
61 download: data.download_amount || data.download || 0,
62 });
63 })
64 .catch(err => console.error('Fetching user profile failed', err));
65 }, []);
956303669a32fc2c2025-06-02 19:45:53 +080066
TRM-codingfa3ffdf2025-06-09 22:47:42 +080067 // 每个tab对应的电影类型
68 const movieTypesList = [
69 ["华语电影(大陆)", "欧美电影", "日韩电影", "港台电影", "其他"], // 大陆
70 ["港台动作", "港台爱情", "港台喜剧", "港台其他"], // 港台
71 ["欧美动作", "欧美科幻", "欧美剧情", "欧美其他"], // 欧美
72 ["日韩动画", "日韩爱情", "日韩其他"], // 日韩
73 ["其他类型1", "其他类型2"] // 其他
74 ];
75 const movieTypes = movieTypesList[activeTab] || [];
956303669a32fc2c2025-06-02 19:45:53 +080076
TRM-codingfa3ffdf2025-06-09 22:47:42 +080077 React.useEffect(() => {
78 const area = areaTabs[activeTab].label;
79 fetch(`${API_BASE_URL}/api/get-seed-list-by-tag?tag=${encodeURIComponent(area)}`)
80 .then(res => res.json())
81 .then(data => {
82 setMovieList(data);
83 })
84 .catch(() => setMovieList([]));
85 }, [activeTab]);
rhjc6a4ee02025-06-06 00:45:18 +080086
TRM-codingfa3ffdf2025-06-09 22:47:42 +080087 // 搜索按钮处理
88 const handleSearch = () => {
89 const area = areaTabs[activeTab].label;
90 fetch(`${API_BASE_URL}/api/search-seeds?tag=${encodeURIComponent(area)}&keyword=${encodeURIComponent(searchText)}`)
91 .then(res => res.json())
92 .then(data => {
93 setMovieList(data);
94 })
95 .catch(() => setMovieList([]));
96 };
223011339e292152025-06-08 00:34:37 +080097
TRM-codingfa3ffdf2025-06-09 22:47:42 +080098 return (
99 <div className="emerald-home-container">
100 {/* 流星雨背景效果 */}
101 <div className="meteor-shower">
102 <div className="meteor">💫</div>
103 <div className="meteor">⭐</div>
104 <div className="meteor">✨</div>
105 <div className="meteor">🌟</div>
106 <div className="meteor">💫</div>
107 <div className="meteor">⭐</div>
108 <div className="meteor">✨</div>
109 <div className="meteor">🌟</div>
110 <div className="meteor">💫</div>
111 <div className="meteor">⭐</div>
112 </div>
113
114 {/* 浮动园林装饰元素 */}
115 <div className="floating-garden-elements">
116 <div className="garden-element">🌿</div>
117 <div className="garden-element">🦋</div>
118 <div className="garden-element">🌺</div>
119 <div className="garden-element">🌸</div>
120 </div>
121
122 <div className="emerald-content">
123 {/* NeuraFlux用户栏 */}
124 <div className="emerald-user-bar">
125 <div className="emerald-user-avatar" onClick={() => navigate('/user')}>
126 <AccountCircleIcon style={{ fontSize: 38, color: 'white' }} />
127 </div>
128 <div className="emerald-brand-section">
129 <div className="emerald-brand-icon">⚡</div>
130 <div className="emerald-user-label">NeuraFlux</div>
131 </div>
132 <div className="emerald-user-stats">
133 <span className="emerald-stat-item">
134 魔力值: <span className="emerald-stat-value">12,345</span>
135 </span>
136 <span className="emerald-stat-item">
137 分享率: <span className="emerald-stat-value">2.56</span>
138 </span>
139 <span className="emerald-stat-item">
140 上传: <span className="emerald-stat-value">100GB</span>
141 </span>
142 <span className="emerald-stat-item">
143 下载: <span className="emerald-stat-value">50GB</span>
144 </span>
145 </div>
146 </div>
147
148 {/* NeuraFlux导航栏 */}
149 <nav className="emerald-nav-bar">
150 {navItems.map((item) => (
151 <div
152 key={item.label}
153 className={`emerald-nav-item ${item.label === "电影" ? "active" : ""}`}
154 data-type={item.type}
155 onClick={() => navigate(item.path)}
156 >
157 {item.icon}
158 <span className="emerald-nav-label">{item.label}</span>
159 </div>
160 ))}
161 </nav>
162
163 {/* 电影内容区域 */}
164 <div className="emerald-content-section">
165 <h1 className="emerald-page-title">🎬 电影资源</h1>
166 <p style={{ textAlign: 'center', color: '#2d5016', fontSize: '18px' }}>
167 欢迎来到NeuraFlux电影频道,这里有最新最热门的电影资源
168 </p>
169 </div>
170 </div>
956303669a32fc2c2025-06-02 19:45:53 +0800171 </div>
TRM-codingfa3ffdf2025-06-09 22:47:42 +0800172 );
956303669a32fc2c2025-06-02 19:45:53 +0800173}