pandaBonus.js 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341
  1. // pages/pandaBonus/pandaBonus.js
  2. const app = getApp();
  3. const getReq = require('./../../config.js').getReq;
  4. Page({
  5. /**
  6. * 页面的初始数据
  7. */
  8. data: {
  9. openAnimation: true, // 点击开红包
  10. activityType: '', // 1 活动未开始
  11. renderCount: [],
  12. bonus_state: '',
  13. mine_bonus: '',
  14. reveive_info: '',
  15. binded_info: [], // 领取列表
  16. msg: '',
  17. testsn: '59801536315351351916'
  18. },
  19. //bonus_state: 'unstart'// 未开始
  20. /**
  21. * 生命周期函数--监听页面加载
  22. */
  23. onLoad: function (options) {
  24. // type_sn=80571536215385881479
  25. // 65611536217344159139 已过期红包
  26. // 41291536220812950106 未开始
  27. // act=bonusex&op=grab
  28. // 80571536215385881479 已领取
  29. // 18731536237157331856 已开始未领取 随机红包 // 测试领取之后
  30. // 55511536307147470142 手气王 一个 随机
  31. // 74561536308128119414 他人领取 点击查看详情
  32. if (!app.globalData.userInfo) {
  33. wx.navigateTo({
  34. url: `/pages/login/login`
  35. });
  36. return;
  37. }
  38. console.log('onload');
  39. let params = {
  40. act: 'bonusex',
  41. op: 'open',
  42. type_sn: this.data.testsn
  43. }
  44. this.getDatas(params)
  45. },
  46. detail() {
  47. console.log('---detail----');
  48. let params = {
  49. act: 'bonusex',
  50. op: 'detail',
  51. type_sn: this.data.testsn
  52. }
  53. this.getDatas(params)
  54. },
  55. grab() {
  56. console.log('---grab----');
  57. let params = {
  58. act: 'bonusex',
  59. op: 'grab',
  60. type_sn: this.data.testsn
  61. }
  62. this.getDatas(params)
  63. },
  64. getDatas(params) {
  65. let self = this
  66. getReq(params, function(res) {
  67. if(res.code == 200) {
  68. console.log('params:', params);
  69. console.log(res);
  70. let { type_info, bonus_state } = res.datas
  71. if(bonus_state == 'unstart') {
  72. // bonus_state: unstart 活动未开始
  73. let { send_start_date } = type_info
  74. self.countTime(params, send_start_date)
  75. self.setData({
  76. bonus_state
  77. })
  78. return
  79. }
  80. else if(bonus_state == 'open') {
  81. // open 活动开始, 可以点击, 红包金额有 固定, 随机
  82. self.setData({
  83. type_info,
  84. bonus_state
  85. })
  86. return
  87. }
  88. else if(bonus_state == 'detail') {
  89. // 已点开状态, 详情
  90. let { avatars, mine_bonus } = res.datas
  91. let { sender_id, relayer_id} = type_info
  92. let sender_head_src = self.senderHead(relayer_id, sender_id, avatars)
  93. let reveive_info = self.receiveInfo(type_info) // 展示领取信息
  94. //领取列表
  95. let binded_info = []
  96. if (res.datas['binded_info']) {
  97. binded_info = self.getBindedInfo(res.datas['binded_info'], avatars, type_info)
  98. }
  99. if (mine_bonus) {
  100. mine_bonus['bonus_value'] = parseInt(mine_bonus['bonus_value'] * 100 + 0.5) / 100
  101. }
  102. self.setData({
  103. sender_head_src,
  104. type_info,
  105. bonus_state,
  106. mine_bonus,
  107. reveive_info,
  108. binded_info
  109. })
  110. return
  111. }
  112. else if(bonus_state == 'over') {
  113. console.log('over');
  114. let { msg } = res.datas
  115. self.setData({
  116. msg,
  117. bonus_state
  118. })
  119. return
  120. }
  121. else if(bonus_state == 'end') {
  122. console.log('end');
  123. self.setData({
  124. type_info,
  125. bonus_state
  126. })
  127. return
  128. }
  129. }
  130. });
  131. },
  132. getBindedInfo(binded_info, avatars, type_info) {
  133. let self = this
  134. return binded_info.map(item => {
  135. if (avatars[item['user_id']]) {
  136. let avatarItem = avatars[item['user_id']]
  137. item['avatar'] = avatarItem['avatar']
  138. let discount = parseInt(avatarItem['discount'] * 100 + 0.5)
  139. if (discount != 0) {
  140. discount = discount / 100
  141. }
  142. item['discount'] = discount
  143. }
  144. else {
  145. item['avatar'] = '../../image/bonus/female.png'
  146. item['discount'] = 0
  147. }
  148. item['is_king'] = self.isKing(type_info, item['bonus_value'])
  149. item['format_time'] = self.formatTime(item['get_time'])
  150. item['bonus_value'] = parseInt(item['bonus_value'] * 100 + 0.5) / 100
  151. return item
  152. })
  153. },
  154. // 判断手气最佳
  155. isKing(type_info, bonus_value) {
  156. let { total_num, binded_num, send_type, max_amount} = type_info
  157. if (send_type != 1)return false;
  158. if (parseInt(total_num) != parseInt(binded_num))return false;
  159. if (parseInt(max_amount * 100) != parseInt(bonus_value * 100))return false;
  160. return true
  161. },
  162. formatTime(time) {
  163. let d = new Date(time * 1000)
  164. let month = this.zero(d.getMonth() + 1)
  165. let date = this.zero(d.getDate())
  166. let h = this.zero(d.getHours())
  167. let m = this.zero(d.getMinutes())
  168. return `${month}-${date} ${h}:${m}`
  169. },
  170. senderHead(relayer_id, sender_id, avatars) {
  171. let sender_head_src = '../../image/bonus/female.png'
  172. if(relayer_id > 0) {
  173. sender_head_src = avatars[relayer_id]['avatar']
  174. }
  175. else if(sender_id > 0) {
  176. sender_head_src = avatars[sender_id]['avatar']
  177. }
  178. return sender_head_src
  179. },
  180. receiveInfo(type_info) {
  181. let { total_num, binded_num} = type_info
  182. if(total_num == binded_num) {
  183. // 红包领完了
  184. let timestr = `${total_num}个红包,${this.bindedTime(type_info['binded_period'])}`
  185. return timestr
  186. }
  187. else {
  188. let timestr = `领取 ${binded_num}/${total_num}`
  189. let isEndTime = this.isEnd(type_info['send_end_date'])
  190. if (isEndTime == false) {
  191. timestr += ',点击右上角继续分享此红包'
  192. }
  193. return timestr
  194. }
  195. },
  196. isEnd(send_end_date) {
  197. let sendDate = parseInt(send_end_date)
  198. if (sendDate === 0){
  199. return false
  200. }
  201. else {
  202. return new Date().getTime >= sendDate * 1000
  203. }
  204. },
  205. bindedTime(period) {
  206. let min = 60
  207. let hour = 3600
  208. let day = 24 * 3600
  209. let days = parseInt(period / day)
  210. period = period % day
  211. let hours = parseInt(period / hour)
  212. period = period % hour
  213. let mins = parseInt(period / min)
  214. period = period % min
  215. if(period > 0) {
  216. mins += 1
  217. }
  218. let timestr = ''
  219. if (days > 0) {
  220. timestr += `${days}天`
  221. }
  222. if (hours > 0) {
  223. timestr += `${hours}小时`
  224. }
  225. if (mins > 0) {
  226. timestr += `${mins}分钟`
  227. }
  228. timestr += '领完'
  229. return timestr
  230. },
  231. countTime(params, send_start_date) {
  232. let times = parseInt(send_start_date - new Date().getTime() / 1000)
  233. if(times <= 0) {
  234. console.log(times);
  235. // wx.redirectTo({
  236. // url: '/pages/pandaBonus/pandaBonus'
  237. // })
  238. this.getDatas(params) // 活动时间到了,重新请求
  239. return
  240. }
  241. let h = Math.floor(times / 3600)
  242. h = this.zero(h)
  243. let m = Math.floor((times / 60) % 60)
  244. m = this.zero(m)
  245. let s = times % 60
  246. s = this.zero(s)
  247. let renderCount = [h.split(''), m.split(''), s.split('')]
  248. this.setData({
  249. renderCount
  250. })
  251. setTimeout(() => {
  252. this.countTime(send_start_date)
  253. }, 1000);
  254. },
  255. zero(n) {
  256. n = n >= 10 ? n.toString() : '0' + n
  257. return n
  258. },
  259. open() {
  260. this.setData({
  261. openAnimation: false
  262. })
  263. this.grab()
  264. },
  265. /**
  266. * 生命周期函数--监听页面初次渲染完成
  267. */
  268. onReady: function () {
  269. },
  270. /**
  271. * 生命周期函数--监听页面显示
  272. */
  273. onShow: function () {
  274. },
  275. /**
  276. * 生命周期函数--监听页面隐藏
  277. */
  278. onHide: function () {
  279. },
  280. /**
  281. * 生命周期函数--监听页面卸载
  282. */
  283. onUnload: function () {
  284. },
  285. /**
  286. * 页面相关事件处理函数--监听用户下拉动作
  287. */
  288. onPullDownRefresh: function () {
  289. },
  290. /**
  291. * 页面上拉触底事件的处理函数
  292. */
  293. onReachBottom: function () {
  294. },
  295. /**
  296. * 用户点击右上角分享
  297. */
  298. onShareAppMessage: function () {
  299. let imageUrl = '../../image/share_bonus.png'
  300. return {
  301. title: `点一下,你和TA都有红包!`,
  302. path: `/pages/pandaBonus/pandaBonus`,
  303. imageUrl: imageUrl
  304. }
  305. }
  306. })