index.jsx 5.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. import React, { useState, useEffect } from 'react'
  2. import Taro, { Current } from '@tarojs/taro'
  3. import { RichText } from '@tarojs/components'
  4. import request, { apis } from '@/utils/request'
  5. import { useModel } from '@/store'
  6. import Page from '@/layouts'
  7. import toolclass from '@/utils/toolclass.js'
  8. import { getShareObject } from '@/utils/share.js'
  9. import '@/assets/css/reset.less'
  10. import '@/assets/css/iconfont.less'
  11. import './index.less'
  12. export default function HuoDongDetail () {
  13. const { user } = useModel('user')
  14. const [DataLock, setDataLock] = useState(false)
  15. const [HasJoin, setHasJoin] = useState(null)
  16. const [IsSign, setIsSign] = useState(null)
  17. const [JoinBtnText, setJoinBtnText] = useState(null)
  18. const [JoinBtnStatus, setJoinBtnStatus] = useState(false)
  19. const [CurrnetHuoDongId] = useState(Current.router.params.id) // 当前活动id
  20. const [ActivityDetail, setActivityDetail] = useState(null) // 活动详情
  21. Taro.useShareAppMessage(() => {
  22. return getShareObject({
  23. title: ActivityDetail.title,
  24. id: CurrnetHuoDongId,
  25. image: ActivityDetail.imgUrl
  26. }, user)
  27. })
  28. useEffect(() => {
  29. GetActivityDetail()
  30. }, [CurrnetHuoDongId])
  31. useEffect(() => {
  32. if (ActivityDetail !== null) {
  33. SetJoinBtnText()
  34. }
  35. }, [IsSign])
  36. const GetActivityDetail = () => { // 获取活动详情
  37. request({ ...apis.getActivityDetail, args: { id: CurrnetHuoDongId } }).then((res) => {
  38. setActivityDetail(res)
  39. CheckActivityJoin()
  40. })
  41. }
  42. const CheckActivityJoin = () => { // 查询活动参加详情
  43. request({ ...apis.checkActivityJoin, args: { id: CurrnetHuoDongId } }).then((res) => {
  44. setHasJoin(!!res.dynamic.isEnlist)
  45. setIsSign(!!res.dynamic.isSign)
  46. })
  47. }
  48. const SetJoinBtnText = () => {
  49. let Now = Date.now()
  50. let JoinStart = new Date(ActivityDetail.enlistStart).getTime()
  51. let JoinEnd = new Date(ActivityDetail.enlistEnd).getTime()
  52. let Start = new Date(ActivityDetail.startDate).getTime()
  53. let End = new Date(ActivityDetail.endDate).getTime()
  54. if (Now < JoinStart) {
  55. setJoinBtnText(`未开始`)
  56. return false
  57. } else if (Now < JoinEnd) {
  58. if (!HasJoin) {
  59. setJoinBtnText(`立即参加`)
  60. setJoinBtnStatus(true)
  61. return false
  62. }
  63. setJoinBtnText(`已报名`)
  64. return false
  65. } else if (Now < Start) {
  66. if (!HasJoin) {
  67. setJoinBtnText(`报名已截止`)
  68. return false
  69. }
  70. setJoinBtnText(`已报名`)
  71. return false
  72. } else if (Now < End) {
  73. if (!HasJoin) {
  74. setJoinBtnText(`活动已开始`)
  75. return false
  76. } else if (!IsSign) {
  77. setJoinBtnText(`去签到`)
  78. setJoinBtnStatus(true)
  79. return false
  80. } else {
  81. setJoinBtnText(`已签到`)
  82. return false
  83. }
  84. } else if (Now >= End) {
  85. setJoinBtnText(`已结束`)
  86. return false
  87. }
  88. setJoinBtnText(null)
  89. return false
  90. }
  91. const ToJoin = () => { // 去报名
  92. if (DataLock || ActivityDetail === null || !JoinBtnStatus) return
  93. setDataLock(true)
  94. const { personId, phone, nickname, orgId } = user
  95. const { dynamicId } = ActivityDetail
  96. if (!phone) { // 未授权手机号,唤起授权手机号弹窗
  97. setShowGetUserPhoneLayer(true)
  98. setDataLock(false)
  99. return false
  100. }
  101. let Data = {
  102. phone,
  103. personId,
  104. dynamicId,
  105. name: nickname,
  106. orgId,
  107. attendNum: 1,
  108. sharePerson: null,
  109. sharePersonName: null,
  110. sharePersonType: null
  111. }
  112. request({ ...apis.JoinActivity, data: { ...Data } }).then(() => {
  113. setHasJoin(true)
  114. setDataLock(false)
  115. }).catch((res) => {
  116. Taro.showToast({ title: res, icon: 'none' })
  117. setDataLock(false)
  118. })
  119. }
  120. return (
  121. <Page>
  122. <view className='HuoDongDetail'>
  123. <view className='BannerLayer'></view>
  124. {
  125. ActivityDetail !== null &&
  126. <view className='Banner'>
  127. <image mode='aspectFill' src={ActivityDetail.imgUrl} className='centerLabel'></image>
  128. </view>
  129. }
  130. {
  131. ActivityDetail !== null &&
  132. <view className='Info'>
  133. <view className='MainInfo'>
  134. <text className='Name'>{ActivityDetail.title}</text>
  135. <text className='Tips'>{ActivityDetail.enlisted}人已报名</text>
  136. <view className='flex-h'>
  137. <text>活动时间:</text>
  138. <view className='flex-item'>{toolclass.FormatDate(ActivityDetail.startDate)}<text>限{ActivityDetail.enlistNum}人</text></view>
  139. </view>
  140. <view className='flex-h'>
  141. <text>活动地址:</text>
  142. <view className='flex-item'>{ActivityDetail.address}</view>
  143. </view>
  144. <view className='flex-h'>
  145. <text>报名截止:</text>
  146. <view className='flex-item'>{toolclass.FormatDate(ActivityDetail.enlistEnd)}</view>
  147. </view>
  148. </view>
  149. <view className='Desc'>
  150. <text>活动介绍</text>
  151. <RichText nodes={ActivityDetail.desc}></RichText>
  152. </view>
  153. {
  154. HasJoin !== null &&
  155. <text className={JoinBtnStatus ? 'active BottomBtn' : 'BottomBtn'} onClick={ToJoin}>{JoinBtnText}</text>
  156. }
  157. </view>
  158. }
  159. </view>
  160. </Page>
  161. )
  162. }