JDBanner.vue 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. <template>
  2. <div class="banner-flex w flex">
  3. <!-- 侧边条 -->
  4. <div class="side-deco" v-if="isLargeScreen">
  5. 企业专享低至5折 <i></i>
  6. </div>
  7. <!-- 轮播图 -->
  8. <div class="slider-box" :style="{ flex: isLargeScreen ? '0 0 540px' : '1' }">
  9. <img src="https://img14.360buyimg.com/babel/jfs/t1/181519/33/23577/253912/628f3a38E7b53940c/7c703080e72c8334.jpg" />
  10. </div>
  11. <!-- 复合网格 -->
  12. <div class="mini-grid flex-1">
  13. <div class="grid-wrap">
  14. <div class="g-item subsidy">
  15. <div class="g-h">企业购×百亿补贴 <span>先享后付</span></div>
  16. <div class="g-p-list flex">
  17. <div class="g-p" v-for="i in 4" :key="i">
  18. <img src="https://img10.360buyimg.com/n1/s200x200_jfs/t1/192131/28/13600/171542/611a1b5aE3c869e5d/13e007802874102d.jpg" />
  19. <p>¥69.9</p>
  20. </div>
  21. </div>
  22. </div>
  23. <div class="g-item rank">
  24. <div class="g-h">企业榜单 <span>同行买</span></div>
  25. <div class="g-rank-list flex">
  26. <div class="r-i flex-1" v-for="i in 2" :key="i">
  27. <img src="https://img13.360buyimg.com/n1/s200x200_jfs/t1/175027/2/13627/184131/611a1b7eEc1248c8b/09c3d4f4e2f4f4f4.jpg" />
  28. <p>电脑榜</p>
  29. </div>
  30. </div>
  31. </div>
  32. <div class="g-item store">
  33. <div class="g-h">品牌好店 <span>送E卡</span></div>
  34. <div class="store-inner flex-column flex-center">
  35. <img src="https://img12.360buyimg.com/imagetools/jfs/t1/143521/1/32579/6255/63f8582bEcf959247/e16d443900331003.png" style="width:50px" />
  36. <p style="font-size:12px; margin-top:5px">Apple自营店</p>
  37. </div>
  38. </div>
  39. <div class="g-item new">
  40. <div class="g-h">京东新品 <span>美的新鲜</span></div>
  41. <div class="new-list flex">
  42. <div class="n-p flex-1" v-for="i in 2" :key="i">
  43. <img src="https://img10.360buyimg.com/n1/s200x200_jfs/t1/170942/37/13844/145826/611a1a7aE5e899b82/6e0f8087c0a6b9a9.jpg" />
  44. </div>
  45. </div>
  46. </div>
  47. </div>
  48. </div>
  49. <!-- 用户面板 -->
  50. <div class="user-wrap" v-if="isLargeScreen">
  51. <div class="u-top flex-column flex-center">
  52. <img src="https://img11.360buyimg.com/imagetools/jfs/t1/143521/1/32579/6255/63f8582bEcf959247/e16d443900331003.png" class="avatar" />
  53. <p class="name">Hi, 欢迎访问</p>
  54. <div class="u-btns flex">
  55. <button class="b-login">登录</button>
  56. <button class="b-reg">注册</button>
  57. </div>
  58. </div>
  59. <div class="u-tools">
  60. <p class="t-h">企业工作台</p>
  61. <div class="t-grid">
  62. <div class="t-i" v-for="i in 8" :key="i">
  63. <i></i>
  64. <span>工具{{i}}</span>
  65. </div>
  66. </div>
  67. </div>
  68. </div>
  69. </div>
  70. </template>
  71. <script setup>
  72. import { ref, onMounted, onUnmounted } from 'vue';
  73. const isLargeScreen = ref(window.innerWidth >= 1600);
  74. const check = () => isLargeScreen.value = window.innerWidth >= 1600;
  75. onMounted(() => window.addEventListener('resize', check));
  76. onUnmounted(() => window.removeEventListener('resize', check));
  77. </script>
  78. <style scoped>
  79. .banner-flex { height: 460px; margin: 10px auto; gap: 10px; }
  80. .side-deco { width: 56px; background: #34C759; border-radius: 12px; writing-mode: vertical-lr; color: #fff; font-weight: bold; font-size: 18px; text-align: center; display: flex; align-items: center; justify-content: center; letter-spacing: 4px; }
  81. .slider-box { border-radius: 12px; overflow: hidden; background: #eee; }
  82. .slider-box img { width: 100%; height: 100%; object-fit: cover; }
  83. .mini-grid { }
  84. .grid-wrap { height: 100%; display: grid; grid-template-columns: 1fr 1fr; grid-template-rows: 1fr 1fr; gap: 10px; }
  85. .g-item { background: #fff; border-radius: 12px; padding: 12px; display: flex; flex-direction: column; }
  86. .g-h { font-weight: bold; font-size: 14px; margin-bottom: 10px; }
  87. .g-h span { color: #FF9500; font-size: 12px; float: right; font-weight: normal; }
  88. .g-p-list { gap: 5px; flex: 1; }
  89. .g-p { flex: 1; text-align: center; }
  90. .g-p img { width: 100%; border-radius: 4px; }
  91. .g-p p { color: #E1251B; font-size: 12px; font-weight: bold; }
  92. .g-rank-list { gap: 10px; flex: 1; }
  93. .r-i { background: #F7F8FA; border-radius: 6px; padding: 5px; text-align: center; }
  94. .r-i img { width: 100%; border-radius: 4px; }
  95. .r-i p { font-size: 11px; margin-top: 3px; }
  96. .user-wrap { width: 230px; background: #fff; border-radius: 12px; padding: 15px; }
  97. .avatar { width: 50px; height: 50px; border-radius: 25px; }
  98. .name { margin-top: 10px; font-weight: bold; }
  99. .u-btns { margin-top: 15px; gap: 10px; }
  100. .u-btns button { padding: 4px 15px; border-radius: 12px; border: none; font-size: 12px; cursor: pointer; }
  101. .b-login { background: #E1251B; color: #fff; }
  102. .b-reg { background: #333; color: #e5d790; }
  103. .u-tools { margin-top: 20px; }
  104. .t-h { font-weight: bold; font-size: 13px; margin-bottom: 10px; }
  105. .t-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; }
  106. .t-i { text-align: center; font-size: 11px; color: #666; }
  107. .t-i i { display: block; width: 24px; height: 24px; background: #f4f4f4; border-radius: 50%; margin: 0 auto 5px; }
  108. @media screen and (max-width: 1599px) {
  109. .banner-flex { height: auto; min-height: 400px; }
  110. .grid-wrap { grid-template-rows: auto; }
  111. }
  112. </style>