适配web前保存
parent
0621ff1e2a
commit
545321d5e1
15
.metadata
15
.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
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
<string>智守安全</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<key>CFBundleIdentifier</key>ƒ
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
|
|
@ -85,6 +85,7 @@
|
|||
<key>com.apple.developer.nfc.readersession.formats</key>
|
||||
<array>
|
||||
<string>TAG</string>
|
||||
<string>NDEF</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
import 'dart:ffi';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:dotted_border/dotted_border.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";
|
||||
|
|
|
|||
|
|
@ -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<ApplicationPage> {
|
|||
case AppItem.aiAlarm:
|
||||
// ai
|
||||
pushPage(AiAlarmPage(), context);
|
||||
break;
|
||||
case AppItem.gyAlarm:
|
||||
pushPage(GyAlarmPage(), context);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -164,11 +170,12 @@ class _ApplicationPageState extends State<ApplicationPage> {
|
|||
{'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},
|
||||
|
||||
],
|
||||
},
|
||||
];
|
||||
|
|
|
|||
|
|
@ -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<GyAlarmPage> createState() => _GyAlarmPageState();
|
||||
}
|
||||
|
||||
class _GyAlarmPageState extends State<GyAlarmPage> {
|
||||
late List<Map<String, dynamic>> 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<void> _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,
|
||||
),
|
||||
],
|
||||
)
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -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';
|
||||
|
|
|
|||
|
|
@ -42,12 +42,14 @@ class HomePage extends StatefulWidget {
|
|||
class HomePageState extends State<HomePage> {
|
||||
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<HomePage> {
|
|||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
List totalList = [];
|
||||
|
||||
/// 按钮信息
|
||||
List<Map<String, dynamic>> buttonInfos = [
|
||||
{
|
||||
|
|
@ -117,7 +121,7 @@ class HomePageState extends State<HomePage> {
|
|||
"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<HomePage> {
|
|||
// 使用初始化加载:先恢复缓存(若存在则直接显示),然后再发起网络请求(成功则覆盖缓存)
|
||||
BadgeManager().initAllModules();
|
||||
_initialLoad();
|
||||
|
||||
}
|
||||
|
||||
/// 首次加载:先恢复缓存(如果有),然后在后台去刷新(只有当无缓存时才显示 loading)
|
||||
Future<void> _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<HomePage> {
|
|||
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<HomePage> {
|
|||
title: '温馨提示',
|
||||
content: '有未签署的安全承诺,点击确认前往签署',
|
||||
force: true,
|
||||
|
||||
);
|
||||
if (confirmed) {
|
||||
Navigator.pushReplacement(
|
||||
|
|
@ -243,10 +244,11 @@ class HomePageState extends State<HomePage> {
|
|||
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<HomePage> {
|
|||
pushPage(HomeNfcListPage(), context);
|
||||
break;
|
||||
}
|
||||
|
||||
},
|
||||
);
|
||||
}).toList(),
|
||||
|
|
@ -719,9 +720,9 @@ class HomePageState extends State<HomePage> {
|
|||
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<HomePage> {
|
|||
);
|
||||
}
|
||||
|
||||
|
||||
Future<bool> _getIsRest( )async {
|
||||
Future<bool> _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<HomePage> {
|
|||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1623,7 +1623,7 @@ class ConfirmWithSignWidget extends StatelessWidget {
|
|||
this.isShowTime = true,
|
||||
}) : super(key: key);
|
||||
|
||||
// 允许外部传入 null(但构建内部会降级为 {},避免空异常)
|
||||
// 允许外部传入 null({}但构建内部会降级为 ,避免空异常)
|
||||
final Map<String, dynamic>? signs;
|
||||
final Map<String, dynamic>? pd;
|
||||
final String baseImgPath;
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
import 'dart:ffi';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'h_colors.dart';
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
import 'dart:ffi';
|
||||
import 'dart:ui';
|
||||
|
||||
import 'package:flutter_baidu_mapapi_base/flutter_baidu_mapapi_base.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';
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue