Newer
Older
cockpit_hxrq_front / src / views / login / appLogin.vue
StephanieGitHub on 3 Jun 2021 5 KB MOD:新增综合业务
<template>
  <transition name="slide">
    <div :style="{backgroundImage:`url(${backgroundImg})`}" class="login">
      <div class="logo">
        <img :src="logoImg">
        <div class="title">
          管理者驾驶舱
        </div>
      </div>
      <div class="login-form-div">
        <el-form id="login-form" ref="loginForm" :model="loginForm" :rules="loginRules" :hide-required-asterisk="true" label-width="40px" class="login-form" auto-complete="on" label-position="right">
          <el-form-item prop="username">
            <span slot="label" class="svg-container">
              <svg-icon icon-class="user" />
            </span>
            <el-input v-model.trim="loginForm.username" name="username" type="text" auto-complete="on" placeholder="用户名" />
          </el-form-item>
          <el-form-item prop="password">
            <span slot="label" class="svg-container">
              <svg-icon icon-class="password" />
            </span>
            <el-input
              :type="pwdType"
              v-model.trim="loginForm.password"
              name="password"
              auto-complete="on"
              placeholder="密码"
              @keyup.enter.native="handleLogin" />
          </el-form-item>
          <div class="login-btn-div">
            <el-button :loading="loading" class="login-btn" type="primary" style="width:100%;" @click.native.prevent="handleLogin">
              登录
            </el-button>
          </div>
        </el-form>
      </div>
    </div>
  </transition>
</template>

<script>
import { RSAencrypt } from '@/utils/security'
export default {
  name: 'AppLogin',
  data() {
    const validateUsername = (rule, value, callback) => {
      if (value.length < 1) {
        callback(new Error('用户名不能为空'))
      } else {
        callback()
      }
    }
    const validatePass = (rule, value, callback) => {
      if (value.length < 1) {
        callback(new Error('密码不能为空'))
      } else {
        callback()
      }
    }
    return {
      backgroundImg: require('@/assets/login_images/app-login-back.png'),
      logoImg: require('@/assets/login_images/logo-simple.png'),
      loginForm: {
        username: '',
        password: ''
      },
      loginRules: {
        username: [{ required: true, trigger: ['blur', 'change'], validator: validateUsername }],
        password: [{ required: true, trigger: ['blur', 'change'], validator: validatePass }]
      },
      loading: false,
      pwdType: 'password'
    }
  },
  beforeCreate: function() { // 从后台获取系统配置,根据配置判断是否加载验证码控件
    this.loading = true
    this.$store.dispatch('GetConfig').then(() => {
      this.loading = false
    }).catch((e) => {
      this.$message.error('连接服务器失败')
      this.loading = false
    })
  },
  methods: {
    handleLogin() { // 点击登录按钮
      // if (!this.showKaptcha) { // 如果未开启验证码,将验证码字段从提交字段中移除
      //   delete this.loginForm['kaptcha']
      //   delete this.loginRules['kaptcha']
      // }
      this.$refs.loginForm.validate(valid => {
        if (valid) {
          this.loading = true
          // 密码加密
          const loginForm = {
            sid: this.$store.getters.sid,
            username: this.loginForm.username,
            password: RSAencrypt(this.loginForm.password),
            kaptcha: this.loginForm.kaptcha
          }
          this.$store.dispatch('Login', loginForm).then(() => {
            this.loading = false
            this.$message.success('登录成功')
            // 判断配置项,是要跳转九宫盒还是主页
            if (this.baseConfig.toDashboard) {
              this.$router.push({ path: '/appIndex' })
            } else {
              this.$store.commit('SET_SYSTEM', { name: '综合业务', url: this.baseConfig.dashUrl })
              const params = '?token=' + this.$store.getters.token + '&url=' + this.baseConfig.dashUrl
              const loginUrl = this.baseConfig.biLogin
              this.$router.push({ path: '/appSubject', query: { name: '综合业务', url: loginUrl + params }})
            }
          }).catch(() => {
            this.loading = false
            if (this.showKaptcha) {
              this.$refs.kaptcha.refreshCode()
            }
          })
        } else {
          return false
        }
      })
    }
  }
}
</script>

<style rel="stylesheet/scss" lang="scss" scoped>
  .login {
    position: fixed;
    z-index: 100;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background-color: white;
    width: 100%;
    height: 100%;
    background-repeat: no-repeat;
    background-size: cover;
    -webkit-background-size: cover;
    -o-background-size: cover;
    input: -webkit-autofill;
    .logo {
      margin: 25% auto;
      margin-bottom: 15%;
      text-align: center;
      img {
        text-align: center;
        height: 25vw;
        width:25vw;
      }
      .title{
        margin-top: 20px;
        font-size:20px;
      }
    }
    .login-form-div{
      width:100%;
      padding: 0px 20px;
      .login-form {
        max-width: 100%;
        padding: 0px 10px 0px 0px;
        margin: auto;
        overflow:hidden;
        .svg-container {
          padding: 0px 0px 0px 0px;
          color: #889aa4;
          vertical-align: middle;
          width: 30px;
          display: inline-block;
        }
        .el-form-item{
          margin-bottom: 35px;
          .el-form-item__error{
            line-height: 1.5 !important;
          }
        }
        .login-btn-div{
          padding-left: 10px;
        }
      }
    }

  }
</style>