| <template>  | 
|     <view class="login" :style="{height: windowHeight  + 'px'}">  | 
|         <image class="login_bg" src="@/static/login_bg@2x.png" mode="widthFix" />  | 
|         <image class="login_logo" src="@/static/logo@2x.png" mode="widthFix" />  | 
|         <view class="login_title">安泰物流智慧园区</view>  | 
|         <view class="tabs">  | 
|             <view class="tab" @click="tabsClick(0)" :class="{active: activeTab == 0  }">  | 
|                 <view>账号登录</view>  | 
|                 <view class="bor"></view>  | 
|             </view>  | 
|             <view class="tab" @click="tabsClick(1)" :class="{active: activeTab == 1  }">  | 
|                 <view>验证码登录</view>  | 
|                 <view class="bor"></view>  | 
|             </view>  | 
|         </view>  | 
|         <view class="login_list">  | 
|             <template v-if="activeTab == 0">  | 
|                 <view class="login_list_item">  | 
|                     <image src="@/static/login_ic_phone@2x.png" mode="widthFix" />  | 
|                     <input v-model="form.username" type="number" maxlength="18" @focus="showKeyboard = true"  | 
|                         @blur="showKeyboard = false" placeholder="账号" />  | 
|                 </view>  | 
|                 <view class="login_list_item">  | 
|                     <image src="@/static/login_ic_password@2x.png" mode="widthFix" />  | 
|                     <input v-model="form.password" @focus="showKeyboard = true" @blur="showKeyboard = false" type="password"  | 
|                         placeholder="密码" />  | 
|                 </view>  | 
|             </template>  | 
|             <template v-else>  | 
|                 <view class="login_list_item">  | 
|                     <image src="@/static/login_ic_phone@2x.png" mode="widthFix" />  | 
|                     <input v-model="form.phone" type="tel" @focus="showKeyboard = true" @blur="showKeyboard = false"  | 
|                         :maxlength="18" placeholder="手机号" />  | 
|                 </view>  | 
|                 <view class="login_list_item">  | 
|                     <image src="@/static/ic_captcha.png" mode="widthFix"></image>  | 
|                     <input v-model="form.code" placeholder="请输入验证码" :maxlength="6" type="number" />  | 
|                     <text class="captcha" v-if="countDown == 0" @click="initCaptcha">获取验证码</text>  | 
|                     <text class="placeholder9" v-else>{{ countDown }}</text>  | 
|                 </view>  | 
|             </template>  | 
|             <!-- <view class="login_list_item">  | 
|         <image src="@/static/ic_captcha.png" mode="widthFix"></image>  | 
|         <input v-model="form.code" @focus="showKeyboard = true" @blur="showKeyboard = false" placeholder="验证码" type="text" />  | 
|         <image  | 
|           @click="initCaptcha"  | 
|           :src="captcha.image"  | 
|           class="captcha"  | 
|           mode="widthFix"  | 
|         />  | 
|       </view> -->  | 
|         </view>  | 
|         <view class="login_btn">  | 
|             <view class="login_btn_n" @click="onLogin">立即登录</view>  | 
|             <view @click="$jump('/pages/staffLogin/forgetPsd')" class="for_psd">忘记密码</view>  | 
|         </view>  | 
|   | 
|         <view class="deal_wrap">  | 
|             <image @click="changeFalg" v-if="ProtocolFlag" src="@/static/checkbox_sel@2x.png" mode="widthFix" class="checked">  | 
|             </image>  | 
|             <image @click="changeFalg" v-if="!ProtocolFlag" src="@/static/meeting/icon/ic_choose@2x.png" mode="widthFix"  | 
|                 class="checked"></image>  | 
|             <text>登录即同意</text>  | 
|             <text class="deal" @click="showContent">《安泰物流用户协议》</text>  | 
|         </view>  | 
|         <!--  -->  | 
|         <u-popup :show="isShowProtocol" @close="isShowProtocol = false" closeable :round="8" mode="center">  | 
|             <view class="modal">  | 
|                 <!-- <view v-html="htmlText"></view> -->  | 
|                 <view class="content">  | 
|                     <!-- <mp-html :content="htmlText" /> -->  | 
|                     <u-parse :content="htmlText"></u-parse>  | 
|                 </view>  | 
|             </view>  | 
|         </u-popup>  | 
|     </view>  | 
| </template>  | 
|   | 
| <script>  | 
|     import {  | 
|         loginPost,  | 
|         loginH5ByPhone,  | 
|         getUserInfo,  | 
|         getSystemDictData,  | 
|         saveHkUserOpenid,  | 
|         sendSms  | 
|     } from '@/api'  | 
|     import {  | 
|         mapState,  | 
|         mapMutations  | 
|     } from 'vuex'  | 
|     export default {  | 
|         name: 'login',  | 
|   | 
|         data() {  | 
|             return {  | 
|                 form: {  | 
|                     // username: '18655749830',  | 
|                     username: null,  | 
|                     phone: null,  | 
|                     password: null,  | 
|                     code: null  | 
|                 },  | 
|                 showKeyboard: false,  | 
|                 isShowProtocol: false,  | 
|                 ProtocolFlag: false,  | 
|                 captcha: {},  | 
|                 htmlText: '',  | 
|                 windowHeight: '',  | 
|   | 
|                 countDown: 0,  | 
|                 activeTab: 0,  | 
|   | 
|                 ywinfo: {}  | 
|             }  | 
|         },  | 
|   | 
|         onLoad() {  | 
|             const result = uni.getWindowInfo()  | 
|             this.windowHeight = result.windowHeight  | 
|   | 
|             const ywinfo = uni.getStorageSync('ywinfo') || {}  | 
|             if (ywinfo.ywid && ywinfo.type == 2) {  | 
|                 this.ywinfo = ywinfo  | 
|                 uni.setStorageSync('ywinfo', {})  | 
|             }  | 
|         },  | 
|         onBackPress(options) {  | 
|             uni.redirectTo({  | 
|                 url: '/pages/login/login'  | 
|             })  | 
|             return true  | 
|         },  | 
|         methods: {  | 
|             onLogin() {  | 
|                 const {  | 
|                     form,  | 
|                     ProtocolFlag,  | 
|                     activeTab  | 
|                 } = this  | 
|                 if (!ProtocolFlag) return uni.showToast({  | 
|                     title: '请先阅读并同意用户协议',  | 
|                     icon: 'none'  | 
|                 })  | 
|                 if (activeTab == 0) {  | 
|                     if (!form.username) return uni.showToast({  | 
|                         title: '账号不能为空',  | 
|                         icon: 'none'  | 
|                     })  | 
|                     if (!form.password) return uni.showToast({  | 
|                         title: '密码不能为空',  | 
|                         icon: 'none'  | 
|                     })  | 
|                 } else {  | 
|                     if (!form.phone) return uni.showToast({  | 
|                         title: '手机号不能为空',  | 
|                         icon: 'none'  | 
|                     })  | 
|                     if (!form.code) return uni.showToast({  | 
|                         title: '验证码不能为空',  | 
|                         icon: 'none'  | 
|                     })  | 
|                 }  | 
|                 let fn = activeTab == 0 ? loginPost : loginH5ByPhone  | 
|                 fn({  | 
|                     ...form,  | 
|                     openid: this.$store.state.openId  | 
|                 }).then(res => {  | 
|                     if (res.code === 200) {  | 
|                         this.setToken(res.data)  | 
|                         getUserInfo().then(ress => {  | 
|                             uni.setStorageSync('ywinfo', this.ywinfo)  | 
|                             this.setUserInfo(ress.data)  | 
|                             uni.redirectTo({  | 
|                                 url: "/pages/staff/index"  | 
|                             })  | 
|                         })  | 
|                         saveHkUserOpenid({})  | 
|                     } else {}  | 
|                 })  | 
|             },  | 
|             ...mapMutations(["setToken", "setUserInfo"]),  | 
|             tabsClick(val) {  | 
|                 this.activeTab = val  | 
|                 if (val == 0) {  | 
|                     this.form.username = this.form.username || this.form.phone  | 
|                     this.form.phone = null  | 
|                     this.form.code = null  | 
|                 } else {  | 
|                     this.form.phone = this.form.username || this.form.phone  | 
|                     this.form.password = null  | 
|                     this.form.username = null  | 
|                 }  | 
|             },  | 
|             changeFalg() {  | 
|                 this.ProtocolFlag = !this.ProtocolFlag  | 
|             },  | 
|             getContent() {  | 
|                 getSystemDictData({  | 
|                     dictCode: 'SYSTEM',  | 
|                     label: 'USER_PROTOCOL'  | 
|                 }).then(res => {  | 
|                     this.htmlText = res.data.code  | 
|                     this.isShowProtocol = true  | 
|                 })  | 
|             },  | 
|             showContent() {  | 
|                 this.getContent()  | 
|             },  | 
|             initCaptcha() {  | 
|                 if (!this.form.phone) return uni.showToast({  | 
|                     title: '手机号不能为空',  | 
|                     icon: 'none'  | 
|                 })  | 
|                 sendSms({  | 
|                     phone: this.form.phone  | 
|                 }).then(res => {  | 
|                     if (res.code === 200) {  | 
|                         this.countDown = 60  | 
|                         setInterval(() => {  | 
|                             if (this.countDown == 0) return  | 
|                             this.countDown--  | 
|                         }, 1000)  | 
|                     }  | 
|                 })  | 
|             }  | 
|         }  | 
|     }  | 
| </script>  | 
|   | 
| <style lang="scss" scoped>  | 
|     .login {  | 
|         width: 100%;  | 
|         display: flex;  | 
|         padding-top: 130rpx;  | 
|         box-sizing: border-box;  | 
|         align-items: center;  | 
|         flex-direction: column;  | 
|         position: relative;  | 
|         background: linear-gradient(180deg,  | 
|                 rgba(39, 155, 170, 0.2) 0%,  | 
|                 rgba(39, 155, 170, 0) 100%);  | 
|   | 
|         .login_logo {  | 
|             width: 180rpx;  | 
|             height: 180rpx;  | 
|         }  | 
|   | 
|         .login_bg {  | 
|             position: absolute;  | 
|             top: 0;  | 
|             left: 0;  | 
|             width: 100%;  | 
|             z-index: -1;  | 
|         }  | 
|   | 
|         .login_title {  | 
|             font-size: 44rpx;  | 
|             font-weight: 600;  | 
|             color: #333333;  | 
|             margin-top: 40rpx;  | 
|         }  | 
|   | 
|         .tabs {  | 
|             display: flex;  | 
|             align-items: center;  | 
|             justify-content: space-evenly;  | 
|             width: 530rpx;  | 
|             margin: 60rpx auto 42rpx;  | 
|   | 
|             .tab {  | 
|                 font-size: 30rpx;  | 
|                 color: #666666;  | 
|                 display: flex;  | 
|                 flex-direction: column;  | 
|                 align-items: center;  | 
|                 height: 52rpx;  | 
|                 line-height: 36rpx;  | 
|             }  | 
|   | 
|             .active {  | 
|                 font-weight: bold;  | 
|                 font-size: 34rpx;  | 
|                 color: #222222;  | 
|   | 
|                 .bor {  | 
|                     width: 80rpx;  | 
|                     height: 8rpx;  | 
|                     background: linear-gradient(to bottom, #4d99a8, #a3c8d4);  | 
|                 }  | 
|             }  | 
|         }  | 
|   | 
|         .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;  | 
|                 }  | 
|   | 
|                 .captcha {  | 
|                     color: $uni-color-primary;  | 
|                     font-size: 30rpx;  | 
|                 }  | 
|   | 
|                 image {  | 
|                     flex-shrink: 0;  | 
|                     width: 40rpx;  | 
|                     height: 40rpx;  | 
|                 }  | 
|   | 
|                 .captcha {  | 
|                     width: 200rpx;  | 
|                 }  | 
|   | 
|                 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;  | 
|                 font-weight: 600;  | 
|                 font-size: 32rpx;  | 
|                 color: #ffffff;  | 
|                 border-radius: 50rpx;  | 
|             }  | 
|         }  | 
|   | 
|         .deal_wrap {  | 
|             position: absolute;  | 
|             width: 100%;  | 
|             left: 0;  | 
|             text-align: center;  | 
|             bottom: 48rpx;  | 
|             display: flex;  | 
|             justify-content: center;  | 
|             align-items: center;  | 
|   | 
|             .deal {  | 
|                 color: $uni-color-primary;  | 
|             }  | 
|   | 
|             .checked {  | 
|                 width: 48rpx;  | 
|                 margin-right: 12rpx;  | 
|             }  | 
|         }  | 
|   | 
|         .rela_wrap {  | 
|             position: relative;  | 
|             margin-top: 360rpx;  | 
|         }  | 
|     }  | 
|   | 
|     .modal {  | 
|         width: 690rpx;  | 
|         max-height: 80vh;  | 
|         border-radius: 24rpx;  | 
|         padding: 30rpx 30rpx;  | 
|         overflow: auto;  | 
|         // .content{  | 
|         //     height: 100%;  | 
|         //     overflow: auto;  | 
|         // }  | 
|     }  | 
| </style> |