shareBonus.js 9.2 KB

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