金诚优选前端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

224 lines
5.7 KiB

  1. <template>
  2. <view id="store-seckill">
  3. <view class="contents">
  4. <view class="no-list" v-if="!list.length && init">
  5. 暂无数据
  6. </view>
  7. <view class="seckill-list">
  8. <view v-for="(items, idx) in list" :key="idx">
  9. <view class="item" :data-id="item.goods.id" v-for="(item, index) in list[idx]" :key="index" v-if="!item.is_end" @tap="jump">
  10. <view class="img">
  11. <image mode="widthFix" :src="item.goods.img" alt></image>
  12. <view class="time-box" :style="'background: ' + config.mainColor">
  13. <seckill :findex="idx" :end="item.ends_at" :starts="item.starts_at" :server="item.server_time" mold="list" :index="index" @starts="isStarts" @end="isEnd"></seckill>
  14. </view>
  15. </view>
  16. <view class="info">
  17. <view class="name">
  18. <span v-if="item.init_status == 2">[未开始]</span> {{item.goods.name}}
  19. </view>
  20. <view class="money-box">
  21. <view class="num" v-if="item.init_status == 1">
  22. 已有{{item.sell_num}}人购买
  23. </view>
  24. <view class="money">
  25. <span class="old">{{item.goods.sell_price}}</span>
  26. <span class="new">{{item.seckill_price}}</span>
  27. </view>
  28. </view>
  29. </view>
  30. </view>
  31. </view>
  32. <view class="loadingbox" :hidden="!show">
  33. {{showText}}
  34. </view>
  35. </view>
  36. </view>
  37. </view>
  38. </template>
  39. <script>
  40. import {pageLogin, getUrl,config,is} from '@/common/js/utils.js';
  41. import seckill from "@/components/seckill/seckill";
  42. export default {
  43. data() {
  44. return {
  45. hasMore: true,
  46. init: false,
  47. list: [],
  48. page: '',
  49. showText: '正在加载下一页数据',
  50. show: false,
  51. config: '',
  52. findex:''
  53. };
  54. },
  55. components:{
  56. seckill
  57. },
  58. // 加载更多
  59. onReachBottom() {
  60. if (this.hasMore) {
  61. var page = this.page + 1;
  62. this.setData({
  63. show: true
  64. });
  65. this.querySeckillList(page);
  66. } else {
  67. wx.showToast({
  68. image: '../../../static/error.png',
  69. title: '再拉也没有啦'
  70. });
  71. }
  72. },
  73. // 分享
  74. onShareAppMessage(res) {
  75. var title = '惊喜不断,超低价秒杀火热进行中';
  76. return {
  77. title: title,
  78. path: '/pages/store/seckill/seckill'
  79. };
  80. },
  81. onLoad(e) {
  82. // 第三方平台配置颜色
  83. var gbConfig = this.$cookieStorage.get('globalConfig') || '';
  84. this.setData({
  85. config: gbConfig
  86. });
  87. wx.showLoading({
  88. title: "加载中",
  89. mask: true
  90. });
  91. this.querySeckillList(1);
  92. },
  93. components: {
  94. seckill
  95. },
  96. methods: {
  97. jump(e) {
  98. wx.navigateTo({
  99. url: '/pages/store/detail/detail?id=' + e.currentTarget.dataset.id
  100. });
  101. },
  102. // 请求秒杀列表
  103. querySeckillList(page) {
  104. this.$http.get({
  105. api: 'api/seckill/all',
  106. data: {
  107. page: page
  108. }
  109. }).then(res => {
  110. if (res.statusCode == 200) {
  111. res = res.data;
  112. if (res.status) {
  113. var pages = res.meta.pagination;
  114. var current_page = pages.current_page;
  115. var total_pages = pages.total_pages;
  116. this.setData({
  117. // [`list[${page - 1}]`]: res.data,
  118. init: true,
  119. page: current_page,
  120. hasMore: current_page < total_pages
  121. });
  122. this.$set(this.list, page -1, res.data);
  123. } else {
  124. wx.showModal({
  125. title: '',
  126. content: '请求失败',
  127. showCancel: false
  128. });
  129. }
  130. } else {
  131. wx.showModal({
  132. title: '',
  133. content: '请求失败',
  134. showCancel: false
  135. });
  136. }
  137. wx.hideLoading();
  138. this.setData({
  139. show: false
  140. });
  141. }, err => {
  142. wx.hideLoading();
  143. this.setData({
  144. show: false
  145. });
  146. });
  147. },
  148. // 秒杀开始
  149. isStarts(e) {
  150. console.log(e);
  151. var findex = e.findex;
  152. var index = e.index;
  153. if (index != undefined || findex != undefined) {
  154. var item = this.list[findex][index];
  155. if (item.init_status != 1) {
  156. // this.setData({
  157. // [`list[${findex}][${index}].init_status`]: 1
  158. // });
  159. this.list[findex][index].init_status=1;
  160. }
  161. }
  162. },
  163. // 秒杀结束
  164. isEnd(e) {
  165. var findex = e.findex;
  166. var index = e.index;
  167. if (index != undefined || findex != undefined) {
  168. var item = this.list[findex][index];
  169. if (item.is_end == false) {
  170. // this.setData({
  171. // [`list[${findex}][${index}].is_end`]: true
  172. // });
  173. this.list[findex][index].is_end=true;
  174. }
  175. }
  176. },
  177. setData: function (obj) {
  178. let that = this;
  179. let keys = [];
  180. let val, data;
  181. Object.keys(obj).forEach(function (key) {
  182. keys = key.split('.');
  183. val = obj[key];
  184. data = that.$data;
  185. keys.forEach(function (key2, index) {
  186. if (index + 1 == keys.length) {
  187. that.$set(data, key2, val);
  188. } else {
  189. if (!data[key2]) {
  190. that.$set(data, key2, {});
  191. }
  192. }
  193. data = data[key2];
  194. });
  195. });
  196. }
  197. },
  198. };
  199. </script>
  200. <style rel="stylesheet/less" lang="less">
  201. @import "seckill";
  202. </style>