<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: 80rpx;">物流车管理系统</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: { 
 | 
        account: '', 
 | 
        password: '', 
 | 
      }, 
 | 
      isShowProtocol: false, 
 | 
      ProtocolFlag: false, 
 | 
      captcha: {}, 
 | 
      htmlText: '' 
 | 
    } 
 | 
  }, 
 | 
  
 | 
  onLoad() { 
 | 
    // this.initCaptcha() 
 | 
  }, 
 | 
  
 | 
  methods: { 
 | 
    ...mapMutations(["setToken", "setUserInfo"]), 
 | 
    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() { 
 | 
      loginCaptcha().then(res => { 
 | 
        this.captcha = res.data 
 | 
      }) 
 | 
    }, 
 | 
  
 | 
    onLogin() { 
 | 
      const { form, ProtocolFlag } = this 
 | 
      if (!ProtocolFlag) return uni.showToast({ 
 | 
        title: '请先阅读并同意用户协议', 
 | 
        icon: 'none' 
 | 
      }) 
 | 
      if (!form.username) return uni.showToast({ 
 | 
        title: '账号不能为空', 
 | 
        icon: 'none' 
 | 
      }) 
 | 
      if (!form.password) return uni.showToast({ 
 | 
        title: '密码不能为空', 
 | 
        icon: 'none' 
 | 
      }) 
 | 
      if (!form.code) return uni.showToast({ 
 | 
        title: '验证码不能为空', 
 | 
        icon: 'none' 
 | 
      }) 
 | 
      loginPost({ 
 | 
        ...form, 
 | 
        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/staff/index" 
 | 
            }) 
 | 
          }) 
 | 
        } 
 | 
      }) 
 | 
    } 
 | 
  } 
 | 
} 
 | 
</script> 
 | 
  
 | 
<style lang="scss" scoped> 
 | 
.login { 
 | 
  width: 100%; 
 | 
  height: 100vh; 
 | 
  display: flex; 
 | 
  padding-top: 160rpx; 
 | 
  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> 
 |