index.vue 10 KB

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