index.vue 5.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. <template>
  2. <view class="page JingCaiHuoDong flex-v">
  3. <!-- Nav -->
  4. <view class="NavContainer">
  5. <scroll-view scroll-x="true">
  6. <view class="NavX">
  7. <image mode="heightFix" src="https://cjgw.oss-cn-hangzhou.aliyuncs.com/ygcxxfb/image/jingcaihuodong.png"></image>
  8. <view v-for="(item, index) in HuoDongNavList" :key="index" :class="{'active': CurrentNavId - 0 === item.Id - 0}" @tap="CutNav(item)">{{item.Name}}</view>
  9. </view>
  10. </scroll-view>
  11. </view>
  12. <!-- 列表 -->
  13. <view class="flex-item">
  14. <ScrollY :IsRefreshing="IsRefreshing" @Refresh="Refresh" @ScrollBottom="ScrollBottom">
  15. <view class="ActivityList">
  16. <view class="List">
  17. <view class="Item" v-for="(item, index) in PageList" :key="index">
  18. <navigator class="Img" :url="`./ActivityDetail/index?id=${item.activityId}`" hover-class="other-navigator-hover">
  19. <image mode="aspectFill" class="centerLabel" :src="item.thumb"></image>
  20. </navigator>
  21. <view class="Info">
  22. <text>{{item.name}}</text>
  23. <view class="flex-h">
  24. <text class="flex-item">参与截止时间:{{ToolClass.DateFormat(new Date(item.enrollEnd).getTime())}}</text>
  25. <navigator :url="`./ActivityDetail/index?id=${item.activityId}`" hover-class="other-navigator-hover" class="Btn" v-if="item.isEnroll">立即报名</navigator>
  26. <navigator :url="`./ActivityDetail/index?id=${item.activityId}`" hover-class="other-navigator-hover" class="Btn" v-if="item.isVote">立即投票</navigator>
  27. <view v-if="new Date(item.endDate).getTime() <= Date.now()">已结束</view>
  28. </view>
  29. </view>
  30. </view>
  31. <view style="width: 100%; height: 10px;"></view>
  32. </view>
  33. </view>
  34. </ScrollY>
  35. </view>
  36. </view>
  37. </template>
  38. <script>
  39. import ScrollY from '../../../components/ScrollY/index'
  40. import { createNamespacedHelpers } from 'vuex'
  41. const { mapState: mapIndexState, mapActions: mapIndexActions, mapMutations: mapIndexMutations } = createNamespacedHelpers('index')
  42. const { mapActions: mapUserActions, mapMutations: mapUserMutations } = createNamespacedHelpers('user')
  43. export default {
  44. name: 'JingCaiHuoDong',
  45. data () {
  46. return {
  47. PageData: {
  48. pageNum: 1,
  49. pageSize: 15
  50. },
  51. PageList: [],
  52. HuoDongNavList: [
  53. { Name: '暖场活动', Id: '1' },
  54. { Name: '六点半学堂', Id: '2' },
  55. { Name: '夜跑行动', Id: '3' },
  56. { Name: '美好出游季', Id: '4' },
  57. { Name: '旧衣飞行', Id: '5' },
  58. { Name: '丽园助农', Id: '6' }
  59. ],
  60. CurrentNavId: 1,
  61. HasNextPage: true,
  62. IsRefreshing: false,
  63. DataLock: false
  64. }
  65. },
  66. computed: {
  67. ...mapIndexState({
  68. ActivityList: x => x.ActivityList // 活动列表
  69. })
  70. },
  71. components: {
  72. ScrollY
  73. },
  74. created () {
  75. let _that = this
  76. wx.login({
  77. success (res) {
  78. _that.MainSignIn({ queryData: { code: res.code } }).then((res) => { // 获取用户信息
  79. _that.EditUserInfo({ name: 'PersonId', value: res.data.data.person.personId })
  80. _that.EditUserInfo({ name: 'OpenId', value: res.data.data.person.openId })
  81. _that.EditUserInfo({ name: 'SessionKey', value: res.data.data.extraInfo.sessionKey })
  82. if (res.data.data.person.phone !== undefined && res.data.data.person.phone !== null) {
  83. _that.EditUserInfo({ name: 'Phone', value: res.data.data.person.phone })
  84. }
  85. _that.Init()
  86. })
  87. }
  88. })
  89. },
  90. methods: {
  91. ...mapUserActions([
  92. 'MainSignIn' // 获取用户信息
  93. ]),
  94. ...mapUserMutations([
  95. 'EditUserInfo' // 编辑用户信息
  96. ]),
  97. ...mapIndexActions([
  98. 'GetActivityList' // 获取活动列表
  99. ]),
  100. ...mapIndexMutations([
  101. 'EmptyActivityList' // 清空活动列表
  102. ]),
  103. Init () { // 初始化
  104. this.PageData.pageNum = 1
  105. this.HasNextPage = true
  106. this.PageList = []
  107. this.EmptyActivityList() // 清空活动列表
  108. this.ToGetPageList() // 获取列表
  109. },
  110. LinkTo (url) { // 跳转页面
  111. wx.navigateTo({ url })
  112. },
  113. CutNav (item) { // 切换导航
  114. if (this.DataLock) return
  115. this.DataLock = true
  116. this.EmptyActivityList() // 清空活动列表
  117. this.CurrentNavId = item.Id
  118. setTimeout(() => {
  119. this.Init() // 初始化
  120. }, 300)
  121. },
  122. ScrollBottom () { // 上拉加载
  123. if (this.DataLock || !this.HasNextPage) return
  124. this.DataLock = true
  125. this.PageData.pageNum += 1
  126. this.ToGetPageList() // 获取列表
  127. },
  128. ToGetPageList () { // 获取列表
  129. this.GetActivityList({ queryData: { ...this.PageData, typeId: this.CurrentNavId } }).then((res) => { // 获取活动列表
  130. this.PageList = [...this.ActivityList]
  131. this.HasNextPage = res.data.data.current < res.data.data.pages
  132. this.DataLock = false
  133. this.IsRefreshing = false
  134. }).catch(() => {
  135. this.DataLock = false
  136. this.IsRefreshing = false
  137. })
  138. },
  139. Refresh (e) { // 页面下拉刷新
  140. if (this.DataLock) return
  141. this.DataLock = true
  142. this.IsRefreshing = true
  143. setTimeout(() => {
  144. this.Init() // 初始化
  145. }, 1000)
  146. }
  147. }
  148. }
  149. </script>
  150. <style lang="scss">
  151. @import "page.scss";
  152. </style>