diff --git a/win_text_editor/lib/main.dart b/win_text_editor/lib/main.dart index 8dcc0bb..e2bf798 100644 --- a/win_text_editor/lib/main.dart +++ b/win_text_editor/lib/main.dart @@ -12,7 +12,7 @@ void main() async { WindowOptions windowOptions = const WindowOptions( size: Size(1200, 1000), center: true, - title: '升级工具', + title: '文件操作工具箱', ); windowManager.waitUntilReadyToShow(windowOptions, () async { await windowManager.show(); diff --git a/win_text_editor/lib/modules/data_format/widgets/grid_view.dart b/win_text_editor/lib/modules/data_format/widgets/grid_view.dart index 04c5946..83545f5 100644 --- a/win_text_editor/lib/modules/data_format/widgets/grid_view.dart +++ b/win_text_editor/lib/modules/data_format/widgets/grid_view.dart @@ -103,17 +103,25 @@ class _DataGridViewState extends State { eol: '\n', ).convert(content, fieldDelimiter: _delimiter); - // 清理数据 - final cleanedData = - csvTable - .where( - (row) => row.isNotEmpty && row.any((cell) => cell.toString().trim().isNotEmpty), - ) - .map((row) => row.map((cell) => cell.toString().trim()).toList()) - .toList(); + // 清理数据并添加序号列 + final cleanedData = csvTable + .where((row) => row.isNotEmpty && row.any((cell) => cell.toString().trim().isNotEmpty)) + .toList(); // 先转换为List + + // 添加序号列 + final dataWithIndex = cleanedData.asMap().entries.map((entry) { + final index = entry.key; + final row = entry.value; + // 如果是标题行(第一行),添加"序号"列标题 + if (index == 0) { + return ['序号', ...row.map((cell) => cell.toString().trim()).toList()]; + } + // 数据行添加序号(从1开始) + return [index, ...row.map((cell) => cell.toString().trim()).toList()]; + }).toList(); setState(() { - _csvData = cleanedData; + _csvData = dataWithIndex; }); } } catch (e) { @@ -129,8 +137,20 @@ class _DataGridViewState extends State { final headers = _csvData.first; final dataRows = _csvData.sublist(1); - final columns = - headers.map((header) { + final columns = [ + // 添加序号列 + GridColumn( + columnName: '序号', + width: 60, // 序号列宽度较小 + label: Container( + padding: const EdgeInsets.all(8.0), + color: Colors.grey[200], + alignment: Alignment.center, + child: const Text('序号', overflow: TextOverflow.ellipsis, maxLines: 1), + ), + ), + // 原有列 + ...headers.sublist(1).map((header) { return GridColumn( columnName: header.toString(), width: 150, // 固定列宽 @@ -141,7 +161,8 @@ class _DataGridViewState extends State { child: Text(header.toString(), overflow: TextOverflow.ellipsis, maxLines: 1), ), ); - }).toList(); + }).toList(), + ]; final dataSource = _CsvDataSource(headers: headers, rows: dataRows); @@ -150,7 +171,7 @@ class _DataGridViewState extends State { columns: columns, gridLinesVisibility: GridLinesVisibility.both, headerGridLinesVisibility: GridLinesVisibility.both, - columnWidthMode: ColumnWidthMode.fitByCellValue, // 使用固定列宽模式 + columnWidthMode: ColumnWidthMode.fitByCellValue, ); } } diff --git a/win_text_editor/lib/modules/template_parser/widgets/grid_view.dart b/win_text_editor/lib/modules/template_parser/widgets/grid_view.dart index ab34705..503ac3d 100644 --- a/win_text_editor/lib/modules/template_parser/widgets/grid_view.dart +++ b/win_text_editor/lib/modules/template_parser/widgets/grid_view.dart @@ -65,16 +65,15 @@ class TemplateGridView extends StatelessWidget { selectedNodes: selectedNodes, ); - // 构建表头 - String csvData = '序号\t'; - csvData += selectedNodes + // 构建表头(不包含序号列) + String csvData = selectedNodes .map((node) => node.isAttribute ? node.name.substring(1) : node.name) .join('\t'); csvData += '\n'; - // 填充数据 + // 填充数据(跳过第一列的序号) for (final row in dataSource.rows) { - csvData += '${row.getCells()[0].value}\t'; // 序号 + // 从第1列开始(跳过第0列的序号) for (int i = 1; i < row.getCells().length; i++) { csvData += row.getCells()[i].value.toString(); if (i < row.getCells().length - 1) csvData += '\t'; diff --git a/win_text_editor/lib/shared/components/file_explorer.dart b/win_text_editor/lib/shared/components/file_explorer.dart index a0bb878..237511a 100644 --- a/win_text_editor/lib/shared/components/file_explorer.dart +++ b/win_text_editor/lib/shared/components/file_explorer.dart @@ -34,8 +34,8 @@ class _FileExplorerState extends State { return Column( mainAxisAlignment: MainAxisAlignment.center, children: [ - const Text('No directory selected'), - TextButton(onPressed: () => _promptForDirectory(context), child: const Text('Open Folder')), + const Text('没有文件可显示'), + TextButton(onPressed: () => _promptForDirectory(context), child: const Text('打开目录')), ], ); } diff --git a/win_text_editor/pubspec.lock b/win_text_editor/pubspec.lock index 6718fb9..e2ec863 100644 --- a/win_text_editor/pubspec.lock +++ b/win_text_editor/pubspec.lock @@ -89,6 +89,14 @@ packages: url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" source: hosted version: "0.3.4+2" + csv: + dependency: "direct main" + description: + name: csv + sha256: c6aa2679b2a18cb57652920f674488d89712efaf4d3fdf2e537215b35fc19d6c + url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + source: hosted + version: "6.0.0" expandable: dependency: "direct main" description: diff --git a/win_text_editor/pubspec.yaml b/win_text_editor/pubspec.yaml index d069363..b943312 100644 --- a/win_text_editor/pubspec.yaml +++ b/win_text_editor/pubspec.yaml @@ -21,6 +21,7 @@ dependencies: syncfusion_flutter_datagrid: ^22.1.40 flutter_js: ^0.8.3 xml: ^6.5.0 + csv: ^6.0.0 dev_dependencies: flutter_test: