diff --git a/pages/add-contact/add-contact.vue b/pages/add-contact/add-contact.vue index cac34b9..cf1e18c 100644 --- a/pages/add-contact/add-contact.vue +++ b/pages/add-contact/add-contact.vue @@ -94,15 +94,6 @@ {{ toastMessage }} - - - 默认关闭,可切换开关 - - - - 联系人用于接收比赛信息,成绩和证书。 - - 保存 @@ -219,7 +210,7 @@ export default { } .form-label { - width: 180rpx; + width: 280rpx; font-size: 30rpx; color: #333333; } diff --git a/pages/add-player/add-player.vue b/pages/add-player/add-player.vue index f81dfea..0b1988c 100644 --- a/pages/add-player/add-player.vue +++ b/pages/add-player/add-player.vue @@ -126,6 +126,8 @@ export default { organization: '', phone: '' }, + competitionId: '', + projectIds: [], errors: [], showHint: false, showToast: false, @@ -133,6 +135,19 @@ export default { 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: { isFormValid() { return ( @@ -252,7 +267,7 @@ export default { const info = this.extractInfoFromIdCard(this.formData.idCard) // 调用API保存选手信息(使用后端实体类的字段名) - await athleteAPI.submitAthlete({ + const submitData = { playerName: this.formData.name, idCard: this.formData.idCard, teamName: this.formData.team, @@ -262,7 +277,19 @@ export default { gender: info.gender, age: info.age, 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({ @@ -415,9 +442,9 @@ export default { .btn { width: 100%; text-align: center; - padding: 30rpx; + padding: 24rpx; border-radius: 12rpx; - font-size: 32rpx; + font-size: 30rpx; font-weight: bold; } diff --git a/pages/common-info/common-info.vue b/pages/common-info/common-info.vue index 591a3c1..9a1584f 100644 --- a/pages/common-info/common-info.vue +++ b/pages/common-info/common-info.vue @@ -60,6 +60,7 @@ import CustomTabs from '../../components/custom-tabs/custom-tabs.vue'; import ConfirmModal from '../../components/confirm-modal/confirm-modal.vue'; import athleteAPI from '@/api/athlete.js'; +import { getUserInfo } from '@/utils/auth.js'; export default { components: { @@ -89,9 +90,21 @@ export default { */ async loadPlayerList() { try { + // 获取当前用户信息 + const userInfo = getUserInfo() + if (!userInfo || !userInfo.userId) { + console.error('未获取到用户信息') + uni.showToast({ + title: '请先登录', + icon: 'none' + }) + return + } + const res = await athleteAPI.getAthleteList({ current: 1, - size: 100 + size: 100, + createUser: userInfo.userId // 只查询当前用户创建的选手 }) let list = [] @@ -104,11 +117,11 @@ export default { // 数据映射 this.playerList = list.map(item => ({ id: item.id, - name: item.name, + name: item.name || item.playerName, idCard: item.idCard || item.idCardNumber, gender: item.gender, - team: item.team, - phone: item.phone + team: item.team || item.teamName, + phone: item.phone || item.contactPhone })) } catch (err) { console.error('加载选手列表失败:', err) diff --git a/pages/event-register/event-register.vue b/pages/event-register/event-register.vue index 77a68a4..dcbfc6b 100644 --- a/pages/event-register/event-register.vue +++ b/pages/event-register/event-register.vue @@ -171,6 +171,7 @@ import competitionAPI from '@/api/competition.js' import athleteAPI from '@/api/athlete.js' import registrationAPI from '@/api/registration.js' +import { getUserInfo } from '@/utils/auth.js' export default { data() { @@ -286,9 +287,21 @@ export default { */ async loadPlayerList() { try { + // 获取当前用户信息 + const userInfo = getUserInfo() + if (!userInfo || !userInfo.userId) { + uni.showToast({ + title: '请先登录', + icon: 'none' + }) + return + } + + // 只查询当前用户创建的选手 const res = await athleteAPI.getAthleteList({ current: 1, - size: 100 + size: 100, + createUser: userInfo.userId }) let list = [] @@ -363,8 +376,10 @@ export default { } }, goToAddPlayer() { + // 传递赛事ID和项目ID到新增选手页面 + const projectIds = this.selectedProjects.map(p => p.id).join(',') uni.navigateTo({ - url: '/pages/add-player/add-player' + url: `/pages/add-player/add-player?competitionId=${this.eventId}&projectIds=${projectIds}` }); }, handleEdit(item) { diff --git a/pages/my-registration/my-registration.vue b/pages/my-registration/my-registration.vue index 7512a3e..39d932d 100644 --- a/pages/my-registration/my-registration.vue +++ b/pages/my-registration/my-registration.vue @@ -65,6 +65,7 @@ import CustomTabs from '../../components/custom-tabs/custom-tabs.vue'; import registrationAPI from '@/api/registration.js' import competitionAPI from '@/api/competition.js' +import { getUserInfo } from '@/utils/auth.js' export default { components: { @@ -119,9 +120,29 @@ export default { */ async loadRegistrationList(refresh = false, loadMore = false) { 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 = { current: this.pageParams.current, - size: this.pageParams.size + size: this.pageParams.size, + createUser: userId // 只查询当前用户创建的报名记录 } // 添加状态筛选 diff --git a/pages/register-type/register-type.vue b/pages/register-type/register-type.vue index 6e262db..5179aae 100644 --- a/pages/register-type/register-type.vue +++ b/pages/register-type/register-type.vue @@ -66,8 +66,9 @@ export default { .type-btn { background-color: #C93639; color: #fff; - padding: 20rpx 60rpx; + padding: 20rpx 50rpx; border-radius: 50rpx; font-size: 28rpx; + font-weight: bold; } diff --git a/src/pages/add-contact/add-contact.vue b/src/pages/add-contact/add-contact.vue index cac34b9..1369291 100644 --- a/src/pages/add-contact/add-contact.vue +++ b/src/pages/add-contact/add-contact.vue @@ -94,15 +94,6 @@ {{ toastMessage }} - - - 默认关闭,可切换开关 - - - - 联系人用于接收比赛信息,成绩和证书。 - - 保存 diff --git a/src/pages/add-player/add-player.vue b/src/pages/add-player/add-player.vue index f81dfea..0b1988c 100644 --- a/src/pages/add-player/add-player.vue +++ b/src/pages/add-player/add-player.vue @@ -126,6 +126,8 @@ export default { organization: '', phone: '' }, + competitionId: '', + projectIds: [], errors: [], showHint: false, showToast: false, @@ -133,6 +135,19 @@ export default { 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: { isFormValid() { return ( @@ -252,7 +267,7 @@ export default { const info = this.extractInfoFromIdCard(this.formData.idCard) // 调用API保存选手信息(使用后端实体类的字段名) - await athleteAPI.submitAthlete({ + const submitData = { playerName: this.formData.name, idCard: this.formData.idCard, teamName: this.formData.team, @@ -262,7 +277,19 @@ export default { gender: info.gender, age: info.age, 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({ @@ -415,9 +442,9 @@ export default { .btn { width: 100%; text-align: center; - padding: 30rpx; + padding: 24rpx; border-radius: 12rpx; - font-size: 32rpx; + font-size: 30rpx; font-weight: bold; } diff --git a/src/pages/common-info/common-info.vue b/src/pages/common-info/common-info.vue index 591a3c1..9a1584f 100644 --- a/src/pages/common-info/common-info.vue +++ b/src/pages/common-info/common-info.vue @@ -60,6 +60,7 @@ import CustomTabs from '../../components/custom-tabs/custom-tabs.vue'; import ConfirmModal from '../../components/confirm-modal/confirm-modal.vue'; import athleteAPI from '@/api/athlete.js'; +import { getUserInfo } from '@/utils/auth.js'; export default { components: { @@ -89,9 +90,21 @@ export default { */ async loadPlayerList() { try { + // 获取当前用户信息 + const userInfo = getUserInfo() + if (!userInfo || !userInfo.userId) { + console.error('未获取到用户信息') + uni.showToast({ + title: '请先登录', + icon: 'none' + }) + return + } + const res = await athleteAPI.getAthleteList({ current: 1, - size: 100 + size: 100, + createUser: userInfo.userId // 只查询当前用户创建的选手 }) let list = [] @@ -104,11 +117,11 @@ export default { // 数据映射 this.playerList = list.map(item => ({ id: item.id, - name: item.name, + name: item.name || item.playerName, idCard: item.idCard || item.idCardNumber, gender: item.gender, - team: item.team, - phone: item.phone + team: item.team || item.teamName, + phone: item.phone || item.contactPhone })) } catch (err) { console.error('加载选手列表失败:', err) diff --git a/src/pages/event-register/event-register.vue b/src/pages/event-register/event-register.vue index 77a68a4..dcbfc6b 100644 --- a/src/pages/event-register/event-register.vue +++ b/src/pages/event-register/event-register.vue @@ -171,6 +171,7 @@ import competitionAPI from '@/api/competition.js' import athleteAPI from '@/api/athlete.js' import registrationAPI from '@/api/registration.js' +import { getUserInfo } from '@/utils/auth.js' export default { data() { @@ -286,9 +287,21 @@ export default { */ async loadPlayerList() { try { + // 获取当前用户信息 + const userInfo = getUserInfo() + if (!userInfo || !userInfo.userId) { + uni.showToast({ + title: '请先登录', + icon: 'none' + }) + return + } + + // 只查询当前用户创建的选手 const res = await athleteAPI.getAthleteList({ current: 1, - size: 100 + size: 100, + createUser: userInfo.userId }) let list = [] @@ -363,8 +376,10 @@ export default { } }, goToAddPlayer() { + // 传递赛事ID和项目ID到新增选手页面 + const projectIds = this.selectedProjects.map(p => p.id).join(',') uni.navigateTo({ - url: '/pages/add-player/add-player' + url: `/pages/add-player/add-player?competitionId=${this.eventId}&projectIds=${projectIds}` }); }, handleEdit(item) { diff --git a/src/pages/register-type/register-type.vue b/src/pages/register-type/register-type.vue index 6e262db..5179aae 100644 --- a/src/pages/register-type/register-type.vue +++ b/src/pages/register-type/register-type.vue @@ -66,8 +66,9 @@ export default { .type-btn { background-color: #C93639; color: #fff; - padding: 20rpx 60rpx; + padding: 20rpx 50rpx; border-radius: 50rpx; font-size: 28rpx; + font-weight: bold; } diff --git a/utils/auth.js b/utils/auth.js index 45f48fa..48be1da 100644 --- a/utils/auth.js +++ b/utils/auth.js @@ -45,8 +45,30 @@ export function setRefreshToken(token) { * 获取用户信息 */ export function getUserInfo() { - const userInfo = uni.getStorageSync(USER_INFO_KEY) - return userInfo ? JSON.parse(userInfo) : null + try { + 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 + } } /**