This commit is contained in:
@@ -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' })
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user