index.vue 8.2 KB

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