feat(recall): 添加老客户召回引导页及相关资源
- 新增引导页路由配置和页面组件 - 更新登录页背景图和标题图引用方式 - 添加引导页所需的图片资源
Showing
5 changed files
with
98 additions
and
13 deletions
src/assets/images/recall/title02@2x.png
0 → 100644
113 KB
src/assets/images/recall/xing@2x.png
0 → 100644
830 Bytes
| 1 | /* | 1 | /* |
| 2 | * @Date: 2025-03-20 20:36:36 | 2 | * @Date: 2025-03-20 20:36:36 |
| 3 | * @LastEditors: hookehuyr hookehuyr@gmail.com | 3 | * @LastEditors: hookehuyr hookehuyr@gmail.com |
| 4 | - * @LastEditTime: 2025-10-20 17:37:47 | 4 | + * @LastEditTime: 2025-12-23 11:40:33 |
| 5 | * @FilePath: /mlaj/src/router/routes.js | 5 | * @FilePath: /mlaj/src/router/routes.js |
| 6 | * @Description: 路由地址映射配置 | 6 | * @Description: 路由地址映射配置 |
| 7 | */ | 7 | */ |
| ... | @@ -109,6 +109,12 @@ export const routes = [ | ... | @@ -109,6 +109,12 @@ export const routes = [ |
| 109 | meta: { title: '召回老客户-登录页' }, | 109 | meta: { title: '召回老客户-登录页' }, |
| 110 | }, | 110 | }, |
| 111 | { | 111 | { |
| 112 | + path: '/recall/boot', | ||
| 113 | + name: 'RecallBoot', | ||
| 114 | + component: () => import('../views/recall/boot.vue'), | ||
| 115 | + meta: { title: '召回老客户-引导页' }, | ||
| 116 | + }, | ||
| 117 | + { | ||
| 112 | path: '/checkout', | 118 | path: '/checkout', |
| 113 | name: 'CheckoutPage', | 119 | name: 'CheckoutPage', |
| 114 | component: () => import('../views/checkout/CheckoutPage.vue'), | 120 | component: () => import('../views/checkout/CheckoutPage.vue'), | ... | ... |
src/views/recall/boot.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <div class="recall-boot w-full min-h-screen relative overflow-hidden flex flex-col items-center"> | ||
| 3 | + <!-- Starry Background Effect --> | ||
| 4 | + <StarryBackground :bg-image="bgImg" /> | ||
| 5 | + | ||
| 6 | + <!-- Title Section --> | ||
| 7 | + <div class="mt-16 flex flex-col items-center z-10 w-full px-8"> | ||
| 8 | + <img :src="titleImg" class="w-full max-w-[300px] mb-8 object-contain" alt="title" /> | ||
| 9 | + </div> | ||
| 10 | + | ||
| 11 | + <!-- Content Card --> | ||
| 12 | + <div class="w-full px-6 mt-4 z-10"> | ||
| 13 | + <FrostedGlass class="p-6 !rounded-2xl !border-white/20 !shadow-none" :bg-opacity="10" blur-level="md"> | ||
| 14 | + <div class="space-y-4 py-2"> | ||
| 15 | + <!-- Item 1 --> | ||
| 16 | + <div class="flex items-start"> | ||
| 17 | + <img :src="starImg" class="w-5 h-5 mt-1 mr-3 flex-shrink-0" alt="star" /> | ||
| 18 | + <div class="flex-1"> | ||
| 19 | + <h3 class="text-white text-xl font-bold mb-2 tracking-wide">星球新纪元已开启</h3> | ||
| 20 | + <p class="text-white/90 text-sm font-medium">定制成长线 + 学习社区 + 星球币福利体系</p> | ||
| 21 | + </div> | ||
| 22 | + </div> | ||
| 23 | + | ||
| 24 | + <!-- Item 2 --> | ||
| 25 | + <div class="flex items-center !mt-10"> | ||
| 26 | + <img :src="starImg" class="w-5 h-5 mr-3 flex-shrink-0" alt="star" /> | ||
| 27 | + <p class="text-white font-bold text-base tracking-wide">老玩家一键迁档,荣耀延续;</p> | ||
| 28 | + </div> | ||
| 29 | + | ||
| 30 | + <!-- Item 3 --> | ||
| 31 | + <div class="flex items-center"> | ||
| 32 | + <img :src="starImg" class="w-5 h-5 mr-3 flex-shrink-0" alt="star" /> | ||
| 33 | + <p class="text-white font-bold text-base tracking-wide">新玩家注册即领星光启航礼!</p> | ||
| 34 | + </div> | ||
| 35 | + </div> | ||
| 36 | + </FrostedGlass> | ||
| 37 | + </div> | ||
| 38 | + | ||
| 39 | + <!-- Action Button --> | ||
| 40 | + <div class="w-full px-6 mt-auto z-10 mb-8"> | ||
| 41 | + <van-button block | ||
| 42 | + class="submit-btn !rounded-lg !bg-[#3B82F6] !border-[#FFDD01] !text-[#FFDD01] !font-bold !text-lg !h-[48px]" | ||
| 43 | + @click="handleNext"> | ||
| 44 | + 完善个人信息 | ||
| 45 | + </van-button> | ||
| 46 | + <p class="text-white text-center text-xs mt-4 tracking-wide">您的历史数据将自动同步至新星球</p> | ||
| 47 | + </div> | ||
| 48 | + | ||
| 49 | + </div> | ||
| 50 | +</template> | ||
| 51 | + | ||
| 52 | +<script setup> | ||
| 53 | +import { useRouter, useRoute } from 'vue-router' | ||
| 54 | +import { useTitle } from '@vueuse/core' | ||
| 55 | +import titleImg from '@/assets/images/recall/title02@2x.png' | ||
| 56 | +import bgImg from '@/assets/images/recall/bg01@2x.png' | ||
| 57 | +import starImg from '@/assets/images/recall/xing@2x.png' | ||
| 58 | + | ||
| 59 | +const router = useRouter() | ||
| 60 | +const route = useRoute() | ||
| 61 | +useTitle(route.meta.title) | ||
| 62 | + | ||
| 63 | +const handleNext = () => { | ||
| 64 | + router.push({ name: 'RecallLogin' }) | ||
| 65 | +} | ||
| 66 | +</script> | ||
| 67 | + | ||
| 68 | +<style lang="less" scoped> | ||
| 69 | +.submit-btn { | ||
| 70 | + // Add a subtle gradient for better visual | ||
| 71 | + background: linear-gradient(180deg, rgba(59, 130, 246, 0.9) 0%, rgba(37, 99, 235, 0.9) 100%) !important; | ||
| 72 | + backdrop-filter: blur(4px); | ||
| 73 | + box-shadow: 0 4px 12px rgba(59, 130, 246, 0.3); | ||
| 74 | + | ||
| 75 | + &:active { | ||
| 76 | + transform: scale(0.99); | ||
| 77 | + } | ||
| 78 | +} | ||
| 79 | +</style> |
| 1 | <template> | 1 | <template> |
| 2 | <div class="recall-login w-full min-h-screen relative overflow-hidden flex flex-col items-center"> | 2 | <div class="recall-login w-full min-h-screen relative overflow-hidden flex flex-col items-center"> |
| 3 | <!-- Starry Background Effect --> | 3 | <!-- Starry Background Effect --> |
| 4 | - <StarryBackground bg-image="https://cdn.ipadbiz.cn/mlaj/images/test-bgg03.jpg" /> | 4 | + <!-- <StarryBackground bg-image="https://cdn.ipadbiz.cn/mlaj/images/test-bgg03.jpg" /> --> |
| 5 | + <StarryBackground :bg-image="bgImg" /> | ||
| 5 | 6 | ||
| 6 | <!-- Title Section --> | 7 | <!-- Title Section --> |
| 7 | <div class="mt-10 flex flex-col items-center z-10 w-full px-8"> | 8 | <div class="mt-10 flex flex-col items-center z-10 w-full px-8"> |
| 8 | - <img src="@/assets/images/recall/title01@2x.png" class="w-full max-w-[300px] mb-8 object-contain" alt="title" /> | 9 | + <img :src="titleImg" class="w-full max-w-[300px] mb-8 object-contain" alt="title" /> |
| 9 | 10 | ||
| 10 | <div class="text-white text-center space-y-3 tracking-wider text-shadow-md"> | 11 | <div class="text-white text-center space-y-3 tracking-wider text-shadow-md"> |
| 11 | <p class="text-sm">请验证身份</p> | 12 | <p class="text-sm">请验证身份</p> |
| ... | @@ -78,19 +79,18 @@ | ... | @@ -78,19 +79,18 @@ |
| 78 | </template> | 79 | </template> |
| 79 | 80 | ||
| 80 | <script setup> | 81 | <script setup> |
| 81 | -/** | ||
| 82 | - * @description 召回老客户-登录页 | ||
| 83 | - * @author hookehuyr | ||
| 84 | - * @date 2025-12-23 | ||
| 85 | - */ | ||
| 86 | import { ref, computed } from 'vue' | 82 | import { ref, computed } from 'vue' |
| 87 | import { useRouter } from 'vue-router' | 83 | import { useRouter } from 'vue-router' |
| 88 | import { showToast } from 'vant' | 84 | import { showToast } from 'vant' |
| 89 | -// FrostedGlass is auto-imported by unplugin-vue-components? | 85 | +import { useTitle } from '@vueuse/core' |
| 90 | -// If not, explicit import might be needed but based on components.d.ts it should be available. | 86 | + |
| 91 | -// Just in case, if it fails, I'll add import. For now, assuming auto-import works as per components.d.ts. | 87 | +import titleImg from '@/assets/images/recall/title01@2x.png' |
| 88 | +import bgImg from '@/assets/images/recall/bg01@2x.png' | ||
| 92 | 89 | ||
| 93 | -const router = useRouter() | 90 | +// 路由相关 |
| 91 | +const $route = useRoute() | ||
| 92 | +const $router = useRouter() | ||
| 93 | +useTitle($route.meta.title) | ||
| 94 | 94 | ||
| 95 | // Form Data | 95 | // Form Data |
| 96 | const phone = ref('') | 96 | const phone = ref('') |
| ... | @@ -146,7 +146,7 @@ const handleLogin = () => { | ... | @@ -146,7 +146,7 @@ const handleLogin = () => { |
| 146 | 146 | ||
| 147 | showToast('登录成功') | 147 | showToast('登录成功') |
| 148 | // Navigate to next page (Index or whatever is next flow) | 148 | // Navigate to next page (Index or whatever is next flow) |
| 149 | - router.push('/recall') | 149 | + $router.push('/recall') |
| 150 | } | 150 | } |
| 151 | 151 | ||
| 152 | // Agreement Content | 152 | // Agreement Content | ... | ... |
-
Please register or login to post a comment