一、要实现的效果(纵向固定表头的表格,横向表头数量动态化

二、这是后台返回的数据格式(以企业为数组,每个企业里有个站点数组pointFactors)

三、代码实现步骤

(1)定义纵向固定表头

 1 // 纵向表头数组 tableColumns 2 const tableColumns = ref([ 3   { 4     label: "日(24小时)数据浓度均值", 5     value: "monthMaxDayValue", 6   }, 7   { 8     label: "小时数据平均浓度均值", 9     value: "monthHourValue",10   },11 ]);

 (2)动态生成横向表头(从接口获取数据

 1 //定义横向表头列 columns 2  const columns = ref([]); 3 //定义表格数据 4  const list = ref([]);  5  6  // 先添加第一列 7  columns.value = [ 8       { 9         title: "",10         dataIndex: "timeType",11         width: 190,12        fixed: "left",13      },14   ];15 16 //处理接口返回的数据data,动态拼接表头数组 columns17 data.forEach(item => {18      const obj = {19         id: item.enterpriseId,20         parentId: null,21         title: item.enterpriseName,22         align: "center",23         children: [],24       };25       if (item.pointFactors.length) {26           item.pointFactors.forEach(element => {27               list.push({28                 name: element.pointName,29                 id: element.pointId,30                 monthMaxDayValue: element.monthMaxDayValue,31                 monthHourValue: element.monthHourValue,32               });33               const childObj = {34                 id: element.pointId,35                 parentId: item.enterpriseId,36                 title: element.pointName,37                 width: 130,38                 align: "center",39                 dataIndex: element.pointId,40                 customRender: ({ record }) => {41                   return record[element.pointId]42                     ? record[element.pointId]43                     : "-";44                 },45               };46               obj.children.push(childObj);47           });48      }49      columns.value.push(obj);50 });

(3)循环原始数据,生成组件需要的横向数据

 1 // tableColums  已定义的纵向表头 2 // tableData   已定义的表格数组 3  4  for (const tab of tableColumns.value) { 5      const col: any = Object.create(null); 6  7      list.forEach((item, index) => { 8          col.timeType = tab.label; 9          col[list[index + 0].id] = item[tab.value];10      });11      tableData.value.push(col);12 }

(4)数据带入表格组件中

 <a-table     :columns="columns"     :data-source="tableData"     :pagination="false"     row-key="id"     bordered />