<template>
  <div class="tabs">
    <el-tag
      v-for="(tag, index) in tags"
      :key="tag.name"
      :closable="tag.name !== 'home'"
      :effect="$route.name === tag.name ? 'dark' : 'plain'"
      @click="changeMenu(tag)"
      @close="handleClose(tag, index)"
      size="small"
    >
      {{ tag.label }}
    </el-tag>
  </div>
</template>

<script>
// import {mapState,mapMutations} from 'vuex'
export default {
  name: "CommonTag",
  data() {
    return {};
  },
  props: {
    tags: Array
  },
  computed: {},
  methods: {
    changeMenu(item) {
      this.$router.push({ name: item.name });
    },
    handleClose(tag, index) {
      console.log(tag);
    //   console.log(index);
      // eslint-disable-next-line
     
      this.$emit('deletetag',index)
    },
  },
};
</script>
<style lang="less" scoped>
.tabs {
  padding: 20px;
  .el-tag {
    margin-right: 15px;
    cursor: pointer;
  }
}
</style>

tags变量示例： name指的是router中定义路由的name， label是显示的文字
点击tag可以根据name跳转到指定的路由 tags: 
[ 
    { name: "HelloWorld", label:"测试" }, 
    { name:"echart", label:"测试2" }, 
    { name: "aside_Test", label:"测试21" }, 
],
注意在调用删除按钮的时候，由于vue子组件不能直接改变父组件的值，
因此我们对应emit的方法（deleteTag）在我们的父组件的method中需要进行method方法的定义
实例如下
deleteTag(index){
      this.tags.splice(index,1)
      console.log(index)
    }

调用示例如下
<commontag :tags="tags" @deletetag="deleteTag"></commontag>