index.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362
  1. <template>
  2. <view>
  3. <!--group/index/index.wxml-->
  4. <view class="banner">
  5. <image :src="picUrlss+'ptban.jpg'" mode="widthFix"></image>
  6. </view>
  7. <view class="con">
  8. <view class="tab dflex">
  9. <view :class="'li dflex ' + (tabIndex==1?'on':'')" data-index="1" @tap="clickTab">
  10. <icon class="icon iconfont icon-hot"></icon>
  11. <text>今日拼团</text>
  12. </view>
  13. <view :class="'li dflex ' + (tabIndex==2?'on':'')" data-index="2" @tap="clickTab">
  14. <icon class="icon iconfont icon-yugao"></icon>
  15. <text>明日预告</text>
  16. </view>
  17. <view :class="'li dflex ' + (tabIndex==3?'on':'')" data-index="3" @tap="clickTab">
  18. <icon class="icon iconfont icon-yugao"></icon>
  19. <text>全部</text>
  20. </view>
  21. </view>
  22. <view class="pintuan pdlr20 bgfff" v-if="pageList.length>0">
  23. <view v-for="(item, index) in pageList" :key="index" class="li">
  24. <view class="dflex" :data-index="index">
  25. <view class="pinimgs" @tap="toGroupRemind" :data-index="index">
  26. <image :src="item.pic" mode="aspectFit" class="pinimg" lazy-load="true"></image>
  27. <view class="tuan">
  28. <image src="/static/pages/images/tagbg.png"></image>
  29. <text>{{item.activityMainEntity.numberPeople}}人团</text>
  30. </view>
  31. </view>
  32. <view class="pininfo flex">
  33. <view class="proname" @tap="toGroupRemind" :data-index="index">{{item.productName}}</view>
  34. <view :class="[item.start==false||item.end==true? 'wei' : '',item.times?'endtime':'endtimes']" @tap="toGroupRemind"
  35. :data-index="index">
  36. <block v-if="item.times">
  37. {{item.start==false? '距开始': item.end==false?'距结束':'已结束'}}
  38. {{item.times?item.times:''}}
  39. </block>
  40. </view>
  41. <view class="del" @tap="toGroupRemind" :data-index="index"
  42. v-if="item.marketPrice<item.money&&item.marketPrice!=0">¥{{item.marketPrice}}</view>
  43. <view class="operate dflex">
  44. <view class="price" @tap="toGroupRemind" :data-index="index">
  45. 拼团价¥<text>{{item.money}}</text></view>
  46. <view class="add-cart">
  47. <view class="remind mbglinear dflex" v-if="item.start==true&&item.end==false"
  48. @tap="toGroupRemind" :data-index="index">立即开团</view>
  49. <block v-else>
  50. <view class="remind mbggreen dflex"
  51. v-if="item.start==false&&item.end==false&&item.isRemind"
  52. @tap="cancelActivityRemind" :data-index="index">取消预约</view>
  53. <view class="remind mbggreen dflex"
  54. v-if="item.start==false&&item.end==false&&!item.isRemind"
  55. @tap="addActivityRemind" :data-index="index">
  56. <icon class="iconfont icon-yugao"></icon>预约提醒
  57. </view>
  58. </block>
  59. </view>
  60. </view>
  61. </view>
  62. </view>
  63. </view>
  64. </view>
  65. <view class="nodata nosp bgfff" v-if="ishow">
  66. <image :src="picUrlss+'empty_sp.png'"></image>
  67. <text>暂无商品</text>
  68. </view>
  69. </view>
  70. </view>
  71. </template>
  72. <script>
  73. // group/index/index.js
  74. const app = getApp();
  75. const req = require("../../../utils/request.js");
  76. const utils = require("../../../utils/util.js");
  77. const requsetmessage = require("../../../utils/requestmessage.js");
  78. export default {
  79. data() {
  80. return {
  81. picUrlss: req.public.picUrls,
  82. form: {
  83. page: 1,
  84. limit: 10
  85. },
  86. pageList: [],
  87. isLoad: true,
  88. hasmore: true,
  89. tabIndex: 1,
  90. ishow: false
  91. };
  92. },
  93. components: {},
  94. props: {},
  95. onLoad(options) {
  96. this.query = options;
  97. // console.log(options);
  98. },
  99. onShow: function() {
  100. this.isLoad = true, this.form.page = 1;
  101. this.setData({
  102. pageList: []
  103. });
  104. this.getList(this.tabIndex); // console.log("=======================")
  105. },
  106. onReachBottom: function() {
  107. // console.log(this.data.pageList.length)
  108. // if (this.data.pageList.length >= 10) {
  109. // console.log("111111111111")
  110. this.form.page++;
  111. this.getList(this.tabIndex); // }
  112. },
  113. onUnload() {
  114. this.clearAllTimer();
  115. },
  116. onHide() {
  117. this.clearAllTimer();
  118. },
  119. methods: {
  120. clickTab(event) {
  121. const index = event.currentTarget.dataset.index;
  122. this.setData({
  123. tabIndex: index,
  124. 'form.page': 1
  125. });
  126. this.isLoad = true,
  127. this.getList(index);
  128. this.clearAllTimer();
  129. },
  130. getList(dayType) {
  131. let isShowLoading = false;
  132. if (this.form.page == 1 && !isShowLoading) {
  133. req.loadIng('加载中');
  134. isShowLoading = true;
  135. }
  136. // console.log(this.isLoad);
  137. let that = this;
  138. if (!this.isLoad) return false;
  139. this.isLoad = false;
  140. that.form.dayType = dayType;
  141. if (dayType == 3) {
  142. delete that.form.dayType
  143. }
  144. if (this.query.merchantId) {
  145. that.form.merchantId = this.query.merchantId;
  146. } else if (req.getStorage('MERCHANT')) {
  147. that.form.merchantId = req.getStorage('MERCHANT').id;
  148. } // if (this.query.type == 4) {
  149. // that.data.form.type = '4'
  150. // req.getRequest('/api/shopProduct/list', that.data.form, data => {
  151. // // console.log(data,data.length)
  152. // if (data && data.list.length >= 10) that.data.isLoad = true;
  153. // if (that.data.form.page > 1) data.list = that.data.pageList.concat(data.list);
  154. // data = data.list.map(it => {
  155. // it.isRemind = it.remindId;
  156. // return it
  157. // });
  158. // console.log(data);
  159. // let arrObjFilter = data.filter(ele => ele.end == false)
  160. // that.setData({
  161. // pageList: arrObjFilter
  162. // })
  163. // console.log(that.data.pageList)
  164. // if (this.data.pageList.length <= 0) {
  165. // that.setData({
  166. // ishow: true
  167. // })
  168. // } else {
  169. // that.setData({
  170. // ishow: false
  171. // })
  172. // }
  173. // if (isShowLoading) {
  174. // wx.hideLoading()
  175. // isShowLoading = false;
  176. // }
  177. // that.initGroupTimer();
  178. // })
  179. // } else {
  180. that.form.type = '3';
  181. req.getRequest('/api/activity/listNew', that.form, data => {
  182. // console.log(data,data.length)
  183. if (data && data.list.length >= 10) that.isLoad = true;
  184. // console.log(that.form.page);
  185. if (that.form.page > 1) data.list = that.pageList.concat(data.list);
  186. data = data.list.map(it => {
  187. it.isRemind = it.remindId;
  188. return it;
  189. });
  190. // console.log(data); // let arrObjFilter = data.filter(ele => ele.end==false)
  191. // let res=arrObjFilter.filter(it=>it.id)
  192. // console.log(data);
  193. that.setData({
  194. pageList: data
  195. });
  196. // console.log(that.pageList);
  197. if (this.pageList.length <= 0) {
  198. that.setData({
  199. ishow: true
  200. });
  201. } else {
  202. that.setData({
  203. ishow: false
  204. });
  205. }
  206. if (isShowLoading) {
  207. uni.hideLoading();
  208. isShowLoading = false;
  209. }
  210. that.initGroupTimer();
  211. }); // }
  212. // console.log(that.isLoad);
  213. },
  214. initGroupTimer() {
  215. //社区拼图定时器
  216. let _ts = this;
  217. if (this.pageList && this.pageList.length > 0) {
  218. let pageList = this.pageList;
  219. const initPage = (parseInt(this.form.page) - 1) * 10;
  220. for (let i = initPage, len = pageList.length; i < len; i++) {
  221. let group = pageList[i];
  222. let nowTime = new Date(group.nowTime.replace(/-/g, '/')).getTime();
  223. let startTime = new Date(group.startTime.replace(/-/g, '/')).getTime();
  224. let endTime = new Date(group.endTime.replace(/-/g, '/')).getTime();
  225. if (!group.start) endTime = startTime;
  226. let times = parseInt((endTime - nowTime) / 1000);
  227. let data = {}; //判断是否已开始
  228. if (nowTime - startTime > 0) {
  229. //开始了
  230. data['pageList[' + i + '].isStates'] = 1;
  231. } else {
  232. //未开始
  233. data['pageList[' + i + '].isStates'] = 0;
  234. }
  235. _ts.setData(data); //判断是否为负数,为负数则表示已经结束
  236. if (times > 0) {
  237. let timer = setInterval(() => {
  238. times--;
  239. let data = {};
  240. if (times === 0) {
  241. //重新加载列表
  242. data['pageList[' + i + '].end'] = true;
  243. clearInterval(timer);
  244. } else {
  245. let n = utils.formatDayTimes(times);
  246. data['pageList[' + i + '].times'] = n;
  247. }
  248. _ts.setData(data);
  249. }, 1000);
  250. let fs = [];
  251. fs['pageList[' + i + '].timer'] = timer;
  252. _ts.setData(fs);
  253. } else {
  254. //已经结束
  255. data['pageList[' + i + '].times'] = group.endTime;
  256. data['pageList[' + i + '].isStates'] = 2;
  257. _ts.setData(data);
  258. }
  259. }
  260. }
  261. },
  262. toGroupRemind(event) {
  263. const index = event.currentTarget.dataset.index;
  264. const activity = this.pageList[index];
  265. let merchantId;
  266. if (this.query.merchantId) {
  267. merchantId = this.query.merchantId;
  268. } else if (req.getStorage('MERCHANT')) {
  269. merchantId = req.getStorage('MERCHANT').id;
  270. }
  271. let url='activity/group/detail/detail?acid=' + activity.id + "&id=" + activity
  272. .productId
  273. if(!merchantId){
  274. }else{
  275. url+="&merchantId=" + merchantId
  276. }
  277. if (this.query.type == 4) {
  278. app.globalData.openPage('activity/group/detail/detail?acid=' + activity.id + "&id=" + activity
  279. .productId +
  280. '&hideShop=' + false);
  281. } else {
  282. app.globalData.openPage(url);
  283. }
  284. },
  285. clearAllTimer() {
  286. this.pageList.forEach(it => clearInterval(it.timer));
  287. },
  288. addActivityRemind(event) {
  289. const index = event.currentTarget.dataset.index;
  290. const page = this.pageList[index];
  291. req.postRequest('/api/activity/remind', {
  292. activityId: page.id
  293. }, res => {
  294. // requsetmessage.distribution()
  295. requsetmessage.remind();
  296. req.msg('添加提醒成功');
  297. let data = {};
  298. data['pageList[' + index + '].isRemind'] = true;
  299. this.setData(data);
  300. });
  301. },
  302. cancelActivityRemind(event) {
  303. const index = event.currentTarget.dataset.index;
  304. const page = this.pageList[index];
  305. if (req.header.appId == 'ZQ1VK5oc17I387E') {
  306. } else {
  307. req.postRequest('/api/activity/cancel/remind', {
  308. id: page.id
  309. }, res => {
  310. req.msg('取消提醒成功');
  311. let data = {};
  312. data['pageList[' + index + '].isRemind'] = false;
  313. this.setData(data);
  314. });
  315. }
  316. }
  317. }
  318. };
  319. </script>
  320. <style>
  321. @import "./index.css";
  322. </style>