splash.vue 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. <template>
  2. <view class="splash-root">
  3. <view class="splash-content">
  4. <!-- Brand Logo Mark -->
  5. <view class="splash-logo-mark">
  6. <text class="splash-logo-char">浠</text>
  7. </view>
  8. <!-- Brand Name -->
  9. <text class="splash-brand-name">浠艾福</text>
  10. <!-- 五维图标行 -->
  11. <view class="splash-dims-row">
  12. <view class="splash-dim-item">
  13. <view class="splash-dim-circle" style="background:rgba(141,110,99,0.25);">
  14. <text class="splash-dim-icon">🌏</text>
  15. </view>
  16. <text class="splash-dim-label">身</text>
  17. </view>
  18. <view class="splash-dim-item">
  19. <view class="splash-dim-circle" style="background:rgba(255,107,53,0.25);">
  20. <text class="splash-dim-icon">🔥</text>
  21. </view>
  22. <text class="splash-dim-label">心</text>
  23. </view>
  24. <view class="splash-dim-item">
  25. <view class="splash-dim-circle" style="background:rgba(255,215,0,0.25);">
  26. <text class="splash-dim-icon">⚡</text>
  27. </view>
  28. <text class="splash-dim-label">智</text>
  29. </view>
  30. <view class="splash-dim-item">
  31. <view class="splash-dim-circle" style="background:rgba(76,175,80,0.25);">
  32. <text class="splash-dim-icon">🌿</text>
  33. </view>
  34. <text class="splash-dim-label">行</text>
  35. </view>
  36. <view class="splash-dim-item">
  37. <view class="splash-dim-circle" style="background:rgba(66,165,245,0.25);">
  38. <text class="splash-dim-icon">💧</text>
  39. </view>
  40. <text class="splash-dim-label">富</text>
  41. </view>
  42. </view>
  43. <!-- Tagline -->
  44. <text class="splash-tagline">给全家的一站式幸福提案</text>
  45. <!-- Loading dots at bottom -->
  46. <view class="splash-loading">
  47. <view class="splash-dot splash-dot--1"></view>
  48. <view class="splash-dot splash-dot--2"></view>
  49. <view class="splash-dot splash-dot--3"></view>
  50. </view>
  51. </view>
  52. </view>
  53. </template>
  54. <script>
  55. export default {
  56. name: 'SplashPage',
  57. data() {
  58. return {
  59. ready: false
  60. }
  61. },
  62. onLoad() {
  63. // 标记 splash 已展示
  64. this.ready = true
  65. },
  66. onReady() {
  67. // 延迟 2500ms 后跳转到首页(至少 1s 展示保证)
  68. setTimeout(function() {
  69. uni.switchTab({
  70. url: '/pages/index/index'
  71. })
  72. }, 2500)
  73. }
  74. }
  75. </script>
  76. <style scoped>
  77. .splash-root {
  78. position: fixed;
  79. top: 0;
  80. left: 0;
  81. right: 0;
  82. bottom: 0;
  83. display: flex;
  84. align-items: center;
  85. justify-content: center;
  86. background: linear-gradient(160deg, #FFF7ED 0%, #F97316 100%);
  87. z-index: 9999;
  88. }
  89. .splash-content {
  90. display: flex;
  91. flex-direction: column;
  92. align-items: center;
  93. opacity: 0;
  94. animation: splash-fade-in 0.8s ease forwards;
  95. }
  96. @keyframes splash-fade-in {
  97. from {
  98. opacity: 0;
  99. transform: translateY(20rpx);
  100. }
  101. to {
  102. opacity: 1;
  103. transform: translateY(0);
  104. }
  105. }
  106. /* ===== Logo Mark ===== */
  107. .splash-logo-mark {
  108. width: 144rpx;
  109. height: 144rpx;
  110. border-radius: 36rpx;
  111. background: rgba(255, 255, 255, 0.3);
  112. display: flex;
  113. align-items: center;
  114. justify-content: center;
  115. margin-bottom: 24rpx;
  116. backdrop-filter: blur(4px);
  117. }
  118. .splash-logo-char {
  119. font-size: 72rpx;
  120. font-weight: 700;
  121. color: #FFFFFF;
  122. line-height: 1;
  123. }
  124. /* ===== Brand Name ===== */
  125. .splash-brand-name {
  126. font-size: 56rpx;
  127. font-weight: 700;
  128. color: #FFFFFF;
  129. letter-spacing: 8rpx;
  130. margin-bottom: 12rpx;
  131. text-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.1);
  132. }
  133. /* ===== Tagline ===== */
  134. .splash-tagline {
  135. font-size: 28rpx;
  136. color: rgba(255, 255, 255, 0.85);
  137. letter-spacing: 4rpx;
  138. font-weight: 400;
  139. }
  140. /* ===== Loading Dots ===== */
  141. .splash-loading {
  142. position: absolute;
  143. bottom: 120rpx;
  144. left: 0;
  145. right: 0;
  146. display: flex;
  147. justify-content: center;
  148. align-items: center;
  149. gap: 12rpx;
  150. }
  151. .splash-dot {
  152. width: 14rpx;
  153. height: 14rpx;
  154. border-radius: 50%;
  155. background: rgba(255, 255, 255, 0.6);
  156. animation: splash-dot-bounce 1.4s ease-in-out infinite both;
  157. }
  158. .splash-dot--1 {
  159. animation-delay: -0.32s;
  160. }
  161. .splash-dot--2 {
  162. animation-delay: -0.16s;
  163. }
  164. .splash-dot--3 {
  165. animation-delay: 0s;
  166. }
  167. @keyframes splash-dot-bounce {
  168. 0%, 80%, 100% {
  169. transform: scale(0.6);
  170. opacity: 0.4;
  171. }
  172. 40% {
  173. transform: scale(1);
  174. opacity: 1;
  175. }
  176. }
  177. /* ===== 五维图标行 ===== */
  178. .splash-dims-row {
  179. display: flex;
  180. flex-direction: row;
  181. align-items: center;
  182. justify-content: center;
  183. gap: 16rpx;
  184. margin: 16rpx 0 20rpx;
  185. }
  186. .splash-dim-item {
  187. display: flex;
  188. flex-direction: column;
  189. align-items: center;
  190. gap: 6rpx;
  191. opacity: 0;
  192. transform: translateY(20rpx);
  193. animation: splash-dim-enter 0.4s ease forwards;
  194. }
  195. .splash-dim-item:nth-child(1) { animation-delay: 0.8s; }
  196. .splash-dim-item:nth-child(2) { animation-delay: 1.05s; }
  197. .splash-dim-item:nth-child(3) { animation-delay: 1.3s; }
  198. .splash-dim-item:nth-child(4) { animation-delay: 1.55s; }
  199. .splash-dim-item:nth-child(5) { animation-delay: 1.8s; }
  200. .splash-dim-circle {
  201. width: 64rpx;
  202. height: 64rpx;
  203. border-radius: 50%;
  204. display: flex;
  205. align-items: center;
  206. justify-content: center;
  207. }
  208. .splash-dim-icon {
  209. font-size: 28rpx;
  210. line-height: 1;
  211. color: #FFFFFF;
  212. }
  213. .splash-dim-label {
  214. font-size: 18rpx;
  215. color: rgba(255, 255, 255, 0.7);
  216. line-height: 1;
  217. }
  218. @keyframes splash-dim-enter {
  219. from {
  220. opacity: 0;
  221. transform: translateY(20rpx);
  222. }
  223. to {
  224. opacity: 1;
  225. transform: translateY(0);
  226. }
  227. }
  228. </style>