diff --git a/backend/competition/serializers.py b/backend/competition/serializers.py
index c778af2..219403b 100644
--- a/backend/competition/serializers.py
+++ b/backend/competition/serializers.py
@@ -27,12 +27,16 @@ class CompetitionSerializer(serializers.ModelSerializer):
class CompetitionEnrollmentSerializer(serializers.ModelSerializer):
user = WeChatUserSerializer(read_only=True)
+ competition_title = serializers.SerializerMethodField()
class Meta:
model = CompetitionEnrollment
- fields = ['id', 'competition', 'user', 'role', 'status', 'created_at']
+ fields = ['id', 'competition', 'competition_title', 'user', 'role', 'status', 'created_at']
read_only_fields = ['status']
+ def get_competition_title(self, obj):
+ return obj.competition.title if obj.competition else ''
+
class ProjectFileSerializer(serializers.ModelSerializer):
file_url_display = serializers.SerializerMethodField()
diff --git a/miniprogram/src/pages/competition/project.tsx b/miniprogram/src/pages/competition/project.tsx
index f8425b5..34bf7ea 100644
--- a/miniprogram/src/pages/competition/project.tsx
+++ b/miniprogram/src/pages/competition/project.tsx
@@ -1,7 +1,7 @@
import { View, Text, Button, Image, Input, Textarea, Picker } from '@tarojs/components'
import Taro, { useLoad, useShareAppMessage, useShareTimeline, useRouter } from '@tarojs/taro'
import { useState } from 'react'
-import { getProjectDetail, createProject, updateProject, uploadProjectFile, submitProject, uploadMedia, getCompetitions, deleteProjectFile } from '../../api'
+import { getProjectDetail, createProject, updateProject, uploadProjectFile, submitProject, uploadMedia, getCompetitions, deleteProjectFile, getMyEnrollments } from '../../api'
import './project.scss'
export default function ProjectEdit() {
@@ -56,12 +56,21 @@ export default function ProjectEdit() {
const fetchCompetitions = async () => {
try {
- const res = await getCompetitions()
- if (res && res.results) {
- setCompetitions(res.results)
+ const res = await getMyEnrollments()
+ if (res && res.length > 0) {
+ const approvedEnrollments = res.filter((enrollment: any) => enrollment.status === 'approved')
+ const competitions = approvedEnrollments.map((enrollment: any) => ({
+ id: enrollment.competition,
+ title: enrollment.competition_title || '',
+ status: enrollment.status
+ }))
+ setCompetitions(competitions)
+ } else {
+ setCompetitions([])
}
} catch (e) {
console.error('获取比赛列表失败', e)
+ setCompetitions([])
}
}
@@ -317,11 +326,11 @@ export default function ProjectEdit() {
style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', padding: '10px', background: '#f8f8f8', marginBottom: '8px', borderRadius: '4px' }}
onClick={() => handlePreviewFile(file)}
>
- {file.name || '未知文件'}
+ {file.name || '未知文件'}
{ e.stopPropagation(); handleDeleteFile(file.id) }}>删除
))}
- {(!project.files || project.files.length === 0) && 暂无附件 (PDF/PPT/视频)}
+ {(!project.files || project.files.length === 0) && 暂无附件 (PDF/PPT/视频)}