17. 基于Vue+Element+nodeJs+Express

2020-05-18  本文已影响0人  竹立荷塘

我这里的页面一般分为三部分:html、js和css。接下来开启我们的页面构建之旅。

一、 想实现的效果

登录页面

二、 页面实现

1. html

首先我们想将登录的布局写出来。

<template>
  <div class="login-container">
    <el-form class="login-main sub-center-center" :model="formData" :rules="formRules" ref="formData" label-position="left" label-width="0px">
      <h3 class="title">周报管理系统登录</h3>
      <el-form-item prop="name">
        <el-input type="text" v-model="formData.name" auto-complete="off" placeholder="账号"></el-input>
      </el-form-item>
      <el-form-item prop="password">
        <el-input type="password" v-model="formData.password" auto-complete="off" placeholder="密码"></el-input>
      </el-form-item>
      <el-form-item class="btn-box">
        <el-button type="primary" @click="submitLogin('formData')">登录</el-button>
        <el-button @click="resetForm('formData')">重置</el-button>
      </el-form-item>
    </el-form>
  </div>
</template>

2. css

然后来写一下登录页面的样式,我一些共用的样式,统一放在了全局的scss文件里,页面里只放一些这个页面独有的样式。

<style scoped lang="scss">
.login-container{position: relative; width: 100vw; height: 100vh;background-image:url('../assets/images/login_bg.png'); background-size: cover; overflow: hidden;
  .login-main{ -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; background-clip: padding-box; width: 350px; padding: 35px 35px 15px; background: #fff; border: 1px solid #eaeaea; box-shadow: 0 0 25px #cac6c6;
    h3{text-align: center;}
    .btn-box{text-align: center;}
  }
}
</style>

3. JS

接下来就是我们的重中之重JS了,在这个页面里我用js主要实现一下功能:登录表单验证、登录请求和登录成功之后的跳转。

<script>
import { userLogin } from '@/config/interface'
export default {
  data () {
    // 用户名和密码的验证规则
    const validate = (rule, value, callback) => {
      const reg = /^[0-9a-zA-Z]*$/g
      if (!value) {
        callback(new Error('请输入内容'))
      } else if (value.length < 3 || value.length > 6) {
        callback(new Error('内容长度需在 3 到 6 个字符'))
      } else if (!reg.test(value)) {
        callback(new Error('内容需为字母或数字'))
      } else {
        callback()
      }
    }
    return {
      formData: {
        name: null,
        password: null
      },
      formRules: {
        name: [
          { validator: validate, trigger: 'blur' }
        ],
        password: [
          { validator: validate, trigger: 'blur' }
        ]
      },
      reqFlag: {
        login: true
      }
    }
  },
  methods: {
    // 登录请求
    submitLogin (formName) {
      this.$refs[formName].validate((valid) => {
        if (valid) {
          const url = userLogin
          if (this.reqFlag.login) {
            this.reqFlag.login = false
            let params = {
              name: this.formData.name,
              password: this.$md5(this.formData.password)
            }
            this.$http(url, params)
            .then(res => {
              if (res.code == 1) {
                let data = res.data
                localStorage.setItem('userInfo', JSON.stringify(data))
                this.$store.dispatch('saveUserInfo', data)
                this.$common.toast('登陆成功', 'success', false)
                // 登陆成功后跳转到用户管理页面
                this.$router.push({
                  path: '/home/user',
                  query: {}
                })
              }
              this.reqFlag.login = true
            })
          }
        } else {
          console.log('error submit!!')
          return false
        }
      })
    },
    // 重置登录填写的信息
    resetForm (formName) {
      this.$refs[formName].resetFields()
    }
  }
}
</script>

至此,我的登录界面就算是完成了。

三、项目体验链接

周报管理系统体验链接: https://www.17sucai.com/pins/35488.html

上一篇下一篇

猜你喜欢

热点阅读