• Vue+element 首页业务实现


    接着上篇登录后 登录表单数据发送给服务器、验证成功后返回token口令、储存到浏览器会话窗口。方便登录过后的一些请求发送。

    1. // 统一封装的 axios
    2. // 配置axios
    3. import axios from 'axios'
    4. // 请求的根路径
    5. axios.defaults.baseURL = 'http://127.0.0.1:8888/api/private/v1/'
    6. // 请求拦截 添加 herders.Authorization 身份字段 并且展示进度条
    7. axios.interceptors.request.use(config =>{
    8. config.headers.Authorization = window.sessionStorage.getItem('token')
    9. // 必须在最后 return config
    10. NProgress.start()
    11. return config
    12. })
    13. // 响应拦截 中 展示进度条
    14. axios.interceptors.response.use(config =>{
    15. // 必须在最后 return config
    16. NProgress.done()
    17. return config
    18. })

    之后页面会通过路由跳转到首页

    首页布局采用 element-ui的Container 布局容器

     Header:

    用来渲染标题  以及右侧的退出按钮

    1. <el-header>
    2. <div>
    3. <i class="el-icon-s-promotion">i>
    4. 电商后台管理系统
    5. div>
    6. <el-button type="danger" round @click="logout">退出el-button>
    7. el-header>
    8. <script>
    9. logout () {
    10. // 退出登录 清空token 跳转到登录页
    11. window.sessionStorage.clear()
    12. this.$router.push('/login')
    13. }
    14. script>

     Aside

    侧边导航:

    页面进入到home时 发送请求 获得 导航列表数据  

    1. created() {
    2. // 页面刚创建时 获取 左侧导航数据
    3. this.getMenuList()
    4. },
    5. async getMenuList(){
    6. const {data:res} = await this.$http.get('menus')
    7. if (res.meta.status !== 200) return this.$Msg.error(res.meta.msg)
    8. this.MenuData = res.data
    9. },

    使用 el-submenu 一级菜单  el-menu-item 二级菜单  渲染组件完成 

    再使用多重 v-for 渲染数据

    组件的一些属性 可以在 element-ui 官网直接查询

    如collapse 操作边栏 展示与收缩  通过 点击toggle 切换布尔值 影响 最上面标签的三元表达式

        toggle(){

          // 切换侧导航收起和展开

          this.isCollapse = !this.isCollapse

        },

    通过 defalut-active 默认显示高亮

    点击哪一个二级菜单就把它储存到  浏览器储存当中

        currPath(path){

          // 存储高亮的二级导航

          window.sessionStorage.setItem('currPath',path)

          this.activePath = window.sessionStorage.getItem('currPath')

        }

     

    1. <el-aside :width="isCollapse ? '64px' : '200px'">
    2. <div class="toggle" @click="toggle">
    3. <i class="el-icon-s-unfold">i>
    4. div>
    5. <el-menu
    6. background-color="#303133"
    7. text-color="#fff"
    8. active-text-color="#ffd04b"
    9. :collapse="isCollapse"
    10. :default-active="activePath"
    11. :router="true"
    12. :collapse-transition="false"
    13. :unique-opened="false">
    14. <el-submenu :index="m.id + ''" v-for="m in MenuData" :key="m.id">
    15. <template slot="title">
    16. <i :class="iconList[m.id]">i>
    17. <span>{{m.authName}}span>
    18. template>
    19. <el-menu-item :index="'/'+mc.path"
    20. @click="currPath('/'+mc.path)"
    21. v-for="mc in m.children"
    22. :key="mc.id">
    23. <template slot="title">
    24. <i :class="iconList[mc.id]">i>
    25. <span>{{mc.authName}}span>
    26. template>
    27. el-menu-item>
    28. el-submenu>
    29. el-menu>
    30. el-aside>

    main

    只放置一个 通过路由配置来 更改显示内容

    一进入页面先登录 登录完成后 进入首页欢迎页

     

    欢迎页 以及其他组件 都在 home的 children当中 

    1. const routes = [
    2. {
    3. path: '/',
    4. redirect: '/login'
    5. },
    6. {
    7. path: '/login',
    8. component: Login
    9. },
    10. {
    11. path: '/home',
    12. component: Home,
    13. redirect: '/welcome',
    14. children:[
    15. {
    16. path:'/welcome',
    17. component:Welcome
    18. },
    19. {
    20. path:'/users',
    21. component:Users
    22. },
    23. {
    24. path:'/rights',
    25. component:RightsC
    26. }.......

  • 相关阅读:
    基于labview滑动轴承压力测量软件搭建
    2023年最新一面二面通关王炸java八股文面试题--持续更新
    外包干了2个月,技术倒退2年。。。
    面试后的反思与总结:不断进步的关键
    Mysql忽略大小写问题
    【通信】Matlab实现多同步压缩变换
    GBase 8s ALTER FRAGMENT 语句 MODIFY子句(一)
    计算机毕设之基于python+echarts+mysql的图书馆可视化管理系统(文档+代码+部署教程)
    【JavaScript面试】网页轮播图的制作
    Elasticsearch灾备同步方案功能验证(三)
  • 原文地址:https://blog.csdn.net/benlalagang/article/details/126484501