feat: 添加Mock版本保护机制 - 基础架构完成

完成内容:
 第一层保护: 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行代码
- 完整的注释和使用说明
This commit is contained in:
2025-12-11 14:06:03 +08:00
parent 7bd197f4ac
commit 7ec9a77c2a
12 changed files with 1616 additions and 1 deletions

165
api/score.js Normal file
View File

@@ -0,0 +1,165 @@
/**
* API接口 - 评分模块
* 真实后端接口调用(需要后端实现)
*/
import request from '@/utils/request.js'
/**
* 获取扣分项列表
* @param {Object} params
* @param {String} params.projectId - 项目ID
* @returns {Promise}
*/
export function getDeductions(params) {
return request({
url: '/martial/deductionItem/list',
method: 'GET',
data: {
...params,
current: 1,
size: 100
}
})
}
/**
* 提交评分
* @param {Object} data
* @param {String} data.athleteId - 选手ID
* @param {String} data.judgeId - 评委ID
* @param {Number} data.score - 评分
* @param {Array} data.deductions - 扣分项
* @param {String} data.note - 备注
* @returns {Promise}
*/
export function submitScore(data) {
return request({
url: '/martial/score/submit',
method: 'POST',
data,
showLoading: true,
loadingText: '提交中...'
})
}
/**
* 获取评分详情(裁判长查看)
* @param {Object} params
* @param {String} params.athleteId - 选手ID
* @returns {Promise}
*
* 注意:此接口需要后端实现
* 建议路径: GET /api/mini/score/detail/{athleteId}
*/
export function getScoreDetail(params) {
return request({
url: `/api/mini/score/detail/${params.athleteId}`,
method: 'GET',
showLoading: true
})
}
/**
* 修改评分(裁判长)
* @param {Object} data
* @param {String} data.athleteId - 选手ID
* @param {String} data.modifierId - 修改人ID
* @param {Number} data.modifiedScore - 修改后的分数
* @param {String} data.note - 修改原因
* @returns {Promise}
*
* 注意:此接口需要后端实现
* 建议路径: PUT /api/mini/score/modify
*/
export function modifyScore(data) {
return request({
url: '/api/mini/score/modify',
method: 'PUT',
data,
showLoading: true,
loadingText: '修改中...'
})
}
export default {
getDeductions,
submitScore,
getScoreDetail,
modifyScore
}
/**
* 后端接口规范(待实现):
*
* 1. GET /api/mini/score/detail/{athleteId}
*
* 响应:
* {
* "code": 200,
* "success": true,
* "msg": "操作成功",
* "data": {
* "athleteInfo": {
* "athleteId": "1",
* "name": "张三",
* "idCard": "123456789000000000",
* "team": "少林寺武术大学院",
* "number": "123-4567898275",
* "totalScore": 8.907
* },
* "judgeScores": [
* {
* "judgeId": "1",
* "judgeName": "欧阳丽娜",
* "score": 8.907,
* "scoreTime": "2025-06-25 09:15:00",
* "note": ""
* }
* ],
* "modification": null
* }
* }
*
* SQL示例
* SELECT
* s.judge_id AS judgeId,
* s.judge_name AS judgeName,
* s.score,
* s.score_time AS scoreTime,
* s.note
* FROM martial_score s
* WHERE s.athlete_id = #{athleteId}
* ORDER BY s.score_time ASC
*
* ---
*
* 2. PUT /api/mini/score/modify
*
* 请求:
* {
* "athleteId": "1",
* "modifierId": "789",
* "modifiedScore": 8.910,
* "note": "修改原因"
* }
*
* 响应:
* {
* "code": 200,
* "success": true,
* "msg": "修改成功",
* "data": {
* "athleteId": "1",
* "originalScore": 8.907,
* "modifiedScore": 8.910,
* "modifyTime": "2025-06-25 10:00:00"
* }
* }
*
* 实现逻辑:
* 1. 验证权限(只有裁判长可以修改)
* 2. 保存 originalScore如果是第一次修改
* 3. 更新 totalScore
* 4. 记录 modifyReason 和 modifyTime
*/