From f8268cb6f6745b9e9e880122cab12848cdb3d432 Mon Sep 17 00:00:00 2001 From: richarjiang Date: Mon, 6 Apr 2026 15:50:22 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E5=AE=8C=E5=96=84=E6=96=B0=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E5=BC=95=E5=AF=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/app/src/components/QuickEntry.vue | 110 +++++++-- packages/app/src/components/SlotCard.vue | 42 +++- packages/app/src/pages/booking/index.vue | 85 +++++-- packages/app/src/pages/card/detail.vue | 6 +- packages/app/src/pages/profile/bookings.vue | 74 ++++-- packages/app/src/pages/profile/index.vue | 10 +- packages/app/src/pages/profile/info.vue | 232 ++++++++++++++---- packages/app/src/stores/user.ts | 18 +- packages/app/src/utils/auth.ts | 1 + packages/app/src/utils/format.ts | 6 + packages/app/src/utils/routes.ts | 4 + .../src/auth/__tests__/auth.service.spec.ts | 3 + packages/server/src/auth/auth.controller.ts | 2 +- packages/server/src/auth/auth.service.ts | 7 +- packages/server/tsconfig.build.tsbuildinfo | 2 +- 15 files changed, 483 insertions(+), 119 deletions(-) create mode 100644 packages/app/src/utils/routes.ts diff --git a/packages/app/src/components/QuickEntry.vue b/packages/app/src/components/QuickEntry.vue index 1da6237..5e43254 100644 --- a/packages/app/src/components/QuickEntry.vue +++ b/packages/app/src/components/QuickEntry.vue @@ -114,10 +114,7 @@ async function handleLogin() { if (loading.value) return loading.value = true try { - await userStore.login() - await userStore.fetchMemberships() - // 登录成功后跳转到个人中心,让用户完善信息 - uni.navigateTo({ url: '/pages/profile/info' }) + await userStore.loginWithSetup() } catch { uni.showToast({ title: '登录失败,请重试', icon: 'none' }) } finally { @@ -338,14 +335,36 @@ const lowestRemainingTimes = computed(() => { } } -/* Warning triangle */ +/* 闪电 icon — 更有能量感 */ .icon-warning { position: relative; - width: 0; - height: 0; - border-left: 12rpx solid transparent; - border-right: 12rpx solid transparent; - border-bottom: 20rpx solid #e8a87c; + width: 22rpx; + height: 22rpx; + + &::before { + content: ''; + position: absolute; + top: 0; + left: 50%; + transform: translateX(-50%) rotate(-15deg); + width: 0; + height: 0; + border-left: 8rpx solid transparent; + border-right: 8rpx solid transparent; + border-bottom: 18rpx solid #ffffff; + } + + &::after { + content: ''; + position: absolute; + bottom: 2rpx; + left: 50%; + transform: translateX(-50%); + width: 10rpx; + height: 3rpx; + background: rgba(255, 255, 255, 0.5); + border-radius: 2rpx; + } } .entry-text { @@ -430,42 +449,83 @@ const lowestRemainingTimes = computed(() => { } .low-badge { - background: #e74c3c; + background: linear-gradient(135deg, #FF6B35 0%, #FF8E53 100%); color: #ffffff; + box-shadow: 0 4rpx 12rpx rgba(255, 107, 53, 0.35); } -/* Renew tip bar */ +/* Renew tip bar — 充满能量的激励配色 */ .renew-tip { display: flex; align-items: center; - gap: 12rpx; + gap: 16rpx; margin-top: 16rpx; - padding: 20rpx 24rpx; - background: #fff8f0; - border-radius: 12rpx; - border: 1rpx solid rgba(240, 180, 100, 0.3); + padding: 22rpx 28rpx; + background: linear-gradient(135deg, #FF6B35 0%, #FF8E53 60%, #FFAA5C 100%); + border-radius: 16rpx; + box-shadow: 0 6rpx 20rpx rgba(255, 107, 53, 0.3); + position: relative; + overflow: hidden; + + /* 右上角光晕装饰 */ + &::before { + content: ''; + position: absolute; + top: -20rpx; + right: -20rpx; + width: 120rpx; + height: 120rpx; + background: radial-gradient(circle, rgba(255, 255, 255, 0.25) 0%, transparent 70%); + pointer-events: none; + } + + /* 底部微光 */ + &::after { + content: ''; + position: absolute; + bottom: 0; + left: 0; + right: 0; + height: 40%; + background: linear-gradient(to top, rgba(0, 0, 0, 0.08) 0%, transparent 100%); + pointer-events: none; + } } .renew-tip-icon { - width: 36rpx; - height: 36rpx; + width: 52rpx; + height: 52rpx; + border-radius: 50%; + background: rgba(255, 255, 255, 0.2); display: flex; align-items: center; justify-content: center; flex-shrink: 0; + position: relative; + z-index: 1; + backdrop-filter: blur(4rpx); } .renew-tip-text { flex: 1; - font-size: 24rpx; - color: #a0622a; - line-height: 1.4; + font-size: 26rpx; + color: #ffffff; + line-height: 1.5; + font-weight: 500; + position: relative; + z-index: 1; + text-shadow: 0 1rpx 2rpx rgba(0, 0, 0, 0.1); } .renew-tip-action { - font-size: 24rpx; - color: $primary-dark; - font-weight: 600; + font-size: 26rpx; + color: #ffffff; + font-weight: 700; flex-shrink: 0; + position: relative; + z-index: 1; + letter-spacing: 1rpx; + /* 箭头增强感 */ + text-shadow: 0 1rpx 2rpx rgba(0, 0, 0, 0.15); } diff --git a/packages/app/src/components/SlotCard.vue b/packages/app/src/components/SlotCard.vue index 6b37f70..a4ac292 100644 --- a/packages/app/src/components/SlotCard.vue +++ b/packages/app/src/components/SlotCard.vue @@ -1,5 +1,5 @@