DimensionPageSkeleton.vue 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. <template>
  2. <!--
  3. 五维页首屏加载骨架。
  4. 用途:已登录用户进入五维页、首屏数据请求期间的占位,避免「空白 -> 内容」硬跳变。
  5. 稳态视觉零变化:仅在 pageLoading && isLoggedIn 为真时渲染,真实 section 由各自的数据守卫控制。
  6. 触摸目标与 a11y 不适用(纯占位,不可交互)。
  7. -->
  8. <view class="dim-skeleton">
  9. <!-- 品牌定位语占位 -->
  10. <view class="dim-skeleton-strap skeleton" />
  11. <!-- 画像卡占位 -->
  12. <view class="dim-skeleton-card">
  13. <view class="skeleton dim-skeleton-line dim-skeleton-line-title" />
  14. <view class="dim-skeleton-row">
  15. <view class="skeleton dim-skeleton-line dim-skeleton-line-w70" />
  16. <view class="skeleton dim-skeleton-line dim-skeleton-line-w30" />
  17. </view>
  18. <view class="skeleton dim-skeleton-line dim-skeleton-line-w90" />
  19. <view class="skeleton dim-skeleton-line dim-skeleton-line-w60" />
  20. </view>
  21. <!-- 概览卡占位 -->
  22. <view class="dim-skeleton-card">
  23. <view class="skeleton dim-skeleton-line dim-skeleton-line-title" />
  24. <view class="dim-skeleton-grid">
  25. <view class="skeleton dim-skeleton-tile" />
  26. <view class="skeleton dim-skeleton-tile" />
  27. <view class="skeleton dim-skeleton-tile" />
  28. <view class="skeleton dim-skeleton-tile" />
  29. </view>
  30. </view>
  31. <!-- 功能区占位 -->
  32. <view class="dim-skeleton-card">
  33. <view class="skeleton dim-skeleton-line dim-skeleton-line-title" />
  34. <view class="dim-skeleton-grid">
  35. <view class="skeleton dim-skeleton-tile" />
  36. <view class="skeleton dim-skeleton-tile" />
  37. <view class="skeleton dim-skeleton-tile" />
  38. </view>
  39. </view>
  40. </view>
  41. </template>
  42. <script>
  43. export default {
  44. name: 'DimensionPageSkeleton',
  45. props: {
  46. // 维度码:body / mind / wisdom / action / wealth。预留给后续按维度着色,当前为中性骨架。
  47. dimCode: {
  48. type: String,
  49. default: ''
  50. }
  51. }
  52. }
  53. </script>
  54. <style scoped lang="scss">
  55. /* 骨架走 uni.scss §11 的 .skeleton(shimmer 动画 + 中性渐变底) */
  56. .dim-skeleton {
  57. display: flex;
  58. flex-direction: column;
  59. gap: 24rpx;
  60. padding: 24rpx 30rpx 0;
  61. }
  62. .dim-skeleton-strap {
  63. height: 64rpx;
  64. border-radius: $uni-radius-sm;
  65. }
  66. .dim-skeleton-card {
  67. background: $app-surface;
  68. border-radius: 16rpx;
  69. padding: 28rpx;
  70. display: flex;
  71. flex-direction: column;
  72. gap: 20rpx;
  73. }
  74. .dim-skeleton-line {
  75. height: 28rpx;
  76. border-radius: $uni-radius-sm;
  77. }
  78. .dim-skeleton-line-title {
  79. height: 36rpx;
  80. width: 45%;
  81. }
  82. .dim-skeleton-line-w90 { width: 90%; }
  83. .dim-skeleton-line-w70 { width: 70%; }
  84. .dim-skeleton-line-w60 { width: 60%; }
  85. .dim-skeleton-line-w30 { width: 30%; }
  86. .dim-skeleton-row {
  87. display: flex;
  88. gap: 20rpx;
  89. }
  90. .dim-skeleton-grid {
  91. display: flex;
  92. flex-wrap: wrap;
  93. gap: 20rpx;
  94. }
  95. .dim-skeleton-tile {
  96. width: calc((100% - 40rpx) / 3);
  97. height: 120rpx;
  98. border-radius: $uni-radius-sm;
  99. }
  100. </style>