当前位置: 首页 > ai >正文

vue原生table表格实现动态添加列,一行添加完换行继续添加。el-select输入框背景颜色根据所选内容不同而改变

效果如下

动态添加列

代码如下


<template><div class="table-container"><button @click="addColumn">添加列</button><div class="scroll-container"><div class="table-grid"><div v-for="(row, rowIndex) in tableRows" :key="rowIndex" class="table-row"><table class="dynamic-table"><tbody><tr><td  :colspan="row.length*6">&nbsp;</td></tr><tr><td colspan="6" v-for="col in row" :key="col.id">{{col.id}}</td></tr><tr><td  v-for="n in row.length*6" :key="n">{{ n%6==0?6:n%6 }}</td></tr><tr  class="custom-row"><td colspan="6"  v-for="col in row" :key="col.id"><el-select style="height: 100px;" v-model="col.select1" placeholder="请选择"  :class="className[col.id]"  @change="handleChange($event,col.id)"><el-optionv-for="item in options":key="item.value":label="item.value":value="item.value"></el-option></el-select></td></tr><tr><td colspan="6" v-for="col in row" :key="col.id"><el-select v-model="col.select2" placeholder="请选择"><el-optionv-for="item in optionsFm":key="item":label="item":value="item"></el-option></el-select></td></tr></tbody></table></div></div></div></div>
</template><script>
export default {data() {return {columns: [],options: [{ value: 'danger', label: '危险操作', bgColor: 'classRed' },{ value: 'warning', label: '警告操作', bgColor: 'classBlue' }],optionsFm: ['FM-1', 'FM-2', 'FM-3','FM-4'],maxColsPerRow: 23,nextId: 1,currentBgColor: '',className:[],}},computed: {tableRows() {const rows = []for (let i = 0; i < this.columns.length; i += this.maxColsPerRow) {const row = this.columns.slice(i, i + this.maxColsPerRow)// 奇数行反转实现蛇形排列// if (Math.floor(i / this.maxColsPerRow) % 2 === 0) {//   row.reverse()// }// rows.push(row)rows.push(this.columns.slice(i, i + this.maxColsPerRow))}return rows.length ? rows : [[]]}},methods: {handleChange(val,id) {const selected = this.options.find(item => item.value === val)this.className[id] = selected ? selected.bgColor : ''},addColumn() {this.columns.push({id: this.nextId++,select1: '',select2: ''})}}
}
</script><style scoped>
.table-container {padding: 20px;height: 100%;
}
.scroll-container {height: calc(100vh - 70px);overflow-y: auto;margin-top: 10px;border: 1px solid #ddd;
}
.table-grid {display: flex;flex-direction: column;gap: 20px;
}
.dynamic-table {border: 1px solid #000;border-collapse: collapse;display: inline-block;
}
.dynamic-table td {border: 1px solid #000;padding: 3px;width: 6px;text-align: center;
}
.dynamic-table select {width: 100%;padding: 5px;
}
.number-cells {display: flex;justify-content: space-around;
}
button {padding: 8px 16px;background: #42b983;color: white;border: none;border-radius: 4px;cursor: pointer;
}
button:hover {background: #3aa876;
}
/deep/.custom-row .el-input__inner{height: 100px;
}/deep/.classRed .el-input__inner{background-color: #FEA0F7;}
/deep/.classBlue .el-input__inner{background-color: #00FFFF;}</style>
http://www.xdnf.cn/news/7755.html

相关文章:

  • BeamDojo: Learning Agile Humanoid Locomotion on Sparse Footholds
  • 如果教材这样讲--单片机IO口Additional Functions和 Alternate Functions的区别
  • 基于Android的XX校园交流APP
  • 工业路由器WiFi6+5G的作用与使用指南,和普通路由器对比
  • Veo 3 可以生成视频,并附带配乐
  • springboot项目读取dll
  • RT_Thread——快速入门
  • 电子电路:怎么理解放大电路中集电极电流Ic漂移?
  • 如何使用Java生成pdf报告
  • 面向恶劣条件的道路交通目标检测----大创自用(当然你也可以在里面学到很多东西)
  • 如何使用AI搭建WordPress网站
  • SAP-ABAP:ABAP异常处理与安全工程的融合 —— 构建防注入、防泄漏、合规审计的防御性编程体系
  • C# Prism框架详解:构建模块化WPF应用程序
  • 轩辕杯Wp
  • 【Java】泛型在 Java 中是怎样实现的?
  • java day14
  • debian系统redis-dump安装
  • Vite + Vue 工程中,为什么需要关注 `postcss.config.ts`?
  • 如何用JAVA手写一个Tomcat
  • c#基础03(运算符)
  • LeetCode 3355.零数组变换 I:差分数组
  • 34、React Server Actions深度解析
  • 07 接口自动化-用例管理框架之pytest单元测试框架
  • CSS:margin的塌陷与合并问题
  • 每日Prompt:实物与手绘涂鸦创意广告
  • MySQL5.7导入MySQL8.0的文件不成功
  • flutter 常用组件详细介绍、屏幕适配方案
  • GPU加速Kubernetes集群助力音视频转码与AI工作负载扩展
  • PostgreSQL使用
  • Canvas进阶篇:鼠标交互动画