基于Vue+Element实现的后台管理系统搭建模板

754 阅读2分钟

在线预览

数据采用 fastmock 模拟数据

目前实现的主要功能:

  1. 简单的登录,登出功能
  2. Header 头部组件
  3. Side 菜单,可伸缩
  4. 内置标签
  5. 简易的表格样式,包括增删改查等基本功能
  6. dialog 的封装
  7. table 的封装
  8. 导航守卫,相关知识可以查看官网学习(Vue中的导航守卫
  9. axios封装(借鉴掘金的一篇文章 (vue中Axios的封装和API接口的管理))
  10. 使用Vue-Video-Player插件进行视频播放
  11. 实现全屏效果

本文主要介绍内置标签的实现:

话不多说先预览下效果

内置标签效果

内置标签主要基于 Vuex 实现状态管理和本地缓存结合实现

首先结合浏览器标签的效果主要实现的功能有

  1. 打开一个页面后判断当前页面是否已经打开 ? 跳转到已打开的标签 : 新增一个标签
  2. 标签可以删除,还应该包含删除所有标签和删除其他标签的功能
  3. 同时显示的标签有数量限制,数量超过后会给予提示
  4. 刷新后,页面及对应标签数据应该保留
  5. 刚进入系统时应该显示首页标签,当所有标签关闭后应该跳转到首页
  6. 标签之间切换时,如果当前标签没有关闭,则应该保留用户在当前标签的操作(使用 Vue 自带的 keep-alive 实现)
  7. 直接进行路由跳转或者router跳转可以打开页面和对应标签

通过监听路由变化实现新增标签具体代码如下

setTabs (route) {
      let newItem = {
        title: route.meta.title,
        path: route.fullPath,
        name: route.name
      };
      // 该页面标签是否已经存在 ? 跳转到该标签 :新增并跳转
      const isExist = this.tabs.some(item => {
        return item.path === route.fullPath;
      });
      if (!isExist) {
        if (this.canAdd) {
          this.$store.commit('addTabs', newItem);
          this.$store.commit('selectTab', newItem);
        } else {
          this.$LZCMessage('你打开的标签太多了,请关闭一些不用的标签后再尝试打开', 'warning');
        }
      } else {
        this.$store.commit('selectTab', newItem);
      }
    }

删除标签具体实现如下

    closeTab (value) {
      this.$store.commit('closeTab', value);
      let len = this.tabs.length;
      if (len) {
        let item = this.tabs[len - 1];
        this.switchTab(item);
        sessionStorage.setItem('currentTab', JSON.stringify(item));
      }
    }

其他具体实现可以参考github 项目源码