| <template> | 
|   <view class="login"> | 
|     <view class="login_title">欢迎登录</view> | 
|     <view class="login_title login_title2">阜宁文体中心</view> | 
|     <view class="login_list"> | 
|       <view class="login_list_item"> | 
|         <image src="@/static/login_ic_phone@2x.png" mode="widthFix" /> | 
|         <input v-model="form.phone" maxlength="18" placeholder="请输入手机号" /> | 
|       </view> | 
| <!--     <view class="login_list_item"> | 
|         <image src="@/static/login_ic_password@2x.png" mode="widthFix" /> | 
|         <input v-model="form.password" type="password" placeholder="密码" /> | 
|       </view> --> | 
|      <view class="login_list_item"> | 
|         <image src="@/static/login_ic_password@2x.png" mode="widthFix"></image> | 
|         <input v-model="form.code" placeholder="请输入验证码" type="text" /> | 
|         <view v-if="downTime == 0" class="btn" @click="sendSms">获取验证码</view> | 
|         <view v-else class="btn gray">{{ downTime }}</view> | 
|       </view> | 
|     </view> | 
|     <view class="login_btn"> | 
|       <view class="login_btn_n" @click="onLogin">登录</view> | 
|     </view> | 
|   </view> | 
| </template> | 
|   | 
| <script> | 
| import { loginPost, getUserInfo, sendSMsPost } from '@/api' | 
| import { mapState, mapMutations } from 'vuex' | 
| export default { | 
|   name: 'login', | 
|   | 
|   data() { | 
|     return { | 
|       form: { | 
|                 phone: '18888888888', | 
|                 code: '1' | 
|       }, | 
|             downTime: 0 | 
|     } | 
|   }, | 
|   | 
|   onLoad() { | 
|   }, | 
|   onBackPress(options) { | 
|     uni.redirectTo({ | 
|       url: '/pages/login/login' | 
|     }) | 
|     return true | 
|   }, | 
|   methods: { | 
|     ...mapMutations(["setToken", "setUserInfo"]), | 
|         sendSms() { | 
|             this.downTime = 60 | 
|             let timer = setInterval(() => { | 
|                 if(this.downTime == 0) return clearInterval(timer) | 
|                 this.downTime = this.downTime - 1 | 
|             }, 1000) | 
|             const { form } = this | 
|             sendSMsPost({ | 
|                 phone: form.phone, | 
|                 type: 0 | 
|             }).then(res => { | 
|                 this.showToast('短信发送成功') | 
|             }) | 
|         }, | 
|     onLogin() { | 
|       const { form, ProtocolFlag } = this | 
|       // if (!ProtocolFlag) return uni.showToast({ | 
|       //   title: '请先阅读并同意用户协议', | 
|       //   icon: 'none' | 
|       // }) | 
|       if (!form.phone) return uni.showToast({ | 
|         title: '手机号不能为空', | 
|         icon: 'none' | 
|       }) | 
|       if (!form.code) return uni.showToast({ | 
|         title: '验证码不能为空', | 
|         icon: 'none' | 
|       }) | 
|       loginPost({ | 
|         ...form, | 
|         openId: this.$store.state.openId | 
|       }).then(res => { | 
|         if (res.code === 200) { | 
|           this.setToken(res.data) | 
|                     this.showToast('登录成功') | 
|           getUserInfo().then(ress => { | 
|             this.setUserInfo(ress.data) | 
|             uni.redirectTo({ | 
|               url: "/pages/index" | 
|             }) | 
|           }) | 
|         } | 
|       }) | 
|     } | 
|   } | 
| } | 
| </script> | 
|   | 
| <style lang="scss" scoped> | 
| .login { | 
|   width: 100%; | 
|   height: 100vh; | 
|   display: flex; | 
|   padding-top: 130rpx; | 
|   box-sizing: border-box; | 
|   align-items: center; | 
|   flex-direction: column; | 
|   background: linear-gradient( 180deg, #C5DDFF 0%, #FFFFFF 100%); | 
|   .login_title { | 
|     font-weight: 500; | 
|     font-size: 52rpx; | 
|     color: #222222; | 
|     margin-top: 180rpx; | 
|         width: 100%; | 
|         padding-left: 60rpx; | 
|   } | 
|     .login_title2{ | 
|         margin-top: 10rpx; | 
|         margin-bottom: 80rpx; | 
|     } | 
|   .login_list { | 
|     width: 100%; | 
|     padding: 0 60rpx; | 
|     box-sizing: border-box; | 
|     .login_list_item { | 
|       width: 100%; | 
|       border-radius: 50rpx; | 
|       height: 98rpx; | 
|       padding: 0 40rpx; | 
|       box-sizing: border-box; | 
|       background: #ffffff; | 
|       margin-bottom: 40rpx; | 
|       display: flex; | 
|       align-items: center; | 
|       justify-content: space-between; | 
|       &:last-child { | 
|         margin-bottom: 0 !important; | 
|       } | 
|       image { | 
|         flex-shrink: 0; | 
|         width: 40rpx; | 
|         height: 40rpx; | 
|       } | 
|       .btn{ | 
|           width: 145rpx; | 
|           color:  $primaryColor; | 
|                 text-align: center; | 
|       } | 
|             .gray{ | 
|                 color: #999999; | 
|             } | 
|       input { | 
|         flex: 1; | 
|         height: 100%; | 
|         color: #666666; | 
|         margin-left: 24rpx; | 
|         border: none; | 
|       } | 
|     } | 
|   } | 
|   .login_btn { | 
|     width: 100%; | 
|     padding: 0 60rpx; | 
|     box-sizing: border-box; | 
|     margin-top: 60rpx; | 
|     .for_psd { | 
|       color: $uni-color-primary; | 
|       width: 140rpx; | 
|       text-align: center; | 
|       margin: 40rpx auto; | 
|     } | 
|     .login_btn_n { | 
|       width: 100%; | 
|       height: 98rpx; | 
|       background: $uni-color-primary; | 
|       box-shadow: 0rpx 12rpx 24rpx 0rpx rgba(39, 155, 170, 0.2); | 
|       display: flex; | 
|       align-items: center; | 
|       justify-content: center; | 
|       color: #ffffff; | 
|       border-radius: 50rpx; | 
|             font-weight: 500; | 
|             font-size: 32rpx; | 
|     } | 
|   } | 
|   .deal_wrap { | 
|     position: absolute; | 
|     width: 100%; | 
|     left: 0; | 
|     text-align: center; | 
|     bottom: 88rpx; | 
|     display: flex; | 
|     justify-content: center; | 
|     align-items: center; | 
|     .deal { | 
|       color: $uni-color-primary; | 
|     } | 
|     .checked { | 
|       width: 48rpx; | 
|       margin-right: 12rpx; | 
|     } | 
|   } | 
| } | 
| .modal { | 
|   width: 690rpx; | 
|   min-height: 920rpx; | 
|   max-height: 720px; | 
|   border-radius: 24rpx; | 
|   padding: 32rpx; | 
| } | 
| </style> |