pandaBonus.js 9.8 KB

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