From 0067a6a3c15d99b655c320d843c9292f2e5475c7 Mon Sep 17 00:00:00 2001 From: "@xiao-xiao0105" <1097449274@qq.com> Date: Fri, 6 Nov 2026 13:36:54 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=A2=84=E7=BA=A6=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/book/book.vue | 193 ++++++----- pages/book/bookinfo.vue | 19 +- pages/book/booklist.vue | 21 +- pages/book/bookteacher.vue | 3 + pages/chatbox/im-user-info.vue | 50 +-- pages/components/member-card-scroll.vue | 36 +- pages/components/member-card.vue | 16 +- pages/user/cardDetail.vue | 2 +- pages/user/courselist.vue | 7 +- pages/user/mycourseinfo.vue | 420 +++++++++++++++++++++--- pages/user/user.vue | 116 ++----- 11 files changed, 588 insertions(+), 295 deletions(-) diff --git a/pages/book/book.vue b/pages/book/book.vue index a9d4771..8f14758 100644 --- a/pages/book/book.vue +++ b/pages/book/book.vue @@ -10,7 +10,7 @@ - + @@ -51,8 +51,8 @@ - - + + @@ -73,46 +73,53 @@ - - - {{ currentCourse.courseName }} - - 需扣 {{ currentCourse.deductType === 'count' - ? currentCourse.deductCount + '次' - : '¥' + currentCourse.deductAmount }} - + + + 无对应会员卡可使用 + + + + + {{ item.courseName}} + + 需扣 {{ selectedCard.memberChargeType === 'total_fee' + ? '¥' + selectedCard.chargeFee + : selectedCard.chargeCnt + '次'}} + + + + + 本次使用卡片: + + {{ effectiveCardName }} + + 默认 + - - - 本次使用卡片: - - {{ effectiveCardName }} - - 默认 + + + + + + - - - - - - + + @@ -135,31 +142,27 @@ export default { userid: "", id: "", item: { - courseTimeId: 1935590320322428931, - claName: "普拉提A班", - courseName: "普拉提", - storeName: "慢瑜伽-三台子店", + courseTimeId: null, + claName: "", + courseName: "", + storeName: "", pic: null, - claDate: "2025-10-01", - weekDay: "星期二", - startTime: "08:00", - endTime: "09:30", - staffName: "冉洪涛老师", - studentCount: 1, + claDate: "", + weekDay: "", + startTime: "", + endTime: "", + staffName: "", + studentCount: null, roomName: null, - claColor: "#409EFF", - claTimeStatus: "1", - bookAttendCnt: "1", - atClassCnt: "5", - lessCnt: "3" + claColor: "", + claTimeStatus: "", + bookAttendCnt: "", + atClassCnt: "", + lessCnt: "" }, remark: null, memberCards: [], currentCourse: { - courseName: '普拉提A班', - deductType: 'COUNT', - deductCount: 1, - deductAmount: 0 }, defaultCardId: null, // ✅ 用户手动选中的卡(父组件持有) @@ -210,9 +213,9 @@ export default { isCardUsable(card) { if (!card) return false; if (card.status && card.status !== 'ACTIVE') return false; - if (card.expireDate) { + if (card.expiryDate) { const now = new Date(); - const expire = new Date(card.expireDate.replace(/-/g, '/')); + const expire = new Date(card.expiryDate.replace(/-/g, '/')); if (now > expire) return false; } const type = this.currentCourse.deductType; @@ -235,15 +238,19 @@ export default { // ✅ 打开弹窗:重置手动选择,用默认卡 async openCardSelect(item) { var user = myCache('userInfo'); + item.visitStore=user.visitStore; + console.log('item',item) const { data: memberCards } = await uni.$http.post("/api/memberCard/getMemberCardListByCourseTimeId", - {visitStore:user.visitStore, - courseId:item.courseId - }); - console.log("memberCards",memberCards) + item); //如果为空 则没有适合的卡片 this.memberCards = memberCards.data - this.selectedCard = null; + console.log('this.memberCards',this.memberCards) + if(this.memberCards&&this.memberCards.length > 0){ + this.selectedCard = this.memberCards[0]; + }else{ + this.selectedCard = null; + } this.$refs.cardPopup.open(); }, @@ -252,37 +259,53 @@ export default { }, async confirmSelect() { - // ✅ 直接从父组件 computed 拿有效卡 const card = this.effectiveCard; if (!card) { uni.showToast({ title: '无可用会员卡', icon: 'none' }); return; } - const { data: res } = await uni.$http.post('/api/course/bookCourse', { - courseTimeId: this.item.courseTimeId, - cardId: card.id + // 开启loading + uni.showLoading({ + title: '预约中...', + mask: true // 遮罩,防止重复点击 }); - if (res && res.success) { - myCache('courserefresh', 1); - uni.showModal({ - title: '提示', - content: '课程已预约!', - cancelText: '返回', - confirmText: '确定', - success: ress => { - uni.navigateBack({ delta: 1 }); - } + try { + const { data: res } = await uni.$http.post('/api/course/bookCourse', { + courseTimeId: this.item.courseTimeId, + memberCardId: card.memberCardId, + memberChargeType: this.selectedCard.memberChargeType, + chargeCnt: this.selectedCard.chargeCnt, + chargeFee: this.selectedCard.chargeFee }); - } else { - uni.showModal({ - title: '提示', - content: res.message ? res.message : '课程预约失败!', - cancelText: '取消', - confirmText: '确定' + if (res && res.success) { + myCache('courserefresh', 1); + this.closeCardSelect(); + this.$refs.uToast.show({ + title: '课程预约成功,请到 我的预约-预约中 查看', + type: 'success', + duration: 2000 + }); + } else { + this.$refs.uToast.show({ + title: res.message ? res.message : '课程预约失败!', + type: 'error', + duration: 2000 + }); + } + } catch (err) { + // 网络异常捕获 + this.$refs.uToast.show({ + title: '预约请求异常,请稍后重试', + type: 'error', + duration: 2000 }); + } finally { + // 不管成功失败、报错,都关闭loading + uni.hideLoading(); } }, + formatTime(timeStr) { return timeStr.slice(0, 5); }, @@ -819,5 +842,11 @@ export default { border: none; &::after { border: none; } } + .empty-tip { + padding: 60rpx 20rpx; + text-align: center; + font-size: 28rpx; + color: #999; + } diff --git a/pages/book/bookinfo.vue b/pages/book/bookinfo.vue index 76511c6..b865925 100644 --- a/pages/book/bookinfo.vue +++ b/pages/book/bookinfo.vue @@ -23,19 +23,24 @@ 预约状态: - 教练确认 + 预约中 预约中 - 待上课 + 预约成功,待上课 已完成 已取消 + + 签到状态: + 已签到 + 未签到 + 授课教练: {{info.teacherName }} 上课教室: - {{info.roomName }} + {{info.roomName?info.roomName:'待定'}} 上课时间: @@ -168,7 +173,7 @@ this.id=options.id; this.getinfo(); } - + // 设置app角标 this.setBadge(); }, @@ -187,13 +192,13 @@ // 设置app角标 setBadge() { var count = myCache("massageCount")?myCache("massageCount"):-1; - if (count > 0) { + if (count > 0) { // app清除角标的数量 //#ifdef APP-PLUS plus.runtime.setBadgeNumber(count); //#endif - - } else { + + } else { // app清除角标的数量 clearBadgeNumber(); } diff --git a/pages/book/booklist.vue b/pages/book/booklist.vue index 59090d4..9747bac 100644 --- a/pages/book/booklist.vue +++ b/pages/book/booklist.vue @@ -19,11 +19,13 @@ - 教练确认 + + 预约中 预约中 - 待上课 + 预约成功,待上课 已完成 已取消 + 预约失败 @@ -35,7 +37,8 @@ {{item.courseName}} {{item.claName}} 教练:{{item.teacherName || '-'}} 上课时间:{{ item.claDate+' '+item.startTime+'-'+item.endTime}} - 教室:{{item.roomName}} + 教室:{{item.roomName?item.roomName:'待定'}} + 使用会员卡号:{{item.cardNo}} @@ -49,7 +52,7 @@ - + @@ -677,7 +680,7 @@ import { mapState, mapGetters, mapActions } from 'vuex'; // 取消预约 cancelyydo(e){ console.log(e); - var id= e.currentTarget.dataset.id; + // var id= e.currentTarget.dataset.id; var that = this; //取消预约 uni.showModal({ @@ -687,16 +690,14 @@ import { mapState, mapGetters, mapActions } from 'vuex'; confirmText: '确定', success: ress => { if (ress.confirm) { - that.delyydo(id); + that.delyydo(e); } } }); }, // 取消预约 - async delyydo(id){ - var param={ - "courseTimeId":id - }; + async delyydo(e){ + var param=e; uni.showToast({ title: '取消中...', icon: 'success', diff --git a/pages/book/bookteacher.vue b/pages/book/bookteacher.vue index 13aa2f3..73d1244 100644 --- a/pages/book/bookteacher.vue +++ b/pages/book/bookteacher.vue @@ -12,10 +12,12 @@ 性别:{{item.sex==2?'男':(item.sex==1?'女':'未知')}} 电话:{{item.phone?item.phone:'-'}} + 会员卡号:{{item.cardNo?item.cardNo:'-'}} + 教练确认 预约中 待上课 @@ -139,6 +141,7 @@ // 全部 this.loadStatus="noMore"; this.list=res.data; + console.log('this.list',this.list) this.$forceUpdate(); } else{ diff --git a/pages/chatbox/im-user-info.vue b/pages/chatbox/im-user-info.vue index 91f9ebb..a3ed2e1 100644 --- a/pages/chatbox/im-user-info.vue +++ b/pages/chatbox/im-user-info.vue @@ -8,16 +8,6 @@ ID:{{ userInfo.id || userInfo.userId || '-' }} - - - - - - - - - - 加入黑名单 @@ -84,45 +74,7 @@ export default { console.error('查询黑名单状态失败', e) } }, - /** - * switch点击,不直接改状态,弹出确认弹窗 - */ - onBlackSwitchChange(e) { - // e.detail.value 是用户想要切换到的目标状态 - const targetStatus = e.detail.value - const title = targetStatus ? '加入黑名单' : '取消黑名单' - const content = targetStatus - ? '加入黑名单后,对方将无法给你发送消息,确定?' - : '确定将该用户移出黑名单?' - - uni.showModal({ - title, - content, - success: async (res) => { - if (!res.confirm) { - // 用户点取消,不做任何操作,switch会自动回弹回旧状态,无需手动赋值 - return - } - try { - const url = targetStatus ? '/api/blacklist/add?targetUid=' : '/api/blacklist/cancel?targetUid=' - await uni.$http.post(`${url}${this.userId}`) - // 接口成功才更新本地状态 - this.isBlacked = targetStatus - uni.showToast({ - title: this.isBlacked ? '已加入黑名单' : '已取消黑名单', - icon: 'none' - }) - } catch (err) { - uni.showToast({ title: '操作失败', icon: 'none' }) - } - } - }) - }, onSendMessage() { - // if (this.isBlacked) { - // uni.showToast({ title: '你已将对方加入黑名单', icon: 'none' }) - // return - // } let chat = { type: 'PRIVATE', targetId: this.userId, @@ -190,7 +142,7 @@ export default { onBackPress(e) { // 来源是左上角返回 / 安卓返回键 if(e.from === 'backbutton'){ - if(this.isBlacked){ + if(this.isBlacked && this.chatIndex){ // 拉黑成功,自定义跳转chat this.goBackChat() return true // return true 阻止原生默认返回 diff --git a/pages/components/member-card-scroll.vue b/pages/components/member-card-scroll.vue index 9a09413..61a5d35 100644 --- a/pages/components/member-card-scroll.vue +++ b/pages/components/member-card-scroll.vue @@ -1,7 +1,7 @@