element 表格组件自适应 思路
项目涉及大量表格 很多时候会采用估算和手动调试的方式来设置 column 宽度不太恰当,所以尝试实现自适应。 核心是对数据层进行修改,代码提供参考。
let column = [
{label:"用户id",prop:"userId"},
{label:"用户姓名",prop:"userName"},
{label:"创建日期",prop:"createData"},
]
let data = [
{
userId:1,
userName:"张三",
createData:'2020-05-26 12:10:56'
},
{
userId:2,
userName:"李狗蛋",
createData:'2020-05-26 12:10:56'
}
]
let resolveColumn = _cmptWidth(column,data)
console.log(resolveColumn)
// [
// {label:"用户id",prop:"userId",width:"120px"},
// {label:"用户姓名",prop:"userName",width:"120px"},
// {label:"创建日期",prop:"createData",width:"120px"},
// ]
_cmptWidth(min=30,column,data){
// 字段长度容器
let temp={};
// 根据第一行数据 初始化 字段长度容器
Object.keys(data[0]).forEach(key=>{
temp[key]=[]
})
// 将每一行数据的 字段长度 存入 字段长度容器 中文算做2个字符,英文1个
data.map(i=>{
Object.keys(i).forEach(key=>{
let str = i[key] && i[key].toString();
let cn = str && str.match(/[\u4e00-\u9fa5]/g)&&str.match(/[\u4e00-\u9fa5]/g).length||0
let en = str && str.match(/[A-Za-z0-9]/g)&&str.match(/[A-Za-z0-9]/g).length||0
let len =Math.max( en + cn*2 + ,10) ;
temp[key].push(Math.min(len,min))
})
})
// 返回 添加列宽度属性的 column
return column.map(i=>{
let width = Math.ceil(temp[i.prop].reduce((a,b)=>a+b)/rows.length)
return {
...i,
width:width*12+'px'
}
})
}
点击查看更多内容
1人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦