vue+elementUI实现右击指定表格列的单元格显示选择框

一、template代码如下:

1、表格单元格中添加的代码:

html 复制代码
<div v-if="item.label === '铁心级号'" @contextmenu.prevent="openRightMenu($event, item, scope.$index)" style="height: 38px; line-height: 38px;">
								<span style="display: inline-block; width: 100%; height: 100%;">{{scope.row[item.prop] }}</span>
							</div>

2、右键时弹出的选择框代码

html 复制代码
<div class="u-contextmenu" v-show="rightClickObj.visible" :style="{ left: rightClickObj.left + 'px', top: rightClickObj.top + 'px'}">
			<p>选择铁心级号<i class="el-icon-close" style="float: right; cursor: pointer;" @click="rightClickObj.visible = false"></i></p>
			<el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" @change="handleCheckAllChange">全选</el-checkbox>
			<el-checkbox-group v-model="checkList" @change="handleCheckedChange">
				<el-checkbox  v-for="(item, index) in coreLevelNumArr" :key="index" :label="item" ></el-checkbox>
			</el-checkbox-group>
			<div style="float: right;">
				<!-- <el-button type="primary" @click="showLevel">显示</el-button> -->
				<el-button type="primary" @click="hideLevel">隐藏</el-button>
			</div>
		</div>

js代码如下:

javascript 复制代码
// 铁心级号选择时
		handleCheckedChange: function (val) {
			let checkedCount = val.length;
			this.checkAll = checkedCount === this.coreLevelNumArr.length; //全选是否勾选上
			this.isIndeterminate = checkedCount > 0 && checkedCount < this.coreLevelNumArr.length;
		},
		// 铁心级号全选触发的事件
		handleCheckAllChange: function (val) {
			this.checkList = val ? this.coreLevelNumArr : []; // 全选和全不选的赋值
			this.isIndeterminate = false;
		},
		showLevel:function(){
			this.rightClickObj.visible = false;
			this.hideLevelList = this.coreLevelNumArr.filter(x => this.checkList.every(y => y !== x));
		},
		// 隐藏选中级号的行
		hideLevel:function(){
			this.rightClickObj.visible = false;
			this.hideLevelList = this.checkList;
			// 更改表格中的数据
			this.updateTableData.forEach((item) => {
				if(this.hideLevelList.indexOf(item.level_no) > -1){//判断当前行的级号是否在隐藏的级号数组中
					item.isShow = false;
				}else{
					item.isShow = true;
				}
			});
			console.log(this.updateTableData);
		},
		//每一行的回调样式方法
		rowClassName: function ({ row }) {
			if(this.hideLevelList.indexOf(row.level_no) > -1){ 
				return "hideRow"; //如果当前行的级号在隐藏级号数组中将返回隐藏类名
			}else{
				return "";
			}
		},
		/**
		 * 右键铁心级号显示选择菜单
		 * @param {Number} index 表格行下标
		 */
		openRightMenu(event,item,index){
			this.rightClickObj.left = 51;
			this.rightClickObj.top = 870 + (index+1)*40;
			this.rightClickObj.visible = true
		},
相关推荐
风尘小子1 分钟前
node.js系列:process配置
前端·node.js
恋猫de小郭4 分钟前
AndroidX 新增 Security State ,支持可编程的系统安全状态查询
android·前端·flutter
honkun619 分钟前
vue甘特图组件 vxe-gantt 实现拖拽任务自动更新紧前紧后依赖线关联任务的日期
vue.js·vxe-gantt
雪芽蓝域zzs43 分钟前
第20章:ECharts 图表主题切换 + 自定义颜色渐变
vue.js·echars
IT_陈寒1 小时前
Redis大key删除引发的服务雪崩,这次我真记住了
前端·人工智能·后端
IMPYLH1 小时前
HTML 的 <style> 元素
前端·html
paopaokaka_luck1 小时前
考研政治刷题小程序(AI推荐题目、ECharts数据分析、章节练习与专项训练、模拟考试、错题本与收藏夹、学习打卡与目标管理、题库和组卷维护)
前端·javascript·spring boot·spring·数据分析·echarts
刃神太酷啦1 小时前
前端入门第一课:HTML 基础语法 + 常用标签 + 实战全解
服务器·c语言·前端·javascript·css·c++·html
mldong1 小时前
给流程设计器加国际化,我没引 vue-i18n
前端·javascript·vue.js
IMPYLH1 小时前
HTML 的 <strong> 元素
前端·html