This commit is contained in:
2025-12-14 17:39:19 +08:00
parent 0f3cfee622
commit 78291bb76b
12 changed files with 181 additions and 44 deletions

View File

@@ -94,15 +94,6 @@
<text class="toast-text">{{ toastMessage }}</text> <text class="toast-text">{{ toastMessage }}</text>
</view> </view>
<!-- 提示文字 -->
<view class="info-text">
<text class="info-hint">默认关闭可切换开关</text>
</view>
<view class="warning-text">
<text>联系人用于接收比赛信息成绩和证书</text>
</view>
<!-- 按钮 --> <!-- 按钮 -->
<view class="btn-wrapper"> <view class="btn-wrapper">
<view class="btn save-btn disabled" v-if="!isFormValid">保存</view> <view class="btn save-btn disabled" v-if="!isFormValid">保存</view>
@@ -219,7 +210,7 @@ export default {
} }
.form-label { .form-label {
width: 180rpx; width: 280rpx;
font-size: 30rpx; font-size: 30rpx;
color: #333333; color: #333333;
} }

View File

@@ -126,6 +126,8 @@ export default {
organization: '', organization: '',
phone: '' phone: ''
}, },
competitionId: '',
projectIds: [],
errors: [], errors: [],
showHint: false, showHint: false,
showToast: false, showToast: false,
@@ -133,6 +135,19 @@ export default {
showIdTypePicker: false showIdTypePicker: false
}; };
}, },
onLoad(options) {
// 接收赛事ID和项目ID
if (options.competitionId) {
this.competitionId = options.competitionId
}
if (options.projectIds) {
this.projectIds = options.projectIds.split(',').map(id => parseInt(id))
}
console.log('新增选手页面接收参数:', {
competitionId: this.competitionId,
projectIds: this.projectIds
})
},
computed: { computed: {
isFormValid() { isFormValid() {
return ( return (
@@ -252,7 +267,7 @@ export default {
const info = this.extractInfoFromIdCard(this.formData.idCard) const info = this.extractInfoFromIdCard(this.formData.idCard)
// 调用API保存选手信息使用后端实体类的字段名 // 调用API保存选手信息使用后端实体类的字段名
await athleteAPI.submitAthlete({ const submitData = {
playerName: this.formData.name, playerName: this.formData.name,
idCard: this.formData.idCard, idCard: this.formData.idCard,
teamName: this.formData.team, teamName: this.formData.team,
@@ -262,7 +277,19 @@ export default {
gender: info.gender, gender: info.gender,
age: info.age, age: info.age,
birthDate: info.birthDate birthDate: info.birthDate
}) }
// 如果有赛事ID和项目ID一起提交
if (this.competitionId) {
submitData.competitionId = parseInt(this.competitionId)
}
if (this.projectIds && this.projectIds.length > 0) {
// 如果有多个项目取第一个项目ID
submitData.projectId = this.projectIds[0]
}
console.log('提交选手数据:', submitData)
await athleteAPI.submitAthlete(submitData)
// 保存成功 // 保存成功
uni.showToast({ uni.showToast({
@@ -415,9 +442,9 @@ export default {
.btn { .btn {
width: 100%; width: 100%;
text-align: center; text-align: center;
padding: 30rpx; padding: 24rpx;
border-radius: 12rpx; border-radius: 12rpx;
font-size: 32rpx; font-size: 30rpx;
font-weight: bold; font-weight: bold;
} }

View File

@@ -60,6 +60,7 @@
import CustomTabs from '../../components/custom-tabs/custom-tabs.vue'; import CustomTabs from '../../components/custom-tabs/custom-tabs.vue';
import ConfirmModal from '../../components/confirm-modal/confirm-modal.vue'; import ConfirmModal from '../../components/confirm-modal/confirm-modal.vue';
import athleteAPI from '@/api/athlete.js'; import athleteAPI from '@/api/athlete.js';
import { getUserInfo } from '@/utils/auth.js';
export default { export default {
components: { components: {
@@ -89,9 +90,21 @@ export default {
*/ */
async loadPlayerList() { async loadPlayerList() {
try { try {
// 获取当前用户信息
const userInfo = getUserInfo()
if (!userInfo || !userInfo.userId) {
console.error('未获取到用户信息')
uni.showToast({
title: '请先登录',
icon: 'none'
})
return
}
const res = await athleteAPI.getAthleteList({ const res = await athleteAPI.getAthleteList({
current: 1, current: 1,
size: 100 size: 100,
createUser: userInfo.userId // 只查询当前用户创建的选手
}) })
let list = [] let list = []
@@ -104,11 +117,11 @@ export default {
// 数据映射 // 数据映射
this.playerList = list.map(item => ({ this.playerList = list.map(item => ({
id: item.id, id: item.id,
name: item.name, name: item.name || item.playerName,
idCard: item.idCard || item.idCardNumber, idCard: item.idCard || item.idCardNumber,
gender: item.gender, gender: item.gender,
team: item.team, team: item.team || item.teamName,
phone: item.phone phone: item.phone || item.contactPhone
})) }))
} catch (err) { } catch (err) {
console.error('加载选手列表失败:', err) console.error('加载选手列表失败:', err)

View File

@@ -171,6 +171,7 @@
import competitionAPI from '@/api/competition.js' import competitionAPI from '@/api/competition.js'
import athleteAPI from '@/api/athlete.js' import athleteAPI from '@/api/athlete.js'
import registrationAPI from '@/api/registration.js' import registrationAPI from '@/api/registration.js'
import { getUserInfo } from '@/utils/auth.js'
export default { export default {
data() { data() {
@@ -286,9 +287,21 @@ export default {
*/ */
async loadPlayerList() { async loadPlayerList() {
try { try {
// 获取当前用户信息
const userInfo = getUserInfo()
if (!userInfo || !userInfo.userId) {
uni.showToast({
title: '请先登录',
icon: 'none'
})
return
}
// 只查询当前用户创建的选手
const res = await athleteAPI.getAthleteList({ const res = await athleteAPI.getAthleteList({
current: 1, current: 1,
size: 100 size: 100,
createUser: userInfo.userId
}) })
let list = [] let list = []
@@ -363,8 +376,10 @@ export default {
} }
}, },
goToAddPlayer() { goToAddPlayer() {
// 传递赛事ID和项目ID到新增选手页面
const projectIds = this.selectedProjects.map(p => p.id).join(',')
uni.navigateTo({ uni.navigateTo({
url: '/pages/add-player/add-player' url: `/pages/add-player/add-player?competitionId=${this.eventId}&projectIds=${projectIds}`
}); });
}, },
handleEdit(item) { handleEdit(item) {

View File

@@ -65,6 +65,7 @@
import CustomTabs from '../../components/custom-tabs/custom-tabs.vue'; import CustomTabs from '../../components/custom-tabs/custom-tabs.vue';
import registrationAPI from '@/api/registration.js' import registrationAPI from '@/api/registration.js'
import competitionAPI from '@/api/competition.js' import competitionAPI from '@/api/competition.js'
import { getUserInfo } from '@/utils/auth.js'
export default { export default {
components: { components: {
@@ -119,9 +120,29 @@ export default {
*/ */
async loadRegistrationList(refresh = false, loadMore = false) { async loadRegistrationList(refresh = false, loadMore = false) {
try { try {
// 获取当前用户信息
const userInfo = getUserInfo()
console.log('=== 用户信息调试 ===')
console.log('获取到的用户信息:', userInfo)
console.log('用户信息类型:', typeof userInfo)
if (!userInfo || (!userInfo.userId && !userInfo.user_id)) {
console.error('未获取到用户信息或缺少用户ID字段')
console.log('原始存储数据:', uni.getStorageSync('userInfo'))
uni.showToast({
title: '请先登录',
icon: 'none'
})
return
}
// 兼容 userId 和 user_id 两种字段名
const userId = userInfo.userId || userInfo.user_id
const params = { const params = {
current: this.pageParams.current, current: this.pageParams.current,
size: this.pageParams.size size: this.pageParams.size,
createUser: userId // 只查询当前用户创建的报名记录
} }
// 添加状态筛选 // 添加状态筛选

View File

@@ -66,8 +66,9 @@ export default {
.type-btn { .type-btn {
background-color: #C93639; background-color: #C93639;
color: #fff; color: #fff;
padding: 20rpx 60rpx; padding: 20rpx 50rpx;
border-radius: 50rpx; border-radius: 50rpx;
font-size: 28rpx; font-size: 28rpx;
font-weight: bold;
} }
</style> </style>

View File

@@ -94,15 +94,6 @@
<text class="toast-text">{{ toastMessage }}</text> <text class="toast-text">{{ toastMessage }}</text>
</view> </view>
<!-- 提示文字 -->
<view class="info-text">
<text class="info-hint">默认关闭可切换开关</text>
</view>
<view class="warning-text">
<text>联系人用于接收比赛信息成绩和证书</text>
</view>
<!-- 按钮 --> <!-- 按钮 -->
<view class="btn-wrapper"> <view class="btn-wrapper">
<view class="btn save-btn disabled" v-if="!isFormValid">保存</view> <view class="btn save-btn disabled" v-if="!isFormValid">保存</view>

View File

@@ -126,6 +126,8 @@ export default {
organization: '', organization: '',
phone: '' phone: ''
}, },
competitionId: '',
projectIds: [],
errors: [], errors: [],
showHint: false, showHint: false,
showToast: false, showToast: false,
@@ -133,6 +135,19 @@ export default {
showIdTypePicker: false showIdTypePicker: false
}; };
}, },
onLoad(options) {
// 接收赛事ID和项目ID
if (options.competitionId) {
this.competitionId = options.competitionId
}
if (options.projectIds) {
this.projectIds = options.projectIds.split(',').map(id => parseInt(id))
}
console.log('新增选手页面接收参数:', {
competitionId: this.competitionId,
projectIds: this.projectIds
})
},
computed: { computed: {
isFormValid() { isFormValid() {
return ( return (
@@ -252,7 +267,7 @@ export default {
const info = this.extractInfoFromIdCard(this.formData.idCard) const info = this.extractInfoFromIdCard(this.formData.idCard)
// 调用API保存选手信息使用后端实体类的字段名 // 调用API保存选手信息使用后端实体类的字段名
await athleteAPI.submitAthlete({ const submitData = {
playerName: this.formData.name, playerName: this.formData.name,
idCard: this.formData.idCard, idCard: this.formData.idCard,
teamName: this.formData.team, teamName: this.formData.team,
@@ -262,7 +277,19 @@ export default {
gender: info.gender, gender: info.gender,
age: info.age, age: info.age,
birthDate: info.birthDate birthDate: info.birthDate
}) }
// 如果有赛事ID和项目ID一起提交
if (this.competitionId) {
submitData.competitionId = parseInt(this.competitionId)
}
if (this.projectIds && this.projectIds.length > 0) {
// 如果有多个项目取第一个项目ID
submitData.projectId = this.projectIds[0]
}
console.log('提交选手数据:', submitData)
await athleteAPI.submitAthlete(submitData)
// 保存成功 // 保存成功
uni.showToast({ uni.showToast({
@@ -415,9 +442,9 @@ export default {
.btn { .btn {
width: 100%; width: 100%;
text-align: center; text-align: center;
padding: 30rpx; padding: 24rpx;
border-radius: 12rpx; border-radius: 12rpx;
font-size: 32rpx; font-size: 30rpx;
font-weight: bold; font-weight: bold;
} }

View File

@@ -60,6 +60,7 @@
import CustomTabs from '../../components/custom-tabs/custom-tabs.vue'; import CustomTabs from '../../components/custom-tabs/custom-tabs.vue';
import ConfirmModal from '../../components/confirm-modal/confirm-modal.vue'; import ConfirmModal from '../../components/confirm-modal/confirm-modal.vue';
import athleteAPI from '@/api/athlete.js'; import athleteAPI from '@/api/athlete.js';
import { getUserInfo } from '@/utils/auth.js';
export default { export default {
components: { components: {
@@ -89,9 +90,21 @@ export default {
*/ */
async loadPlayerList() { async loadPlayerList() {
try { try {
// 获取当前用户信息
const userInfo = getUserInfo()
if (!userInfo || !userInfo.userId) {
console.error('未获取到用户信息')
uni.showToast({
title: '请先登录',
icon: 'none'
})
return
}
const res = await athleteAPI.getAthleteList({ const res = await athleteAPI.getAthleteList({
current: 1, current: 1,
size: 100 size: 100,
createUser: userInfo.userId // 只查询当前用户创建的选手
}) })
let list = [] let list = []
@@ -104,11 +117,11 @@ export default {
// 数据映射 // 数据映射
this.playerList = list.map(item => ({ this.playerList = list.map(item => ({
id: item.id, id: item.id,
name: item.name, name: item.name || item.playerName,
idCard: item.idCard || item.idCardNumber, idCard: item.idCard || item.idCardNumber,
gender: item.gender, gender: item.gender,
team: item.team, team: item.team || item.teamName,
phone: item.phone phone: item.phone || item.contactPhone
})) }))
} catch (err) { } catch (err) {
console.error('加载选手列表失败:', err) console.error('加载选手列表失败:', err)

View File

@@ -171,6 +171,7 @@
import competitionAPI from '@/api/competition.js' import competitionAPI from '@/api/competition.js'
import athleteAPI from '@/api/athlete.js' import athleteAPI from '@/api/athlete.js'
import registrationAPI from '@/api/registration.js' import registrationAPI from '@/api/registration.js'
import { getUserInfo } from '@/utils/auth.js'
export default { export default {
data() { data() {
@@ -286,9 +287,21 @@ export default {
*/ */
async loadPlayerList() { async loadPlayerList() {
try { try {
// 获取当前用户信息
const userInfo = getUserInfo()
if (!userInfo || !userInfo.userId) {
uni.showToast({
title: '请先登录',
icon: 'none'
})
return
}
// 只查询当前用户创建的选手
const res = await athleteAPI.getAthleteList({ const res = await athleteAPI.getAthleteList({
current: 1, current: 1,
size: 100 size: 100,
createUser: userInfo.userId
}) })
let list = [] let list = []
@@ -363,8 +376,10 @@ export default {
} }
}, },
goToAddPlayer() { goToAddPlayer() {
// 传递赛事ID和项目ID到新增选手页面
const projectIds = this.selectedProjects.map(p => p.id).join(',')
uni.navigateTo({ uni.navigateTo({
url: '/pages/add-player/add-player' url: `/pages/add-player/add-player?competitionId=${this.eventId}&projectIds=${projectIds}`
}); });
}, },
handleEdit(item) { handleEdit(item) {

View File

@@ -66,8 +66,9 @@ export default {
.type-btn { .type-btn {
background-color: #C93639; background-color: #C93639;
color: #fff; color: #fff;
padding: 20rpx 60rpx; padding: 20rpx 50rpx;
border-radius: 50rpx; border-radius: 50rpx;
font-size: 28rpx; font-size: 28rpx;
font-weight: bold;
} }
</style> </style>

View File

@@ -45,8 +45,30 @@ export function setRefreshToken(token) {
* 获取用户信息 * 获取用户信息
*/ */
export function getUserInfo() { export function getUserInfo() {
const userInfo = uni.getStorageSync(USER_INFO_KEY) try {
return userInfo ? JSON.parse(userInfo) : null const userInfo = uni.getStorageSync(USER_INFO_KEY)
// 如果没有数据,返回 null
if (!userInfo) {
console.log('本地存储中没有用户信息')
return null
}
// 如果已经是对象,直接返回
if (typeof userInfo === 'object') {
return userInfo
}
// 如果是字符串,尝试解析
if (typeof userInfo === 'string') {
return JSON.parse(userInfo)
}
return null
} catch (error) {
console.error('获取用户信息失败:', error)
return null
}
} }
/** /**