diff --git a/gym-manage-uniapp/App.vue b/gym-manage-uniapp/App.vue index b72acaf..cc80391 100644 --- a/gym-manage-uniapp/App.vue +++ b/gym-manage-uniapp/App.vue @@ -4,80 +4,82 @@ - \ No newline at end of file + +// 强制 CSS 覆盖(最终保险) +const forceCSSHide = () => { + // #ifdef APP-PLUS + const style = document.createElement('style') + style.innerHTML = ` + uni-tabbar, + uni-tabbar .uni-tabbar, + .uni-tabbar, + uni-tabbar > .uni-tabbar, + [class*="uni-tabbar"] { + display: none !important; + height: 0 !important; + opacity: 0 !important; + visibility: hidden !important; + pointer-events: none !important; + } + ` + document.head.appendChild(style) + console.log('✅ CSS 强制覆盖已注入') + // #endif +} + +// 预加载所有 Tab 页面的核心数据 +const preloadTabData = () => { + // 延迟执行,不阻塞首屏 + setTimeout(() => { + // 预加载课程数据等... + }, 1000) +} + +onLaunch(() => { + console.log('App Launch') + preloadTabData() +}) + +onShow(() => { + console.log('App Show') + // #ifdef APP-PLUS + hideNativeTabBar() + // #endif +}) + +onHide(() => { + console.log('App Hide') +}) + + + \ No newline at end of file diff --git a/gym-manage-uniapp/api/main.js b/gym-manage-uniapp/api/main.js index eb59c09..0a38907 100644 --- a/gym-manage-uniapp/api/main.js +++ b/gym-manage-uniapp/api/main.js @@ -4,6 +4,14 @@ export function login(params) { return request.post('/member/auth/miniapp/login', params) } +export function sendCode(params) { + return request.post('/member/auth/send-code', params) +} + +export function loginWithPhone(params) { + return request.post('/member/auth/phone-login', params) +} + export function logout() { return request.post('/member/auth/logout') } @@ -16,14 +24,156 @@ export function checkIn(params) { return request.post('/checkIn/scan', params) } +export function getCheckInRecords(params = {}, options = {}) { + const { page = 0, size = 5 } = params + return request.post('/checkIn/page', { page, size }, options) +} + +export function getUnreadMessageCount(userId, options = {}) { + return request.get(`/messages/user/${userId}/unread`, {}, options) +} + +// ========== 消息相关API ========== + +/** + * 获取用户消息列表(支持分页) + * @param {number} userId - 用户ID + * @param {object} params - 查询参数 + * @param {number} params.page - 页码(从0开始) + * @param {number} params.size - 每页条数 + * @param {object} options - 请求选项 + * @returns {Promise} 消息列表 + */ +export function getUserMessages(userId, params = {}, options = {}) { + const { page = 0, size = 10 } = params + return request.get(`/messages/user/${userId}/page`, { page, size }, options) +} + +/** + * 获取未读消息列表(支持分页) + * @param {number} userId - 用户ID + * @param {object} params - 查询参数 + * @param {number} params.page - 页码(从0开始) + * @param {number} params.size - 每页条数 + * @param {object} options - 请求选项 + * @returns {Promise} 未读消息列表 + */ +export function getUnreadMessages(userId, params = {}, options = {}) { + const { page = 0, size = 10 } = params + return request.get(`/messages/user/${userId}/unread/page`, { page, size }, options) +} + +/** + * 标记消息为已读 + * @param {number|string} id - 消息ID + * @param {object} options - 请求选项 + * @returns {Promise} 操作结果 + */ +export function markMessageAsRead(id, options = {}) { + return request.put(`/messages/${id}/read`, {}, options) +} + +/** + * 标记所有消息为已读 + * @param {number} userId - 用户ID + * @param {object} options - 请求选项 + * @returns {Promise} 操作结果 + */ +export function markAllMessagesAsRead(userId, options = {}) { + return request.put(`/messages/user/${userId}/read`, {}, options) +} + +/** + * 删除消息 + * @param {number|string} id - 消息ID + * @param {object} options - 请求选项 + * @returns {Promise} 操作结果 + */ +export function deleteMessage(id, options = {}) { + return request.delete(`/messages/${id}`, {}, options) +} + export function getUserInfo(options = { cache: true, cacheTime: 30 * 60 * 1000 }) { return request.get('/member/info', {}, options) } +/** + * 获取会员详细信息(包含会员卡、积分等) + */ +export function getMemberDetail(options = { cache: false }) { + return request.get('/member/info', {}, options) +} + +/** + * 获取签到统计 + * @param {object} params - 查询参数 + * @param {string} params.startDate - 开始日期(yyyy-MM-dd) + * @param {string} params.endDate - 结束日期(yyyy-MM-dd) + */ +export function getCheckInStats(params = {}, options = { cache: false }) { + return request.get('/checkIn/statistics', params, options) +} + export function updateUserInfo(params) { return request.put('/member/info', params) } +/** + * 购买会员卡 + * @param {object} params - 购买参数 + * @param {number} params.memberId - 会员ID + * @param {number} params.memberCardId - 会员卡类型ID + * @param {number} [params.sourceOrderId] - 来源订单ID + */ +export function purchaseMemberCard(params) { + return request.post('/member-card-records/purchase', params) +} + +export function getMyMemberCards(memberId, options = { cache: false }) { + return request.get(`/member-card-records/my-cards/${memberId}`, {}, options) +} + +// ========== 支付相关API ========== + +/** + * 创建支付订单 + * @param {object} params - 支付参数 + * @param {number} params.memberId - 会员ID + * @param {string} params.orderType - 订单类型 (MEMBER_CARD-会员卡, GROUP_COURSE-团课, GOODS-商品) + * @param {string} params.goodsDesc - 商品描述 + * @param {string} params.transAmt - 交易金额(单位:分) + * @param {string} params.tradeType - 交易类型 (WECHAT-微信, ALIPAY-支付宝) + * @param {string} [params.remark] - 备注 + * @param {string} [params.acctId] - 账户号 + * @param {string} [params.timeExpire] - 过期时间 (yyyyMMddHHmmss) + * @param {string} [params.delayAcctFlag] - 延迟入账标识 + * @param {number} [params.feeFlag] - 手续费标识 + * @param {string} [params.limitPayType] - 禁用支付方式 + * @param {string} [params.channelNo] - 渠道号 + * @param {string} [params.payScene] - 支付场景 + * @param {string} [params.notifyUrl] - 回调通知URL + */ +export function createPayment(params) { + return request.post('/payment/create', params) +} + +/** + * 查询支付状态 + * @param {string} orderId - 订单ID + */ +export function getPaymentStatus(orderId) { + return request.get(`/payment/${orderId}`, {}) +} + +/** + * 申请退款 + * @param {string} orderId - 订单ID + * @param {string} refundAmt - 退款金额(单位:分) + */ +export function refundPayment(orderId, refundAmt) { + return request.post(`/payment/${orderId}/refund`, { refundAmt }) +} + export function getRecommendCourses(options = { cache: true, cacheTime: 10 * 60 * 1000 }) { return request.get('/course/recommend', {}, options) } @@ -37,14 +187,81 @@ export function getGroupCoursePage(params = {}, options = { cache: true, cacheTi return request.post('/groupCourse/page', { page, size, sort, order, keyword }, options) } +// ========== 团课预约相关API ========== + +/** + * 预约团课 + * @param {object} params - 预约参数 + * @param {number} params.courseId - 团课ID + * @param {number} params.memberId - 会员ID + * @param {number} params.memberCardRecordId - 会员卡记录ID + */ +export function bookGroupCourse(params) { + return request.post('/groupCourse/book', params) +} + +/** + * 取消预约 + * @param {number} bookingId - 预约ID + */ +export function cancelBooking(bookingId) { + return request.delete(`/groupCourse/book/${bookingId}`, {}) +} + +/** + * 团课签到 + * @param {number} memberId - 会员ID + * @param {number} courseId - 团课ID + */ +export function signinGroupCourse(memberId, courseId) { + return request.post(`/groupCourse/signin/${memberId}`, { courseId }) +} + +/** + * 查询会员预约记录 + * @param {number} memberId - 会员ID + */ +export function getMemberBookings(memberId, options = { cache: false }) { + return request.get(`/groupCourse/bookings/member/${memberId}`, {}, options) +} + +/** + * 查询课程预约记录 + * @param {number} courseId - 团课ID + */ +export function getCourseBookings(courseId, options = { cache: false }) { + return request.get(`/groupCourse/bookings/course/${courseId}`, {}, options) +} + export default { login, + sendCode, + loginWithPhone, logout, getQRCode, checkIn, + getCheckInRecords, + getCheckInStats, + getUnreadMessageCount, + getUserMessages, + getUnreadMessages, + markMessageAsRead, + markAllMessagesAsRead, + deleteMessage, getUserInfo, + getMemberDetail, updateUserInfo, + purchaseMemberCard, + getMyMemberCards, + createPayment, + getPaymentStatus, + refundPayment, getRecommendCourses, getCourseDetail, - getGroupCoursePage + getGroupCoursePage, + bookGroupCourse, + cancelBooking, + signinGroupCourse, + getMemberBookings, + getCourseBookings } diff --git a/gym-manage-uniapp/common/constants/routes.js b/gym-manage-uniapp/common/constants/routes.js index 50300f5..dbb5494 100644 --- a/gym-manage-uniapp/common/constants/routes.js +++ b/gym-manage-uniapp/common/constants/routes.js @@ -32,7 +32,8 @@ export const PAGE = { POINTS: '/pages/memberInfo/points', REFERRAL: '/pages/memberInfo/referral', MY_COURSES: '/pages/memberInfo/myCourses', - CHECK_IN_HISTORY: '/pages/memberInfo/checkInHistory' + CHECK_IN_HISTORY: '/pages/memberInfo/checkInHistory', + PURCHASE_CARD: '/pages/memberInfo/purchaseCard' } /** 底部 TabBar 页面路径,顺序与 TabBar.vue 一致 */ diff --git a/gym-manage-uniapp/common/memberInfo/bodyTestStore.js b/gym-manage-uniapp/common/memberInfo/bodyTestStore.js index 4347af5..86845ad 100644 --- a/gym-manage-uniapp/common/memberInfo/bodyTestStore.js +++ b/gym-manage-uniapp/common/memberInfo/bodyTestStore.js @@ -1,9 +1,3 @@ -import { bodyTestMock } from './mockData.js' - -function clone(value) { - return JSON.parse(JSON.stringify(value)) -} - function formatRecordTime(date) { const y = date.getFullYear() const m = String(date.getMonth() + 1).padStart(2, '0') @@ -28,9 +22,9 @@ function formatTime(date) { export function getDefaultBodyTestState() { return { - settings: { ...bodyTestMock.settings }, - device: { ...bodyTestMock.device }, - records: clone(bodyTestMock.records) + settings: {}, + device: { connected: false, battery: 80 }, + records: [] } } @@ -167,14 +161,26 @@ export function getBodyTestTrendData(store, metricKey, limit = 6) { })) } +function getMetricDefs() { + return [ + { key: 'weight', label: '体重' }, + { key: 'bmi', label: 'BMI' }, + { key: 'bodyFat', label: '体脂率' }, + { key: 'muscleMass', label: '肌肉量' }, + { key: 'visceralFat', label: '内脏脂肪' }, + { key: 'bmr', label: '基础代谢' } + ] +} + export function getCompareData(store, idA, idB) { const a = getBodyTestRecordById(store, idA) const b = getBodyTestRecordById(store, idB) if (!a || !b) return null + const metricDefs = getMetricDefs() const keys = ['weight', 'bmi', 'bodyFat', 'muscleMass', 'visceralFat', 'bmr'] const metrics = keys.map((key) => ({ key, - label: bodyTestMock.metricDefs.find((m) => m.key === key)?.label || key, + label: metricDefs.find((m) => m.key === key)?.label || key, valueA: a.metrics[key], valueB: b.metrics[key], diff: Math.round((a.metrics[key] - b.metrics[key]) * 10) / 10 @@ -183,8 +189,7 @@ export function getCompareData(store, idA, idB) { } export function getRecommendedCourses(record) { - const ids = record?.recommendedCourseIds || [] - return bodyTestMock.recommendedCourses.filter((c) => ids.includes(c.id)) + return [] } export function updateBodyTestSettings(store, patch) { @@ -243,9 +248,9 @@ export function saveSimulatedBodyTestRecord(store, finalMetrics) { status, metrics, radar, - bodySegments: clone(bodyTestMock.records[0].bodySegments), - advice: clone(bodyTestMock.records[0].advice), - recommendedCourseIds: [1, 2] + bodySegments: [], + advice: [], + recommendedCourseIds: [] } if (previous) { @@ -279,5 +284,3 @@ export function interpolateMeasuringMetrics(progress, profile) { bodyWater: Math.round((51 + (target.bodyWater - 51) * ratio) * 10) / 10 } } - -export { bodyTestMock } diff --git a/gym-manage-uniapp/common/memberInfo/bookingStore.js b/gym-manage-uniapp/common/memberInfo/bookingStore.js index 9b9b41e..7d07cbd 100644 --- a/gym-manage-uniapp/common/memberInfo/bookingStore.js +++ b/gym-manage-uniapp/common/memberInfo/bookingStore.js @@ -57,6 +57,14 @@ export function canCancelBooking(item) { return diff >= 2 * 3600000 } +export function canSigninCourse(item) { + if (!item?.courseDate || !item?.startTime) return false + if (item.status !== 'booked' && item.status !== 0) return false + const start = new Date(`${item.courseDate} ${item.startTime}`.replace(/-/g, '/')) + const diff = start - Date.now() + return diff <= 2 * 3600000 && diff >= -2 * 3600000 +} + export function bookCourse(store, courseId) { const course = store.courseCatalog.find((c) => c.id === Number(courseId)) if (!course) return { ok: false, message: '课程不存在' } diff --git a/gym-manage-uniapp/common/memberInfo/index.js b/gym-manage-uniapp/common/memberInfo/index.js index 580a06a..a3700d5 100644 --- a/gym-manage-uniapp/common/memberInfo/index.js +++ b/gym-manage-uniapp/common/memberInfo/index.js @@ -1,4 +1,3 @@ -export { memberCenterMock, userInfoMock, fitnessGoalOptions, bookingMock, memberCardMock, bodyTestMock, moduleMock, courseCatalogMock } from './mockData.js' export { statusBarTimeMixin, subPageMixin } from './mixins.js' export { loadMemberStore, @@ -31,8 +30,7 @@ export { connectBodyTestDevice, disconnectBodyTestDevice, saveSimulatedBodyTestRecord, - interpolateMeasuringMetrics, - bodyTestMock + interpolateMeasuringMetrics } from './bodyTestStore.js' export { getTrainingReportData, @@ -52,8 +50,7 @@ export { getMyCoursesByTab, getOnlineCourseById, updateOnlineProgress, - getCheckInHistory, - moduleMock + getCheckInHistory } from './moduleStore.js' export { filterCourses, @@ -61,8 +58,7 @@ export { bookCourse, canCancelBooking, enrichCourseForDisplay, - getWeekDates, - courseCatalogMock + getWeekDates } from './bookingStore.js' export { previewImage, persistChosenImage, isLocalFilePath } from './media.js' export { maskPhone, formatMemberCenterPhone, normalizePhoneForStore } from './format.js' diff --git a/gym-manage-uniapp/common/memberInfo/mockData.js b/gym-manage-uniapp/common/memberInfo/mockData.js index e88bacc..16ea95c 100644 --- a/gym-manage-uniapp/common/memberInfo/mockData.js +++ b/gym-manage-uniapp/common/memberInfo/mockData.js @@ -1,6 +1,9 @@ /** 个人中心模块 mock 数据(后续可替换为 API) */ -export const memberCenterMock = { +// Mock 数据开关 - 设为 false 可关闭所有 mock 数据 +export const MOCK_ENABLED = false + +export const memberCenterMock = MOCK_ENABLED ? { userInfo: { name: '张小芳', phone: '13812345678 已绑定微信', @@ -65,7 +68,7 @@ export const memberCenterMock = { registered: 3, purchased: 2 } -} +} : null export const userInfoMock = { name: '张小芳', diff --git a/gym-manage-uniapp/common/memberInfo/store.js b/gym-manage-uniapp/common/memberInfo/store.js index 3d79750..68bb547 100644 --- a/gym-manage-uniapp/common/memberInfo/store.js +++ b/gym-manage-uniapp/common/memberInfo/store.js @@ -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', diff --git a/gym-manage-uniapp/common/style/memberInfo/member-info-header.css b/gym-manage-uniapp/common/style/memberInfo/member-info-header.css index 22b25ed..cb769f2 100644 --- a/gym-manage-uniapp/common/style/memberInfo/member-info-header.css +++ b/gym-manage-uniapp/common/style/memberInfo/member-info-header.css @@ -269,3 +269,63 @@ flex-shrink: 0; background-color: rgba(255, 255, 255, 0.31); } + +.profile-header__user-inner--guest { + display: flex; + flex-direction: row; + gap: 16px; + align-items: center; + width: 100%; +} + +.profile-header__avatar-wrap--guest { + width: 72px; + height: 72px; + flex-shrink: 0; + border-radius: 50%; + border: 2px solid rgba(255, 255, 255, 0.5); + overflow: hidden; + background-color: rgba(255, 255, 255, 0.9); +} + +.profile-header__avatar--guest { + width: 100%; + height: 100%; + display: block; +} + +.profile-header__user-meta--guest { + flex: 1; + display: flex; + flex-direction: column; + gap: 4px; +} + +.profile-header__name--guest { + font-size: 18px; + font-weight: 600; + color: black; + white-space: nowrap; +} + +.profile-header__phone--guest { + font-size: 14px; + font-weight: 400; + color: #999999; + white-space: nowrap; +} + +.profile-header__user-inner--guest { + display: flex; + flex-direction: row; + gap: 16px; + align-items: center; + width: 100%; + margin: 0; + padding: 0; + background: none; + border: none; + outline: none; + box-shadow: none; + line-height: inherit; +} diff --git a/gym-manage-uniapp/common/style/memberInfo/pages/booking-page.css b/gym-manage-uniapp/common/style/memberInfo/pages/booking-page.css index 774d479..4b4c409 100644 --- a/gym-manage-uniapp/common/style/memberInfo/pages/booking-page.css +++ b/gym-manage-uniapp/common/style/memberInfo/pages/booking-page.css @@ -239,6 +239,29 @@ text-overflow: ellipsis; } +.bk-card__actions { + display: flex; + flex-direction: row; + align-items: center; + gap: 8px; +} + +.bk-card__signin { + flex-shrink: 0; + padding: 6px 14px; + border-radius: 8px; + background-color: var(--accent-orange, #FF6B35); + box-sizing: border-box; +} + +.bk-card__signin-text { + font-size: var(--font-size-base, 14px); + font-family: var(--font-family); + font-weight: 500; + color: var(--text-inverse, #ffffff); + white-space: nowrap; +} + .bk-card__cancel { flex-shrink: 0; padding: 6px 14px; diff --git a/gym-manage-uniapp/components/Skeleton/MessageSkeleton.vue b/gym-manage-uniapp/components/Skeleton/MessageSkeleton.vue new file mode 100644 index 0000000..e36852a --- /dev/null +++ b/gym-manage-uniapp/components/Skeleton/MessageSkeleton.vue @@ -0,0 +1,89 @@ + + + + + diff --git a/gym-manage-uniapp/components/index/PageHeader.vue b/gym-manage-uniapp/components/index/PageHeader.vue index 8fe980f..a85f91c 100644 --- a/gym-manage-uniapp/components/index/PageHeader.vue +++ b/gym-manage-uniapp/components/index/PageHeader.vue @@ -1,5 +1,5 @@ \ No newline at end of file diff --git a/gym-manage-uniapp/components/index/TodayRecommend.vue b/gym-manage-uniapp/components/index/TodayRecommend.vue index 286c387..cee8f5c 100644 --- a/gym-manage-uniapp/components/index/TodayRecommend.vue +++ b/gym-manage-uniapp/components/index/TodayRecommend.vue @@ -6,7 +6,7 @@ 今日推荐 - + 查看更多 @@ -50,6 +50,10 @@ - diff --git a/gym-manage-uniapp/components/memberInfo/MemberInfoMemberCard.vue b/gym-manage-uniapp/components/memberInfo/MemberInfoMemberCard.vue index c9964cb..8a18cfe 100644 --- a/gym-manage-uniapp/components/memberInfo/MemberInfoMemberCard.vue +++ b/gym-manage-uniapp/components/memberInfo/MemberInfoMemberCard.vue @@ -35,7 +35,7 @@ > + > @@ -94,6 +94,18 @@ 续费 + + + 购买新卡 + + @@ -115,20 +127,15 @@ - - diff --git a/gym-manage-uniapp/components/memberInfo/MemberInfoStatusBar.vue b/gym-manage-uniapp/components/memberInfo/MemberInfoStatusBar.vue index d14ef34..f754eaa 100644 --- a/gym-manage-uniapp/components/memberInfo/MemberInfoStatusBar.vue +++ b/gym-manage-uniapp/components/memberInfo/MemberInfoStatusBar.vue @@ -7,14 +7,8 @@ - diff --git a/gym-manage-uniapp/components/memberInfo/MemberInfoSubNav.vue b/gym-manage-uniapp/components/memberInfo/MemberInfoSubNav.vue index dd0f9c6..cb43d7d 100644 --- a/gym-manage-uniapp/components/memberInfo/MemberInfoSubNav.vue +++ b/gym-manage-uniapp/components/memberInfo/MemberInfoSubNav.vue @@ -27,80 +27,75 @@ - - diff --git a/gym-manage-uniapp/manifest.json b/gym-manage-uniapp/manifest.json index ecc7130..e592805 100644 --- a/gym-manage-uniapp/manifest.json +++ b/gym-manage-uniapp/manifest.json @@ -17,7 +17,9 @@ "delay" : 0 }, /* 模块配置 */ - "modules" : {}, + "modules" : { + "OAuth" : {} + }, /* 应用发布信息 */ "distribute" : { /* android打包配置 */ @@ -45,7 +47,14 @@ "dSYMs" : false }, /* SDK配置 */ - "sdkConfigs" : {}, + "sdkConfigs" : { + "oauth" : { + "weixin" : { + "appid" : "wx8f0d644d1d8985f6", + "UniversalLinks" : "" + } + } + }, "icons" : { "android" : { "hdpi" : "unpackage/res/icons/72x72.png", diff --git a/gym-manage-uniapp/pages.json b/gym-manage-uniapp/pages.json index 152613b..8e3833b 100644 --- a/gym-manage-uniapp/pages.json +++ b/gym-manage-uniapp/pages.json @@ -53,6 +53,13 @@ } } }, + { + "path": "pages/memberInfo/login", + "style": { + "navigationStyle": "custom", + "navigationBarTitleText": "登录" + } + }, { "path": "pages/memberInfo/memberCard", "style": { @@ -207,6 +214,13 @@ "navigationBarTitleText": "签到记录" } }, + { + "path": "pages/memberInfo/purchaseCard", + "style": { + "navigationStyle": "custom", + "navigationBarTitleText": "购买会员卡" + } + }, { "path": "pages/memberInfo/courseList", "style": { @@ -280,6 +294,25 @@ "style": { "navigationBarTitleText": "" } + }, + { + "path": "pages/message/index", + "style": { + "navigationStyle": "custom" + } + }, + { + "path": "pages/message/detail", + "style": { + "navigationStyle": "custom", + "navigationBarTitleText": "消息详情" + } + }, + { + "path": "pages/webview/webview", + "style": { + "navigationBarTitleText": "" + } } ], "globalStyle": { diff --git a/gym-manage-uniapp/pages/checkIn/checkIn.vue b/gym-manage-uniapp/pages/checkIn/checkIn.vue index 74ce4f5..049b89e 100644 --- a/gym-manage-uniapp/pages/checkIn/checkIn.vue +++ b/gym-manage-uniapp/pages/checkIn/checkIn.vue @@ -36,7 +36,7 @@ - + @@ -47,7 +47,7 @@ - + @@ -57,7 +57,7 @@ @@ -82,7 +82,7 @@ - +