diff --git a/.metadata b/.metadata index 3bb6b3c..e2ff7d7 100644 --- a/.metadata +++ b/.metadata @@ -4,7 +4,7 @@ # This file should be version controlled and should not be manually edited. version: - revision: "35c388afb57ef061d06a39b537336c87e0e3d1b1" + revision: "d7b523b356d15fb81e7d340bbe52b47f93937323" channel: "stable" project_type: app @@ -13,14 +13,11 @@ project_type: app migration: platforms: - platform: root - create_revision: 35c388afb57ef061d06a39b537336c87e0e3d1b1 - base_revision: 35c388afb57ef061d06a39b537336c87e0e3d1b1 - - platform: android - create_revision: 35c388afb57ef061d06a39b537336c87e0e3d1b1 - base_revision: 35c388afb57ef061d06a39b537336c87e0e3d1b1 - - platform: ios - create_revision: 35c388afb57ef061d06a39b537336c87e0e3d1b1 - base_revision: 35c388afb57ef061d06a39b537336c87e0e3d1b1 + create_revision: d7b523b356d15fb81e7d340bbe52b47f93937323 + base_revision: d7b523b356d15fb81e7d340bbe52b47f93937323 + - platform: web + create_revision: d7b523b356d15fb81e7d340bbe52b47f93937323 + base_revision: d7b523b356d15fb81e7d340bbe52b47f93937323 # User provided section diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index e5556b3..8daa2d1 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -8,7 +8,7 @@ 智守安全 CFBundleExecutable $(EXECUTABLE_NAME) - CFBundleIdentifier + CFBundleIdentifierƒ $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 @@ -85,6 +85,7 @@ com.apple.developer.nfc.readersession.formats TAG + NDEF diff --git a/lib/customWidget/dotted_border_box.dart b/lib/customWidget/dotted_border_box.dart index 312a67c..58375ff 100644 --- a/lib/customWidget/dotted_border_box.dart +++ b/lib/customWidget/dotted_border_box.dart @@ -1,4 +1,3 @@ -import 'dart:ffi'; import 'package:flutter/material.dart'; import 'package:dotted_border/dotted_border.dart'; diff --git a/lib/http/ApiService.dart b/lib/http/ApiService.dart index a576966..fbf9d47 100644 --- a/lib/http/ApiService.dart +++ b/lib/http/ApiService.dart @@ -25,9 +25,9 @@ class ApiService { /// 登录及其他管理后台接口 // static const String basePath = "https://qaaqwh.qhdsafety.com/integrated_whb"; - // static const String basePath = "http://192.168.20.240:8500/integrated_whb";//测试服务器 + static const String basePath = "http://192.168.20.240:8500/integrated_whb";//测试服务器 // static const String basePath = "http://192.168.0.25:28199";//王轩服务器 - static const String basePath = "http://192.168.0.45:28199";//长久服务器 + // static const String basePath = "http://192.168.0.45:28199";//长久服务器 /// 图片文件服务 static const String baseImgPath = "https://file.zcloudchina.com/YTHFile"; diff --git a/lib/pages/app/application_page.dart b/lib/pages/app/application_page.dart index 6ea97de..de1b5a3 100644 --- a/lib/pages/app/application_page.dart +++ b/lib/pages/app/application_page.dart @@ -4,6 +4,7 @@ import 'package:qhd_prevention/http/ApiService.dart'; import 'package:qhd_prevention/pages/app/Danger_paicha/check_record_page.dart'; import 'package:qhd_prevention/pages/app/Danger_paicha/quick_report_page.dart'; import 'package:qhd_prevention/pages/app/danger_wait_list_page.dart'; +import 'package:qhd_prevention/pages/app/gy_alarm/gy_alarm_page.dart'; import 'package:qhd_prevention/pages/badge_manager.dart'; import 'package:qhd_prevention/pages/home/work/risk_list_page.dart'; @@ -25,7 +26,8 @@ enum AppItem { specialRecord, // 专项检查中的隐患记录 supervisionRectification, // 监管帮扶中的隐患整改 supervisionRecord, // 监管帮扶中的隐患记录 - aiAlarm, // 监管帮扶中的隐患记录 + aiAlarm, // 检测预警-AI预警 + gyAlarm // 检测预警-工艺报警优化 } class ApplicationPage extends StatefulWidget { @@ -124,6 +126,10 @@ class _ApplicationPageState extends State { case AppItem.aiAlarm: // ai pushPage(AiAlarmPage(), context); + break; + case AppItem.gyAlarm: + pushPage(GyAlarmPage(), context); + break; } } @@ -164,11 +170,12 @@ class _ApplicationPageState extends State { {'item': AppItem.acceptedRisk, 'icon': 'assets/icon-apps/icon-zl-1.png', 'title': '已验收隐患', 'num': 0}, ], }, - { 'title': '监测预警', 'list': [ {'item': AppItem.aiAlarm, 'icon': 'assets/icon-apps/icon-pc-1.png', 'title': 'AI报警', 'num': 0}, + {'item': AppItem.gyAlarm, 'icon': 'assets/icon-apps/icon-pc-1.png', 'title': '工艺报警优化', 'num': 0}, + ], }, ]; diff --git a/lib/pages/app/gy_alarm/gy_alarm_page.dart b/lib/pages/app/gy_alarm/gy_alarm_page.dart new file mode 100644 index 0000000..a3cf588 --- /dev/null +++ b/lib/pages/app/gy_alarm/gy_alarm_page.dart @@ -0,0 +1,130 @@ +import 'package:flutter/material.dart'; +import 'package:qhd_prevention/customWidget/ItemWidgetFactory.dart'; +import 'package:qhd_prevention/customWidget/toast_util.dart'; +import 'package:qhd_prevention/http/ApiService.dart'; +import 'package:qhd_prevention/pages/KeyProjects/Danger/danger_list_page.dart'; +import 'package:qhd_prevention/pages/KeyProjects/KeyProject/keyProject_list_page.dart'; +import 'package:qhd_prevention/pages/KeyProjects/SafeCheck/safeCheck_list_page.dart'; +import 'package:qhd_prevention/pages/home/SafeCheck/CheckPersonSign/safeCheck_sign_list_page.dart'; +import 'package:qhd_prevention/pages/home/SafeCheck/CheckPersonSure/check_person_list_page.dart'; +import 'package:qhd_prevention/pages/home/SafeCheck/DangeCheck/safeCheck_danger_list_page.dart'; +import 'package:qhd_prevention/pages/home/SafeCheck/Record/defend_record_list_page.dart'; +import 'package:qhd_prevention/pages/home/SafeCheck/Start/safeCheck_start_list_page.dart'; +import 'package:qhd_prevention/pages/home/tap/tabList/work_tab_icon_grid.dart'; +import 'package:qhd_prevention/pages/my_appbar.dart'; +import 'package:qhd_prevention/tools/tools.dart'; + + +class GyAlarmPage extends StatefulWidget { + const GyAlarmPage({super.key}); + + @override + State createState() => _GyAlarmPageState(); +} + +class _GyAlarmPageState extends State { + late List> buttonInfos = [ + { + "icon": "assets/icon-apps/icon-yxkj-1.png", + "title": "已检查", + "unreadCount": '0', + }, + { + "icon": "assets/icon-apps/icon-yxkj-4.png", + "title": "未检查", + "unreadCount": '0', + }, + { + "icon": "assets/icon-apps/icon-yxkj-2.png", + "title": "已完成", + "unreadCount":'0', + }, + + ]; + + @override + void initState() { + super.initState(); + // _getData(); + } + // Future _getData() async { + // final data = await ApiService.getSafeCheckCount(); + // setState(() { + // final checkedCount = data['checkedCount']['checkedCount'] ?? ''; + // final repulseAndCheckCount = data['repulseAndCheckCount']['repulseAndCheckCount'] ?? ''; + // final confirmCount = data['confirmCount']['confirmCount'] ?? ''; + // final repulseCount = data['repulseCount']['repulseCount'] ?? ''; + // + // buttonInfos = [ + // { + // "icon": "assets/icon-apps/icon-yxkj-1.png", + // "title": "安全检查\n发起", + // "unreadCount": repulseCount, + // }, + // { + // "icon": "assets/icon-apps/icon-yxkj-4.png", + // "title": "检查人\n确认", + // "unreadCount": confirmCount, + // }, + // { + // "icon": "assets/icon-apps/icon-yxkj-2.png", + // "title": "被检查人\n签字/申辩", + // "unreadCount":checkedCount, + // }, + // { + // "icon": "assets/icon-apps/icon-yxkj-2.png", + // "title": "隐患指派\n及验收", + // "unreadCount":repulseAndCheckCount, + // }, + // { + // "icon": "assets/icon-apps/icon-yxkj-2.png", + // "title": "申辩记录", + // "unreadCount":'0', + // }, + // + // ]; + // }); + // } + void _handleItemPressed(int index) async { + // 根据索引执行不同的导航逻辑 + String title = ''; + switch (index) { + case 0: { + title = '安全检查发起'; + // await pushPage(SafecheckStartListPage(flow: title), context); + } break; + case 1: { + title = '安全检查核实'; + // await pushPage(CheckPersonListPage(flow: title), context); + + } break; + case 2: { + title = '安全检查确认'; + // await pushPage(SafecheckSignListPage(flow: title), context); + + } break; + default: + print("按钮 $index 被点击"); + } + ToastUtil.showNormal(context, '开发中'); + // _getData(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: MyAppbar(title: '工艺报警优化'), + body: SafeArea( + child: Column( + children: [ + ListItemFactory.createBuildSimpleSection('工艺报警优化'), + WorkTabIconGrid( + buttonInfos: buttonInfos, + onItemPressed: _handleItemPressed, + ), + ], + ) + ), + ); + } +} diff --git a/lib/pages/home/NFC/home_nfc_add_page.dart b/lib/pages/home/NFC/home_nfc_add_page.dart index 2062df5..d870b34 100644 --- a/lib/pages/home/NFC/home_nfc_add_page.dart +++ b/lib/pages/home/NFC/home_nfc_add_page.dart @@ -1,15 +1,12 @@ import 'dart:convert'; -import 'dart:ffi'; import 'package:flutter/material.dart'; import 'package:qhd_prevention/customWidget/bottom_picker.dart'; import 'package:qhd_prevention/customWidget/custom_alert_dialog.dart'; import 'package:qhd_prevention/customWidget/custom_button.dart'; -import 'package:qhd_prevention/customWidget/department_person_picker.dart'; import 'package:qhd_prevention/customWidget/toast_util.dart'; import 'package:qhd_prevention/http/ApiService.dart'; import 'package:qhd_prevention/pages/home/tap/item_list_widget.dart'; -import 'package:qhd_prevention/pages/home/work_alert.dart'; import 'package:qhd_prevention/pages/my_appbar.dart'; import 'package:qhd_prevention/services/nfc_service.dart'; import 'package:qhd_prevention/tools/tools.dart'; diff --git a/lib/pages/home/home_page.dart b/lib/pages/home/home_page.dart index 004f4ba..a06039a 100644 --- a/lib/pages/home/home_page.dart +++ b/lib/pages/home/home_page.dart @@ -42,12 +42,14 @@ class HomePage extends StatefulWidget { class HomePageState extends State { int _eight_work_count = 0; int _safetyEnvironmentalInspection = 0; + void startScan() { Navigator.push( context, MaterialPageRoute(builder: (_) => ScanPage(totalList: totalList)), ); } + // 缓存 key static const String _hiddenCacheKey = 'hidden_roll_cache'; @@ -67,7 +69,9 @@ class HomePageState extends State { return ''; } } + List totalList = []; + /// 按钮信息 List> buttonInfos = [ { @@ -117,7 +121,7 @@ class HomePageState extends State { "title": "安全例会", "unreadCount": 0, }, - // {"icon": "assets/icon-apps/home-xj.png", "title": "燃气巡检", "unreadCount": 0}, + {"icon": "assets/icon-apps/home-xj.png", "title": "燃气巡检", "unreadCount": 0}, ]; /// 我的工作 @@ -186,14 +190,12 @@ class HomePageState extends State { // 使用初始化加载:先恢复缓存(若存在则直接显示),然后再发起网络请求(成功则覆盖缓存) BadgeManager().initAllModules(); _initialLoad(); - } /// 首次加载:先恢复缓存(如果有),然后在后台去刷新(只有当无缓存时才显示 loading) Future _initialLoad() async { final result = await AuthService.checkUpdate(); - try{ - + try { if (FormUtils.hasValue(result, 'pd')) { Map pd = result['pd']; final versionInfo = await getAppVersion(); @@ -201,28 +203,28 @@ class HomePageState extends State { if (versionInfo.versionName != pd['VERSION']) { //有更新 提示更新 final ok = await CustomAlertDialog.showConfirm( - context, - barrierDismissible:false, - title: '更新通知', - content: isWifi ? '发现新版本,是否更新?为了更好的体验,请更新到最新版本。' : '发现新版本,检查到您当前使用的是移动网络,是否更新?更新时请注意流量消耗。为了更好的体验,请更新到最新版本。', - cancelText: pd['ISUPDATE'] == '1' ? '' : '稍后更新', - confirmText: '立即更新' + context, + barrierDismissible: false, + title: '更新通知', + content: + isWifi + ? '发现新版本,是否更新?为了更好的体验,请更新到最新版本。' + : '发现新版本,检查到您当前使用的是移动网络,是否更新?更新时请注意流量消耗。为了更好的体验,请更新到最新版本。', + cancelText: pd['ISUPDATE'] == '1' ? '' : '稍后更新', + confirmText: '立即更新', ); if (ok) { if (Platform.isIOS) { openAppStore(); - }else{ + } else { final apkUrl = pd['FILEURL'] ?? ''; await showUpdateConfirm(context, apkUrl: apkUrl); } - } return; } - } - }catch(_){} - + } catch (_) {} final corppromiseData = await ApiService.checkSafeCorppromise(); if (corppromiseData['ISSIGN'] == 1) { @@ -232,7 +234,6 @@ class HomePageState extends State { title: '温馨提示', content: '有未签署的安全承诺,点击确认前往签署', force: true, - ); if (confirmed) { Navigator.pushReplacement( @@ -243,10 +244,11 @@ class HomePageState extends State { return; } - _loadHiddenCache(); + _loadHiddenCache(); // 拉取其他数据 + 隐患列表(当 hiddenList 为空时显示 loading,否则不显示) _fetchData(); - _fetchHiddenList(showLoading: hiddenList.isEmpty); + _fetchHiddenList(showLoading: hiddenList.isEmpty); + /// 清单列表 final data = await ApiService.getListData(); if (data['result'] == 'success') { @@ -578,7 +580,6 @@ class HomePageState extends State { pushPage(HomeNfcListPage(), context); break; } - }, ); }).toList(), @@ -719,9 +720,9 @@ class HomePageState extends State { onTap: () async { if (index == 1) { LoadingDialogHelper.show(); - bool isRest= await _getIsRest(); + bool isRest = await _getIsRest(); LoadingDialogHelper.hide(); - if(isRest){ + if (isRest) { ToastUtil.showNormal(context, "您已经处于离岗状态中"); return; } @@ -775,17 +776,16 @@ class HomePageState extends State { ); } - - Future _getIsRest( )async { + Future _getIsRest() async { try { final raw = await ApiService.getIsRest(); if (raw['result'] == 'success') { - if( raw['ISREST']=="1"){ + if (raw['ISREST'] == "1") { return true; - }else{ + } else { return false; } - }else{ + } else { return false; } } catch (e) { @@ -794,5 +794,4 @@ class HomePageState extends State { return false; } } - } diff --git a/lib/pages/home/tap/tabList/special_wrok/MeasuresListWidget.dart b/lib/pages/home/tap/tabList/special_wrok/MeasuresListWidget.dart index 81b5106..0e56c5e 100644 --- a/lib/pages/home/tap/tabList/special_wrok/MeasuresListWidget.dart +++ b/lib/pages/home/tap/tabList/special_wrok/MeasuresListWidget.dart @@ -1623,7 +1623,7 @@ class ConfirmWithSignWidget extends StatelessWidget { this.isShowTime = true, }) : super(key: key); - // 允许外部传入 null(但构建内部会降级为 {},避免空异常) + // 允许外部传入 null({}但构建内部会降级为 ,避免空异常) final Map? signs; final Map? pd; final String baseImgPath; diff --git a/lib/pages/home/tap/tabList/special_wrok/dz_work/zyr_work_detail/hoistwork_zyr_detail.dart b/lib/pages/home/tap/tabList/special_wrok/dz_work/zyr_work_detail/hoistwork_zyr_detail.dart index 556f74a..2287dca 100644 --- a/lib/pages/home/tap/tabList/special_wrok/dz_work/zyr_work_detail/hoistwork_zyr_detail.dart +++ b/lib/pages/home/tap/tabList/special_wrok/dz_work/zyr_work_detail/hoistwork_zyr_detail.dart @@ -261,7 +261,7 @@ if (reasonText.isEmpty) { @override Widget build(BuildContext context) { return Scaffold( - appBar: MyAppbar(title: '作业人意见'), + appBar: MyAppbar(title: '吊装作业人意见'), body: SafeArea( child: SingleChildScrollView( padding: EdgeInsets.all(12), @@ -285,7 +285,7 @@ if (reasonText.isEmpty) { Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - ListItemFactory.headerTitle('作业人'), + ListItemFactory.headerTitle('吊装作业人'), CustomButton( text: '新增手写签字', height: 36, diff --git a/lib/tools/SmallWidget.dart b/lib/tools/SmallWidget.dart index 73df7b0..8e276b8 100644 --- a/lib/tools/SmallWidget.dart +++ b/lib/tools/SmallWidget.dart @@ -1,5 +1,3 @@ -import 'dart:ffi'; - import 'package:flutter/material.dart'; import 'h_colors.dart'; diff --git a/lib/tools/h_colors.dart b/lib/tools/h_colors.dart index ede82a1..303941d 100644 --- a/lib/tools/h_colors.dart +++ b/lib/tools/h_colors.dart @@ -1,4 +1,3 @@ -import 'dart:ffi'; import 'dart:ui'; import 'package:flutter_baidu_mapapi_base/flutter_baidu_mapapi_base.dart'; diff --git a/lib/tools/platform_utils.dart b/lib/tools/platform_utils.dart new file mode 100644 index 0000000..d7f8658 --- /dev/null +++ b/lib/tools/platform_utils.dart @@ -0,0 +1,33 @@ +// lib/utils/platform_utils.dart +import 'package:flutter/foundation.dart' show kIsWeb, defaultTargetPlatform, TargetPlatform; + +/// 简单的跨平台判断工具,避免在 web 上引用 dart:io +class PlatformUtils { + /// 是否在浏览器 + static bool get isWeb => kIsWeb; + + /// 是否为 iOS(注意:在 web 上会返回 false) + static bool get isIOS => !kIsWeb && defaultTargetPlatform == TargetPlatform.iOS; + + /// 是否为 Android(在 web 上会返回 false) + static bool get isAndroid => !kIsWeb && defaultTargetPlatform == TargetPlatform.android; + + /// 返回一个简单的操作系统标识字符串(web 会返回 'web') + static String get operatingSystem { + if (kIsWeb) return 'web'; + switch (defaultTargetPlatform) { + case TargetPlatform.android: + return 'android'; + case TargetPlatform.iOS: + return 'ios'; + case TargetPlatform.macOS: + return 'macos'; + case TargetPlatform.linux: + return 'linux'; + case TargetPlatform.windows: + return 'windows'; + case TargetPlatform.fuchsia: + return 'fuchsia'; + } + } +}