diff --git a/lib/pages/home/doorAndCar/car/doorArea_car_add_page.dart b/lib/pages/home/doorAndCar/car/doorArea_car_add_page.dart index 1909a72..713ff0e 100644 --- a/lib/pages/home/doorAndCar/car/doorArea_car_add_page.dart +++ b/lib/pages/home/doorAndCar/car/doorArea_car_add_page.dart @@ -123,6 +123,9 @@ class _DoorareaCarAddPageState extends State { addData['auditPersonUserId']=''; addData['auditPersonUserName']=''; + addData['closedAreaId']='';//封闭区域id + addData['closedAreaName']='';//封闭区域名称 + }); }, ), @@ -530,10 +533,13 @@ class _DoorareaCarAddPageState extends State { if (raw['success'] ) { List newList = raw['data'] ?? []; - for(int i=0;i treeData = _buildTree(newList); showModalBottomSheet( context: context, @@ -542,12 +548,17 @@ class _DoorareaCarAddPageState extends State { backgroundColor: Colors.transparent, builder: (ctx) => DepartmentPickerThree( - listdata: newList, + listdata: treeData, onSelected: (id, name,pdId) async { setState(() { addData['closedAreaId']=id;//封闭区域id addData['closedAreaName']=name;//封闭区域名称 + addData['auditPersonDepartmentId']= ''; + addData['auditPersonDepartmentName']= ''; + addData['auditPersonUserId']=''; + addData['auditPersonUserName']=''; + }); }, ), @@ -566,6 +577,65 @@ class _DoorareaCarAddPageState extends State { } } + /// 构建多层级树形结构(支持任意层级) + List _buildTree(List data) { + if (data.isEmpty) return []; + + // 创建 id -> node 的映射 + Map nodeMap = {}; + + // 初始化所有节点 + for (var item in data) { + String id = item['id']?.toString() ?? ''; + item['children'] = []; + item['dataId'] = id; + item['dataName'] = item['closedAreaName'] ?? ''; + nodeMap[id] = item; + } + + List rootNodes = []; + + // 遍历所有节点,建立父子关系 + for (var item in data) { + String parentId = item['parentId']?.toString() ?? '0'; + + if (parentId == '0' || parentId.isEmpty) { + // 根节点 + rootNodes.add(item); + } else if (nodeMap.containsKey(parentId)) { + // 有父节点,添加到父节点的 children 中 + nodeMap[parentId]['children'].add(item); + } else { + // 父节点不在列表中,作为根节点 + rootNodes.add(item); + } + } + + // 递归排序(可选:按某个字段排序) + _sortTree(rootNodes); + + return rootNodes; + } + + /// 递归排序树节点(按 id 或名称排序) + void _sortTree(List nodes) { + for (var node in nodes) { + if (node['children'] != null && node['children'] is List) { + List children = node['children']; + if (children.isNotEmpty) { + // 按 id 排序 + children.sort((a, b) { + String idA = a['id']?.toString() ?? ''; + String idB = b['id']?.toString() ?? ''; + return idA.compareTo(idB); + }); + // 递归排序子节点 + _sortTree(children); + } + } + } + } + Future _getApproverList() async { try { @@ -708,6 +778,18 @@ class _DoorareaCarAddPageState extends State { addData['portAreaId'] = extraData?['dictValue'];//港区id addData['portAreaName'] = name;//港区名称 + addData['jurisdictionalCorpId']= ''; + addData['jurisdictionalCorpName']= ''; + addData['auditPersonCorpId']= ''; + addData['auditPersonCorpName']= ''; + addData['auditPersonDepartmentId']= ''; + addData['auditPersonDepartmentName']= ''; + addData['auditPersonUserId']=''; + addData['auditPersonUserName']=''; + + addData['closedAreaId']='';//封闭区域id + addData['closedAreaName']='';//封闭区域名称 + }); }, ), diff --git a/lib/pages/home/doorAndCar/person/doorArea_person_add_page.dart b/lib/pages/home/doorAndCar/person/doorArea_person_add_page.dart index 11779ae..bf2c8c3 100644 --- a/lib/pages/home/doorAndCar/person/doorArea_person_add_page.dart +++ b/lib/pages/home/doorAndCar/person/doorArea_person_add_page.dart @@ -121,6 +121,9 @@ class _DoorareaPersonApplyPageState extends State { addData['auditPersonUserId']=''; addData['auditPersonUserName']=''; + addData['closedAreaId']='';//封闭区域id + addData['closedAreaName']='';//封闭区域名称 + }); }, ), @@ -574,6 +577,18 @@ class _DoorareaPersonApplyPageState extends State { addData['portAreaId'] = extraData?['dictValue'];//港区id addData['portAreaName'] = name;//港区名称 + addData['jurisdictionalCorpId']= ''; + addData['jurisdictionalCorpName']= ''; + addData['auditPersonCorpId']= ''; + addData['auditPersonCorpName']= ''; + addData['auditPersonDepartmentId']= ''; + addData['auditPersonDepartmentName']= ''; + addData['auditPersonUserId']=''; + addData['auditPersonUserName']=''; + + addData['closedAreaId']='';//封闭区域id + addData['closedAreaName']='';//封闭区域名称 + }); }, ), @@ -589,36 +604,44 @@ class _DoorareaPersonApplyPageState extends State { final raw = await DoorAndCarApi.getEnclosedAreaById(addData['jurisdictionalCorpId']); LoadingDialogHelper.hide(); if (raw['success'] ) { - List newList = raw['data'] ?? []; + List newList = raw['data'] ?? []; - for(int i=0;i treeData = _buildTree(newList); + + showModalBottomSheet( + context: context, + isScrollControlled: true, + barrierColor: Colors.black54, + backgroundColor: Colors.transparent, + builder: + (ctx) => DepartmentPickerThree( + listdata: treeData, + onSelected: (id, name,pdId) async { + setState(() { + addData['closedAreaId']=id;//封闭区域id + addData['closedAreaName']=name;//封闭区域名称 + + addData['auditPersonDepartmentId']= ''; + addData['auditPersonDepartmentName']= ''; + addData['auditPersonUserId']=''; + addData['auditPersonUserName']=''; + + }); + }, + ), + ); + }else{ + ToastUtil.showNormal(context, "获取列表失败"); + LoadingDialogHelper.hide(); + // _showMessage('反馈提交失败'); + // return ""; } - - showModalBottomSheet( - context: context, - isScrollControlled: true, - barrierColor: Colors.black54, - backgroundColor: Colors.transparent, - builder: - (ctx) => DepartmentPickerThree( - listdata: newList, - onSelected: (id, name,pdId) async { - setState(() { - addData['closedAreaId']=id;//封闭区域id - addData['closedAreaName']=name;//封闭区域名称 - - }); - }, - ), - ); - }else{ - ToastUtil.showNormal(context, "获取列表失败"); - LoadingDialogHelper.hide(); - // _showMessage('反馈提交失败'); - // return ""; - } } catch (e) { // 出错时可以 Toast 或者在页面上显示错误状态 print('加载首页数据失败:$e'); @@ -627,6 +650,65 @@ class _DoorareaPersonApplyPageState extends State { } } + /// 构建多层级树形结构(支持任意层级) + List _buildTree(List data) { + if (data.isEmpty) return []; + + // 创建 id -> node 的映射 + Map nodeMap = {}; + + // 初始化所有节点 + for (var item in data) { + String id = item['id']?.toString() ?? ''; + item['children'] = []; + item['dataId'] = id; + item['dataName'] = item['closedAreaName'] ?? ''; + nodeMap[id] = item; + } + + List rootNodes = []; + + // 遍历所有节点,建立父子关系 + for (var item in data) { + String parentId = item['parentId']?.toString() ?? '0'; + + if (parentId == '0' || parentId.isEmpty) { + // 根节点 + rootNodes.add(item); + } else if (nodeMap.containsKey(parentId)) { + // 有父节点,添加到父节点的 children 中 + nodeMap[parentId]['children'].add(item); + } else { + // 父节点不在列表中,作为根节点 + rootNodes.add(item); + } + } + + // 递归排序(可选:按某个字段排序) + _sortTree(rootNodes); + + return rootNodes; + } + + /// 递归排序树节点(按 id 或名称排序) + void _sortTree(List nodes) { + for (var node in nodes) { + if (node['children'] != null && node['children'] is List) { + List children = node['children']; + if (children.isNotEmpty) { + // 按 id 排序 + children.sort((a, b) { + String idA = a['id']?.toString() ?? ''; + String idB = b['id']?.toString() ?? ''; + return idA.compareTo(idB); + }); + // 递归排序子节点 + _sortTree(children); + } + } + } + } + Future _getApproverList() async { try {