首页 > 其他分享 >elementplus中标签页操作

elementplus中标签页操作

时间:2024-04-23 18:15:48浏览次数:17  
标签:tables elementplus 标签 value item tab 操作 path

操作包括关闭所有、关闭其他、向右关闭、向左关闭

页面代码
 <el-tabs
        v-model="activeName"
        type="card"
        class="demo-tabs"
        @tab-remove="tabRemove"
        @tab-change="clickTab"
    >


      <el-tab-pane :closable="true" v-for="t in tab" :key="t.path" :name="t.path">
        <template #label>
          <!--添加鼠标右键打开下拉框,判断当前下拉框类型能否删除-->
          <el-dropdown trigger="contextmenu" ref="oneDown" :id="t.path" @click.right="closeDisabled(t.path)"
                       @visible-change="changeItem($event,t.path)">
            {{ t.name }}
            <el-icon class="el-icon--right">
              <arrow-down/>
            </el-icon>
            <template #dropdown>
              <el-dropdown-menu>
                <el-dropdown-item @click="close('all',t.path)">关闭全部</el-dropdown-item>
                <el-dropdown-item :disabled="other" @click="close('other',t.path)">关闭其他</el-dropdown-item>
                <el-dropdown-item :disabled="right" @click="close('right',t.path)">向右关闭</el-dropdown-item>
                <el-dropdown-item :disabled="left" @click="close('left',t.path)">向左关闭</el-dropdown-item>
              </el-dropdown-menu>
            </template>
          </el-dropdown>
        </template>

      </el-tab-pane>
    </el-tabs>

在标签页中添加删除和获取当前页面路径方法,删除在pinia获取数据,获取当前页面在tab-change会有回调参数获取值

let activeName = ref("")
function clickTab(tab) {
 activeName.value = tab
}

function tabRemove(tabName) {
 tabs.removeTables(tabName)
}

在下拉菜单中判断标签是否可以进行不同类型删除

let other = ref()
let left = ref()
let right = ref()

//删除标签页类型是否能使用判断
function closeDisabled(path) {
 //当前路径的下标
 let index = tab.value.findIndex(item => item.path === path)

 //当数组大于等于2可以删除其他所有的标签页
 other.value = !(tab.value.length >= 2)

 //当前下标在标签页的第一个或者大于第一个
 left.value = !(index >= 1)

 //当前下标不能超过标签页数量
 right.value = !(index + 1 < tab.value.length)
}

保持只有一个下拉菜单,在打开其他的页面将之前的删除掉

//dom属性
let oneDown = ref()

//保持只有一个下拉框
function changeItem(event, path) {
 if (!event) {
   return
 }

 //弹框的过程中将其他的关闭
 let other = oneDown.value.filter(item => item.id !== path)
 other.forEach(item => {
   item.handleClose()
 })
}

pinia中方法

import {defineStore} from "pinia";

//标签页store
export const useTables = defineStore('tables', {
   state: () => {
       return {
           tables: [],     //展示的标签页
           nowTab: ''      //当前指向标签页路径
       }
   },
   actions: {
       //增加标签页
       addTables(tab) {
           //向当前展示标签页推数据
           this.tables.push(tab)
       },

       // 删除标签页(路径始终指向前一个标签页,除非是第一个标签页就会指向第二个)
       removeTables(nowTab) {
           //原始数组下标
           const index = this.tables.findIndex(item => item.path === nowTab)
           //去除需要删除的标签页后
           const indexs = this.tables.filter(tab => tab.path !== nowTab)
           //必须存有一个标签页
           if (indexs.length >= 1) {
               this.tables = indexs
               if (this.tables.length > 0) {
                   //如果删除的标签页在当前,那么下个指向在新数组的当前位置
                   if (index === this.tables.length) {
                       this.nowTab = this.tables[this.tables.length - 1].path
                   } else {
                       //直接进行路径寻找
                       this.nowTab = this.tables[index].path
                   }
               }
           }

       },
       //关闭标签页类型
       close(type, path) {
           //第一次出现下标的地方
           const index = this.tables.findIndex(item => item.path === path)
           //删除所有标签页
           if (type === 'all') {
               this.tables = []
               //删除除当前页外的其他
           } else if (type === 'other') {
               this.tables = this.tables.filter(item => item.path === path)
               //删除右边所有标签页
           } else if (type === 'right') {
               this.tables.splice(index + 1)
               //删除左边所有标签页
           } else if (type === 'left') {
               this.tables.splice(0, index)
           }
       }
   },
   //持久化本地,防止页面刷新丢失
   //pinia-plugin-persistedstate插件
   persist: {
       key: 'tabs',
       storage: sessionStorage,
       paths: ['nowTab', 'tables']
   }
})

全部方法

let tabs = useTables();
//标签页展示
let tab = ref([])

//标签页路径
let activeName = ref("")
//标签页下拉类型
let other = ref()
let left = ref()
let right = ref()

/dom属性
let oneDown = ref()

//监听pinia中标签页和当前标签页路径的变化
watchEffect(() => {
 tab.value = tabs.tables
 activeName.value = tabs.nowTab
})

//当前标签页名称回调,修改标签页路径
function clickTab(tab) {
 activeName.value = tab

}


//删除标签页类型是否能使用判断
function closeDisabled(path) {
 //当前路径的下标
 let index = tab.value.findIndex(item => item.path === path)

 //当数组大于等于2可以删除其他所有的标签页
 other.value = !(tab.value.length >= 2)

 //当前下标在标签页的第一个或者大于第一个
 left.value = !(index >= 1)

 //当前下标不能超过标签页数量
 right.value = !(index + 1 < tab.value.length)
}

//关闭下拉框标签页类型
function close(type, path) {
 tabs.close(type, path)
}

//删除标签页
function tabRemove(tabName) {
 tabs.removeTables(tabName)
}

//保持只有一个下拉框
function changeItem(event, path) {
 if (!event) {
   return
 }

 //弹框的过程中将其他的关闭
 let other = oneDown.value.filter(item => item.id !== path)
 other.forEach(item => {
   item.handleClose()
 })

}

标签:tables,elementplus,标签,value,item,tab,操作,path
From: https://www.cnblogs.com/kangkin/p/18153469

相关文章

  • Meta 向第三方开放 MR 操作系统;黄仁勋:人形机器人成本可能比人们预期要低得多丨 RTE 开
       开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(RealTimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑的个人观点......
  • C++中的原子操作
    一、概述C++11提供了一个原子类型std::atomic<T>,通过这个原子类型管理的内部变量就可以称之为原子变量,我们可以给原子类型指定bool、char、int、long、指针等类型作为模板参数(不支持浮点类型和复合类型)。原子指的是一系列不可被CPU上下文交换的机器指令,这些指令组合在一起......
  • k8s 操作命令-合集List
    k8s操作命令合集List ---------------k8s基本常用的命令-----------------------------------------1、创建资源kubectlcreatedeploymentnginx--image=nginx2、列出资源kubectlgetpods3、描述资源kubectldescribepod<pod-name>4、删除资源......
  • 3568F-麒麟KylinOS国产操作系统演示案例
     ......
  • 3568F-翼辉SylixOS国产操作系统演示案例
     ......
  • 在Linux中,什么是管道操作,以及如何使用它?
    在Linux中,管道操作是一种强大而灵活的机制,用于在多个命令或者进程之间传输数据。它允许一个命令的输出直接作为另一个命令的输入,从而实现数据的连续处理,无需通过中间文件来存储数据。管道的核心思想是提高命令行操作的效率和简洁性。1.管道操作的概念管道实质上是一个进程间通......
  • 【Redis】Redis的操作命令(二)——Redis 字符串(String)
    常见的Redis字符串命令如下:命令说明例子SETkeyvalue设置指定key的值 GETkey获取指定key的值 GETRANGEkeystartend返回key中字符串值的子字符 GETRANGEmykey03 GETSETkeyvalue将给定key的值设为value,并返回key的旧值(oldvalu......
  • 使用FAL操作STM32F103VET6单片机的片内flash和外部norflash(SFUD驱动)
    1.新建一个命名为fal的工程,控制台串口我使用了uart5,对应管脚PC12和PD2工程新建好以后,编译,报错双击改报错信息,跳转到下图这个位置 把RT_WEAK改为rt_weak,后重新编译,下载到单片机中重新正常运行2.双击CubeMXSettings,选择正确的单片机型号,配置norflash使用的SPI......
  • C语言单向链表的增删操作
    //指的是单向链表中的结点有效数据类型,用户可以根据需要进行修改typedefintDataType_t;//构造链表的结点,链表中所有结点的数据类型应该是相同的typedefstructLinkedList{  DataType_tdata;    //结点的数据域  structLinkedList*next;......
  • Java泛型如何对属性操作
    对于多个类型相似的操作,如何实现统一处理,简化操作。例如,现在由多个类定义,类定义中都包含客户编号,但是缺少客户名称。如果采用常规的方式,我对于需要展示客户名称的场景,需要对每个类的每个场景去处理,来根据客户编号获取客户信息,并设置客户名称。但是这种方式对存在很多的冗余代码......