欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > vue原生table表格实现动态添加列,一行添加完换行继续添加。el-select输入框背景颜色根据所选内容不同而改变

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

2025/10/25 10:11:03 来源:https://blog.csdn.net/Cabriella_/article/details/148117770  浏览:    关键词: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>

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词