ant-design-vue, a-table,固定左侧2列,根据日期动态生成右侧表格数据

自定义一个dateData数组,template使用自定义dateData数组做v-for循环,注意 :columns 的 slots title 的值要与自定义dateData的属性dateName做对应,从而可以使用dateData中的数据。

:scroll也要进行动态计算,缺陷是resize时table原本的fixed列会错乱。

 <a-table :scroll="{ x: columns.length * 140  }" :columns="columns" :data-source="tableData" :rowKey="(record) => { return record.id }" :pagination="pagination">  
     <!--  关键句 循环的是dateData" -->
     <template v-for="(item) in dateData">
       <!--  关键句 在设置thObj时做对应,设置slots: { title: this.dateData[i].dateName } -->
       <span :slot="item.dateName" :key="item.id"> 
        {{item.dateName}} 
        <span :class="item.weekday=='周日'? 'txt-red':item.weekday=='周六'? 'txt-red':''">{{item.weekday}}</span>
         </span>
     </template>        
</a-table>

data

dateData: [],
columns: [   
    {
        title: '序号',
        dataIndex: 'id',
        key: 'id',
        width: 80,
        fixed: 'left'
    },         
    {
        title: 'th',
        dataIndex: 'name',
        key: 'name',
        width: 120,
        fixed: 'left'
    }
],
tableData: [
    {   
        id: 1,
        name: 'A'           
    }
],

methods

setMockData() {
    var weekDayArr = ["周日", "周一", "周二", "周三", "周四", "周五", "周六"];

    for(var i = 0;i<30;i++){
        let obj = {
            id: Date.now() + i,
            // 从今天往前的30个日期
            dateName: new Date(new Date().setDate(new Date().getDate()-i)).toLocaleDateString(),
            // 判断某个日期是周几
            weekday: weekDayArr[new Date(new Date().setDate(new Date().getDate()-i)).getDay()],
            data: '00:00-12:00 12:00-24:00',
        }
        this.dateData.push(obj)                
    }
    
},
setColData() {
    for(let i = 0; i < this.dateData.length; i++) {
        let dataColNmae = 'data'+ (i + 1)
        let thObj = {            
            slots: { title: this.dateData[i].dateName }, // 关键句,与dateData关联
            dataIndex: dataColNmae,
            key: dataColNmae,
            width: 140,
            scopedSlots: { customRender: 'data'+ (i+1) } // 关键句,与tableData的data做对应
        }                 

        // th
        this.columns.push(thObj)    

        // td
        for(let j = 0; j < this.tableData.length; j ++) {
            this.tableData[j][dataColNmae] = this.dateData[i].data
        } 
    }  
},
  created() {
      this.setMockData()
      this.setColData()

},

"缺陷是resize时table原本的fixed列会错乱"的解决方案:

1. 如果是弹窗引起的表格fixed变形,解决方案是需要将弹窗的dom层级设置到body下一级

2.如果是resize窗口引起的表格fixed变形,解决方案是将表格设置为固定宽度,让外层包裹的div去横线滚动

两者的关键点都是【不要改变表格这层div的宽度】即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值