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:
2025-12-11 14:48:51 +08:00
parent a4d457b730
commit dc9743e6db
5 changed files with 791 additions and 198 deletions

View File

@@ -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'
})
}
}
}