VTable导出当前页和导出所有页数据

表格导出的是当前显示的表格,如果是分页表格想导出全部的数据话。有两种方法可以实现

  1. 表格先显示的全量数据,导出后再恢复当前页。
  2. 新建一个隐藏的表格实例显示全量数据导出这个隐藏的表格实例。
    在这里插入图片描述
    下面是全量代码:
<template>
    <div>
        <div ref="listTableExport" id = "CONTAINER_ID" style="width: 1580px; height: 800px"></div>
        <div id = "CONTAINER_HiDE" style="display : none"></div>
        <div style="width: 1580px; height: 50px" class="right-align">
            <button id="first-buttom" > 首页</button>
            <button id="prev-buttom" > 上一页</button>
            <span id="page-namber">1</span>
            <input id="cpnr" type="hidden">
            <span>/</span>
            <span id="total-page">共 页</span>
            <input id="mpnr" type="hidden">
            <button id="next-buttom">下一页</button>
            <button id="tail-buttom" > 尾页</button>
            <span id="total-num">共 条</span>
            <input  id="spn" type="number" >
            <button id="skip-buttom"> 跳转</button>
        </div>
    </div>
  </template>
  
  <script setup>
   import * as VTable from '@visactor/vtable';
// 使用时需要引入插件包@visactor/vtable-export
import {
  downloadCsv,
  exportVTableToCsv,
  downloadExcel,
  exportVTableToExcel,
} from "@visactor/vtable-export";
// umd引入时导出工具会挂载到VTable.export

let tableInstance;
let tableInstance_hide;
fetch('https://lf9-dp-fe-cms-tos.byteorg.com/obj/bit-cloud/VTable/North_American_Superstore_Pivot_data.json')
  .then(res => res.json())
  .then(data => {
    const option = {
      records: data,
      rows: [
        {
          dimensionKey: 'City',
          title: 'City',
          headerStyle: {
            textStick: true
          },
          width: 'auto'
        }
      ],
      columns: [
        {
          dimensionKey: 'Category',
          title: 'Category',
          headerStyle: {
            textStick: true
          },
          width: 'auto'
        }
      ],
      indicators: [
        {
          indicatorKey: 'Quantity',
          title: 'Quantity',
          width: 'auto',
          showSort: false,
          headerStyle: {
            fontWeight: 'normal'
          },
          style: {
            padding: [16, 28, 16, 28],
            color(args) {
              if (args.dataValue >= 0) return '#000000';
              return 'red';
            }
          }
        },
        {
          indicatorKey: 'Sales',
          title: 'Sales',
          width: 'auto',
          showSort: false,
          headerStyle: {
            fontWeight: 'normal'
          },
          format: rec => {
            return '$' + Number(rec).toFixed(2);
          },
          style: {
            padding: [16, 28, 16, 28],
            color(args) {
              if (args.dataValue >= 0) return '#000000';
              return 'red';
            }
          }
        },
        {
          indicatorKey: 'Profit',
          title: 'Profit',
          width: 'auto',
          showSort: false,
          headerStyle: {
            fontWeight: 'normal'
          },
          format: rec => {
            return '$' + Number(rec).toFixed(2);
          },
          style: {
            padding: [16, 28, 16, 28],
            color(args) {
              if (args.dataValue >= 0) return '#000000';
              return 'red';
            }
          }
        }
      ],
      corner: {
        titleOnDimension: 'row',
        headerStyle: {
          textStick: true
        }
      },
      dataConfig: {
        sortRules: [
          {
            sortField: 'Category',
            sortBy: ['Office Supplies', 'Technology', 'Furniture']
          }
        ]
      },
      widthMode: 'standard',
      pagination:{
        perPageCount:10,
        currentPage:0,
        },
    };
    
    tableInstance = new VTable.PivotTable(document.getElementById("CONTAINER_ID"), option);
    const option_hide = {
      records: data,
      rows: [
        {
          dimensionKey: 'City',
          title: 'City',
        }
      ],
      columns: [
        {
          dimensionKey: 'Category',
          title: 'Category',
        }
      ],
      indicators: [
        {
          indicatorKey: 'Quantity',
          title: 'Quantity',
        },
        {
          indicatorKey: 'Sales',
          title: 'Sales',
        },
        {
          indicatorKey: 'Profit',
          title: 'Profit',
        }
      ],
      
      dataConfig: {
        sortRules: [
          {
            sortField: 'Category',
            sortBy: ['Office Supplies', 'Technology', 'Furniture']
          }
        ]
      },
    };  
    tableInstance_hide = new VTable.PivotTable(document.getElementById("CONTAINER_HiDE"), option_hide);
    //分页相关代码
    let pageNumber = 0;
    // const totalNum = option.records.length;
    const totalNum = option.pagination.totalCount;
    const pageSize =option.pagination.perPageCount;
    const pageNumberSpan = document.getElementById("page-namber");
    const totalPageSpan = document.getElementById("total-page");
    const totalNumSpan = document.getElementById("total-num");

    const totalPg = Math.ceil(totalNum/pageSize);//总页数
    totalPageSpan.innerHTML='共'+totalPg+'页';
    totalNumSpan.innerHTML='共'+totalNum+'条';


    document.getElementById("prev-buttom").addEventListener("click", () => {
    if (pageNumber === 0) {
        return;
    }
    pageNumber--;
    tableInstance.updatePagination({
        currentPage: pageNumber
    });
    pageNumberSpan.innerHTML = '第'+(pageNumber+1)+'页';
    });
    document.getElementById("first-buttom").addEventListener("click", () => {
    pageNumber=1;
    pageNumber--;
    tableInstance.updatePagination({
        currentPage: pageNumber
    });
    pageNumberSpan.innerHTML = '第'+(pageNumber+1)+'页';
    document.getElementById("spn").value ='';
    });

    document.getElementById("tail-buttom").addEventListener("click", () => {
    pageNumber=totalPg-1;
    tableInstance.updatePagination({
        currentPage: pageNumber
    });
    pageNumberSpan.innerHTML = '第'+(pageNumber+1)+'页';
    document.getElementById("spn").value ='';
    });


    document.getElementById("next-buttom").addEventListener("click", () => {
    if (pageNumber === (totalPg-1)) {
        return;
    }
    pageNumber++;
    tableInstance.updatePagination({
        currentPage: pageNumber
    });
    pageNumberSpan.innerHTML = '第'+(pageNumber+1)+'页';
    });
    document.getElementById("skip-buttom").addEventListener("click", () => {
    let specificPageNum = document.getElementById("spn").value;//要跳转的页
    if (specificPageNum > totalPg) {
        pageNumber=totalPg-1;
        document.getElementById("spn").value=totalPg;
    }else{
        pageNumber = specificPageNum-1
    }
    if (specificPageNum <= 0) {
        pageNumber=0;
        document.getElementById("spn").value =1;
    }
    
    tableInstance.updatePagination({
        currentPage: pageNumber
    });
    pageNumberSpan.innerHTML = '第'+(pageNumber+1)+'页';
    });
    window['tableInstance'] = tableInstance;
    window['tableInstance_hide'] = tableInstance_hide;


    bindExport(totalNum,pageNumber);
  });

function bindExport(totalNum,pageNumber) {
  let exportContainer = document.getElementById('export-buttom');
  if (exportContainer) {
    exportContainer.parentElement.removeChild(exportContainer);
  }

  exportContainer = document.createElement('div');
  exportContainer.id = 'export-buttom';
  exportContainer.style.position = 'absolute';
  exportContainer.style.bottom = '0';
  exportContainer.style.right = '0';

  
  window['tableInstance'].getContainer().appendChild(exportContainer);

  const exportCsvButton = document.createElement('button');
  exportCsvButton.innerHTML = '全量CSV-export';
  const exportExcelButton = document.createElement('button');
  exportExcelButton.innerHTML = '全量Excel-export';
  exportContainer.appendChild(exportCsvButton);
  exportContainer.appendChild(exportExcelButton);

  const exportCsvButton_currentPage = document.createElement('button');
  exportCsvButton_currentPage.innerHTML = '当页CSV-export';
  const exportExcelButton_currentPage = document.createElement('button');
  exportExcelButton_currentPage.innerHTML = '当页Excel-export';
  exportContainer.appendChild(exportCsvButton_currentPage);
  exportContainer.appendChild(exportExcelButton_currentPage);

  const exportCsvButton_hide = document.createElement('button');
  exportCsvButton_hide.innerHTML = '隐藏全量CSV-export';
  const exportExcelButton_hide = document.createElement('button');
  exportExcelButton_hide.innerHTML = '隐藏全量Excel-export';
  exportContainer.appendChild(exportCsvButton_hide);
  exportContainer.appendChild(exportExcelButton_hide);

  exportCsvButton.addEventListener('click', () => {
    window.tableInstance.updatePagination({
        perPageCount:totalNum,
        currentPage: pageNumber
    });
    if (window.tableInstance) {
      downloadCsv(exportVTableToCsv(window.tableInstance), 'export');
    }
    window.tableInstance.updatePagination({
        perPageCount:10,
        currentPage: pageNumber
    });
  });

  exportExcelButton.addEventListener('click', async () => {
    window.tableInstance.updatePagination({
        perPageCount:totalNum,
        currentPage: 0
    });
    if (window.tableInstance) {
      downloadExcel(await exportVTableToExcel(window.tableInstance, {
        formatExportOutput: ({ cellType, cellValue, table, col, row }) => {          
        }
} ), 'export');
    }
    window.tableInstance.updatePagination({
        perPageCount:10,
        currentPage: pageNumber
    });
  });

  exportCsvButton_currentPage.addEventListener('click', () => {
    if (window.tableInstance) {
      downloadCsv(exportVTableToCsv(window.tableInstance), 'export');
    }
  });

  exportExcelButton_currentPage.addEventListener('click', async () => {
    if (window.tableInstance) {
      downloadExcel(await exportVTableToExcel(window.tableInstance, {
        formatExportOutput: ({ cellType, cellValue, table, col, row }) => {           
        }
} ), 'export');
    }
  });

  exportCsvButton_hide.addEventListener('click', () => {
    if (window.tableInstance_hide) {
      downloadCsv(exportVTableToCsv(window.tableInstance_hide), 'export');
    }
  });

  exportExcelButton_hide.addEventListener('click', async () => {
    if (window.tableInstance_hide) {
      downloadExcel(await exportVTableToExcel(window.tableInstance_hide, {
        formatExportOutput: ({ cellType, cellValue, table, col, row }) => {         
        }
} ), 'export');
    }
  });
}
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值