splash.vue 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  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 后跳转到首页
  68. setTimeout(function() {
  69. uni.setStorageSync('_splashReady', true)
  70. uni.reLaunch({
  71. url: '/pages/index/index'
  72. })
  73. }, 2500)
  74. }
  75. }
  76. </script>
  77. <style scoped>
  78. .splash-root {
  79. position: fixed;
  80. top: 0;
  81. left: 0;
  82. right: 0;
  83. bottom: 0;
  84. display: flex;
  85. align-items: center;
  86. justify-content: center;
  87. background: linear-gradient(160deg, #FFF7ED 0%, #F97316 100%);
  88. z-index: 9999;
  89. }
  90. .splash-content {
  91. display: flex;
  92. flex-direction: column;
  93. align-items: center;
  94. opacity: 0;
  95. animation: splash-fade-in 0.8s ease forwards;
  96. }
  97. @keyframes splash-fade-in {
  98. from {
  99. opacity: 0;
  100. transform: translateY(20rpx);
  101. }
  102. to {
  103. opacity: 1;
  104. transform: translateY(0);
  105. }
  106. }
  107. /* ===== Logo Mark ===== */
  108. .splash-logo-mark {
  109. width: 144rpx;
  110. height: 144rpx;
  111. border-radius: 36rpx;
  112. background: rgba(255, 255, 255, 0.3);
  113. display: flex;
  114. align-items: center;
  115. justify-content: center;
  116. margin-bottom: 24rpx;
  117. backdrop-filter: blur(4px);
  118. }
  119. .splash-logo-char {
  120. font-size: 72rpx;
  121. font-weight: 700;
  122. color: #FFFFFF;
  123. line-height: 1;
  124. }
  125. /* ===== Brand Name ===== */
  126. .splash-brand-name {
  127. font-size: 56rpx;
  128. font-weight: 700;
  129. color: #FFFFFF;
  130. letter-spacing: 8rpx;
  131. margin-bottom: 12rpx;
  132. text-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.1);
  133. }
  134. /* ===== Tagline ===== */
  135. .splash-tagline {
  136. font-size: 28rpx;
  137. color: rgba(255, 255, 255, 0.85);
  138. letter-spacing: 4rpx;
  139. font-weight: 400;
  140. }
  141. /* ===== Loading Dots ===== */
  142. .splash-loading {
  143. position: absolute;
  144. bottom: 120rpx;
  145. left: 0;
  146. right: 0;
  147. display: flex;
  148. justify-content: center;
  149. align-items: center;
  150. gap: 12rpx;
  151. }
  152. .splash-dot {
  153. width: 14rpx;
  154. height: 14rpx;
  155. border-radius: 50%;
  156. background: rgba(255, 255, 255, 0.6);
  157. animation: splash-dot-bounce 1.4s ease-in-out infinite both;
  158. }
  159. .splash-dot--1 {
  160. animation-delay: -0.32s;
  161. }
  162. .splash-dot--2 {
  163. animation-delay: -0.16s;
  164. }
  165. .splash-dot--3 {
  166. animation-delay: 0s;
  167. }
  168. @keyframes splash-dot-bounce {
  169. 0%, 80%, 100% {
  170. transform: scale(0.6);
  171. opacity: 0.4;
  172. }
  173. 40% {
  174. transform: scale(1);
  175. opacity: 1;
  176. }
  177. }
  178. /* ===== 五维图标行 ===== */
  179. .splash-dims-row {
  180. display: flex;
  181. flex-direction: row;
  182. align-items: center;
  183. justify-content: center;
  184. gap: 16rpx;
  185. margin: 16rpx 0 20rpx;
  186. }
  187. .splash-dim-item {
  188. display: flex;
  189. flex-direction: column;
  190. align-items: center;
  191. gap: 6rpx;
  192. opacity: 0;
  193. transform: translateY(20rpx);
  194. animation: splash-dim-enter 0.4s ease forwards;
  195. }
  196. .splash-dim-item:nth-child(1) { animation-delay: 0.8s; }
  197. .splash-dim-item:nth-child(2) { animation-delay: 1.05s; }
  198. .splash-dim-item:nth-child(3) { animation-delay: 1.3s; }
  199. .splash-dim-item:nth-child(4) { animation-delay: 1.55s; }
  200. .splash-dim-item:nth-child(5) { animation-delay: 1.8s; }
  201. .splash-dim-circle {
  202. width: 64rpx;
  203. height: 64rpx;
  204. border-radius: 50%;
  205. display: flex;
  206. align-items: center;
  207. justify-content: center;
  208. }
  209. .splash-dim-icon {
  210. font-size: 28rpx;
  211. line-height: 1;
  212. color: #FFFFFF;
  213. }
  214. .splash-dim-label {
  215. font-size: 18rpx;
  216. color: rgba(255, 255, 255, 0.7);
  217. line-height: 1;
  218. }
  219. @keyframes splash-dim-enter {
  220. from {
  221. opacity: 0;
  222. transform: translateY(20rpx);
  223. }
  224. to {
  225. opacity: 1;
  226. transform: translateY(0);
  227. }
  228. }
  229. </style>