| <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,  | 
|         ywWxAuthorize  | 
|     } from '@/api'  | 
|     import {  | 
|         mapState,  | 
|         mapMutations  | 
|     } from 'vuex'  | 
|     export default {  | 
|         name: 'login',  | 
|   | 
|         data() {  | 
|             return {  | 
|                 form: {  | 
|                     phone: '',  | 
|                     code: ''  | 
|                 },  | 
|                 downTime: 0,  | 
|                 code: '' | 
|                 // code: ''  | 
|             }  | 
|         },  | 
|   | 
|         onShow() {  | 
|             // return  | 
|             var that = this  | 
|             let url = window.location.href  | 
|             if (url.indexOf('code=') !== -1 || this.code) {  | 
|                 let code = ''  | 
|                 const query = url.split('?')  | 
|                 for (const q of query) {  | 
|                     if (q.indexOf('code=') !== -1) {  | 
|                         let statusIndex = q.indexOf('&state')  | 
|                         code = q.substring(q.indexOf('code=') + 5, statusIndex)  | 
|                     }  | 
|                 }  | 
|                 ywWxAuthorize({  | 
|                     code: code || this.code  | 
|                 }).then(res => {  | 
|                     if (res.code === 200) { | 
|                         console.log('res', res);  | 
|                         that.$store.commit('setOpenId', res.data.openid)  | 
|                         if (res.data.token && res.data.token != '') { | 
|                             that.$store.commit('setToken', res.data.token)  | 
|                             getUserInfo().then(ress => {  | 
|                                 that.$store.commit('setUserInfo', ress.data)  | 
|                             })  | 
|                             setTimeout(() => {  | 
|                                 uni.redirectTo({  | 
|                                     url: "/pages/index"  | 
|                                 })  | 
|                             }, 300)  | 
|                         }  | 
|                     }  | 
|                 })  | 
|             } else {  | 
|                 let url = 'https://zhcg.fnwtzx.com/yunwei_h5'  | 
|                 const appID = 'wx95ac1efb67f0330d'  | 
|                 let uri = encodeURIComponent(url)  | 
|                 let authURL =  | 
|                     `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appID}&redirect_uri=${uri}&response_type=code&scope=snsapi_base#wechat_redirect`  | 
|                 window.location.href = authURL  | 
|             }  | 
|   | 
|         },  | 
|         // onBackPress(options) {  | 
|         //     uni.redirectTo({  | 
|         //         url: '/pages/login/login'  | 
|         //     })  | 
|         //     return true  | 
|         // },  | 
|         methods: {  | 
|             ...mapMutations(["setToken", "setUserInfo"]),  | 
|             onLogin() {  | 
|                 const {  | 
|                     form,  | 
|                     ProtocolFlag  | 
|                 } = this  | 
|                 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"  | 
|                             })  | 
|                         })  | 
|                     }  | 
|                 })  | 
|   | 
|   | 
|   | 
|             },  | 
|             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('短信发送成功')  | 
|                 })  | 
|             },  | 
|         }  | 
|     }  | 
| </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> |