Vue项目实战----电商后台管理系统(第一天)

1

注:开始前把element-ui中ESLint检查关闭,不然报错很多

一、实现登录功能

A.登录状态保持 如果服务器和客户端同源,建议可以使用cookie或者session来保持登录状态 如果客户端和服务器跨域了,建议使用token进行维持登录状态。

B.登录逻辑: 在登录页面输入账号和密码进行登录,将数据发送给服务器 服务器返回登录的结果,登录成功则返回数据中带有token 客户端得到token并进行保存,后续的请求都需要将此token发送给服务器,服务器会验证token以保证用户身份。

C.添加新分支login,在login分支中开发当前项目vue_shop: 打开vue_shop终端,使用git status确定当前项目状态。 确定当前工作目录是干净的之后,创建一个分支进行开发,开发完毕之后将其合并到master git checkout -b login 然后查看新创建的分支:git branch 确定我们正在使用login分支进行开发

然后执行vue ui命令打开ui界面,然后运行serve,运行app查看当前项目效果

Vue项目实战----电商后台管理系统(第一天)_第1张图片

 发现现在是一个默认页面,我们需要进行更改,打开项目的src目录,点击main.js文件(入口文件)

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import './plugins/element.js'

Vue.config.productionTip = false

new Vue({
  router,
  render: h => h(App)
}).$mount('#app')

再打开App.vue(根组件),将根组件的内容进行操作梳理(template中留下根节点,script中留下默认导出,去掉组件,style中去掉所有样式)





再打开router.js(路由),将routes数组中的路由规则清除,然后将views删除,将components中的helloworld.vue删除

import Vue from 'vue'
import Router from 'vue-router'

Vue.use(Router)

export default new Router({
  routes: [
    
  ]
})

在components文件夹中新建Login.vue组件,添加template,script,style标签,style标签中的scoped可以防止组件之间的样式冲突,没有scoped则样式是全局的





在router.js中导入组件并设置规则

在App.vue中添加路由占位符

const router = new Router({
  routes: [
    { path: '/', redirect: '/login' },
    { path: '/login', component: Login }
  ]
})

当我们给Login.vue中的内容添加样式的时候,会报错“缺少less-loader”,需要配置less加载器(开发依赖),安装less(开发依赖)

注意:不要安装过新的依赖,报错请看https://zhuanlan.zhihu.com/p/390877574

Vue项目实战----电商后台管理系统(第一天)_第2张图片

 需要安装less和less-loader依赖

然后需要添加公共样式,在assets文件夹下面添加css文件夹,创建global.css文件,添加全局样式

/* 全局样式表 */
html,body,#app{
    width: 100%;
    height: 100%;
    margin: 0;
    padding: 0; 
}

在main.js中导入global.css,使得全局样式生效 import "./assets/css/global.css" 然后Login.vue中的根元素也需要设置撑满全屏(height:100%) 最终Login.vue文件中的代码如下






其中我们有用到以下内容,需要进行进一步处理:

A.添加element-ui的表单组件 在plugins文件夹中打开element.js文件,进行elementui的按需导入

import Vue from 'vue'

import { Button, Form, FormItem, Input, Message } from 'element-ui'

Vue.use(Button)
Vue.use(Form)
Vue.use(FormItem)
Vue.use(Input)
Vue.prototype.$message = Message

B.添加第三方字体(用element-ui中的图标即可) 复制素材中的fonts文件夹到assets中,在入口文件main.js中导入import './assets/fonts/iconfont.css' 然后直接在 接着添加登录盒子

C.添加表单验证的步骤(详细代码如下)

1.给添加属性:rules="rules",rules是一堆验证规则,定义在script中

2.在script中添加rules:export default{ data(){return{......, rules: { name: [ { required: true, message: '请输入活动名称', trigger: 'blur' }, { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' } ], region: [ { required: true, message: '请选择活动区域', trigger: 'change' } ] }......

3.通过的prop属性设置验证规则

4.导入axios以发送ajax请求 打开main.js,import axios from 'axios'; 设置请求的根路径:axios.defaults.baseURL = 'http://127.0.0.1:8888/api/private/v1/'; 挂载axios:Vue.prototype.$http = axios;

import axios from 'axios'
//配置请求根路径
axios.defaults.baseURL = 'http://127.0.0.1:8888/api/private/v1/'

Vue.prototype.$http = axios

5.配置弹窗提示: 在plugins文件夹中打开element.js文件,进行elementui的按需导入 import {Message} from 'element-ui' 进行全局挂载:Vue.prototype.$message = Message; 在login.vue组件中编写弹窗代码:this.$message.error('登录失败')

6.登录成功之后的操作 A.登录成功之后,需要将后台返回的token保存到sessionStorage中 操作完毕之后,需要跳转到/home

代码为:

login() {
      //点击登录的时候先调用validate方法验证表单内容是否有误
      this.$refs.LoginFormRef.validate(async valid => {
        console.log(this.loginFormRules)
        //如果valid参数为true则验证通过
        if (!valid) {
          return
        }

        //发送请求进行登录
        const { data: res } = await this.$http.post('login', this.loginForm)
        //   console.log(res);
        if (res.meta.status !== 200) {
          return this.$message.error('登录失败:' + res.meta.msg) //console.log("登录失败:"+res.meta.msg)
        }

        this.$message.success('登录成功')
        console.log(res)
        //保存token
        window.sessionStorage.setItem('token', res.data.token)
        // 导航至/home
        this.$router.push('/home')
      })
    }

添加一个组件Home.vue,并为之添加规则





添加路由规则

const router = new VueRouter({
    routes: [{
        path: '/',
        redirect: '/login'
    }, {
        path: '/login',
        component: Login
    }, {
        path: '/home',
        component: Home
    }]
})

添加路由守卫(beforeEach) 如果用户没有登录,不能访问/home,如果用户通过url地址直接访问,则强制跳转到登录页面,打开设置路由的j件s文件

//挂载路由导航守卫
router.beforeEach((to, from, next) => {
    //to 将要访问的路径
    //from 代表从那个路径跳转而来
    //next 时一个函数 ,表示放行  next()放行  next('/login')强制跳转到login
    if (to.path === '/login') return next();
    //先获取token
    const tokenStr = window.sessionStorage.getItem('token');
    if (!tokenStr) return next('/login');
    next()
})

实现退出功能 在Home组件中添加一个退出功能按钮,给退出按钮添加点击事件,添加事件处理代码如下

    methods:{
        logout:function() {
            window.sessionStorage.clear()
            this.$router.push('/login')
        }
    }

最后:

将代码提交到码云

新建一个项目终端,输入命令‘git status’查看修改过的与新增的文件内容

将所有文件添加到暂存区:git add .

将所有代码提交到本地仓库:git commit -m "添加登录功能以及/home的基本结构"

查看分支: git branch 发现所有代码都被提交到了login分支

将login分支代码合并到master主分支,先切换到master:git checkout master

在master分支进行代码合并:git merge login 将

本地的master推送到远端的码云:git push

推送本地的子分支到码云,先切换到子分支:git checkout 分支名

然后推送到码云:git push -u origin 远端分支名

附码云地址:https://gitee.com/zhoulililia/vue_shop

你可能感兴趣的:(vue.js,less,前端)