diff --git a/gym-manage-uniapp/api/envConfig.js b/gym-manage-uniapp/api/envConfig.js deleted file mode 100644 index 5fb6881..0000000 --- a/gym-manage-uniapp/api/envConfig.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * 环境配置文件 - * 当前仅使用模拟数据(开发模式) - */ - -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 deleted file mode 100644 index 1f0aa29..0000000 --- a/gym-manage-uniapp/api/groupCourse.mock.js +++ /dev/null @@ -1,407 +0,0 @@ -/** - * 团课模拟数据(测试环境使用) - * 数据格式与后端返回格式保持一致 - */ - -// 模拟团课列表数据(与后端返回格式一致) -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 diff --git a/gym-manage-uniapp/api/main.js b/gym-manage-uniapp/api/main.js deleted file mode 100644 index eb59c09..0000000 --- a/gym-manage-uniapp/api/main.js +++ /dev/null @@ -1,50 +0,0 @@ -import request from "@/utils/request.js" - -export function login(params) { - return request.post('/member/auth/miniapp/login', params) -} - -export function logout() { - return request.post('/member/auth/logout') -} - -export function getQRCode(options = { cache: true, cacheTime: 5 * 60 * 1000 }) { - return request.get('/checkIn/qrcode', {}, options) -} - -export function checkIn(params) { - return request.post('/checkIn/scan', params) -} - -export function getUserInfo(options = { cache: true, cacheTime: 30 * 60 * 1000 }) { - return request.get('/member/info', {}, options) -} - -export function updateUserInfo(params) { - return request.put('/member/info', params) -} - -export function getRecommendCourses(options = { cache: true, cacheTime: 10 * 60 * 1000 }) { - return request.get('/course/recommend', {}, options) -} - -export function getCourseDetail(id, options = { cache: true, cacheTime: 15 * 60 * 1000 }) { - return request.get(`/course/${id}`, {}, options) -} - -export function getGroupCoursePage(params = {}, options = { cache: true, cacheTime: 5 * 60 * 1000 }) { - const { page = 0, size = 10, sort = 'id', order = 'asc', keyword } = params - return request.post('/groupCourse/page', { page, size, sort, order, keyword }, options) -} - -export default { - login, - logout, - getQRCode, - checkIn, - getUserInfo, - updateUserInfo, - getRecommendCourses, - getCourseDetail, - getGroupCoursePage -} diff --git a/gym-manage-uniapp/common/constants/routes.js b/gym-manage-uniapp/common/constants/routes.js index 50300f5..fefa5e3 100644 --- a/gym-manage-uniapp/common/constants/routes.js +++ b/gym-manage-uniapp/common/constants/routes.js @@ -3,7 +3,7 @@ /** 与 pages.json 保持一致 */ export const PAGE = { INDEX: '/pages/index/index', - COURSE: '/pages/course/index', + COURSE: '/pages/groupCourse/list', TRAIN: '/pages/train/index', DISCOVER: '/pages/discover/index', MEMBER: '/pages/memberInfo/memberInfo', diff --git a/gym-manage-uniapp/pages/checkIn/checkIn.vue b/gym-manage-uniapp/pages/checkIn/checkIn.vue index 09ec852..d11b815 100644 --- a/gym-manage-uniapp/pages/checkIn/checkIn.vue +++ b/gym-manage-uniapp/pages/checkIn/checkIn.vue @@ -104,7 +104,7 @@ import { onLoad, onUnload } from '@dcloudio/uni-app' // 引入状态组件(路径与你保持一致) import QrStatus from '@/components/QRCode/StatusCard.vue' // 引入API封装 -import { getQRCode, checkIn as apiCheckIn } from '@/api/main.js' +import { getQRCode, checkIn as apiCheckIn } from '@/request_api/main.js' let image = ref("") let width = ref(0)