diff --git a/gym-manage-uniapp/api/envConfig.js b/gym-manage-uniapp/api/envConfig.js new file mode 100644 index 0000000..5fb6881 --- /dev/null +++ b/gym-manage-uniapp/api/envConfig.js @@ -0,0 +1,13 @@ +/** + * 环境配置文件 + * 当前仅使用模拟数据(开发模式) + */ + +import { groupCourseMockApi } from './groupCourse.mock.js' + +/** + * 团课服务(仅使用模拟数据) + */ +export const groupCourseService = groupCourseMockApi + +export default groupCourseService diff --git a/gym-manage-uniapp/api/groupCourse.mock.js b/gym-manage-uniapp/api/groupCourse.mock.js new file mode 100644 index 0000000..1f0aa29 --- /dev/null +++ b/gym-manage-uniapp/api/groupCourse.mock.js @@ -0,0 +1,407 @@ +/** + * 团课模拟数据(测试环境使用) + * 数据格式与后端返回格式保持一致 + */ + +// 模拟团课列表数据(与后端返回格式一致) +const mockCourseList = [ + { + "id": "1", + "createBy": "admin", + "updateBy": null, + "createdAt": "2026-06-01T11:00:00", + "updatedAt": "2026-06-01T11:00:00", + "deletedAt": null, + "courseName": "极速燃脂单车", + "coachId": "104", + "courseType": "2", + "startTime": "2026-06-02T16:45:00", + "endTime": "2026-06-15T20:20:00", + "maxMembers": 25, + "currentMembers": 0, + "status": "0", + "location": "单车房", + "coverImage": "https://picsum.photos/seed/spinning/640/360", + "description": "跟随音乐节奏变换阻力和速度,体验爬坡与冲刺的快感,一节课消耗800大卡。支持次数卡(1次)或储值卡(50元)支付。", + "pointCardAmount": 0, + "storedValueAmount": 0 + }, + { + "id": "3", + "createBy": "coach_zhang", + "updateBy": null, + "createdAt": "2026-06-01T14:30:00", + "updatedAt": "2026-06-01T14:30:00", + "deletedAt": null, + "courseName": "燃脂搏击", + "coachId": "102", + "courseType": "2", + "startTime": "2026-06-10T18:30:00", + "endTime": "2026-06-10T19:30:00", + "maxMembers": 20, + "currentMembers": 20, + "status": "0", + "location": "综合训练区", + "coverImage": "https://picsum.photos/seed/kickboxing/640/360", + "description": "高强度间歇训练,配合音乐快速燃脂,释放压力。名额已满,无法预约。支持次数卡(1次)或储值卡(60元)支付。", + "pointCardAmount": 1, + "storedValueAmount": 60 + }, + { + "id": "4", + "createBy": "coach_li", + "updateBy": null, + "createdAt": "2026-06-01T08:00:00", + "updatedAt": "2026-06-01T08:00:00", + "deletedAt": null, + "courseName": "哈他瑜伽", + "coachId": "101", + "courseType": "1", + "startTime": "2026-06-01T15:20:00", + "endTime": "2026-06-01T16:50:00", + "maxMembers": 12, + "currentMembers": 3, + "status": "0", + "location": "瑜伽教室B", + "coverImage": "https://picsum.photos/seed/yoga/640/360", + "description": "基础哈他瑜伽,适合所有级别。距开始不足30分钟,已停止预约。支持次数卡(1次)或储值卡(40元)支付。", + "pointCardAmount": 1, + "storedValueAmount": 40 + }, + { + "id": "5", + "createBy": "coach_wang", + "updateBy": null, + "createdAt": "2026-05-28T08:00:00", + "updatedAt": "2026-05-28T08:00:00", + "deletedAt": null, + "courseName": "周末冥想修复", + "coachId": "101", + "courseType": "1", + "startTime": "2026-06-20T15:00:00", + "endTime": "2026-06-20T16:00:00", + "maxMembers": 12, + "currentMembers": 3, + "status": "1", + "location": "冥想室", + "coverImage": "https://picsum.photos/seed/meditation/640/360", + "description": "通过呼吸和正念冥想,深度放松身心。该课程已被取消。支持次数卡(1次)或储值卡(30元)支付。", + "pointCardAmount": 1, + "storedValueAmount": 30 + }, + { + "id": "6", + "createBy": "coach_li", + "updateBy": null, + "createdAt": "2026-05-20T09:15:00", + "updatedAt": "2026-05-20T09:15:00", + "deletedAt": null, + "courseName": "蜜桃臀塑造", + "coachId": "103", + "courseType": "3", + "startTime": "2026-05-30T19:00:00", + "endTime": "2026-05-30T20:00:00", + "maxMembers": 10, + "currentMembers": 8, + "status": "2", + "location": "私教专区", + "coverImage": "https://picsum.photos/seed/glute/640/360", + "description": "针对性训练臀部肌肉群,课程已于5月30日结束,无法预约。支持次数卡(1次)或储值卡(80元)支付。", + "pointCardAmount": 1, + "storedValueAmount": 80 + }, + { + "id": "7", + "createBy": "admin", + "updateBy": null, + "createdAt": "2026-05-25T09:00:00", + "updatedAt": "2026-05-25T09:00:00", + "deletedAt": null, + "courseName": "午间冥想放松", + "coachId": "101", + "courseType": "1", + "startTime": "2026-05-31T12:00:00", + "endTime": "2026-05-31T13:00:00", + "maxMembers": 15, + "currentMembers": 6, + "status": "2", + "location": "冥想室", + "coverImage": "https://picsum.photos/seed/noonmeditation/640/360", + "description": "午间冥想课程,已于5月31日结束。支持次数卡(1次)或储值卡(25元)支付。", + "pointCardAmount": 1, + "storedValueAmount": 25 + }, + { + "id": "8", + "createBy": "admin", + "updateBy": null, + "createdAt": "2026-06-01T10:00:00", + "updatedAt": "2026-06-01T10:00:00", + "deletedAt": null, + "courseName": "燃脂搏击_次数卡课程", + "coachId": "102", + "courseType": "2", + "startTime": "2026-06-10T19:30:00", + "endTime": "2026-06-10T20:30:00", + "maxMembers": 20, + "currentMembers": 0, + "status": "0", + "location": "综合训练区", + "coverImage": null, + "description": "高强度间歇训练,配合音乐快速燃脂,消耗1次", + "pointCardAmount": 1, + "storedValueAmount": 0 + }, + { + "id": "9", + "createBy": "admin", + "updateBy": null, + "createdAt": "2026-06-01T10:00:00", + "updatedAt": "2026-06-01T10:00:00", + "deletedAt": null, + "courseName": "高端普拉提_储值卡课程", + "coachId": "103", + "courseType": "1", + "startTime": "2026-06-11T19:00:00", + "endTime": "2026-06-11T20:00:00", + "maxMembers": 15, + "currentMembers": 0, + "status": "0", + "location": "普拉提教室", + "coverImage": null, + "description": "精准训练核心肌群,消耗储值50元", + "pointCardAmount": 0, + "storedValueAmount": 20 + }, + { + "id": "11", + "createBy": "admin", + "updateBy": null, + "createdAt": "2026-06-02T10:00:00", + "updatedAt": "2026-06-02T10:00:00", + "deletedAt": null, + "courseName": "时间冲突测试_A_13点-15点", + "coachId": "102", + "courseType": "2", + "startTime": "2026-06-15T13:00:00", + "endTime": "2026-06-15T15:00:00", + "maxMembers": 20, + "currentMembers": 0, + "status": "0", + "location": "综合训练区", + "coverImage": null, + "description": "测试用团课A,用于验证时间冲突检测。支持次数卡(1次)或储值卡(50元)支付。", + "pointCardAmount": 1, + "storedValueAmount": 50 + }, + { + "id": "12", + "createBy": "admin", + "updateBy": null, + "createdAt": "2026-06-02T10:00:00", + "updatedAt": "2026-06-02T10:00:00", + "deletedAt": null, + "courseName": "时间冲突测试_B_14点-16点", + "coachId": "103", + "courseType": "1", + "startTime": "2026-06-15T14:00:00", + "endTime": "2026-06-15T16:00:00", + "maxMembers": 15, + "currentMembers": 0, + "status": "0", + "location": "普拉提教室", + "coverImage": null, + "description": "测试用团课B,与团课A时间重叠(14:00-15:00)。支持次数卡(1次)或储值卡(50元)支付。", + "pointCardAmount": 1, + "storedValueAmount": 50 + }, + { + "id": "13", + "createBy": "admin", + "updateBy": null, + "createdAt": "2026-06-02T10:00:00", + "updatedAt": "2026-06-02T10:00:00", + "deletedAt": null, + "courseName": "时间冲突测试_C_10点-12点", + "coachId": "101", + "courseType": "1", + "startTime": "2026-06-15T10:00:00", + "endTime": "2026-06-15T12:00:00", + "maxMembers": 15, + "currentMembers": 0, + "status": "0", + "location": "瑜伽教室", + "coverImage": null, + "description": "测试用团课C,与团课A/B不冲突。支持次数卡(1次)或储值卡(50元)支付。", + "pointCardAmount": 1, + "storedValueAmount": 50 + }, + { + "id": "14", + "createBy": "system", + "updateBy": "system", + "createdAt": "2026-06-02T17:32:50.532336", + "updatedAt": "2026-06-02T17:32:50.532336", + "deletedAt": null, + "courseName": "动感单车aaa", + "coachId": "2", + "courseType": "2", + "startTime": "2026-06-05T18:00:00", + "endTime": "2026-06-05T19:00:00", + "maxMembers": 25, + "currentMembers": 0, + "status": "0", + "location": "健身房B区", + "coverImage": "https://example.com/spinning.jpg", + "description": "高强度有氧运动课程", + "pointCardAmount": 1, + "storedValueAmount": 50 + }, + { + "id": "2", + "createBy": "admin", + "updateBy": null, + "createdAt": "2026-06-01T10:00:00", + "updatedAt": "2026-06-02T17:35:35.155616", + "deletedAt": null, + "courseName": "清晨流瑜伽", + "coachId": "101", + "courseType": "1", + "startTime": "2026-06-12T09:00:00", + "endTime": "2026-06-12T10:30:00", + "maxMembers": 15, + "currentMembers": 6, + "status": "0", + "location": "A座3楼瑜伽教室", + "coverImage": "https://picsum.photos/seed/yogaflow/640/360", + "description": "适合有一定基础的学员,通过流畅的体式连接呼吸,唤醒身体能量。支持次数卡(1次)或储值卡(45元)支付。", + "pointCardAmount": 1, + "storedValueAmount": 45 + }, + { + "id": "15", + "createBy": "system", + "updateBy": "system", + "createdAt": "2026-06-02T17:57:27.483488", + "updatedAt": "2026-06-02T17:57:27.483488", + "deletedAt": null, + "courseName": "动感单车", + "coachId": "2", + "courseType": "2", + "startTime": "2026-06-05T18:00:00", + "endTime": "2026-06-05T19:00:00", + "maxMembers": 25, + "currentMembers": 0, + "status": "0", + "location": "健身房B区", + "coverImage": "https://example.com/spinning.jpg", + "description": "高强度有氧运动课程", + "pointCardAmount": 1, + "storedValueAmount": 50 + } +] + +/** + * 模拟团课API(测试环境) + * 接口签名与真实API保持一致 + */ +export const groupCourseMockApi = { + /** + * 获取团课列表(支持分页) + * @param {Object} params - 查询参数 + * @param {number} params.pageNum - 页码(从1开始) + * @param {number} params.pageSize - 每页数量 + * @returns {Promise} - 分页团课列表数据 + */ + getList: (params = {}) => { + return new Promise((resolve) => { + setTimeout(() => { + const pageNum = params.pageNum || 1 + const pageSize = params.pageSize || 10 + + const total = mockCourseList.length + const startIndex = (pageNum - 1) * pageSize + const endIndex = startIndex + pageSize + const list = mockCourseList.slice(startIndex, endIndex) + + console.log('[groupCourse.mock.js] 模拟获取团课列表(分页):', { + pageNum, + pageSize, + total, + listCount: list.length + }) + + resolve({ + code: 0, + message: 'success', + data: { + list, + total, + pageNum, + pageSize, + totalPages: Math.ceil(total / pageSize) + } + }) + }, 500) + }) + }, + + /** + * 获取团课详情 + * @param {string} id - 课程ID + * @returns {Promise} - 团课详情数据 + */ + getDetail: (id) => { + return new Promise((resolve, reject) => { + setTimeout(() => { + console.log('[groupCourse.mock.js] 模拟获取团课详情:', id) + const course = mockCourseList.find(item => item.id === id) + if (course) { + resolve(course) + } else { + reject({ code: -1, message: '课程不存在' }) + } + }, 300) + }) + }, + + /** + * 预约团课 + * @param {Object} data - 预约数据 + * @param {string} data.courseId - 课程ID + * @param {string} data.memberId - 会员ID + * @returns {Promise} - 预约结果 + */ + book: (data) => { + return new Promise((resolve) => { + setTimeout(() => { + console.log('[groupCourse.mock.js] 模拟预约团课:', data) + resolve({ + code: 0, + message: '预约成功', + data: { bookingId: `BK${Date.now()}` } + }) + }, 400) + }) + }, + + /** + * 取消预约 + * @param {string} id - 预约记录ID + * @returns {Promise} - 取消结果 + */ + cancelBooking: (id) => { + return new Promise((resolve) => { + setTimeout(() => { + console.log('[groupCourse.mock.js] 模拟取消预约:', id) + resolve({ + code: 0, + message: '取消成功', + data: null + }) + }, 300) + }) + } +} + +export default groupCourseMockApi