floor-style-2.vue 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. <template>
  2. <div class="floor-style-2">
  3. <div class="head-wrap" v-if="data.value.title.value.text">
  4. <h2 @click="$util.pushToTab(data.value.title.value.link.url)" :style="{textAlign: data.value.title.value.textAlign, color: data.value.title.value.color }">{{ data.value.title.value.text }}</h2>
  5. <p @click="$util.pushToTab(data.value.subTitle.value.link.url)" :style="{ color: data.value.subTitle.value.color }" v-if="data.value.subTitle.value.text">{{ data.value.subTitle.value.text }}</p>
  6. </div>
  7. <div class="body-wrap">
  8. <ul class="goods-list">
  9. <li v-for="(item, index) in data.value.goodsList.value.list" :key="index" :title="item.goods_name" @click="goSku(item.sku_id)">
  10. <div class="img-wrap"><img alt="商品图片" :src="item.goods_image ? $img(item.goods_image.split(',')[0], {size: 'mid'}) : defaultGoodsImage" @error="imageError(index)" /></div>
  11. <h3>{{ item.goods_name }}</h3>
  12. <p class="desc">{{ item.introduction }}</p>
  13. <p class="price">
  14. <span class="num">{{ item.discount_price }}元</span>
  15. <del v-show="Number.parseInt(item.market_price)">{{ item.market_price }}元</del>
  16. </p>
  17. </li>
  18. </ul>
  19. </div>
  20. <div class="bottom-wrap" v-if="data.value.bottomImg.value.url">
  21. <img :src="$img(data.value.bottomImg.value.url)" @click="$util.pushToTab(data.value.bottomImg.value.link.url)" />
  22. </div>
  23. </div>
  24. </template>
  25. <script>
  26. import { mapGetters } from 'vuex';
  27. export default {
  28. name: 'floor-style-2',
  29. props: {
  30. data: {
  31. type: Object
  32. }
  33. },
  34. data() {
  35. return {};
  36. },
  37. created() {},
  38. computed: {
  39. ...mapGetters(['defaultGoodsImage'])
  40. },
  41. methods: {
  42. goSku(skuId) {
  43. this.$router.push('/sku/' + skuId);
  44. },
  45. imageError(index) {
  46. this.data.value.goodsList.value.list[index].goods_image = this.defaultGoodsImage;
  47. }
  48. }
  49. };
  50. </script>
  51. <style lang="scss">
  52. .floor-style-2 {
  53. .head-wrap {
  54. text-align: center;
  55. h2 {
  56. line-height: 30px;
  57. color: #333;
  58. padding: 10px;
  59. font-size: 22px;
  60. cursor: pointer;
  61. overflow: hidden;
  62. text-overflow: ellipsis;
  63. white-space: nowrap;
  64. }
  65. p {
  66. color: #b0b0b0;
  67. padding: 0 10px;
  68. font-size: 14px;
  69. cursor: pointer;
  70. overflow: hidden;
  71. text-overflow: ellipsis;
  72. white-space: nowrap;
  73. margin-bottom: 20px;
  74. }
  75. }
  76. .body-wrap {
  77. .goods-list {
  78. display: flex;
  79. flex-wrap: wrap;
  80. li {
  81. width: 19%;
  82. margin-left: 15px;
  83. margin-bottom: 15px;
  84. background: #fff;
  85. cursor: pointer;
  86. padding: 10px 0;
  87. transition: all 0.2s linear;
  88. &:nth-child(5n + 1) {
  89. margin-left: 0;
  90. }
  91. &:hover {
  92. z-index: 2;
  93. -webkit-box-shadow: 0 15px 30px rgba(0, 0, 0, 0.1);
  94. box-shadow: 0 15px 30px rgba(0, 0, 0, 0.1);
  95. -webkit-transform: translate3d(0, -2px, 0);
  96. transform: translate3d(0, -2px, 0);
  97. }
  98. .img-wrap {
  99. width: 160px;
  100. height: 160px;
  101. margin: 0 auto 18px;
  102. text-align: center;
  103. line-height: 160px;
  104. img {
  105. max-width: 100%;
  106. max-height: 100%;
  107. }
  108. }
  109. h3 {
  110. font-size: 14px;
  111. text-align: center;
  112. text-overflow: ellipsis;
  113. white-space: nowrap;
  114. overflow: hidden;
  115. margin: 5px 15px;
  116. font-weight: normal;
  117. }
  118. .desc {
  119. margin: 0 30px 10px;
  120. height: 20px;
  121. font-size: 12px;
  122. color: #b0b0b0;
  123. text-align: center;
  124. text-overflow: ellipsis;
  125. white-space: nowrap;
  126. overflow: hidden;
  127. }
  128. .price {
  129. margin: 0 10px 14px;
  130. text-align: center;
  131. color: $base-color;
  132. del {
  133. margin-left: 0.5em;
  134. color: #b0b0b0;
  135. }
  136. }
  137. }
  138. }
  139. }
  140. .bottom-wrap {
  141. margin-top: 10px;
  142. width: $width;
  143. height: 118px;
  144. cursor: pointer;
  145. overflow: hidden;
  146. img {
  147. max-width: 100%;
  148. }
  149. }
  150. }
  151. </style>