比赛
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

@@ -2,7 +2,7 @@ import { View, Text, Image, Button, Checkbox, CheckboxGroup, RichText } from '@t
import Taro, { useDidShow, usePullDownRefresh } from '@tarojs/taro'
import { useState } from 'react'
import { login as silentLogin } from '../../utils/request'
import { getMyEnrollments } from '../../api'
import { getMyEnrollments, getProjects } from '../../api'
import './index.scss'
export default function UserIndex() {
@@ -11,12 +11,13 @@ export default function UserIndex() {
const [isAgreed, setIsAgreed] = useState(false)
const [showAgreement, setShowAgreement] = useState(false) // For showing agreement content
const [myEnrollments, setMyEnrollments] = useState<any[]>([])
const [myProjects, setMyProjects] = useState<any[]>([])
useDidShow(() => {
const info = Taro.getStorageSync('userInfo')
if (info) {
setUserInfo(info)
fetchEnrollments()
fetchData()
}
})
@@ -25,7 +26,7 @@ export default function UserIndex() {
const res = await silentLogin()
if (res) {
setUserInfo(res)
fetchEnrollments()
fetchData()
}
Taro.stopPullDownRefresh()
} catch (e) {
@@ -34,14 +35,28 @@ export default function UserIndex() {
}
})
const fetchEnrollments = async () => {
const fetchData = async () => {
try {
const res = await getMyEnrollments()
if (Array.isArray(res)) {
setMyEnrollments(res)
const [enrollRes, projectRes] = await Promise.all([
getMyEnrollments(),
getProjects()
])
let enrollments: any[] = []
if (Array.isArray(enrollRes)) {
enrollments = enrollRes
setMyEnrollments(enrollRes)
}
const allProjects = (projectRes.results || projectRes) as any[]
if (Array.isArray(allProjects) && enrollments.length > 0) {
// 筛选出属于我的项目 (通过 enrollment id 匹配)
const myEnrollmentIds = enrollments.map(e => e.id)
const mine = allProjects.filter(p => myEnrollmentIds.includes(p.contestant))
setMyProjects(mine)
}
} catch (e) {
console.error('Fetch enrollments failed', e)
console.error('Fetch data failed', e)
}
}
@@ -56,11 +71,21 @@ export default function UserIndex() {
const goUploadProject = () => {
// 找到所有有效的选手报名
const contestantEnrollments = myEnrollments.filter(e => e.role === 'contestant')
if (contestantEnrollments.length === 1) {
// 如果只有一个,直接去详情页
Taro.navigateTo({ url: `/pages/competition/detail?id=${contestantEnrollments[0].competition}` })
const enrollment = contestantEnrollments[0]
// 查找该报名对应的项目
const project = myProjects.find(p => p.contestant === enrollment.id)
if (project) {
// 已有项目,去编辑
Taro.navigateTo({ url: `/pages/competition/project?id=${project.id}` })
} else {
// 无项目,去新建
Taro.navigateTo({ url: `/pages/competition/project?competitionId=${enrollment.competition}` })
}
} else {
// 否则去列表页
// 多个比赛或无比赛,去列表页让用户选
Taro.navigateTo({ url: '/pages/competition/index' })
}
}