完成内容: ✅ 第一层保护: Git分支隔离 - 创建 v1.0-mock 标签 - 创建 feature/api-integration 分支 ✅ 第二层保护: 配置开关控制 - config/env.config.js (环境配置,支持Mock/API模式切换) ✅ 第三层保护: 代码架构分离 - utils/request.js (网络请求封装,支持Blade-Auth) - utils/dataAdapter.js (核心适配器,自动选择数据源) ✅ Mock数据模块 (4个文件): - mock/index.js (统一入口) - mock/login.js (登录Mock数据) - mock/athlete.js (选手Mock数据,含场地、项目) - mock/score.js (评分Mock数据,含扣分项、详情、修改) ✅ API接口模块 (4个文件): - api/index.js (统一入口) - api/auth.js (认证API,含后端接口规范) - api/athlete.js (选手API,含SQL示例) - api/score.js (评分API,含实现逻辑说明) 特性: - 通过修改 config/env.config.js 的 dataMode 即可切换Mock/API模式 - Mock模式: 完全离线,无需后端,UI功能完整 - API模式: 调用真实后端接口(需后端实现5个专用接口) - 零UI修改: 原有页面代码完全保护,仅替换数据源 下一步: - 修改5个页面使用 dataAdapter - 测试Mock模式功能 - 后端开发5个小程序专用接口 代码统计: - 新增11个文件 - 约1000行代码 - 完整的注释和使用说明
118 lines
2.9 KiB
JavaScript
118 lines
2.9 KiB
JavaScript
/**
|
||
* Mock数据中心
|
||
* 所有Mock数据的统一入口
|
||
*
|
||
* 这个文件汇总了所有业务模块的Mock数据函数,
|
||
* 提供给 dataAdapter.js 调用
|
||
*/
|
||
|
||
import loginMock from './login.js'
|
||
import athleteMock from './athlete.js'
|
||
import scoreMock from './score.js'
|
||
|
||
/**
|
||
* 导出所有Mock数据函数
|
||
*
|
||
* 资源名称(key)对应 dataAdapter.getData() 的第一个参数
|
||
* 例如:dataAdapter.getData('login', params) 会调用 loginMock.login(params)
|
||
*/
|
||
export default {
|
||
// ==================== 认证模块 ====================
|
||
/**
|
||
* 登录验证
|
||
* @param {Object} params - { matchCode, inviteCode }
|
||
* @returns {Object} 用户信息和Token
|
||
*/
|
||
login: loginMock.login,
|
||
|
||
// ==================== 选手模块 ====================
|
||
/**
|
||
* 获取我的选手列表(普通评委)
|
||
* @param {Object} params - { judgeId, venueId, projectId }
|
||
* @returns {Array} 选手列表(带评分状态)
|
||
*/
|
||
getMyAthletes: athleteMock.getMyAthletes,
|
||
|
||
/**
|
||
* 获取选手列表(裁判长)
|
||
* @param {Object} params - { competitionId, venueId, projectId }
|
||
* @returns {Array} 选手列表(带评分统计)
|
||
*/
|
||
getAthletesForAdmin: athleteMock.getAthletesForAdmin,
|
||
|
||
/**
|
||
* 获取场地列表
|
||
* @param {Object} params - { competitionId }
|
||
* @returns {Array} 场地列表
|
||
*/
|
||
getVenues: athleteMock.getVenues,
|
||
|
||
/**
|
||
* 获取项目列表
|
||
* @param {Object} params - { competitionId }
|
||
* @returns {Array} 项目列表
|
||
*/
|
||
getProjects: athleteMock.getProjects,
|
||
|
||
// ==================== 评分模块 ====================
|
||
/**
|
||
* 获取扣分项列表
|
||
* @param {Object} params - { projectId }
|
||
* @returns {Array} 扣分项列表
|
||
*/
|
||
getDeductions: scoreMock.getDeductions,
|
||
|
||
/**
|
||
* 提交评分
|
||
* @param {Object} params - { athleteId, judgeId, score, deductions, note }
|
||
* @returns {Object} 提交结果
|
||
*/
|
||
submitScore: scoreMock.submitScore,
|
||
|
||
/**
|
||
* 获取评分详情(裁判长查看)
|
||
* @param {Object} params - { athleteId }
|
||
* @returns {Object} 评分详情(选手信息+评委评分)
|
||
*/
|
||
getScoreDetail: scoreMock.getScoreDetail,
|
||
|
||
/**
|
||
* 修改评分(裁判长)
|
||
* @param {Object} params - { athleteId, modifierId, modifiedScore, note }
|
||
* @returns {Object} 修改结果
|
||
*/
|
||
modifyScore: scoreMock.modifyScore
|
||
}
|
||
|
||
/**
|
||
* 使用说明:
|
||
*
|
||
* 这个文件不直接在页面中使用,而是通过 dataAdapter.js 间接调用。
|
||
*
|
||
* 页面使用示例:
|
||
*
|
||
* import dataAdapter from '@/utils/dataAdapter.js'
|
||
*
|
||
* // 登录
|
||
* const res = await dataAdapter.getData('login', {
|
||
* matchCode: '123',
|
||
* inviteCode: 'pub'
|
||
* })
|
||
*
|
||
* // 获取选手列表
|
||
* const res = await dataAdapter.getData('getMyAthletes', {
|
||
* judgeId: '456',
|
||
* venueId: '1',
|
||
* projectId: '5'
|
||
* })
|
||
*
|
||
* // 提交评分
|
||
* const res = await dataAdapter.getData('submitScore', {
|
||
* athleteId: '1',
|
||
* judgeId: '456',
|
||
* score: 8.907,
|
||
* deductions: [...],
|
||
* note: '表现优秀'
|
||
* })
|
||
*/
|