diff --git a/pages/book/book.vue b/pages/book/book.vue
index 8f14758..a9d4771 100644
--- a/pages/book/book.vue
+++ b/pages/book/book.vue
@@ -10,7 +10,7 @@
-
+
@@ -51,8 +51,8 @@
-
-
+
+
@@ -73,53 +73,46 @@
-
-
- 无对应会员卡可使用
-
-
-
-
- {{ item.courseName}}
-
- 需扣 {{ selectedCard.memberChargeType === 'total_fee'
- ? '¥' + selectedCard.chargeFee
- : selectedCard.chargeCnt + '次'}}
-
-
-
-
- 本次使用卡片:
-
- {{ effectiveCardName }}
-
- 默认
-
+
+
+ {{ currentCourse.courseName }}
+
+ 需扣 {{ currentCourse.deductType === 'count'
+ ? currentCourse.deductCount + '次'
+ : '¥' + currentCourse.deductAmount }}
+
-
-
-
-
-
-
+
+
+
+
-
@@ -142,27 +135,31 @@ export default {
userid: "",
id: "",
item: {
- courseTimeId: null,
- claName: "",
- courseName: "",
- storeName: "",
+ courseTimeId: 1935590320322428931,
+ claName: "普拉提A班",
+ courseName: "普拉提",
+ storeName: "慢瑜伽-三台子店",
pic: null,
- claDate: "",
- weekDay: "",
- startTime: "",
- endTime: "",
- staffName: "",
- studentCount: null,
+ claDate: "2025-10-01",
+ weekDay: "星期二",
+ startTime: "08:00",
+ endTime: "09:30",
+ staffName: "冉洪涛老师",
+ studentCount: 1,
roomName: null,
- claColor: "",
- claTimeStatus: "",
- bookAttendCnt: "",
- atClassCnt: "",
- lessCnt: ""
+ claColor: "#409EFF",
+ claTimeStatus: "1",
+ bookAttendCnt: "1",
+ atClassCnt: "5",
+ lessCnt: "3"
},
remark: null,
memberCards: [],
currentCourse: {
+ courseName: '普拉提A班',
+ deductType: 'COUNT',
+ deductCount: 1,
+ deductAmount: 0
},
defaultCardId: null,
// ✅ 用户手动选中的卡(父组件持有)
@@ -213,9 +210,9 @@ export default {
isCardUsable(card) {
if (!card) return false;
if (card.status && card.status !== 'ACTIVE') return false;
- if (card.expiryDate) {
+ if (card.expireDate) {
const now = new Date();
- const expire = new Date(card.expiryDate.replace(/-/g, '/'));
+ const expire = new Date(card.expireDate.replace(/-/g, '/'));
if (now > expire) return false;
}
const type = this.currentCourse.deductType;
@@ -238,19 +235,15 @@ 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",
- item);
+ {visitStore:user.visitStore,
+ courseId:item.courseId
+ });
+ console.log("memberCards",memberCards)
//如果为空 则没有适合的卡片
this.memberCards = memberCards.data
- console.log('this.memberCards',this.memberCards)
- if(this.memberCards&&this.memberCards.length > 0){
- this.selectedCard = this.memberCards[0];
- }else{
- this.selectedCard = null;
- }
+ this.selectedCard = null;
this.$refs.cardPopup.open();
},
@@ -259,53 +252,37 @@ export default {
},
async confirmSelect() {
+ // ✅ 直接从父组件 computed 拿有效卡
const card = this.effectiveCard;
if (!card) {
uni.showToast({ title: '无可用会员卡', icon: 'none' });
return;
}
- // 开启loading
- uni.showLoading({
- title: '预约中...',
- mask: true // 遮罩,防止重复点击
+ const { data: res } = await uni.$http.post('/api/course/bookCourse', {
+ courseTimeId: this.item.courseTimeId,
+ cardId: card.id
});
- 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
+ if (res && res.success) {
+ myCache('courserefresh', 1);
+ uni.showModal({
+ title: '提示',
+ content: '课程已预约!',
+ cancelText: '返回',
+ confirmText: '确定',
+ success: ress => {
+ uni.navigateBack({ delta: 1 });
+ }
});
- 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
+ } else {
+ uni.showModal({
+ title: '提示',
+ content: res.message ? res.message : '课程预约失败!',
+ cancelText: '取消',
+ confirmText: '确定'
});
- } finally {
- // 不管成功失败、报错,都关闭loading
- uni.hideLoading();
}
},
-
formatTime(timeStr) {
return timeStr.slice(0, 5);
},
@@ -842,11 +819,5 @@ 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 b865925..ada0ea6 100644
--- a/pages/book/bookinfo.vue
+++ b/pages/book/bookinfo.vue
@@ -23,24 +23,19 @@
预约状态:
- 预约中
+ 教练确认
预约中
- 预约成功,待上课
+ 待上课
已完成
已取消
-
- 签到状态:
- 已签到
- 未签到
-
授课教练:
{{info.teacherName }}
上课教室:
- {{info.roomName?info.roomName:'待定'}}
+ {{info.roomName }}
上课时间:
diff --git a/pages/book/booklist.vue b/pages/book/booklist.vue
index 9747bac..59090d4 100644
--- a/pages/book/booklist.vue
+++ b/pages/book/booklist.vue
@@ -19,13 +19,11 @@
-
- 预约中
+ 教练确认
预约中
- 预约成功,待上课
+ 待上课
已完成
已取消
- 预约失败
@@ -37,8 +35,7 @@
{{item.courseName}} {{item.claName}}
教练:{{item.teacherName || '-'}}
上课时间:{{ item.claDate+' '+item.startTime+'-'+item.endTime}}
- 教室:{{item.roomName?item.roomName:'待定'}}
- 使用会员卡号:{{item.cardNo}}
+ 教室:{{item.roomName}}
@@ -52,7 +49,7 @@
-
+
@@ -680,7 +677,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({
@@ -690,14 +687,16 @@ import { mapState, mapGetters, mapActions } from 'vuex';
confirmText: '确定',
success: ress => {
if (ress.confirm) {
- that.delyydo(e);
+ that.delyydo(id);
}
}
});
},
// 取消预约
- async delyydo(e){
- var param=e;
+ async delyydo(id){
+ var param={
+ "courseTimeId":id
+ };
uni.showToast({
title: '取消中...',
icon: 'success',
diff --git a/pages/book/bookteacher.vue b/pages/book/bookteacher.vue
index 73d1244..13aa2f3 100644
--- a/pages/book/bookteacher.vue
+++ b/pages/book/bookteacher.vue
@@ -12,12 +12,10 @@
性别:{{item.sex==2?'男':(item.sex==1?'女':'未知')}}
电话:{{item.phone?item.phone:'-'}}
- 会员卡号:{{item.cardNo?item.cardNo:'-'}}
-
教练确认
预约中
待上课
@@ -141,7 +139,6 @@
// 全部
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 a3ed2e1..91f9ebb 100644
--- a/pages/chatbox/im-user-info.vue
+++ b/pages/chatbox/im-user-info.vue
@@ -8,6 +8,16 @@
ID:{{ userInfo.id || userInfo.userId || '-' }}
+
+
+
+
+
+
+
+
+
+
加入黑名单
@@ -74,7 +84,45 @@ 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,
@@ -142,7 +190,7 @@ export default {
onBackPress(e) {
// 来源是左上角返回 / 安卓返回键
if(e.from === 'backbutton'){
- if(this.isBlacked && this.chatIndex){
+ if(this.isBlacked){
// 拉黑成功,自定义跳转chat
this.goBackChat()
return true // return true 阻止原生默认返回
diff --git a/pages/components/member-card-scroll.vue b/pages/components/member-card-scroll.vue
index 61a5d35..a467312 100644
--- a/pages/components/member-card-scroll.vue
+++ b/pages/components/member-card-scroll.vue
@@ -1,7 +1,7 @@
- 正常
+ 正常
{{ getUnusableReason(card) }}
@@ -99,20 +99,15 @@ export default {
},
// 动态计算首尾 padding
innerStyle() {
- // ✅ 只要卡片总数=1,不管外部center参数传啥,自动触发居中计算
- const isSingleCard = this.cards && this.cards.length === 1;
- if (!this.center && !isSingleCard) {
- // 多卡正常:保留原来的20rpx边距
+ if (!this.center) {
return { paddingLeft: '20rpx', paddingRight: '20rpx' };
}
- // 居中计算:左右padding = (屏幕宽度750rpx - 卡片宽度) / 2,刚好把卡片推到正中间
const padding = Math.max(0, (this.screenWidthRpx - this.cardWidthRpx) / 2);
return {
- paddingLeft: padding-30 + 'rpx',
+ paddingLeft: padding + 'rpx',
paddingRight: padding + 'rpx'
};
}
-
},
watch: {
cards: {
@@ -188,9 +183,9 @@ export default {
if (!card) return false;
// ✅ 只有 ACTIVE 才可用
if (card.status && card.status !== 'ACTIVE') return false;
- if (card.expiryDate) {
+ if (card.expireDate) {
const now = new Date();
- const expire = new Date(card.expiryDate.replace(/-/g, '/'));
+ const expire = new Date(card.expireDate.replace(/-/g, '/'));
if (now > expire) return false;
}
if (card.type === 'count') {
@@ -219,9 +214,9 @@ export default {
if (card.status && card.status == 'DEPLETED') {
return '卡片额度已用完';
}
- if (card.expiryDate) {
+ if (card.expireDate) {
const now = new Date();
- const expire = new Date(card.expiryDate.replace(/-/g, '/'));
+ const expire = new Date(card.expireDate.replace(/-/g, '/'));
if (now > expire) return '卡片已过期';
}
if (card.type === 'count') {
@@ -304,17 +299,4 @@ export default {
background: #00a89b;
}
}
-.card-scroll-wrap {
- width: 100%;
- overflow-x: auto;
- padding: 20rpx 0;
- /* 多卡时默认左对齐横向滚动 */
- display: flex;
- gap: 20rpx;
-}
-
-
-
-
-
diff --git a/pages/components/member-card.vue b/pages/components/member-card.vue
index 182eadb..027fa19 100644
--- a/pages/components/member-card.vue
+++ b/pages/components/member-card.vue
@@ -21,28 +21,22 @@
- {{ card.chargeType === 'count' ? '剩余次数' : card.chargeType ==='days'?'剩余天数':'可用余额' }}
+ {{ card.chargeType === 'count' ? '剩余次数' : card.chargeType ==='days'?'剩余天数':'卡内余额' }}
¥
- {{
- card.chargeType === 'count'
- ? Math.max((card.remainingCount || 0) - (card.freezeCount || 0), 0)
- : card.chargeType === 'days'
- ? (card.remainingDays || 0)
- : formatAmount( Math.max( (Number(card.remainingTotalFee)||0) - (Number(card.freezeAmount)||0), 0 ) )
- }}
+ {{ card.chargeType === 'count' ? (card.remainingCount || 0) : card.chargeType ==='days'?card.remainingDays: formatAmount(card.remainingTotalFee) }}
次
天
-
+
预约占用
- {{ card.type === 'count' ? card.freezeCount + '次' : '¥' + formatAmount(card.freezeAmount) }}
+ {{ card.type === 'count' ? card.frozenCount + '次' : '¥' + formatAmount(card.frozenAmount) }}
@@ -51,7 +45,7 @@
NO. {{ card.cardNo || '--' }}
- {{ card.expiryDate ? '有效期至 ' + card.expiryDate : '长期有效' }}
+ {{ card.expireDate ? '有效期至 ' + card.expireDate : '长期有效' }}
diff --git a/pages/user/cardDetail.vue b/pages/user/cardDetail.vue
index 7eef243..e9111f4 100644
--- a/pages/user/cardDetail.vue
+++ b/pages/user/cardDetail.vue
@@ -74,7 +74,7 @@
有效期至
- {{ card.expiryDate || '长期有效' }}
+ {{ card.expireDate || '长期有效' }}
状态
diff --git a/pages/user/courselist.vue b/pages/user/courselist.vue
index 8509509..333e8f5 100644
--- a/pages/user/courselist.vue
+++ b/pages/user/courselist.vue
@@ -56,12 +56,11 @@
-
+
- {{item.courseName}}
-
+ {{item.courseName}}
@@ -75,7 +74,7 @@
- {{item.roomName?item.roomName:'教室待定'}}
+ {{item.roomName}}
diff --git a/pages/user/mycourseinfo.vue b/pages/user/mycourseinfo.vue
index c085f4c..e29cce0 100644
--- a/pages/user/mycourseinfo.vue
+++ b/pages/user/mycourseinfo.vue
@@ -8,11 +8,10 @@
- {{item.courseName}}
-
+ {{item.courseName}}
- {{formatTime(item.startTime)+'-'+formatTime(item.endTime)}}
+ {{item.startTime+'-'+item.endTime}}
@@ -22,10 +21,9 @@
- {{item.courseTypeName}}
{{item.courseTypeName}}
{{item.courseTypeName}}
-
+
@@ -51,17 +49,12 @@
- 满{{item.lessCnt}}人开课
+ 预约人数{{item.lessCnt}}人
-
-
- 未上课
- 已确认上课
-
-
-
+
+
@@ -69,16 +62,11 @@
学员名单
-
- 可签到 {{ checkableList.length }} 人
-
-
学员姓名
性别
电话
预约状态
- 是否签到
@@ -86,7 +74,7 @@
{{item.studentName}}
- {{item.sex==2?'男':(item.sex==1?'女':'未知')}}
+ {{item.sex=1?'女':(item.sex=2?'男':'未知')}}
{{item.phone}}
@@ -94,65 +82,12 @@
{{ retstr(item.bookStatus)}}
-
- {{ item.checkIn=='1'?'已签到':'未签到'}}
-
-
-
-
-
- 批量签到
- 已选 {{ selectedIds.length }} / {{ checkableList.length }} 人
-
-
-
-
- ✓
-
-
- 全选
-
-
-
-
-
-
-
- ✓
-
-
- {{ stu.studentName }}
- {{ stu.phone }} · {{ retstr(stu.bookStatus) }}
-
-
-
- 暂无可签到学员
-
-
-
-
-
-
-
-
-
@@ -215,24 +150,9 @@
name3:"年卡",
name4:"3390",
},
- ],
- batchVisible: false, // 弹窗开关
- selectedIds: [], // 已勾选的 bookId
- submitting: false // 防重复提交
+ ]
};
},
- computed: {
- // 可签到数据:bookStatus ∈ [0,1,2] 且 checkIn === 0
- checkableList() {
- return (this.studentlist || []).filter(stu => this.isCheckable(stu));
- },
- // 是否全选
- isAllSelected() {
- return this.checkableList.length > 0 &&
- this.selectedIds.length === this.checkableList.length;
- }
- },
-
onLoad(options) {
// 课程详情
if(options.id){
@@ -253,19 +173,11 @@
}
},
methods: {
- formatTime(timeStr) {
- // 假设 timeStr 格式为 "HH:MM:SS"
- return timeStr.slice(0, 5); // 取前5位 "HH:MM"
- },
retstr(val){
// 描述:0->预约中;1->教练确认;2->店长确认/预约成功/待上课 3->已取消;4->已完成/待评价;
if(val=='0'){
return '预约中';
}
- else if (val == '1')
- {
- return '教练确认';
- }
else if(val=='2'){
return '待上课 ';
}
@@ -330,18 +242,15 @@
uni.showLoading({
title: '数据加载中...'
});
- try {
- const { data: res } = await uni.$http.post('/api/my/courseTimeDetail', { courseTimeId: this.id });
- if (res && res.data) {
- var data = res.data;
- this.item = data.courseDetail;
- this.studentlist = data.studentList;
- this.loadStatus = 'noMore';
- this.$forceUpdate();
- }
- } finally {
- uni.hideLoading(); // ← 关键
- }
+ const {data: res} = await uni.$http.post('/api/my/courseTimeDetail', {courseTimeId:this.id});
+ if(res&&res.data){
+ var data=res.data;
+ // 信息
+ this.item=data.courseDetail;
+ this.studentlist=data.studentList;
+ this.loadStatus='noMore';
+ this.$forceUpdate();
+ }
},
gotoorder(){
var that = this;
@@ -371,8 +280,7 @@
duration: 2000
});
const {data: res} = await uni.$http.post('/api/my/confirmClass', param);
- console.log(res)
- if(res.success=="true"){
+ if(res.msg=="successed"){
uni.showToast({
title: '已确定上课!',
icon: 'success',
@@ -387,115 +295,14 @@
}
else{
uni.showToast({
- title: res.message? res.message:'确定上课失败!',
- icon: 'none',
+ title: res.msg? res.msg:'确定上课失败!',
+ icon: 'error',
duration: 2000
});
}
},
- // 取预约记录主键(兼容 bookId / id 两种字段名)
- getBookId(stu) {
- return stu.bookId || stu.id;
- },
-
-// 是否可签到
- isCheckable(stu) {
- if (!stu) return false;
- const rawStatus = stu.bookStatus;
- if (rawStatus === null || rawStatus === undefined || rawStatus === '') return false;
- const status = Number(rawStatus);
- const checkIn = Number(stu.checkIn === null || stu.checkIn === undefined || stu.checkIn === '' ? 0 : stu.checkIn);
- return [0, 1, 2].includes(status) && checkIn === 0;
- },
-
-// 是否已勾选
- isChecked(stu) {
- return this.selectedIds.includes(this.getBookId(stu));
- },
-
-// 打开弹窗(默认全选)
- openBatch() {
- if (this.checkableList.length === 0) {
- uni.showToast({ title: '暂无可签到学员', icon: 'none' });
- return;
- }
- this.selectedIds = this.checkableList.map(stu => this.getBookId(stu));
- this.batchVisible = true;
- },
-
-// 关闭弹窗
- closeBatch() {
- if (this.submitting) return;
- this.batchVisible = false;
- },
-
-// 全选/取消全选
- toggleAll() {
- if (this.isAllSelected) {
- this.selectedIds = [];
- } else {
- this.selectedIds = this.checkableList.map(stu => this.getBookId(stu));
- }
- },
-
-// 单选切换
- toggleOne(stu) {
- const id = this.getBookId(stu);
- const idx = this.selectedIds.indexOf(id);
- if (idx > -1) {
- this.selectedIds.splice(idx, 1);
- } else {
- this.selectedIds.push(id);
- }
- },
-
-// 提交批量签到
- async doBatchCheckIn() {
- if (this.submitting) return;
- if (this.selectedIds.length === 0) {
- uni.showToast({ title: '请至少勾选一名学员', icon: 'none' });
- return;
- }
-
- const submitCount = this.selectedIds.length;
- const bookIds = this.selectedIds.slice();
-
- this.submitting = true;
- uni.showLoading({ title: '提交中...', mask: true });
-
- try {
- const { data: res } = await uni.$http.post('/api/my/batchCheckIn', {
- bookIds: bookIds
- });
-
- if (res && (res.success === true || res.success === 'true')) {
- this.batchVisible = false;
- this.selectedIds = [];
- myCache('courserefresh', 1);
- uni.showToast({
- title: `已签到 ${submitCount} 人`.trim() || '签到成功',
- icon: 'success',
- duration: 2000
- });
- // 刷新名单
- await this.getinfo();
- } else {
- uni.showToast({
- title: (res && res.msg) ? res.msg : '批量签到失败!',
- icon: 'none',
- duration: 2500
- });
- }
- } catch (e) {
- uni.showToast({ title: '签到请求异常,请稍后重试', icon: 'none', duration: 2500 });
- } finally {
- uni.hideLoading();
- this.submitting = false;
- }
- }
-
- }
+ }
}
@@ -863,149 +670,6 @@
}
}
}
- /* ===== 批量签到入口 ===== */
- .batch-bar {
- display: flex;
- align-items: center;
- justify-content: space-between;
- padding: 0 10rpx 16rpx;
- }
- .batch-tip {
- font-size: 24rpx;
- color: #999;
- }
- .batch-btn {
- margin: 0;
- height: 64rpx;
- line-height: 64rpx;
- padding: 0 30rpx;
- font-size: 26rpx;
- color: #fff;
- background-color: #00A99A !important;
- border-radius: 32rpx;
- border: none;
- }
- .batch-btn::after {
- border: none !important;
- }
-
- /* ===== 批量签到弹窗 ===== */
- .batch-mask {
- position: fixed;
- left: 0;
- top: 0;
- right: 0;
- bottom: 0;
- background: rgba(0, 0, 0, 0.5);
- z-index: 999;
- display: flex;
- align-items: center;
- justify-content: center;
- }
- .batch-dialog {
- width: 640rpx;
- max-height: 72vh;
- background: #fff;
- border-radius: 20rpx;
- display: flex;
- flex-direction: column;
- overflow: hidden;
- }
- .bd-title {
- text-align: center;
- font-size: 32rpx;
- font-weight: 600;
- color: #000;
- padding: 30rpx 0 8rpx;
- }
- .bd-sub {
- text-align: center;
- font-size: 24rpx;
- color: #999;
- padding-bottom: 16rpx;
- }
- .bd-all,
- .bd-item {
- display: flex;
- align-items: center;
- padding: 22rpx 30rpx;
- border-top: 1rpx solid #f2f2f2;
- }
- .cb {
- width: 40rpx;
- height: 40rpx;
- border-radius: 50%;
- border: 2rpx solid #c8c8c8;
- display: flex;
- align-items: center;
- justify-content: center;
- margin-right: 20rpx;
- flex-shrink: 0;
- box-sizing: border-box;
- }
- .cb.checked {
- background: #00A99A;
- border-color: #00A99A;
- }
- .cb-icon {
- color: #fff;
- font-size: 22rpx;
- line-height: 1;
- }
- .bd-list {
- max-height: 460rpx;
- }
- .bd-info {
- flex: 1;
- }
- .bd-name {
- font-size: 28rpx;
- color: #333;
- }
- .bd-meta {
- font-size: 24rpx;
- color: #999;
- margin-top: 6rpx;
- }
- .bd-empty {
- text-align: center;
- font-size: 26rpx;
- color: #999;
- padding: 80rpx 0;
- }
- .bd-btns {
- display: flex;
- padding: 20rpx 30rpx 30rpx;
- }
- .bd-cancel {
- flex: 1;
- margin: 0 20rpx 0 0;
- height: 80rpx;
- line-height: 80rpx;
- font-size: 28rpx;
- color: #666;
- background: #f5f5f5 !important;
- border-radius: 40rpx;
- border: none;
- }
- .bd-confirm {
- flex: 1;
- margin: 0;
- height: 80rpx;
- line-height: 80rpx;
- font-size: 28rpx;
- color: #fff;
- background: #00A99A !important;
- border-radius: 40rpx;
- border: none;
- }
- .bd-cancel::after,
- .bd-confirm::after {
- border: none !important;
- }
- .bd-confirm[disabled] {
- opacity: 0.5;
- }
diff --git a/pages/user/user.vue b/pages/user/user.vue
index 481a2b5..2716f30 100644
--- a/pages/user/user.vue
+++ b/pages/user/user.vue
@@ -13,27 +13,20 @@
-
-
-
-
- 暂无会员卡
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
@@ -226,7 +219,77 @@
avatar:"../../static/image/logo.png",
roleId:[],
memberCards: [
+ // 1. 次卡:正常,余额充足
+ {
+ id: 1001,
+ cardNo: '88880001',
+
+ chargeType: 'count',//收费模式 count:课时 days:时间 total_fee:储值
+ cardName: '次卡',
+ remainingCount: 8,
+ frozenCount: 1,
+ remainingTotalFee: 0,
+ frozenAmount: 0,
+ expireDate: '2027-12-31',
+ status: 'ACTIVE'
+ },
+ // 2. 次卡:剩余次数不足(只剩1次)
+ {
+ id: 1002,
+ type: 'COUNT',
+ cardName: '次卡',
+ name: '体验次卡',
+ cardNo: '88880002',
+ remainingCount: 1,
+ frozenCount: 0,
+ remainAmount: 0,
+ frozenAmount: 0,
+ expireDate: '2026-12-31',
+ status: 'NORMAL'
+ },
+ // 3. 储值卡:余额充足
+ {
+ id: 1003,
+ type: 'AMOUNT',
+ cardName: '储值卡',
+ name: '瑜伽储值卡',
+ cardNo: '88880003',
+ remainingCount: 0,
+ frozenCount: 0,
+ remainAmount: 1280.50,
+ frozenAmount: 200.00,
+ expireDate: '2028-06-30',
+ status: 'NORMAL'
+ },
+ // 4. 储值卡:余额不足(只剩50元)
+ {
+ id: 1004,
+ type: 'AMOUNT',
+ cardName: '储值卡',
+ name: '小额储值卡',
+ cardNo: '88880004',
+ remainingCount: 0,
+ frozenCount: 0,
+ remainAmount: 50.00,
+ frozenAmount: 0,
+ expireDate: '2027-01-01',
+ status: 'NORMAL'
+ },
+ // 5. 已过期的次卡
+ {
+ id: 1005,
+ type: 'COUNT',
+ cardName: '次卡',
+ name: '过期次卡',
+ cardNo: '88880005',
+ remainingCount: 5,
+ frozenCount: 0,
+ remainAmount: 0,
+ frozenAmount: 0,
+ expireDate: '2025-01-01', // 已过期
+ status: 'NORMAL'
+ }
],
favoritesnum:0,//我的收藏数量
menus: [
@@ -362,7 +425,7 @@
this.signature = user.signature?user.signature:this.signature;
this.roleId=user.roleId?user.roleId:[];
this.getmember();
- this.getMemberCards();
+
// if(myCache("ifuserEdit"))
// {
// myCache("ifuserEdit",false)
@@ -1175,10 +1238,5 @@
align-items: center;
}
}
- .empty-tip {
- padding: 60rpx 20rpx;
- text-align: center;
- font-size: 28rpx;
- color: #999;
- }
+