From b4669add9213f9a11ecc1c4aad5c7d144406653a Mon Sep 17 00:00:00 2001 From: hs <873121290@qq.com> Date: Tue, 2 Jun 2026 16:45:20 +0800 Subject: [PATCH] =?UTF-8?q?=E7=89=B9=E6=AE=8A=E4=BD=9C=E4=B8=9A=E4=BF=AE?= =?UTF-8?q?=E6=94=B90602?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BaiDuMap/map_webview_page.dart | 107 +++++++++++------- lib/customWidget/custom_button.dart | 1 + lib/main.dart | 18 +++ .../special_work/dh_work/dh_wait_page.dart | 22 +--- .../dh_work/work_tab_dh_list.dart | 8 +- .../special_work/dl_work/dl_wait_page.dart | 62 ++-------- .../dl_work/work_tab_dl_list.dart | 2 +- .../special_work/dt_work/dt_wait_page.dart | 62 ++-------- .../dt_work/work_tab_dt_list.dart | 2 +- .../special_work/dz_work/dz_wait_page.dart | 62 ++-------- .../dz_work/work_tab_dz_list.dart | 2 +- .../special_work/gc_work/gc_wait_page.dart | 46 +++----- .../gc_work/work_tab_gc_list.dart | 2 +- .../lsyd_work/lsyd_wait_page.dart | 88 +++----------- .../lsyd_work/work_tab_lsyd_list.dart | 2 +- .../mbcd_work/mbcd_wait_page.dart | 65 ++--------- .../mbcd_work/work_tab_mbcd_list.dart | 2 +- .../sxkj_work/sxkj_wait_page.dart | 22 +--- .../sxkj_work/work_tab_space_list.dart | 2 +- .../Tap/special_work_apply_base_page.dart | 11 +- .../home/Tap/special_work_task_page_base.dart | 2 +- .../home/Tap/special_work_wait_scaffold.dart | 63 ++++++++++- lib/pages/my_appbar.dart | 5 +- lib/tools/tools.dart | 27 +---- pubspec.lock | 4 +- pubspec.yaml | 2 + 26 files changed, 244 insertions(+), 447 deletions(-) diff --git a/lib/customWidget/BaiDuMap/map_webview_page.dart b/lib/customWidget/BaiDuMap/map_webview_page.dart index 316bc67..3c8482d 100644 --- a/lib/customWidget/BaiDuMap/map_webview_page.dart +++ b/lib/customWidget/BaiDuMap/map_webview_page.dart @@ -3,6 +3,7 @@ import 'dart:async'; import 'dart:convert'; import 'dart:math' as math; +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:geolocator/geolocator.dart'; import 'package:qhd_prevention/customWidget/toast_util.dart'; @@ -27,6 +28,7 @@ class _MapWebViewPageState extends State { double? _selectedLongitude; double? _selectedLatitude; bool _locationError = false; + late final bool _supportsWebView; // 默认坐标(北京) static const double defaultLongitude = 116.397428; @@ -35,6 +37,14 @@ class _MapWebViewPageState extends State { @override void initState() { super.initState(); + _supportsWebView = !kIsWeb && + (defaultTargetPlatform == TargetPlatform.android || + defaultTargetPlatform == TargetPlatform.iOS || + defaultTargetPlatform == TargetPlatform.macOS); + if (!_supportsWebView) { + _loading = false; + return; + } _initializeWebView(); _initializeMap(); } @@ -418,53 +428,64 @@ class _MapWebViewPageState extends State { ), body: Column( children: [ - // 状态提示栏 - if (_locationError) - Container( - padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), - color: Colors.orange[100], - child: Row( + if (!_supportsWebView) + const Expanded( + child: Center( + child: Padding( + padding: EdgeInsets.symmetric(horizontal: 24), + child: Text( + '当前运行平台不支持地图选点,请切换到 Android 或 iPhone 设备运行。', + textAlign: TextAlign.center, + ), + ), + ), + ) + else ...[ + if (_locationError) + Container( + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), + color: Colors.orange[100], + child: Row( + children: [ + Icon(Icons.warning_amber, color: Colors.orange[800], size: 16), + const SizedBox(width: 8), + Expanded( + child: Text( + '定位失败,使用默认位置', + style: TextStyle(color: Colors.orange[800], fontSize: 12), + ), + ), + TextButton( + onPressed: _retryLocation, + child: Text( + '重试', + style: TextStyle(color: Colors.orange[800], fontSize: 12), + ), + ), + ], + ), + ), + Expanded( + child: Stack( children: [ - Icon(Icons.warning_amber, color: Colors.orange[800], size: 16), - const SizedBox(width: 8), - Expanded( - child: Text( - '定位失败,使用默认位置', - style: TextStyle(color: Colors.orange[800], fontSize: 12), + if (_mapUrl.isNotEmpty) + WebViewWidget(controller: _controller), + + if (_loading) + const Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + CircularProgressIndicator(), + SizedBox(height: 16), + Text('地图加载中...'), + ], + ), ), - ), - TextButton( - onPressed: _retryLocation, - child: Text( - '重试', - style: TextStyle(color: Colors.orange[800], fontSize: 12), - ), - ), ], ), ), - - // 地图区域 - Expanded( - child: Stack( - children: [ - if (_mapUrl.isNotEmpty) - WebViewWidget(controller: _controller), - - if (_loading) - const Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - CircularProgressIndicator(), - SizedBox(height: 16), - Text('地图加载中...'), - ], - ), - ), - ], - ), - ), + ], ], ), ); @@ -485,4 +506,4 @@ class _MapWebViewPageState extends State { super.dispose(); debugPrint('地图页面销毁'); } -} \ No newline at end of file +} diff --git a/lib/customWidget/custom_button.dart b/lib/customWidget/custom_button.dart index 5d2b043..cd1295c 100644 --- a/lib/customWidget/custom_button.dart +++ b/lib/customWidget/custom_button.dart @@ -132,6 +132,7 @@ class _CustomButtonState extends State { final now = DateTime.now(); if (now.difference(_lastClickTime).inMilliseconds < widget.debounceInterval) { // 在防连点间隔内,不执行操作 + print('---'); return; } diff --git a/lib/main.dart b/lib/main.dart index 046ab4f..78b1b56 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,6 +1,7 @@ // main.dart import 'dart:async'; import 'dart:io'; +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:qhd_prevention/customWidget/custom_alert_dialog.dart'; @@ -18,6 +19,8 @@ import 'package:flutter/services.dart'; // for TextInput.hide import 'package:flutter_baidu_mapapi_base/flutter_baidu_mapapi_base.dart' show BMFMapSDK, BMF_COORD_TYPE; import 'package:flutter_baidu_mapapi_map/flutter_baidu_mapapi_map.dart'; +import 'package:webview_flutter_android/webview_flutter_android.dart'; +import 'package:webview_flutter_wkwebview/webview_flutter_wkwebview.dart'; import 'package:qhd_prevention/common/route_observer.dart'; import 'pages/mine/mine_set_pwd_page.dart'; @@ -67,8 +70,23 @@ Future showModalBottomSheetAfterUnfocus({ ); } +void _registerWebViewPlatform() { + switch (defaultTargetPlatform) { + case TargetPlatform.android: + AndroidWebViewPlatform.registerWith(); + break; + case TargetPlatform.iOS: + case TargetPlatform.macOS: + WebKitWebViewPlatform.registerWith(); + break; + default: + break; + } +} + void main( ) async { WidgetsFlutterBinding.ensureInitialized(); + _registerWebViewPlatform(); StorageService.instance.init(); /** // 1) 同意 SDK 隐私(百度 SDK 要求) diff --git a/lib/pages/home/Tap/special_work/dh_work/dh_wait_page.dart b/lib/pages/home/Tap/special_work/dh_work/dh_wait_page.dart index 824b8b3..1968e1d 100644 --- a/lib/pages/home/Tap/special_work/dh_work/dh_wait_page.dart +++ b/lib/pages/home/Tap/special_work/dh_work/dh_wait_page.dart @@ -225,23 +225,9 @@ class DhWaitPage extends SpecialWorkWaitPageBase { ), ], ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - '现场负责人: ${step10['actUserName'] ?? ''}', - softWrap: true, - maxLines: null, - textAlign: TextAlign.right, - overflow: TextOverflow.visible, - ), - Text( - '动火单位负责人: ${step4['actUserName'] ?? ''}', - softWrap: true, - maxLines: null, - overflow: TextOverflow.visible, - ), - ], + buildWrapPairRow( + '现场负责人: ${step10['actUserName'] ?? ''}', + '动火单位负责人: ${step4['actUserName'] ?? ''}', ), Text( '现场管辖单位负责人: ${step6['actUserName'] ?? ''}', @@ -283,4 +269,4 @@ class DhWaitPage extends SpecialWorkWaitPageBase { ], ); } -} \ No newline at end of file +} diff --git a/lib/pages/home/Tap/special_work/dh_work/work_tab_dh_list.dart b/lib/pages/home/Tap/special_work/dh_work/work_tab_dh_list.dart index ccd7eb8..d70e240 100644 --- a/lib/pages/home/Tap/special_work/dh_work/work_tab_dh_list.dart +++ b/lib/pages/home/Tap/special_work/dh_work/work_tab_dh_list.dart @@ -22,7 +22,7 @@ class _workTabDhListState extends State { final List> topButtonInfos = const [ { "icon": "assets/icon-apps/icon-pc-1.png", - "title": "动火台账", + "title": "动火作业台账", "unreadCount": '0', }, ]; @@ -191,14 +191,14 @@ class _workTabDhListState extends State { child: Column( children: [ // 台账分区(UI) - ListItemFactory.createBuildSimpleSection('动火台账'), + ListItemFactory.createBuildSimpleSection('动火作业台账管理'), WorkTabIconGrid( buttonInfos: topButtonInfos, onItemPressed: (index) { pushPage( DhWaitPage( stepId: '', - workTypeTitle: '动火台账', + workTypeTitle: '动火作业台账', listType: SpecialListType.list, ), context, @@ -217,7 +217,7 @@ class _workTabDhListState extends State { // 如果没有分组数据且非加载状态,显示空提示 if (!_loading && (steps.isEmpty)) ...[ - ListItemFactory.createBuildSimpleSection('动火申请审批'), + ListItemFactory.createBuildSimpleSection('动火作业申请审批'), const Padding( padding: EdgeInsets.symmetric(vertical: 20), child: Center(child: Text('暂无审批项')), diff --git a/lib/pages/home/Tap/special_work/dl_work/dl_wait_page.dart b/lib/pages/home/Tap/special_work/dl_work/dl_wait_page.dart index cecdc6d..8a1ca74 100644 --- a/lib/pages/home/Tap/special_work/dl_work/dl_wait_page.dart +++ b/lib/pages/home/Tap/special_work/dl_work/dl_wait_page.dart @@ -176,59 +176,17 @@ class DlWaitPage extends SpecialWorkWaitPageBase { ), ], ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - '作业负责人: $workUserName', - softWrap: true, - maxLines: null, - textAlign: TextAlign.right, - overflow: TextOverflow.visible, - ), - Text( - '所在单位负责人: $unitLeaderUserName', - softWrap: true, - maxLines: null, - overflow: TextOverflow.visible, - ), - ], + buildWrapPairRow( + '作业负责人: $workUserName', + '所在单位负责人: $unitLeaderUserName', ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - '监护人: $guardianUserName', - softWrap: true, - maxLines: null, - textAlign: TextAlign.right, - overflow: TextOverflow.visible, - ), - Text( - '安全交底人: $safeDisclosureUserName', - softWrap: true, - maxLines: null, - overflow: TextOverflow.visible, - ), - ], + buildWrapPairRow( + '监护人: $guardianUserName', + '安全交底人: $safeDisclosureUserName', ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - '接受交底人: $acceptDisclosureUserName', - softWrap: true, - maxLines: null, - textAlign: TextAlign.right, - overflow: TextOverflow.visible, - ), - Text( - '验收部门负责人: $acceptDepartmentLeaderUserName', - softWrap: true, - maxLines: null, - overflow: TextOverflow.visible, - ), - ], + buildWrapPairRow( + '接受交底人: $acceptDisclosureUserName', + '验收部门负责人: $acceptDepartmentLeaderUserName', ), Text( '作业类型: ${info['operationTypeName'] ?? ''}', @@ -251,4 +209,4 @@ class DlWaitPage extends SpecialWorkWaitPageBase { ], ); } -} \ No newline at end of file +} diff --git a/lib/pages/home/Tap/special_work/dl_work/work_tab_dl_list.dart b/lib/pages/home/Tap/special_work/dl_work/work_tab_dl_list.dart index 248e828..2215695 100644 --- a/lib/pages/home/Tap/special_work/dl_work/work_tab_dl_list.dart +++ b/lib/pages/home/Tap/special_work/dl_work/work_tab_dl_list.dart @@ -190,7 +190,7 @@ class _WorkTabDlListState extends State { child: Column( children: [ // 台账分区(UI) - ListItemFactory.createBuildSimpleSection('作业台账'), + ListItemFactory.createBuildSimpleSection('断路作业台账管理'), WorkTabIconGrid( buttonInfos: topButtonInfos, onItemPressed: (index) { diff --git a/lib/pages/home/Tap/special_work/dt_work/dt_wait_page.dart b/lib/pages/home/Tap/special_work/dt_work/dt_wait_page.dart index 1e9806b..420ebb8 100644 --- a/lib/pages/home/Tap/special_work/dt_work/dt_wait_page.dart +++ b/lib/pages/home/Tap/special_work/dt_work/dt_wait_page.dart @@ -176,59 +176,17 @@ class DtWaitPage extends SpecialWorkWaitPageBase { ), ], ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - '作业负责人: $workUserName', - softWrap: true, - maxLines: null, - textAlign: TextAlign.right, - overflow: TextOverflow.visible, - ), - Text( - '所在单位负责人: $unitLeaderUserName', - softWrap: true, - maxLines: null, - overflow: TextOverflow.visible, - ), - ], + buildWrapPairRow( + '作业负责人: $workUserName', + '所在单位负责人: $unitLeaderUserName', ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - '监护人: $guardianUserName', - softWrap: true, - maxLines: null, - textAlign: TextAlign.right, - overflow: TextOverflow.visible, - ), - Text( - '安全交底人: $safeDisclosureUserName', - softWrap: true, - maxLines: null, - overflow: TextOverflow.visible, - ), - ], + buildWrapPairRow( + '监护人: $guardianUserName', + '安全交底人: $safeDisclosureUserName', ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - '接受交底人: $acceptDisclosureUserName', - softWrap: true, - maxLines: null, - textAlign: TextAlign.right, - overflow: TextOverflow.visible, - ), - Text( - '验收部门负责人: $acceptDepartmentLeaderUserName', - softWrap: true, - maxLines: null, - overflow: TextOverflow.visible, - ), - ], + buildWrapPairRow( + '接受交底人: $acceptDisclosureUserName', + '验收部门负责人: $acceptDepartmentLeaderUserName', ), Text( '作业类型: ${info['operationTypeName'] ?? ''}', @@ -251,4 +209,4 @@ class DtWaitPage extends SpecialWorkWaitPageBase { ], ); } -} \ No newline at end of file +} diff --git a/lib/pages/home/Tap/special_work/dt_work/work_tab_dt_list.dart b/lib/pages/home/Tap/special_work/dt_work/work_tab_dt_list.dart index 24d33f7..680133b 100644 --- a/lib/pages/home/Tap/special_work/dt_work/work_tab_dt_list.dart +++ b/lib/pages/home/Tap/special_work/dt_work/work_tab_dt_list.dart @@ -190,7 +190,7 @@ class _WorkTabDtListState extends State { child: Column( children: [ // 台账分区(UI) - ListItemFactory.createBuildSimpleSection('作业台账'), + ListItemFactory.createBuildSimpleSection('动土作业台账管理'), WorkTabIconGrid( buttonInfos: topButtonInfos, onItemPressed: (index) { diff --git a/lib/pages/home/Tap/special_work/dz_work/dz_wait_page.dart b/lib/pages/home/Tap/special_work/dz_work/dz_wait_page.dart index 7bec5ea..e513fdc 100644 --- a/lib/pages/home/Tap/special_work/dz_work/dz_wait_page.dart +++ b/lib/pages/home/Tap/special_work/dz_work/dz_wait_page.dart @@ -176,59 +176,17 @@ class DzWaitPage extends SpecialWorkWaitPageBase { ), ], ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - '作业负责人: $workUserName', - softWrap: true, - maxLines: null, - textAlign: TextAlign.right, - overflow: TextOverflow.visible, - ), - Text( - '所在单位负责人: $unitLeaderUserName', - softWrap: true, - maxLines: null, - overflow: TextOverflow.visible, - ), - ], + buildWrapPairRow( + '作业负责人: $workUserName', + '所在单位负责人: $unitLeaderUserName', ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - '监护人: $guardianUserName', - softWrap: true, - maxLines: null, - textAlign: TextAlign.right, - overflow: TextOverflow.visible, - ), - Text( - '安全交底人: $safeDisclosureUserName', - softWrap: true, - maxLines: null, - overflow: TextOverflow.visible, - ), - ], + buildWrapPairRow( + '监护人: $guardianUserName', + '安全交底人: $safeDisclosureUserName', ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - '接受交底人: $acceptDisclosureUserName', - softWrap: true, - maxLines: null, - textAlign: TextAlign.right, - overflow: TextOverflow.visible, - ), - Text( - '验收部门负责人: $acceptDepartmentLeaderUserName', - softWrap: true, - maxLines: null, - overflow: TextOverflow.visible, - ), - ], + buildWrapPairRow( + '接受交底人: $acceptDisclosureUserName', + '验收部门负责人: $acceptDepartmentLeaderUserName', ), Text( '作业类型: ${info['operationTypeName'] ?? ''}', @@ -251,4 +209,4 @@ class DzWaitPage extends SpecialWorkWaitPageBase { ], ); } -} \ No newline at end of file +} diff --git a/lib/pages/home/Tap/special_work/dz_work/work_tab_dz_list.dart b/lib/pages/home/Tap/special_work/dz_work/work_tab_dz_list.dart index db39146..a2181ea 100644 --- a/lib/pages/home/Tap/special_work/dz_work/work_tab_dz_list.dart +++ b/lib/pages/home/Tap/special_work/dz_work/work_tab_dz_list.dart @@ -190,7 +190,7 @@ class _WorkTabDzListState extends State { child: Column( children: [ // 台账分区(UI) - ListItemFactory.createBuildSimpleSection('作业台账'), + ListItemFactory.createBuildSimpleSection('吊装作业台账管理'), WorkTabIconGrid( buttonInfos: topButtonInfos, onItemPressed: (index) { diff --git a/lib/pages/home/Tap/special_work/gc_work/gc_wait_page.dart b/lib/pages/home/Tap/special_work/gc_work/gc_wait_page.dart index 38ec64a..d510be3 100644 --- a/lib/pages/home/Tap/special_work/gc_work/gc_wait_page.dart +++ b/lib/pages/home/Tap/special_work/gc_work/gc_wait_page.dart @@ -199,41 +199,21 @@ class GcWaitPage extends SpecialWorkWaitPageBase { ), ], ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text("作业负责人: $workUserName", - softWrap: true, maxLines: null, overflow: TextOverflow.visible), - Text("所在单位负责人: $unitLeaderUserName", - softWrap: true, maxLines: null, overflow: TextOverflow.visible), - ], + buildWrapPairRow( + '作业负责人: $workUserName', + '所在单位负责人: $unitLeaderUserName', ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text("审核部门负责人: $auditDepartmentLeaderUserName", - softWrap: true, maxLines: null, overflow: TextOverflow.visible), - Text("审批部门负责人: $spDepartmentLeaderUserName", - softWrap: true, maxLines: null, overflow: TextOverflow.visible), - ], + buildWrapPairRow( + '审核部门负责人: $auditDepartmentLeaderUserName', + '审批部门负责人: $spDepartmentLeaderUserName', ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text("监护人: $guardianUserName", - softWrap: true, maxLines: null, overflow: TextOverflow.visible), - Text("安全交底人: $safeDisclosureUserName", - softWrap: true, maxLines: null, overflow: TextOverflow.visible), - ], + buildWrapPairRow( + '监护人: $guardianUserName', + '安全交底人: $safeDisclosureUserName', ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text("接受交底人: $acceptDisclosureUserName", - softWrap: true, maxLines: null, overflow: TextOverflow.visible), - Text("验收部门负责人: $acceptDepartmentLeaderUserName", - softWrap: true, maxLines: null, overflow: TextOverflow.visible), - ], + buildWrapPairRow( + '接受交底人: $acceptDisclosureUserName', + '验收部门负责人: $acceptDepartmentLeaderUserName', ), Text( "作业类型: ${info['operationTypeName'] ?? ''}", @@ -256,4 +236,4 @@ class GcWaitPage extends SpecialWorkWaitPageBase { ], ); } -} \ No newline at end of file +} diff --git a/lib/pages/home/Tap/special_work/gc_work/work_tab_gc_list.dart b/lib/pages/home/Tap/special_work/gc_work/work_tab_gc_list.dart index 0a35b5a..f2aca1c 100644 --- a/lib/pages/home/Tap/special_work/gc_work/work_tab_gc_list.dart +++ b/lib/pages/home/Tap/special_work/gc_work/work_tab_gc_list.dart @@ -190,7 +190,7 @@ class _WorkTabGcListState extends State { child: Column( children: [ // 台账分区(UI) - ListItemFactory.createBuildSimpleSection('作业台账'), + ListItemFactory.createBuildSimpleSection('高处作业台账管理'), WorkTabIconGrid( buttonInfos: topButtonInfos, onItemPressed: (index) { diff --git a/lib/pages/home/Tap/special_work/lsyd_work/lsyd_wait_page.dart b/lib/pages/home/Tap/special_work/lsyd_work/lsyd_wait_page.dart index 9554dba..422f2cb 100644 --- a/lib/pages/home/Tap/special_work/lsyd_work/lsyd_wait_page.dart +++ b/lib/pages/home/Tap/special_work/lsyd_work/lsyd_wait_page.dart @@ -131,11 +131,6 @@ class LsydWaitPage extends SpecialWorkWaitPageBase { final String safeDisclosureUserName = '${step18['actUserName'] ?? ''}'; final String acceptDisclosureUserName = '${step19['actUserName'] ?? ''}'; final String guardianUserName = '${step20['actUserName'] ?? ''}'; - final String workUserName = '${step21['actUserName'] ?? ''}'; - final String unitLeaderUserName = '${step22['actUserName'] ?? ''}'; - final String auditDepartmentLeaderUserName = - '${step23['actUserName'] ?? ''}'; - final String spDepartmentLeaderUserName = '${step24['actUserName'] ?? ''}'; final String acceptDepartmentLeaderUserName = '${step25['actUserName'] ?? ''}'; final String userElectDepartmentLeaderUserName = @@ -196,78 +191,21 @@ class LsydWaitPage extends SpecialWorkWaitPageBase { ), ], ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - '作业指挥负责人: ${info['workCommandPerson'] ?? ''}', - softWrap: true, - maxLines: null, - textAlign: TextAlign.right, - overflow: TextOverflow.visible, - ), - Text( - '用电单位负责人: $userElectDepartmentLeaderUserName', - softWrap: true, - maxLines: null, - overflow: TextOverflow.visible, - ), - ], + buildWrapPairRow( + '作业指挥负责人: ${info['workCommandPerson'] ?? ''}', + '用电单位负责人: $userElectDepartmentLeaderUserName', ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - '配送电单位负责人: $sendEletDepartmentLeaderUserName', - softWrap: true, - maxLines: null, - textAlign: TextAlign.right, - overflow: TextOverflow.visible, - ), - if ('${info['gasFlag']}' == '1') - Text( - '气体分析人: $gasUserName', - softWrap: true, - maxLines: null, - overflow: TextOverflow.visible, - ), - ], + buildWrapPairRow( + '配送电单位负责人: $sendEletDepartmentLeaderUserName', + '${info['gasFlag']}' == '1' ? '气体分析人: $gasUserName' : '', ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - '监护人: ${guardianUserName}', - softWrap: true, - maxLines: null, - textAlign: TextAlign.right, - overflow: TextOverflow.visible, - ), - Text( - '安全交底人: $safeDisclosureUserName', - softWrap: true, - maxLines: null, - overflow: TextOverflow.visible, - ), - ], + buildWrapPairRow( + '监护人: $guardianUserName', + '安全交底人: $safeDisclosureUserName', ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - '接受交底人: $acceptDisclosureUserName', - softWrap: true, - maxLines: null, - textAlign: TextAlign.right, - overflow: TextOverflow.visible, - ), - Text( - '验收部门负责人: $acceptDepartmentLeaderUserName', - softWrap: true, - maxLines: null, - overflow: TextOverflow.visible, - ), - ], + buildWrapPairRow( + '接受交底人: $acceptDisclosureUserName', + '验收部门负责人: $acceptDepartmentLeaderUserName', ), Text( '作业类型: ${info['operationTypeName'] ?? ''}', @@ -290,4 +228,4 @@ class LsydWaitPage extends SpecialWorkWaitPageBase { ], ); } -} \ No newline at end of file +} diff --git a/lib/pages/home/Tap/special_work/lsyd_work/work_tab_lsyd_list.dart b/lib/pages/home/Tap/special_work/lsyd_work/work_tab_lsyd_list.dart index 177c530..79a9178 100644 --- a/lib/pages/home/Tap/special_work/lsyd_work/work_tab_lsyd_list.dart +++ b/lib/pages/home/Tap/special_work/lsyd_work/work_tab_lsyd_list.dart @@ -190,7 +190,7 @@ class _WorkTabLsydListState extends State { child: Column( children: [ // 台账分区(UI) - ListItemFactory.createBuildSimpleSection('作业台账'), + ListItemFactory.createBuildSimpleSection('临时用电作业台账管理'), WorkTabIconGrid( buttonInfos: topButtonInfos, onItemPressed: (index) { diff --git a/lib/pages/home/Tap/special_work/mbcd_work/mbcd_wait_page.dart b/lib/pages/home/Tap/special_work/mbcd_work/mbcd_wait_page.dart index e49b173..44b6597 100644 --- a/lib/pages/home/Tap/special_work/mbcd_work/mbcd_wait_page.dart +++ b/lib/pages/home/Tap/special_work/mbcd_work/mbcd_wait_page.dart @@ -125,9 +125,6 @@ class MbcdWaitPage extends SpecialWorkWaitPageBase { final String guardianUserName = '${step20['actUserName'] ?? ''}'; final String workUserName = '${step21['actUserName'] ?? ''}'; final String unitLeaderUserName = '${step22['actUserName'] ?? ''}'; - final String auditDepartmentLeaderUserName = - '${step23['actUserName'] ?? ''}'; - final String spDepartmentLeaderUserName = '${step24['actUserName'] ?? ''}'; final String acceptDepartmentLeaderUserName = '${step25['actUserName'] ?? ''}'; @@ -184,59 +181,17 @@ class MbcdWaitPage extends SpecialWorkWaitPageBase { ), ], ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - '作业负责人: $workUserName', - softWrap: true, - maxLines: null, - textAlign: TextAlign.right, - overflow: TextOverflow.visible, - ), - Text( - '所在单位负责人: $unitLeaderUserName', - softWrap: true, - maxLines: null, - overflow: TextOverflow.visible, - ), - ], + buildWrapPairRow( + '作业负责人: $workUserName', + '所在单位负责人: $unitLeaderUserName', ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - '监护人: $guardianUserName', - softWrap: true, - maxLines: null, - textAlign: TextAlign.right, - overflow: TextOverflow.visible, - ), - Text( - '安全交底人: $safeDisclosureUserName', - softWrap: true, - maxLines: null, - overflow: TextOverflow.visible, - ), - ], + buildWrapPairRow( + '监护人: $guardianUserName', + '安全交底人: $safeDisclosureUserName', ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - '接受交底人: $acceptDisclosureUserName', - softWrap: true, - maxLines: null, - textAlign: TextAlign.right, - overflow: TextOverflow.visible, - ), - Text( - '验收部门负责人: $acceptDepartmentLeaderUserName', - softWrap: true, - maxLines: null, - overflow: TextOverflow.visible, - ), - ], + buildWrapPairRow( + '接受交底人: $acceptDisclosureUserName', + '验收部门负责人: $acceptDepartmentLeaderUserName', ), Text( '作业类型: ${info['operationTypeName'] ?? ''}', @@ -259,4 +214,4 @@ class MbcdWaitPage extends SpecialWorkWaitPageBase { ], ); } -} \ No newline at end of file +} diff --git a/lib/pages/home/Tap/special_work/mbcd_work/work_tab_mbcd_list.dart b/lib/pages/home/Tap/special_work/mbcd_work/work_tab_mbcd_list.dart index 14f04d5..344971d 100644 --- a/lib/pages/home/Tap/special_work/mbcd_work/work_tab_mbcd_list.dart +++ b/lib/pages/home/Tap/special_work/mbcd_work/work_tab_mbcd_list.dart @@ -190,7 +190,7 @@ class _WorkTabMbcdListState extends State { child: Column( children: [ // 台账分区(UI) - ListItemFactory.createBuildSimpleSection('作业台账'), + ListItemFactory.createBuildSimpleSection('盲板抽堵作业台账管理'), WorkTabIconGrid( buttonInfos: topButtonInfos, onItemPressed: (index) { diff --git a/lib/pages/home/Tap/special_work/sxkj_work/sxkj_wait_page.dart b/lib/pages/home/Tap/special_work/sxkj_work/sxkj_wait_page.dart index 9fb9c1a..604aa6b 100644 --- a/lib/pages/home/Tap/special_work/sxkj_work/sxkj_wait_page.dart +++ b/lib/pages/home/Tap/special_work/sxkj_work/sxkj_wait_page.dart @@ -161,23 +161,9 @@ class SxkjWaitPage extends SpecialWorkWaitPageBase { ), ], ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - '管理单位: ${chooseLimitedSpace['manageDeptName'] ?? ''}', - softWrap: true, - maxLines: null, - textAlign: TextAlign.right, - overflow: TextOverflow.visible, - ), - Text( - '作业单位: ${info['workDepartmentName'] ?? ''}', - softWrap: true, - maxLines: null, - overflow: TextOverflow.visible, - ), - ], + buildWrapPairRow( + '管理单位: ${chooseLimitedSpace['manageDeptName'] ?? ''}', + '作业单位: ${info['workDepartmentName'] ?? ''}', ), Text( '有限空间名称及编号: ${info['limitedSpaceNameAndCode'] ?? ''}', @@ -213,4 +199,4 @@ class SxkjWaitPage extends SpecialWorkWaitPageBase { ], ); } -} \ No newline at end of file +} diff --git a/lib/pages/home/Tap/special_work/sxkj_work/work_tab_space_list.dart b/lib/pages/home/Tap/special_work/sxkj_work/work_tab_space_list.dart index 8c39243..fec3761 100644 --- a/lib/pages/home/Tap/special_work/sxkj_work/work_tab_space_list.dart +++ b/lib/pages/home/Tap/special_work/sxkj_work/work_tab_space_list.dart @@ -184,7 +184,7 @@ class _WorkTabSpaceListState extends State { @override Widget build(BuildContext context) { return Scaffold( - appBar: const MyAppbar(title: '有限空间安全作业'), + appBar: const MyAppbar(title: '有限空间作业'), body: SafeArea( child: RefreshIndicator( onRefresh: _getData, diff --git a/lib/pages/home/Tap/special_work_apply_base_page.dart b/lib/pages/home/Tap/special_work_apply_base_page.dart index 09391e1..b1026d1 100644 --- a/lib/pages/home/Tap/special_work_apply_base_page.dart +++ b/lib/pages/home/Tap/special_work_apply_base_page.dart @@ -935,15 +935,10 @@ abstract class SpecialWorkApplyBaseState 'checkNo': info['checkNo'] ?? '', 'signLogs': signLogs, 'workId': form['workId'] ?? '', + 'xgfId' : info['xgfId'] ?? '' }; payload.addAll(extraPayload); - if (pd['internalOperationFlag'] == 1) { - payload['xgfId'] = info['xgfId'] ?? ''; - } - - - if (FormUtils.hasValue(payload, 'workId') && widget.status == '2') { payload.remove('checkNo'); payload.remove('workId'); @@ -1272,10 +1267,10 @@ abstract class SpecialWorkApplyBaseState } /// 统一标题 - String get pageTitleForEdit => '$workTitle编辑'; + String get pageTitleForEdit => '编辑'; /// 统一标题 - String get pageTitleForApply => '$workTitle申请'; + String get pageTitleForApply => '新增'; /// 统一 map 转换 Map _toMap(dynamic raw) { diff --git a/lib/pages/home/Tap/special_work_task_page_base.dart b/lib/pages/home/Tap/special_work_task_page_base.dart index f22e3dc..63cc3af 100644 --- a/lib/pages/home/Tap/special_work_task_page_base.dart +++ b/lib/pages/home/Tap/special_work_task_page_base.dart @@ -1221,7 +1221,7 @@ class _SpecialWorkTaskPageBaseState extends State { Widget build(BuildContext context) { return Scaffold( backgroundColor: Colors.white, - appBar: MyAppbar(title: widget.stepName), + appBar: MyAppbar(title: widget.isEdit ? '审批' : '查看'), body: SafeArea( child: SingleChildScrollView( padding: const EdgeInsets.all(5), diff --git a/lib/pages/home/Tap/special_work_wait_scaffold.dart b/lib/pages/home/Tap/special_work_wait_scaffold.dart index 8472532..beba331 100644 --- a/lib/pages/home/Tap/special_work_wait_scaffold.dart +++ b/lib/pages/home/Tap/special_work_wait_scaffold.dart @@ -102,6 +102,67 @@ abstract class SpecialWorkWaitPageBase extends StatefulWidget { String statusName, ); + @protected + Widget buildWrapPairRow( + String leftText, + String rightText, { + TextStyle? style, + double spacing = 12, + }) { + final TextStyle effectiveStyle = style ?? const TextStyle(); + final String trimmedLeftText = leftText.trim(); + final String trimmedRightText = rightText.trim(); + + Widget buildItem(String text, {TextAlign textAlign = TextAlign.left}) { + return Text( + text, + style: effectiveStyle, + textAlign: textAlign, + softWrap: true, + maxLines: null, + overflow: TextOverflow.visible, + ); + } + + if (trimmedLeftText.isEmpty && trimmedRightText.isEmpty) { + return const SizedBox.shrink(); + } + + if (trimmedRightText.isEmpty) { + return buildItem(leftText); + } + + if (trimmedLeftText.isEmpty) { + return Align( + alignment: Alignment.centerRight, + child: buildItem(rightText, textAlign: TextAlign.right), + ); + } + + return LayoutBuilder( + builder: (context, constraints) { + final double itemWidth = constraints.maxWidth.isFinite + ? (constraints.maxWidth - spacing) / 2 + : double.infinity; + + return Wrap( + spacing: spacing, + runSpacing: 8, + children: [ + SizedBox(width: itemWidth, child: buildItem(leftText)), + SizedBox( + width: itemWidth, + child: Align( + alignment: Alignment.centerRight, + child: buildItem(rightText, textAlign: TextAlign.right), + ), + ), + ], + ); + }, + ); + } + /// 修改为接收具体的方法回调,由 State 传入 Widget buildActionButtons( BuildContext context, @@ -526,4 +587,4 @@ class _SpecialWorkWaitPageBaseState extends State { ), ); } -} \ No newline at end of file +} diff --git a/lib/pages/my_appbar.dart b/lib/pages/my_appbar.dart index 06b00ce..4341cb7 100644 --- a/lib/pages/my_appbar.dart +++ b/lib/pages/my_appbar.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'dart:io' show Platform; +import 'package:qhd_prevention/customWidget/guarded_tap.dart'; class MyAppbar extends StatelessWidget implements PreferredSizeWidget { final String title; @@ -57,7 +58,7 @@ class MyAppbar extends StatelessWidget implements PreferredSizeWidget { Widget _buildBackButton(BuildContext context) { return Padding( padding: EdgeInsets.only(left: Platform.isIOS ? 8.0 : 16.0), - child: IconButton( + child: GuardedIconButton( icon: Icon( Platform.isIOS ? Icons.arrow_back_ios : Icons.arrow_back, color: textColor, @@ -84,4 +85,4 @@ class MyAppbar extends StatelessWidget implements PreferredSizeWidget { ) ]; } -} \ No newline at end of file +} diff --git a/lib/tools/tools.dart b/lib/tools/tools.dart index 1cffa71..6bc25dd 100644 --- a/lib/tools/tools.dart +++ b/lib/tools/tools.dart @@ -12,6 +12,8 @@ import 'package:connectivity_plus/connectivity_plus.dart'; import 'package:url_launcher/url_launcher.dart'; import 'package:crypto/crypto.dart' as crypto; +export 'click_util.dart'; + int getRandomWithNum(int min, int max) { if (max < min) { // 保护性处理:交换或抛错,这里交换 @@ -254,29 +256,6 @@ bool isBeforeNow(String timeStr) { } return dt.isBefore(DateTime.now()); } -/// ------------------------------------------------------ -/// 防多次点击 -/// ------------------------------------------------------ -class ClickUtil { - ClickUtil._(); - - static bool _canClick = true; - - /// 调用示例: - /// ClickUtil.noMultipleClicks(() { /* your code */ }); - static void noMultipleClicks(VoidCallback fn, {int delayMs = 2000}) { - if (_canClick) { - _canClick = false; - fn(); - Future.delayed(Duration(milliseconds: delayMs), () { - _canClick = true; - }); - } else { - debugPrint('请稍后点击'); - } - } -} - void presentPage(BuildContext context, Widget page) { Navigator.push( context, @@ -894,4 +873,4 @@ List> nationMapList = [ } ] -; \ No newline at end of file +; diff --git a/pubspec.lock b/pubspec.lock index 52bd8bc..5b9ce56 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1371,7 +1371,7 @@ packages: source: hosted version: "4.13.1" webview_flutter_android: - dependency: transitive + dependency: "direct main" description: name: webview_flutter_android sha256: f560f57d0f529c1dcdaf4edc3a3217b099560622f9f4a10b6bdbb566553c61ea @@ -1387,7 +1387,7 @@ packages: source: hosted version: "2.15.1" webview_flutter_wkwebview: - dependency: transitive + dependency: "direct main" description: name: webview_flutter_wkwebview sha256: a68868ac4828a5f012bf81e8bd25d879f3cec5bd5301575466caafbf9a320a65 diff --git a/pubspec.yaml b/pubspec.yaml index bac7c0b..aea57a7 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -86,6 +86,8 @@ dependencies: fluttertoast: ^8.2.12 #网页页面加载 webview_flutter: ^4.4.0 + webview_flutter_android: ^4.11.0 + webview_flutter_wkwebview: ^3.24.5 path_provider: ^2.0.1 camera: ^0.11.2