diff --git a/win_text_editor/lib/modules/template_parser/controllers/template_parser_controller.dart b/win_text_editor/lib/modules/template_parser/controllers/template_parser_controller.dart index 0021b6a..f1ed6c0 100644 --- a/win_text_editor/lib/modules/template_parser/controllers/template_parser_controller.dart +++ b/win_text_editor/lib/modules/template_parser/controllers/template_parser_controller.dart @@ -210,4 +210,24 @@ class TemplateParserController extends BaseContentController { void onOpenFolder(String folderPath) { // TODO: implement onOpenFolder } + + // 新增方法,用于获取当前选中的节点列表 + List getSelectedNodes() { + List selectedNodes = []; + + void traverse(TemplateNode node) { + if (node.isChecked) { + selectedNodes.add(node); } + for (var child in node.children) { + traverse(child); + } + } + + for (var node in _treeNodes) { + traverse(node); + } + + return selectedNodes; + } +} \ No newline at end of file diff --git a/win_text_editor/lib/modules/template_parser/widgets/template_grid_view.dart b/win_text_editor/lib/modules/template_parser/widgets/template_grid_view.dart index 047acc2..c0685d0 100644 --- a/win_text_editor/lib/modules/template_parser/widgets/template_grid_view.dart +++ b/win_text_editor/lib/modules/template_parser/widgets/template_grid_view.dart @@ -61,14 +61,25 @@ class TemplateGridView extends StatelessWidget { } Future _exportToCsv(TemplateParserController controller) async { - String csvData = '序号\t内容\n'; + String csvData = '序号\t'; + final selectedNodes = controller.getSelectedNodes(); + for (var node in selectedNodes) { + csvData += '${node.name}\t'; + } + csvData += '\n'; + final filteredItems = controller.selectedNode != null ? controller.templateItems.where((item) => item.matchesPath(controller.selectedNode!.path)).toList() : controller.templateItems; for (var item in filteredItems) { - csvData += '${filteredItems.indexOf(item) + 1}\t${item.value}\n'; + csvData += '${filteredItems.indexOf(item) + 1}\t'; + for (var node in selectedNodes) { + // 这里需要根据实际情况填充列内容 + csvData += '\t'; + } + csvData += '\n'; } final filePath = await FilePicker.platform.saveFile( @@ -90,14 +101,14 @@ class TemplateGridView extends StatelessWidget { ? items.where((item) => item.matchesPath(controller.selectedNode!.path)).toList() : items; + final selectedNodes = controller.getSelectedNodes(); + final dataSource = _TemplateItemDataSource( items: filteredItems, - selectedNode: controller.selectedNode, + selectedNodes: selectedNodes, ); - return SfDataGrid( - source: dataSource, - columns: [ + List columns = [ GridColumn( columnName: 'index', width: 60, @@ -108,16 +119,25 @@ class TemplateGridView extends StatelessWidget { child: const Text('序号'), ), ), + ]; + + for (var node in selectedNodes) { + columns.add( GridColumn( - columnName: 'content', + columnName: node.id.toString(), label: Container( padding: const EdgeInsets.all(8.0), alignment: Alignment.center, color: Colors.grey[200], - child: const Text('内容'), + child: Text(node.name), ), ), - ], + ); + } + + return SfDataGrid( + source: dataSource, + columns: columns, gridLinesVisibility: GridLinesVisibility.both, headerGridLinesVisibility: GridLinesVisibility.both, columnWidthMode: ColumnWidthMode.fill, @@ -127,19 +147,23 @@ class TemplateGridView extends StatelessWidget { class _TemplateItemDataSource extends DataGridSource { final List items; - final TemplateNode? selectedNode; + final List selectedNodes; - _TemplateItemDataSource({required this.items, required this.selectedNode}); + _TemplateItemDataSource({required this.items, required this.selectedNodes}); @override List get rows => items.map((item) { - return DataGridRow( - cells: [ + List cells = [ DataGridCell(columnName: 'index', value: items.indexOf(item) + 1), - DataGridCell(columnName: 'content', value: item.value), - ], - ); + ]; + + for (var node in selectedNodes) { + // 这里需要根据实际情况填充列内容 + cells.add(DataGridCell(columnName: node.id.toString(), value: '')); + } + + return DataGridRow(cells: cells); }).toList(); @override