ant-design-vue版本:~1.3.8
需求:表格实现跨行合并,并且在合并完的单元格中显示图片
效果图:
源码:
export default {
data() {
return {
pic95: require('@/assets/produit/95.png'),
pic99: require('@/assets/produit/99.png'),
varTable: {
cloumns: [
{
title: '置信度',
dataIndex: 'confidence ',
class: 'confidence',
customRender: (value, row, index) => {
let obj = {
children: '',
attrs: {}
}
if (index === 0) {
obj = {
children: <div class="risk-pic"><img src={this.pic95} /></div>,
attrs: { rowSpan: 4 }
}
}
if (index === 4) {
obj = {
children: <div class="risk-pic"><img src={this.pic99} /></div>,
attrs: { rowSpan: 4 }
}
}
if ([1, 2, 3, 5, 6, 7].indexOf(index) !== -1) {
obj.attrs.colSpan = 0
}
return obj
}
},
{
title: '天数',
dataIndex: 'window_length',
width: '25%',
customRender: (text) => text + '日'
},
{
title: 'VaR(万元)',
dataIndex: 'var',
width: '25%'
},
{
title: 'VaR/净资产',
dataIndex: 'var_rate',
width: '25%',
customRender: (text) => fmtRatio(text, 2)
}
],
data: [
{window_length: 1, var: 151.69, var_rate: 0.01858},
{window_length: 5, var: 298.94, var_rate: 0.03661},
{window_length: 10, var: 416.70, var_rate: 0.05104},
{window_length: 20, var: 576.04, var_rate: 0.07055},
{window_length: 1, var: 370.64, var_rate: 0.045398},
{window_length: 5, var: 463.33, var_rate: 0.056751},
{window_length: 10, var: 632.91, var_rate: 0.077523},
{window_length: 20, var: 1233.95, var_rate: 0.15114}
]
}
}
},
methods:{
// 百分数设置
fmtRatio(val, index, def) {
// index默认值为2
var index = arguments[1] "color: #ff0000">补充知识:ant-design vue table 可选列、自定义列实现
实现ant-design for vue 自定义列实现。点击按钮,弹窗显示所有列的checkbox,选择checkbox,确定即可实现自定义列。先上代码
<script>
/**
* 该组件为实现table可选列。
* 具体操作见下方注释。
* 全部集成原a-table功能,使用方式与原a-table完全相同,扩展增加了可选列功能
* 该组件已注册至全局,使用方式只需将a-table变为zyx-table即可,等等一系列原写法不变,即可增加该功能.
* 采用rander函数模式写,为了实现a-table中slot可动态。
*/
export default {
name: 'Table',
data () {
return {
modalVisible: false, // 弹窗
columns: [], // 表格的列,根据条件来操作该字段
selectList: [], // 已选择的列
temporarySelectData: [], // 暂时选择的列,点击checkbox暂存到该字段,点确定同步到selectList
checkboxList: []// checkbox的list,也做总数据来使用
}
},
mounted () {
/**
* 挂载后,将原columns复制到本页columns,checkboxList
* 将selectList赋值全选状态
*/
this.columns = this.deepClone(this.$attrs.columns)
this.checkboxList = this.deepClone(this.$attrs.columns)
this.selectList = this.columns.map(ele => ele.dataIndex)
},
methods: {
/**
* 打开modal,将checkbox默认值或者是选择值(暂存)重新赋值
*/
handelOpenSelect () {
this.temporarySelectData = this.deepClone(this.selectList)
this.modalVisible = true
},
/**
* 点击确定,将暂存值赋值(temporarySelectData)给已选择的列(selectList)
* 将列(columns)根据已选择的列(selectList)筛选出来
*/
handleOk () {
this.selectList = this.deepClone(this.temporarySelectData)
this.modalVisible = false
this.columns = this.checkboxList.filter(ele => this.selectList.includes(ele.dataIndex))
},
handleCancel () {
this.modalVisible = false
},
handelChange (e) {
this.temporarySelectData = this.deepClone(e)
},
deepClone (target) {
let result
if (typeof target === 'object') {
if (Array.isArray(target)) {
result = []
for (const i in target) {
result.push(this.deepClone(target[i]))
}
} else if (target === null) {
result = null
} else if (target.constructor === RegExp) {
result = target
} else {
result = {}
for (const i in target) {
result[i] = this.deepClone(target[i])
}
}
} else {
result = target
}
return result
}
},
render () {
const props = { ...this.$attrs, ...this.$props, ...{ columns: this.columns } }
const on = { ...this.$listeners }
const slots = Object.keys(this.$slots).map(slot => {
return (
<template slot={slot}>{ this.$slots[slot] }</template>
)
})
const table = (
<a-table props={props} scopedSlots={ this.$scopedSlots } on={on} ref="zyxTable">
{slots}
</a-table>
)
const changeDiv = (
<a-button class="select-columns" size="small" onClick={this.handelOpenSelect}>列</a-button>
)
const checkboxArr = []
for (let i = 0; i < this.checkboxList.length; i++) {
checkboxArr.push(<a-col span={8}><a-checkbox value={this.checkboxList[i].dataIndex}>{this.checkboxList[i].title}</a-checkbox></a-col>)
}
const modal = (
<a-modal
title="设置列"
visible={this.modalVisible}
onOk={this.handleOk}
onCancel={this.handleCancel}>
<a-checkbox-group value={this.temporarySelectData} onChange={this.handelChange}>
<a-row>
{checkboxArr}
</a-row>
</a-checkbox-group>
</a-modal>
)
return (
<div class="zyx-table">
{ table }
{ changeDiv }
{ modal }
</div>
)
}
}
</script>
<style lang="less" scoped>
.zyx-table{
position: relative;
margin-top: 20px;
.select-columns{
position: absolute;
right: 0;
top: -30px;
}
}
.ant-row{
width: 100%;
.ant-col-8{
margin-bottom: 10px;
}
}
.ant-checkbox-group{
width: 100%;
}
</style>
该组件二次封装了a-table,集成原a-table所有方法
使用方法,在全局注册该组件,将原a-table替换为zyx-table即可实现。
将原标签替换为rander函数,是为了实现slot动态传入的效果。
有疑问或者更好的建议,欢迎光临思密达。github传送门
以上这篇antd vue table跨行合并单元格,并且自定义内容实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
暂无“antd vue table跨行合并单元格,并且自定义内容实例”评论...
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新动态
2025年10月30日
2025年10月30日
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]
