|
|
@@ -1,59 +1,3 @@
|
|
|
-
|
|
|
-class AutoTable{
|
|
|
- constructor(){
|
|
|
- this.timerHandle = null; //计时器手柄
|
|
|
- }
|
|
|
- // 开始重新计算表格宽度
|
|
|
- start(el, binding){
|
|
|
- // 如果值为false, 则不进行计算处理
|
|
|
- if(!binding.value.table) return;
|
|
|
- const headerDOM = el.querySelector('.el-table__header-wrapper'), // 头部DOM
|
|
|
- bodyDOM = el.querySelector('.el-table__body-wrapper'); // 内容DOM
|
|
|
- // 先清除旧计时器
|
|
|
- // 开始计时
|
|
|
- this.timerHandle = setInterval(() => {
|
|
|
- const tds = bodyDOM.querySelectorAll('table tbody tr'), // 获取内容行数
|
|
|
- ths = headerDOM.querySelectorAll('table thead th .cell'), // 获取头部列元素
|
|
|
- emptyDOM = el.querySelector('.el-table__empty-text'); // 获取空DOM节点
|
|
|
- // 如果满足条件,结束计时器
|
|
|
- if(null != emptyDOM || ths.length>0) {
|
|
|
- clearInterval(this.timerHandle);
|
|
|
- }
|
|
|
- if(tds.length == 0 && ths.length == 0) return;
|
|
|
-
|
|
|
- // 定义变量 存储每列的宽度数据
|
|
|
- const widths = [];
|
|
|
- // 获取标题中的单元格宽度
|
|
|
- ths.forEach((item, i) => widths[i] = [item.offsetWidth+20]);
|
|
|
-
|
|
|
- // const realWidth = widths.reduce((total, value) => total + value, 0) + (widths.length * 10);
|
|
|
- // 修改表格宽度
|
|
|
- // if(realWidth>0) el.style.width = realWidth + 'px';
|
|
|
- // 获取colgroup
|
|
|
- const headerColGroup = headerDOM.querySelectorAll('colgroup col'),
|
|
|
- bodyColGroup = bodyDOM.querySelectorAll('colgroup col');
|
|
|
- // 修改每列宽度
|
|
|
- widths.forEach((val, i) => {
|
|
|
- //排除序号列
|
|
|
- if (i == 0) {
|
|
|
- headerColGroup[i].style.width = val + 'px';
|
|
|
- bodyColGroup[i].style.width = val + 'px';
|
|
|
- } else {
|
|
|
- headerColGroup[i].style.width = (binding.value.layout[i-1].width === 0 ? val < 150 ? 150 : val : binding.value.layout[i-1].width) + 'px';
|
|
|
- bodyColGroup[i].style.width = (binding.value.layout[i-1].width === 0 ? val < 150 ? 150 : val : binding.value.layout[i-1].width) + 'px';
|
|
|
-
|
|
|
- headerColGroup[i].setAttribute('width',binding.value.layout[i-1].width === 0 ? val < 150 ? 150 : val : binding.value.layout[i-1].width)
|
|
|
- bodyColGroup[i].setAttribute('width',binding.value.layout[i-1].width === 0 ? val < 150 ? 150 : val : binding.value.layout[i-1].width)
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- });
|
|
|
- binding.value.table.doLayout()
|
|
|
- clearInterval(this.timerHandle);
|
|
|
- });
|
|
|
- }
|
|
|
-}
|
|
|
-// binding.value.layout[i-1].width === 0 ? val < 150 ? 150 : val : binding.value.layout[i-1].width
|
|
|
export default {
|
|
|
install (Vue) {
|
|
|
/* table懒加载 */
|
|
|
@@ -73,9 +17,7 @@ class AutoTable{
|
|
|
/* 解绑 */
|
|
|
el.tableWarp.removeEventListener('scroll',el.handleFun)
|
|
|
}
|
|
|
- }),
|
|
|
- Vue.directive('autoColWidth',{
|
|
|
- componentUpdated: (el, binding) => new AutoTable().start(el, binding)
|
|
|
})
|
|
|
+
|
|
|
}
|
|
|
}
|