signin.vue 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. <template>
  2. <view>
  3. <!-- 顶部导航 -->
  4. <fa-navbar title="签到" :border-bottom="false"></fa-navbar>
  5. <view class="u-flex u-row-center u-col-center signin" :style="[{ background: theme.bgColor }]">
  6. <view class="u-flexs u-m-b-50">
  7. <view class="u-flex u-row-center u-col-center garden1" @click="goSignin">
  8. <view class="garden2" :class="vuex_signin.is_signin?'is-signin':'no-signin'"></view>
  9. <view class="u-flex u-row-center u-col-center garden3 u-font-30" :class="vuex_signin.is_signin?'is-signin':'no-signin'" v-text="vuex_signin.is_signin ? '已签到' : '签到'"></view>
  10. </view>
  11. <view class="u-score-color u-m-t-50" v-text="vuex_signin.msg"></view>
  12. </view>
  13. <view class="rule u-tips-color" @click="show = true">签到规则</view>
  14. </view>
  15. <view class="u-p-l-30 u-p-r-30 number">
  16. <view class="u-bg-white u-flex u-col-center">
  17. <view class="u-flex u-row-around" style="width: 100%;">
  18. <view class="u-text-center" @click="goPage('/pages/logs/score')">
  19. <view class="u-font-40" v-text="vuex_signin.score"></view>
  20. <view class=""><text class="u-m-l-10">积分</text></view>
  21. </view>
  22. <view class="u-text-center" @click="goPage('/pages/signin/logs')">
  23. <view class="u-font-40" v-text="vuex_signin.successions"></view>
  24. <view class=""><text class="">签到天数</text></view>
  25. </view>
  26. <view class="u-text-center" @click="goPage('/pages/signin/ranking')">
  27. <view class="u-font-40">{{vuex_signin.self_rank}}</view>
  28. <view class=""><text class="">排行</text></view>
  29. </view>
  30. </view>
  31. </view>
  32. <view class="u-m-t-30"><fa-signin ref="sign" @dosign="goSignin" @fillup="fillup"></fa-signin></view>
  33. </view>
  34. <!-- 签到规则 -->
  35. <u-modal v-model="show" title="签到积分规则">
  36. <view class="slot-content">
  37. <view class="u-p-30">
  38. <u-table>
  39. <u-tr class="u-tr">
  40. <u-th class="u-th u-flex-1">连续签到天数</u-th>
  41. <u-th class="u-th u-flex-1">获得积分</u-th>
  42. </u-tr>
  43. <u-tr class="u-tr" v-for="(item, index) in vuex_signin.signinscore" :key="index">
  44. <u-td class="u-td u-flex-1">{{ '第' + index.replace('s', '') + '天' }}</u-td>
  45. <u-td class="u-td u-flex-1" v-text="item"></u-td>
  46. </u-tr>
  47. </u-table>
  48. </view>
  49. </view>
  50. </u-modal>
  51. <!-- 底部导航 -->
  52. <fa-tabbar></fa-tabbar>
  53. </view>
  54. </template>
  55. <script>
  56. export default {
  57. onShow() {
  58. this.getSigninConfig();
  59. },
  60. data() {
  61. return {
  62. show: false
  63. };
  64. },
  65. methods: {
  66. getSigninConfig() {
  67. this.$api.signinConfig().then(res => {
  68. if (res.code) {
  69. this.$u.vuex('vuex_signin', res.data);
  70. }
  71. });
  72. },
  73. goPage(path) {
  74. this.$Router.push({
  75. path: path
  76. });
  77. },
  78. //签到
  79. goSignin() {
  80. if(this.vuex_signin.is_signin){
  81. this.$u.toast('今天已签到,请明天再来');
  82. return;
  83. }
  84. this.$api.dosign().then(res => {
  85. this.$u.toast(res.msg);
  86. if (res.code) {
  87. this.getSigninConfig();
  88. this.$refs.sign.init();
  89. }
  90. });
  91. },
  92. //补签
  93. fillup(e) {
  94. this.$api.fillup({ date: e.fill_date }).then(res => {
  95. this.$u.toast(res.msg);
  96. if (res.code) {
  97. this.getSigninConfig();
  98. this.$refs.sign.init();
  99. }
  100. });
  101. }
  102. }
  103. };
  104. </script>
  105. <style lang="scss">
  106. page {
  107. background-color: #f4f6f8;
  108. }
  109. .signin {
  110. height: 450rpx;
  111. position: relative;
  112. .u-flexs {
  113. display: flex;
  114. flex-direction: column;
  115. align-items: center;
  116. }
  117. .garden1 {
  118. width: 180rpx;
  119. height: 180rpx;
  120. border-radius: 200rpx;
  121. background-color: rgba(255, 255, 255, 0.4);
  122. position: relative;
  123. .garden2 {
  124. width: 150rpx;
  125. height: 150rpx;
  126. border-radius: 200rpx;
  127. background-color: rgba(255, 255, 255, 0.7);
  128. position: absolute;
  129. left: 15rpx;
  130. top: 15rpx;
  131. z-index: 80;
  132. .is-signin{
  133. color: #909399;
  134. }
  135. &.no-signin{
  136. animation: gardens2 2s infinite;
  137. }
  138. }
  139. .garden3 {
  140. width: 120rpx;
  141. height: 120rpx;
  142. border-radius: 200rpx;
  143. background-color: #ffffff;
  144. position: relative;
  145. z-index: 100;
  146. &.no-signin{
  147. animation: gardens3 2s infinite;
  148. }
  149. }
  150. }
  151. .u-score-color {
  152. color: #e0e0e0;
  153. }
  154. .rule {
  155. position: absolute;
  156. right: 0;
  157. top: 50rpx;
  158. background-color: rgba(255, 255, 255, 0.9);
  159. border-top-left-radius: 30rpx;
  160. border-bottom-left-radius: 30rpx;
  161. padding: 5rpx 10rpx 5rpx 20rpx;
  162. }
  163. }
  164. .number {
  165. position: relative;
  166. top: -65rpx;
  167. .u-col-center {
  168. height: 130rpx;
  169. border-radius: 10rpx;
  170. box-shadow: 0px 0px 5px 0px rgba(0, 34, 144, 0.1);
  171. .u-row-around {
  172. width: 100%;
  173. }
  174. }
  175. }
  176. @keyframes gardens2{
  177. 0% {
  178. opacity: 1;
  179. transform: scale(1);
  180. }
  181. 100% {
  182. opacity: 0;
  183. transform: scale(1.5);
  184. }
  185. }
  186. </style>