index.vue 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. <template>
  2. <div class="vip">
  3. <div class="vip-card">
  4. <div class="vip-title">
  5. <image class="title-img" src="../../../static/images/vip/img-title.png" alt="会员专区" mode="widthFix"/>
  6. <a v-show="componentContent.showMore" class="btn-more a-link" @click="jumpVip">更多<i class="iconfont icon-arrow-right"></i></a>
  7. </div>
  8. <div>
  9. <swiper class="swiper vip-list" :indicator-dots="true" :autoplay="true" v-if="productData.length > 2">
  10. <swiper-item class="vip-item-warp" v-for="(itemJ,indexJ) in listTemp" :key="indexJ">
  11. <div class="vip-item" v-for="(item,index) in itemJ" :key="index" @click="jumpProductDetail(item)">
  12. <div class="vip-item-img">
  13. <image v-show="item.image" class="img" :src="item.image">
  14. </div>
  15. <div class="vip-item-info">
  16. <h3 class="name">
  17. {{item.productName}}
  18. </h3>
  19. <div class="stock">
  20. 还剩{{item.stockNumber}}件
  21. </div>
  22. <div class="original-price">
  23. ¥ {{item.originalPrice}}
  24. </div>
  25. <div class="price-warp">
  26. <div class="flag">
  27. <image src="../../../static/images/vip/flag-vip.png" alt="会员价" class="flagImg"/>
  28. </div>
  29. <div class="price">
  30. ¥ {{item.price}}
  31. </div>
  32. </div>
  33. <div class="btn-buy">
  34. <span>去购买</span>
  35. <div class="progress">
  36. <i></i>
  37. </div>
  38. </div>
  39. </div>
  40. </div>
  41. </swiper-item>
  42. </swiper>
  43. <div class="swiper vip-list" v-else>
  44. <div class="vip-item-warp" v-for="(itemJ,indexJ) in listTemp" :key="indexJ">
  45. <div class="vip-item" v-for="(item,index) in itemJ" :key="index" @click="jumpProductDetail(item)">
  46. <div class="vip-item-img">
  47. <image v-show="item.image" class="img" :src="item.image">
  48. </div>
  49. <div class="vip-item-info">
  50. <h3 class="name">
  51. {{item.productName}}
  52. </h3>
  53. <div class="stock">
  54. 还剩{{item.stockNumber}}件
  55. </div>
  56. <div class="original-price">
  57. ¥ {{item.originalPrice}}
  58. </div>
  59. <div class="price-warp">
  60. <div class="flag">
  61. <image src="../../../static/images/vip/flag-vip.png" alt="会员价" class="flagImg"/>
  62. </div>
  63. <div class="price">
  64. ¥ {{item.price}}
  65. </div>
  66. </div>
  67. <div class="btn-buy">
  68. <span>去购买</span>
  69. <div class="progress">
  70. <i></i>
  71. </div>
  72. </div>
  73. </div>
  74. </div>
  75. </div>
  76. </div>
  77. <!-- <div class="pagination vip-pagination"></div>-->
  78. </div>
  79. </div>
  80. </div>
  81. </template>
  82. <script>
  83. import {commonMixin} from '../mixin'
  84. export default {
  85. mixins: [commonMixin],
  86. data () {
  87. return {
  88. // swiperOption: {
  89. // autoplay: false, // 可选选项,自动滑动
  90. // loop: true,
  91. // pagination: {
  92. // el: '.vip-pagination'
  93. // }
  94. // }
  95. }
  96. },
  97. computed: {
  98. listTemp: function () {
  99. var list = this.productData;
  100. var arrTemp = [];
  101. var index = -1;
  102. var count = 2; // 每组多少条
  103. for (var i = 0; i < list.length; i++) {
  104. if (i % count==0) {
  105. arrTemp.push([]);
  106. index ++
  107. }
  108. arrTemp[index].push(list[i]);
  109. }
  110. return arrTemp;
  111. }
  112. },
  113. }
  114. </script>
  115. <style lang="scss" scoped>
  116. .vip{
  117. &-card{
  118. background: #333333;
  119. padding: 0 20upx 20upx;
  120. }
  121. &-title{
  122. padding: 42upx 0 28upx 30upx;
  123. position: relative;
  124. .title-img{
  125. display: block;
  126. width: 197upx;
  127. }
  128. .btn-more{
  129. position: absolute;
  130. right: 8upx;
  131. top: 40upx;
  132. line-height: 33upx;
  133. padding-right: 25upx;
  134. font-size: 24upx;
  135. color: #FFEBC4;
  136. .iconfont{
  137. content: '';
  138. font-size: 26upx;
  139. position: absolute;
  140. right: 0;
  141. top: 0;
  142. }
  143. }
  144. }
  145. &-list{
  146. height: 620upx;
  147. }
  148. &-item{
  149. display: flex;
  150. background-color: #fff;
  151. margin-top: 20upx;
  152. &:first-child{
  153. margin-top: 0upx;
  154. }
  155. &-img{
  156. width: 260upx;
  157. height: 260upx;
  158. margin-right: 20upx;
  159. background-color: #ececec;
  160. .img {
  161. width: 100%;
  162. height: 100%;
  163. object-fit: contain;
  164. display: block;
  165. }
  166. }
  167. &-info{
  168. flex: 1;
  169. position: relative;
  170. .name{
  171. font-size: 28upx;
  172. height: 80rpx;
  173. line-height: 40upx;
  174. color: #333333;
  175. padding: 30upx 0 10upx;
  176. overflow:hidden;
  177. text-overflow:ellipsis;
  178. display:-webkit-box;
  179. -webkit-box-orient:vertical;
  180. -webkit-line-clamp:2;
  181. }
  182. .stock{
  183. color: #C5AA7B;
  184. font-size: 20upx;
  185. border: 2upx solid #E4E5E6;
  186. line-height: 40upx;
  187. padding: 0 5upx;
  188. display: inline-block;
  189. margin-bottom: 30upx;
  190. }
  191. .original-price{
  192. font-size: 24upx;
  193. line-height: 34upx;
  194. color: #CCCCCC;
  195. }
  196. .flag{
  197. float: left;
  198. padding: 12upx 10upx 0 0;
  199. .flagImg {
  200. width: 58upx;
  201. height: 36upx;
  202. display: block;
  203. }
  204. }
  205. .price{
  206. font-size: 40upx;
  207. font-weight: bold;
  208. line-height: 56upx;
  209. color: #C83732;
  210. }
  211. .btn-buy{
  212. position: absolute;
  213. right: 20upx;
  214. bottom: 20upx;
  215. width: 160upx;
  216. height: 84upx;
  217. background: linear-gradient(90deg, #C83732 0%, #E25C44 100%);
  218. box-shadow: 0px 6upx 12upx rgba(233, 0, 0, 0.3);
  219. border-radius: 10upx;
  220. text-align: center;
  221. padding: 16upx 20upx 0;
  222. span{
  223. font-size: 24upx;
  224. line-height: 34upx;
  225. color: #FFFFFF;
  226. margin-bottom: 10upx;
  227. }
  228. .progress{
  229. height: 8upx;
  230. background: rgba(255,255,255,0.5);
  231. border-radius: 4upx;
  232. position: relative;
  233. i{
  234. position: absolute;
  235. left: 0;
  236. top: 0;
  237. width: 50%;
  238. height: 8upx;
  239. background-color: #fff;
  240. border-radius: 4upx;
  241. }
  242. }
  243. }
  244. }
  245. }
  246. ::v-deep .uni-swiper-dots{
  247. display: flex;
  248. justify-content: center;
  249. padding-top:20upx;
  250. .uni-swiper-dot{
  251. width: 24upx;
  252. height: 4upx;
  253. background: #fff;
  254. opacity: 0.5;
  255. border-radius: 2upx;
  256. margin: 0 5upx;
  257. &-active{
  258. opacity: 1;
  259. }
  260. }
  261. }
  262. .vip-item-info {
  263. .price-warp {
  264. display: flex;
  265. align-items: center;
  266. }
  267. }
  268. //.pagination{
  269. // display: flex;
  270. // justify-content: center;
  271. // padding-top:20upx;
  272. // ::v-deep .swiper-pagination-bullet{
  273. // width: 24upx;
  274. // height: 4upx;
  275. // background: #fff;
  276. // opacity: 0.5;
  277. // border-radius: 2upx;
  278. // margin: 0 5upx;
  279. // }
  280. // ::v-deep .swiper-pagination-bullet-active{
  281. // opacity: 1;
  282. // }
  283. //}
  284. }
  285. </style>