diff --git a/gym-manage-web/src/api/groupCourse.api.ts b/gym-manage-web/src/api/groupCourse.api.ts new file mode 100644 index 0000000..379d8d9 --- /dev/null +++ b/gym-manage-web/src/api/groupCourse.api.ts @@ -0,0 +1,245 @@ +import request from '@/utils/request' + +// ==================== 团课课程 ==================== + +export interface GroupCourse { + id?: number + courseName: string + coachId?: number + courseType?: number + startTime: string + endTime: string + maxMembers?: number + currentMembers?: number + status?: string + actualStartTime?: string + actualEndTime?: string + location?: string + coverImage?: string + description?: string + storedValueAmount?: number + qrCodePath?: string + createBy?: string + updateBy?: string + createdAt?: string + updatedAt?: string +} + +export interface GroupCoursePageRequest { + page: number + size: number + keyword?: string + status?: string + courseType?: number + coachId?: number + startTime?: string + endTime?: string + sortBy?: string + sortOrder?: 'asc' | 'desc' +} + +export interface PageResponse { + content: T[] + totalElements: number + totalPages: number + size: number + number: number + first: boolean + last: boolean +} + +export const groupCourseApi = { + getAll: () => + request.get('/groupCourse/list'), + + getPage: (params: GroupCoursePageRequest) => + request.post>('/groupCourse/page', params), + + getById: (id: number) => + request.get(`/groupCourse/${id}`), + + getDetailById: (id: number) => + request.get(`/groupCourse/${id}/detail`), + + create: (data: GroupCourse) => + request.post('/groupCourse', data), + + update: (id: number, data: GroupCourse) => + request.put(`/groupCourse/${id}`, data), + + delete: (id: number) => + request.delete(`/groupCourse/${id}`), + + cancel: (id: number) => + request.post(`/groupCourse/${id}/cancel`), + + search: (params: any) => + request.post('/groupCourse/search', params), +} + +// ==================== 团课类型 ==================== + +export interface GroupCourseType { + id?: number + typeName: string + baseDifficulty?: number + description?: string + category?: string + createBy?: string + updateBy?: string + createdAt?: string + updatedAt?: string +} + +export const groupCourseTypeApi = { + getAll: () => + request.get('/groupCourse/types'), + + search: (params: any) => + request.get('/groupCourse/types/search', { params }), + + getCategories: () => + request.get('/groupCourse/types/categories'), + + getByCategory: (category: string) => + request.get(`/groupCourse/types/category/${category}`), + + getById: (id: number) => + request.get(`/groupCourse/types/${id}`), + + create: (data: GroupCourseType) => + request.post('/groupCourse/types', data), + + update: (id: number, data: GroupCourseType) => + request.put(`/groupCourse/types/${id}`, data), + + delete: (id: number) => + request.delete(`/groupCourse/types/${id}`), +} + +// ==================== 团课标签 ==================== + +export interface CourseLabel { + id?: number + labelName: string + color?: string + description?: string + createBy?: string + updateBy?: string + createdAt?: string + updatedAt?: string +} + +export const courseLabelApi = { + getAll: () => + request.get('/groupCourse/labels'), + + search: (params: any) => + request.get('/groupCourse/labels/search', { params }), + + getById: (id: number) => + request.get(`/groupCourse/labels/${id}`), + + getByTypeId: (typeId: number) => + request.get(`/groupCourse/types/${typeId}/labels`), + + create: (data: CourseLabel) => + request.post('/groupCourse/labels', data), + + update: (id: number, data: CourseLabel) => + request.put(`/groupCourse/labels/${id}`, data), + + delete: (id: number) => + request.delete(`/groupCourse/labels/${id}`), + + addLabelsToType: (typeId: number, labelIds: number[]) => + request.post(`/groupCourse/types/${typeId}/labels`, labelIds), + + removeLabelFromType: (typeId: number, labelId: number) => + request.delete(`/groupCourse/types/${typeId}/labels/${labelId}`), + + clearLabelsFromType: (typeId: number) => + request.delete(`/groupCourse/types/${typeId}/labels`), +} + +// ==================== 团课推荐 ==================== + +export interface GroupCourseRecommend { + id?: number + courseId: number + recommendTitle?: string + recommendContent?: string + recommendReason?: string + priority?: number + isActive?: boolean + createBy?: string + updateBy?: string + createdAt?: string + updatedAt?: string +} + +export const groupCourseRecommendApi = { + getAll: () => + request.get('/groupCourse/recommend/list'), + + getActive: () => + request.get('/groupCourse/recommend/active'), + + getById: (id: number) => + request.get(`/groupCourse/recommend/${id}`), + + getByCourseId: (courseId: number) => + request.get(`/groupCourse/recommend/course/${courseId}`), + + create: (data: GroupCourseRecommend) => + request.post('/groupCourse/recommend', data), + + update: (id: number, data: GroupCourseRecommend) => + request.put(`/groupCourse/recommend/${id}`, data), + + delete: (id: number) => + request.delete(`/groupCourse/recommend/${id}`), + + enable: (id: number) => + request.post(`/groupCourse/recommend/${id}/enable`), + + disable: (id: number) => + request.post(`/groupCourse/recommend/${id}/disable`), +} + +// ==================== 团课预约 ==================== + +export interface GroupCourseBooking { + id?: number + courseId: number + memberId: number + memberCardId: number + bookingTime?: string + status?: string + cancelTime?: string + courseName?: string + courseStartTime?: string + courseEndTime?: string + location?: string + createBy?: string + updateBy?: string + createdAt?: string + updatedAt?: string +} + +export const groupCourseBookingApi = { + book: (data: GroupCourseBooking) => + request.post('/groupCourse/book', data), + + cancel: (bookingId: number) => + request.post(`/groupCourse/booking/${bookingId}/cancel`), + + getByMemberId: (memberId: number) => + request.get(`/groupCourse/bookings/member/${memberId}`), + + getByCourseId: (courseId: number) => + request.get(`/groupCourse/bookings/course/${courseId}`), + + getById: (bookingId: number) => + request.get(`/groupCourse/bookings/${bookingId}`), +} diff --git a/gym-manage-web/src/router/index.ts b/gym-manage-web/src/router/index.ts index 13b66b8..8840e5d 100644 --- a/gym-manage-web/src/router/index.ts +++ b/gym-manage-web/src/router/index.ts @@ -93,6 +93,30 @@ const routes: RouteRecordRaw[] = [ name: 'ExceptionLog', component: () => import('@/views/audit/ExceptionLog.vue'), meta: { title: '异常日志' } + }, + { + path: 'courses', + name: 'GroupCourseManagement', + component: () => import('@/views/groupcourse/GroupCourseManagement.vue'), + meta: { title: '团课管理' } + }, + { + path: 'courses/types', + name: 'CourseTypeManagement', + component: () => import('@/views/groupcourse/CourseTypeManagement.vue'), + meta: { title: '团课类型' } + }, + { + path: 'courses/labels', + name: 'CourseLabelManagement', + component: () => import('@/views/groupcourse/CourseLabelManagement.vue'), + meta: { title: '团课标签' } + }, + { + path: 'courses/recommend', + name: 'CourseRecommendManagement', + component: () => import('@/views/groupcourse/CourseRecommendManagement.vue'), + meta: { title: '团课推荐' } } ] } diff --git a/gym-manage-web/src/views/groupcourse/CourseLabelManagement.vue b/gym-manage-web/src/views/groupcourse/CourseLabelManagement.vue new file mode 100644 index 0000000..1ecc710 --- /dev/null +++ b/gym-manage-web/src/views/groupcourse/CourseLabelManagement.vue @@ -0,0 +1,227 @@ + + + + + diff --git a/gym-manage-web/src/views/groupcourse/CourseRecommendManagement.vue b/gym-manage-web/src/views/groupcourse/CourseRecommendManagement.vue new file mode 100644 index 0000000..3cff64d --- /dev/null +++ b/gym-manage-web/src/views/groupcourse/CourseRecommendManagement.vue @@ -0,0 +1,246 @@ + + + + + diff --git a/gym-manage-web/src/views/groupcourse/CourseTypeManagement.vue b/gym-manage-web/src/views/groupcourse/CourseTypeManagement.vue new file mode 100644 index 0000000..02b14ee --- /dev/null +++ b/gym-manage-web/src/views/groupcourse/CourseTypeManagement.vue @@ -0,0 +1,269 @@ + + + + + diff --git a/gym-manage-web/src/views/groupcourse/GroupCourseManagement.vue b/gym-manage-web/src/views/groupcourse/GroupCourseManagement.vue new file mode 100644 index 0000000..a1b3483 --- /dev/null +++ b/gym-manage-web/src/views/groupcourse/GroupCourseManagement.vue @@ -0,0 +1,378 @@ + + + + +