整合api请求、添加购买会员卡页面、登陆页面

This commit is contained in:
future
2026-06-23 22:17:53 +08:00
parent 1c547a717e
commit 8d8c823616
70 changed files with 7666 additions and 2656 deletions
+28 -23
View File
@@ -1,9 +1,3 @@
import {
memberCenterMock,
userInfoMock,
memberCardMock,
bookingMock
} from './mockData.js'
import { formatMemberCenterPhone, normalizePhoneForStore } from './format.js'
import {
getDefaultBodyTestState,
@@ -24,10 +18,6 @@ import {
const STORAGE_KEY = 'gym_member_info_v1'
function clone(value) {
return JSON.parse(JSON.stringify(value))
}
export function buildCardTip(remainingDays) {
return `距离下次到期还有${remainingDays}天,请及时续费`
}
@@ -70,24 +60,26 @@ function finalizeStore(store) {
function getDefaultStore() {
return finalizeStore({
profile: { ...userInfoMock, avatar: memberCenterMock.userInfo.avatar },
memberProfile: { ...memberCenterMock.userInfo },
stats: { ...memberCenterMock.stats },
cardInfo: { ...memberCenterMock.cardInfo },
card: { ...memberCardMock.card },
records: clone(memberCardMock.records),
ongoingBookings: clone(bookingMock.ongoing),
historyBookings: clone(bookingMock.history),
checkIns: clone(memberCenterMock.checkIns),
bodyReport: { ...memberCenterMock.bodyReport },
profile: {},
memberProfile: {},
stats: {},
cardInfo: {},
card: {},
records: [],
ongoingBookings: [],
historyBookings: [],
checkIns: [],
bodyReport: {},
bodyTest: getDefaultBodyTestState(),
modules: getDefaultModuleState(),
courseCatalog: getDefaultCourseCatalog(),
couponPoints: { ...memberCenterMock.couponPoints },
referral: { ...memberCenterMock.referral }
couponPoints: {},
referral: {}
})
}
export { getDefaultStore }
function mergeDefaults(saved) {
const defaults = getDefaultStore()
return finalizeStore({
@@ -204,7 +196,11 @@ export function getBookingPreview(store, limit = 2) {
export function getCenterPageData(store) {
return {
userInfo: { ...store.memberProfile },
stats: { ...store.stats },
stats: {
checkInCount: store.stats?.checkInCount ?? 0,
trainingHours: store.stats?.trainingHours ?? 0,
pointsBalance: store.stats?.pointsBalance ?? 0
},
cardInfo: { ...store.cardInfo },
bookingPreview: getBookingPreview(store),
checkIns: store.checkIns.map((item) => ({ ...item })),
@@ -234,6 +230,15 @@ export function cancelOngoingBooking(store, id) {
const course = store.courseCatalog.find((c) => c.id === removed.courseId)
if (course && course.enrolled > 0) course.enrolled -= 1
}
// 同步从 myCourses.group.ongoing 中移除
if (store.modules?.myCourses?.group?.ongoing) {
const myCoursesIndex = store.modules.myCourses.group.ongoing.findIndex((c) => c.id === id)
if (myCoursesIndex >= 0) {
store.modules.myCourses.group.ongoing.splice(myCoursesIndex, 1)
}
}
store.historyBookings.unshift({
...removed,
status: 'cancelled',