比赛
All checks were successful
Deploy to Server / deploy (push) Successful in 37s

This commit is contained in:
jeremygan2021
2026-03-10 13:47:28 +08:00
parent af763b1bee
commit 3d74ccc04f
9 changed files with 470 additions and 27 deletions

View File

@@ -1,6 +1,6 @@
import React, { useState } from 'react';
import { useParams, useNavigate } from 'react-router-dom';
import { useQuery } from '@tanstack/react-query';
import { useQuery, useQueryClient } from '@tanstack/react-query';
import { Typography, Tabs, Button, Row, Col, Card, Statistic, Tag, Descriptions, Empty, message, Spin } from 'antd';
import { CalendarOutlined, TrophyOutlined, UserOutlined, FileTextOutlined, CloudUploadOutlined, CopyOutlined, CheckOutlined } from '@ant-design/icons';
import ReactMarkdown from 'react-markdown';
@@ -79,6 +79,7 @@ const CodeBlock = ({ inline, className, children, ...props }) => {
const CompetitionDetail = () => {
const { id } = useParams();
const navigate = useNavigate();
const queryClient = useQueryClient();
const { user, showLoginModal } = useAuth();
const [activeTab, setActiveTab] = useState('details');
const [submissionModalVisible, setSubmissionModalVisible] = useState(false);
@@ -104,6 +105,15 @@ const CompetitionDetail = () => {
retry: false
});
// Fetch my project if enrolled
const { data: myProjects, isLoading: loadingMyProject } = useQuery({
queryKey: ['myProject', id, enrollment?.id],
queryFn: () => getProjects({ competition: id, contestant: enrollment.id }).then(res => res.data),
enabled: !!enrollment?.id
});
const myProject = myProjects?.results?.[0];
const handleEnroll = async () => {
if (!user) {
showLoginModal();
@@ -297,8 +307,15 @@ const CompetitionDetail = () => {
</Button>
)}
{isContestant && (
<Button icon={<CloudUploadOutlined />} onClick={() => setSubmissionModalVisible(true)}>
提交/管理作品
<Button
icon={<CloudUploadOutlined />}
loading={loadingMyProject}
onClick={() => {
setEditingProject(myProject || null);
setSubmissionModalVisible(true);
}}
>
{myProject ? '管理/修改作品' : '提交作品'}
</Button>
)}
</div>
@@ -325,6 +342,8 @@ const CompetitionDetail = () => {
setSubmissionModalVisible(false);
setEditingProject(null);
// Refetch projects
queryClient.invalidateQueries(['projects']);
queryClient.invalidateQueries(['myProject']);
}}
/>
)}