// import { ColumnType } from "antd/es/table";
// import BetterXlsxFile from 'better-xlsx';
// import { saveAs } from 'file-saver';
// import lodash from 'lodash';


// /** 导出excel列类型 */
// // export type ExportExcelColumnsType<RecordType = any> = (ProColumns<RecordType> | ColumnType<RecordType>) & { children?: ExportExcelColumnsType<RecordType>[] };
// export type ExportExcelColumnsType<RecordType = any> = ColumnType<RecordType> & { children?: ExportExcelColumnsType<RecordType>[] };
// /** 导出excel属性 */
// export type ExportExcelProps<RecordType> = {
//     /** 标题 */
//     title?: string;
//     /** 副标题 */
//     subTitle?: string;
//     /** 摘要 */
//     summary?: string;
//     /** 导出文件名 */
//     fileName?: string;
//     /** 列定义 */
//     columns: ExportExcelColumnsType<RecordType>[];
//     /** 数据 */
//     dataSource: RecordType[];
// }


// /** 获取表头行数 */
// const getColumnDepth = <RecordType>(cols: ExportExcelColumnsType<RecordType>[]) => {
//     const eleDepths: number[] = [];
//     cols.forEach(ele => {
//         let depth = 0;
//         if (Array.isArray(ele.children)) {
//             depth = getColumnDepth(ele.children);
//         }
//         eleDepths.push(depth);
//     });
//     return 1 + (lodash.max(eleDepths) ?? 0);
// }
// /* 计算表头列数 */
// const getColumnCount = <RecordType>(cols: ExportExcelColumnsType<RecordType>[]) => {
//     let colCount = 0;
//     cols.forEach(ele => {
//         if (ele.children) {
//             getColumnCount(ele.children);
//         }
//         else {
//             colCount++;
//         }
//     });
//     return colCount;
// }
// /* 按顺序展平column */
// const columnLine = <RecordType>(cols: ExportExcelColumnsType<RecordType>[]) => {
//     let columnLineArr: ExportExcelColumnsType<RecordType>[] = [];
//     cols.forEach(ele => {
//         if (ele.children === undefined || ele.children.length === 0) {
//             columnLineArr.push(ele);
//         } else {
//             columnLineArr = columnLineArr.concat(columnLine(ele.children));
//         }
//     });
//     return columnLineArr;
// }
// /** 设置单元格边框 */
// const setBorder = (cell: any) => {
//     const borderColor = 'ff000000';
//     cell.style.border.top = 'thin';
//     cell.style.border.topColor = borderColor;
//     cell.style.border.left = 'thin';
//     cell.style.border.leftColor = borderColor;
//     cell.style.border.bottom = 'thin';
//     cell.style.border.bottomColor = borderColor;
//     cell.style.border.right = 'thin';
//     cell.style.border.rightColor = borderColor;
// }
// /* 初始化表头 */
// const initColumn = <RecordType>(sheet: any, depth: number, cols: ExportExcelColumnsType<RecordType>[], rowIndex: number, columnIndex: number, level: number = 0) => {
//     let colIndex = columnIndex;
//     cols.forEach((item) => {
//         let hCell = sheet.cell(rowIndex, colIndex);
//         setBorder(hCell);
//         hCell.style.font.name = '黑体';
//         hCell.style.font.bold = true;
//         hCell.style.font.size = 10;
//         hCell.style.fill.patternType = 'solid';
//         hCell.style.fill.fgColor = 'fffafafa';
//         hCell.style.fill.bgColor = 'ffffffff';

//         // 如果没有子元素, 撑满列
//         if (item.title === '操作') {
//             hCell.value = '';
//             return;
//         }

//         if (!item.children || item.children.length === 0) {
//             // 第一行加一个单元格
//             hCell.value = item.title;
//             hCell.vMerge = depth - level - 1;
//             hCell.style.align.h = 'center';
//             hCell.style.align.v = 'center';
//             colIndex++;
//         }
//         else {
//             let childrenNum = 0;
//             const getColumns = (arr: ExportExcelColumnsType<RecordType>[]) => {
//                 arr.forEach(ele => {
//                     if (ele.children) {
//                         getColumns(ele.children);
//                     }
//                     else {
//                         childrenNum++;
//                     }
//                 });
//             }
//             getColumns(item.children);

//             hCell.hMerge = childrenNum - 1;
//             hCell.value = item.title;
//             hCell.style.align.h = 'center';
//             hCell.style.align.v = 'center';

//             let rowCopy = rowIndex;
//             rowCopy++;

//             initColumn(sheet, depth, item.children, rowCopy, colIndex, level + 1);

//             // 下次单元格起点
//             colIndex = colIndex + childrenNum;
//         }
//     });
// }
// // 通过数组方式读取多级属性的函数
// const getNestedProperty = (obj: any, keys: string[]) => {
//     return keys.reduce((accumulator, key) => {
//         return (accumulator && accumulator[key] !== undefined) ? accumulator[key] : undefined;
//     }, obj);
// }

// /** 导入excel */
// export default <RecordType>(props: ExportExcelProps<RecordType>) => {
//     console.log(props);
//     const { title, subTitle, summary, fileName, columns, dataSource } = props;

//     return new Promise((resolve, reject) => {
//         try {
//             // 新建工作薄
//             const file = new BetterXlsxFile.File();
//             // 新建工作表
//             let sheet = file.addSheet('sheet1');
//             // 行数
//             let rowCount = 0;
//             // 获取表头行数
//             let depth = getColumnDepth(columns);
//             // 获取表头的列数
//             let columnNum = getColumnCount(columns);
//             // 按顺序展平column
//             let columnLineArr = columnLine(columns);

//             const cc = columnLineArr.length - 1;

//             // ---------------------------------------------
//             // 表头
//             // ---------------------------------------------
//             rowCount++;

//             let rowTitle = sheet.addRow();
//             rowTitle.setHeightCM(2);

//             let cellTitle = rowTitle.addCell();
//             cellTitle.value = title;
//             cellTitle.style.font.name = '黑体';
//             cellTitle.style.font.bold = true;
//             cellTitle.style.font.size = 16;
//             cellTitle.style.align.v = 'center';
//             cellTitle.style.align.h = 'center';
//             cellTitle.hMerge = cc;

//             if (subTitle) {
//                 rowCount++;

//                 let rowSubTitle = sheet.addRow();
//                 rowSubTitle.setHeightCM(1);

//                 let cellSubTitle = rowSubTitle.addCell();
//                 cellSubTitle.value = subTitle;
//                 cellSubTitle.style.font.name = '黑体';
//                 cellSubTitle.style.font.size = 12;
//                 cellSubTitle.style.align.v = 'center';
//                 cellSubTitle.style.align.h = 'center';
//                 cellSubTitle.hMerge = cc;
//             }
//             if (summary) {
//                 rowCount++;

//                 let rowSummary = sheet.addRow();
//                 rowSummary.setHeightCM(1);

//                 let cellSummary = rowSummary.addCell();
//                 cellSummary.value = summary;
//                 cellSummary.style.font.name = '黑体';
//                 cellSummary.style.font.size = 10;
//                 cellSummary.style.align.v = 'center';
//                 cellSummary.style.align.h = 'left';
//                 cellSummary.hMerge = cc;
//             }
//             // ---------------------------------------------

//             sheet.addRow();
//             rowCount++;

//             // 新建表头行数
//             let rowArr = [];
//             for (let k = 0; k < depth; k++) {
//                 rowArr.push(sheet.addRow());
//             }

//             // 根据列数填充单元格
//             rowArr.forEach(ele => {
//                 for (let j = 0; j < columnNum; j++) {
//                     let cell = ele.addCell();
//                     cell.value = j;
//                     setBorder(cell);
//                 }
//             });

//             // 初始化表头
//             initColumn(sheet, depth, columns, rowCount, 0, 0);
//             rowCount += depth;

//             // 根据column，将dataSource里面的数据排序，并且转化为二维数组
//             let dataSourceArr: any[] = [];
//             dataSource.forEach((ele, index) => {
//                 let dataTemp: any[] = [];
//                 columnLineArr.forEach((item, i) => {
//                     let v = '';
//                     if (item.dataIndex && (ele as any).hasOwnProperty(item.dataIndex)) {
//                         if (Array.isArray(item.dataIndex)) {
//                             v = getNestedProperty(ele, item.dataIndex as string[]);
//                         }
//                         v = ele[item.dataIndex];
//                     }
//                     if (typeof item.render === 'function') {
//                         const rv = item.render(v, ele, index);
//                         if (rv && rv.hasOwnProperty('children')) {
//                             v = (rv as any).children ?? '';
//                         } else {
//                             v = `${rv ?? ''}`;
//                         }
//                     }

//                     let mc = {};
//                     const mergeCell = ele.mergeCell || new Map();
//                     if (mergeCell.has(i)) {
//                         mc = mergeCell.get(i);
//                     }

//                     dataTemp.push({
//                         value: v,
//                         props: mc,
//                     });
//                 });
//                 dataSourceArr.push(dataTemp);
//             });

//             // 绘画表格数据
//             dataSourceArr.forEach((item, index) => {
//                 //根据数据,创建对应个数的行
//                 let row = sheet.addRow();
//                 // row.setHeightCM(0.8);
//                 //创建对应个数的单元格
//                 item.forEach((ele: any) => {
//                     let cell = row.addCell();

//                     cell.value = ele.value;
//                     if (ele.props) {
//                         cell.vMerge = (ele.props.rowSpan || 1) - 1;
//                         if (ele.props.colSpan) {
//                             cell.hMerge = ele.props.colSpan - 1;
//                         }
//                     }

//                     setBorder(cell);
//                     cell.style.font.size = 10;
//                     cell.style.align.v = 'center';
//                     cell.style.align.h = 'center';
//                 });
//             });

//             rowCount += dataSourceArr.length;

//             // //设置每列的宽度
//             // for (var i = 0; i < columnNum; i++) {
//             //     sheet.col(i).width = 5;
//             // }


//             file.saveAs('blob').then((content: any) => {
//                 saveAs(content, `${fileName || title}.xlsx`);
//                 resolve(true);
//             });
//         }
//         catch (err) {
//             reject(err);
//         }
//     });
// }