| <template> | 
|   <view class="login"> | 
|     <image class="login_bg" src="@/static/login_bg@2x.png" /> | 
|     <image class="login_logo" src="@/static/logo@2x.png" mode="widthFix" /> | 
|     <view class="login_title" style="marginTop: 40rpx;">安泰物流智慧园区</view> | 
|     <view class="login_title" style="marginBottom: 60rpx;">数字化月台调度平台</view> | 
|     <view class="login_list"> | 
|       <view class="login_list_item"> | 
|         <image src="@/static/login_ic_phone@2x.png" mode="widthFix" /> | 
|         <input v-model="form.username" 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/ic_captcha.png" mode="widthFix"></image> | 
|         <input v-model="form.code" 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> | 
| </template> | 
|   | 
| <script> | 
| import { loginPost, loginCaptcha, getUserInfo, getSystemDictData } from '@/api' | 
| import { mapState, mapMutations } from 'vuex' | 
| export default { | 
|   name: 'login', | 
|   | 
|   data() { | 
|     return { | 
|       form: { | 
|         username: '13996529050', | 
|         password: '123456', | 
|       }, | 
|             err: '', | 
|       isShowProtocol: false, | 
|       ProtocolFlag: false, | 
|       captcha: {}, | 
|       htmlText: '' | 
|     } | 
|   }, | 
|   | 
|   onLoad() { | 
|     this.initCaptcha() | 
|   }, | 
|   | 
|   methods: { | 
|     ...mapMutations(["setToken", "setUserInfo"]), | 
|     changeFalg() { | 
|       this.ProtocolFlag = !this.ProtocolFlag | 
|     }, | 
|         onLogin() { | 
|           const { form, ProtocolFlag } = this | 
|           if (!form.username) return uni.showToast({ | 
|             title: '账号不能为空', | 
|             icon: 'none' | 
|           }) | 
|           if (!form.password) return uni.showToast({ | 
|             title: '密码不能为空', | 
|             icon: 'none' | 
|           }) | 
|           loginPost({ | 
|             ...form, | 
|                 code: 1, | 
|             uuid: this.captcha.uuid, | 
|             openId: this.$store.state.openId | 
|           }).then(res => { | 
|             if (res.code === 200) { | 
|               this.setToken(res.data) | 
|               getUserInfo().then(ress => { | 
|                 this.setUserInfo(ress.data) | 
|                 uni.redirectTo({ | 
|                   url: "/pages/index/index" | 
|                 }) | 
|               }) | 
|             } | 
|           }, err => { | 
|                 // this.err = JSON.stringify(err) | 
|             }) | 
|         }, | 
|     getContent() { | 
|       getSystemDictData({ | 
|         dictCode: 'SYSTEM', | 
|         label: 'USER_PROTOCOL' | 
|       }).then(res => { | 
|         this.htmlText = res.data.code | 
|         this.isShowProtocol = true | 
|       }) | 
|     }, | 
|     showContent() { | 
|       this.getContent() | 
|     }, | 
|     initCaptcha() { | 
|       loginCaptcha().then(res => { | 
|         this.captcha = res.data | 
|       }) | 
|     }, | 
|   } | 
| } | 
| </script> | 
|   | 
| <style lang="scss" scoped> | 
| .login { | 
|   width: 100%; | 
|   display: flex; | 
|   padding-top: 100rpx; | 
|   box-sizing: border-box; | 
|   align-items: center; | 
|   flex-direction: column; | 
|   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; | 
|     width: 750rpx; | 
|   } | 
|   .login_title { | 
|     font-size: 44rpx; | 
|     font-weight: 600; | 
|     color: #333333; | 
|   } | 
|   .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; | 
|       } | 
|       .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; | 
|     .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: 500; | 
|       font-size: 32rpx; | 
|       color: #ffffff; | 
|       border-radius: 50rpx; | 
|     } | 
|   } | 
|   .deal_wrap { | 
|     position: absolute; | 
|     width: 100%; | 
|     left: 0; | 
|     text-align: center; | 
|     bottom: 108rpx; | 
|     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> |