基于vue登录界面的实现

以下布局代码

1. vue怎么引入和配置使用element-ui框架

  1.1 使用vue-cli脚手架工具创建一个vue项目

      vue init webpack vuelogin

  1.2 npm安装elementUI

      cd vuelogin#进入新建项目的根目录

      npm install element-ui -S                  #安装element-ui模块

  ## 重要的事情说三遍:在指定位置!!!在指定位置!!!在指定位置!!!~~~添加三行代码

  1.3 在项目中src目录下找到main.js,并在指定位置添加三行代码(main.js是入口文件,所以在这里引入就行,页面就不用引入了)

      import Vue from 'vue'

      import ElementUI from 'element-ui' //新添加1

      import 'element-ui/lib/theme-chalk/index.css' //新添加2,避免后期打包样式不同,要放在import App from './App';之前


      import App from './App'

      import router from './router'

      Vue.use(ElementUI)  //新添加3

      Vue.config.productionTip = false

1.5:main.js

import Vue from 'vue'

import App from './App.vue'

import router from './router'

import './plugins/element.js'

// 导入字体图标

import './assets/fonts/iconfont.css'

// 导入全局样式表

import './assets/css/global.css'

import axios from 'axios'

// 配置请求的跟路径

axios.defaults.baseURL = 'http://127.0.0.1:8888/api/private/v1/'

Vue.prototype.$http = axios

Vue.config.productionTip = false

new Vue({

  router,

  render: h => h(App)

}).$mount('#app')

2:router.js

import Vue from 'vue'

import Router from 'vue-router'

import Login from './components/Login.vue'

import Home from './components/Home.vue'

Vue.use(Router)

const router = new Router({

  routes: [

    { path: '/', redirect: '/login' },

    { path: '/login', component: Login },

    { path: '/home', component: Home }

  ]

})

// 挂载路由导航守卫,防止跳过登录界面进入用户界面

// router.beforeEach((to, from, next) => {

//   // to 将要访问的路径

//   // from 代表从哪个路径跳转而来

//   // next 是一个函数,表示放行

//   //     next()  放行    next('/login')  强制跳转

//   if (to.path === '/login') return next()

//   // 获取token

//   const tokenStr = window.sessionStorage.getItem('token')

//   if (!tokenStr) return next('/login')

//   next()

//})

//暴露路由

export default router

3:login.vue


<template>

  <div class="login_container">

    <div class="login_box">

      <!-- 头像区域 -->

      <div class="avatar_box">

        <img src="../assets/logo.png" alt="">

      </div>

      <!-- 登录表单区域 -->

      <el-form ref="loginFormRef" :model="loginForm" :rules="loginFormRules" label-width="0px" class="login_form">

        <!-- 用户名 -->

        <el-form-item prop="username">

          <el-input v-model="loginForm.username" prefix-icon="iconfont icon-user"></el-input>

        </el-form-item>

        <!-- 密码 -->

        <el-form-item prop="password">

          <el-input v-model="loginForm.password" prefix-icon="iconfont icon-3702mima" type="password"></el-input>

        </el-form-item>

        <!-- 按钮区域 -->

        <el-form-item class="btns">

          <el-button type="primary" @click="login">登录</el-button>

          <el-button type="info" @click="resetLoginForm">重置</el-button>

        </el-form-item>

      </el-form>

    </div>

  </div>

</template>

<script>

export default {

  data() {

    return {

      // 这是登录表单的数据绑定对象

      loginForm: {

        username: 'admin',

        password: '123456'

      },

      // 这是表单的验证规则对象

      loginFormRules: {

        // 验证用户名是否合法

        username: [

          { required: true, message: '请输入登录名称', trigger: 'blur' },

          { min: 3, max: 10, message: '长度在 3 到 10 个字符', trigger: 'blur' }

        ],

        // 验证密码是否合法

        password: [

          { required: true, message: '请输入登录密码', trigger: 'blur' },

          { min: 6, max: 15, message: '长度在 6 到 15 个字符', trigger: 'blur' }

        ]

      }

    }

  },

  methods: {

    // 点击重置按钮,重置登录表单

    resetLoginForm() {

      // console.log(this);

      this.$refs.loginFormRef.resetFields()

    },

    login() {

      this.$refs.loginFormRef.validate(async valid => {

        if (!valid) return

        const { data: res } = await this.$http.post('login', this.loginForm)

        if (res.meta.status !== 200) return this.$message.error('登录失败!')

        this.$message.success('登录成功')

        // 1. 将登录成功之后的 token,保存到客户端的 sessionStorage 中

        //   1.1 项目中出了登录之外的其他API接口,必须在登录之后才能访问

        //   1.2 token 只应在当前网站打开期间生效,所以将 token 保存在 sessionStorage 中

        window.sessionStorage.setItem('token', res.data.token)

        // 2. 通过编程式导航跳转到后台主页,路由地址是 /home

        this.$router.push('/home')

      })

    }

  }

}

</script>

<style lang="less" scoped>

.login_container {

  background-color: #2b4b6b;

  height: 100%;

}

.login_box {

  width: 450px;

  height: 300px;

  background-color: #fff;

  border-radius: 3px;

  position: absolute;

  left: 50%;

  top: 50%;

  transform: translate(-50%, -50%);

  .avatar_box {

    height: 130px;

    width: 130px;

    border: 1px solid #eee;

    border-radius: 50%;

    padding: 10px;

    box-shadow: 0 0 10px #ddd;

    position: absolute;

    left: 50%;

    transform: translate(-50%, -50%);

    background-color: #fff;

    img {

      width: 100%;

      height: 100%;

      border-radius: 50%;

      background-color: #eee;

    }

  }

}

.login_form {

  position: absolute;

  bottom: 0;

  width: 100%;

  padding: 0 20px;

  box-sizing: border-box;

}

.btns {

  display: flex;

  justify-content: flex-end;

}

</style>

4:app.vue

<template>

  <div id="app">

    <!-- 路由占位符 -->

    <router-view></router-view>

  </div>

</template>

<script>

export default {

  name: 'app'

}

</script>

<style>

</style>

2. 后台交互(axios/qs/vue-axios)

  3.1 axios

      axios是vue2提倡使用的轻量版的ajax。它是基于promise的HTTP库。它会从浏览器中创建XMLHttpRequests,与Vue配合使用非常好。


      1.题外话:

      vue.js有著名的全家桶系列:vue-router,vuex, vue-resource,再加上构建工具vue-cli,就是一个完整的vue项目的核心构成。

      其中vue-resource是Vue.js的一款插件,它可以通过XMLHttpRequest或JSONP发起请求并处理响应,但在vue更新到2.0之后,

      作者就宣告不再对vue-resource更新,而是推荐的axios

    1.安装

      npm install axios -S

      npm install qs -S 

      npm install vue-axios -S 



原文链接:https://blog.csdn.net/qq_44224377/article/details/118227186

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容