@visactor/vtable-plugins 1.20.1 → 1.20.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/cjs/add-row-column.d.ts +7 -6
  2. package/cjs/add-row-column.js +4 -29
  3. package/cjs/add-row-column.js.map +1 -1
  4. package/cjs/auto-fill/auto-fill-manager.js +7 -34
  5. package/cjs/auto-fill/auto-fill-manager.js.map +1 -1
  6. package/cjs/auto-fill/index.d.ts +6 -10
  7. package/cjs/auto-fill/index.js +5 -30
  8. package/cjs/auto-fill/index.js.map +1 -1
  9. package/cjs/auto-fill/rules.js +26 -11
  10. package/cjs/auto-fill/rules.js.map +1 -1
  11. package/cjs/auto-fill/utils/fill.d.ts +1 -1
  12. package/cjs/auto-fill/utils/fill.js +9 -9
  13. package/cjs/auto-fill/utils/fill.js.map +1 -1
  14. package/cjs/column-series.d.ts +4 -3
  15. package/cjs/column-series.js +4 -29
  16. package/cjs/column-series.js.map +1 -1
  17. package/cjs/context-menu.d.ts +6 -5
  18. package/cjs/context-menu.js +3 -28
  19. package/cjs/context-menu.js.map +1 -1
  20. package/cjs/contextmenu/handle-menu-helper.d.ts +19 -19
  21. package/cjs/contextmenu/handle-menu-helper.js.map +1 -1
  22. package/cjs/contextmenu/menu-manager.js.map +1 -1
  23. package/cjs/contextmenu/types.d.ts +1 -1
  24. package/cjs/contextmenu/types.js +2 -2
  25. package/cjs/contextmenu/types.js.map +1 -1
  26. package/cjs/excel-edit-cell-keyboard.d.ts +4 -4
  27. package/cjs/excel-edit-cell-keyboard.js +3 -28
  28. package/cjs/excel-edit-cell-keyboard.js.map +1 -1
  29. package/cjs/excel-import.d.ts +5 -5
  30. package/cjs/excel-import.js +3 -26
  31. package/cjs/excel-import.js.map +1 -1
  32. package/cjs/fillHandleUtils/autoFillHandle.d.ts +2 -2
  33. package/cjs/fillHandleUtils/autoFillHandle.js.map +1 -1
  34. package/cjs/fillHandleUtils/translateRowObj.d.ts +3 -3
  35. package/cjs/fillHandleUtils/translateRowObj.js.map +1 -1
  36. package/cjs/filter/condition-filter.d.ts +2 -2
  37. package/cjs/filter/condition-filter.js.map +1 -1
  38. package/cjs/filter/filter-engine.d.ts +6 -6
  39. package/cjs/filter/filter-engine.js.map +1 -1
  40. package/cjs/filter/filter-state-manager.d.ts +2 -2
  41. package/cjs/filter/filter-state-manager.js.map +1 -1
  42. package/cjs/filter/filter-toolbar.d.ts +4 -4
  43. package/cjs/filter/filter-toolbar.js.map +1 -1
  44. package/cjs/filter/filter.d.ts +4 -4
  45. package/cjs/filter/filter.js +7 -32
  46. package/cjs/filter/filter.js.map +1 -1
  47. package/cjs/filter/types.d.ts +4 -4
  48. package/cjs/filter/types.js.map +1 -1
  49. package/cjs/filter/value-filter.d.ts +2 -2
  50. package/cjs/filter/value-filter.js.map +1 -1
  51. package/cjs/focus-highlight.d.ts +2 -2
  52. package/cjs/focus-highlight.js.map +1 -1
  53. package/cjs/gantt-export-image.js +1 -1
  54. package/cjs/gantt-export-image.js.map +1 -1
  55. package/cjs/header-highlight.js +2 -2
  56. package/cjs/header-highlight.js.map +1 -1
  57. package/cjs/highlight-header-when-select-cell.d.ts +2 -2
  58. package/cjs/highlight-header-when-select-cell.js.map +1 -1
  59. package/cjs/paste-add-row-column.d.ts +5 -5
  60. package/cjs/paste-add-row-column.js +3 -28
  61. package/cjs/paste-add-row-column.js.map +1 -1
  62. package/cjs/rotate-table.d.ts +13 -5
  63. package/cjs/rotate-table.js +3 -28
  64. package/cjs/rotate-table.js.map +1 -1
  65. package/cjs/row-series.d.ts +2 -2
  66. package/cjs/row-series.js.map +1 -1
  67. package/cjs/table-carousel-animation.d.ts +2 -2
  68. package/cjs/table-carousel-animation.js.map +1 -1
  69. package/cjs/table-export/csv/index.d.ts +2 -4
  70. package/cjs/table-export/csv/index.js +0 -1
  71. package/cjs/table-export/csv/index.js.map +1 -1
  72. package/cjs/table-export/excel/index.js +1 -0
  73. package/cjs/table-export/util/type.d.ts +6 -6
  74. package/cjs/table-export/util/type.js.map +1 -1
  75. package/cjs/table-export.d.ts +2 -2
  76. package/cjs/table-export.js +4 -27
  77. package/cjs/table-export.js.map +1 -1
  78. package/cjs/table-series-number.d.ts +2 -2
  79. package/cjs/table-series-number.js +2 -3
  80. package/cjs/table-series-number.js.map +1 -1
  81. package/cjs/wps-fill-handle.d.ts +4 -4
  82. package/cjs/wps-fill-handle.js +4 -29
  83. package/cjs/wps-fill-handle.js.map +1 -1
  84. package/dist/vtable-plugins.js +5168 -93717
  85. package/dist/vtable-plugins.min.js +36 -90
  86. package/es/add-row-column.d.ts +7 -6
  87. package/es/add-row-column.js +4 -4
  88. package/es/add-row-column.js.map +1 -1
  89. package/es/auto-fill/auto-fill-manager.js +7 -9
  90. package/es/auto-fill/auto-fill-manager.js.map +1 -1
  91. package/es/auto-fill/index.d.ts +6 -10
  92. package/es/auto-fill/index.js +5 -5
  93. package/es/auto-fill/index.js.map +1 -1
  94. package/es/auto-fill/rules.js +24 -9
  95. package/es/auto-fill/rules.js.map +1 -1
  96. package/es/auto-fill/utils/fill.d.ts +1 -1
  97. package/es/auto-fill/utils/fill.js +9 -9
  98. package/es/auto-fill/utils/fill.js.map +1 -1
  99. package/es/column-series.d.ts +4 -3
  100. package/es/column-series.js +4 -4
  101. package/es/column-series.js.map +1 -1
  102. package/es/context-menu.d.ts +6 -5
  103. package/es/context-menu.js +3 -3
  104. package/es/context-menu.js.map +1 -1
  105. package/es/contextmenu/handle-menu-helper.d.ts +19 -19
  106. package/es/contextmenu/handle-menu-helper.js.map +1 -1
  107. package/es/contextmenu/menu-manager.js.map +1 -1
  108. package/es/contextmenu/types.d.ts +1 -1
  109. package/es/contextmenu/types.js +2 -2
  110. package/es/contextmenu/types.js.map +1 -1
  111. package/es/excel-edit-cell-keyboard.d.ts +4 -4
  112. package/es/excel-edit-cell-keyboard.js +3 -3
  113. package/es/excel-edit-cell-keyboard.js.map +1 -1
  114. package/es/excel-import.d.ts +5 -5
  115. package/es/excel-import.js +2 -2
  116. package/es/excel-import.js.map +1 -1
  117. package/es/fillHandleUtils/autoFillHandle.d.ts +2 -2
  118. package/es/fillHandleUtils/autoFillHandle.js.map +1 -1
  119. package/es/fillHandleUtils/translateRowObj.d.ts +3 -3
  120. package/es/fillHandleUtils/translateRowObj.js.map +1 -1
  121. package/es/filter/condition-filter.d.ts +2 -2
  122. package/es/filter/condition-filter.js.map +1 -1
  123. package/es/filter/filter-engine.d.ts +6 -6
  124. package/es/filter/filter-engine.js.map +1 -1
  125. package/es/filter/filter-state-manager.d.ts +2 -2
  126. package/es/filter/filter-state-manager.js.map +1 -1
  127. package/es/filter/filter-toolbar.d.ts +4 -4
  128. package/es/filter/filter-toolbar.js.map +1 -1
  129. package/es/filter/filter.d.ts +4 -4
  130. package/es/filter/filter.js +7 -7
  131. package/es/filter/filter.js.map +1 -1
  132. package/es/filter/types.d.ts +4 -4
  133. package/es/filter/types.js.map +1 -1
  134. package/es/filter/value-filter.d.ts +2 -2
  135. package/es/filter/value-filter.js.map +1 -1
  136. package/es/focus-highlight.d.ts +2 -2
  137. package/es/focus-highlight.js.map +1 -1
  138. package/es/gantt-export-image.js +1 -1
  139. package/es/gantt-export-image.js.map +1 -1
  140. package/es/header-highlight.js +2 -2
  141. package/es/header-highlight.js.map +1 -1
  142. package/es/highlight-header-when-select-cell.d.ts +2 -2
  143. package/es/highlight-header-when-select-cell.js.map +1 -1
  144. package/es/paste-add-row-column.d.ts +5 -5
  145. package/es/paste-add-row-column.js +3 -3
  146. package/es/paste-add-row-column.js.map +1 -1
  147. package/es/rotate-table.d.ts +13 -5
  148. package/es/rotate-table.js +3 -3
  149. package/es/rotate-table.js.map +1 -1
  150. package/es/row-series.d.ts +2 -2
  151. package/es/row-series.js.map +1 -1
  152. package/es/table-carousel-animation.d.ts +2 -2
  153. package/es/table-carousel-animation.js.map +1 -1
  154. package/es/table-export/csv/index.d.ts +2 -4
  155. package/es/table-export/csv/index.js +1 -2
  156. package/es/table-export/csv/index.js.map +1 -1
  157. package/es/table-export/excel/index.js +2 -1
  158. package/es/table-export/util/type.d.ts +6 -6
  159. package/es/table-export/util/type.js.map +1 -1
  160. package/es/table-export.d.ts +2 -2
  161. package/es/table-export.js +3 -3
  162. package/es/table-export.js.map +1 -1
  163. package/es/table-series-number.d.ts +2 -2
  164. package/es/table-series-number.js +2 -3
  165. package/es/table-series-number.js.map +1 -1
  166. package/es/wps-fill-handle.d.ts +4 -4
  167. package/es/wps-fill-handle.js +4 -4
  168. package/es/wps-fill-handle.js.map +1 -1
  169. package/package.json +8 -7
@@ -1,29 +1,6 @@
1
1
  "use strict";
2
2
 
3
- var __createBinding = this && this.__createBinding || (Object.create ? function(o, m, k, k2) {
4
- void 0 === k2 && (k2 = k);
5
- var desc = Object.getOwnPropertyDescriptor(m, k);
6
- desc && !("get" in desc ? !m.__esModule : desc.writable || desc.configurable) || (desc = {
7
- enumerable: !0,
8
- get: function() {
9
- return m[k];
10
- }
11
- }), Object.defineProperty(o, k2, desc);
12
- } : function(o, m, k, k2) {
13
- void 0 === k2 && (k2 = k), o[k2] = m[k];
14
- }), __setModuleDefault = this && this.__setModuleDefault || (Object.create ? function(o, v) {
15
- Object.defineProperty(o, "default", {
16
- enumerable: !0,
17
- value: v
18
- });
19
- } : function(o, v) {
20
- o.default = v;
21
- }), __importStar = this && this.__importStar || function(mod) {
22
- if (mod && mod.__esModule) return mod;
23
- var result = {};
24
- if (null != mod) for (var k in mod) "default" !== k && Object.prototype.hasOwnProperty.call(mod, k) && __createBinding(result, mod, k);
25
- return __setModuleDefault(result, mod), result;
26
- }, __awaiter = this && this.__awaiter || function(thisArg, _arguments, P, generator) {
3
+ var __awaiter = this && this.__awaiter || function(thisArg, _arguments, P, generator) {
27
4
  return new (P || (P = Promise))((function(resolve, reject) {
28
5
  function fulfilled(value) {
29
6
  try {
@@ -57,11 +34,11 @@ Object.defineProperty(exports, "__esModule", {
57
34
  value: !0
58
35
  }), exports.ExcelImportPlugin = void 0;
59
36
 
60
- const exceljs_1 = __importDefault(require("exceljs")), VTable = __importStar(require("@visactor/vtable"));
37
+ const exceljs_1 = __importDefault(require("exceljs")), vtable_1 = require("@visactor/vtable");
61
38
 
62
39
  class ExcelImportPlugin {
63
40
  constructor(options) {
64
- this.id = "excel-import-plugin", this.name = "ExcelImportPlugin", this.runTime = [ VTable.TABLE_EVENT_TYPE.INITIALIZED ],
41
+ this.id = "excel-import-plugin", this.name = "ExcelImportPlugin", this.runTime = [ vtable_1.TABLE_EVENT_TYPE.INITIALIZED ],
65
42
  this._tableInstance = null, this.options = Object.assign({
66
43
  autoTable: !0,
67
44
  autoColumns: !0,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/excel-import.ts"],"names":[],"mappings":"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","file":"excel-import.js","sourcesContent":["import ExcelJS from 'exceljs';\r\nimport type { ListTable } from '@visactor/vtable';\r\nimport * as VTable from '@visactor/vtable';\r\n\r\n// 数据导入结果类型\r\nexport interface ImportResult {\r\n columns: VTable.ColumnsDefine;\r\n records: Record<string, unknown>[];\r\n}\r\n\r\nexport interface ExcelImportOptions {\r\n id?: string;\r\n headerRowCount?: number; // 指定头的层数,不指定会使用detectHeaderRowCount来自动判断,但是只有excel才有\r\n exportData?: boolean; // 是否导出JavaScript对象字面量格式文件\r\n autoTable?: boolean; // 是否自动替换表格数据\r\n autoColumns?: boolean; // 是否自动生成列配置\r\n delimiter?: string; // CSV分隔符,默认逗号\r\n batchSize?: number; // 批处理大小,默认1000行\r\n enableBatchProcessing?: boolean; // 是否启用分批处理,默认true\r\n asyncDelay?: number; // 异步处理延迟时间(ms),默认5ms\r\n}\r\n\r\nexport class ExcelImportPlugin implements VTable.plugins.IVTablePlugin {\r\n id: string = `excel-import-plugin`;\r\n name = 'ExcelImportPlugin';\r\n runTime = [VTable.TABLE_EVENT_TYPE.INITIALIZED];\r\n private options: ExcelImportOptions;\r\n private _tableInstance: ListTable | null = null;\r\n constructor(options?: ExcelImportOptions) {\r\n this.options = {\r\n autoTable: true,\r\n autoColumns: true,\r\n delimiter: ',',\r\n exportData: false,\r\n batchSize: 1000,\r\n enableBatchProcessing: true,\r\n asyncDelay: 5,\r\n ...options\r\n };\r\n if (options?.id) {\r\n this.id = options.id;\r\n }\r\n }\r\n\r\n run(...args: [unknown, unknown, ListTable]) {\r\n const tableInstance = args[2];\r\n this._tableInstance = tableInstance;\r\n (this._tableInstance as any).importFile = () => {\r\n this.import('file');\r\n };\r\n }\r\n\r\n release() {\r\n this._tableInstance = null;\r\n }\r\n /**\r\n * 调用导入文件接口\r\n * @returns Promise<ImportResult>\r\n */\r\n async importFile(): Promise<ImportResult> {\r\n return this.import('file');\r\n }\r\n\r\n /**\r\n * @param type 导入类型: \"file\" | \"csv\" | \"json\" | \"html\"\r\n * @param source 数据源: 文件选择器 | 字符串数据\r\n * @param options 导入选项\r\n * @returns Promise<ImportResult>\r\n */\r\n async import(\r\n type: 'file' | 'csv' | 'json' | 'html',\r\n source?: string | object,\r\n options?: Partial<ExcelImportOptions>\r\n ): Promise<ImportResult> {\r\n const mergedOptions = { ...this.options, ...options };\r\n\r\n if (type === 'file') {\r\n return this._importFromFileDialog(mergedOptions);\r\n }\r\n if (typeof source === 'string') {\r\n return this._importFromString(type as 'csv' | 'json' | 'html', source, mergedOptions);\r\n }\r\n if (Array.isArray(source) || typeof source === 'object') {\r\n if (type !== 'json') {\r\n throw new Error('只有JSON格式支持从对象导入');\r\n }\r\n return this._importFromData('json', source, mergedOptions);\r\n }\r\n throw new Error('Invalid import source');\r\n }\r\n\r\n /**\r\n * 从文件对话框导入\r\n */\r\n private async _importFromFileDialog(options: ExcelImportOptions): Promise<ImportResult> {\r\n return new Promise((resolve, reject) => {\r\n if (!this._tableInstance) {\r\n reject(new Error('表格实例不存在或已销毁,无法导入数据!'));\r\n return;\r\n }\r\n\r\n const input = document.createElement('input');\r\n input.type = 'file';\r\n input.style.display = 'none';\r\n document.body.appendChild(input);\r\n\r\n input.addEventListener('change', async e => {\r\n try {\r\n const file = (e.target as HTMLInputElement).files?.[0];\r\n if (!file) {\r\n document.body.removeChild(input);\r\n reject(new Error('未选择文件'));\r\n return;\r\n }\r\n\r\n const result = await this._parseFile(file, options);\r\n\r\n // 根据配置决定是否自动更新表格\r\n if (options.autoTable && this._tableInstance) {\r\n if (options.autoColumns) {\r\n this._tableInstance.updateOption(\r\n Object.assign({}, this._tableInstance.options, {\r\n columns: result.columns\r\n })\r\n );\r\n }\r\n this._tableInstance.setRecords(result.records);\r\n }\r\n\r\n // 清理\r\n input.value = '';\r\n document.body.removeChild(input);\r\n\r\n resolve(result);\r\n } catch (error) {\r\n document.body.removeChild(input);\r\n reject(error);\r\n }\r\n });\r\n\r\n input.click();\r\n });\r\n }\r\n\r\n /**\r\n * 从字符串数据导入\r\n */\r\n private async _importFromString(\r\n type: 'csv' | 'json' | 'html',\r\n data: string,\r\n options: ExcelImportOptions\r\n ): Promise<ImportResult> {\r\n let result: ImportResult;\r\n\r\n switch (type) {\r\n case 'csv':\r\n result = await this._parseCSVString(data, options);\r\n break;\r\n case 'json':\r\n result = await this._parseJSONString(data, options);\r\n break;\r\n case 'html':\r\n result = await this._parseHTMLString(data, options);\r\n break;\r\n default:\r\n throw new Error(`不支持的导入类型: ${type}`);\r\n }\r\n\r\n // 自动更新表格\r\n if (options.autoTable && this._tableInstance) {\r\n if (options.autoColumns) {\r\n this._tableInstance.updateOption({\r\n columns: result.columns,\r\n plugins: [this]\r\n });\r\n }\r\n this._tableInstance.setRecords(result.records);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * 从数据对象导入\r\n */\r\n private async _importFromData(\r\n type: 'json',\r\n data: unknown[] | object,\r\n options: ExcelImportOptions\r\n ): Promise<ImportResult> {\r\n let result: ImportResult;\r\n\r\n if (type === 'json') {\r\n result = await this._parseJSONData(data, options);\r\n } else {\r\n throw new Error(`不支持的数据类型: ${type}`);\r\n }\r\n\r\n // 自动更新表格\r\n if (options.autoTable && this._tableInstance) {\r\n if (options.autoColumns) {\r\n this._tableInstance.updateOption({\r\n columns: result.columns,\r\n plugins: [this]\r\n });\r\n }\r\n this._tableInstance.setRecords(result.records);\r\n }\r\n\r\n return result;\r\n }\r\n /**\r\n * 根据文件类型解析文件\r\n */\r\n private async _parseFile(file: File, options?: ExcelImportOptions): Promise<ImportResult> {\r\n const mergedOptions = { ...this.options, ...options };\r\n const fileExtension = this._getFileExtension(file.name).toLowerCase();\r\n\r\n switch (fileExtension) {\r\n case 'xlsx':\r\n case 'xls':\r\n return await this._parseExcelFile(file, mergedOptions);\r\n case 'csv':\r\n return await this._parseCsvFile(file, mergedOptions);\r\n case 'json':\r\n return await this._parseJsonFile(file, mergedOptions);\r\n case 'html':\r\n case 'htm':\r\n return await this._parseHtmlFile(file, mergedOptions);\r\n default:\r\n throw new Error(`不支持的文件类型: ${fileExtension}`);\r\n }\r\n }\r\n\r\n /**\r\n * 获取文件扩展名\r\n */\r\n private _getFileExtension(filename: string): string {\r\n const parts = filename.split('.');\r\n return parts.length > 1 ? parts[parts.length - 1] : '';\r\n }\r\n /**\r\n * 解析Excel文件\r\n */\r\n private async _parseExcelFile(file: File, options?: ExcelImportOptions): Promise<ImportResult> {\r\n const mergedOptions = { ...this.options, ...options };\r\n return await ExcelImportPlugin.importExcelToVTableData(file, mergedOptions);\r\n }\r\n\r\n /**\r\n * 解析CSV文件\r\n */\r\n private async _parseCsvFile(file: File, options?: ExcelImportOptions): Promise<ImportResult> {\r\n const mergedOptions = { ...this.options, ...options };\r\n const text = await file.text();\r\n return this._parseCSVString(text, mergedOptions);\r\n }\r\n\r\n /**\r\n * 解析JSON文件\r\n */\r\n private async _parseJsonFile(file: File, options?: ExcelImportOptions): Promise<ImportResult> {\r\n const mergedOptions = { ...this.options, ...options };\r\n const text = await file.text();\r\n return this._parseJSONString(text, mergedOptions);\r\n }\r\n\r\n /**\r\n * 解析HTML表格文件\r\n */\r\n private async _parseHtmlFile(file: File, options?: ExcelImportOptions): Promise<ImportResult> {\r\n const mergedOptions = { ...this.options, ...options };\r\n const text = await file.text();\r\n return this._parseHTMLString(text, mergedOptions);\r\n }\r\n\r\n /**\r\n * 从表头行构建列配置\r\n */\r\n private _buildColumnsFromHeaders(headerRows: string[][]): VTable.ColumnsDefine {\r\n if (headerRows.length === 1) {\r\n return headerRows[0].map((title, index) => ({\r\n field: `col${index}`,\r\n title: title || `列${index + 1}`,\r\n cellType: 'text' as const,\r\n headerType: 'text' as const\r\n }));\r\n }\r\n return ExcelImportPlugin.buildColumns(headerRows);\r\n }\r\n\r\n static async importExcelToVTableData(file: File, options?: ExcelImportOptions) {\r\n const workbook = new ExcelJS.Workbook();\r\n await workbook.xlsx.load(await file.arrayBuffer());\r\n const worksheet = workbook.worksheets[0];\r\n if (!worksheet) {\r\n throw new Error('Excel 文件无有效工作表');\r\n }\r\n const detectedHeaderRows = options?.headerRowCount ?? this.detectHeaderRowCount(worksheet);\r\n const headerRows = [];\r\n for (let i = 1; i <= detectedHeaderRows; i++) {\r\n const row = worksheet.getRow(i);\r\n headerRows.push(Array.prototype.slice.call(row.values, 1));\r\n }\r\n const columns = ExcelImportPlugin.buildColumns(headerRows);\r\n const records: Record<string, unknown>[] = [];\r\n const dataRows: unknown[][] = [];\r\n worksheet.eachRow((row, rowNumber) => {\r\n if (rowNumber <= detectedHeaderRows) {\r\n return;\r\n }\r\n const cells = Array.prototype.slice.call(row.values, 1);\r\n dataRows.push(cells);\r\n });\r\n\r\n // 分批处理数据行,提升大文件性能\r\n const batchSize = options?.batchSize || 1000;\r\n const enableBatch = options?.enableBatchProcessing !== false && dataRows.length > batchSize;\r\n if (enableBatch) {\r\n for (let i = 0; i < dataRows.length; i += batchSize) {\r\n const batch = dataRows.slice(i, i + batchSize);\r\n const batchRecords = batch.map(cells => {\r\n const record: Record<string, unknown> = {};\r\n cells.forEach((cell: unknown, j: number) => {\r\n record[`col${j}`] = cell;\r\n });\r\n return record;\r\n });\r\n records.push(...batchRecords);\r\n if (i + batchSize < dataRows.length) {\r\n await new Promise(resolve => setTimeout(resolve, options?.asyncDelay || 5));\r\n }\r\n }\r\n } else {\r\n // 小文件直接处理\r\n dataRows.forEach(cells => {\r\n const record: Record<string, unknown> = {};\r\n cells.forEach((cell: unknown, i: number) => {\r\n record[`col${i}`] = cell;\r\n });\r\n records.push(record);\r\n });\r\n }\r\n if (options?.exportData) {\r\n // 导出为JavaScript对象字面量格式\r\n const jsContent = ExcelImportPlugin._generateJavaScriptExport(columns, records);\r\n const blob = new Blob([jsContent], { type: 'text/javascript' });\r\n const url = URL.createObjectURL(blob);\r\n const a = document.createElement('a');\r\n a.href = url;\r\n a.download = 'vtable-data.js';\r\n document.body.appendChild(a);\r\n a.click();\r\n setTimeout(() => {\r\n document.body.removeChild(a);\r\n URL.revokeObjectURL(url);\r\n }, 100);\r\n }\r\n return { columns, records };\r\n }\r\n\r\n private static detectHeaderRowCount(worksheet: any): number {\r\n let rowIndex = 1;\r\n let headerRowCount = 1;\r\n while (true) {\r\n const row = worksheet.getRow(rowIndex);\r\n const cells = Array.prototype.slice.call(row.values, 1);\r\n let hasConsecutive = false;\r\n for (let i = 1; i < cells.length; i++) {\r\n if (cells[i] !== undefined && cells[i] !== '' && cells[i] === cells[i - 1]) {\r\n hasConsecutive = true;\r\n break;\r\n }\r\n }\r\n if (hasConsecutive) {\r\n headerRowCount++;\r\n rowIndex++;\r\n } else {\r\n break;\r\n }\r\n }\r\n return headerRowCount;\r\n }\r\n\r\n private static buildColumns(headerRows: unknown[][], colStart = 0, colEnd?: number, level = 0): VTable.ColumnsDefine {\r\n const row = headerRows[level] as unknown[];\r\n const columns: VTable.ColumnsDefine = [];\r\n colEnd = colEnd ?? row.length;\r\n let i = colStart;\r\n while (i < colEnd) {\r\n const title = String(row[i] || `列${i + 1}`);\r\n let span = 1;\r\n while (i + span < colEnd && row[i + span] === title) {\r\n span++;\r\n }\r\n if (level < headerRows.length - 1) {\r\n const subColumns = ExcelImportPlugin.buildColumns(headerRows, i, i + span, level + 1);\r\n if (subColumns.length === 1) {\r\n columns.push(subColumns[0]);\r\n } else {\r\n columns.push({\r\n title,\r\n columns: subColumns,\r\n hideColumnsSubHeader: false\r\n });\r\n }\r\n } else {\r\n columns.push({\r\n field: `col${i}`,\r\n title,\r\n cellType: 'text' as const,\r\n headerType: 'text' as const\r\n });\r\n }\r\n i += span;\r\n }\r\n return columns;\r\n }\r\n\r\n /**\r\n * 解析CSV字符串\r\n */\r\n private async _parseCSVString(text: string, options: ExcelImportOptions): Promise<ImportResult> {\r\n const lines = text.split('\\n').filter(line => line.trim());\r\n\r\n if (lines.length === 0) {\r\n throw new Error('CSV文件为空');\r\n }\r\n\r\n // 解析CSV行(支持自定义分隔符)\r\n const delimiter = options.delimiter || ',';\r\n const parseCSVLine = (line: string): string[] => {\r\n return line.split(delimiter).map(cell => cell.trim().replace(/^\"|\"$/g, ''));\r\n };\r\n\r\n const headerRowCount = 1;\r\n const headerRows = lines.slice(0, headerRowCount).map(parseCSVLine);\r\n const dataRows = lines.slice(headerRowCount);\r\n\r\n const columns = this._buildColumnsFromHeaders(headerRows);\r\n const records: Record<string, unknown>[] = [];\r\n\r\n await this._processBatchRecords(dataRows, options, async (batch: string[]) => {\r\n const batchRecords = batch.map(line => {\r\n const parsedRow = parseCSVLine(line);\r\n const record: Record<string, unknown> = {};\r\n parsedRow.forEach((cell, i) => {\r\n record[`col${i}`] = cell || '';\r\n });\r\n return record;\r\n });\r\n records.push(...batchRecords);\r\n });\r\n if (options.exportData) {\r\n this._exportToJS(columns, records);\r\n }\r\n\r\n return { columns, records };\r\n }\r\n\r\n /**\r\n * 解析JSON字符串\r\n */\r\n private async _parseJSONString(text: string, options: ExcelImportOptions): Promise<ImportResult> {\r\n let jsonData;\r\n\r\n try {\r\n jsonData = JSON.parse(text);\r\n } catch (error) {\r\n throw new Error('JSON文件格式错误');\r\n }\r\n\r\n const result = await this._parseJSONData(jsonData, options);\r\n if (options.exportData) {\r\n this._exportToJS(result.columns, result.records);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * 解析HTML字符串\r\n */\r\n private async _parseHTMLString(text: string, options: ExcelImportOptions): Promise<ImportResult> {\r\n const parser = new DOMParser();\r\n const doc = parser.parseFromString(text, 'text/html');\r\n const table = doc.querySelector('table');\r\n\r\n if (!table) {\r\n throw new Error('HTML文件中未找到表格');\r\n }\r\n\r\n const rows = Array.from(table.querySelectorAll('tr'));\r\n if (rows.length === 0) {\r\n throw new Error('表格中没有数据行');\r\n }\r\n\r\n const headerRowCount = 1;\r\n const headerRows = rows\r\n .slice(0, headerRowCount)\r\n .map(row => Array.from(row.querySelectorAll('th, td')).map(cell => cell.textContent?.trim() || ''));\r\n const dataRows = rows.slice(headerRowCount);\r\n\r\n const columns = this._buildColumnsFromHeaders(headerRows);\r\n const records: Record<string, unknown>[] = [];\r\n\r\n // 分批处理数据行\r\n await this._processBatchRecords(dataRows, options, async (batch: Element[]) => {\r\n const batchRecords = batch.map(row => {\r\n const cells = Array.from(row.querySelectorAll('td')).map(cell => cell.textContent?.trim() || '');\r\n const record: Record<string, unknown> = {};\r\n cells.forEach((cell, i) => {\r\n record[`col${i}`] = cell || '';\r\n });\r\n return record;\r\n });\r\n records.push(...batchRecords);\r\n });\r\n\r\n // 如果启用了导出功能,则导出为JS文件\r\n if (options.exportData) {\r\n this._exportToJS(columns, records);\r\n }\r\n\r\n return { columns, records };\r\n }\r\n\r\n /**\r\n * 解析JSON数据对象\r\n */\r\n private async _parseJSONData(jsonData: unknown[] | object, options: ExcelImportOptions): Promise<ImportResult> {\r\n let result: ImportResult;\r\n\r\n // 如果JSON直接包含columns和records\r\n if (\r\n typeof jsonData === 'object' &&\r\n !Array.isArray(jsonData) &&\r\n jsonData &&\r\n 'columns' in jsonData &&\r\n 'records' in jsonData\r\n ) {\r\n const data = jsonData as { columns: VTable.ColumnsDefine; records: Record<string, unknown>[] };\r\n const records: Record<string, unknown>[] = [];\r\n await this._processBatchRecords(data.records, options, async (batch: Record<string, unknown>[]) => {\r\n const batchRecords = batch.map(record => ({ ...record }));\r\n records.push(...batchRecords);\r\n });\r\n result = {\r\n columns: data.columns,\r\n records: records\r\n };\r\n } else if (Array.isArray(jsonData) && jsonData.length > 0) {\r\n const firstRecord = jsonData[0] as Record<string, unknown>;\r\n const columns: VTable.ColumnsDefine = Object.keys(firstRecord).map(key => ({\r\n field: key,\r\n title: key,\r\n cellType: 'text' as const,\r\n headerType: 'text' as const\r\n }));\r\n\r\n const records: Record<string, unknown>[] = [];\r\n await this._processBatchRecords(\r\n jsonData as Record<string, unknown>[],\r\n options,\r\n async (batch: Record<string, unknown>[]) => {\r\n const batchRecords = batch.map(record => ({ ...record }));\r\n records.push(...batchRecords);\r\n }\r\n );\r\n\r\n result = { columns, records };\r\n } else {\r\n throw new Error('不支持的JSON格式');\r\n }\r\n\r\n if (options.exportData) {\r\n this._exportToJS(result.columns, result.records);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * 生成JavaScript对象字面量格式的导出内容\r\n */\r\n private static _generateJavaScriptExport(columns: VTable.ColumnsDefine, records: Record<string, unknown>[]): string {\r\n // 格式化值,确保正确的缩进\r\n const formatValue = (value: unknown, indent: string = ''): string => {\r\n if (value === null || value === undefined) {\r\n return 'null';\r\n }\r\n if (typeof value === 'string') {\r\n return `'${value.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\")}'`;\r\n }\r\n if (typeof value === 'number' || typeof value === 'boolean') {\r\n return String(value);\r\n }\r\n if (Array.isArray(value)) {\r\n if (value.length === 0) {\r\n return '[]';\r\n }\r\n const items = value.map(item => formatValue(item, indent + ' ')).join(', ');\r\n return `[${items}]`;\r\n }\r\n if (typeof value === 'object') {\r\n const props = Object.entries(value)\r\n .map(([key, val]) => `${indent} ${key}: ${formatValue(val, indent + ' ')}`)\r\n .join(',\\n');\r\n return `{\\n${props}\\n${indent}}`;\r\n }\r\n return String(value);\r\n };\r\n\r\n // 格式化记录对象\r\n const formatRecord = (record: unknown): string => {\r\n const props = Object.entries(record)\r\n .map(([key, value]) => ` ${key}: ${formatValue(value)}`)\r\n .join(',\\n');\r\n return ` {\\n${props}\\n }`;\r\n };\r\n\r\n // 格式化列对象(支持嵌套列)\r\n const formatColumn = (column: unknown, baseIndent: string = ' '): string => {\r\n const props = Object.entries(column)\r\n .map(([key, value]) => {\r\n if (key === 'columns' && Array.isArray(value)) {\r\n // 递归处理嵌套列,增加缩进\r\n const nestedColumns = value.map(col => formatColumn(col, baseIndent + ' ')).join(',\\n');\r\n return `${baseIndent} ${key}: [\\n${nestedColumns}\\n${baseIndent} ]`;\r\n }\r\n return `${baseIndent} ${key}: ${formatValue(value)}`;\r\n })\r\n .join(',\\n');\r\n return `${baseIndent}{\\n${props}\\n${baseIndent}}`;\r\n };\r\n\r\n const columnsStr = columns.map(col => formatColumn(col)).join(',\\n');\r\n const recordsStr = records.map(formatRecord).join(',\\n');\r\n\r\n return `// VTable 数据导出 - JavaScript 对象字面量格式\r\n// 生成时间: ${new Date().toLocaleString()}\r\n\r\nconst vtableData = {\r\n columns: [\r\n${columnsStr}\r\n ],\r\n records: [\r\n${recordsStr}\r\n ]\r\n};\r\n`;\r\n }\r\n\r\n /**\r\n * 导出数据为JavaScript对象字面量格式\r\n */\r\n private _exportToJS(columns: VTable.ColumnDefine[], records: Record<string, unknown>[]): void {\r\n const jsContent = ExcelImportPlugin._generateJavaScriptExport(columns, records);\r\n const blob = new Blob([jsContent], { type: 'text/javascript' });\r\n const url = URL.createObjectURL(blob);\r\n const a = document.createElement('a');\r\n a.href = url;\r\n a.download = 'vtable-data.js';\r\n document.body.appendChild(a);\r\n a.click();\r\n setTimeout(() => {\r\n document.body.removeChild(a);\r\n URL.revokeObjectURL(url);\r\n }, 100);\r\n }\r\n\r\n /**\r\n * 分批处理大数据记录,避免UI阻塞\r\n */\r\n private async _processBatchRecords<T>(\r\n records: T[],\r\n options: ExcelImportOptions,\r\n processor: (batch: T[], batchIndex: number) => Promise<void> | void\r\n ): Promise<void> {\r\n if (!options.enableBatchProcessing || records.length <= (options.batchSize || 1000)) {\r\n // 小数据量直接处理\r\n await processor(records, 0);\r\n return;\r\n }\r\n\r\n const batchSize = options.batchSize || 1000;\r\n const totalBatches = Math.ceil(records.length / batchSize);\r\n for (let i = 0; i < totalBatches; i++) {\r\n const start = i * batchSize;\r\n const end = Math.min(start + batchSize, records.length);\r\n const batch = records.slice(start, end);\r\n await processor(batch, i);\r\n // 让出控制权给浏览器,避免长时间阻塞UI\r\n if (i < totalBatches - 1) {\r\n await new Promise(resolve => setTimeout(resolve, options.asyncDelay || 5));\r\n }\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["../src/excel-import.ts"],"names":[],"mappings":"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","file":"excel-import.js","sourcesContent":["import ExcelJS from 'exceljs';\r\nimport type { ListTable, ColumnsDefine, ColumnDefine } from '@visactor/vtable';\r\nimport { TABLE_EVENT_TYPE } from '@visactor/vtable';\r\nimport type { pluginsDefinition } from '@visactor/vtable';\r\n// 数据导入结果类型\r\nexport interface ImportResult {\r\n columns: ColumnsDefine;\r\n records: Record<string, unknown>[];\r\n}\r\n\r\nexport interface ExcelImportOptions {\r\n id?: string;\r\n headerRowCount?: number; // 指定头的层数,不指定会使用detectHeaderRowCount来自动判断,但是只有excel才有\r\n exportData?: boolean; // 是否导出JavaScript对象字面量格式文件\r\n autoTable?: boolean; // 是否自动替换表格数据\r\n autoColumns?: boolean; // 是否自动生成列配置\r\n delimiter?: string; // CSV分隔符,默认逗号\r\n batchSize?: number; // 批处理大小,默认1000行\r\n enableBatchProcessing?: boolean; // 是否启用分批处理,默认true\r\n asyncDelay?: number; // 异步处理延迟时间(ms),默认5ms\r\n}\r\n\r\nexport class ExcelImportPlugin implements pluginsDefinition.IVTablePlugin {\r\n id: string = `excel-import-plugin`;\r\n name = 'ExcelImportPlugin';\r\n runTime = [TABLE_EVENT_TYPE.INITIALIZED];\r\n private options: ExcelImportOptions;\r\n private _tableInstance: ListTable | null = null;\r\n constructor(options?: ExcelImportOptions) {\r\n this.options = {\r\n autoTable: true,\r\n autoColumns: true,\r\n delimiter: ',',\r\n exportData: false,\r\n batchSize: 1000,\r\n enableBatchProcessing: true,\r\n asyncDelay: 5,\r\n ...options\r\n };\r\n if (options?.id) {\r\n this.id = options.id;\r\n }\r\n }\r\n\r\n run(...args: [unknown, unknown, ListTable]) {\r\n const tableInstance = args[2];\r\n this._tableInstance = tableInstance;\r\n (this._tableInstance as any).importFile = () => {\r\n this.import('file');\r\n };\r\n }\r\n\r\n release() {\r\n this._tableInstance = null;\r\n }\r\n /**\r\n * 调用导入文件接口\r\n * @returns Promise<ImportResult>\r\n */\r\n async importFile(): Promise<ImportResult> {\r\n return this.import('file');\r\n }\r\n\r\n /**\r\n * @param type 导入类型: \"file\" | \"csv\" | \"json\" | \"html\"\r\n * @param source 数据源: 文件选择器 | 字符串数据\r\n * @param options 导入选项\r\n * @returns Promise<ImportResult>\r\n */\r\n async import(\r\n type: 'file' | 'csv' | 'json' | 'html',\r\n source?: string | object,\r\n options?: Partial<ExcelImportOptions>\r\n ): Promise<ImportResult> {\r\n const mergedOptions = { ...this.options, ...options };\r\n\r\n if (type === 'file') {\r\n return this._importFromFileDialog(mergedOptions);\r\n }\r\n if (typeof source === 'string') {\r\n return this._importFromString(type as 'csv' | 'json' | 'html', source, mergedOptions);\r\n }\r\n if (Array.isArray(source) || typeof source === 'object') {\r\n if (type !== 'json') {\r\n throw new Error('只有JSON格式支持从对象导入');\r\n }\r\n return this._importFromData('json', source, mergedOptions);\r\n }\r\n throw new Error('Invalid import source');\r\n }\r\n\r\n /**\r\n * 从文件对话框导入\r\n */\r\n private async _importFromFileDialog(options: ExcelImportOptions): Promise<ImportResult> {\r\n return new Promise((resolve, reject) => {\r\n if (!this._tableInstance) {\r\n reject(new Error('表格实例不存在或已销毁,无法导入数据!'));\r\n return;\r\n }\r\n\r\n const input = document.createElement('input');\r\n input.type = 'file';\r\n input.style.display = 'none';\r\n document.body.appendChild(input);\r\n\r\n input.addEventListener('change', async e => {\r\n try {\r\n const file = (e.target as HTMLInputElement).files?.[0];\r\n if (!file) {\r\n document.body.removeChild(input);\r\n reject(new Error('未选择文件'));\r\n return;\r\n }\r\n\r\n const result = await this._parseFile(file, options);\r\n\r\n // 根据配置决定是否自动更新表格\r\n if (options.autoTable && this._tableInstance) {\r\n if (options.autoColumns) {\r\n this._tableInstance.updateOption(\r\n Object.assign({}, this._tableInstance.options, {\r\n columns: result.columns\r\n })\r\n );\r\n }\r\n this._tableInstance.setRecords(result.records);\r\n }\r\n\r\n // 清理\r\n input.value = '';\r\n document.body.removeChild(input);\r\n\r\n resolve(result);\r\n } catch (error) {\r\n document.body.removeChild(input);\r\n reject(error);\r\n }\r\n });\r\n\r\n input.click();\r\n });\r\n }\r\n\r\n /**\r\n * 从字符串数据导入\r\n */\r\n private async _importFromString(\r\n type: 'csv' | 'json' | 'html',\r\n data: string,\r\n options: ExcelImportOptions\r\n ): Promise<ImportResult> {\r\n let result: ImportResult;\r\n\r\n switch (type) {\r\n case 'csv':\r\n result = await this._parseCSVString(data, options);\r\n break;\r\n case 'json':\r\n result = await this._parseJSONString(data, options);\r\n break;\r\n case 'html':\r\n result = await this._parseHTMLString(data, options);\r\n break;\r\n default:\r\n throw new Error(`不支持的导入类型: ${type}`);\r\n }\r\n\r\n // 自动更新表格\r\n if (options.autoTable && this._tableInstance) {\r\n if (options.autoColumns) {\r\n this._tableInstance.updateOption({\r\n columns: result.columns,\r\n plugins: [this]\r\n });\r\n }\r\n this._tableInstance.setRecords(result.records);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * 从数据对象导入\r\n */\r\n private async _importFromData(\r\n type: 'json',\r\n data: unknown[] | object,\r\n options: ExcelImportOptions\r\n ): Promise<ImportResult> {\r\n let result: ImportResult;\r\n\r\n if (type === 'json') {\r\n result = await this._parseJSONData(data, options);\r\n } else {\r\n throw new Error(`不支持的数据类型: ${type}`);\r\n }\r\n\r\n // 自动更新表格\r\n if (options.autoTable && this._tableInstance) {\r\n if (options.autoColumns) {\r\n this._tableInstance.updateOption({\r\n columns: result.columns,\r\n plugins: [this]\r\n });\r\n }\r\n this._tableInstance.setRecords(result.records);\r\n }\r\n\r\n return result;\r\n }\r\n /**\r\n * 根据文件类型解析文件\r\n */\r\n private async _parseFile(file: File, options?: ExcelImportOptions): Promise<ImportResult> {\r\n const mergedOptions = { ...this.options, ...options };\r\n const fileExtension = this._getFileExtension(file.name).toLowerCase();\r\n\r\n switch (fileExtension) {\r\n case 'xlsx':\r\n case 'xls':\r\n return await this._parseExcelFile(file, mergedOptions);\r\n case 'csv':\r\n return await this._parseCsvFile(file, mergedOptions);\r\n case 'json':\r\n return await this._parseJsonFile(file, mergedOptions);\r\n case 'html':\r\n case 'htm':\r\n return await this._parseHtmlFile(file, mergedOptions);\r\n default:\r\n throw new Error(`不支持的文件类型: ${fileExtension}`);\r\n }\r\n }\r\n\r\n /**\r\n * 获取文件扩展名\r\n */\r\n private _getFileExtension(filename: string): string {\r\n const parts = filename.split('.');\r\n return parts.length > 1 ? parts[parts.length - 1] : '';\r\n }\r\n /**\r\n * 解析Excel文件\r\n */\r\n private async _parseExcelFile(file: File, options?: ExcelImportOptions): Promise<ImportResult> {\r\n const mergedOptions = { ...this.options, ...options };\r\n return await ExcelImportPlugin.importExcelToVTableData(file, mergedOptions);\r\n }\r\n\r\n /**\r\n * 解析CSV文件\r\n */\r\n private async _parseCsvFile(file: File, options?: ExcelImportOptions): Promise<ImportResult> {\r\n const mergedOptions = { ...this.options, ...options };\r\n const text = await file.text();\r\n return this._parseCSVString(text, mergedOptions);\r\n }\r\n\r\n /**\r\n * 解析JSON文件\r\n */\r\n private async _parseJsonFile(file: File, options?: ExcelImportOptions): Promise<ImportResult> {\r\n const mergedOptions = { ...this.options, ...options };\r\n const text = await file.text();\r\n return this._parseJSONString(text, mergedOptions);\r\n }\r\n\r\n /**\r\n * 解析HTML表格文件\r\n */\r\n private async _parseHtmlFile(file: File, options?: ExcelImportOptions): Promise<ImportResult> {\r\n const mergedOptions = { ...this.options, ...options };\r\n const text = await file.text();\r\n return this._parseHTMLString(text, mergedOptions);\r\n }\r\n\r\n /**\r\n * 从表头行构建列配置\r\n */\r\n private _buildColumnsFromHeaders(headerRows: string[][]): ColumnsDefine {\r\n if (headerRows.length === 1) {\r\n return headerRows[0].map((title, index) => ({\r\n field: `col${index}`,\r\n title: title || `列${index + 1}`,\r\n cellType: 'text' as const,\r\n headerType: 'text' as const\r\n }));\r\n }\r\n return ExcelImportPlugin.buildColumns(headerRows);\r\n }\r\n\r\n static async importExcelToVTableData(file: File, options?: ExcelImportOptions) {\r\n const workbook = new ExcelJS.Workbook();\r\n await workbook.xlsx.load(await file.arrayBuffer());\r\n const worksheet = workbook.worksheets[0];\r\n if (!worksheet) {\r\n throw new Error('Excel 文件无有效工作表');\r\n }\r\n const detectedHeaderRows = options?.headerRowCount ?? this.detectHeaderRowCount(worksheet);\r\n const headerRows = [];\r\n for (let i = 1; i <= detectedHeaderRows; i++) {\r\n const row = worksheet.getRow(i);\r\n headerRows.push(Array.prototype.slice.call(row.values, 1));\r\n }\r\n const columns = ExcelImportPlugin.buildColumns(headerRows);\r\n const records: Record<string, unknown>[] = [];\r\n const dataRows: unknown[][] = [];\r\n worksheet.eachRow((row, rowNumber) => {\r\n if (rowNumber <= detectedHeaderRows) {\r\n return;\r\n }\r\n const cells = Array.prototype.slice.call(row.values, 1);\r\n dataRows.push(cells);\r\n });\r\n\r\n // 分批处理数据行,提升大文件性能\r\n const batchSize = options?.batchSize || 1000;\r\n const enableBatch = options?.enableBatchProcessing !== false && dataRows.length > batchSize;\r\n if (enableBatch) {\r\n for (let i = 0; i < dataRows.length; i += batchSize) {\r\n const batch = dataRows.slice(i, i + batchSize);\r\n const batchRecords = batch.map(cells => {\r\n const record: Record<string, unknown> = {};\r\n cells.forEach((cell: unknown, j: number) => {\r\n record[`col${j}`] = cell;\r\n });\r\n return record;\r\n });\r\n records.push(...batchRecords);\r\n if (i + batchSize < dataRows.length) {\r\n await new Promise(resolve => setTimeout(resolve, options?.asyncDelay || 5));\r\n }\r\n }\r\n } else {\r\n // 小文件直接处理\r\n dataRows.forEach(cells => {\r\n const record: Record<string, unknown> = {};\r\n cells.forEach((cell: unknown, i: number) => {\r\n record[`col${i}`] = cell;\r\n });\r\n records.push(record);\r\n });\r\n }\r\n if (options?.exportData) {\r\n // 导出为JavaScript对象字面量格式\r\n const jsContent = ExcelImportPlugin._generateJavaScriptExport(columns, records);\r\n const blob = new Blob([jsContent], { type: 'text/javascript' });\r\n const url = URL.createObjectURL(blob);\r\n const a = document.createElement('a');\r\n a.href = url;\r\n a.download = 'vtable-data.js';\r\n document.body.appendChild(a);\r\n a.click();\r\n setTimeout(() => {\r\n document.body.removeChild(a);\r\n URL.revokeObjectURL(url);\r\n }, 100);\r\n }\r\n return { columns, records };\r\n }\r\n\r\n private static detectHeaderRowCount(worksheet: any): number {\r\n let rowIndex = 1;\r\n let headerRowCount = 1;\r\n while (true) {\r\n const row = worksheet.getRow(rowIndex);\r\n const cells = Array.prototype.slice.call(row.values, 1);\r\n let hasConsecutive = false;\r\n for (let i = 1; i < cells.length; i++) {\r\n if (cells[i] !== undefined && cells[i] !== '' && cells[i] === cells[i - 1]) {\r\n hasConsecutive = true;\r\n break;\r\n }\r\n }\r\n if (hasConsecutive) {\r\n headerRowCount++;\r\n rowIndex++;\r\n } else {\r\n break;\r\n }\r\n }\r\n return headerRowCount;\r\n }\r\n\r\n private static buildColumns(headerRows: unknown[][], colStart = 0, colEnd?: number, level = 0): ColumnsDefine {\r\n const row = headerRows[level] as unknown[];\r\n const columns: ColumnsDefine = [];\r\n colEnd = colEnd ?? row.length;\r\n let i = colStart;\r\n while (i < colEnd) {\r\n const title = String(row[i] || `列${i + 1}`);\r\n let span = 1;\r\n while (i + span < colEnd && row[i + span] === title) {\r\n span++;\r\n }\r\n if (level < headerRows.length - 1) {\r\n const subColumns = ExcelImportPlugin.buildColumns(headerRows, i, i + span, level + 1);\r\n if (subColumns.length === 1) {\r\n columns.push(subColumns[0]);\r\n } else {\r\n columns.push({\r\n title,\r\n columns: subColumns,\r\n hideColumnsSubHeader: false\r\n });\r\n }\r\n } else {\r\n columns.push({\r\n field: `col${i}`,\r\n title,\r\n cellType: 'text' as const,\r\n headerType: 'text' as const\r\n });\r\n }\r\n i += span;\r\n }\r\n return columns;\r\n }\r\n\r\n /**\r\n * 解析CSV字符串\r\n */\r\n private async _parseCSVString(text: string, options: ExcelImportOptions): Promise<ImportResult> {\r\n const lines = text.split('\\n').filter(line => line.trim());\r\n\r\n if (lines.length === 0) {\r\n throw new Error('CSV文件为空');\r\n }\r\n\r\n // 解析CSV行(支持自定义分隔符)\r\n const delimiter = options.delimiter || ',';\r\n const parseCSVLine = (line: string): string[] => {\r\n return line.split(delimiter).map(cell => cell.trim().replace(/^\"|\"$/g, ''));\r\n };\r\n\r\n const headerRowCount = 1;\r\n const headerRows = lines.slice(0, headerRowCount).map(parseCSVLine);\r\n const dataRows = lines.slice(headerRowCount);\r\n\r\n const columns = this._buildColumnsFromHeaders(headerRows);\r\n const records: Record<string, unknown>[] = [];\r\n\r\n await this._processBatchRecords(dataRows, options, async (batch: string[]) => {\r\n const batchRecords = batch.map(line => {\r\n const parsedRow = parseCSVLine(line);\r\n const record: Record<string, unknown> = {};\r\n parsedRow.forEach((cell, i) => {\r\n record[`col${i}`] = cell || '';\r\n });\r\n return record;\r\n });\r\n records.push(...batchRecords);\r\n });\r\n if (options.exportData) {\r\n this._exportToJS(columns, records);\r\n }\r\n\r\n return { columns, records };\r\n }\r\n\r\n /**\r\n * 解析JSON字符串\r\n */\r\n private async _parseJSONString(text: string, options: ExcelImportOptions): Promise<ImportResult> {\r\n let jsonData;\r\n\r\n try {\r\n jsonData = JSON.parse(text);\r\n } catch (error) {\r\n throw new Error('JSON文件格式错误');\r\n }\r\n\r\n const result = await this._parseJSONData(jsonData, options);\r\n if (options.exportData) {\r\n this._exportToJS(result.columns, result.records);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * 解析HTML字符串\r\n */\r\n private async _parseHTMLString(text: string, options: ExcelImportOptions): Promise<ImportResult> {\r\n const parser = new DOMParser();\r\n const doc = parser.parseFromString(text, 'text/html');\r\n const table = doc.querySelector('table');\r\n\r\n if (!table) {\r\n throw new Error('HTML文件中未找到表格');\r\n }\r\n\r\n const rows = Array.from(table.querySelectorAll('tr'));\r\n if (rows.length === 0) {\r\n throw new Error('表格中没有数据行');\r\n }\r\n\r\n const headerRowCount = 1;\r\n const headerRows = rows\r\n .slice(0, headerRowCount)\r\n .map(row => Array.from(row.querySelectorAll('th, td')).map(cell => cell.textContent?.trim() || ''));\r\n const dataRows = rows.slice(headerRowCount);\r\n\r\n const columns = this._buildColumnsFromHeaders(headerRows);\r\n const records: Record<string, unknown>[] = [];\r\n\r\n // 分批处理数据行\r\n await this._processBatchRecords(dataRows, options, async (batch: Element[]) => {\r\n const batchRecords = batch.map(row => {\r\n const cells = Array.from(row.querySelectorAll('td')).map(cell => cell.textContent?.trim() || '');\r\n const record: Record<string, unknown> = {};\r\n cells.forEach((cell, i) => {\r\n record[`col${i}`] = cell || '';\r\n });\r\n return record;\r\n });\r\n records.push(...batchRecords);\r\n });\r\n\r\n // 如果启用了导出功能,则导出为JS文件\r\n if (options.exportData) {\r\n this._exportToJS(columns, records);\r\n }\r\n\r\n return { columns, records };\r\n }\r\n\r\n /**\r\n * 解析JSON数据对象\r\n */\r\n private async _parseJSONData(jsonData: unknown[] | object, options: ExcelImportOptions): Promise<ImportResult> {\r\n let result: ImportResult;\r\n\r\n // 如果JSON直接包含columns和records\r\n if (\r\n typeof jsonData === 'object' &&\r\n !Array.isArray(jsonData) &&\r\n jsonData &&\r\n 'columns' in jsonData &&\r\n 'records' in jsonData\r\n ) {\r\n const data = jsonData as { columns: ColumnsDefine; records: Record<string, unknown>[] };\r\n const records: Record<string, unknown>[] = [];\r\n await this._processBatchRecords(data.records, options, async (batch: Record<string, unknown>[]) => {\r\n const batchRecords = batch.map(record => ({ ...record }));\r\n records.push(...batchRecords);\r\n });\r\n result = {\r\n columns: data.columns,\r\n records: records\r\n };\r\n } else if (Array.isArray(jsonData) && jsonData.length > 0) {\r\n const firstRecord = jsonData[0] as Record<string, unknown>;\r\n const columns: ColumnsDefine = Object.keys(firstRecord).map(key => ({\r\n field: key,\r\n title: key,\r\n cellType: 'text' as const,\r\n headerType: 'text' as const\r\n }));\r\n\r\n const records: Record<string, unknown>[] = [];\r\n await this._processBatchRecords(\r\n jsonData as Record<string, unknown>[],\r\n options,\r\n async (batch: Record<string, unknown>[]) => {\r\n const batchRecords = batch.map(record => ({ ...record }));\r\n records.push(...batchRecords);\r\n }\r\n );\r\n\r\n result = { columns, records };\r\n } else {\r\n throw new Error('不支持的JSON格式');\r\n }\r\n\r\n if (options.exportData) {\r\n this._exportToJS(result.columns, result.records);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * 生成JavaScript对象字面量格式的导出内容\r\n */\r\n private static _generateJavaScriptExport(columns: ColumnsDefine, records: Record<string, unknown>[]): string {\r\n // 格式化值,确保正确的缩进\r\n const formatValue = (value: unknown, indent: string = ''): string => {\r\n if (value === null || value === undefined) {\r\n return 'null';\r\n }\r\n if (typeof value === 'string') {\r\n return `'${value.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\")}'`;\r\n }\r\n if (typeof value === 'number' || typeof value === 'boolean') {\r\n return String(value);\r\n }\r\n if (Array.isArray(value)) {\r\n if (value.length === 0) {\r\n return '[]';\r\n }\r\n const items = value.map(item => formatValue(item, indent + ' ')).join(', ');\r\n return `[${items}]`;\r\n }\r\n if (typeof value === 'object') {\r\n const props = Object.entries(value)\r\n .map(([key, val]) => `${indent} ${key}: ${formatValue(val, indent + ' ')}`)\r\n .join(',\\n');\r\n return `{\\n${props}\\n${indent}}`;\r\n }\r\n return String(value);\r\n };\r\n\r\n // 格式化记录对象\r\n const formatRecord = (record: unknown): string => {\r\n const props = Object.entries(record)\r\n .map(([key, value]) => ` ${key}: ${formatValue(value)}`)\r\n .join(',\\n');\r\n return ` {\\n${props}\\n }`;\r\n };\r\n\r\n // 格式化列对象(支持嵌套列)\r\n const formatColumn = (column: unknown, baseIndent: string = ' '): string => {\r\n const props = Object.entries(column)\r\n .map(([key, value]) => {\r\n if (key === 'columns' && Array.isArray(value)) {\r\n // 递归处理嵌套列,增加缩进\r\n const nestedColumns = value.map(col => formatColumn(col, baseIndent + ' ')).join(',\\n');\r\n return `${baseIndent} ${key}: [\\n${nestedColumns}\\n${baseIndent} ]`;\r\n }\r\n return `${baseIndent} ${key}: ${formatValue(value)}`;\r\n })\r\n .join(',\\n');\r\n return `${baseIndent}{\\n${props}\\n${baseIndent}}`;\r\n };\r\n\r\n const columnsStr = columns.map(col => formatColumn(col)).join(',\\n');\r\n const recordsStr = records.map(formatRecord).join(',\\n');\r\n\r\n return `// VTable 数据导出 - JavaScript 对象字面量格式\r\n// 生成时间: ${new Date().toLocaleString()}\r\n\r\nconst vtableData = {\r\n columns: [\r\n${columnsStr}\r\n ],\r\n records: [\r\n${recordsStr}\r\n ]\r\n};\r\n`;\r\n }\r\n\r\n /**\r\n * 导出数据为JavaScript对象字面量格式\r\n */\r\n private _exportToJS(columns: ColumnDefine[], records: Record<string, unknown>[]): void {\r\n const jsContent = ExcelImportPlugin._generateJavaScriptExport(columns, records);\r\n const blob = new Blob([jsContent], { type: 'text/javascript' });\r\n const url = URL.createObjectURL(blob);\r\n const a = document.createElement('a');\r\n a.href = url;\r\n a.download = 'vtable-data.js';\r\n document.body.appendChild(a);\r\n a.click();\r\n setTimeout(() => {\r\n document.body.removeChild(a);\r\n URL.revokeObjectURL(url);\r\n }, 100);\r\n }\r\n\r\n /**\r\n * 分批处理大数据记录,避免UI阻塞\r\n */\r\n private async _processBatchRecords<T>(\r\n records: T[],\r\n options: ExcelImportOptions,\r\n processor: (batch: T[], batchIndex: number) => Promise<void> | void\r\n ): Promise<void> {\r\n if (!options.enableBatchProcessing || records.length <= (options.batchSize || 1000)) {\r\n // 小数据量直接处理\r\n await processor(records, 0);\r\n return;\r\n }\r\n\r\n const batchSize = options.batchSize || 1000;\r\n const totalBatches = Math.ceil(records.length / batchSize);\r\n for (let i = 0; i < totalBatches; i++) {\r\n const start = i * batchSize;\r\n const end = Math.min(start + batchSize, records.length);\r\n const batch = records.slice(start, end);\r\n await processor(batch, i);\r\n // 让出控制权给浏览器,避免长时间阻塞UI\r\n if (i < totalBatches - 1) {\r\n await new Promise(resolve => setTimeout(resolve, options.asyncDelay || 5));\r\n }\r\n }\r\n }\r\n}\r\n"]}
@@ -1,6 +1,6 @@
1
1
  import type { RowObject, RowData } from './translateRowObj';
2
- import type * as VTable from '@visactor/vtable';
3
- export declare const generateAutoFillData: (originalData: RowObject[] | RowData[][], columns: VTable.TYPES.CellInfo[], startRange: {
2
+ import type { TYPES } from '@visactor/vtable';
3
+ export declare const generateAutoFillData: (originalData: RowObject[] | RowData[][], columns: TYPES.CellInfo[], startRange: {
4
4
  startRow: number;
5
5
  startCol: number;
6
6
  endRow: number;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/fillHandleUtils/autoFillHandle.ts"],"names":[],"mappings":"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","file":"autoFillHandle.js","sourcesContent":["/**\n * 生成填充柄自动填充数据,引入big.js是为了处理大数填充的问题,防止溢出,引入lodash为了处理records中值为数字、文本的不同情况\n */\n// @ts-ignore no need check\nimport Big from 'big.js';\nimport isEqual from 'lodash/isEqual';\nimport isNumber from 'lodash/isNumber';\nimport isObject from 'lodash/isObject';\nimport type { RowObject, RowData } from './translateRowObj';\nimport { translateRowArrayToObj, translateRowObjToArray } from './translateRowObj';\nimport type * as VTable from '@visactor/vtable';\n\nconst bigFunc = (a: string | number, b: string | number, func: 'plus' | 'minus' | 'times' | 'div') => {\n if (typeof a !== 'number') {\n a = Number(a);\n }\n if (typeof b !== 'number') {\n b = Number(b);\n }\n if (Number.isNaN(a) || Number.isNaN(b)) {\n throw new Error(`${func}(a, b), a or b is NaN`);\n }\n\n const bigA = new Big(a);\n return bigA[func](b).toNumber();\n};\nconst add = (a: number | string = 0, b: number | string = 0) => bigFunc(a, b, 'plus');\nconst minus = (a: number | string = 0, b: number | string = 0) => bigFunc(a, b, 'minus');\n\n/**\n * 将字符串拆为前缀,数字部分,后缀,方便填充柄的自增/减计算\n * @example\n * splitOnLastNumber('ab12.4c') => ['ab', '12.4', 'c']\n * splitOnLastNumber('ab12c') => ['ab', '12', 'c']\n * splitOnLastNumber('abc') => ['abc']\n * splitOnLastNumber('12abc') => ['','12','abc']\n * @param {string} str\n * @returns {string[]} [prefix, number, suffix]\n */\nfunction splitOnLastNumber(str: string) {\n const regex = /((\\d+)(\\.\\d+)?)(?!.*(\\d+)(\\.\\d+)?)/;\n const match = str.match(regex);\n if (!match || match.index === undefined) {\n return [str];\n } // 无数字时返回原字符串\n\n const index = match.index;\n const number = match[0];\n const prefix = str.slice(0, index);\n const suffix = str.slice(index + number.length);\n\n return [prefix, number, suffix].filter(item => item !== '');\n}\n\n/**\n * 解析字符串为 prefix, number, suffix三个部分,如\"ab12.4c\" 将被解析为{ prefix: 'ab', number: 12.4, suffix: 'c', full: 'ab12.4c' }\n * @param {string} value - 需要解析的字符串\n * @returns {Object} { prefix, number, suffix, full }\n * - prefix: 字符串前缀\n * - number: 字符串中的数字部分,可能为null\n * - suffix: 字符串后缀\n * - full: 原始字符串\n */\nconst parseValue = (value: RowData) => {\n if (typeof value === 'number') {\n return { prefix: '', number: value, full: value };\n }\n const match = splitOnLastNumber(value);\n const numberIndex = match.findIndex(str => {\n return !isNaN(Number(str)) && str !== '' && !isNaN(parseFloat(str)) && isFinite(Number(str));\n });\n if (match.length === 1) {\n if (numberIndex === 0) {\n // \"12\"这种类型字符串\n return { prefix: '', number: Number(match[0]), suffix: '', full: value };\n }\n // \"ab\"这种类型字符串\n return { prefix: value, number: null, suffix: '', full: value };\n } else if (match.length > 1) {\n if (numberIndex === 0) {\n // \"12abc\"这种字符串\n return { prefix: '', number: Number(match[0]), suffix: match[1], full: value };\n }\n // “ab12.3”或者“ab12.3bc”这种字符串\n return { prefix: match[0], number: Number(match[1]), suffix: match?.[2], full: value };\n }\n return { prefix: null, number: null, suffix: null, full: value };\n};\n\n/**\n * VTable模仿excel填充柄\n * @param originalData 表格原始数据,可能为数组形式或者对象形式,比如[[dataIndex1,dataIndex2],[dataIndex1,dataIndex2]],[{dataIndex1,dataIndex2},{dataIndex3,dataIndex4}]\n * @param columns 列信息\n * @param startRange 填充柄选区\n * @param currentEnd 填充柄待填充终点\n * @returns 经填充柄填充后的数据\n */\n\nexport const generateAutoFillData = (\n originalData: RowObject[] | RowData[][],\n columns: VTable.TYPES.CellInfo[],\n startRange: { startRow: number; startCol: number; endRow: number; endCol: number }, // 初始选区 { startRow, startCol, endRow, endCol }\n currentEnd: { row: number; col: number } // 当前拖拽终点 { row, col },\n) => {\n if (!originalData || originalData.length < startRange.endRow - 1) {\n return [];\n }\n // 深拷贝原始数据,并且将行数据转换为数组形式,方便后续处理\n let newData: RowData[][] = [];\n if (Array.isArray(originalData?.[0])) {\n newData = (originalData as RowData[][]).map(row => [...row]);\n } else if (columns.length && isObject(originalData?.[0])) {\n newData = translateRowObjToArray(originalData as RowObject[], columns);\n }\n if (!newData?.length) {\n return originalData;\n }\n\n // 方向计算\n const verticalDelta = currentEnd.row - startRange.endRow;\n const horizontalDelta = currentEnd.col - startRange.endCol;\n const isVertical = Math.abs(verticalDelta) >= Math.abs(horizontalDelta);\n const fillSteps = isVertical ? verticalDelta : horizontalDelta;\n\n // 样本数据提取\n const [sampleStartRow, sampleEndRow] = [startRange.startRow, startRange.endRow].sort((a, b) => a - b);\n const [sampleStartCol, sampleEndCol] = [startRange.startCol, startRange.endCol].sort((a, b) => a - b);\n const sampleValues = [];\n for (let r = sampleStartRow; r <= sampleEndRow; r++) {\n for (let c = sampleStartCol; c <= sampleEndCol; c++) {\n sampleValues.push(newData[r][c]);\n }\n }\n\n // 验证数字序列\n const samples = sampleValues.map(parseValue);\n const validSequence =\n samples.every(s => s.number !== null) &&\n samples.slice(1).every((s, i) => s.prefix === samples[i].prefix) &&\n samples.length < 3 &&\n !(samples.length === 2 && isEqual(samples[0], samples[1]));\n\n // 计算步长\n let step;\n if (samples.length === 1 && samples[0].number !== null) {\n step = 1;\n } else if (validSequence && samples.length > 1) {\n const numbers = samples.map(s => s.number);\n step = minus(numbers[numbers.length - 1], numbers[numbers.length - 2]);\n }\n // 边界检测\n const positionInEdges = (curPos: { row: number; col: number }) => {\n if (isVertical && verticalDelta > 0) {\n return curPos.row <= currentEnd.row;\n } else if (isVertical && verticalDelta < 0) {\n return curPos.row >= currentEnd.row;\n } else if (!isVertical && horizontalDelta > 0) {\n return curPos.col <= currentEnd.col;\n } else if (!isVertical && horizontalDelta < 0) {\n return curPos.col >= currentEnd.col;\n }\n return false;\n };\n\n // 执行填充\n const totalSteps = Math.abs(fillSteps);\n const direction = fillSteps > 0 ? 1 : -1;\n\n const sampLength = samples.length;\n if (samples.length === 1) {\n // 选中单个单元格的填充,有数字直接+1或-1,无数字直接复制文本\n const sample = samples[0];\n for (let i = 1; i <= totalSteps; i++) {\n const pos = {\n row: isVertical ? startRange.endRow + direction * i : startRange.startRow,\n col: isVertical ? startRange.startCol : startRange.endCol + direction * i\n };\n if (pos.row >= 0 && pos.col >= 0 && positionInEdges(pos)) {\n let tempRes = isNumber(sample.number)\n ? `${sample.prefix || ''}${(sample?.number || 0) + (direction > 0 ? i : -i)}${sample.suffix || ''}`\n : sample.full;\n if (isNumber(sample.full)) {\n tempRes = (sample?.number || 0) + (direction > 0 ? i : -i);\n }\n\n newData[pos.row][pos.col] = tempRes; // 直接复制最后一个值\n }\n }\n } else if (samples.length >= 2) {\n for (let i = 1; i <= totalSteps; i++) {\n let sample;\n const pos: { row: number; col: number } = { row: 0, col: 0 };\n if (direction === 1) {\n // 向下、向右填充计算位置和基准值\n pos.row = isVertical ? startRange.endRow + direction * i : startRange.endRow;\n pos.col = isVertical ? startRange.endCol : startRange.endCol + direction * i;\n sample = samples[(i - 1) % sampLength];\n } else {\n // 向上、向左填充计算位置和基准值\n pos.row = isVertical ? startRange.startRow + direction * i : startRange.startRow;\n pos.col = isVertical ? startRange.startCol : startRange.startCol + direction * i;\n sample = samples[Math.abs(sampLength - i) % sampLength];\n }\n if (pos.row >= 0 && pos.col >= 0 && positionInEdges(pos)) {\n let tempRes;\n if (isNumber(sample.full) || (Number(sample.full) === Number(sample.number) && sampLength === 2)) {\n const deltaLength = sampLength + Math.floor((i - 1) / sampLength) * sampLength;\n tempRes = add(sample?.number || 0, direction > 0 ? (step || 1) * deltaLength : -(step || 1) * deltaLength);\n } else {\n tempRes = validSequence\n ? `${sample.prefix || ''}${add(\n sample?.number || 0,\n direction > 0 ? (step || 1) * sampLength : -(step || 1) * sampLength\n )}${sample.suffix || ''}`\n : isNumber(sample?.number)\n ? `${sample.prefix || ''}${add(\n sample?.number || 0,\n direction > 0 ? Math.floor((i - 1) / sampLength) + 1 : -(Math.floor((i - 1) / sampLength) + 1)\n )}${sample.suffix || ''}`\n : sample.full; // 直接复制最后一个值\n }\n newData[pos.row][pos.col] = tempRes;\n }\n }\n }\n\n if (Array.isArray(originalData?.[0])) {\n return newData;\n }\n return translateRowArrayToObj(newData, columns);\n};\n"]}
1
+ {"version":3,"sources":["../src/fillHandleUtils/autoFillHandle.ts"],"names":[],"mappings":";;;;;;AAIA,oDAAyB;AACzB,6DAAqC;AACrC,+DAAuC;AACvC,+DAAuC;AAEvC,uDAAmF;AAGnF,MAAM,OAAO,GAAG,CAAC,CAAkB,EAAE,CAAkB,EAAE,IAAwC,EAAE,EAAE;IACnG,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;QACzB,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;KACf;IACD,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;QACzB,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;KACf;IACD,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;QACtC,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,uBAAuB,CAAC,CAAC;KACjD;IAED,MAAM,IAAI,GAAG,IAAI,gBAAG,CAAC,CAAC,CAAC,CAAC;IACxB,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;AAClC,CAAC,CAAC;AACF,MAAM,GAAG,GAAG,CAAC,IAAqB,CAAC,EAAE,IAAqB,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;AACtF,MAAM,KAAK,GAAG,CAAC,IAAqB,CAAC,EAAE,IAAqB,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;AAYzF,SAAS,iBAAiB,CAAC,GAAW;IACpC,MAAM,KAAK,GAAG,oCAAoC,CAAC;IACnD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC/B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE;QACvC,OAAO,CAAC,GAAG,CAAC,CAAC;KACd;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAEhD,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;AAC9D,CAAC;AAWD,MAAM,UAAU,GAAG,CAAC,KAAc,EAAE,EAAE;IACpC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7B,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;KACnD;IACD,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE;QACxC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/F,CAAC,CAAC,CAAC;IACH,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;QACtB,IAAI,WAAW,KAAK,CAAC,EAAE;YAErB,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;SAC1E;QAED,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;KACjE;SAAM,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;QAC3B,IAAI,WAAW,KAAK,CAAC,EAAE;YAErB,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;SAChF;QAED,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;KACxF;IACD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACnE,CAAC,CAAC;AAWK,MAAM,oBAAoB,GAAG,CAClC,YAAuC,EACvC,OAAyB,EACzB,UAAkF,EAClF,UAAwC,EACxC,EAAE;IACF,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;QAChE,OAAO,EAAE,CAAC;KACX;IAED,IAAI,OAAO,GAAgB,EAAE,CAAC;IAC9B,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAG,CAAC,CAAC,CAAC,EAAE;QACpC,OAAO,GAAI,YAA4B,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;KAC9D;SAAM,IAAI,OAAO,CAAC,MAAM,IAAI,IAAA,kBAAQ,EAAC,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAG,CAAC,CAAC,CAAC,EAAE;QACxD,OAAO,GAAG,IAAA,wCAAsB,EAAC,YAA2B,EAAE,OAAO,CAAC,CAAC;KACxE;IACD,IAAI,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,CAAA,EAAE;QACpB,OAAO,YAAY,CAAC;KACrB;IAGD,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC;IACzD,MAAM,eAAe,GAAG,UAAU,CAAC,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC;IAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IACxE,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,eAAe,CAAC;IAG/D,MAAM,CAAC,cAAc,EAAE,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACtG,MAAM,CAAC,cAAc,EAAE,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACtG,MAAM,YAAY,GAAG,EAAE,CAAC;IACxB,KAAK,IAAI,CAAC,GAAG,cAAc,EAAE,CAAC,IAAI,YAAY,EAAE,CAAC,EAAE,EAAE;QACnD,KAAK,IAAI,CAAC,GAAG,cAAc,EAAE,CAAC,IAAI,YAAY,EAAE,CAAC,EAAE,EAAE;YACnD,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAClC;KACF;IAGD,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC7C,MAAM,aAAa,GACjB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC;QACrC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAChE,OAAO,CAAC,MAAM,GAAG,CAAC;QAClB,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,IAAA,iBAAO,EAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAG7D,IAAI,IAAI,CAAC;IACT,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,EAAE;QACtD,IAAI,GAAG,CAAC,CAAC;KACV;SAAM,IAAI,aAAa,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;QAC9C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;KACxE;IAED,MAAM,eAAe,GAAG,CAAC,MAAoC,EAAE,EAAE;QAC/D,IAAI,UAAU,IAAI,aAAa,GAAG,CAAC,EAAE;YACnC,OAAO,MAAM,CAAC,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC;SACrC;aAAM,IAAI,UAAU,IAAI,aAAa,GAAG,CAAC,EAAE;YAC1C,OAAO,MAAM,CAAC,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC;SACrC;aAAM,IAAI,CAAC,UAAU,IAAI,eAAe,GAAG,CAAC,EAAE;YAC7C,OAAO,MAAM,CAAC,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC;SACrC;aAAM,IAAI,CAAC,UAAU,IAAI,eAAe,GAAG,CAAC,EAAE;YAC7C,OAAO,MAAM,CAAC,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC;SACrC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAGF,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEzC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAClC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;QAExB,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC,EAAE,EAAE;YACpC,MAAM,GAAG,GAAG;gBACV,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ;gBACzE,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,SAAS,GAAG,CAAC;aAC1E,CAAC;YACF,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE;gBACxD,IAAI,OAAO,GAAG,IAAA,kBAAQ,EAAC,MAAM,CAAC,MAAM,CAAC;oBACnC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,GAAG,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,KAAI,CAAC,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE;oBACnG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;gBAChB,IAAI,IAAA,kBAAQ,EAAC,MAAM,CAAC,IAAI,CAAC,EAAE;oBACzB,OAAO,GAAG,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,KAAI,CAAC,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC5D;gBAED,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;aACrC;SACF;KACF;SAAM,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE;QAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC,EAAE,EAAE;YACpC,IAAI,MAAM,CAAC;YACX,MAAM,GAAG,GAAiC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;YAC7D,IAAI,SAAS,KAAK,CAAC,EAAE;gBAEnB,GAAG,CAAC,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;gBAC7E,GAAG,CAAC,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,SAAS,GAAG,CAAC,CAAC;gBAC7E,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC;aACxC;iBAAM;gBAEL,GAAG,CAAC,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC;gBACjF,GAAG,CAAC,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,GAAG,SAAS,GAAG,CAAC,CAAC;gBACjF,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC;aACzD;YACD,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE;gBACxD,IAAI,OAAO,CAAC;gBACZ,IAAI,IAAA,kBAAQ,EAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE;oBAChG,MAAM,WAAW,GAAG,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,UAAU,CAAC;oBAC/E,OAAO,GAAG,GAAG,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,KAAI,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC;iBAC5G;qBAAM;oBACL,OAAO,GAAG,aAAa;wBACrB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,GAAG,GAAG,CAC1B,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,KAAI,CAAC,EACnB,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,UAAU,CACrE,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE;wBAC3B,CAAC,CAAC,IAAA,kBAAQ,EAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,CAAC;4BAC1B,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,GAAG,GAAG,CAC1B,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,KAAI,CAAC,EACnB,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAC/F,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE;4BAC3B,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;iBACjB;gBACD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;aACrC;SACF;KACF;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAG,CAAC,CAAC,CAAC,EAAE;QACpC,OAAO,OAAO,CAAC;KAChB;IACD,OAAO,IAAA,wCAAsB,EAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAClD,CAAC,CAAC;AApIW,QAAA,oBAAoB,wBAoI/B","file":"autoFillHandle.js","sourcesContent":["/**\n * 生成填充柄自动填充数据,引入big.js是为了处理大数填充的问题,防止溢出,引入lodash为了处理records中值为数字、文本的不同情况\n */\n// @ts-ignore no need check\nimport Big from 'big.js';\nimport isEqual from 'lodash/isEqual';\nimport isNumber from 'lodash/isNumber';\nimport isObject from 'lodash/isObject';\nimport type { RowObject, RowData } from './translateRowObj';\nimport { translateRowArrayToObj, translateRowObjToArray } from './translateRowObj';\nimport type { TYPES } from '@visactor/vtable';\n\nconst bigFunc = (a: string | number, b: string | number, func: 'plus' | 'minus' | 'times' | 'div') => {\n if (typeof a !== 'number') {\n a = Number(a);\n }\n if (typeof b !== 'number') {\n b = Number(b);\n }\n if (Number.isNaN(a) || Number.isNaN(b)) {\n throw new Error(`${func}(a, b), a or b is NaN`);\n }\n\n const bigA = new Big(a);\n return bigA[func](b).toNumber();\n};\nconst add = (a: number | string = 0, b: number | string = 0) => bigFunc(a, b, 'plus');\nconst minus = (a: number | string = 0, b: number | string = 0) => bigFunc(a, b, 'minus');\n\n/**\n * 将字符串拆为前缀,数字部分,后缀,方便填充柄的自增/减计算\n * @example\n * splitOnLastNumber('ab12.4c') => ['ab', '12.4', 'c']\n * splitOnLastNumber('ab12c') => ['ab', '12', 'c']\n * splitOnLastNumber('abc') => ['abc']\n * splitOnLastNumber('12abc') => ['','12','abc']\n * @param {string} str\n * @returns {string[]} [prefix, number, suffix]\n */\nfunction splitOnLastNumber(str: string) {\n const regex = /((\\d+)(\\.\\d+)?)(?!.*(\\d+)(\\.\\d+)?)/;\n const match = str.match(regex);\n if (!match || match.index === undefined) {\n return [str];\n } // 无数字时返回原字符串\n\n const index = match.index;\n const number = match[0];\n const prefix = str.slice(0, index);\n const suffix = str.slice(index + number.length);\n\n return [prefix, number, suffix].filter(item => item !== '');\n}\n\n/**\n * 解析字符串为 prefix, number, suffix三个部分,如\"ab12.4c\" 将被解析为{ prefix: 'ab', number: 12.4, suffix: 'c', full: 'ab12.4c' }\n * @param {string} value - 需要解析的字符串\n * @returns {Object} { prefix, number, suffix, full }\n * - prefix: 字符串前缀\n * - number: 字符串中的数字部分,可能为null\n * - suffix: 字符串后缀\n * - full: 原始字符串\n */\nconst parseValue = (value: RowData) => {\n if (typeof value === 'number') {\n return { prefix: '', number: value, full: value };\n }\n const match = splitOnLastNumber(value);\n const numberIndex = match.findIndex(str => {\n return !isNaN(Number(str)) && str !== '' && !isNaN(parseFloat(str)) && isFinite(Number(str));\n });\n if (match.length === 1) {\n if (numberIndex === 0) {\n // \"12\"这种类型字符串\n return { prefix: '', number: Number(match[0]), suffix: '', full: value };\n }\n // \"ab\"这种类型字符串\n return { prefix: value, number: null, suffix: '', full: value };\n } else if (match.length > 1) {\n if (numberIndex === 0) {\n // \"12abc\"这种字符串\n return { prefix: '', number: Number(match[0]), suffix: match[1], full: value };\n }\n // “ab12.3”或者“ab12.3bc”这种字符串\n return { prefix: match[0], number: Number(match[1]), suffix: match?.[2], full: value };\n }\n return { prefix: null, number: null, suffix: null, full: value };\n};\n\n/**\n * VTable模仿excel填充柄\n * @param originalData 表格原始数据,可能为数组形式或者对象形式,比如[[dataIndex1,dataIndex2],[dataIndex1,dataIndex2]],[{dataIndex1,dataIndex2},{dataIndex3,dataIndex4}]\n * @param columns 列信息\n * @param startRange 填充柄选区\n * @param currentEnd 填充柄待填充终点\n * @returns 经填充柄填充后的数据\n */\n\nexport const generateAutoFillData = (\n originalData: RowObject[] | RowData[][],\n columns: TYPES.CellInfo[],\n startRange: { startRow: number; startCol: number; endRow: number; endCol: number }, // 初始选区 { startRow, startCol, endRow, endCol }\n currentEnd: { row: number; col: number } // 当前拖拽终点 { row, col },\n) => {\n if (!originalData || originalData.length < startRange.endRow - 1) {\n return [];\n }\n // 深拷贝原始数据,并且将行数据转换为数组形式,方便后续处理\n let newData: RowData[][] = [];\n if (Array.isArray(originalData?.[0])) {\n newData = (originalData as RowData[][]).map(row => [...row]);\n } else if (columns.length && isObject(originalData?.[0])) {\n newData = translateRowObjToArray(originalData as RowObject[], columns);\n }\n if (!newData?.length) {\n return originalData;\n }\n\n // 方向计算\n const verticalDelta = currentEnd.row - startRange.endRow;\n const horizontalDelta = currentEnd.col - startRange.endCol;\n const isVertical = Math.abs(verticalDelta) >= Math.abs(horizontalDelta);\n const fillSteps = isVertical ? verticalDelta : horizontalDelta;\n\n // 样本数据提取\n const [sampleStartRow, sampleEndRow] = [startRange.startRow, startRange.endRow].sort((a, b) => a - b);\n const [sampleStartCol, sampleEndCol] = [startRange.startCol, startRange.endCol].sort((a, b) => a - b);\n const sampleValues = [];\n for (let r = sampleStartRow; r <= sampleEndRow; r++) {\n for (let c = sampleStartCol; c <= sampleEndCol; c++) {\n sampleValues.push(newData[r][c]);\n }\n }\n\n // 验证数字序列\n const samples = sampleValues.map(parseValue);\n const validSequence =\n samples.every(s => s.number !== null) &&\n samples.slice(1).every((s, i) => s.prefix === samples[i].prefix) &&\n samples.length < 3 &&\n !(samples.length === 2 && isEqual(samples[0], samples[1]));\n\n // 计算步长\n let step;\n if (samples.length === 1 && samples[0].number !== null) {\n step = 1;\n } else if (validSequence && samples.length > 1) {\n const numbers = samples.map(s => s.number);\n step = minus(numbers[numbers.length - 1], numbers[numbers.length - 2]);\n }\n // 边界检测\n const positionInEdges = (curPos: { row: number; col: number }) => {\n if (isVertical && verticalDelta > 0) {\n return curPos.row <= currentEnd.row;\n } else if (isVertical && verticalDelta < 0) {\n return curPos.row >= currentEnd.row;\n } else if (!isVertical && horizontalDelta > 0) {\n return curPos.col <= currentEnd.col;\n } else if (!isVertical && horizontalDelta < 0) {\n return curPos.col >= currentEnd.col;\n }\n return false;\n };\n\n // 执行填充\n const totalSteps = Math.abs(fillSteps);\n const direction = fillSteps > 0 ? 1 : -1;\n\n const sampLength = samples.length;\n if (samples.length === 1) {\n // 选中单个单元格的填充,有数字直接+1或-1,无数字直接复制文本\n const sample = samples[0];\n for (let i = 1; i <= totalSteps; i++) {\n const pos = {\n row: isVertical ? startRange.endRow + direction * i : startRange.startRow,\n col: isVertical ? startRange.startCol : startRange.endCol + direction * i\n };\n if (pos.row >= 0 && pos.col >= 0 && positionInEdges(pos)) {\n let tempRes = isNumber(sample.number)\n ? `${sample.prefix || ''}${(sample?.number || 0) + (direction > 0 ? i : -i)}${sample.suffix || ''}`\n : sample.full;\n if (isNumber(sample.full)) {\n tempRes = (sample?.number || 0) + (direction > 0 ? i : -i);\n }\n\n newData[pos.row][pos.col] = tempRes; // 直接复制最后一个值\n }\n }\n } else if (samples.length >= 2) {\n for (let i = 1; i <= totalSteps; i++) {\n let sample;\n const pos: { row: number; col: number } = { row: 0, col: 0 };\n if (direction === 1) {\n // 向下、向右填充计算位置和基准值\n pos.row = isVertical ? startRange.endRow + direction * i : startRange.endRow;\n pos.col = isVertical ? startRange.endCol : startRange.endCol + direction * i;\n sample = samples[(i - 1) % sampLength];\n } else {\n // 向上、向左填充计算位置和基准值\n pos.row = isVertical ? startRange.startRow + direction * i : startRange.startRow;\n pos.col = isVertical ? startRange.startCol : startRange.startCol + direction * i;\n sample = samples[Math.abs(sampLength - i) % sampLength];\n }\n if (pos.row >= 0 && pos.col >= 0 && positionInEdges(pos)) {\n let tempRes;\n if (isNumber(sample.full) || (Number(sample.full) === Number(sample.number) && sampLength === 2)) {\n const deltaLength = sampLength + Math.floor((i - 1) / sampLength) * sampLength;\n tempRes = add(sample?.number || 0, direction > 0 ? (step || 1) * deltaLength : -(step || 1) * deltaLength);\n } else {\n tempRes = validSequence\n ? `${sample.prefix || ''}${add(\n sample?.number || 0,\n direction > 0 ? (step || 1) * sampLength : -(step || 1) * sampLength\n )}${sample.suffix || ''}`\n : isNumber(sample?.number)\n ? `${sample.prefix || ''}${add(\n sample?.number || 0,\n direction > 0 ? Math.floor((i - 1) / sampLength) + 1 : -(Math.floor((i - 1) / sampLength) + 1)\n )}${sample.suffix || ''}`\n : sample.full; // 直接复制最后一个值\n }\n newData[pos.row][pos.col] = tempRes;\n }\n }\n }\n\n if (Array.isArray(originalData?.[0])) {\n return newData;\n }\n return translateRowArrayToObj(newData, columns);\n};\n"]}
@@ -1,5 +1,5 @@
1
- import type * as VTable from '@visactor/vtable';
1
+ import type { TYPES } from '@visactor/vtable';
2
2
  export type RowData = number | string;
3
3
  export type RowObject = Record<string, RowData>;
4
- export declare function translateRowObjToArray(dataSource: RowObject[], columns: VTable.TYPES.CellInfo[]): RowData[][];
5
- export declare function translateRowArrayToObj(dataSource: RowData[][], columns: VTable.TYPES.CellInfo[]): RowObject[];
4
+ export declare function translateRowObjToArray(dataSource: RowObject[], columns: TYPES.CellInfo[]): RowData[][];
5
+ export declare function translateRowArrayToObj(dataSource: RowData[][], columns: TYPES.CellInfo[]): RowObject[];
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/fillHandleUtils/translateRowObj.ts"],"names":[],"mappings":";;;AAMA,SAAgB,sBAAsB,CAAC,UAAuB,EAAE,OAAgC;IAC9F,OAAO,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QAC3B,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,KAAe,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAND,wDAMC;AAKD,SAAgB,sBAAsB,CAAC,UAAuB,EAAE,OAAgC;IAC9F,OAAO,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QAC3B,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;YACxC,GAAG,CAAC,GAAG,CAAC,KAAe,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;YACvC,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,EAAe,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;AACL,CAAC;AAPD,wDAOC","file":"translateRowObj.js","sourcesContent":["import type * as VTable from '@visactor/vtable';\nexport type RowData = number | string;\nexport type RowObject = Record<string, RowData>;\n/**\n * 将 dataSource中的{field1:xx1,field2:xx2,field3:xx3} 转换成 [xx1,xx2,xx3]\n */\nexport function translateRowObjToArray(dataSource: RowObject[], columns: VTable.TYPES.CellInfo[]) {\n return dataSource.map(item => {\n return columns.map(column => {\n return item[column.field as string];\n });\n });\n}\n\n/**\n * 将 dataSource中的[xx1,xx2,xx3] 转换成 {field1:xx1,field2:xx2,field3:xx3}\n */\nexport function translateRowArrayToObj(dataSource: RowData[][], columns: VTable.TYPES.CellInfo[]) {\n return dataSource.map(item => {\n return columns.reduce((pre, cur, index) => {\n pre[cur.field as string] = item[index];\n return pre;\n }, {} as RowObject);\n });\n}\n"]}
1
+ {"version":3,"sources":["../src/fillHandleUtils/translateRowObj.ts"],"names":[],"mappings":";;;AAMA,SAAgB,sBAAsB,CAAC,UAAuB,EAAE,OAAyB;IACvF,OAAO,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QAC3B,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,KAAe,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAND,wDAMC;AAKD,SAAgB,sBAAsB,CAAC,UAAuB,EAAE,OAAyB;IACvF,OAAO,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QAC3B,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;YACxC,GAAG,CAAC,GAAG,CAAC,KAAe,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;YACvC,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,EAAe,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;AACL,CAAC;AAPD,wDAOC","file":"translateRowObj.js","sourcesContent":["import type { TYPES } from '@visactor/vtable';\nexport type RowData = number | string;\nexport type RowObject = Record<string, RowData>;\n/**\n * 将 dataSource中的{field1:xx1,field2:xx2,field3:xx3} 转换成 [xx1,xx2,xx3]\n */\nexport function translateRowObjToArray(dataSource: RowObject[], columns: TYPES.CellInfo[]) {\n return dataSource.map(item => {\n return columns.map(column => {\n return item[column.field as string];\n });\n });\n}\n\n/**\n * 将 dataSource中的[xx1,xx2,xx3] 转换成 {field1:xx1,field2:xx2,field3:xx3}\n */\nexport function translateRowArrayToObj(dataSource: RowData[][], columns: TYPES.CellInfo[]) {\n return dataSource.map(item => {\n return columns.reduce((pre, cur, index) => {\n pre[cur.field as string] = item[index];\n return pre;\n }, {} as RowObject);\n });\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type * as VTable from '@visactor/vtable';
1
+ import type { ListTable, PivotTable } from '@visactor/vtable';
2
2
  import type { FilterStateManager } from './filter-state-manager';
3
3
  export declare class ConditionFilter {
4
4
  private table;
@@ -12,7 +12,7 @@ export declare class ConditionFilter {
12
12
  private currentCategory;
13
13
  private operators;
14
14
  private categories;
15
- constructor(table: VTable.ListTable | VTable.PivotTable, filterStateManager: FilterStateManager);
15
+ constructor(table: ListTable | PivotTable, filterStateManager: FilterStateManager);
16
16
  setSelectedField(fieldId: string | number): void;
17
17
  private updateOperatorOptions;
18
18
  private handleCategoryChange;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/filter/condition-filter.ts"],"names":[],"mappings":"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","file":"condition-filter.js","sourcesContent":["import type * as VTable from '@visactor/vtable';\nimport type { FilterStateManager } from './filter-state-manager';\nimport { applyStyles, filterStyles, createElement } from './styles';\nimport type { FilterOperator, OperatorOption } from './types';\nimport { FilterActionType, FilterOperatorCategory } from './types';\n\n/**\n * 按条件筛选组件\n */\nexport class ConditionFilter {\n private table: VTable.ListTable | VTable.PivotTable;\n private filterStateManager: FilterStateManager;\n private filterByConditionPanel: HTMLElement;\n private selectedField: string | number;\n private operatorSelect: HTMLSelectElement;\n private valueInput: HTMLInputElement;\n private valueInputMax: HTMLInputElement;\n private categorySelect: HTMLSelectElement;\n private currentCategory: FilterOperatorCategory = FilterOperatorCategory.ALL;\n\n // 按分类组织的操作符选项\n private operators: OperatorOption[] = [\n // 通用操作符 (全部分类中显示)\n { value: 'equals', label: '等于', category: FilterOperatorCategory.ALL },\n { value: 'notEquals', label: '不等于', category: FilterOperatorCategory.ALL },\n\n // 数值操作符\n { value: 'equals', label: '等于', category: FilterOperatorCategory.NUMBER },\n { value: 'notEquals', label: '不等于', category: FilterOperatorCategory.NUMBER },\n { value: 'greaterThan', label: '大于', category: FilterOperatorCategory.NUMBER },\n { value: 'lessThan', label: '小于', category: FilterOperatorCategory.NUMBER },\n { value: 'greaterThanOrEqual', label: '大于等于', category: FilterOperatorCategory.NUMBER },\n { value: 'lessThanOrEqual', label: '小于等于', category: FilterOperatorCategory.NUMBER },\n { value: 'between', label: '介于', category: FilterOperatorCategory.NUMBER },\n { value: 'notBetween', label: '不介于', category: FilterOperatorCategory.NUMBER },\n\n // 文本操作符\n { value: 'equals', label: '等于', category: FilterOperatorCategory.TEXT },\n { value: 'notEquals', label: '不等于', category: FilterOperatorCategory.TEXT },\n { value: 'contains', label: '包含', category: FilterOperatorCategory.TEXT },\n { value: 'notContains', label: '不包含', category: FilterOperatorCategory.TEXT },\n { value: 'startsWith', label: '开头是', category: FilterOperatorCategory.TEXT },\n { value: 'notStartsWith', label: '开头不是', category: FilterOperatorCategory.TEXT },\n { value: 'endsWith', label: '结尾是', category: FilterOperatorCategory.TEXT },\n { value: 'notEndsWith', label: '结尾不是', category: FilterOperatorCategory.TEXT },\n\n // 颜色操作符\n { value: 'equals', label: '等于', category: FilterOperatorCategory.COLOR },\n { value: 'notEquals', label: '不等于', category: FilterOperatorCategory.COLOR },\n\n // 复选框操作符\n { value: 'isChecked', label: '已选中', category: FilterOperatorCategory.CHECKBOX },\n { value: 'isUnchecked', label: '未选中', category: FilterOperatorCategory.CHECKBOX },\n\n // 单选框操作符\n { value: 'isChecked', label: '已选中', category: FilterOperatorCategory.RADIO },\n { value: 'isUnchecked', label: '未选中', category: FilterOperatorCategory.RADIO }\n ];\n\n // 分类下拉选项\n private categories = [\n { value: FilterOperatorCategory.ALL, label: '全部' },\n { value: FilterOperatorCategory.TEXT, label: '文本' },\n { value: FilterOperatorCategory.NUMBER, label: '数值' },\n { value: FilterOperatorCategory.COLOR, label: '颜色' },\n { value: FilterOperatorCategory.CHECKBOX, label: '复选框' },\n { value: FilterOperatorCategory.RADIO, label: '单选框' }\n ];\n\n constructor(table: VTable.ListTable | VTable.PivotTable, filterStateManager: FilterStateManager) {\n this.table = table;\n this.filterStateManager = filterStateManager;\n }\n\n setSelectedField(fieldId: string | number): void {\n this.selectedField = fieldId;\n this.updateOperatorOptions();\n this.loadCurrentFilterState();\n }\n\n /**\n * 更新操作符下拉选项\n */\n private updateOperatorOptions(): void {\n if (!this.operatorSelect) {\n return;\n }\n this.operatorSelect.innerHTML = '';\n let filteredOperators: OperatorOption[];\n\n if (this.currentCategory === FilterOperatorCategory.ALL) {\n // 当选择\"全部\"时,收集所有不重复的操作符\n const uniqueOperators = new Map<string, OperatorOption>();\n this.operators.forEach(op => {\n if (!uniqueOperators.has(op.value)) {\n uniqueOperators.set(op.value, op);\n }\n });\n filteredOperators = Array.from(uniqueOperators.values());\n } else {\n // 其他类别正常筛选\n filteredOperators = this.operators.filter(op => op.category === this.currentCategory);\n }\n\n // 添加新选项\n filteredOperators.forEach(op => {\n const option = document.createElement('option');\n option.value = op.value;\n option.textContent = op.label;\n this.operatorSelect.appendChild(option);\n });\n }\n\n private handleCategoryChange(): void {\n if (!this.categorySelect) {\n return;\n }\n\n this.currentCategory = this.categorySelect.value as FilterOperatorCategory;\n this.updateOperatorOptions();\n\n // 分类切换后也需要同步UI状态\n this.syncUIState();\n }\n\n /**\n * 加载当前的筛选状态\n */\n private loadCurrentFilterState(): void {\n const filter = this.filterStateManager.getFilterState(this.selectedField);\n\n if (filter && filter.type === 'byCondition') {\n // 设置操作符\n if (filter.operator && this.operatorSelect) {\n this.operatorSelect.value = filter.operator;\n }\n\n // 设置条件值\n if (filter.condition !== undefined && this.valueInput) {\n if (Array.isArray(filter.condition)) {\n this.valueInput.value = String(filter.condition[0]);\n if (this.valueInputMax) {\n this.valueInputMax.value = String(filter.condition[1]);\n }\n } else {\n this.valueInput.value = String(filter.condition);\n if (this.valueInputMax) {\n this.valueInputMax.value = '';\n }\n }\n }\n\n // 同步UI状态:根据当前操作符显示/隐藏范围输入框\n this.syncUIState();\n } else {\n // 重置为默认值\n this.reset();\n }\n }\n\n /**\n * 重置筛选条件到默认状态\n */\n reset(): void {\n // 重置操作符选择\n if (this.operatorSelect) {\n this.operatorSelect.selectedIndex = 0;\n }\n\n // 重置所有输入框\n if (this.valueInput) {\n this.valueInput.value = '';\n this.valueInput.placeholder = '请输入筛选值';\n }\n\n if (this.valueInputMax) {\n this.valueInputMax.value = '';\n }\n\n // 重置分类选择\n this.currentCategory = FilterOperatorCategory.ALL;\n if (this.categorySelect) {\n this.categorySelect.value = FilterOperatorCategory.ALL;\n }\n\n // 更新操作符选项\n this.updateOperatorOptions();\n\n // 同步UI状态\n this.syncUIState();\n }\n\n /**\n * 同步UI状态:根据当前选择的操作符调整UI显示\n */\n private syncUIState(): void {\n if (!this.operatorSelect || !this.valueInput) {\n return;\n }\n\n const selectedOperator = this.operatorSelect.value as FilterOperator;\n const andLabel = this.valueInput.nextElementSibling as HTMLElement;\n\n if (this.isRangeOperator(selectedOperator)) {\n // 显示范围输入相关UI\n this.valueInput.placeholder = '最小值';\n if (this.valueInputMax) {\n this.valueInputMax.style.display = 'inline-block';\n }\n if (andLabel) {\n andLabel.style.display = 'inline-block';\n }\n } else {\n // 隐藏范围输入相关UI\n this.valueInput.placeholder = '请输入筛选值';\n if (this.valueInputMax) {\n this.valueInputMax.style.display = 'none';\n }\n if (andLabel) {\n andLabel.style.display = 'none';\n }\n }\n }\n\n private isBooleanOperator(operator: FilterOperator): boolean {\n const booleanCondition = ['isChecked', 'isUnchecked'];\n return booleanCondition.includes(operator);\n }\n\n private isRangeOperator(operator: FilterOperator): boolean {\n return operator === 'between' || operator === 'notBetween';\n }\n\n /**\n * 应用筛选条件\n */\n applyFilter(fieldId: string | number = this.selectedField): void {\n if (!this.operatorSelect || !this.valueInput) {\n return;\n }\n\n const operator = this.operatorSelect?.value as FilterOperator;\n let conditionValue: any = this.valueInput?.value;\n\n // 根据所选操作符和分类尝试转换输入值\n if (this.currentCategory === FilterOperatorCategory.NUMBER) {\n conditionValue = parseFloat(conditionValue);\n if (isNaN(conditionValue)) {\n console.warn('请输入有效的数字');\n return;\n }\n }\n\n // 处理范围操作符的双值输入\n if (this.isRangeOperator(operator)) {\n const minValue = conditionValue;\n let maxValue: string | number = this.valueInputMax.value.trim();\n\n // 尝试将最大值也转换为数字\n if (this.currentCategory === FilterOperatorCategory.NUMBER) {\n const numMaxValue = parseFloat(maxValue);\n if (!isNaN(numMaxValue)) {\n maxValue = numMaxValue;\n } else {\n console.warn('请输入有效的最大值');\n return;\n }\n }\n\n // 使用数组形式传递范围值\n conditionValue = [minValue, maxValue];\n }\n\n if (!conditionValue && conditionValue !== false && conditionValue !== 0 && !this.isBooleanOperator(operator)) {\n this.clearFilter(fieldId);\n return;\n }\n\n // TODO:处理单元格颜色和字体颜色的筛选\n\n this.filterStateManager.dispatch({\n type: FilterActionType.APPLY_FILTERS,\n payload: {\n field: fieldId,\n type: 'byCondition',\n operator,\n condition: conditionValue,\n enable: true\n }\n });\n\n this.hide();\n }\n\n /**\n * 清除筛选\n */\n clearFilter(fieldId: string | number): void {\n this.filterStateManager.dispatch({\n type: FilterActionType.REMOVE_FILTER,\n payload: {\n field: fieldId\n }\n });\n\n this.hide();\n }\n\n /**\n * 渲染条件筛选面板\n */\n render(container: HTMLElement): void {\n // 按条件筛选面板\n this.filterByConditionPanel = document.createElement('div');\n applyStyles(this.filterByConditionPanel, filterStyles.filterPanel);\n\n // 条件选择区域\n const conditionContainer = document.createElement('div');\n applyStyles(conditionContainer, filterStyles.conditionContainer);\n\n // 分类选择下拉框\n const categoryLabel = createElement('label', {}, ['筛选类型:']);\n applyStyles(categoryLabel, filterStyles.formLabel);\n\n this.categorySelect = createElement('select') as HTMLSelectElement;\n applyStyles(this.categorySelect, filterStyles.operatorSelect);\n\n // 添加分类选项\n this.categories.forEach(category => {\n const option = document.createElement('option');\n option.value = category.value;\n option.textContent = category.label;\n this.categorySelect.appendChild(option);\n });\n\n // 操作符选择下拉框\n const operatorLabel = createElement('label', {}, ['筛选条件:']);\n applyStyles(operatorLabel, filterStyles.formLabel);\n\n this.operatorSelect = createElement('select') as HTMLSelectElement;\n applyStyles(this.operatorSelect, filterStyles.operatorSelect);\n\n // 条件值输入框\n const valueLabel = createElement('label', {}, ['筛选值:']);\n applyStyles(valueLabel, filterStyles.formLabel);\n\n // 一个容器来包装两个输入框和\"和\"字\n const rangeInputContainer = createElement('div');\n applyStyles(rangeInputContainer, filterStyles.rangeInputContainer);\n\n this.valueInput = createElement('input', {\n type: 'text',\n placeholder: '请输入筛选值'\n }) as HTMLInputElement;\n applyStyles(this.valueInput, filterStyles.searchInput);\n\n // \"和\"字标签\n const andLabel = createElement('span', {}, ['和']);\n applyStyles(andLabel, filterStyles.addLabel);\n andLabel.style.display = 'none'; // 默认隐藏\n\n // 范围筛选的最大值输入框\n this.valueInputMax = createElement('input', {\n type: 'text',\n placeholder: '最大值'\n }) as HTMLInputElement;\n applyStyles(this.valueInputMax, filterStyles.searchInput);\n this.valueInputMax.style.display = 'none'; // 默认隐藏\n\n // 将输入框和\"和\"字添加到容器中\n rangeInputContainer.appendChild(this.valueInput);\n rangeInputContainer.appendChild(andLabel);\n rangeInputContainer.appendChild(this.valueInputMax);\n\n // 将元素添加到容器中\n conditionContainer.appendChild(categoryLabel);\n conditionContainer.appendChild(this.categorySelect);\n conditionContainer.appendChild(operatorLabel);\n conditionContainer.appendChild(this.operatorSelect);\n conditionContainer.appendChild(valueLabel);\n conditionContainer.appendChild(rangeInputContainer);\n\n this.filterByConditionPanel.appendChild(conditionContainer);\n container.appendChild(this.filterByConditionPanel);\n\n // 默认隐藏\n this.hide();\n\n // 初始化操作符选项\n this.updateOperatorOptions();\n this.bindEvents();\n }\n\n /**\n * 绑定事件\n */\n private bindEvents(): void {\n // 输入框回车事件\n this.valueInput.addEventListener('keypress', event => {\n if (event.key === 'Enter') {\n this.applyFilter();\n }\n });\n\n // 最大值输入框回车事件\n this.valueInputMax.addEventListener('keypress', event => {\n if (event.key === 'Enter') {\n this.applyFilter();\n }\n });\n\n // 分类切换事件\n this.categorySelect.addEventListener('change', () => {\n this.handleCategoryChange();\n });\n\n // 操作符切换事件\n this.operatorSelect.addEventListener('change', () => {\n const selectedOperator = this.operatorSelect.value as FilterOperator;\n const andLabel = this.valueInput.nextElementSibling as HTMLElement;\n\n if (this.isRangeOperator(selectedOperator)) {\n this.valueInput.placeholder = '最小值';\n this.valueInputMax.style.display = 'inline-block';\n andLabel.style.display = 'inline-block';\n } else {\n this.valueInput.placeholder = '请输入筛选值';\n this.valueInputMax.style.display = 'none';\n andLabel.style.display = 'none';\n }\n });\n }\n\n /**\n * 显示筛选面板\n */\n show(): void {\n if (this.filterByConditionPanel) {\n this.filterByConditionPanel.style.display = 'block';\n this.loadCurrentFilterState();\n }\n }\n\n /**\n * 隐藏筛选面板\n */\n hide(): void {\n if (this.filterByConditionPanel) {\n this.filterByConditionPanel.style.display = 'none';\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/filter/condition-filter.ts"],"names":[],"mappings":"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","file":"condition-filter.js","sourcesContent":["import type { ListTable, PivotTable } from '@visactor/vtable';\nimport type { FilterStateManager } from './filter-state-manager';\nimport { applyStyles, filterStyles, createElement } from './styles';\nimport type { FilterOperator, OperatorOption } from './types';\nimport { FilterActionType, FilterOperatorCategory } from './types';\n\n/**\n * 按条件筛选组件\n */\nexport class ConditionFilter {\n private table: ListTable | PivotTable;\n private filterStateManager: FilterStateManager;\n private filterByConditionPanel: HTMLElement;\n private selectedField: string | number;\n private operatorSelect: HTMLSelectElement;\n private valueInput: HTMLInputElement;\n private valueInputMax: HTMLInputElement;\n private categorySelect: HTMLSelectElement;\n private currentCategory: FilterOperatorCategory = FilterOperatorCategory.ALL;\n\n // 按分类组织的操作符选项\n private operators: OperatorOption[] = [\n // 通用操作符 (全部分类中显示)\n { value: 'equals', label: '等于', category: FilterOperatorCategory.ALL },\n { value: 'notEquals', label: '不等于', category: FilterOperatorCategory.ALL },\n\n // 数值操作符\n { value: 'equals', label: '等于', category: FilterOperatorCategory.NUMBER },\n { value: 'notEquals', label: '不等于', category: FilterOperatorCategory.NUMBER },\n { value: 'greaterThan', label: '大于', category: FilterOperatorCategory.NUMBER },\n { value: 'lessThan', label: '小于', category: FilterOperatorCategory.NUMBER },\n { value: 'greaterThanOrEqual', label: '大于等于', category: FilterOperatorCategory.NUMBER },\n { value: 'lessThanOrEqual', label: '小于等于', category: FilterOperatorCategory.NUMBER },\n { value: 'between', label: '介于', category: FilterOperatorCategory.NUMBER },\n { value: 'notBetween', label: '不介于', category: FilterOperatorCategory.NUMBER },\n\n // 文本操作符\n { value: 'equals', label: '等于', category: FilterOperatorCategory.TEXT },\n { value: 'notEquals', label: '不等于', category: FilterOperatorCategory.TEXT },\n { value: 'contains', label: '包含', category: FilterOperatorCategory.TEXT },\n { value: 'notContains', label: '不包含', category: FilterOperatorCategory.TEXT },\n { value: 'startsWith', label: '开头是', category: FilterOperatorCategory.TEXT },\n { value: 'notStartsWith', label: '开头不是', category: FilterOperatorCategory.TEXT },\n { value: 'endsWith', label: '结尾是', category: FilterOperatorCategory.TEXT },\n { value: 'notEndsWith', label: '结尾不是', category: FilterOperatorCategory.TEXT },\n\n // 颜色操作符\n { value: 'equals', label: '等于', category: FilterOperatorCategory.COLOR },\n { value: 'notEquals', label: '不等于', category: FilterOperatorCategory.COLOR },\n\n // 复选框操作符\n { value: 'isChecked', label: '已选中', category: FilterOperatorCategory.CHECKBOX },\n { value: 'isUnchecked', label: '未选中', category: FilterOperatorCategory.CHECKBOX },\n\n // 单选框操作符\n { value: 'isChecked', label: '已选中', category: FilterOperatorCategory.RADIO },\n { value: 'isUnchecked', label: '未选中', category: FilterOperatorCategory.RADIO }\n ];\n\n // 分类下拉选项\n private categories = [\n { value: FilterOperatorCategory.ALL, label: '全部' },\n { value: FilterOperatorCategory.TEXT, label: '文本' },\n { value: FilterOperatorCategory.NUMBER, label: '数值' },\n { value: FilterOperatorCategory.COLOR, label: '颜色' },\n { value: FilterOperatorCategory.CHECKBOX, label: '复选框' },\n { value: FilterOperatorCategory.RADIO, label: '单选框' }\n ];\n\n constructor(table: ListTable | PivotTable, filterStateManager: FilterStateManager) {\n this.table = table;\n this.filterStateManager = filterStateManager;\n }\n\n setSelectedField(fieldId: string | number): void {\n this.selectedField = fieldId;\n this.updateOperatorOptions();\n this.loadCurrentFilterState();\n }\n\n /**\n * 更新操作符下拉选项\n */\n private updateOperatorOptions(): void {\n if (!this.operatorSelect) {\n return;\n }\n this.operatorSelect.innerHTML = '';\n let filteredOperators: OperatorOption[];\n\n if (this.currentCategory === FilterOperatorCategory.ALL) {\n // 当选择\"全部\"时,收集所有不重复的操作符\n const uniqueOperators = new Map<string, OperatorOption>();\n this.operators.forEach(op => {\n if (!uniqueOperators.has(op.value)) {\n uniqueOperators.set(op.value, op);\n }\n });\n filteredOperators = Array.from(uniqueOperators.values());\n } else {\n // 其他类别正常筛选\n filteredOperators = this.operators.filter(op => op.category === this.currentCategory);\n }\n\n // 添加新选项\n filteredOperators.forEach(op => {\n const option = document.createElement('option');\n option.value = op.value;\n option.textContent = op.label;\n this.operatorSelect.appendChild(option);\n });\n }\n\n private handleCategoryChange(): void {\n if (!this.categorySelect) {\n return;\n }\n\n this.currentCategory = this.categorySelect.value as FilterOperatorCategory;\n this.updateOperatorOptions();\n\n // 分类切换后也需要同步UI状态\n this.syncUIState();\n }\n\n /**\n * 加载当前的筛选状态\n */\n private loadCurrentFilterState(): void {\n const filter = this.filterStateManager.getFilterState(this.selectedField);\n\n if (filter && filter.type === 'byCondition') {\n // 设置操作符\n if (filter.operator && this.operatorSelect) {\n this.operatorSelect.value = filter.operator;\n }\n\n // 设置条件值\n if (filter.condition !== undefined && this.valueInput) {\n if (Array.isArray(filter.condition)) {\n this.valueInput.value = String(filter.condition[0]);\n if (this.valueInputMax) {\n this.valueInputMax.value = String(filter.condition[1]);\n }\n } else {\n this.valueInput.value = String(filter.condition);\n if (this.valueInputMax) {\n this.valueInputMax.value = '';\n }\n }\n }\n\n // 同步UI状态:根据当前操作符显示/隐藏范围输入框\n this.syncUIState();\n } else {\n // 重置为默认值\n this.reset();\n }\n }\n\n /**\n * 重置筛选条件到默认状态\n */\n reset(): void {\n // 重置操作符选择\n if (this.operatorSelect) {\n this.operatorSelect.selectedIndex = 0;\n }\n\n // 重置所有输入框\n if (this.valueInput) {\n this.valueInput.value = '';\n this.valueInput.placeholder = '请输入筛选值';\n }\n\n if (this.valueInputMax) {\n this.valueInputMax.value = '';\n }\n\n // 重置分类选择\n this.currentCategory = FilterOperatorCategory.ALL;\n if (this.categorySelect) {\n this.categorySelect.value = FilterOperatorCategory.ALL;\n }\n\n // 更新操作符选项\n this.updateOperatorOptions();\n\n // 同步UI状态\n this.syncUIState();\n }\n\n /**\n * 同步UI状态:根据当前选择的操作符调整UI显示\n */\n private syncUIState(): void {\n if (!this.operatorSelect || !this.valueInput) {\n return;\n }\n\n const selectedOperator = this.operatorSelect.value as FilterOperator;\n const andLabel = this.valueInput.nextElementSibling as HTMLElement;\n\n if (this.isRangeOperator(selectedOperator)) {\n // 显示范围输入相关UI\n this.valueInput.placeholder = '最小值';\n if (this.valueInputMax) {\n this.valueInputMax.style.display = 'inline-block';\n }\n if (andLabel) {\n andLabel.style.display = 'inline-block';\n }\n } else {\n // 隐藏范围输入相关UI\n this.valueInput.placeholder = '请输入筛选值';\n if (this.valueInputMax) {\n this.valueInputMax.style.display = 'none';\n }\n if (andLabel) {\n andLabel.style.display = 'none';\n }\n }\n }\n\n private isBooleanOperator(operator: FilterOperator): boolean {\n const booleanCondition = ['isChecked', 'isUnchecked'];\n return booleanCondition.includes(operator);\n }\n\n private isRangeOperator(operator: FilterOperator): boolean {\n return operator === 'between' || operator === 'notBetween';\n }\n\n /**\n * 应用筛选条件\n */\n applyFilter(fieldId: string | number = this.selectedField): void {\n if (!this.operatorSelect || !this.valueInput) {\n return;\n }\n\n const operator = this.operatorSelect?.value as FilterOperator;\n let conditionValue: any = this.valueInput?.value;\n\n // 根据所选操作符和分类尝试转换输入值\n if (this.currentCategory === FilterOperatorCategory.NUMBER) {\n conditionValue = parseFloat(conditionValue);\n if (isNaN(conditionValue)) {\n console.warn('请输入有效的数字');\n return;\n }\n }\n\n // 处理范围操作符的双值输入\n if (this.isRangeOperator(operator)) {\n const minValue = conditionValue;\n let maxValue: string | number = this.valueInputMax.value.trim();\n\n // 尝试将最大值也转换为数字\n if (this.currentCategory === FilterOperatorCategory.NUMBER) {\n const numMaxValue = parseFloat(maxValue);\n if (!isNaN(numMaxValue)) {\n maxValue = numMaxValue;\n } else {\n console.warn('请输入有效的最大值');\n return;\n }\n }\n\n // 使用数组形式传递范围值\n conditionValue = [minValue, maxValue];\n }\n\n if (!conditionValue && conditionValue !== false && conditionValue !== 0 && !this.isBooleanOperator(operator)) {\n this.clearFilter(fieldId);\n return;\n }\n\n // TODO:处理单元格颜色和字体颜色的筛选\n\n this.filterStateManager.dispatch({\n type: FilterActionType.APPLY_FILTERS,\n payload: {\n field: fieldId,\n type: 'byCondition',\n operator,\n condition: conditionValue,\n enable: true\n }\n });\n\n this.hide();\n }\n\n /**\n * 清除筛选\n */\n clearFilter(fieldId: string | number): void {\n this.filterStateManager.dispatch({\n type: FilterActionType.REMOVE_FILTER,\n payload: {\n field: fieldId\n }\n });\n\n this.hide();\n }\n\n /**\n * 渲染条件筛选面板\n */\n render(container: HTMLElement): void {\n // 按条件筛选面板\n this.filterByConditionPanel = document.createElement('div');\n applyStyles(this.filterByConditionPanel, filterStyles.filterPanel);\n\n // 条件选择区域\n const conditionContainer = document.createElement('div');\n applyStyles(conditionContainer, filterStyles.conditionContainer);\n\n // 分类选择下拉框\n const categoryLabel = createElement('label', {}, ['筛选类型:']);\n applyStyles(categoryLabel, filterStyles.formLabel);\n\n this.categorySelect = createElement('select') as HTMLSelectElement;\n applyStyles(this.categorySelect, filterStyles.operatorSelect);\n\n // 添加分类选项\n this.categories.forEach(category => {\n const option = document.createElement('option');\n option.value = category.value;\n option.textContent = category.label;\n this.categorySelect.appendChild(option);\n });\n\n // 操作符选择下拉框\n const operatorLabel = createElement('label', {}, ['筛选条件:']);\n applyStyles(operatorLabel, filterStyles.formLabel);\n\n this.operatorSelect = createElement('select') as HTMLSelectElement;\n applyStyles(this.operatorSelect, filterStyles.operatorSelect);\n\n // 条件值输入框\n const valueLabel = createElement('label', {}, ['筛选值:']);\n applyStyles(valueLabel, filterStyles.formLabel);\n\n // 一个容器来包装两个输入框和\"和\"字\n const rangeInputContainer = createElement('div');\n applyStyles(rangeInputContainer, filterStyles.rangeInputContainer);\n\n this.valueInput = createElement('input', {\n type: 'text',\n placeholder: '请输入筛选值'\n }) as HTMLInputElement;\n applyStyles(this.valueInput, filterStyles.searchInput);\n\n // \"和\"字标签\n const andLabel = createElement('span', {}, ['和']);\n applyStyles(andLabel, filterStyles.addLabel);\n andLabel.style.display = 'none'; // 默认隐藏\n\n // 范围筛选的最大值输入框\n this.valueInputMax = createElement('input', {\n type: 'text',\n placeholder: '最大值'\n }) as HTMLInputElement;\n applyStyles(this.valueInputMax, filterStyles.searchInput);\n this.valueInputMax.style.display = 'none'; // 默认隐藏\n\n // 将输入框和\"和\"字添加到容器中\n rangeInputContainer.appendChild(this.valueInput);\n rangeInputContainer.appendChild(andLabel);\n rangeInputContainer.appendChild(this.valueInputMax);\n\n // 将元素添加到容器中\n conditionContainer.appendChild(categoryLabel);\n conditionContainer.appendChild(this.categorySelect);\n conditionContainer.appendChild(operatorLabel);\n conditionContainer.appendChild(this.operatorSelect);\n conditionContainer.appendChild(valueLabel);\n conditionContainer.appendChild(rangeInputContainer);\n\n this.filterByConditionPanel.appendChild(conditionContainer);\n container.appendChild(this.filterByConditionPanel);\n\n // 默认隐藏\n this.hide();\n\n // 初始化操作符选项\n this.updateOperatorOptions();\n this.bindEvents();\n }\n\n /**\n * 绑定事件\n */\n private bindEvents(): void {\n // 输入框回车事件\n this.valueInput.addEventListener('keypress', event => {\n if (event.key === 'Enter') {\n this.applyFilter();\n }\n });\n\n // 最大值输入框回车事件\n this.valueInputMax.addEventListener('keypress', event => {\n if (event.key === 'Enter') {\n this.applyFilter();\n }\n });\n\n // 分类切换事件\n this.categorySelect.addEventListener('change', () => {\n this.handleCategoryChange();\n });\n\n // 操作符切换事件\n this.operatorSelect.addEventListener('change', () => {\n const selectedOperator = this.operatorSelect.value as FilterOperator;\n const andLabel = this.valueInput.nextElementSibling as HTMLElement;\n\n if (this.isRangeOperator(selectedOperator)) {\n this.valueInput.placeholder = '最小值';\n this.valueInputMax.style.display = 'inline-block';\n andLabel.style.display = 'inline-block';\n } else {\n this.valueInput.placeholder = '请输入筛选值';\n this.valueInputMax.style.display = 'none';\n andLabel.style.display = 'none';\n }\n });\n }\n\n /**\n * 显示筛选面板\n */\n show(): void {\n if (this.filterByConditionPanel) {\n this.filterByConditionPanel.style.display = 'block';\n this.loadCurrentFilterState();\n }\n }\n\n /**\n * 隐藏筛选面板\n */\n hide(): void {\n if (this.filterByConditionPanel) {\n this.filterByConditionPanel.style.display = 'none';\n }\n }\n}\n"]}
@@ -1,13 +1,13 @@
1
- import type * as VTable from '@visactor/vtable';
1
+ import type { ListTable, PivotTable, TYPES } from '@visactor/vtable';
2
2
  import type { FilterState } from './types';
3
3
  export declare class FilterEngine {
4
- filterFuncRule: (VTable.TYPES.FilterFuncRule & {
4
+ filterFuncRule: (TYPES.FilterFuncRule & {
5
5
  fieldId?: string;
6
6
  })[];
7
- filterValueRule: VTable.TYPES.FilterValueRule[];
8
- applyFilter(state: FilterState, table: VTable.ListTable | VTable.PivotTable): void;
7
+ filterValueRule: TYPES.FilterValueRule[];
8
+ applyFilter(state: FilterState, table: ListTable | PivotTable): void;
9
9
  private createFilterFunction;
10
10
  private compareValues;
11
- clearAllFilter(table: VTable.ListTable | VTable.PivotTable): void;
12
- clearFilter(table: VTable.ListTable | VTable.PivotTable, fieldId: string | number): void;
11
+ clearAllFilter(table: ListTable | PivotTable): void;
12
+ clearFilter(table: ListTable | PivotTable, fieldId: string | number): void;
13
13
  }