{"version":3,"file":"vxe-table-plugin-export2.mjs","sources":["../../../../../../../packages/components/table-pro/src/vxe-table-plugin-export.ts"],"sourcesContent":["// @ts-nocheck\n/* eslint-disable @typescript-eslint/no-namespace */\nimport ExcelJS from 'exceljs'\nimport XEUtils from 'xe-utils'\n\nimport { tavI18n } from '@tav-ui/locales'\nimport { useMessage } from '@tav-ui/hooks/web/useMessage'\nimport { ACTION_COLUMNS, SELECT_COMPONENTS } from './const'\nimport type {\n  VxeGlobalInterceptorHandles,\n  VxeTableConstructor,\n  // eslint-disable-next-line sort-imports\n  VXETableCore,\n  // VxeTableDefines,\n  VxeTablePropTypes,\n} from 'vxe-table'\n\ninterface ColumnInfo {\n  _row: any\n  _colSpan: number\n  _rowSpan: number\n  childNodes: ColumnInfo[]\n  [key: string]: any\n}\n\nlet vxetable: VXETableCore\n\n// declare module 'vxe-table' {\n//   namespace VxeTableDefines {\n//     interface ExtortSheetMethodParams {\n//       workbook: ExcelJS.Workbook\n//       worksheet: ExcelJS.Worksheet\n//     }\n//     interface ColumnInfo {\n//       _row: any\n//       _colSpan: number\n//       _rowSpan: number\n//       childNodes: ColumnInfo[]\n//     }\n//   }\n// }\n\n// 遵循飞书文档样式\nlet defaultHeaderHeight = 26\nlet defaultHeaderBackgroundColor = 'f5f6f7'\nlet defaultHeaderFontSize = 11\n\nlet defaultCellHeight = 24\nlet defaultCellFontColor = '1f2329'\nlet defaultCellFontSize = 10\nlet defaultCellBorderStyle = 'thin'\nlet defaultCellBorderColor = 'dee0e3'\n\nlet defaultFooterHeight = defaultHeaderHeight\nlet defaultFooterBackgroundColor = defaultHeaderBackgroundColor\nlet defaultFooterFontSize = defaultHeaderFontSize\n\nlet defaultDescriptionHeight = 40\nlet defaultDescriptionBackgroundColor = 'fff258'\nlet defaultDescriptionFontSize = 14\nlet defaultDescriptionAlign = 'left'\n\nconst { createMessage } = useMessage()\n\nfunction getCellLabel(column: ColumnInfo, cellValue: any) {\n  if (cellValue) {\n    if (column.type === 'seq') {\n      return XEUtils.toValueString(cellValue)\n    }\n    switch (column.cellType) {\n      case 'string':\n        return XEUtils.toValueString(cellValue)\n      case 'number':\n        if (!isNaN(cellValue)) {\n          return Number(cellValue)\n        }\n        break\n      default:\n        if (cellValue.length < 12 && !isNaN(cellValue)) {\n          return Number(cellValue)\n        }\n        break\n    }\n  }\n  return cellValue\n}\n\nfunction getFooterData(opts: VxeTablePropTypes.ExportConfig, footerData: any[][]) {\n  const { footerFilterMethod } = opts\n  return footerFilterMethod\n    ? footerData.filter((items, index) => footerFilterMethod({ items, $rowIndex: index }))\n    : footerData\n}\n\nfunction getFooterCellValue(\n  $table: VxeTableConstructor,\n  opts: VxeTablePropTypes.ExportConfig,\n  rows: any[],\n  column: ColumnInfo\n) {\n  //TODO 尾部处理\n  const cellValue = getCellLabel(column, rows[$table.getVMColumnIndex(column)])\n  return cellValue\n}\n\nfunction getValidColumn(column: ColumnInfo): ColumnInfo {\n  const { childNodes } = column\n  const isColGroup = childNodes && childNodes.length\n  if (isColGroup) {\n    return getValidColumn(childNodes[0])\n  }\n  return column\n}\n\nfunction setExcelRowHeight(excelRow: ExcelJS.Row, height: number, type?: string) {\n  if (height) {\n    if (type === 'header') {\n      excelRow.height = Math.min(XEUtils.floor(height * 0.75, 12), defaultHeaderHeight)\n    } else if (type === 'footer') {\n      excelRow.height = Math.min(XEUtils.floor(height * 0.75, 12), defaultFooterHeight)\n    } else {\n      excelRow.height = Math.min(XEUtils.floor(height * 0.75, 12), defaultCellHeight)\n    }\n  }\n}\n\nfunction setExcelCellStyle(\n  excelCell: ExcelJS.Cell,\n  align?: VxeTablePropTypes.Align | VxeTablePropTypes.HeaderAlign | VxeTablePropTypes.FooterAlign\n) {\n  excelCell.protection = {\n    locked: false,\n  }\n  excelCell.alignment = {\n    vertical: 'middle',\n    horizontal: align || 'left',\n  }\n}\n\nfunction getDefaultBorderStyle() {\n  return {\n    top: {\n      style: defaultCellBorderStyle,\n      color: {\n        argb: defaultCellBorderColor,\n      },\n    },\n    left: {\n      style: defaultCellBorderStyle,\n      color: {\n        argb: defaultCellBorderColor,\n      },\n    },\n    bottom: {\n      style: defaultCellBorderStyle,\n      color: {\n        argb: defaultCellBorderColor,\n      },\n    },\n    right: {\n      style: defaultCellBorderStyle,\n      color: {\n        argb: defaultCellBorderColor,\n      },\n    },\n  }\n}\n\nfunction deleteNotRequiredColumns(columns: any[]) {\n  const handler = (columns: any[]) =>\n    columns.filter(\n      (column) =>\n        (column.type && !SELECT_COMPONENTS.includes(column.type)) ||\n        (column.field && !ACTION_COLUMNS.includes(column.field))\n    )\n  return handler(columns)\n}\n\n/**\n * @description 设置表格描述\n * @param sheet\n * @param useStyle\n * @param fileDescription\n */\nfunction setDescription(sheet, useStyle, fileDescription) {\n  // see https://github.com/exceljs/exceljs/issues/433\n  sheet.spliceRows(1, 0, [])\n  // sheet.insertRow(1, [])\n  sheet._rows[0].height = defaultDescriptionHeight\n\n  const mergeColRange: string[] = []\n  sheet.columns.forEach((column) => {\n    mergeColRange.push(column.letter)\n  })\n  sheet.mergeCells(`${mergeColRange[0]}1`, `${mergeColRange[mergeColRange.length - 1]}1`)\n  const cell = sheet.getCell(`${mergeColRange[0]}1`)\n  cell.value = fileDescription\n\n  setExcelCellStyle(cell, defaultDescriptionAlign || allAlign)\n\n  if (useStyle) {\n    Object.assign(cell, {\n      font: {\n        size: defaultDescriptionFontSize,\n        color: {\n          argb: defaultCellFontColor,\n        },\n        bold: true,\n      },\n      fill: {\n        type: 'pattern',\n        pattern: 'solid',\n        fgColor: {\n          argb: defaultDescriptionBackgroundColor,\n        },\n      },\n      border: getDefaultBorderStyle(),\n    })\n  }\n}\n\n/**\n * @description 设置表格序号列\n * @param sheet\n * @param useStyle\n */\nfunction setSeq(sheet, useStyle, fileDescription, headerList, contentList, footerList) {\n  const headerDeep = headerList.length\n  const seqValues: any[] = []\n  // const { footerData } = $table.getTableData()\n  // const footers = getFooterData(options, footerData)\n\n  // 填充列内容\n  for (let i = 0; i < sheet._rows.length; i++) {\n    if (i < (fileDescription ? headerDeep + 1 : headerDeep)) {\n      // 把表头的位置空出来占位\n      seqValues.push('')\n    } else if (\n      footerList.length > 0 &&\n      i > (fileDescription ? headerDeep + 1 : headerDeep) + contentList.length - 1\n    ) {\n      // 把表尾的位置空出来占位\n      seqValues.push('')\n    } else {\n      seqValues.push(fileDescription ? i - headerDeep : i - headerDeep + 1)\n    }\n  }\n\n  sheet.spliceColumns(1, 0, seqValues)\n  // sheet.insertColumn(1, seqValues)\n  sheet._columns[0].eachCell((cell) => {\n    if (useStyle) {\n      setExcelCellStyle(cell, defaultDescriptionAlign || allAlign)\n      Object.assign(cell, {\n        font: {\n          size: defaultCellFontSize,\n          color: {\n            argb: defaultCellFontColor,\n          },\n        },\n        border: getDefaultBorderStyle(),\n      })\n    }\n  })\n\n  // 合并占位符与'序号'\n  const mergeColRange: string[] = []\n  sheet.columns.forEach((column) => {\n    mergeColRange.push(column.letter)\n  })\n  // fileDescription 如果有值，r、c 各加一让出第一行位置\n  sheet.mergeCells(\n    `${mergeColRange[0]}${fileDescription ? 1 + 1 : 1}`,\n    `${mergeColRange[0]}${fileDescription ? headerDeep + 1 : headerDeep}`\n  )\n  const firstCell = sheet.getCell(`${mergeColRange[0]}${fileDescription ? 1 + 1 : 1}`)\n  firstCell.value = tavI18n('Tav.tablePro.columns.1')\n\n  setExcelCellStyle(firstCell, defaultDescriptionAlign || allAlign)\n  if (useStyle) {\n    Object.assign(firstCell, {\n      font: {\n        size: defaultHeaderFontSize,\n        color: {\n          argb: defaultCellFontColor,\n        },\n        bold: true,\n      },\n      fill: {\n        type: 'pattern',\n        pattern: 'solid',\n        fgColor: {\n          argb: defaultHeaderBackgroundColor,\n        },\n      },\n      border: getDefaultBorderStyle(),\n    })\n  }\n\n  if (fileDescription) {\n    // excel bug, manual hack. 新增描述后调用spliceColumns新增一列后之前描述逻辑中合并失效这里需要先删除后覆盖\n    Reflect.deleteProperty(sheet._merges, `${mergeColRange[0]}1`)\n    sheet.mergeCells(`${mergeColRange[0]}1`, `${mergeColRange[mergeColRange.length - 1 - 1]}1`) // 调用spliceColumns新增一列后 excel 自动在尾部追加一列所以这里要减掉\n    const cell = sheet.getCell(`${mergeColRange[0]}1`)\n    cell.value = fileDescription\n\n    setExcelCellStyle(cell, defaultDescriptionAlign || allAlign)\n\n    if (useStyle) {\n      Object.assign(cell, {\n        font: {\n          size: defaultDescriptionFontSize,\n          color: {\n            argb: defaultCellFontColor,\n          },\n          bold: true,\n        },\n        fill: {\n          type: 'pattern',\n          pattern: 'solid',\n          fgColor: {\n            argb: defaultDescriptionBackgroundColor,\n          },\n        },\n        border: getDefaultBorderStyle(),\n      })\n    }\n  }\n}\n\nfunction setFooter(\n  sheet,\n  useStyle,\n  fileSeq,\n  $table,\n  options,\n  fileDescription,\n  headerList,\n  contentList,\n  _footerData\n) {\n  const headerDeep = headerList.length\n  const totalRowCount = sheet._rows.length\n  const { footerData } = $table.getTableData()\n  const footers = getFooterData(options, _footerData || footerData)\n\n  // 序号列最后一位填充表尾信息\n  const fillFooterTitle = (row, value) => {\n    if (fileSeq) {\n      row.getCell(1).value = value\n    }\n  }\n\n  for (let i = totalRowCount - footers.length; i < totalRowCount; i++) {\n    const idx = (fileDescription ? headerDeep + 1 : headerDeep) + contentList.length\n    const row = sheet.getRow(i + 1)\n    fillFooterTitle(row, footers[i - idx][0])\n\n    row.eachCell((excelCell) => {\n      setExcelCellStyle(excelCell, defaultDescriptionAlign || allAlign)\n      if (useStyle) {\n        Object.assign(excelCell, {\n          font: {\n            size: defaultFooterFontSize,\n            color: {\n              argb: defaultCellFontColor,\n            },\n            bold: true,\n          },\n          fill: {\n            type: 'pattern',\n            pattern: 'solid',\n            fgColor: {\n              argb: defaultFooterBackgroundColor,\n            },\n          },\n          border: getDefaultBorderStyle(),\n        })\n      }\n      // const excelCol = sheet.getColumn(excelCell.col)\n      // const column: any = $table.getColumnById(excelCol.key as string)\n      // const { footerAlign, align } = column\n      // setExcelCellStyle(excelCell, footerAlign || align || allFooterAlign || allAlign)\n      // if (useStyle) {\n      //   Object.assign(excelCell, {\n      //     font: {\n      //       size: defaultFooterFontSize,\n      //       color: {\n      //         argb: defaultCellFontColor,\n      //       },\n      //     },\n      //     fill: {\n      //       type: 'pattern',\n      //       pattern: 'solid',\n      //       fgColor: {\n      //         argb: defaultFooterBackgroundColor,\n      //       },\n      //     },\n      //     border: getDefaultBorderStyle(),\n      //   })\n      // }\n    })\n  }\n}\n\nasync function exportXLSX(params: VxeGlobalInterceptorHandles.InterceptorExportParams) {\n  const msgKey = 'xlsx'\n  const { modal, t } = vxetable\n  const { $table, options, columns: _columns, colgroups, datas } = params\n  const { props, reactData } = $table\n  const { headerAlign: allHeaderAlign, align: allAlign, footerAlign: allFooterAlign } = props\n  const { rowHeight } = reactData\n  const {\n    message,\n    sheetName,\n    isHeader,\n    isFooter,\n    isMerge,\n    isColgroup,\n    original,\n    useStyle,\n    sheetMethod,\n    fileDescription,\n    fileSeq,\n    backupColumns,\n    exportModalClose,\n    fileStyles,\n    // columns: _columns,\n  } = options\n  const columns = deleteNotRequiredColumns(_columns)\n\n  defaultHeaderHeight = fileStyles.headerHeight ?? defaultHeaderHeight\n  defaultHeaderBackgroundColor = fileStyles.headerBackgroundColor ?? defaultHeaderBackgroundColor\n  defaultHeaderFontSize = fileStyles.headerFontSize ?? defaultHeaderFontSize\n\n  defaultCellHeight = fileStyles.cellHeight ?? defaultCellHeight\n  defaultCellFontColor = fileStyles.cellFontColor ?? defaultCellFontColor\n  defaultCellFontSize = fileStyles.cellFontSize ?? defaultCellFontSize\n  defaultCellBorderStyle = fileStyles.cellBorderStyle ?? defaultCellBorderStyle\n  defaultCellBorderColor = fileStyles.cellBorderColor ?? defaultCellBorderColor\n\n  defaultFooterHeight = fileStyles.footerHeight ?? defaultHeaderHeight\n  defaultFooterBackgroundColor = fileStyles.footerBackgroundColor ?? defaultHeaderBackgroundColor\n  defaultFooterFontSize = fileStyles.footerFontSize ?? defaultHeaderFontSize\n\n  defaultDescriptionHeight = fileStyles.descriptionHeight ?? defaultDescriptionHeight\n  defaultDescriptionBackgroundColor =\n    fileStyles.descriptionBackgroundColor ?? defaultDescriptionBackgroundColor\n  defaultDescriptionFontSize = fileStyles.descriptionFontSize ?? defaultDescriptionFontSize\n  defaultDescriptionAlign = fileStyles.descriptionAlign ?? defaultDescriptionAlign\n\n  const showMsg = message !== false\n  const mergeCells = $table.getMergeCells()\n  const colList: any[] = []\n  const footList: any[] = []\n  const sheetCols: any[] = []\n  const sheetMerges: { s: { r: number; c: number }; e: { r: number; c: number } }[] = []\n  let beforeRowCount = 0\n  const colHead: any = {}\n  // await $table.updateFooter()\n  const _footerData = $table.props.footerMethod\n    ? $table.props.footerMethod({ columns, data: datas.map((d) => d._row) })\n    : null\n  columns.forEach((column) => {\n    const { id, field, renderWidth, width, minWidth } = column\n    colHead[id] = original ? field : column.getTitle()\n    sheetCols.push({\n      key: id,\n      width: XEUtils.ceil((renderWidth || width || minWidth) / 8, 1),\n    })\n  })\n  // 处理表头\n  if (isHeader) {\n    // 处理分组\n    if (isColgroup && colgroups) {\n      colgroups.forEach((cols, rIndex) => {\n        const groupHead: any = {}\n        columns.forEach((column) => {\n          groupHead[column.id] = null\n        })\n        cols.forEach((column) => {\n          const { _colSpan, _rowSpan } = column\n          const validColumn = getValidColumn(column)\n          const columnIndex = columns.indexOf(validColumn)\n          const title = column.getTitle\n            ? column.getTitle()\n            : validColumn.parentId\n            ? $table.getColumnById(validColumn.parentId).title\n            : validColumn.field\n          groupHead[validColumn.id] = original ? validColumn.field : title\n          if (_colSpan > 1 || _rowSpan > 1) {\n            // sheetMerges.push({\n            //   s: { r: rIndex, c: columnIndex },\n            //   e: { r: rIndex + _rowSpan - 1, c: columnIndex + _colSpan - 1 },\n            // })\n            sheetMerges.push({\n              s: { r: rIndex + 1, c: columnIndex + 1 },\n              e: { r: rIndex + _rowSpan - 1 + 1, c: columnIndex + _colSpan - 1 + 1 },\n            })\n          }\n        })\n        colList.push(groupHead)\n      })\n    } else {\n      colList.push(colHead)\n    }\n    beforeRowCount += colList.length\n  }\n  // 处理合并\n  if (isMerge) {\n    mergeCells.forEach((mergeItem) => {\n      const {\n        row: mergeRowIndex,\n        rowspan: mergeRowspan,\n        col: mergeColIndex,\n        colspan: mergeColspan,\n      } = mergeItem\n      // sheetMerges.push({\n      //   s: { r: mergeRowIndex + beforeRowCount, c: mergeColIndex },\n      //   e: {\n      //     r: mergeRowIndex + beforeRowCount + mergeRowspan - 1,\n      //     c: mergeColIndex + mergeColspan - 1,\n      //   },\n      // })\n      sheetMerges.push({\n        s: { r: mergeRowIndex + beforeRowCount + 1, c: mergeColIndex + 1 },\n        e: {\n          r: mergeRowIndex + beforeRowCount + mergeRowspan - 1 + 1,\n          c: mergeColIndex + mergeColspan - 1 + 1,\n        },\n      })\n    })\n  }\n  const rowList = datas.map((item) => {\n    const rest: any = {}\n    columns.forEach((column) => {\n      // rest[column.id] = getCellLabel(column, item[column.id])\n      let cellValue = item[column.id]\n      // 使用自定义的导出逻辑，针对于单元格是复杂组件的情况（图片、tags等）\n      if (column.params && column.params.cellContent) {\n        cellValue = column.params.cellContent({ row: item._row || {} }) || ''\n      }\n      rest[column.id] = getCellLabel(column, cellValue)\n    })\n    return rest\n  })\n  beforeRowCount += rowList.length\n  // 处理表尾\n  if (isFooter) {\n    const { footerData } = $table.getTableData()\n    const footers = getFooterData(options, _footerData || footerData)\n    const mergeFooterItems = $table.getMergeFooterItems()\n    // 处理合并\n    if (isMerge) {\n      mergeFooterItems.forEach((mergeItem) => {\n        const {\n          row: mergeRowIndex,\n          rowspan: mergeRowspan,\n          col: mergeColIndex,\n          colspan: mergeColspan,\n        } = mergeItem\n        // sheetMerges.push({\n        //   s: { r: mergeRowIndex + beforeRowCount, c: mergeColIndex },\n        //   e: {\n        //     r: mergeRowIndex + beforeRowCount + mergeRowspan - 1,\n        //     c: mergeColIndex + mergeColspan - 1,\n        //   },\n        // })\n        sheetMerges.push({\n          s: { r: mergeRowIndex + beforeRowCount + 1, c: mergeColIndex + 1 },\n          e: {\n            r: mergeRowIndex + beforeRowCount + mergeRowspan - 1 + 1,\n            c: mergeColIndex + mergeColspan - 1 + 1,\n          },\n        })\n      })\n    }\n    footers.forEach((rows) => {\n      const item: any = {}\n      columns.forEach((column) => {\n        item[column.id] = getFooterCellValue($table, options, rows, column) || ''\n      })\n      footList.push(item)\n    })\n  }\n  const exportMethod = () => {\n    const workbook = new ExcelJS.Workbook()\n    const sheet = workbook.addWorksheet(sheetName)\n    workbook.creator = 'i7eo'\n    sheet.views = [{}] // 为了设置固定的行高必须设置该值，see：https://github.com/exceljs/exceljs/issues/422\n    sheet.columns = sheetCols\n    if (isHeader) {\n      sheet.addRows(colList).forEach((excelRow) => {\n        if (useStyle) {\n          setExcelRowHeight(excelRow, rowHeight, 'header')\n        }\n        excelRow.eachCell((excelCell) => {\n          const excelCol = sheet.getColumn(excelCell.col)\n          const column: any = $table.getColumnById(excelCol.key as string)\n          const { headerAlign, align } = column\n          setExcelCellStyle(excelCell, headerAlign || align || allHeaderAlign || allAlign)\n          if (useStyle) {\n            Object.assign(excelCell, {\n              font: {\n                size: defaultHeaderFontSize,\n                color: {\n                  argb: defaultCellFontColor,\n                },\n                bold: true,\n              },\n              fill: {\n                type: 'pattern',\n                pattern: 'solid',\n                fgColor: {\n                  argb: defaultHeaderBackgroundColor,\n                },\n              },\n              border: getDefaultBorderStyle(),\n            })\n          }\n        })\n      })\n    }\n    sheet.addRows(rowList).forEach((excelRow) => {\n      if (useStyle) {\n        setExcelRowHeight(excelRow, rowHeight)\n      }\n      excelRow.eachCell((excelCell) => {\n        const excelCol = sheet.getColumn(excelCell.col)\n        const column: any = $table.getColumnById(excelCol.key as string)\n        const { align } = column\n        setExcelCellStyle(excelCell, align || allAlign)\n        if (useStyle) {\n          Object.assign(excelCell, {\n            font: {\n              size: defaultCellFontSize,\n              color: {\n                argb: defaultCellFontColor,\n              },\n            },\n            border: getDefaultBorderStyle(),\n          })\n        }\n\n        // 如果不格式化时间或者时间字段返回时间戳能直接供excel使用则可以开启，当前时间字段返回格式化好的时间所以要格式化的话得把每条数据转为时间戳才能让excel的格式化生效\n        // if(!excelCol.numFmt) {\n        //   if (column.params && column.params.columnFormat) {\n        //     excelCol.numFmt = column.params.columnFormat(column, excelCell)\n        //   } else {\n        //     excelCol.numFmt = '@'\n        //   }\n        // }\n\n        if (column.params && column.params.cellFormat) {\n          excelCell.numFmt = column.params.cellFormat(excelCell)\n        } else {\n          excelCell.numFmt = '@'\n        }\n      })\n    })\n    if (isFooter) {\n      sheet.addRows(footList).forEach((excelRow) => {\n        if (useStyle) {\n          setExcelRowHeight(excelRow, rowHeight, 'footer')\n        }\n        excelRow.eachCell((excelCell) => {\n          const excelCol = sheet.getColumn(excelCell.col)\n          const column: any = $table.getColumnById(excelCol.key as string)\n          const { footerAlign, align } = column\n          setExcelCellStyle(excelCell, footerAlign || align || allFooterAlign || allAlign)\n          if (useStyle) {\n            Object.assign(excelCell, {\n              font: {\n                size: defaultFooterFontSize,\n                color: {\n                  argb: defaultCellFontColor,\n                },\n              },\n              fill: {\n                type: 'pattern',\n                pattern: 'solid',\n                fgColor: {\n                  argb: defaultFooterBackgroundColor,\n                },\n              },\n              border: getDefaultBorderStyle(),\n            })\n          }\n\n          if (column.params && column.params.cellFormat) {\n            excelCell.numFmt = column.params.cellFormat(excelCell)\n          } else {\n            excelCell.numFmt = '@'\n          }\n        })\n      })\n    }\n\n    if (useStyle && sheetMethod) {\n      sheetMethod({\n        options,\n        workbook,\n        worksheet: sheet,\n        columns,\n        colgroups,\n        datas,\n        $table,\n      })\n    }\n\n    fileDescription && setDescription(sheet, useStyle, fileDescription)\n    fileSeq && setSeq(sheet, useStyle, fileDescription, colList, rowList, footList)\n    footList.length > 0 &&\n      setFooter(\n        sheet,\n        useStyle,\n        fileSeq,\n        $table,\n        options,\n        fileDescription,\n        colList,\n        rowList,\n        _footerData\n      )\n\n    // sheetMerges.forEach(({ s, e }) => {\n    //   // 按开始行，开始列，结束行，结束列合并, see https://github.com/exceljs/exceljs/blob/master/README_zh.md#合并单元格\n    //   sheet.mergeCells(s.r + 1, s.c + 1, e.r + 1, e.c + 1)\n    // })\n\n    // sheetMerges.forEach(({ s, e }) => {\n    //   sheet.mergeCells(s.r, s.c, e.r, e.c)\n    // })\n\n    sheetMerges.forEach(({ s, e }) => {\n      if (fileDescription) {\n        if (fileSeq) {\n          sheet.mergeCells(s.r + 1, s.c + 1, e.r + 1, e.c + 1)\n        } else {\n          sheet.mergeCells(s.r + 1, s.c, e.r + 1, e.c)\n        }\n      } else {\n        if (fileSeq) {\n          sheet.mergeCells(s.r, s.c + 1, e.r, e.c + 1)\n        } else {\n          sheet.mergeCells(s.r, s.c, e.r, e.c)\n        }\n      }\n    })\n\n    // sheetMerges.forEach(({ s, e }) => {\n    //   // 按开始行，开始列，结束行，结束列合并, see https://github.com/exceljs/exceljs/blob/master/README_zh.md#合并单元格\n    //   if (fileDescription) {\n    //     // 如果有描述先往顶部插入一行合并完成后再调用原本的合并，此时因为顶部插入了一行所以在合并时行计算应该下移一位\n    //     // sheet.mergeCells(s.r + 1 + 1, s.c + 1, e.r + 1 + 1, e.c + 1)\n    //     // 手动添加序号列后行右移\n    //     sheet.mergeCells(s.r + 1 + 1, s.c + 1 + 1, e.r + 1 + 1, e.c + 1 + 1)\n    //   } else {\n    //     // sheet.mergeCells(s.r + 1, s.c + 1, e.r + 1, e.c + 1)\n    //     // 手动添加序号列后行右移\n    //     sheet.mergeCells(s.r + 1, s.c + 1 + 1, e.r + 1, e.c + 1 + 1)\n    //   }\n    // })\n    workbook.xlsx.writeBuffer().then((buffer) => {\n      const blob = new Blob([buffer], { type: 'application/octet-stream' })\n      // 导出 xlsx\n      downloadFile(blob, options, $table)\n      if (showMsg && modal) {\n        modal.close(msgKey)\n        // modal.message({ content: t('vxe.table.expSuccess'), status: 'success' })\n        // createMessage.success(t('vxe.table.expSuccess'))\n      }\n      $table.loadColumn(backupColumns.value)\n      exportModalClose()\n    })\n  }\n  if (showMsg && modal) {\n    // modal.message({\n    //   id: msgKey,\n    //   content: t('vxe.table.expLoading'),\n    //   status: 'loading',\n    //   duration: -1,\n    // })\n    // setTimeout(exportMethod, 1500)\n    createMessage.loading(tavI18n('Tav.tablePro.export.6'), 2).then(\n      () => exportMethod(),\n      // eslint-disable-next-line @typescript-eslint/no-empty-function\n      () => {}\n    )\n  } else {\n    exportMethod()\n  }\n}\n\nfunction downloadFile(blob: Blob, options: VxeTablePropTypes.ExportConfig) {\n  const { modal, t } = vxetable\n  const { message, filename, type } = options\n  const showMsg = message !== false\n  if (window.Blob) {\n    if ((navigator as any).msSaveBlob) {\n      ;(navigator as any).msSaveBlob(blob, `${filename}.${type}`)\n    } else {\n      const linkElem = document.createElement('a')\n      linkElem.target = '_blank'\n      linkElem.download = `${filename}.${type}`\n      linkElem.href = URL.createObjectURL(blob)\n      document.body.appendChild(linkElem)\n      linkElem.click()\n      document.body.removeChild(linkElem)\n    }\n  } else {\n    if (showMsg && modal) {\n      // modal.alert({ content: t('vxe.error.notExp'), status: 'error' })\n      createMessage.error(t('vxe.error.notExp'))\n    }\n  }\n}\n\nfunction checkImportData(tableFields: string[], fields: string[]) {\n  return fields.some((field) => tableFields.indexOf(field) > -1)\n}\n\nfunction importError(params: VxeGlobalInterceptorHandles.InterceptorImportParams) {\n  const { modal, t } = vxetable\n  const { $table, options } = params\n  const { internalData } = $table\n  const { _importReject } = internalData\n  const showMsg = options.message !== false\n  if (showMsg && modal) {\n    // modal.message({ content: t('vxe.error.impFields'), status: 'error' })\n    createMessage.error(t('vxe.error.impFields'))\n  }\n  if (_importReject) {\n    _importReject({ status: false })\n  }\n}\n\nfunction importXLSX(params: VxeGlobalInterceptorHandles.InterceptorImportParams) {\n  const { modal, t } = vxetable\n  const { $table, columns, options, file } = params\n  const { internalData } = $table\n  const { _importResolve } = internalData\n  const showMsg = options.message !== false\n  const fileReader = new FileReader()\n  fileReader.onerror = () => {\n    importError(params)\n  }\n  fileReader.onload = (evnt) => {\n    const tableFields: string[] = []\n    columns.forEach((column) => {\n      const field = column.field\n      if (field) {\n        tableFields.push(field)\n      }\n    })\n    const workbook = new ExcelJS.Workbook()\n    const readerTarget = evnt.target\n    if (readerTarget) {\n      workbook.xlsx.load(readerTarget.result as ArrayBuffer).then((wb) => {\n        const firstSheet = wb.worksheets[0]\n        if (firstSheet) {\n          const sheetValues = firstSheet.getSheetValues() as string[][]\n          const fieldIndex = XEUtils.findIndexOf(sheetValues, (list) => list && list.length > 0)\n          const fields = sheetValues[fieldIndex] as string[]\n          const status = checkImportData(tableFields, fields)\n          if (status) {\n            const records = sheetValues.slice(fieldIndex).map((list) => {\n              const item: any = {}\n              list.forEach((cellValue, cIndex) => {\n                item[fields[cIndex]] = cellValue\n              })\n              const record: any = {}\n              tableFields.forEach((field) => {\n                record[field] = XEUtils.isUndefined(item[field]) ? null : item[field]\n              })\n              return record\n            })\n            $table.createData(records).then((data: any[]) => {\n              let loadRest: Promise<any>\n              if (options.mode === 'insert') {\n                loadRest = $table.insertAt(data, -1)\n              } else {\n                loadRest = $table.reloadData(data)\n              }\n              return loadRest.then(() => {\n                if (_importResolve) {\n                  _importResolve({ status: true })\n                }\n              })\n            })\n            if (showMsg && modal) {\n              // modal.message({\n              //   content: t('vxe.table.impSuccess', [records.length]),\n              //   status: 'success',\n              // })\n              createMessage.success(t('vxe.table.impSuccess'))\n            }\n          } else {\n            importError(params)\n          }\n        } else {\n          importError(params)\n        }\n      })\n    } else {\n      importError(params)\n    }\n  }\n  fileReader.readAsArrayBuffer(file)\n}\n\nfunction handleImportEvent(params: VxeGlobalInterceptorHandles.InterceptorImportParams) {\n  if (params.options.type === 'xlsx') {\n    importXLSX(params)\n    return false\n  }\n}\n\nfunction handleExportEvent(params: VxeGlobalInterceptorHandles.InterceptorExportParams) {\n  if (params.options.type === 'xlsx') {\n    exportXLSX(params)\n    return false\n  }\n}\n\n/**\n * 基于 vxe-table 表格的增强插件，支持导出 xlsx 格式\n */\nexport const VXETablePluginExportXLSX = {\n  install(vxetablecore: VXETableCore) {\n    const { setup, interceptor } = vxetablecore\n\n    vxetable = vxetablecore\n\n    setup({\n      export: {\n        types: {\n          xlsx: 0,\n        },\n      },\n    })\n    interceptor.mixin({\n      'event.import': handleImportEvent,\n      'event.export': handleExportEvent,\n    })\n  },\n}\n\nif (typeof window !== 'undefined' && window.VXETable && window.VXETable.use) {\n  window.VXETable.use(VXETablePluginExportXLSX)\n}\n\nexport default VXETablePluginExportXLSX\n"],"names":[],"mappings":"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"}