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

vue页面实现table动态拆分列功能

效果如下

拆分table列

代码如下


<template><div class="table-container"><div class="scroll-container"><table class="dynamic-table"> <tbody><tr><td rowspan="2" style="width: 200px;">时间段</td><td rowspan="2" style="width: 150px;">时间</td><td colspan="6">FM-1 <el-button size="mini" type="primary" plain @click="inputColspan('FM-1')">拆分列</el-button></td><td colspan="6">FM-3 <el-button size="mini" type="primary" plain @click="inputColspan('FM-3')">拆分列</el-button></td><td colspan="6">FM-2 <el-button size="mini" type="primary" plain @click="inputColspan('FM-2')">拆分列</el-button></td><td colspan="6">FM-4 <el-button size="mini" type="primary" plain @click="inputColspan('FM-4')">拆分列</el-button></td></tr><tr><td >1xh</td><td >2xh</td><td >3xh</td><td >4xh</td><td >5xh</td><td >6xh</td><td >1xh</td><td >2xh</td><td >3xh</td><td >4xh</td><td >5xh</td><td >6xh</td><td >1xh</td><td >2xh</td><td >3xh</td><td >4xh</td><td >5xh</td><td >6xh</td><td >1xh</td><td >2xh</td><td >3xh</td><td >4xh</td><td >5xh</td><td >6xh</td></tr><tr><td rowspan="4">8:00-10:00</td><td rowspan="3">2H</td><td :colspan="col.colspan" v-for="col in columns" :key="col.id"><el-select style="width: 100%;text-align: center;" v-model="col.selectValue1" placeholder="请选择"><el-optionv-for="item in options":key="item":label="item":value="item"></el-option></el-select></td></tr><tr><td :colspan="col.colspan" v-for="col in columns" :key="col.id"><el-select style="width: 100%;text-align: center;" v-model="col.selectValue2" placeholder="请选择"><el-optionv-for="item in options":key="item":label="item":value="item"></el-option></el-select></td></tr><tr><td :colspan="col.colspan" v-for="col in columns" :key="col.id"><el-select style="width: 100%;text-align: center;" v-model="col.selectValue3" placeholder="请选择"><el-optionv-for="item in options":key="item":label="item":value="item"></el-option></el-select></td></tr><tr><td >数量</td><td :colspan="col.colspan" v-for="col in columns" :key="col.id"><el-select style="width: 100%;text-align: center;" v-model="col.selectValue4" placeholder="请选择"><el-optionv-for="item in options":key="item":label="item":value="item"></el-option></el-select></td></tr></tbody></table></div></div></template><script>export default {data() {return {columns: [{ id: 1, selectValue1: '',selectValue2: '', selectValue3: '', selectValue4: '',colspan:6 ,heatNum:'FM-1'},{ id: 2, selectValue1: '',selectValue2:  '', selectValue3: '', selectValue4: '',colspan:3,heatNum:'FM-3'},{ id: 3, selectValue1: '', selectValue2: '', selectValue3: '', selectValue4: '',colspan:3,heatNum:'FM-3' },{ id: 4, selectValue1: '',selectValue2:  '' , selectValue3: '', selectValue4: '',colspan:6 ,heatNum:'FM-2'},{ id: 5, selectValue1: '',selectValue2:  '' , selectValue3: '', selectValue4: '',colspan:6,heatNum:'FM-4'}],options: ['选项1', '选项2','选项3', '选项4','选项5'],}},methods: {inputColspan(heatNum) {this.$prompt('请输入合并列数', '提示', {confirmButtonText: '确定',cancelButtonText: '取消',}).then(({ value }) => {this.addColumn(value,heatNum);}).catch(() => {this.$message({type: 'info',message: '取消输入'});       });},addColumn(colspan,heatNum) {var index=0;var id=this.columns.length;var selectColumn=[];for(var i=0;i<this.columns.length;i++){if(this.columns[i].heatNum==heatNum){index=i;selectColumn.push(this.columns[i]);}}var cols=colspan.split(',');var sumColspan=0;for(var i=0;i<cols.length;i++){sumColspan+=parseInt(cols[i]);}if(sumColspan!=6){this.$message({message: '拆分列格式错误',type: 'warning'});}else{var addCount=cols.length-selectColumn.length;console.log(cols);for(var j=0;j<selectColumn.length;j++){selectColumn[j].colspan=cols[j];}for(var h=0;h<addCount;h++){this.columns.splice(index+h+1,0,{ id: id+h, selectValue1: '', selectValue2: '' , selectValue3: '', selectValue4: '',colspan:cols[selectColumn.length+h] ,heatNum:heatNum})}}}}}</script><style scoped>.scroll-container {height: calc(100vh - 70px);overflow-y: auto;margin-top: 10px;border: 1px solid #ddd;
}.table-container {padding: 20px;height: 100%;}.dynamic-table {border: 1px solid #000;border-collapse: collapse;display: inline-block;
}
.dynamic-table td {border: 1px solid #000;padding: 3px;width: 100px;text-align: center;
}
/deep/ .el-input__inner {
text-align: center;
}</style>
http://www.xdnf.cn/news/8003.html

相关文章:

  • 江科大TIM定时器hal库实现
  • 自定义属性面板开发指南:公开属性声明、监听回调与基础类型配置
  • Linux:缓冲区
  • BigFoot (DBM) Deadly Boss Mods
  • DL00988-稀疏增强数据transformer船舶AIS轨迹预测含完整数据集
  • 腾讯文档怎么设置多列筛选条件
  • 固定翼无人机抛投技术分析!
  • 从零基础到最佳实践:Vue.js 系列(5/10):《状态管理》
  • 11-帮助中心
  • cmd如何从C盘默认路径切换到D盘某指定目录
  • 前端之vue3创建基本工程,基本登录、注册等功能的完整过程
  • 【IC验证】systemverilog_包
  • 自由开发者计划 001:创建一个用于查看 Jupyter Notebook 的谷歌浏览器插件 Jupyter Peek
  • 常见的LLM
  • 从零基础到最佳实践:Vue.js 系列(2/10):《模板语法与数据绑定》
  • 对抗学习(AL),生成对抗网络(GAN),强化学习,RLHF
  • 【差异分析】t-test
  • React中 lazy与 Suspense懒加载的组件
  • 26、AI 预测性维护 (燃气轮机轴承) - /安全与维护组件/ai-predictive-maintenance-turbine
  • 鸿蒙电脑系统和统信UOS都是自主可控的系统吗
  • 从零开始:Python语言基础之条件语句(if-elif-else)
  • Java虚拟机栈
  • 社会工程与信息收集
  • 左手腾讯CodeBuddy 、华为通义灵码,右手微软Copilot,旁边还有个Cursor,程序员幸福指数越来越高了
  • Human Dil-HDL,使用方法,红色荧光标记人源高密度脂蛋白
  • 循环队列分析及应用
  • 在 Qt 中实现动态切换主题(明亮和暗黑)
  • Gartner研究报告《Generative AI 赋能Digital Commerce的三种路径》学习心得
  • 笑林广记读书笔记三
  • 下一代电子电气架构(EEA)的关键技术