From 10f1bdc88f9a022399d05ca4cd68af0c14277e5c Mon Sep 17 00:00:00 2001 From: hejl Date: Tue, 24 Jun 2025 22:42:17 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=AA=E9=9C=80=E8=A6=81=E5=BE=AE=E8=B0=83?= =?UTF-8?q?=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../services/macro_template_service.dart | 17 +++++-- .../controllers/call_function_controller.dart | 37 +++++++------- .../call_function/models/call_function.dart | 33 +++++++++++- .../services/call_function_service.dart | 13 ++--- .../controllers/code_creater_controller.dart | 11 +++- .../widgets/code_creater_view.dart | 10 +++- .../code_creater/widgets/node_table.dart | 50 +++++++++++++------ .../controllers/memory_table_controller.dart | 5 +- .../memory_table/models/memory_table.dart | 24 ++++++++- .../services/memory_table_service.dart | 10 ++-- .../modules/outline/models/outline_node.dart | 5 ++ .../outline/services/component_service.dart | 8 ++- .../outline/services/functions_service.dart | 22 +++++--- .../outline/services/uft_object_service.dart | 11 ++-- .../outline/widgets/outline_explorer.dart | 9 ++-- 15 files changed, 184 insertions(+), 81 deletions(-) diff --git a/win_text_editor/lib/framework/services/macro_template_service.dart b/win_text_editor/lib/framework/services/macro_template_service.dart index c9cc554..ca2641a 100644 --- a/win_text_editor/lib/framework/services/macro_template_service.dart +++ b/win_text_editor/lib/framework/services/macro_template_service.dart @@ -1,4 +1,5 @@ import 'package:flutter/services.dart' show rootBundle; +import 'package:win_text_editor/framework/controllers/logger.dart'; import 'package:yaml/yaml.dart'; import 'package:mustache_template/mustache_template.dart' as mustache; @@ -41,11 +42,21 @@ class MacroTemplateService { : null; } - String renderTemplate(List templateList, Map context) { + String renderTemplate( + List templateList, + Map context, { + bool selectAll = false, + }) { StringBuffer buffer = StringBuffer(); for (var templateName in templateList) { - final template = getTemplate(templateName); - if (template == null) throw Exception('Template $templateName not found'); + Map? template = getTemplate('$templateName${selectAll ? '_ALL' : ''}'); + if (template == null) { + Logger().warning("没有找到模板$templateName${selectAll ? '_ALL' : ''}"); + template = getTemplate(templateName); + if (template == null) { + throw Exception('Template $templateName not found'); + } + } buffer.writeln(_render(template['body'], context)); diff --git a/win_text_editor/lib/modules/call_function/controllers/call_function_controller.dart b/win_text_editor/lib/modules/call_function/controllers/call_function_controller.dart index 5b1ba82..b19e62f 100644 --- a/win_text_editor/lib/modules/call_function/controllers/call_function_controller.dart +++ b/win_text_editor/lib/modules/call_function/controllers/call_function_controller.dart @@ -20,10 +20,9 @@ class CallFunctionController extends BaseContentController { late DataGridSource inputSource; late DataGridSource outputSource; - final CallFunctionService _service; final MacroTemplateService templateService = MacroTemplateService(); - CallFunctionController() : _service = CallFunctionService(Logger()) { + CallFunctionController() { inputSource = FieldsDataSource( [], onSelectionChanged: (index, isSelected) { @@ -56,24 +55,24 @@ class CallFunctionController extends BaseContentController { } //入参组件创建 - for (final input in modle.inputParameters) { - if (input.isSelected && input.type == CallFunction.componentType) { - final component = modle.componentList?.firstWhereOrNull((c) => c.name == input.name); - if (component != null) { - sb.write(templateService.renderTemplate(['插入组件'], component.toMap())); - } - } - } + // for (final input in modle.inputParameters) { + // if (input.isSelected && input.type == CallFunction.componentType) { + // final component = modle.componentList?.firstWhereOrNull((c) => c.name == input.name); + // if (component != null) { + // sb.write(templateService.renderTemplate(['插入组件'], component.toMap())); + // } + // } + // } sb.write(templateService.renderTemplate(macroList, modle.toMap())); //出参组件遍历 - for (final output in modle.outputParameters) { - if (output.isSelected && output.type == CallFunction.componentType) { - final component = modle.componentList?.firstWhereOrNull((c) => c.name == output.name); - if (component != null) { - sb.write(templateService.renderTemplate(['遍历组件所有'], component.toMap())); - } - } - } + // for (final output in modle.outputParameters) { + // if (output.isSelected && output.type == CallFunction.componentType) { + // final component = modle.componentList?.firstWhereOrNull((c) => c.name == output.name); + // if (component != null) { + // sb.write(templateService.renderTemplate(['遍历组件所有'], component.toMap())); + // } + // } + // } return sb.toString(); } @@ -81,7 +80,7 @@ class CallFunctionController extends BaseContentController { Future onOpenFile(String filePath, {dynamic appendArg}) async { Logger().info("Opening file: $filePath"); try { - modle = await _service.parseXmlFile(filePath); + modle = await CallFunctionService.parseXmlFile(filePath); // datagrid显示的数据源 (inputSource as FieldsDataSource).updateData(modle.inputParameters); diff --git a/win_text_editor/lib/modules/call_function/models/call_function.dart b/win_text_editor/lib/modules/call_function/models/call_function.dart index 03a2d44..a7c5ec1 100644 --- a/win_text_editor/lib/modules/call_function/models/call_function.dart +++ b/win_text_editor/lib/modules/call_function/models/call_function.dart @@ -29,6 +29,25 @@ class CallFunction { 'chineseName': chineseName, 'factorParam': factorParam ?? '', 'input': + inputParameters + .map( + (field) => { + 'id': field.id, + 'name': field.name, + 'chineseName': field.chineseName, + 'type': field.type, + 'isLast': inputParameters.indexOf(field) == inputParameters.length - 1, + 'partnerName': + codePartners + .firstWhere( + (partner) => partner.fields.any((f) => f == field.name), + orElse: () => CodePartner(name: null, fields: []), + ) + .name, + }, + ) + .toList(), + 'selectedInput': inputParameters .where((field) => field.isSelected) .map( @@ -48,7 +67,7 @@ class CallFunction { }, ) .toList(), - 'output': + 'selectedOutput': outputParameters .where((field) => field.isSelected) .map( @@ -61,6 +80,18 @@ class CallFunction { }, ) .toList(), + 'output': + outputParameters + .map( + (field) => { + 'id': field.id, + 'name': field.name, + 'chineseName': field.chineseName, + 'type': field.type, + 'isLast': outputParameters.indexOf(field) == outputParameters.length - 1, + }, + ) + .toList(), 'inputComps': componentList ?.map( diff --git a/win_text_editor/lib/modules/call_function/services/call_function_service.dart b/win_text_editor/lib/modules/call_function/services/call_function_service.dart index 382e35f..157ca42 100644 --- a/win_text_editor/lib/modules/call_function/services/call_function_service.dart +++ b/win_text_editor/lib/modules/call_function/services/call_function_service.dart @@ -11,10 +11,6 @@ import 'package:xml/xml.dart' as xml; import 'package:win_text_editor/framework/controllers/logger.dart'; class CallFunctionService { - final Logger _logger; - - CallFunctionService(this._logger); - static const Map _functionRootTypeMap = { 'uftfunction': 'business:Function', 'uftservice': 'business:Service', @@ -24,12 +20,13 @@ class CallFunctionService { 'uftfactorservice': 'business:FactorService', }; - Future parseXmlFile(String filePath) async { + static Future parseXmlFile(String filePath) async { try { // 1. Check file extension final extendFileName = filePath.toLowerCase().split('.').last; final String? rootNodeType = _functionRootTypeMap[extendFileName]; if (rootNodeType == null) { + Logger().error('文件扩展名不正确:$filePath'); throw const FormatException("文件扩展名不正确!"); } @@ -80,15 +77,15 @@ class CallFunctionService { factorParam: factorParam, ); } on xml.XmlParserException catch (e) { - _logger.error("XML解析错误: ${e.message}"); + Logger().error("XML解析错误: ${e.message}"); rethrow; } catch (e) { - _logger.error("处理文件时发生错误: $e"); + Logger().error("处理文件时发生错误: $e"); rethrow; } } - Future> parserFields( + static Future> parserFields( String filePath, Iterable parameters, List componentList, diff --git a/win_text_editor/lib/modules/code_creater/controllers/code_creater_controller.dart b/win_text_editor/lib/modules/code_creater/controllers/code_creater_controller.dart index 2f4108d..a1d610e 100644 --- a/win_text_editor/lib/modules/code_creater/controllers/code_creater_controller.dart +++ b/win_text_editor/lib/modules/code_creater/controllers/code_creater_controller.dart @@ -1,5 +1,6 @@ import 'package:win_text_editor/framework/common/constants.dart'; import 'package:win_text_editor/framework/controllers/logger.dart'; +import 'package:win_text_editor/modules/code_creater/services/code_create_service.dart'; import 'package:win_text_editor/modules/outline/models/outline_node.dart'; import 'package:win_text_editor/shared/base/base_content_controller.dart'; @@ -22,7 +23,6 @@ class CodeCreaterController extends BaseContentController { _members.where((node) => !(unMatchMap[node.value]?.contains(value) ?? false)).toList(); _members = filtered; // 更新成员列表,移除不匹配的节点 _selectedOperation = value; - notifyListeners(); // 通知监听者 } void updateMembers(List newMembers) { @@ -47,5 +47,12 @@ class CodeCreaterController extends BaseContentController { notifyListeners(); } - genCodeString(List list) {} + Future genCodeString() { + return CodeCreateService.genCodeString(members, selectedOperation); + } + + void handleActionTypeChange(int index, String newAction) { + members[index].selectedAction = newAction; + notifyListeners(); + } } diff --git a/win_text_editor/lib/modules/code_creater/widgets/code_creater_view.dart b/win_text_editor/lib/modules/code_creater/widgets/code_creater_view.dart index 0a31d04..f807c94 100644 --- a/win_text_editor/lib/modules/code_creater/widgets/code_creater_view.dart +++ b/win_text_editor/lib/modules/code_creater/widgets/code_creater_view.dart @@ -39,6 +39,7 @@ class _CodeCreaterViewState extends State { } _controller.addListener(_handleControllerUpdate); + _controller.addListener(_updateDisplay); } void _handleControllerUpdate() { @@ -48,6 +49,7 @@ class _CodeCreaterViewState extends State { @override void dispose() { _controller.removeListener(_handleControllerUpdate); + _controller.removeListener(_updateDisplay); if (!_isControllerFromTabManager) { _controller.dispose(); } @@ -71,6 +73,8 @@ class _CodeCreaterViewState extends State { onDeleteMember: _deleteMember, onMoveToTop: _moveToTop, onMoveToBottom: _moveToBottom, + onActionTypeChanged: + (index, newAction) => _controller.handleActionTypeChange(index, newAction), ), ), ), @@ -117,6 +121,7 @@ class _CodeCreaterViewState extends State { setState(() { _controller.members.insert(to, member); // 再插入 + _updateDisplay(); }); } @@ -131,6 +136,7 @@ class _CodeCreaterViewState extends State { void _deleteMember(int index) { setState(() { _controller.members.removeAt(index); + _updateDisplay(); }); } @@ -144,7 +150,7 @@ class _CodeCreaterViewState extends State { }); } - void _updateDisplay() { - _codeController.text = _controller.genCodeString([_controller.selectedOperation!]) ?? ''; + Future _updateDisplay() async { + _codeController.text = await _controller.genCodeString(); } } diff --git a/win_text_editor/lib/modules/code_creater/widgets/node_table.dart b/win_text_editor/lib/modules/code_creater/widgets/node_table.dart index f409695..92eaeeb 100644 --- a/win_text_editor/lib/modules/code_creater/widgets/node_table.dart +++ b/win_text_editor/lib/modules/code_creater/widgets/node_table.dart @@ -3,6 +3,7 @@ import 'dart:ui'; import 'package:flutter/material.dart'; import 'package:pluto_grid/pluto_grid.dart'; import 'package:win_text_editor/framework/common/constants.dart'; +import 'package:win_text_editor/modules/code_creater/services/code_create_service.dart'; import 'package:win_text_editor/modules/outline/models/outline_node.dart'; import 'package:win_text_editor/shared/components/my_pluto_column.dart'; import 'package:win_text_editor/shared/components/my_pluto_configuration.dart'; @@ -14,6 +15,7 @@ class NodeTable extends StatefulWidget { final Function(int) onDeleteMember; final Function(int) onMoveToTop; final Function(int) onMoveToBottom; + final Function(int, String)? onActionTypeChanged; // 新增回调函数 const NodeTable({ super.key, @@ -22,6 +24,7 @@ class NodeTable extends StatefulWidget { required this.onDeleteMember, required this.onMoveToTop, required this.onMoveToBottom, + this.onActionTypeChanged, // 新增参数 }); @override @@ -79,6 +82,9 @@ class NodeTableState extends State { _stateManager?.setSelectingMode(PlutoGridSelectingMode.row); _stateManager?.addListener(_handleRowSelection); }, + onChanged: (PlutoGridOnChangedEvent event) { + _handleCellChanged(event); + }, onRowDoubleTap: (event) { _selectedRowIndex = event.rowIdx; }, @@ -166,6 +172,23 @@ class NodeTableState extends State { }); } + void _handleCellChanged(PlutoGridOnChangedEvent event) { + if (event.column?.field == 'type' && event.rowIdx != null) { + final rowIndex = event.rowIdx!; + if (rowIndex >= 0 && rowIndex < widget.members.length) { + final newValue = event.value?.toString() ?? ''; + setState(() { + widget.members[rowIndex].selectedAction = newValue; + }); + + // 通知controller + if (widget.onActionTypeChanged != null) { + widget.onActionTypeChanged!(rowIndex, newValue); + } + } + } + } + final Map _nodeTypeData = {}; List _buildColumns() { @@ -201,7 +224,13 @@ class NodeTableState extends State { .map((index, member) { final rowKey = ValueKey('${member.hashCode}_$index'); final options = _getOptions(member.value); - final initialValue = options.isNotEmpty ? options.first : ''; + // Use selectedAction if it exists, otherwise use the first option + final initialValue = + member.selectedAction?.isNotEmpty == true + ? member.selectedAction! + : options.isNotEmpty + ? options.first + : ''; _nodeTypeData[rowKey] = _NodeTypeData(member.value, initialValue); @@ -221,21 +250,6 @@ class NodeTableState extends State { .toList(); } - List _getOptions(String type) { - switch (type) { - case Constants.atomFunction: - case Constants.atomService: - case Constants.business: - return ['普通调用', '事务调用']; - case Constants.uftTable: - return ['获取记录', '遍历记录', '插入记录', '修改记录', '删除记录']; - case Constants.component: - return ['获取组件', '遍历组件', '插入组件', '修改组件', '尾部插入组件']; - default: - return ['']; // 确保返回非空列表 - } - } - void refreshTable() { if (_stateManager != null) { _stateManager!.refRows.clear(); @@ -250,4 +264,8 @@ class NodeTableState extends State { _scrollController.dispose(); super.dispose(); } + + List _getOptions(String s) { + return CodeCreateService.getNodeActions(s); + } } diff --git a/win_text_editor/lib/modules/memory_table/controllers/memory_table_controller.dart b/win_text_editor/lib/modules/memory_table/controllers/memory_table_controller.dart index 9b13a43..4dc7d8a 100644 --- a/win_text_editor/lib/modules/memory_table/controllers/memory_table_controller.dart +++ b/win_text_editor/lib/modules/memory_table/controllers/memory_table_controller.dart @@ -18,13 +18,12 @@ class MemoryTableController extends BaseContentController { late DataGridSource fieldsSource; late DataGridSource indexesSource; - final MemoryTableService _service; final MacroTemplateService templateService = MacroTemplateService(); // 新增:维护MemoryTable对象 late MemoryTable _memoryTable; - MemoryTableController() : _service = MemoryTableService(Logger()) { + MemoryTableController() { // 初始化空数据 final initialFields = [Field('1', '', '', '', false), Field('2', '', '', '', false)]; @@ -68,7 +67,7 @@ class MemoryTableController extends BaseContentController { Future onOpenFile(String filePath, {dynamic appendArg}) async { Logger().info("Opening file: $filePath"); try { - final tableData = await _service.parseStructureFile(filePath); + final tableData = await MemoryTableService.parseStructureFile(filePath); // Update controller state tableName = tableData.tableName; diff --git a/win_text_editor/lib/modules/memory_table/models/memory_table.dart b/win_text_editor/lib/modules/memory_table/models/memory_table.dart index 84cbf14..301f256 100644 --- a/win_text_editor/lib/modules/memory_table/models/memory_table.dart +++ b/win_text_editor/lib/modules/memory_table/models/memory_table.dart @@ -114,14 +114,34 @@ class MemoryTable { 'isPrimary': index.isPrimary, 'fields': index.fields.asMap().entries.map((entry) { - return {'name': entry.value, 'isLast': entry.key == keyFields.length - 1}; + return { + 'name': entry.value, + 'partnerName': + codePartners + .firstWhere( + (partner) => partner.fields.any((f) => f == entry.value), + orElse: () => CodePartner(name: null, fields: []), + ) + .name, + 'isLast': entry.key == keyFields.length - 1, + }; }).toList(), 'rule': index.rule, }, 'keyName': keyName, 'keyFields': keyFields.asMap().entries.map((entry) { - return {'name': entry.value, 'isLast': entry.key == keyFields.length - 1}; + return { + 'name': entry.value, + 'partnerName': + codePartners + .firstWhere( + (partner) => partner.fields.any((f) => f == entry.value), + orElse: () => CodePartner(name: null, fields: []), + ) + .name, + 'isLast': entry.key == keyFields.length - 1, + }; }).toList(), }; } diff --git a/win_text_editor/lib/modules/memory_table/services/memory_table_service.dart b/win_text_editor/lib/modules/memory_table/services/memory_table_service.dart index f78b13a..150124e 100644 --- a/win_text_editor/lib/modules/memory_table/services/memory_table_service.dart +++ b/win_text_editor/lib/modules/memory_table/services/memory_table_service.dart @@ -9,11 +9,7 @@ import 'package:path/path.dart' as path; import 'package:win_text_editor/framework/controllers/logger.dart'; class MemoryTableService { - final Logger _logger; - - MemoryTableService(this._logger); - - Future parseStructureFile(String filePath) async { + static Future parseStructureFile(String filePath) async { try { // 1. Check file extension if (!filePath.toLowerCase().endsWith('.uftstructure')) { @@ -95,10 +91,10 @@ class MemoryTableService { indexes: indexList.isNotEmpty ? indexList : [], ); } on xml.XmlParserException catch (e) { - _logger.error("XML解析错误: ${e.message}"); + Logger().error("XML解析错误: ${e.message}"); rethrow; } catch (e) { - _logger.error("处理文件时发生错误: $e"); + Logger().error("处理文件时发生错误: $e"); rethrow; } } diff --git a/win_text_editor/lib/modules/outline/models/outline_node.dart b/win_text_editor/lib/modules/outline/models/outline_node.dart index 11ac077..224f34d 100644 --- a/win_text_editor/lib/modules/outline/models/outline_node.dart +++ b/win_text_editor/lib/modules/outline/models/outline_node.dart @@ -27,6 +27,9 @@ class OutlineNode implements TreeNode { final String value; String? wordClass; + String? selectedAction; + String? path; + OutlineNode({ required this.name, required this.value, @@ -39,6 +42,8 @@ class OutlineNode implements TreeNode { this.wordClass, List? children, this.title = "", + this.selectedAction = "", + this.path = "", }) : _children = children ?? [] { id = DateTime.now().microsecondsSinceEpoch.toRadixString(36) + title.hashCode.toRadixString(36); } diff --git a/win_text_editor/lib/modules/outline/services/component_service.dart b/win_text_editor/lib/modules/outline/services/component_service.dart index aa206ca..8d55628 100644 --- a/win_text_editor/lib/modules/outline/services/component_service.dart +++ b/win_text_editor/lib/modules/outline/services/component_service.dart @@ -1,6 +1,5 @@ import 'dart:io'; -import 'package:flutter/widgets.dart'; import 'package:win_text_editor/framework/common/constants.dart'; import 'package:win_text_editor/framework/controllers/logger.dart'; import 'package:win_text_editor/modules/outline/models/outline_node.dart'; @@ -9,10 +8,13 @@ import 'package:xml/xml.dart'; class ComponentService { //组件索引 static Map> componentFieldMap = {}; + static String filePath = ""; //初始化组件索引 static Future initComponentFieldMap(String rootPath) async { - final componentFile = File('$rootPath/metadata/component.xml'); + filePath = '$rootPath\\metadata\\component.xml'; + + final componentFile = File(filePath); if (!await componentFile.exists()) { Logger().error('component.xml文件不存在'); return; @@ -68,6 +70,7 @@ class ComponentService { value: Constants.component, isDirectory: false, depth: 4, + path: filePath, ), ), ); @@ -84,6 +87,7 @@ class ComponentService { value: Constants.component, isDirectory: false, depth: 4, + path: filePath, ), ); } diff --git a/win_text_editor/lib/modules/outline/services/functions_service.dart b/win_text_editor/lib/modules/outline/services/functions_service.dart index 77bf6c0..c8fb4e2 100644 --- a/win_text_editor/lib/modules/outline/services/functions_service.dart +++ b/win_text_editor/lib/modules/outline/services/functions_service.dart @@ -1,5 +1,6 @@ import 'dart:io'; +import 'package:path/path.dart' as path; import 'package:win_text_editor/framework/common/constants.dart'; import 'package:win_text_editor/framework/controllers/logger.dart'; import 'package:win_text_editor/modules/outline/models/outline_node.dart'; @@ -89,11 +90,12 @@ class FunctionsService { if (value.contains(fieldName)) { parentNode.children.add( OutlineNode( - name: value[0], // 文件名 + name: path.basenameWithoutExtension(value[0]), // 文件名 title: key, value: Constants.atomService, isDirectory: false, // 这些是叶子节点 depth: 4, + path: value[0], ), ); } @@ -107,11 +109,12 @@ class FunctionsService { if (value.contains(fieldName)) { parentNode.children.add( OutlineNode( - name: value[0], // 文件名 + name: path.basenameWithoutExtension(value[0]), // 文件名 title: key, value: Constants.atomFunction, isDirectory: false, // 这些是叶子节点 depth: 4, + path: value[0], ), ); } @@ -123,14 +126,16 @@ class FunctionsService { if (fieldName == null || fieldName.isEmpty) return; uftbusinessMap.forEach((key, value) { + final functionName = path.basenameWithoutExtension(value[0]); if (value.contains(fieldName)) { parentNode.children.add( OutlineNode( - name: value[0], // 文件名 + name: functionName, title: key, value: Constants.business, isDirectory: false, // 这些是叶子节点 depth: 4, + path: value[0], // 文件名 ), ); } @@ -140,14 +145,16 @@ class FunctionsService { static List searchBusiness(String searchQuery) { final List nodes = []; uftbusinessMap.forEach((key, value) { + final functionName = path.basenameWithoutExtension(value[0]); if (key.contains(searchQuery)) { nodes.add( OutlineNode( - name: value[0], // 文件名 + name: functionName, title: key, value: Constants.business, isDirectory: false, // 这些是叶子节点 depth: 4, + path: value[0], // 文件名 ), ); } @@ -159,14 +166,16 @@ class FunctionsService { static List searchAtomServices(String searchQuery) { final List nodes = []; uftatomserviceMap.forEach((key, value) { + final functionName = path.basenameWithoutExtension(value[0]); if (key.contains(searchQuery)) { nodes.add( OutlineNode( - name: value[0], // 文件名 + name: functionName, title: key, value: Constants.atomService, isDirectory: false, // 这些是叶子节点 depth: 4, + path: value[0], // 文件名 ), ); } @@ -181,11 +190,12 @@ class FunctionsService { if (key.contains(searchQuery)) { nodes.add( OutlineNode( - name: value[0], // 文件名 + name: path.basenameWithoutExtension(value[0]), title: key, value: Constants.atomFunction, isDirectory: false, // 这些是叶子节点 depth: 4, + path: value[0], // 文件名 ), ); } diff --git a/win_text_editor/lib/modules/outline/services/uft_object_service.dart b/win_text_editor/lib/modules/outline/services/uft_object_service.dart index 48686cc..a25bff1 100644 --- a/win_text_editor/lib/modules/outline/services/uft_object_service.dart +++ b/win_text_editor/lib/modules/outline/services/uft_object_service.dart @@ -66,13 +66,15 @@ class UftObjectService { uftObjectMap.forEach((key, value) { if (value.contains(fieldName)) { + final tableName = path.basenameWithoutExtension(value[0]); parentNode.children.add( OutlineNode( - name: value[0], + name: tableName, title: key, value: Constants.uftTable, isDirectory: false, // 这些是叶子节点 depth: 4, + path: value[0], ), ); } @@ -83,15 +85,16 @@ class UftObjectService { final List searchNodes = []; uftObjectMap.forEach((key, value) { - if (key.contains(searchQuery) || - path.basenameWithoutExtension(value[0]).contains(searchQuery)) { + final tableName = path.basenameWithoutExtension(value[0]); + if (key.contains(searchQuery) || tableName.contains(searchQuery)) { searchNodes.add( OutlineNode( - name: value[0], + name: tableName, title: key, value: Constants.uftTable, isDirectory: false, depth: 4, + path: value[0], ), ); } diff --git a/win_text_editor/lib/modules/outline/widgets/outline_explorer.dart b/win_text_editor/lib/modules/outline/widgets/outline_explorer.dart index 68ffedc..b0d7e10 100644 --- a/win_text_editor/lib/modules/outline/widgets/outline_explorer.dart +++ b/win_text_editor/lib/modules/outline/widgets/outline_explorer.dart @@ -178,15 +178,12 @@ class _OutlineExplorerState extends State { case Constants.atomFunction: case Constants.atomService: if (widget.onFileDoubleTap != null) { - widget.onFileDoubleTap!(outlineNode.name, null); + widget.onFileDoubleTap!(outlineNode.path!, null); } break; case Constants.component: - if (widget.onFileDoubleTap != null && fileProvider.rootPath != null) { - widget.onFileDoubleTap!( - '${fileProvider.rootPath}\\metadata\\component.xml', - outlineNode.name, - ); + if (widget.onFileDoubleTap != null) { + widget.onFileDoubleTap!(outlineNode.path!, outlineNode.name); } break; }