修正獎勵評審資訊、評分資訊

This commit is contained in:
2025-09-27 17:24:26 +08:00
parent b06fd94c99
commit 88c3fde372
11 changed files with 2399 additions and 459 deletions

View File

@@ -148,7 +148,7 @@ export default function AIShowcasePlatform() {
canAccessAdmin,
} = useAuth()
const { competitions, awards, getAwardsByYear, getCompetitionRankings } = useCompetition()
const { competitions, awards, getAwardsByYear, getCompetitionRankings, loadingAwards, getAvailableYears } = useCompetition()
const [showLogin, setShowLogin] = useState(false)
const [showRegister, setShowRegister] = useState(false)
@@ -193,6 +193,17 @@ export default function AIShowcasePlatform() {
showAwardDetail
});
// 動態設定初始年份
useEffect(() => {
if (awards.length > 0 && selectedYear === 2024) {
const availableYears = getAvailableYears();
if (availableYears.length > 0) {
setSelectedYear(availableYears[0]);
console.log('🎯 自動設定年份為:', availableYears[0]);
}
}
}, [awards, selectedYear, getAvailableYears]);
// 載入應用數據
const loadApps = async () => {
try {
@@ -595,8 +606,11 @@ export default function AIShowcasePlatform() {
<SelectValue />
</SelectTrigger>
<SelectContent>
<SelectItem value="2024">2024</SelectItem>
<SelectItem value="2023">2023</SelectItem>
{getAvailableYears().map((year) => (
<SelectItem key={year} value={year.toString()}>
{year}
</SelectItem>
))}
</SelectContent>
</Select>
</div>
@@ -720,24 +734,26 @@ export default function AIShowcasePlatform() {
{/* Statistics */}
<div className="grid grid-cols-2 md:grid-cols-4 gap-4 mt-4">
<div className="text-center p-3 bg-blue-50 rounded-lg">
<div className="text-lg font-bold text-blue-600">{filteredAwards.length}</div>
<div className="text-lg font-bold text-blue-600">
{loadingAwards ? '...' : filteredAwards.length}
</div>
<div className="text-xs text-blue-600"></div>
</div>
<div className="text-center p-3 bg-yellow-50 rounded-lg">
<div className="text-lg font-bold text-yellow-600">
{filteredAwards.filter((a) => a.rank > 0 && a.rank <= 3).length}
{loadingAwards ? '...' : filteredAwards.filter((a) => a.rank > 0 && a.rank <= 3).length}
</div>
<div className="text-xs text-yellow-600"></div>
</div>
<div className="text-center p-3 bg-red-50 rounded-lg">
<div className="text-lg font-bold text-red-600">
{filteredAwards.filter((a) => a.awardType === "popular").length}
{loadingAwards ? '...' : filteredAwards.filter((a) => a.awardType === "popular").length}
</div>
<div className="text-xs text-red-600"></div>
</div>
<div className="text-center p-3 bg-green-50 rounded-lg">
<div className="text-lg font-bold text-green-600">
{new Set(filteredAwards.map((a) => `${a.year}-${a.month}`)).size}
{loadingAwards ? '...' : new Set(filteredAwards.map((a) => `${a.year}-${a.month}`)).size}
</div>
<div className="text-xs text-green-600"></div>
</div>
@@ -747,7 +763,12 @@ export default function AIShowcasePlatform() {
</Card>
{/* Awards Grid with Enhanced Display */}
{filteredAwards.length > 0 ? (
{loadingAwards ? (
<div className="text-center py-12">
<div className="animate-spin rounded-full h-12 w-12 border-b-2 border-blue-600 mx-auto mb-4"></div>
<p className="text-gray-600">...</p>
</div>
) : filteredAwards.length > 0 ? (
<div className="space-y-8">
{/* Group awards by month */}
{Array.from(new Set(filteredAwards.map((award) => award.month)))