From 6a18d3de615031e4475d73e2d9d3a4f80f23b8de Mon Sep 17 00:00:00 2001
From: gqt <3217233537@qq.com>
Date: Mon, 13 Jul 2026 21:43:59 +0800
Subject: [PATCH] =?UTF-8?q?feat:=20=E9=A1=B5=E9=9D=A2=E9=87=8D=E5=86=99?=
=?UTF-8?q?=E4=B8=8E=E6=B5=81=E7=A8=8B=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 门票Tab展示已购门票记录(可核销/已核销/已退款)
- 购买次数去掉合计金额行
- 登录后直接跳profile/detail,合并setup页(不区分模式)
- profile/detail增加返回首页按钮
- 约课页移除UnauthLoginPanel
- 401跳转改为reLaunch到login页,不显示toast
- membership/cards仅展示可用卡,恢复点击进详情
- available-sessions改为只读展示,移除预约逻辑
- profile/orders重写样式,单行状态筛选
- profile/balance重写样式,onShow自动刷新
- profile/index移除冗余菜单项(篮球门票/充值/我的预约/个人信息/切换场馆)
- profile/index移除AgreementLinks,我的次卡改为我的会员卡
- pages.json移除setup页注册
---
miniprogram/src/pages.json | 6 -
.../src/pages/comprehensive/courses/index.vue | 106 +++++++-
.../membership/available-sessions.vue | 229 +++---------------
.../pages/comprehensive/membership/cards.vue | 136 +++++------
.../pages/comprehensive/profile/balance.vue | 90 ++++---
.../pages/comprehensive/profile/detail.vue | 73 ++++--
.../src/pages/comprehensive/profile/index.vue | 11 +-
.../src/pages/comprehensive/profile/login.vue | 2 +-
.../pages/comprehensive/profile/orders.vue | 165 ++++++-------
9 files changed, 385 insertions(+), 433 deletions(-)
diff --git a/miniprogram/src/pages.json b/miniprogram/src/pages.json
index c0322a7..5597d63 100644
--- a/miniprogram/src/pages.json
+++ b/miniprogram/src/pages.json
@@ -180,12 +180,6 @@
"navigationBarTitleText": "登录"
}
},
- {
- "path": "pages/comprehensive/profile/setup",
- "style": {
- "navigationBarTitleText": "完善信息"
- }
- },
{
"path": "pages/comprehensive/mall/index",
"style": {
diff --git a/miniprogram/src/pages/comprehensive/courses/index.vue b/miniprogram/src/pages/comprehensive/courses/index.vue
index 7d39eeb..f99555b 100644
--- a/miniprogram/src/pages/comprehensive/courses/index.vue
+++ b/miniprogram/src/pages/comprehensive/courses/index.vue
@@ -29,9 +29,18 @@
{{ ticketQty }}
-
- 合计金额
- ¥{{ ticketTotal }}
+
+
+
+
+
+
+ 订单号 {{ record.order_no }}
+ {{ record.status_label }}
+
+ {{ formatDate(record.created_at) }}
@@ -98,7 +107,7 @@ import { membershipApi } from '@/modules/comprehensive/api/membership'
import { ticketApi } from '@/modules/comprehensive/api/ticket'
import { multiplyAmount } from '@/modules/comprehensive/utils/money'
import { useComprehensiveSessionStore } from '@/modules/comprehensive/stores/session'
-import { formatTimeRange, todayString } from '@/modules/comprehensive/utils/date'
+import { formatTimeRange, formatDate, todayString } from '@/modules/comprehensive/utils/date'
const session = useComprehensiveSessionStore()
const activeTab = ref('membership')
@@ -113,6 +122,8 @@ const isLoadingMore = ref(false)
const ticketProduct = ref(null)
const ticketQty = ref(1)
const ticketSubmitting = ref(false)
+const ticketRecords = ref([])
+const ticketRemaining = ref(0)
const ticketTotal = computed(() => ticketProduct.value ? multiplyAmount(ticketProduct.value.unit_price, ticketQty.value) : '0.00')
const weekDays = ['周日', '周一', '周二', '周三', '周四', '周五', '周六']
@@ -135,6 +146,7 @@ const switchTab = (tab) => {
activeTab.value = tab
if (tab === 'tickets') {
loadTicketProduct()
+ loadTicketRecords()
} else {
loadSessions(true)
}
@@ -177,6 +189,19 @@ const loadTicketProduct = async () => {
}
}
+const loadTicketRecords = async () => {
+ try {
+ const data = await ticketApi.getTicketAccount({ page: 1, pageSize: 20 })
+ ticketRecords.value = (data.records || []).filter((r) =>
+ ['available', 'checked_in', 'refunded'].includes(r.status)
+ )
+ ticketRemaining.value = data.remaining_count || 0
+ } catch {
+ ticketRecords.value = []
+ ticketRemaining.value = 0
+ }
+}
+
const decreaseTicketQty = () => {
ticketQty.value = Math.max(1, ticketQty.value - 1)
}
@@ -222,7 +247,8 @@ const goDetail = (item) => {
const refresh = async () => {
if (activeTab.value === 'tickets') {
ticketProduct.value = null
- await loadTicketProduct()
+ ticketRecords.value = []
+ await Promise.all([loadTicketProduct(), loadTicketRecords()])
} else {
page.value = 1
await loadSessions(true)
@@ -531,4 +557,74 @@ defineExpose({ refresh, loadMore })
.submit-btn {
width: 320rpx;
}
+
+/* 门票记录 */
+.ticket-records-section {
+ margin-bottom: $spacing-md;
+}
+
+.ticket-remaining {
+ color: $color-success;
+ font-size: 24rpx;
+ font-weight: 700;
+}
+
+.ticket-record-card {
+ display: flex;
+ flex-direction: column;
+ gap: $spacing-xs;
+}
+
+.ticket-record-top {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+}
+
+.ticket-record-no {
+ color: $text-color-muted;
+ font-size: 24rpx;
+}
+
+.ticket-record-date {
+ color: $text-color-light;
+ font-size: 22rpx;
+}
+
+.ticket-status-badge {
+ padding: 4rpx 16rpx;
+ border-radius: $border-radius-sm;
+ font-size: 22rpx;
+ font-weight: 800;
+}
+
+.ticket-status-badge.available {
+ background: $color-success-light;
+ color: $color-success;
+}
+
+.ticket-status-badge.checked_in {
+ background: $bg-color-hover;
+ color: $text-color-light;
+}
+
+.ticket-status-badge.cancelled {
+ background: $color-danger-light;
+ color: $color-danger;
+}
+
+.ticket-status-badge.pending_pay {
+ background: $color-warning-light;
+ color: $color-warning;
+}
+
+.ticket-status-badge.refunded {
+ background: $color-danger-light;
+ color: $color-danger;
+}
+
+.ticket-status-badge.closed {
+ background: $bg-color-hover;
+ color: $text-color-light;
+}
diff --git a/miniprogram/src/pages/comprehensive/membership/available-sessions.vue b/miniprogram/src/pages/comprehensive/membership/available-sessions.vue
index 672873a..32a2952 100644
--- a/miniprogram/src/pages/comprehensive/membership/available-sessions.vue
+++ b/miniprogram/src/pages/comprehensive/membership/available-sessions.vue
@@ -1,92 +1,42 @@
-
+ 加载中...
-
-
-
-
-
-
- {{ session.title }}
-
- {{ formatTimeRange(session.start_at, session.end_at) }}
- {{ session.coach_name }}
-
- 剩余 {{ session.remaining_count }}/{{ session.capacity }}
- ¥{{ session.price }}
-
+
+
+
+
+ {{ session.title }}
+ {{ formatTimeRange(session.start_at, session.end_at) }}
+ {{ session.coach_name }}
+
+ 剩余 {{ session.remaining_count }}/{{ session.capacity }}
+ ¥{{ session.price }}
-
- 加载中...
- 暂无可约课程
- 已加载全部
- 加载中...
+ 已加载全部
+
-
-
- 选择次卡
-
- {{ getCardLabel(cardId) }}
-
- 取消
-
-
-
+ 暂无可约课程
diff --git a/miniprogram/src/pages/comprehensive/membership/cards.vue b/miniprogram/src/pages/comprehensive/membership/cards.vue
index d95b9a8..6d7dbb7 100644
--- a/miniprogram/src/pages/comprehensive/membership/cards.vue
+++ b/miniprogram/src/pages/comprehensive/membership/cards.vue
@@ -1,47 +1,37 @@
-
+ 加载中...
-
-
-
-
- {{ card.plan_name }}
- {{ card.status_label }}
+
+
+
+
+
+ {{ card.remaining_count }}
+ 剩余
-
-
- {{ card.remaining_count }}
- 剩余次数
-
-
-
- {{ card.total_count }}
- 总次数
-
+
+
+ {{ card.total_count }}
+ 总数
-
- 加载中...
- 暂无次卡
- 已加载全部
- 加载中...
-
+ 已加载全部
+
+
+ 暂无次卡
diff --git a/miniprogram/src/pages/comprehensive/profile/detail.vue b/miniprogram/src/pages/comprehensive/profile/detail.vue
index 4d35938..159a5b8 100644
--- a/miniprogram/src/pages/comprehensive/profile/detail.vue
+++ b/miniprogram/src/pages/comprehensive/profile/detail.vue
@@ -35,17 +35,22 @@
-
+
+
+
+ 加载中...
@@ -115,6 +130,7 @@ const bindPhone = async (event) => {
.profile-detail {
min-height: 100vh;
padding: $spacing-md;
+ padding-bottom: calc(160rpx + env(safe-area-inset-bottom));
background: $bg-color-soft;
}
@@ -227,7 +243,18 @@ const bindPhone = async (event) => {
justify-content: center;
}
+.action-area {
+ display: flex;
+ flex-direction: column;
+ gap: $spacing-sm;
+ padding: 0 $spacing-md;
+}
+
.save-button {
- flex: 1;
+ height: 88rpx;
+}
+
+.home-button {
+ height: 88rpx;
}
diff --git a/miniprogram/src/pages/comprehensive/profile/index.vue b/miniprogram/src/pages/comprehensive/profile/index.vue
index 93c1f8e..959411d 100644
--- a/miniprogram/src/pages/comprehensive/profile/index.vue
+++ b/miniprogram/src/pages/comprehensive/profile/index.vue
@@ -73,7 +73,6 @@
-
@@ -82,7 +81,6 @@ import { computed, onMounted, ref } from 'vue'
import { useComprehensiveSessionStore } from '@/modules/comprehensive/stores/session'
import { memberApi } from '@/modules/comprehensive/api/member'
import { formatAmount } from '@/modules/comprehensive/utils/money'
-import AgreementLinks from '@/components/AgreementLinks.vue'
const session = useComprehensiveSessionStore()
const avatarInitial = computed(() => (session.member?.nickname || '用户').slice(0, 1))
@@ -90,14 +88,9 @@ const balance = ref('0.00')
const balanceText = computed(() => formatAmount(balance.value))
const menuItems = [
- { title: '篮球门票', url: '/pages/comprehensive/tickets/index', theme: 'ticket-theme', icon: 'ticket' },
- { title: '充值', url: '/pages/comprehensive/mall/index', theme: 'order-theme', icon: 'order' },
- { title: '我的次卡', url: '/pages/comprehensive/membership/cards', theme: 'profile-theme', icon: 'profile' },
+ { title: '我的会员卡', url: '/pages/comprehensive/membership/cards', theme: 'profile-theme', icon: 'profile' },
{ title: '我的订单', url: '/pages/comprehensive/profile/orders', theme: 'order-theme', icon: 'order' },
- { title: '我的预约', url: '/pages/comprehensive/bookings/index', theme: 'order-theme', icon: 'order' },
- { title: '余额流水', url: '/pages/comprehensive/profile/balance', theme: 'order-theme', icon: 'order' },
- { title: '个人信息', url: '/pages/comprehensive/profile/detail', theme: 'profile-theme', icon: 'profile' },
- { title: '切换场馆', url: '/pages/venue-select/index?mode=switch', theme: 'profile-theme', icon: 'profile' }
+ { title: '余额流水', url: '/pages/comprehensive/profile/balance', theme: 'order-theme', icon: 'order' }
]
onMounted(async () => {
diff --git a/miniprogram/src/pages/comprehensive/profile/login.vue b/miniprogram/src/pages/comprehensive/profile/login.vue
index b865547..ef1abb2 100644
--- a/miniprogram/src/pages/comprehensive/profile/login.vue
+++ b/miniprogram/src/pages/comprehensive/profile/login.vue
@@ -13,7 +13,7 @@ const session = useComprehensiveSessionStore()
const handleLogin = async () => {
try {
await session.login()
- uni.redirectTo({ url: '/pages/comprehensive/profile/setup' })
+ uni.redirectTo({ url: '/pages/comprehensive/profile/detail' })
} catch {
uni.showToast({ title: '登录失败,请重试', icon: 'none' })
}
diff --git a/miniprogram/src/pages/comprehensive/profile/orders.vue b/miniprogram/src/pages/comprehensive/profile/orders.vue
index b0004e5..2b88c18 100644
--- a/miniprogram/src/pages/comprehensive/profile/orders.vue
+++ b/miniprogram/src/pages/comprehensive/profile/orders.vue
@@ -1,27 +1,20 @@
-
-
-
-
- {{ item.label }}
-
+
+
+
+ {{ item.label }}
-
-
-
-
- {{ item.label }}
-
-
-
-
+
+
-
-
+ 加载中...
+
+
+
{{ order.business_type_label }}
- {{ order.status_label }}
+ {{ order.status_label }}
{{ order.order_no }}
@@ -29,33 +22,22 @@
¥{{ order.amount }}
-
+
-
- 加载中...
- 暂无订单
- 已加载全部
+ 已加载全部
+
+ 暂无订单