diff --git a/front/src/MoviePage.js b/front/src/MoviePage.js
new file mode 100644
index 0000000..f8c765c
--- /dev/null
+++ b/front/src/MoviePage.js
@@ -0,0 +1,129 @@
+import React from "react";
+import MovieIcon from "@mui/icons-material/Movie";
+import EmailIcon from "@mui/icons-material/Email";
+import MusicNoteIcon from "@mui/icons-material/MusicNote";
+import EmojiPeopleIcon from "@mui/icons-material/EmojiPeople";
+import SportsEsportsIcon from "@mui/icons-material/SportsEsports";
+import SportsMartialArtsIcon from "@mui/icons-material/SportsMartialArts";
+import PersonIcon from "@mui/icons-material/Person";
+import AccountCircleIcon from "@mui/icons-material/AccountCircle";
+import { useNavigate } from "react-router-dom";
+import "./App.css";
+
+const navItems = [
+  { label: "电影", icon: <MovieIcon />, path: "/movie" },
+  { label: "剧集", icon: <EmailIcon />, path: "/tv" },
+  { label: "音乐", icon: <MusicNoteIcon />, path: "/music" },
+  { label: "动漫", icon: <EmojiPeopleIcon />, path: "/anime" },
+  { label: "游戏", icon: <SportsEsportsIcon />, path: "/game" },
+  { label: "体育", icon: <SportsMartialArtsIcon />, path: "/sport" },
+  { label: "资料", icon: <PersonIcon />, path: "/info" },
+];
+
+const areaTabs = [
+  { label: "大陆", icon: <MovieIcon fontSize="small" /> },
+  { label: "港台", icon: <EmailIcon fontSize="small" /> },
+  { label: "欧美", icon: <PersonIcon fontSize="small" /> },
+  { label: "日韩", icon: <EmojiPeopleIcon fontSize="small" /> },
+  { label: "其他", icon: <PersonIcon fontSize="small" /> },
+];
+
+export default function MoviePage() {
+  const navigate = useNavigate();
+  const [activeTab, setActiveTab] = React.useState(0);
+
+  // 每个tab对应的电影类型
+  const movieTypesList = [
+    ["华语电影（大陆）", "欧美电影", "日韩电影", "港台电影", "其他"], // 大陆
+    ["港台动作", "港台爱情", "港台喜剧", "港台其他"], // 港台
+    ["欧美动作", "欧美科幻", "欧美剧情", "欧美其他"], // 欧美
+    ["日韩动画", "日韩爱情", "日韩其他"], // 日韩
+    ["其他类型1", "其他类型2"] // 其他
+  ];
+  const movieTypes = movieTypesList[activeTab] || [];
+
+  return (
+    <div className="container">
+      {/* 顶部空白与音乐界面一致，用户栏绝对定位在页面右上角 */}
+      <div style={{ height: 80 }} />
+      <div className="user-bar" style={{ position: 'fixed', top: 18, right: 42, zIndex: 100, display: 'flex', alignItems: 'center', background: '#e0f3ff', borderRadius: 12, padding: '6px 18px', boxShadow: '0 2px 8px #b2d8ea', minWidth: 320, minHeight: 48, width: 420 }}>
+        <div style={{ cursor: 'pointer', marginRight: 16 }} onClick={() => navigate('/user')}>
+          <AccountCircleIcon style={{ fontSize: 38, color: '#1a237e', background: '#e0f3ff', borderRadius: '50%' }} />
+        </div>
+        <div style={{ color: '#222', fontWeight: 500, marginRight: 24 }}>用户栏</div>
+        <div style={{ display: 'flex', gap: 28, flex: 1, justifyContent: 'flex-end', alignItems: 'center' }}>
+          <span style={{ color: '#1976d2', fontWeight: 500 }}>魔力值: <b>12345</b></span>
+          <span style={{ color: '#1976d2', fontWeight: 500 }}>分享率: <b>2.56</b></span>
+          <span style={{ color: '#1976d2', fontWeight: 500 }}>上传量: <b>100GB</b></span>
+          <span style={{ color: '#1976d2', fontWeight: 500 }}>下载量: <b>50GB</b></span>
+        </div>
+      </div>
+      {/* 下方内容整体下移，留出与音乐界面一致的间距 */}
+      <div style={{ height: 32 }} />
+      <nav className="nav-bar card">
+        {navItems.map((item) => (
+          <div
+            key={item.label}
+            className={item.label === "电影" ? "nav-item active" : "nav-item"}
+            onClick={() => navigate(item.path)}
+          >
+            {item.icon}
+            <span>{item.label}</span>
+          </div>
+        ))}
+      </nav>
+      <div className="search-section card">
+        <input className="search-input" placeholder="输入搜索关键词" />
+        <button className="search-btn">
+          <span role="img" aria-label="search">🔍</span>
+        </button>
+      </div>
+      <div className="area-tabs" style={{ display: 'flex', justifyContent: 'center', gap: 24, margin: '18px 0' }}>
+        {areaTabs.map((tab, idx) => (
+          <div
+            key={tab.label}
+            className={activeTab === idx ? "area-tab active" : "area-tab"}
+            onClick={() => setActiveTab(idx)}
+          >
+            {tab.icon} <span>{tab.label}</span>
+          </div>
+        ))}
+      </div>
+      <div className="table-section">
+        <table className="movie-table">
+          <thead>
+            <tr>
+              <th>电影类型</th>
+              <th>标题</th>
+              <th>发布者</th>
+            </tr>
+          </thead>
+          <tbody>
+            {movieTypes.map(type => (
+              <tr key={type}>
+                <td>{type}</td>
+                <td></td>
+                <td></td>
+              </tr>
+            ))}
+          </tbody>
+        </table>
+      </div>
+      <div style={{ height: 32 }} />
+      <Pagination />
+    </div>
+  );
+}
+
+function Pagination() {
+  const [page, setPage] = React.useState(3);
+  const total = 5;
+  return (
+    <div className="pagination">
+      <button onClick={() => setPage(p => Math.max(1, p - 1))} disabled={page === 1}>上一页</button>
+      <span className="page-num">{page}/{total}</span>
+      <button onClick={() => setPage(p => Math.min(total, p + 1))} disabled={page === total}>下一页</button>
+      <span className="page-info">第 <b>{page}</b> 页</span>
+    </div>
+  );
+}
