前端后台管理系统梳理

五月的第一篇 ????一、商品后台管理系统1. 打磨功能2. 框架选择 – vue容易上手:react(JSX,学习成本),vue(模板):任何合乎规范的 HTML 都是合法的 Vue 模板。可以在单文件组件里完全控制 CSS,将其作为组件代码的一部分。vue-cli(核心插件)供了各种用途的模板。体积:一个包含了 Vuex + Vue Router 的 Vue 项目 (gzip 之后 3...
摘要由CSDN通过智能技术生成

再梳理一遍
在这里插入图片描述

一、商品后台管理系统

1. 功能

1.1 服务端情况

  • 开启了CORS跨域支持
  • 需要授权的 API ,必须在请求头中使用 Authorization 字段提供token 令牌(axios拦截器)
  • baseUrl,接口地址:http://localhost:8888/api/private/v1/

token令牌在服务端生成,当登录成功时,post请求返回的用户信息里包含了这一元素:
在这里插入图片描述

1.1.1 axios发ajax请求

Axios:通过promise实现对ajax技术的一种封装,ajax只能访问同源的请求。axios并没有install 方法,所以是不能使用vue.use()方法的。为了不在每个文件都引用一次axios,将它改造成vue插件。

  1. npm安装
  2. axios发请求

1)使用

axios.get('/user?ID=12345')
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

2) 改造为vue插件
plugins/http.js

import axios from 'axios'
​
const httpHelper = {}
// 配置Vue插件
httpHelper.install = function fn (Vue) {
  axios.defaults.baseURL = 'http://127.0.0.1:8888/api/private/v1'
  Vue.prototype.$http = axios
}
​
export default httpHelper

main.js里安装插件

 import http from '@/plugins/http.js'
Vue.use(http)
1.1.2 拦截器 – 向服务端发请求需要token
httpAxios.install = function (Vue) {
  const instance = axios.create({
    baseURL: 'http://127.0.0.1:8888/api/private/v1'
  })
​
  instance.interceptors.request.use(function (config) {
    if (config.url.toLowerCase() !== 'login') {
      const token = sessionStorage.getItem('token')
      config.headers.Authorization = token
    }
    return config
  }, function (error) {
    return Promise.reject(error)
  })

  Vue.prototype.$http = instance
}
1.1.3 路由导航守卫 – 权限控制

路由的前置守卫 router.js

router.beforeEach((to, from, next) => {
  console.log(to, from)
  if (to.name === 'login') {
    next()
  } else {
    const token = sessionStorage.getItem('token')
    if (!token) {
      router.push({ 'name': 'login' })
      Message.warning('请先登录')
      return
    }
    next()
  }
})
1.1.4 使用async和await
handleLogin () {
  this.$http.post('login', this.formData)
    .then((res) => {
      const data = res.data
      const {meta: {status, msg}} = data
      if (status === 200) {
        const token = data.data.token
        sessionStorage.setItem('token', token)
        this.$message.success(msg)
      } else {
        this.$message.error(msg)
      }
    })
}
async handleLogin () {
  const res = await this.$http.post('login', this.formData)
  const data = res.data
  const { meta: { status, msg } } = data
  if (status === 200) {
    const token = data.data.token
    sessionStorage.setItem('token', token)
    this.$message.success(msg)
  } else {
    this.$message.error(msg)
  }
}

外层方法使用async关键字(await最近的外层函数要加上async),发请求代码前加 await,省略.then
在这里插入图片描述

1.2 自定义组件

以自定义面包屑组件(子组件)为例,父组件(使用到面包屑的组件)向子组件传值。
子组件

<template>
 <!-- 面包屑 -->
      <el-breadcrumb separator="/">
          <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
          <el-breadcrumb-item>{
  {this.level1}}</el-breadcrumb-item>
          <el-breadcrumb-item>{
  {this.level2}}</el-breadcrumb-item>
      </el-breadcrumb>
</template>
​
<script>
export default {
  name: 'my-bread',
  props: ['level1', 'level2']
}
</script>

  • 23
    点赞
  • 200
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值