From baddf406f0282fc9389d1748438393254a786705 Mon Sep 17 00:00:00 2001 From: AeCw Date: Tue, 23 Dec 2025 14:52:06 +0800 Subject: [PATCH] update --- app/components/MonthlyChallengeTable.tsx | 42 +++--- app/page.tsx | 12 +- app/photos/page.tsx | 181 ++++++++++------------- public/level_1.png | Bin 0 -> 1380 bytes public/level_2.png | Bin 0 -> 1388 bytes public/level_3.png | Bin 0 -> 1344 bytes public/level_4.png | Bin 0 -> 1376 bytes public/level_5.png | Bin 0 -> 1350 bytes 8 files changed, 99 insertions(+), 136 deletions(-) create mode 100644 public/level_1.png create mode 100644 public/level_2.png create mode 100644 public/level_3.png create mode 100644 public/level_4.png create mode 100644 public/level_5.png diff --git a/app/components/MonthlyChallengeTable.tsx b/app/components/MonthlyChallengeTable.tsx index 8165b31..1441050 100644 --- a/app/components/MonthlyChallengeTable.tsx +++ b/app/components/MonthlyChallengeTable.tsx @@ -105,24 +105,21 @@ export default function MonthlyChallengeTable({ - - - - - - @@ -131,7 +128,7 @@ export default function MonthlyChallengeTable({ key={challenge.id} className={`border-b ${darkMode ? 'border-gray-800 hover:bg-gray-700' : 'border-gray-100 hover:bg-gray-50'} transition-colors`} > - - - - - - ))} diff --git a/app/page.tsx b/app/page.tsx index eaaedcd..a07085f 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -72,18 +72,8 @@ export default function HomePage() { {/* 页面标题和刷新按钮 */}

- 每月课题数据 + 每月课题

- - {!isLoading && ( - - )}
{/* 加载状态 */} diff --git a/app/photos/page.tsx b/app/photos/page.tsx index 29194ca..84ff163 100644 --- a/app/photos/page.tsx +++ b/app/photos/page.tsx @@ -2,12 +2,12 @@ import { useState, useEffect, useCallback, useRef } from 'react'; import Navbar from '@/app/components/Navbar'; -import Sidebar from '@/app/components/Sidebar'; import PhotoGallery from '@/app/components/PhotoGallery'; import PhotoDetailModal from '@/app/components/PhotoDetailModal'; import ImageModal from '@/app/components/ImageModal'; import { Photo, Pagination } from '@/app/types'; import { fetchPhotos } from '@/app/lib/api'; +import { Search } from 'lucide-react'; export default function PhotosPage() { const [photos, setPhotos] = useState([]); @@ -16,8 +16,6 @@ export default function PhotosPage() { const [searchQuery, setSearchQuery] = useState(''); const [sortBy, setSortBy] = useState('newest'); const [darkMode, setDarkMode] = useState(false); - const [sidebarCollapsed, setSidebarCollapsed] = useState(false); - const [mobileMenuOpen, setMobileMenuOpen] = useState(false); const [pagination, setPagination] = useState({ page: 1, limit: 20, @@ -101,7 +99,8 @@ export default function PhotosPage() { // 处理排序变化 const handleSortChange = useCallback((value: string) => { setSortBy(value); - }, []); + fetchPhotosData(1, false); + }, [fetchPhotosData]); // 切换暗色模式 const toggleDarkMode = () => { @@ -116,21 +115,6 @@ export default function PhotosPage() { }); }; - // 切换侧边栏收缩状态 - const toggleSidebar = () => { - setSidebarCollapsed(!sidebarCollapsed); - }; - - // 切换移动端菜单 - const toggleMobileMenu = () => { - setMobileMenuOpen(!mobileMenuOpen); - }; - - // 关闭移动端菜单 - const closeMobileMenu = () => { - setMobileMenuOpen(false); - }; - // 打开图片模态框(点击卡片时) const openImageModal = (photo: Photo) => { setSelectedPhoto(photo); @@ -165,99 +149,90 @@ export default function PhotosPage() { return (
{/* 导航栏 */} - + - {/* 移动端菜单遮罩 */} - {mobileMenuOpen && ( -
- )} + {/* 主内容区域 */} +
+ {/* 顶部控制栏 */} +
+
+
+ {/* 搜索表单 */} +
+
+ + setSearchQuery(e.target.value)} + placeholder="搜索标题或日期..." + className="w-full pl-10 pr-4 py-2 rounded-lg border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-800 text-gray-900 dark:text-white focus:ring-2 focus:ring-blue-500 focus:border-transparent" + /> +
+ + - {/* 移动端侧边栏菜单 */} -
-
-
-

- 照片展示系统 -

- + {/* 排序选项 */} +
+ + +
+ + {/* 桌面端搜索按钮 */} + +
- {/* 移动端侧边栏内容 */} -
-
- {/* 桌面端布局 */} -
- {/* 桌面端侧边栏 */} - +
- {/* 主内容区域 */} -
- -
+ {/* 图片模态框 */} + - {/* 图片模态框 */} - - - {/* 照片详情抽屉 */} - -
+ {/* 照片详情抽屉 */} +
); } diff --git a/public/level_1.png b/public/level_1.png new file mode 100644 index 0000000000000000000000000000000000000000..68fbab76e70e6f46df8fbb48a99850e8a32afb85 GIT binary patch literal 1380 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 literal 0 HcmV?d00001 diff --git a/public/level_5.png b/public/level_5.png new file mode 100644 index 0000000000000000000000000000000000000000..dc85276e82b62003a8fc58e1a59fa0b68dd394bd GIT binary patch literal 1350 zcmeAS@N?(olHy`uVBq!ia0vp^YCx>Q!3-oXY44a0q!^2X+?^P2p46!aaySb-B8wRq zxP?KOkzv*x37~@O0X`wFKuHK-WMqUf8IajxMW#!1oNC5!>1qB5U4-cShOG`^Z zK|xzvTXuFfMDc%}q}%!cMNzQLa{BEXKtlWXFyjK$Y_H z^6QrG$uv1uWOh5p>9Yy zJj-KAjLxP))7yo?OOwnt%kkMjEVYoyF_FjsvVma&^tiifTb14OzPLxzvmOIQB6OE8 ztAF|J)8A$F&;S4bU*&u!P<2kG+40@8->+_eb$HeLsTog!dN1t#+~W6OTE>&d*T1(0 zJx~&~uX4Ko?bE-OfCmf8pWi(BRh(M~sLWZR{`KQu%bQ+SIo&DeZEu^^rf75~w&i~#C zluw@?Y|?&e_kS73|633K|8M{Q|AE{8|Nr~Hg9YdXAo%w`2Sj;K1CcPW8pil<2xhs! z_y!IC{})1JPs7AO^ergoACUf+4(5QF|NlP$a*j<|nfB}VBz5CyFXl!vFfhe?x;TbZ z%$a-HJ3}~7gzdq9m9r{p$DSq5mhh6kB=BnUkEVAqT{{XwPb@1@Y7ScBB_*7ENo}Tz+Te|K-=hTzPeHy?TISAR^rxBXzQ%k?uk zue6iwE4S#H_N6y|Q2X{O%`DJG>F{?B!S8~(pNmVF)#GMFa!fW&d%Wq9-K1cfL&|Bs zZ!SfDxZfvu@^sqc)2=huO!eJ=%yON%^Tb8T%27vus_$L%rhTU<|GGod3^(0;zGK4Q zc(J;+?*864o8~Nti}TsxwJ+R$(NyzItM@d!oZZxT^yhBTk|MWfa~h{F*=D?W}O70u+^~@OcnRnFOH7T`s{h~!){~OxN!O0qB#>*oBd!FK0PD) z!p&axlP{!u`qFMs6`8_wv#W4$LQyXn)b;DEKt3s!a6Q(W=j?zYOO1 zm7ZUB=83W8_B_)&=k7g?`gb+;`!s|7*TNIK-X%QTb?BXbk5FAeK|2VI|GyX1=f k4W-zH?%sdfjko@^Pk(#(V8cSi22h6aboFyt=akR{0C=Tf6#xJL literal 0 HcmV?d00001
+ 歌曲 + 难度 + 星数 + 过关分数 + 奖励 - 创建时间 -
+
{challenge.songTitleCn} @@ -143,33 +140,34 @@ export default function MonthlyChallengeTable({ )}
-
- - 难度{challenge.difficulty} +
+
+ {`难度
+
- {challenge.stars.toFixed(1)} + {challenge.stars.toFixed(1)}
+
- {formatScore(challenge.requiredScore)} + {formatScore(challenge.requiredScore)}
+
- {formatReward(challenge)} + {formatReward(challenge)}
- {new Date(challenge.createdAt).toLocaleDateString('zh-CN')} -