elementUI el-tabs 实现动态选项卡页面效果

简介: elementUI el-tabs 实现动态选项卡页面效果


<!-- 左侧导航菜单组件 -->
<el-menu :default-active="$route.path" class="el-menu-vertical" 
@select="menuSelect" :collapse="isCollapse">
  <template v-for="(a, $i) in navList">
    <!-- 有子栏目--->
    <el-submenu :key="$i" :index="a.path" v-if="a.children && a.
children.length">
      <template slot="title">
        <i :class="a.icon" /> <span>{{ a.label }}</span>
      </template>
      <el-menu-item-group>
        <el-menu-item v-for="(subItem, $i) in a.children || []" 
:key="$i" :index="subItem.path"><span
            class="sub-text">{{
              subItem.label
            }}</span></el-menu-item>
      </el-menu-item-group>
    </el-submenu>
    <!-- 没有子栏目-->
    <el-menu-item :key="$i" :index="a.path" v-else>
      <i :class="a.icon" /> <span>{{ a.label }}</span>
    </el-menu-item>
  </template>
</el-menu>
<!-- 选项卡组件 -->
<el-tabs v-if="tabs.length" v-model="curTabPath" type="border-card" 
closable @tab-remove="tab_remove">
  <el-tab-pane v-for="a in tabs" :key="a.path" :label="a.label" :name="a.
path">
    <!-- 这里添加页面组件 -->
    <sy v-if="a.path === 'sy'" />
    <khgl v-if="a.path === 'khgl'" />
    <bjkd v-if="a.path === 'bjkd'" />
    <jh v-if="a.path === 'jh'" />
    <tuihuo v-if="a.path === 'tuihuo'" />
    <kc v-if="a.path === 'kc'" />
    <spxx v-if="a.path === 'spxx'" />
    <rk v-if="a.path === 'rk'" />
    <ck v-if="a.path === 'ck'" />
  </el-tab-pane>
</el-tabs>
//引入内页组件
import sy from "./sy";
import khgl from "./khgl";
import bjkd from "./bjkd";
import jh from "./jh";
import tuihuo from "./th";
import kc from "./kc";
import spxx from "./spxx";
import rk from "./rk";
import ck from "./ck";
...
  components: {
    sy,
    khgl,
    bjkd,
    jh,
    tuihuo,
    kc,
    spxx,
    rk,
    ck,
  }
  ,
...
data() {
    return {
      // 选项卡----------------------------------------
      curTabPath: 'sy',
      tabs: [
        { 
            label: '首页', 
            path: 'sy', 
        },
        ],
      // ----------------------------------------
      navList: [
        {
          icon: "el-icon-s-home",
          label: "首页",
          path: "sy",
        },
        {
          icon: "el-icon-sold-out",
          label: "销售",
          path: "xs",
          children: [
            {
              label: "客户管理",
              path: "khgl",
            },
            {
              label: "报价开单",
              path: "bjkd",
            },
          ],
        },
        {
          icon: "el-icon-sell",
          label: "采购",
          path: "cg",
          children: [
            {
              label: "进货",
              path: "jh",
            },
            {
              label: "退货",
              path: "tuihuo",
            },
          ],
        },
        {
          icon: "el-icon-house",
          label: "仓库",
          path: "changku",
          children: [
            {
              label: "库存",
              path: "kc",
            },
            {
              label: "商品信息",
              path: "spxx",
            },
            {
              label: "入库",
              path: "rk",
            },
            {
              label: "出库",
              path: "ck",
            },
          ],
        },
      ],
      // ----------------------------------------
    };
  },
//方法
 methods: {
    // 选项卡----------------------------------------
    // 添加选项卡
    tab_add(d) {
      let has = this.tabs.find(v => v.path === d.path);//查找返回单个对象
      if (has) { return this.curTabPath = d.path }
      this.tabs.push({
        path: d.path,
        label: d.label,
      });
      this.curTabPath = d.path;
    },
    // 移除选项卡
    tab_remove(path) {
      let r = [];
      let nextTabPath = null;
      this.tabs.forEach((v, i, ar) => {
        if (v.path === path) {
          this.tabs[i + 1] && (nextTabPath = this.tabs[i + 1].path);
        } else {
          r.push(v);
        }
      });
      // 删除当前高亮选项卡
      if (r.length && this.curTabPath === path) {
        // 如果当前高亮选项卡右侧有选项卡A,就高亮显示A;如果右侧没有选项卡,就高亮显示最后一个选项卡
        this.curTabPath = nextTabPath || r[r.length - 1].path;
      }
      // 删除最后一个选项卡
      if (r.length === 0) {
        this.curTabPath = null;
      }
      this.tabs = r;
    },
    //----------------------------------------
    // 点击导航菜单
    menuSelect(index, path) {
      this.curTabPath = index;
      let curTab = this.getMenuObj(index)
      this.tab_add(curTab)
    },
    // 查找点击菜单对象
    getMenuObj(index) {
      let aa = this.navList
      for (let i = 0, len = aa.length; i < len; i++) {
        let a = aa[i];
        if (a.path === index) return a
        let bb = a.children || [];
        for (let j = 0, bb_len = bb.length; j < bb_len; j++) {
          let b = bb[j];
          if (b.path === index) return b
        }
      }
    },
}


相关文章
Element UI之el-tabs的样式修改字体颜色、下划线、选中/未选中
Element UI之el-tabs的样式修改字体颜色、下划线、选中/未选中
4061 0
|
缓存
若依 this.$router.push 同地址不同参,页面不刷新问题
若依 this.$router.push 同地址不同参,页面不刷新问题
1808 0
|
前端开发 API
解决el-table中横向滚动条无法显示的问题
解决el-table中横向滚动条无法显示的问题
4047 0
【el-tree】树形结构拖拽,拖动修改分组
【el-tree】树形结构拖拽,拖动修改分组
1425 1
element-plus 树形控件结合下拉列表
要将Element Plus的Tree控件与下拉列表结合起来,可以使用Element Plus的Select控件和Tree控件的插槽来实现。
941 0
|
前端开发 Go 网络安全
Go语言:xterm.js-websocket Web终端堡垒机
1.前言 因为公司业务需要在自己的私有云服务器上添加添加WebSsh终端,同时提供输入命令审计功能. 从google上可以了解到xterm.js是一个非常出色的web终端库,包括VSCode很多成熟的产品都使用这个前端库.
7539 0
|
JavaScript
如何解决ElementUI中的el-tab-pane组件使用v-show不生效的问题?
如何解决ElementUI中的el-tab-pane组件使用v-show不生效的问题?
1424 3
|
存储 前端开发 Java
Element el-upload 文件上传/图片上传/拖拽上传/附带参数/附带请求头部详解
文目录 1. 前言 2. 基本用法 2.1 前端部分 2.2 后端部分 2.3 获取后端返回信息 3. 外观功能介绍 3.1 拖拽上传 3.2 显示图片 3.3 设置文件列表样式 3.4 显示提示信息 4. 事件功能介绍 4.1 限制上传文件数量 4.2 限制上传文件类型和大小 4.3 移除文件处理 4.4 手动上传 5. 附带参数 6. 附带请求头部 7. 小结
8234 0
|
JavaScript UED
Vue + ElementUI 实现动态添加和删除表单项的多层嵌套表单
【10月更文挑战第5天】本示例展示了如何在 Vue.js 中使用 Element UI 组件实现动态添加和删除嵌套表单项。该表单包含设备信息、设备部位及其对应的任务列表,支持用户动态添加设备部位和任务,并提供相应的表单验证规则。
1979 0
Vue + ElementUI 实现动态添加和删除表单项的多层嵌套表单
|
前端开发
element菜单组件样式修改NavMenu导航菜单
本文介绍了如何修改Element UI的NavMenu导航菜单组件的样式,包括激活菜单项的颜色、菜单项hover颜色、父级菜单hover颜色以及菜单行高。提供了相应的CSS代码示例,并展示了如何将这些样式应用到实际的NavMenu组件中。
1636 3
element菜单组件样式修改NavMenu导航菜单

热门文章

最新文章