Vue|电商后台管理系统(主页布局开发篇)

1,292 阅读2分钟

前言

  1. 实现基本的主页布局
  2. 美化header区域
  3. 实现左侧导航菜单的基本结构
  4. 通过接口获取菜单数据
  5. 获取左侧菜单内容
  6. 通过双层for循环渲染左侧菜单
  7. 对左侧菜单栏设置字体颜色并添加分类图标
  8. 解决每次只能打开一个菜单项和边框问题
  9. 实现侧边栏的折叠与展开
  10. 实现首页路由的重定向功能

整体布局

image

导航栏+侧栏+主体区域

实现基本的主页布局

使用 Element-UI 布局

美化header区域

实现左侧导航菜单的基本结构

通过接口获取菜单数据

相当于一个预处理过程

需要授权的 API ,必须在请求头中使用 Authorization 字段提供 token 令牌

通过 axios 请求拦截器添加 token,保证拥有获取数据的权限。

// 配置请求的根路径
axios.defaults.baseURL = 'https://www.liulongbin.top:8888/api/private/v1/'
axios.interceptors.request.use(config => {
  console.log(config)
  config.headers.Authorization = window.sessionStorage.getItem('token')
  // 固定写法return
  return config
})

因为测试的是登录 Authorization 所以返回null 如果是登录之后,调用其他接口就会有一个token值了

获取左侧菜单内容

    // 获取所有菜单
    async getMenuList () {
      const { data: res } = await this.$http.get('menus')
      if(res.meta.status !==200) return this.$message.error(res.meta.msg)
      this.menulist = res.data
      console.log(res)
    }

通过双层for循环渲染左侧菜单

         <!-- 一级菜单 -->
          <el-submenu :index="item.id+''" v-for="item in menulist" :key="item.id">
              <!-- 一级菜单的模板区域 -->
            <template #title>
              <!-- 图标 -->
              <i class="el-icon-location"></i>
              <!-- 文本 -->
              <span>{{item.authName}}</span>
            </template>

            <!-- 二级菜单 -->
            <el-menu-item index="subItem.id+''" v-for="subItem in item.children" :key="subItem.id" >
              <template #title>
              <!-- 图标 -->
              <i class="el-icon-location"></i>
              <!-- 文本 -->
              <span>{{subItem.authName}}</span>
            </template>
            </el-menu-item>
            </el-submenu>

对左侧菜单栏设置字体颜色并添加分类图标

.iconfont {
  margin-right: 10px;
}
              <!-- 图标 -->
              <i :class="iconsobj[item.id]"></i>
      // 菜单的图标
      iconsobj: {
        125: 'el-icon-user',
        103: 'el-icon-setting',
        101: 'el-icon-goods',
        102: 'el-icon-s-order',
        145: 'el-icon-s-marketing'
      }

解决每次只能打开一个菜单项和边框问题

        :uniqueOpened="true"
/* 解决边框对齐问题 */
.el-menu-vertical-demo {
  border-right: none;
}

实现侧边栏的折叠与展开

添加点击事件

        <div class="toggle-button" @click="toggleCollapse" >|||</div>

为事件设置data

      // 是否折叠
      isCollapse: false

为事件设置methods

    // 点击按钮切换折叠菜单
    toggleCollapse () {
      this.isCollapse = !this.isCollapse

在el-menu中绑定属性

          :collapse="isCollapse"

关闭折叠的动画

          :collapse-transition="false"

实现首页路由的重定向功能

在el-menu开启router功能

          router

二级菜单设置

            <el-menu-item :index="'/'+subItem.path" v-for="subItem in item.children" :key="subItem.id" >