feat: 完成5个页面接入dataAdapter - Mock模式功能完成
改造页面列表: - login.vue: 登录验证使用dataAdapter - score-list.vue: 普通评委选手列表加载 - score-detail.vue: 评分提交和扣分项加载 - score-list-multi.vue: 裁判长多场地列表(含场地/项目切换) - modify-score.vue: 裁判长修改评分 关键特性: - ✅ 所有页面使用dataAdapter统一数据接口 - ✅ UI模板和样式完全保持不变(零UI修改) - ✅ 支持Mock/API模式一键切换 - ✅ 完整的错误处理和加载提示 - ✅ 调试模式下输出详细日志 Mock模式测试准备完成,可通过修改config/env.config.js中dataMode切换到API模式。 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -46,6 +46,9 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import dataAdapter from '@/utils/dataAdapter.js'
|
||||
import config from '@/config/env.config.js'
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
@@ -53,8 +56,19 @@ export default {
|
||||
inviteCode: ''
|
||||
}
|
||||
},
|
||||
onLoad() {
|
||||
// 开发环境显示当前数据模式
|
||||
if (config.debug) {
|
||||
console.log('='.repeat(50))
|
||||
console.log('当前数据模式:', config.dataMode)
|
||||
console.log('Mock模式:', dataAdapter.isMockMode() ? '是' : '否')
|
||||
console.log('API模式:', dataAdapter.isApiMode() ? '是' : '否')
|
||||
console.log('='.repeat(50))
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
handleSubmit() {
|
||||
async handleSubmit() {
|
||||
// 表单验证
|
||||
if (!this.matchCode) {
|
||||
uni.showToast({
|
||||
title: '请输入比赛编码',
|
||||
@@ -70,35 +84,98 @@ export default {
|
||||
return
|
||||
}
|
||||
|
||||
// 判断权限类型
|
||||
const role = this.inviteCode.toLowerCase()
|
||||
try {
|
||||
// 显示加载
|
||||
uni.showLoading({
|
||||
title: '登录中...',
|
||||
mask: true
|
||||
})
|
||||
|
||||
if (role !== 'pub' && role !== 'admin') {
|
||||
// 🔥 关键改动:使用 dataAdapter 进行登录
|
||||
// Mock模式:调用 mock/login.js 的 login 函数
|
||||
// API模式:调用 api/auth.js 的 login 函数(POST /api/mini/login)
|
||||
const response = await dataAdapter.getData('login', {
|
||||
matchCode: this.matchCode,
|
||||
inviteCode: this.inviteCode
|
||||
})
|
||||
|
||||
uni.hideLoading()
|
||||
|
||||
// 处理登录响应(Mock和API返回格式相同)
|
||||
const {
|
||||
token,
|
||||
userRole,
|
||||
matchId,
|
||||
matchName,
|
||||
matchTime,
|
||||
judgeId,
|
||||
judgeName,
|
||||
venueId,
|
||||
venueName,
|
||||
projects
|
||||
} = response.data
|
||||
|
||||
// 保存Token到本地存储
|
||||
uni.setStorageSync('token', token)
|
||||
|
||||
// 保存用户信息到全局数据
|
||||
getApp().globalData = {
|
||||
userRole, // 'pub' 或 'admin'
|
||||
matchCode: this.matchCode,
|
||||
matchId,
|
||||
matchName,
|
||||
matchTime,
|
||||
judgeId,
|
||||
judgeName,
|
||||
venueId, // 普通评委有场地,裁判长为null
|
||||
venueName,
|
||||
projects, // 分配的项目列表
|
||||
currentProjectIndex: 0 // 当前选中的项目索引
|
||||
}
|
||||
|
||||
// 调试信息
|
||||
if (config.debug) {
|
||||
console.log('登录成功:', {
|
||||
userRole,
|
||||
judgeName,
|
||||
venueId: venueId || '全部场地',
|
||||
projects: projects.length + '个项目'
|
||||
})
|
||||
}
|
||||
|
||||
// 显示登录成功提示
|
||||
uni.showToast({
|
||||
title: '邀请码错误,请输入pub或admin',
|
||||
title: '登录成功',
|
||||
icon: 'success',
|
||||
duration: 1500
|
||||
})
|
||||
|
||||
// 根据角色跳转到不同页面
|
||||
setTimeout(() => {
|
||||
if (userRole === 'admin') {
|
||||
// 裁判长跳转到多场地列表页(可以修改评分)
|
||||
uni.navigateTo({
|
||||
url: '/pages/score-list-multi/score-list-multi'
|
||||
})
|
||||
} else {
|
||||
// 普通裁判跳转到评分列表页(可以评分)
|
||||
uni.navigateTo({
|
||||
url: '/pages/score-list/score-list'
|
||||
})
|
||||
}
|
||||
}, 1500)
|
||||
|
||||
} catch (error) {
|
||||
uni.hideLoading()
|
||||
|
||||
// 错误处理
|
||||
console.error('登录失败:', error)
|
||||
|
||||
uni.showToast({
|
||||
title: error.message || '登录失败,请重试',
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
// 保存用户角色到全局数据
|
||||
getApp().globalData = {
|
||||
userRole: role,
|
||||
matchCode: this.matchCode
|
||||
}
|
||||
|
||||
// 根据角色跳转到不同页面
|
||||
if (role === 'admin') {
|
||||
// 裁判长跳转到多场地列表页(可以修改评分)
|
||||
uni.navigateTo({
|
||||
url: '/pages/score-list-multi/score-list-multi'
|
||||
})
|
||||
} else {
|
||||
// 普通裁判跳转到评分列表页(可以评分)
|
||||
uni.navigateTo({
|
||||
url: '/pages/score-list/score-list'
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user