Login.vue 4.13 KB
<template>
  <div class="login-container">
    <div class="login" id="login">
      <div class="limiter">
        <div class="container-login100">
          <div class="wrap-login100">
            <span class="login100-form-title p-b-26">综合视频平台</span>
            <span class="login100-form-title p-b-48">
              <i class="fa fa-video-camera"></i>
            </span>

            <div class="wrap-input100 validate-input" data-validate="Valid email is: a@b.c">
              <input :class="'input100 ' + (username == '' ? '' : 'has-val')" type="text" v-model="username"
                name="username">
              <span class="focus-input100" data-placeholder="用户名"></span>
            </div>

            <div class="wrap-input100 validate-input" data-validate="Enter password">
              <span class="btn-show-pass">
                <i :class="'fa ' + (!showPassword ? 'fa-eye' : 'fa-eye-slash')"
                  @click="showPassword = !showPassword"></i>
              </span>
              <input :class="'input100 ' + (password == '' ? '' : 'has-val')"
                :type="(!showPassword ? 'password' : 'text')" v-model="password" name="password">
              <span class="focus-input100" data-placeholder="密码"></span>
            </div>

            <div class="container-login100-form-btn">
              <div class="wrap-login100-form-btn" :class="{ 'login-loading': isLoging }" v-loading="isLoging"
                element-loading-background="rgb(0 0 0 / 0%);" element-loading-custom-class="login-loading-class">
                <div class="login100-form-bgbtn"></div>
                <button class="login100-form-btn" @click="login">登录</button>
              </div>
            </div>
          </div>
        </div>
        <div class="company-author">
          <span>@2024 上海巴士拓华科技发展有限公司 版权所有</span>
        </div>
      </div>
    </div>
  </div>

</template>

<script>
import crypto from 'crypto';
import userService from "./service/UserService";
export default {
  name: 'Login',
  data() {
    return {
      isLoging: false,
      showPassword: false,
      loginLoading: false,
      username: '',
      password: ''
    }
  },
  created() {
    var that = this;
    document.onkeydown = function (e) {
      var key = window.event.keyCode;
      if (key == 13) {
        that.login();
      }
    }
  },
  methods: {

    //登录逻辑
    login() {
      if (this.username != '' && this.password != '') {
        this.toLogin();
      }
    },

    //登录请求
    toLogin() {
      //需要想后端发送的登录参数
      let loginParam = {
        username: this.username,
        password: crypto.createHash('md5').update(this.password, "utf8").digest('hex')
      }
      var that = this;
      //设置在登录状态
      this.isLoging = true;
      let timeoutTask = setTimeout(() => {
        that.$message.error("登录超时");
        that.isLoging = false;
      }, 1000)

      this.$axios({
        method: 'get',
        url: "/api/user/login",
        params: loginParam
      }).then(function (res) {
        window.clearTimeout(timeoutTask)
        console.log(res);
        console.log("登录成功");
        if (res.data.code === 0) {
          userService.setUser(res.data.data)
          //登录成功后
          that.cancelEnterkeyDefaultAction();
          that.$router.push('/');
        } else {
          that.isLoging = false;
          that.$message({
            showClose: true,
            message: '登录失败,用户名或密码错误',
            type: 'error'
          });
        }
      }).catch(function (error) {
        console.log(error)
        window.clearTimeout(timeoutTask)
        that.$message.error(error.response.data.msg);
        that.isLoging = false;
      });
    },
    cancelEnterkeyDefaultAction: function () {
      document.onkeydown = function (e) {
        var key = window.event.keyCode;
        if (key == 13) {
          return false;
        }
      }
    }
  }
}
</script>
<style scoped>
.container-login100 {
  background: url("../assets/login-bg.jpg") no-repeat;
  background-size: 100% 100%;
  width: 100vw;
  height: 100vh;
}
</style>