From ae49b491534ba8f5a7296d05174eabd030a2db4a Mon Sep 17 00:00:00 2001 From: hs <873121290@qq.com> Date: Tue, 2 Sep 2025 08:43:05 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=AB=E9=A1=B9=E4=BD=9C=E4=B8=9A=E7=BB=9F?= =?UTF-8?q?=E4=B8=80=E4=BF=AE=E6=94=B9=E6=97=B6=E9=97=B4=E9=80=89=E6=8B=A9?= =?UTF-8?q?=E5=88=B0=E7=A7=92=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/map/index.html | 380 ++++++++++++++++++ .../picker/CupertinoDatePicker.dart | 161 ++++++-- .../SafeCheck/safeCheck_detail.dart | 4 +- .../Start/safeCheck_start_detail.dart | 2 + .../special_wrok/dangerous_options_page.dart | 4 +- .../dh_work/HotWorkDetailFormWidget.dart | 51 ++- .../dh_work_detai/hotwork_apply_detail.dart | 41 +- .../jszy_work_detail/hotwork_jszy_detail.dart | 1 + .../kszy_work_detail/hotwork_kszy_detail.dart | 1 + .../ysgd_work_detail/hotwork_ysgd_detail.dart | 1 + .../dl_work/CutroadDetailFormWidget.dart | 51 ++- .../dl_work_detai/cutroad_apply_detail.dart | 42 +- .../jszy_work_detail/cutroad_jszy_detail.dart | 69 ++-- .../kszy_work_detail/cutroad_kszy_detail.dart | 1 + .../ysgd_work_detail/cutroad_ysgd_detail.dart | 87 ++-- .../dt_work/BreakgroundDetailFormWidget.dart | 51 ++- .../breakground_apply_detail.dart | 42 +- .../breakground_jszy_detail.dart | 1 + .../breakground_kszy_detail.dart | 1 + .../breakground_ysgd_detail.dart | 1 + .../dz_work/HoistworkDetailFormWidget.dart | 52 ++- .../dz_work_detai/hoistwork_apply_detail.dart | 42 +- .../hoistwork_jszy_detail.dart | 1 + .../hoistwork_kszy_detail.dart | 1 + .../hoistwork_ysgd_detail.dart | 1 + .../gc_work/HighWorkDetailFormWidget.dart | 52 ++- .../gc_work_detai/highwork_apply_detail.dart | 42 +- .../highwork_jszy_detail.dart | 1 + .../highwork_kszy_detail.dart | 1 + .../highwork_ysgd_detail.dart | 1 + .../ElectricityDetailFormWidget.dart | 52 ++- .../electricity_jszy_detail.dart | 1 + .../electricity_kszy_detail.dart | 1 + .../electricity_apply_detail.dart | 42 +- .../electricity_ysgd_detail.dart | 1 + .../mbcd_work/BlindboardDetailFormWidget.dart | 52 ++- .../blindboard_jszy_detail.dart | 1 + .../blindboard_kszy_detail.dart | 1 + .../blindboard_apply_detail.dart | 42 +- .../blindboard_ysgd_detail.dart | 1 + .../sxkj_work/SpaceWorkDetailFormWidget.dart | 54 ++- .../spacework_jszy_detail.dart | 1 + .../spacework_kszy_detail.dart | 1 + .../spacework_apply_detail.dart | 42 +- .../spacework_ysgd_detail.dart | 1 + lib/pages/mine/mine_page.dart | 2 +- lib/pages/mine/mine_sign_page.dart | 5 +- 47 files changed, 986 insertions(+), 500 deletions(-) create mode 100644 assets/map/index.html diff --git a/assets/map/index.html b/assets/map/index.html new file mode 100644 index 0000000..971b9c3 --- /dev/null +++ b/assets/map/index.html @@ -0,0 +1,380 @@ + + + + + 特殊作业扎点 + + + + + + + + + + +
+ + + + + diff --git a/lib/customWidget/picker/CupertinoDatePicker.dart b/lib/customWidget/picker/CupertinoDatePicker.dart index 7c3cf31..811a504 100644 --- a/lib/customWidget/picker/CupertinoDatePicker.dart +++ b/lib/customWidget/picker/CupertinoDatePicker.dart @@ -4,22 +4,22 @@ import 'package:flutter/material.dart'; /// 调用示例: /// DateTime? picked = await BottomDateTimePicker.showDate( /// context, -/// mode: BottomPickerMode.date, // 或 BottomPickerMode.dateTime(默认) +/// mode: BottomPickerMode.date, // 或 BottomPickerMode.dateTime(默认)或 BottomPickerMode.dateTimeWithSeconds /// allowFuture: true, /// allowPast: false, // 是否允许选择过去(false 表示只能选择现在或未来) -/// minTimeStr: '2025-08-20 08:30', +/// minTimeStr: '2025-08-20 08:30:45', /// ); /// if (picked != null) { /// print('用户选择的时间:$picked'); /// } -enum BottomPickerMode { dateTime, date } +enum BottomPickerMode { dateTime, date, dateTimeWithSeconds } class BottomDateTimePicker { static Future showDate( BuildContext context, { bool allowFuture = true, - bool allowPast = true, // 新增:是否允许选择过去(默认允许) - String? minTimeStr, // 可选:'yyyy-MM-dd HH:mm' + bool allowPast = true, // 是否允许选择过去(默认允许) + String? minTimeStr, // 可选:'yyyy-MM-dd HH:mm:ss' BottomPickerMode mode = BottomPickerMode.dateTime, }) { return showModalBottomSheet( @@ -65,6 +65,7 @@ class _InlineDateTimePickerContentState final List months = List.generate(12, (i) => i + 1); final List hours = List.generate(24, (i) => i); final List minutes = List.generate(60, (i) => i); + final List seconds = List.generate(60, (i) => i); // 新增秒数据源 // 动态天数列表(根据年月变化) late List days; @@ -75,6 +76,7 @@ class _InlineDateTimePickerContentState late FixedExtentScrollController dayCtrl; late FixedExtentScrollController hourCtrl; late FixedExtentScrollController minuteCtrl; + late FixedExtentScrollController secondCtrl; // 新增秒控制器 // 当前选中值 late int selectedYear; @@ -82,6 +84,7 @@ class _InlineDateTimePickerContentState late int selectedDay; late int selectedHour; late int selectedMinute; + late int selectedSecond; // 新增秒选中值 DateTime? _minTime; // 解析后的最小允许时间(如果有) @@ -111,16 +114,21 @@ class _InlineDateTimePickerContentState } } - // 如果是 date 模式,只保留日期部分(时分归零) + // 根据模式调整初始值 if (widget.mode == BottomPickerMode.date) { initial = DateTime(initial.year, initial.month, initial.day); + } else if (widget.mode == BottomPickerMode.dateTime) { + initial = DateTime(initial.year, initial.month, initial.day, + initial.hour, initial.minute); } + // dateTimeWithSeconds 模式保持完整的时间 selectedYear = initial.year; selectedMonth = initial.month; selectedDay = initial.day; selectedHour = initial.hour; selectedMinute = initial.minute; + selectedSecond = initial.second; // 初始化天数列表 days = _getDaysInMonth(selectedYear, selectedMonth); @@ -136,6 +144,8 @@ class _InlineDateTimePickerContentState initialItem: selectedHour.clamp(0, hours.length - 1)); minuteCtrl = FixedExtentScrollController( initialItem: selectedMinute.clamp(0, minutes.length - 1)); + secondCtrl = FixedExtentScrollController( // 初始化秒控制器 + initialItem: selectedSecond.clamp(0, seconds.length - 1)); // 确保初始选择满足约束(例如 minTime 或禁止未来/禁止过去) WidgetsBinding.instance.addPostFrameCallback((_) { @@ -149,7 +159,7 @@ class _InlineDateTimePickerContentState return List.generate(lastDay, (i) => i + 1); } - // 解析 'yyyy-MM-dd HH:mm' 返回 DateTime 或 null + // 解析 'yyyy-MM-dd HH:mm:ss' 返回 DateTime 或 null DateTime? _parseMinTime(String? s) { if (s == null || s.trim().isEmpty) return null; try { @@ -159,13 +169,14 @@ class _InlineDateTimePickerContentState parts[0].split('-').map((e) => int.parse(e)).toList(); final timeParts = (parts.length > 1) ? parts[1].split(':').map((e) => int.parse(e)).toList() - : [0, 0]; + : [0, 0, 0]; final year = dateParts[0]; final month = dateParts[1]; final day = dateParts[2]; final hour = (timeParts.isNotEmpty) ? timeParts[0] : 0; final minute = (timeParts.length > 1) ? timeParts[1] : 0; - return DateTime(year, month, day, hour, minute); + final second = (timeParts.length > 2) ? timeParts[2] : 0; + return DateTime(year, month, day, hour, minute, second); } catch (e) { debugPrint('parseMinTime failed for "$s": $e'); return null; @@ -190,30 +201,51 @@ class _InlineDateTimePickerContentState void _enforceConstraintsAndUpdateControllers() { final now = DateTime.now(); final isDateOnly = widget.mode == BottomPickerMode.date; + final isDateTimeOnly = widget.mode == BottomPickerMode.dateTime; - final DateTime picked = isDateOnly - ? DateTime(selectedYear, selectedMonth, selectedDay) - : DateTime( - selectedYear, selectedMonth, selectedDay, selectedHour, selectedMinute); + DateTime picked; + if (isDateOnly) { + picked = DateTime(selectedYear, selectedMonth, selectedDay); + } else if (isDateTimeOnly) { + picked = DateTime( + selectedYear, selectedMonth, selectedDay, selectedHour, selectedMinute); + } else { + picked = DateTime(selectedYear, selectedMonth, selectedDay, + selectedHour, selectedMinute, selectedSecond); + } // 处理最小时间约束:结合 _minTime 与 allowPast DateTime? minRef; if (!widget.allowPast) { // 不允许选择过去:最小时间至少为 now(或当天 00:00) - minRef = isDateOnly - ? DateTime(now.year, now.month, now.day) - : now; + if (isDateOnly) { + minRef = DateTime(now.year, now.month, now.day); + } else if (isDateTimeOnly) { + minRef = DateTime(now.year, now.month, now.day, now.hour, now.minute); + } else { + minRef = now; + } // 如果用户也指定了 _minTime 且比 now 晚,则以 _minTime 为准 if (_minTime != null && _minTime!.isAfter(minRef)) { - minRef = isDateOnly - ? DateTime(_minTime!.year, _minTime!.month, _minTime!.day) - : _minTime; + minRef = _minTime; + // 根据模式调整精度 + if (isDateOnly) { + minRef = DateTime(minRef!.year, minRef.month, minRef.day); + } else if (isDateTimeOnly) { + minRef = DateTime(minRef!.year, minRef.month, minRef.day, + minRef.hour, minRef.minute); + } } } else if (_minTime != null) { // 允许选择过去,但若指定了 _minTime,则以 _minTime 为最小参考 - minRef = isDateOnly - ? DateTime(_minTime!.year, _minTime!.month, _minTime!.day) - : _minTime; + minRef = _minTime; + // 根据模式调整精度 + if (isDateOnly) { + minRef = DateTime(minRef!.year, minRef.month, minRef.day); + } else if (isDateTimeOnly) { + minRef = DateTime(minRef!.year, minRef.month, minRef.day, + minRef.hour, minRef.minute); + } } if (minRef != null && picked.isBefore(minRef)) { @@ -224,9 +256,15 @@ class _InlineDateTimePickerContentState if (!isDateOnly) { selectedHour = minRef.hour; selectedMinute = minRef.minute; + if (!isDateTimeOnly) { + selectedSecond = minRef.second; + } else { + selectedSecond = 0; + } } else { selectedHour = 0; selectedMinute = 0; + selectedSecond = 0; } _updateDays(jumpDay: false); @@ -236,15 +274,24 @@ class _InlineDateTimePickerContentState if (!isDateOnly) { hourCtrl.jumpToItem(selectedHour); minuteCtrl.jumpToItem(selectedMinute); + if (!isDateTimeOnly) { + secondCtrl.jumpToItem(selectedSecond); + } } return; } // 处理禁止选择未来(当 allowFuture == false) if (!widget.allowFuture) { - final DateTime nowRef = isDateOnly - ? DateTime(now.year, now.month, now.day) - : now; + DateTime nowRef; + if (isDateOnly) { + nowRef = DateTime(now.year, now.month, now.day); + } else if (isDateTimeOnly) { + nowRef = DateTime(now.year, now.month, now.day, now.hour, now.minute); + } else { + nowRef = now; + } + if (picked.isAfter(nowRef)) { selectedYear = nowRef.year; selectedMonth = nowRef.month; @@ -252,9 +299,15 @@ class _InlineDateTimePickerContentState if (!isDateOnly) { selectedHour = nowRef.hour; selectedMinute = nowRef.minute; + if (!isDateTimeOnly) { + selectedSecond = nowRef.second; + } else { + selectedSecond = 0; + } } else { selectedHour = 0; selectedMinute = 0; + selectedSecond = 0; } _updateDays(jumpDay: false); @@ -264,6 +317,9 @@ class _InlineDateTimePickerContentState if (!isDateOnly) { hourCtrl.jumpToItem(selectedHour); minuteCtrl.jumpToItem(selectedMinute); + if (!isDateTimeOnly) { + secondCtrl.jumpToItem(selectedSecond); + } } return; } @@ -277,14 +333,20 @@ class _InlineDateTimePickerContentState dayCtrl.dispose(); hourCtrl.dispose(); minuteCtrl.dispose(); + secondCtrl.dispose(); // 释放秒控制器 super.dispose(); } @override Widget build(BuildContext context) { final isDateOnly = widget.mode == BottomPickerMode.date; + final isDateTimeOnly = widget.mode == BottomPickerMode.dateTime; + + // 根据模式计算高度 + final height = isDateOnly ? 280 : (isDateTimeOnly ? 330 : 380); + return SizedBox( - height: isDateOnly ? 280 : 330, + height: height.toDouble(), child: Column( children: [ // 顶部按钮 @@ -299,15 +361,27 @@ class _InlineDateTimePickerContentState ), TextButton( onPressed: () { - final result = isDateOnly - ? DateTime(selectedYear, selectedMonth, selectedDay) - : DateTime( - selectedYear, - selectedMonth, - selectedDay, - selectedHour, - selectedMinute, - ); + DateTime result; + if (isDateOnly) { + result = DateTime(selectedYear, selectedMonth, selectedDay); + } else if (isDateTimeOnly) { + result = DateTime( + selectedYear, + selectedMonth, + selectedDay, + selectedHour, + selectedMinute, + ); + } else { + result = DateTime( + selectedYear, + selectedMonth, + selectedDay, + selectedHour, + selectedMinute, + selectedSecond, + ); + } Navigator.of(context).pop(result); }, child: const Text("确定", style: TextStyle(color: Colors.blue)), @@ -317,7 +391,7 @@ class _InlineDateTimePickerContentState ), const Divider(height: 1), - // 可见的滚轮列(date 模式只显示 年 月 日) + // 可见的滚轮列 Expanded( child: Row( children: [ @@ -384,6 +458,19 @@ class _InlineDateTimePickerContentState }); }, ), + + // 如果是 dateTimeWithSeconds 模式,显示秒列 + if (widget.mode == BottomPickerMode.dateTimeWithSeconds) + _buildPicker( + controller: secondCtrl, + items: seconds.map((e) => e.toString().padLeft(2, '0')).toList(), + onSelected: (idx) { + setState(() { + selectedSecond = seconds[idx]; + _enforceConstraintsAndUpdateControllers(); + }); + }, + ), ], ), ), @@ -409,4 +496,4 @@ class _InlineDateTimePickerContentState ), ); } -} +} \ No newline at end of file diff --git a/lib/pages/KeyProjects/SafeCheck/safeCheck_detail.dart b/lib/pages/KeyProjects/SafeCheck/safeCheck_detail.dart index fd1fde0..94ed40a 100644 --- a/lib/pages/KeyProjects/SafeCheck/safeCheck_detail.dart +++ b/lib/pages/KeyProjects/SafeCheck/safeCheck_detail.dart @@ -773,7 +773,7 @@ class _SafecheckDetailState extends State { text: form['INSPECTION_TIME_START'] ?? '', onTap: () async { DateTime? picked = - await BottomDateTimePicker.showDate(context); + await BottomDateTimePicker.showDate(context,mode: BottomPickerMode.dateTimeWithSeconds,); if (picked != null) { setState(() { form['INSPECTION_TIME_START'] = DateFormat( @@ -792,7 +792,7 @@ class _SafecheckDetailState extends State { text: form['INSPECTION_TIME_END'] ?? '', onTap: () async { DateTime? picked = - await BottomDateTimePicker.showDate(context); + await BottomDateTimePicker.showDate(context,mode: BottomPickerMode.dateTimeWithSeconds,); if (picked != null) { setState(() { form['INSPECTION_TIME_END'] = DateFormat( diff --git a/lib/pages/home/SafeCheck/Start/safeCheck_start_detail.dart b/lib/pages/home/SafeCheck/Start/safeCheck_start_detail.dart index 4e5ec6b..cb486dd 100644 --- a/lib/pages/home/SafeCheck/Start/safeCheck_start_detail.dart +++ b/lib/pages/home/SafeCheck/Start/safeCheck_start_detail.dart @@ -1023,6 +1023,7 @@ class _SafecheckStartDetailState extends State { text: form['INSPECTION_TIME_START'] ?? '', onTap: () async { DateTime? picked = await BottomDateTimePicker.showDate( + mode: BottomPickerMode.dateTimeWithSeconds, context, ); if (picked != null) { @@ -1043,6 +1044,7 @@ class _SafecheckStartDetailState extends State { text: form['INSPECTION_TIME_END'] ?? '', onTap: () async { DateTime? picked = await BottomDateTimePicker.showDate( + mode: BottomPickerMode.dateTimeWithSeconds, context, ); if (picked != null) { diff --git a/lib/pages/home/tap/tabList/special_wrok/dangerous_options_page.dart b/lib/pages/home/tap/tabList/special_wrok/dangerous_options_page.dart index 764892c..ce3ea47 100644 --- a/lib/pages/home/tap/tabList/special_wrok/dangerous_options_page.dart +++ b/lib/pages/home/tap/tabList/special_wrok/dangerous_options_page.dart @@ -155,13 +155,13 @@ class _DangerousOptionsPageState extends State { } Future _sign() async { - await NativeOrientation.setLandscape(); + await NativeOrientation.setLandscape(); final String path = await Navigator.push( context, MaterialPageRoute(builder: (c) => MineSignPage()), ); await NativeOrientation.setPortrait(); -if (path != null) { + if (path != null) { final now = DateFormat('yyyy-MM-dd HH:mm').format(DateTime.now()); setState(() { final imageData = SignImageData( diff --git a/lib/pages/home/tap/tabList/special_wrok/dh_work/HotWorkDetailFormWidget.dart b/lib/pages/home/tap/tabList/special_wrok/dh_work/HotWorkDetailFormWidget.dart index eebc675..deee733 100644 --- a/lib/pages/home/tap/tabList/special_wrok/dh_work/HotWorkDetailFormWidget.dart +++ b/lib/pages/home/tap/tabList/special_wrok/dh_work/HotWorkDetailFormWidget.dart @@ -1,5 +1,7 @@ import 'package:flutter/material.dart'; +import 'package:intl/intl.dart'; import 'package:qhd_prevention/customWidget/ItemWidgetFactory.dart'; +import 'package:qhd_prevention/customWidget/picker/CupertinoDatePicker.dart'; import '../../../../../../tools/tools.dart'; import '../../../item_list_widget.dart'; @@ -16,11 +18,8 @@ class HotWorkDetailFormWidget extends StatefulWidget { // 新增 - final VoidCallback? onChooseVideoManager; - /// 选择摄像头 - final VoidCallback? onWorkStartTimeHandle; - final VoidCallback? onWorkEndTimeHandle; - /// 承包商 +/// 选择摄像头 + final VoidCallback? onChooseVideoManager;/// 承包商 final VoidCallback? onContractorHandle; /// 作业区域 final VoidCallback? onWorkAreaHandle; @@ -45,8 +44,6 @@ class HotWorkDetailFormWidget extends StatefulWidget { required this.onAnalyzeTap, /// 新增 this.onChooseVideoManager, - this.onWorkStartTimeHandle, - this.onWorkEndTimeHandle, this.onContractorHandle, this.onWorkAreaHandle, this.onWorkAreaLocationHandle, @@ -161,6 +158,7 @@ class _HotWorkDetailFormWidgetState extends State { const Divider(), ItemListWidget.twoRowButtonTitleText( label: '关联其他特殊作业及安全作业票编号', + isRequired: false, isEditable: widget.isEditable, onTap: () async { await showDialog( @@ -228,14 +226,49 @@ class _HotWorkDetailFormWidgetState extends State { ItemListWidget.selectableLineTitleTextRightButton( label: '预计作业开始时间:', isEditable: widget.isEditable, - onTap: widget.onWorkStartTimeHandle ?? () {}, + onTap: () async { + DateTime? picked = await BottomDateTimePicker.showDate( + mode: BottomPickerMode.dateTimeWithSeconds, + context, + allowFuture: true, + ); + if (picked != null) { + setState(() { + pd['WORK_EXPECTED_START_TIME'] = DateFormat( + 'yyyy-MM-dd HH:mm:ss', + ).format(picked); + + /// 开始时间必须早于结束时间 + if (FormUtils.hasValue(pd, 'WORK_EXPECTED_END_TIME') && + !isBeforeStr( + pd['WORK_EXPECTED_START_TIME'], + pd['WORK_EXPECTED_END_TIME'], + )) { + pd['WORK_EXPECTED_END_TIME'] = ''; + } + }); + } + }, text: pd['WORK_EXPECTED_START_TIME'] ?? '', ), const Divider(), ItemListWidget.selectableLineTitleTextRightButton( label: '预计作业结束时间:', isEditable: widget.isEditable, - onTap: widget.onWorkEndTimeHandle ?? () {}, + onTap: () async { + DateTime? picked = await BottomDateTimePicker.showDate( + context, + minTimeStr: pd['WORK_EXPECTED_START_TIME'] ?? '', + allowFuture: true, + ); + if (picked != null) { + setState(() { + pd['WORK_EXPECTED_END_TIME'] = DateFormat( + 'yyyy-MM-dd HH:mm:ss', + ).format(picked); + }); + } + }, text: pd['WORK_EXPECTED_END_TIME'] ?? '', ), const Divider(), diff --git a/lib/pages/home/tap/tabList/special_wrok/dh_work/dh_work_detai/hotwork_apply_detail.dart b/lib/pages/home/tap/tabList/special_wrok/dh_work/dh_work_detai/hotwork_apply_detail.dart index aed7b36..d514460 100644 --- a/lib/pages/home/tap/tabList/special_wrok/dh_work/dh_work_detai/hotwork_apply_detail.dart +++ b/lib/pages/home/tap/tabList/special_wrok/dh_work/dh_work_detai/hotwork_apply_detail.dart @@ -265,44 +265,7 @@ class _HotworkApplyDetailState extends State { }); } } - /// 预计作业开始时间 - Future _chooseWorkStartTime() async { - DateTime? picked = await BottomDateTimePicker.showDate( - context, - allowFuture: true, - ); - if (picked != null) { - setState(() { - pd['WORK_EXPECTED_START_TIME'] = DateFormat( - 'yyyy-MM-dd HH:mm:ss', - ).format(picked); - - /// 开始时间必须早于结束时间 - if (FormUtils.hasValue(pd, 'WORK_EXPECTED_END_TIME') && - !isBeforeStr( - pd['WORK_EXPECTED_START_TIME'], - pd['WORK_EXPECTED_END_TIME'], - )) { - pd['WORK_EXPECTED_END_TIME'] = ''; - } - }); - } - } - /// 预计作业结束时间 - Future _chooseWorkEndTime() async { - DateTime? picked = await BottomDateTimePicker.showDate( - context, - minTimeStr: pd['WORK_EXPECTED_START_TIME'] ?? '', - allowFuture: true, - ); - if (picked != null) { - setState(() { - pd['WORK_EXPECTED_END_TIME'] = DateFormat( - 'yyyy-MM-dd HH:mm:ss', - ).format(picked); - }); - } - } + /// 选择经纬度 Future _showLocationHandle() async{ if (!FormUtils.hasValue(pd, 'ELECTRONIC_FENCE_AREA_ID')) { @@ -725,8 +688,6 @@ class _HotworkApplyDetailState extends State { onChooseHotworkUser: _chooseHorkUser, // 新增 onChooseVideoManager: _chooseVideoManager, - onWorkStartTimeHandle: _chooseWorkStartTime, - onWorkEndTimeHandle: _chooseWorkEndTime, onContractorHandle: _chooseUnitManager, onWorkAreaHandle: _getWorkArea, onWorkAreaLocationHandle: _showLocationHandle, diff --git a/lib/pages/home/tap/tabList/special_wrok/dh_work/jszy_work_detail/hotwork_jszy_detail.dart b/lib/pages/home/tap/tabList/special_wrok/dh_work/jszy_work_detail/hotwork_jszy_detail.dart index 4a5fabe..92c3022 100644 --- a/lib/pages/home/tap/tabList/special_wrok/dh_work/jszy_work_detail/hotwork_jszy_detail.dart +++ b/lib/pages/home/tap/tabList/special_wrok/dh_work/jszy_work_detail/hotwork_jszy_detail.dart @@ -336,6 +336,7 @@ class _HotworkJszyDetailState extends State { ), onTap: () async { DateTime? picked = await BottomDateTimePicker.showDate( + mode: BottomPickerMode.dateTimeWithSeconds, context, ); if (picked != null) { diff --git a/lib/pages/home/tap/tabList/special_wrok/dh_work/kszy_work_detail/hotwork_kszy_detail.dart b/lib/pages/home/tap/tabList/special_wrok/dh_work/kszy_work_detail/hotwork_kszy_detail.dart index 81cbd05..c28eb69 100644 --- a/lib/pages/home/tap/tabList/special_wrok/dh_work/kszy_work_detail/hotwork_kszy_detail.dart +++ b/lib/pages/home/tap/tabList/special_wrok/dh_work/kszy_work_detail/hotwork_kszy_detail.dart @@ -308,6 +308,7 @@ class _HotworkKszyDetailState extends State { ), onTap: () async { DateTime? picked = await BottomDateTimePicker.showDate( + mode: BottomPickerMode.dateTimeWithSeconds, context, ); if (picked != null) { diff --git a/lib/pages/home/tap/tabList/special_wrok/dh_work/ysgd_work_detail/hotwork_ysgd_detail.dart b/lib/pages/home/tap/tabList/special_wrok/dh_work/ysgd_work_detail/hotwork_ysgd_detail.dart index 2b4753a..1254f10 100644 --- a/lib/pages/home/tap/tabList/special_wrok/dh_work/ysgd_work_detail/hotwork_ysgd_detail.dart +++ b/lib/pages/home/tap/tabList/special_wrok/dh_work/ysgd_work_detail/hotwork_ysgd_detail.dart @@ -366,6 +366,7 @@ class _HotworkYsgdDetailState extends State { ), onTap: () async { DateTime? picked = await BottomDateTimePicker.showDate( + mode: BottomPickerMode.dateTimeWithSeconds, context, ); if (picked != null) { diff --git a/lib/pages/home/tap/tabList/special_wrok/dl_work/CutroadDetailFormWidget.dart b/lib/pages/home/tap/tabList/special_wrok/dl_work/CutroadDetailFormWidget.dart index 3c82741..79d9d82 100644 --- a/lib/pages/home/tap/tabList/special_wrok/dl_work/CutroadDetailFormWidget.dart +++ b/lib/pages/home/tap/tabList/special_wrok/dl_work/CutroadDetailFormWidget.dart @@ -1,7 +1,9 @@ import 'dart:math' as math; import 'package:flutter/material.dart'; +import 'package:intl/intl.dart'; import 'package:qhd_prevention/customWidget/ItemWidgetFactory.dart'; +import 'package:qhd_prevention/customWidget/picker/CupertinoDatePicker.dart'; import 'package:qhd_prevention/customWidget/single_image_viewer.dart'; import 'package:qhd_prevention/http/ApiService.dart'; @@ -22,11 +24,8 @@ class CutroadDetailFormWidget extends StatefulWidget { final TextEditingController? riskController; // 新增 - final VoidCallback? onChooseVideoManager; - /// 选择摄像头 - final VoidCallback? onWorkStartTimeHandle; - final VoidCallback? onWorkEndTimeHandle; - /// 承包商 +/// 选择摄像头 + final VoidCallback? onChooseVideoManager;/// 承包商 final VoidCallback? onContractorHandle; /// 作业区域 final VoidCallback? onWorkAreaHandle; @@ -43,8 +42,6 @@ class CutroadDetailFormWidget extends StatefulWidget { /// 新增 this.onChooseVideoManager, - this.onWorkStartTimeHandle, - this.onWorkEndTimeHandle, this.onContractorHandle, this.onWorkAreaHandle, this.onWorkAreaLocationHandle, @@ -313,6 +310,7 @@ class _CutroadDetailFormWidgetState extends State { ItemListWidget.twoRowButtonTitleText( label: '关联其他特殊作业及安全作业票编号', + isRequired: false, isEditable: widget.isEditable, onTap: () async { final val = await showDialog( @@ -379,14 +377,49 @@ class _CutroadDetailFormWidgetState extends State { ItemListWidget.selectableLineTitleTextRightButton( label: '预计作业开始时间:', isEditable: widget.isEditable, - onTap: widget.onWorkStartTimeHandle ?? () {}, + onTap: () async { + DateTime? picked = await BottomDateTimePicker.showDate( + mode: BottomPickerMode.dateTimeWithSeconds, + context, + allowFuture: true, + ); + if (picked != null) { + setState(() { + pd['WORK_EXPECTED_START_TIME'] = DateFormat( + 'yyyy-MM-dd HH:mm:ss', + ).format(picked); + + /// 开始时间必须早于结束时间 + if (FormUtils.hasValue(pd, 'WORK_EXPECTED_END_TIME') && + !isBeforeStr( + pd['WORK_EXPECTED_START_TIME'], + pd['WORK_EXPECTED_END_TIME'], + )) { + pd['WORK_EXPECTED_END_TIME'] = ''; + } + }); + } + }, text: pd['WORK_EXPECTED_START_TIME'] ?? '', ), const Divider(), ItemListWidget.selectableLineTitleTextRightButton( label: '预计作业结束时间:', isEditable: widget.isEditable, - onTap: widget.onWorkEndTimeHandle ?? () {}, + onTap: () async { + DateTime? picked = await BottomDateTimePicker.showDate( + context, + minTimeStr: pd['WORK_EXPECTED_START_TIME'] ?? '', + allowFuture: true, + ); + if (picked != null) { + setState(() { + pd['WORK_EXPECTED_END_TIME'] = DateFormat( + 'yyyy-MM-dd HH:mm:ss', + ).format(picked); + }); + } + }, text: pd['WORK_EXPECTED_END_TIME'] ?? '', ), const Divider(), diff --git a/lib/pages/home/tap/tabList/special_wrok/dl_work/dl_work_detai/cutroad_apply_detail.dart b/lib/pages/home/tap/tabList/special_wrok/dl_work/dl_work_detai/cutroad_apply_detail.dart index ed9362c..637bc60 100644 --- a/lib/pages/home/tap/tabList/special_wrok/dl_work/dl_work_detai/cutroad_apply_detail.dart +++ b/lib/pages/home/tap/tabList/special_wrok/dl_work/dl_work_detai/cutroad_apply_detail.dart @@ -441,44 +441,8 @@ class _CutroadApplyDetailState extends State { }); } } - /// 预计作业开始时间 - Future _chooseWorkStartTime() async { - DateTime? picked = await BottomDateTimePicker.showDate( - context, - allowFuture: true, - ); - if (picked != null) { - setState(() { - pd['WORK_EXPECTED_START_TIME'] = DateFormat( - 'yyyy-MM-dd HH:mm:ss', - ).format(picked); - - /// 开始时间必须早于结束时间 - if (FormUtils.hasValue(pd, 'WORK_EXPECTED_END_TIME') && - !isBeforeStr( - pd['WORK_EXPECTED_START_TIME'], - pd['WORK_EXPECTED_END_TIME'], - )) { - pd['WORK_EXPECTED_END_TIME'] = ''; - } - }); - } - } - /// 预计作业结束时间 - Future _chooseWorkEndTime() async { - DateTime? picked = await BottomDateTimePicker.showDate( - context, - minTimeStr: pd['WORK_EXPECTED_START_TIME'] ?? '', - allowFuture: true, - ); - if (picked != null) { - setState(() { - pd['WORK_EXPECTED_END_TIME'] = DateFormat( - 'yyyy-MM-dd HH:mm:ss', - ).format(picked); - }); - } - } + + /// 选择经纬度 Future _showLocationHandle() async{ if (!FormUtils.hasValue(pd, 'ELECTRONIC_FENCE_AREA_ID')) { @@ -604,8 +568,6 @@ class _CutroadApplyDetailState extends State { onChooseLevel: (){}, // 新增 onChooseVideoManager: _chooseVideoManager, - onWorkStartTimeHandle: _chooseWorkStartTime, - onWorkEndTimeHandle: _chooseWorkEndTime, onContractorHandle: _chooseUnitManager, onWorkAreaHandle: _getWorkArea, onWorkAreaLocationHandle: _showLocationHandle, diff --git a/lib/pages/home/tap/tabList/special_wrok/dl_work/jszy_work_detail/cutroad_jszy_detail.dart b/lib/pages/home/tap/tabList/special_wrok/dl_work/jszy_work_detail/cutroad_jszy_detail.dart index ec46e42..026a235 100644 --- a/lib/pages/home/tap/tabList/special_wrok/dl_work/jszy_work_detail/cutroad_jszy_detail.dart +++ b/lib/pages/home/tap/tabList/special_wrok/dl_work/jszy_work_detail/cutroad_jszy_detail.dart @@ -35,6 +35,7 @@ class _CutroadJszyDetailState extends State { /// 详情 late Map pd = {}; + /// 选择的时间 String endTime = ''; @@ -58,7 +59,7 @@ class _CutroadJszyDetailState extends State { MaterialPageRoute(builder: (context) => MineSignPage()), ); await NativeOrientation.setPortrait(); -if (path != null) { + if (path != null) { final now = DateFormat('yyyy-MM-dd HH:mm').format(DateTime.now()); setState(() { signImages.add(path); @@ -125,6 +126,7 @@ if (path != null) { }).toList(), ); } + bool checkWorkTime(Map pd, BuildContext context) { // 解析开始和结束时间 final start = DateTime.parse(pd['WORK_START_DATE'] as String); @@ -137,9 +139,9 @@ if (path != null) { return false; } - return true; } + /// 作废 -1 通过 1 Future _submit(String status) async { if (signImages.isEmpty) { @@ -161,7 +163,7 @@ if (path != null) { title: '作废原因', hintText: '请输入作废原因', cancelText: '取消', - confirmText: '确定' + confirmText: '确定', ); if (reasonText.isEmpty) { ToastUtil.showNormal(context, '请填写作废原因'); @@ -188,29 +190,31 @@ if (path != null) { barrierDismissible: false, ); if (confirmed) { - LoadingDialogHelper.show(); - try { - final result = await ApiService.saveSafeFunctionSure( -'cutroad', - formData, - signImages, - ); - LoadingDialogHelper.hide(); - if (result['result'] == 'success') { - ToastUtil.showSuccess(context, '保存成功'); - Navigator.of(context).pop(true); - } - } catch (e) { - LoadingDialogHelper.hide(); - ToastUtil.showNormal(context, '操作失败:$e'); - } - + LoadingDialogHelper.show(); + try { + final result = await ApiService.saveSafeFunctionSure( + 'cutroad', + formData, + signImages, + ); + LoadingDialogHelper.hide(); + if (result['result'] == 'success') { + ToastUtil.showSuccess(context, '保存成功'); + Navigator.of(context).pop(true); + } + } catch (e) { + LoadingDialogHelper.hide(); + ToastUtil.showNormal(context, '操作失败:$e'); + } } } /// 初始化拉取数据 Future _getData() async { - final data = await ApiService.getHomeworkFindById('cutroad', widget.CUTROAD_ID); + final data = await ApiService.getHomeworkFindById( + 'cutroad', + widget.CUTROAD_ID, + ); setState(() { pd = data['pd']; @@ -220,7 +224,8 @@ if (path != null) { } Future _getMeasures(String homework_id) async { - final data = await ApiService.listSignFinishMeasures('cutroad', + final data = await ApiService.listSignFinishMeasures( + 'cutroad', homework_id.length > 0 ? homework_id : widget.CUTROAD_ID, ); setState(() { @@ -231,7 +236,8 @@ if (path != null) { } Future _getSigns(String homework_id) async { - final data = await ApiService.listSignFinished('cutroad', + final data = await ApiService.listSignFinished( + 'cutroad', homework_id.length > 0 ? homework_id : widget.CUTROAD_ID, ); setState(() { @@ -294,12 +300,23 @@ if (path != null) { Column( children: [ GestureDetector( - child: ListItemFactory.createRowSpaceBetweenItem(leftText: '作业结束时间', rightText: endTime.isEmpty?'请选择':endTime, isRight: true, isRequired: true), + child: ListItemFactory.createRowSpaceBetweenItem( + leftText: '作业结束时间', + rightText: endTime.isEmpty ? '请选择' : endTime, + isRight: true, + isRequired: true, + ), onTap: () async { - DateTime? picked = await BottomDateTimePicker.showDate(context); + DateTime? picked = await BottomDateTimePicker.showDate( + mode: BottomPickerMode.dateTimeWithSeconds, + context, + ); + if (picked != null) { setState(() { - endTime = DateFormat('yyyy-MM-dd HH:mm').format(picked); + endTime = DateFormat( + 'yyyy-MM-dd HH:mm', + ).format(picked); }); } }, diff --git a/lib/pages/home/tap/tabList/special_wrok/dl_work/kszy_work_detail/cutroad_kszy_detail.dart b/lib/pages/home/tap/tabList/special_wrok/dl_work/kszy_work_detail/cutroad_kszy_detail.dart index 358b7fe..48549b7 100644 --- a/lib/pages/home/tap/tabList/special_wrok/dl_work/kszy_work_detail/cutroad_kszy_detail.dart +++ b/lib/pages/home/tap/tabList/special_wrok/dl_work/kszy_work_detail/cutroad_kszy_detail.dart @@ -298,6 +298,7 @@ setState(() { ), onTap: () async { DateTime? picked = await BottomDateTimePicker.showDate( + mode: BottomPickerMode.dateTimeWithSeconds, context, ); if (picked != null) { diff --git a/lib/pages/home/tap/tabList/special_wrok/dl_work/ysgd_work_detail/cutroad_ysgd_detail.dart b/lib/pages/home/tap/tabList/special_wrok/dl_work/ysgd_work_detail/cutroad_ysgd_detail.dart index 458caae..461d16c 100644 --- a/lib/pages/home/tap/tabList/special_wrok/dl_work/ysgd_work_detail/cutroad_ysgd_detail.dart +++ b/lib/pages/home/tap/tabList/special_wrok/dl_work/ysgd_work_detail/cutroad_ysgd_detail.dart @@ -43,8 +43,10 @@ class _CutroadYsgdDetailState extends State { /// 详情 late Map pd = {}; + /// 选择的时间 String startTime = ''; + /// 验收意见 final TextEditingController _contentController = TextEditingController(); late List imgList = []; @@ -60,6 +62,7 @@ class _CutroadYsgdDetailState extends State { super.initState(); _getData(); } + /// 拍照或选图后的回调 Future _onImageAdded(String localPath) async { // 上传到服务器 @@ -79,6 +82,7 @@ class _CutroadYsgdDetailState extends State { imgList.remove(item); }); } + /// 签字 Future _sign() async { await NativeOrientation.setLandscape(); @@ -89,7 +93,7 @@ class _CutroadYsgdDetailState extends State { await NativeOrientation.setPortrait(); if (path != null) { final now = DateFormat('yyyy-MM-dd HH:mm').format(DateTime.now()); -setState(() { + setState(() { signImages.add(path); signTimes.add(now); FocusHelper.clearFocus(context); @@ -195,7 +199,7 @@ setState(() { title: '作废原因', hintText: '请输入作废原因', cancelText: '取消', - confirmText: '确定' + confirmText: '确定', ); if (reasonText.isEmpty) { ToastUtil.showNormal(context, '请填写作废原因'); @@ -205,7 +209,7 @@ setState(() { final serverPathString = imgList .map((e) => e.serverPath) .where((s) => s.isNotEmpty) - .map((s) => s) // 将 String? 转回 String + .map((s) => s) // 将 String? 转回 String .join(','); // 存回 measures final Map formData = {}; @@ -228,29 +232,31 @@ setState(() { barrierDismissible: false, ); if (confirmed) { - LoadingDialogHelper.show(); - try { - final result = await ApiService.saveSafeFunctionSure( -'cutroad', - formData, - signImages, - ); - LoadingDialogHelper.hide(); - if (result['result'] == 'success') { - ToastUtil.showSuccess(context, '保存成功'); - Navigator.of(context).pop(true); - } - } catch (e) { - LoadingDialogHelper.hide(); - ToastUtil.showNormal(context, '操作失败:$e'); - } - + LoadingDialogHelper.show(); + try { + final result = await ApiService.saveSafeFunctionSure( + 'cutroad', + formData, + signImages, + ); + LoadingDialogHelper.hide(); + if (result['result'] == 'success') { + ToastUtil.showSuccess(context, '保存成功'); + Navigator.of(context).pop(true); + } + } catch (e) { + LoadingDialogHelper.hide(); + ToastUtil.showNormal(context, '操作失败:$e'); + } } } /// 初始化拉取数据 Future _getData() async { - final data = await ApiService.getHomeworkFindById('cutroad', widget.CUTROAD_ID); + final data = await ApiService.getHomeworkFindById( + 'cutroad', + widget.CUTROAD_ID, + ); setState(() { pd = data['pd']; @@ -260,7 +266,8 @@ setState(() { } Future _getMeasures(String homework_id) async { - final data = await ApiService.listSignFinishMeasures('cutroad', + final data = await ApiService.listSignFinishMeasures( + 'cutroad', homework_id.length > 0 ? homework_id : widget.CUTROAD_ID, ); setState(() { @@ -271,7 +278,8 @@ setState(() { } Future _getSigns(String homework_id) async { - final data = await ApiService.listSignFinished('cutroad', + final data = await ApiService.listSignFinished( + 'cutroad', homework_id.length > 0 ? homework_id : widget.CUTROAD_ID, ); setState(() { @@ -338,16 +346,26 @@ setState(() { '完工验收', '请输入意见', _contentController, - isRequired: true + isRequired: true, ), Divider(), GestureDetector( - child: ListItemFactory.createRowSpaceBetweenItem(leftText: '验收时间', rightText: startTime.isEmpty?'请选择':startTime, isRight: true, isRequired: true), + child: ListItemFactory.createRowSpaceBetweenItem( + leftText: '验收时间', + rightText: startTime.isEmpty ? '请选择' : startTime, + isRight: true, + isRequired: true, + ), onTap: () async { - DateTime? picked = await BottomDateTimePicker.showDate(context); + DateTime? picked = await BottomDateTimePicker.showDate( + mode: BottomPickerMode.dateTimeWithSeconds, + context, + ); if (picked != null) { setState(() { - startTime = DateFormat('yyyy-MM-dd HH:mm').format(picked); + startTime = DateFormat( + 'yyyy-MM-dd HH:mm', + ).format(picked); }); FocusHelper.clearFocus(context); } @@ -359,14 +377,19 @@ setState(() { title: '验收视频', maxCount: 1, mediaType: MediaType.video, - horizontalPadding: 0, + horizontalPadding: 0, onChanged: (paths) {}, onMediaAdded: _onImageAdded, - onMediaTapped: (path) { - presentOpaque(SingleImageViewer(imageUrl: path), context); - }, + onMediaTapped: (path) { + presentOpaque( + SingleImageViewer(imageUrl: path), + context, + ); + }, onMediaRemoved: (path) { - final item = imgList.firstWhere((e) => e.localPath == path); + final item = imgList.firstWhere( + (e) => e.localPath == path, + ); _onImageRemoved(item); }, onAiIdentify: () {}, diff --git a/lib/pages/home/tap/tabList/special_wrok/dt_work/BreakgroundDetailFormWidget.dart b/lib/pages/home/tap/tabList/special_wrok/dt_work/BreakgroundDetailFormWidget.dart index 794beb3..f7c40cd 100644 --- a/lib/pages/home/tap/tabList/special_wrok/dt_work/BreakgroundDetailFormWidget.dart +++ b/lib/pages/home/tap/tabList/special_wrok/dt_work/BreakgroundDetailFormWidget.dart @@ -1,6 +1,8 @@ import 'dart:math' as math; import 'package:flutter/material.dart'; +import 'package:intl/intl.dart'; +import 'package:qhd_prevention/customWidget/picker/CupertinoDatePicker.dart'; import 'package:qhd_prevention/customWidget/ItemWidgetFactory.dart'; import 'package:qhd_prevention/customWidget/single_image_viewer.dart'; import 'package:qhd_prevention/http/ApiService.dart'; @@ -23,11 +25,8 @@ class BreakgroundDetailFormWidget extends StatefulWidget { final TextEditingController? relatedController; final TextEditingController? riskController; // 新增 - final VoidCallback? onChooseVideoManager; - /// 选择摄像头 - final VoidCallback? onWorkStartTimeHandle; - final VoidCallback? onWorkEndTimeHandle; - /// 承包商 +/// 选择摄像头 + final VoidCallback? onChooseVideoManager;/// 承包商 final VoidCallback? onContractorHandle; /// 作业区域 final VoidCallback? onWorkAreaHandle; @@ -42,8 +41,6 @@ class BreakgroundDetailFormWidget extends StatefulWidget { required this.signs, /// 新增 this.onChooseVideoManager, - this.onWorkStartTimeHandle, - this.onWorkEndTimeHandle, this.onContractorHandle, this.onWorkAreaHandle, this.onWorkAreaLocationHandle, @@ -358,6 +355,7 @@ class _BreakgroundDetailFormWidgetState ], ItemListWidget.twoRowButtonTitleText( label: '关联其他特殊作业及安全作业票编号', + isRequired: false, isEditable: widget.isEditable, onTap: () async { final val = await showDialog( @@ -426,14 +424,49 @@ class _BreakgroundDetailFormWidgetState ItemListWidget.selectableLineTitleTextRightButton( label: '预计作业开始时间:', isEditable: widget.isEditable, - onTap: widget.onWorkStartTimeHandle ?? () {}, + onTap: () async { + DateTime? picked = await BottomDateTimePicker.showDate( + mode: BottomPickerMode.dateTimeWithSeconds, + context, + allowFuture: true, + ); + if (picked != null) { + setState(() { + pd['WORK_EXPECTED_START_TIME'] = DateFormat( + 'yyyy-MM-dd HH:mm:ss', + ).format(picked); + + /// 开始时间必须早于结束时间 + if (FormUtils.hasValue(pd, 'WORK_EXPECTED_END_TIME') && + !isBeforeStr( + pd['WORK_EXPECTED_START_TIME'], + pd['WORK_EXPECTED_END_TIME'], + )) { + pd['WORK_EXPECTED_END_TIME'] = ''; + } + }); + } + }, text: pd['WORK_EXPECTED_START_TIME'] ?? '', ), const Divider(), ItemListWidget.selectableLineTitleTextRightButton( label: '预计作业结束时间:', isEditable: widget.isEditable, - onTap: widget.onWorkEndTimeHandle ?? () {}, + onTap: () async { + DateTime? picked = await BottomDateTimePicker.showDate( + context, + minTimeStr: pd['WORK_EXPECTED_START_TIME'] ?? '', + allowFuture: true, + ); + if (picked != null) { + setState(() { + pd['WORK_EXPECTED_END_TIME'] = DateFormat( + 'yyyy-MM-dd HH:mm:ss', + ).format(picked); + }); + } + }, text: pd['WORK_EXPECTED_END_TIME'] ?? '', ), const Divider(), diff --git a/lib/pages/home/tap/tabList/special_wrok/dt_work/dt_work_detai/breakground_apply_detail.dart b/lib/pages/home/tap/tabList/special_wrok/dt_work/dt_work_detai/breakground_apply_detail.dart index 0205e27..6731053 100644 --- a/lib/pages/home/tap/tabList/special_wrok/dt_work/dt_work_detai/breakground_apply_detail.dart +++ b/lib/pages/home/tap/tabList/special_wrok/dt_work/dt_work_detai/breakground_apply_detail.dart @@ -217,44 +217,8 @@ class _BreakgroundApplyDetailState extends State { }); } } - /// 预计作业开始时间 - Future _chooseWorkStartTime() async { - DateTime? picked = await BottomDateTimePicker.showDate( - context, - allowFuture: true, - ); - if (picked != null) { - setState(() { - pd['WORK_EXPECTED_START_TIME'] = DateFormat( - 'yyyy-MM-dd HH:mm:ss', - ).format(picked); - - /// 开始时间必须早于结束时间 - if (FormUtils.hasValue(pd, 'WORK_EXPECTED_END_TIME') && - !isBeforeStr( - pd['WORK_EXPECTED_START_TIME'], - pd['WORK_EXPECTED_END_TIME'], - )) { - pd['WORK_EXPECTED_END_TIME'] = ''; - } - }); - } - } - /// 预计作业结束时间 - Future _chooseWorkEndTime() async { - DateTime? picked = await BottomDateTimePicker.showDate( - context, - minTimeStr: pd['WORK_EXPECTED_START_TIME'] ?? '', - allowFuture: true, - ); - if (picked != null) { - setState(() { - pd['WORK_EXPECTED_END_TIME'] = DateFormat( - 'yyyy-MM-dd HH:mm:ss', - ).format(picked); - }); - } - } + + /// 选择经纬度 Future _showLocationHandle() async{ if (!FormUtils.hasValue(pd, 'ELECTRONIC_FENCE_AREA_ID')) { @@ -629,8 +593,6 @@ class _BreakgroundApplyDetailState extends State { onChooseLevel: _chooseLevel, // 新增 onChooseVideoManager: _chooseVideoManager, - onWorkStartTimeHandle: _chooseWorkStartTime, - onWorkEndTimeHandle: _chooseWorkEndTime, onContractorHandle: _chooseUnitManager, onWorkAreaHandle: _getWorkArea, onWorkAreaLocationHandle: _showLocationHandle, diff --git a/lib/pages/home/tap/tabList/special_wrok/dt_work/jszy_work_detail/breakground_jszy_detail.dart b/lib/pages/home/tap/tabList/special_wrok/dt_work/jszy_work_detail/breakground_jszy_detail.dart index f7c0aea..eba4619 100644 --- a/lib/pages/home/tap/tabList/special_wrok/dt_work/jszy_work_detail/breakground_jszy_detail.dart +++ b/lib/pages/home/tap/tabList/special_wrok/dt_work/jszy_work_detail/breakground_jszy_detail.dart @@ -310,6 +310,7 @@ class _BreakgroundJszyDetailState extends State { ), onTap: () async { DateTime? picked = await BottomDateTimePicker.showDate( + mode: BottomPickerMode.dateTimeWithSeconds, context, ); if (picked != null) { diff --git a/lib/pages/home/tap/tabList/special_wrok/dt_work/kszy_work_detail/breakground_kszy_detail.dart b/lib/pages/home/tap/tabList/special_wrok/dt_work/kszy_work_detail/breakground_kszy_detail.dart index f2cb30b..7c79cbe 100644 --- a/lib/pages/home/tap/tabList/special_wrok/dt_work/kszy_work_detail/breakground_kszy_detail.dart +++ b/lib/pages/home/tap/tabList/special_wrok/dt_work/kszy_work_detail/breakground_kszy_detail.dart @@ -299,6 +299,7 @@ class _BreakgroundKszyDetailState extends State { ), onTap: () async { DateTime? picked = await BottomDateTimePicker.showDate( + mode: BottomPickerMode.dateTimeWithSeconds, context, ); if (picked != null) { diff --git a/lib/pages/home/tap/tabList/special_wrok/dt_work/ysgd_work_detail/breakground_ysgd_detail.dart b/lib/pages/home/tap/tabList/special_wrok/dt_work/ysgd_work_detail/breakground_ysgd_detail.dart index f367aa5..1b6d1c4 100644 --- a/lib/pages/home/tap/tabList/special_wrok/dt_work/ysgd_work_detail/breakground_ysgd_detail.dart +++ b/lib/pages/home/tap/tabList/special_wrok/dt_work/ysgd_work_detail/breakground_ysgd_detail.dart @@ -360,6 +360,7 @@ class _BreakgroundYsgdDetailState extends State { ), onTap: () async { DateTime? picked = await BottomDateTimePicker.showDate( + mode: BottomPickerMode.dateTimeWithSeconds, context, ); if (picked != null) { diff --git a/lib/pages/home/tap/tabList/special_wrok/dz_work/HoistworkDetailFormWidget.dart b/lib/pages/home/tap/tabList/special_wrok/dz_work/HoistworkDetailFormWidget.dart index 7bf0099..e056df1 100644 --- a/lib/pages/home/tap/tabList/special_wrok/dz_work/HoistworkDetailFormWidget.dart +++ b/lib/pages/home/tap/tabList/special_wrok/dz_work/HoistworkDetailFormWidget.dart @@ -5,7 +5,8 @@ import 'package:qhd_prevention/customWidget/ItemWidgetFactory.dart'; import 'package:qhd_prevention/customWidget/single_image_viewer.dart'; import 'package:qhd_prevention/http/ApiService.dart'; import 'package:qhd_prevention/tools/h_colors.dart'; - +import 'package:intl/intl.dart'; +import 'package:qhd_prevention/customWidget/picker/CupertinoDatePicker.dart'; import '../../../../../../tools/tools.dart'; import '../../../item_list_widget.dart'; import '../../special_Wrok/MeasuresListWidget.dart'; @@ -25,11 +26,8 @@ class HoistWorkDetailFormWidget extends StatefulWidget { final TextEditingController? riskController; // 新增 - final VoidCallback? onChooseVideoManager; - /// 选择摄像头 - final VoidCallback? onWorkStartTimeHandle; - final VoidCallback? onWorkEndTimeHandle; - /// 承包商 +/// 选择摄像头 + final VoidCallback? onChooseVideoManager;/// 承包商 final VoidCallback? onContractorHandle; /// 作业区域 final VoidCallback? onWorkAreaHandle; @@ -44,8 +42,6 @@ class HoistWorkDetailFormWidget extends StatefulWidget { required this.signs, /// 新增 this.onChooseVideoManager, - this.onWorkStartTimeHandle, - this.onWorkEndTimeHandle, this.onContractorHandle, this.onWorkAreaHandle, this.onWorkAreaLocationHandle, @@ -343,6 +339,7 @@ class _HoistworkDetailFormWidgetState extends State { ], ItemListWidget.twoRowButtonTitleText( label: '关联其他特殊作业及安全作业票编号', + isRequired: false, isEditable: widget.isEditable, onTap: () async { final val = await showDialog( @@ -408,14 +405,49 @@ class _HoistworkDetailFormWidgetState extends State { ItemListWidget.selectableLineTitleTextRightButton( label: '预计作业开始时间:', isEditable: widget.isEditable, - onTap: widget.onWorkStartTimeHandle ?? () {}, + onTap: () async { + DateTime? picked = await BottomDateTimePicker.showDate( + mode: BottomPickerMode.dateTimeWithSeconds, + context, + allowFuture: true, + ); + if (picked != null) { + setState(() { + pd['WORK_EXPECTED_START_TIME'] = DateFormat( + 'yyyy-MM-dd HH:mm:ss', + ).format(picked); + + /// 开始时间必须早于结束时间 + if (FormUtils.hasValue(pd, 'WORK_EXPECTED_END_TIME') && + !isBeforeStr( + pd['WORK_EXPECTED_START_TIME'], + pd['WORK_EXPECTED_END_TIME'], + )) { + pd['WORK_EXPECTED_END_TIME'] = ''; + } + }); + } + }, text: pd['WORK_EXPECTED_START_TIME'] ?? '', ), const Divider(), ItemListWidget.selectableLineTitleTextRightButton( label: '预计作业结束时间:', isEditable: widget.isEditable, - onTap: widget.onWorkEndTimeHandle ?? () {}, + onTap: () async { + DateTime? picked = await BottomDateTimePicker.showDate( + context, + minTimeStr: pd['WORK_EXPECTED_START_TIME'] ?? '', + allowFuture: true, + ); + if (picked != null) { + setState(() { + pd['WORK_EXPECTED_END_TIME'] = DateFormat( + 'yyyy-MM-dd HH:mm:ss', + ).format(picked); + }); + } + }, text: pd['WORK_EXPECTED_END_TIME'] ?? '', ), const Divider(), diff --git a/lib/pages/home/tap/tabList/special_wrok/dz_work/dz_work_detai/hoistwork_apply_detail.dart b/lib/pages/home/tap/tabList/special_wrok/dz_work/dz_work_detai/hoistwork_apply_detail.dart index 3e9fce0..62cf9a2 100644 --- a/lib/pages/home/tap/tabList/special_wrok/dz_work/dz_work_detai/hoistwork_apply_detail.dart +++ b/lib/pages/home/tap/tabList/special_wrok/dz_work/dz_work_detai/hoistwork_apply_detail.dart @@ -179,44 +179,8 @@ class _HoistworkApplyDetailState extends State { }); } } - /// 预计作业开始时间 - Future _chooseWorkStartTime() async { - DateTime? picked = await BottomDateTimePicker.showDate( - context, - allowFuture: true, - ); - if (picked != null) { - setState(() { - pd['WORK_EXPECTED_START_TIME'] = DateFormat( - 'yyyy-MM-dd HH:mm:ss', - ).format(picked); - - /// 开始时间必须早于结束时间 - if (FormUtils.hasValue(pd, 'WORK_EXPECTED_END_TIME') && - !isBeforeStr( - pd['WORK_EXPECTED_START_TIME'], - pd['WORK_EXPECTED_END_TIME'], - )) { - pd['WORK_EXPECTED_END_TIME'] = ''; - } - }); - } - } - /// 预计作业结束时间 - Future _chooseWorkEndTime() async { - DateTime? picked = await BottomDateTimePicker.showDate( - context, - minTimeStr: pd['WORK_EXPECTED_START_TIME'] ?? '', - allowFuture: true, - ); - if (picked != null) { - setState(() { - pd['WORK_EXPECTED_END_TIME'] = DateFormat( - 'yyyy-MM-dd HH:mm:ss', - ).format(picked); - }); - } - } + + /// 选择经纬度 Future _showLocationHandle() async{ if (!FormUtils.hasValue(pd, 'ELECTRONIC_FENCE_AREA_ID')) { @@ -657,8 +621,6 @@ class _HoistworkApplyDetailState extends State { onChooseLevel: _chooseLevel, // 新增 onChooseVideoManager: _chooseVideoManager, - onWorkStartTimeHandle: _chooseWorkStartTime, - onWorkEndTimeHandle: _chooseWorkEndTime, onContractorHandle: _chooseUnitManager, onWorkAreaHandle: _getWorkArea, onWorkAreaLocationHandle: _showLocationHandle, diff --git a/lib/pages/home/tap/tabList/special_wrok/dz_work/jszy_work_detail/hoistwork_jszy_detail.dart b/lib/pages/home/tap/tabList/special_wrok/dz_work/jszy_work_detail/hoistwork_jszy_detail.dart index 4f1f77a..5bd8242 100644 --- a/lib/pages/home/tap/tabList/special_wrok/dz_work/jszy_work_detail/hoistwork_jszy_detail.dart +++ b/lib/pages/home/tap/tabList/special_wrok/dz_work/jszy_work_detail/hoistwork_jszy_detail.dart @@ -310,6 +310,7 @@ class _HoistworkJszyDetailState extends State { ), onTap: () async { DateTime? picked = await BottomDateTimePicker.showDate( + mode: BottomPickerMode.dateTimeWithSeconds, context, ); if (picked != null) { diff --git a/lib/pages/home/tap/tabList/special_wrok/dz_work/kszy_work_detail/hoistwork_kszy_detail.dart b/lib/pages/home/tap/tabList/special_wrok/dz_work/kszy_work_detail/hoistwork_kszy_detail.dart index d0db93f..b80f67e 100644 --- a/lib/pages/home/tap/tabList/special_wrok/dz_work/kszy_work_detail/hoistwork_kszy_detail.dart +++ b/lib/pages/home/tap/tabList/special_wrok/dz_work/kszy_work_detail/hoistwork_kszy_detail.dart @@ -299,6 +299,7 @@ class _HoistworkKszyDetailState extends State { ), onTap: () async { DateTime? picked = await BottomDateTimePicker.showDate( + mode: BottomPickerMode.dateTimeWithSeconds, context, ); if (picked != null) { diff --git a/lib/pages/home/tap/tabList/special_wrok/dz_work/ysgd_work_detail/hoistwork_ysgd_detail.dart b/lib/pages/home/tap/tabList/special_wrok/dz_work/ysgd_work_detail/hoistwork_ysgd_detail.dart index 251d827..d27b590 100644 --- a/lib/pages/home/tap/tabList/special_wrok/dz_work/ysgd_work_detail/hoistwork_ysgd_detail.dart +++ b/lib/pages/home/tap/tabList/special_wrok/dz_work/ysgd_work_detail/hoistwork_ysgd_detail.dart @@ -360,6 +360,7 @@ class _HoistworkYsgdDetailState extends State { ), onTap: () async { DateTime? picked = await BottomDateTimePicker.showDate( + mode: BottomPickerMode.dateTimeWithSeconds, context, ); if (picked != null) { diff --git a/lib/pages/home/tap/tabList/special_wrok/gc_work/HighWorkDetailFormWidget.dart b/lib/pages/home/tap/tabList/special_wrok/gc_work/HighWorkDetailFormWidget.dart index 7d10631..7d8e406 100644 --- a/lib/pages/home/tap/tabList/special_wrok/gc_work/HighWorkDetailFormWidget.dart +++ b/lib/pages/home/tap/tabList/special_wrok/gc_work/HighWorkDetailFormWidget.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:qhd_prevention/customWidget/ItemWidgetFactory.dart'; - +import 'package:intl/intl.dart'; +import 'package:qhd_prevention/customWidget/picker/CupertinoDatePicker.dart'; import '../../../../../../tools/tools.dart'; import '../../../item_list_widget.dart'; import '../../special_Wrok/MeasuresListWidget.dart'; @@ -11,11 +12,8 @@ class HighWorkDetailFormWidget extends StatefulWidget { final bool isEditable; final VoidCallback onChooseLevel; // 新增 - final VoidCallback? onChooseVideoManager; - /// 选择摄像头 - final VoidCallback? onWorkStartTimeHandle; - final VoidCallback? onWorkEndTimeHandle; - /// 承包商 +/// 选择摄像头 + final VoidCallback? onChooseVideoManager;/// 承包商 final VoidCallback? onContractorHandle; /// 作业区域 final VoidCallback? onWorkAreaHandle; @@ -36,8 +34,6 @@ class HighWorkDetailFormWidget extends StatefulWidget { required this.onChooseLevel, /// 新增 this.onChooseVideoManager, - this.onWorkStartTimeHandle, - this.onWorkEndTimeHandle, this.onContractorHandle, this.onWorkAreaHandle, this.onWorkAreaLocationHandle, @@ -132,6 +128,7 @@ class _HighWorkDetailFormWidgetState extends State { const Divider(), ItemListWidget.twoRowButtonTitleText( label: '关联其他特殊作业及安全作业票编号', + isRequired: false, isEditable: widget.isEditable, onTap: () async { final val = await showDialog( @@ -197,14 +194,49 @@ class _HighWorkDetailFormWidgetState extends State { ItemListWidget.selectableLineTitleTextRightButton( label: '预计作业开始时间:', isEditable: widget.isEditable, - onTap: widget.onWorkStartTimeHandle ?? () {}, + onTap: () async { + DateTime? picked = await BottomDateTimePicker.showDate( + mode: BottomPickerMode.dateTimeWithSeconds, + context, + allowFuture: true, + ); + if (picked != null) { + setState(() { + pd['WORK_EXPECTED_START_TIME'] = DateFormat( + 'yyyy-MM-dd HH:mm:ss', + ).format(picked); + + /// 开始时间必须早于结束时间 + if (FormUtils.hasValue(pd, 'WORK_EXPECTED_END_TIME') && + !isBeforeStr( + pd['WORK_EXPECTED_START_TIME'], + pd['WORK_EXPECTED_END_TIME'], + )) { + pd['WORK_EXPECTED_END_TIME'] = ''; + } + }); + } + }, text: pd['WORK_EXPECTED_START_TIME'] ?? '', ), const Divider(), ItemListWidget.selectableLineTitleTextRightButton( label: '预计作业结束时间:', isEditable: widget.isEditable, - onTap: widget.onWorkEndTimeHandle ?? () {}, + onTap: () async { + DateTime? picked = await BottomDateTimePicker.showDate( + context, + minTimeStr: pd['WORK_EXPECTED_START_TIME'] ?? '', + allowFuture: true, + ); + if (picked != null) { + setState(() { + pd['WORK_EXPECTED_END_TIME'] = DateFormat( + 'yyyy-MM-dd HH:mm:ss', + ).format(picked); + }); + } + }, text: pd['WORK_EXPECTED_END_TIME'] ?? '', ), const Divider(), diff --git a/lib/pages/home/tap/tabList/special_wrok/gc_work/gc_work_detai/highwork_apply_detail.dart b/lib/pages/home/tap/tabList/special_wrok/gc_work/gc_work_detai/highwork_apply_detail.dart index bc5ad28..1c9b1c5 100644 --- a/lib/pages/home/tap/tabList/special_wrok/gc_work/gc_work_detai/highwork_apply_detail.dart +++ b/lib/pages/home/tap/tabList/special_wrok/gc_work/gc_work_detai/highwork_apply_detail.dart @@ -173,44 +173,8 @@ class _HighworkApplyDetailState extends State { }); } } - /// 预计作业开始时间 - Future _chooseWorkStartTime() async { - DateTime? picked = await BottomDateTimePicker.showDate( - context, - allowFuture: true, - ); - if (picked != null) { - setState(() { - pd['WORK_EXPECTED_START_TIME'] = DateFormat( - 'yyyy-MM-dd HH:mm:ss', - ).format(picked); - - /// 开始时间必须早于结束时间 - if (FormUtils.hasValue(pd, 'WORK_EXPECTED_END_TIME') && - !isBeforeStr( - pd['WORK_EXPECTED_START_TIME'], - pd['WORK_EXPECTED_END_TIME'], - )) { - pd['WORK_EXPECTED_END_TIME'] = ''; - } - }); - } - } - /// 预计作业结束时间 - Future _chooseWorkEndTime() async { - DateTime? picked = await BottomDateTimePicker.showDate( - context, - minTimeStr: pd['WORK_EXPECTED_START_TIME'] ?? '', - allowFuture: true, - ); - if (picked != null) { - setState(() { - pd['WORK_EXPECTED_END_TIME'] = DateFormat( - 'yyyy-MM-dd HH:mm:ss', - ).format(picked); - }); - } - } + + /// 选择经纬度 Future _showLocationHandle() async{ if (!FormUtils.hasValue(pd, 'ELECTRONIC_FENCE_AREA_ID')) { @@ -659,8 +623,6 @@ class _HighworkApplyDetailState extends State { onChooseLevel: _chooseLevel, // 新增 onChooseVideoManager: _chooseVideoManager, - onWorkStartTimeHandle: _chooseWorkStartTime, - onWorkEndTimeHandle: _chooseWorkEndTime, onContractorHandle: _chooseUnitManager, onWorkAreaHandle: _getWorkArea, onWorkAreaLocationHandle: _showLocationHandle, diff --git a/lib/pages/home/tap/tabList/special_wrok/gc_work/jszy_work_detail/highwork_jszy_detail.dart b/lib/pages/home/tap/tabList/special_wrok/gc_work/jszy_work_detail/highwork_jszy_detail.dart index a334112..c5861f7 100644 --- a/lib/pages/home/tap/tabList/special_wrok/gc_work/jszy_work_detail/highwork_jszy_detail.dart +++ b/lib/pages/home/tap/tabList/special_wrok/gc_work/jszy_work_detail/highwork_jszy_detail.dart @@ -310,6 +310,7 @@ class _HighworkJszyDetailState extends State { ), onTap: () async { DateTime? picked = await BottomDateTimePicker.showDate( + mode: BottomPickerMode.dateTimeWithSeconds, context, ); if (picked != null) { diff --git a/lib/pages/home/tap/tabList/special_wrok/gc_work/kszy_work_detail/highwork_kszy_detail.dart b/lib/pages/home/tap/tabList/special_wrok/gc_work/kszy_work_detail/highwork_kszy_detail.dart index 2cd24a6..1c9bb51 100644 --- a/lib/pages/home/tap/tabList/special_wrok/gc_work/kszy_work_detail/highwork_kszy_detail.dart +++ b/lib/pages/home/tap/tabList/special_wrok/gc_work/kszy_work_detail/highwork_kszy_detail.dart @@ -299,6 +299,7 @@ class _HighworkKszyDetailState extends State { ), onTap: () async { DateTime? picked = await BottomDateTimePicker.showDate( + mode: BottomPickerMode.dateTimeWithSeconds, context, ); if (picked != null) { diff --git a/lib/pages/home/tap/tabList/special_wrok/gc_work/ysgd_work_detail/highwork_ysgd_detail.dart b/lib/pages/home/tap/tabList/special_wrok/gc_work/ysgd_work_detail/highwork_ysgd_detail.dart index 808d07c..baa1f97 100644 --- a/lib/pages/home/tap/tabList/special_wrok/gc_work/ysgd_work_detail/highwork_ysgd_detail.dart +++ b/lib/pages/home/tap/tabList/special_wrok/gc_work/ysgd_work_detail/highwork_ysgd_detail.dart @@ -360,6 +360,7 @@ class _HighworkYsgdDetailState extends State { ), onTap: () async { DateTime? picked = await BottomDateTimePicker.showDate( + mode: BottomPickerMode.dateTimeWithSeconds, context, ); if (picked != null) { diff --git a/lib/pages/home/tap/tabList/special_wrok/lsyd_work/ElectricityDetailFormWidget.dart b/lib/pages/home/tap/tabList/special_wrok/lsyd_work/ElectricityDetailFormWidget.dart index 9edd27f..a6a8376 100644 --- a/lib/pages/home/tap/tabList/special_wrok/lsyd_work/ElectricityDetailFormWidget.dart +++ b/lib/pages/home/tap/tabList/special_wrok/lsyd_work/ElectricityDetailFormWidget.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:qhd_prevention/customWidget/ItemWidgetFactory.dart'; - +import 'package:intl/intl.dart'; +import 'package:qhd_prevention/customWidget/picker/CupertinoDatePicker.dart'; import '../../../../../../tools/tools.dart'; import '../../../item_list_widget.dart'; import '../../special_Wrok/MeasuresListWidget.dart'; @@ -13,11 +14,8 @@ class ElectricityDetailFormWidget extends StatefulWidget { final VoidCallback onChooseHotworkUser; final VoidCallback onAnalyzeTap; // 新增 - final VoidCallback? onChooseVideoManager; - /// 选择摄像头 - final VoidCallback? onWorkStartTimeHandle; - final VoidCallback? onWorkEndTimeHandle; - /// 承包商 +/// 选择摄像头 + final VoidCallback? onChooseVideoManager;/// 承包商 final VoidCallback? onContractorHandle; /// 作业区域 final VoidCallback? onWorkAreaHandle; @@ -43,8 +41,6 @@ class ElectricityDetailFormWidget extends StatefulWidget { /// 新增 this.onChooseVideoManager, - this.onWorkStartTimeHandle, - this.onWorkEndTimeHandle, this.onContractorHandle, this.onWorkAreaHandle, this.onWorkAreaLocationHandle, @@ -199,6 +195,7 @@ class _ElectricityDetailFormWidgetState extends State( @@ -265,14 +262,49 @@ class _ElectricityDetailFormWidgetState extends State { ), onTap: () async { DateTime? picked = await BottomDateTimePicker.showDate( + mode: BottomPickerMode.dateTimeWithSeconds, context, ); if (picked != null) { diff --git a/lib/pages/home/tap/tabList/special_wrok/lsyd_work/kszy_work_detail/electricity_kszy_detail.dart b/lib/pages/home/tap/tabList/special_wrok/lsyd_work/kszy_work_detail/electricity_kszy_detail.dart index b71e330..c1406e5 100644 --- a/lib/pages/home/tap/tabList/special_wrok/lsyd_work/kszy_work_detail/electricity_kszy_detail.dart +++ b/lib/pages/home/tap/tabList/special_wrok/lsyd_work/kszy_work_detail/electricity_kszy_detail.dart @@ -308,6 +308,7 @@ class _ElectricityKszyDetailState extends State { ), onTap: () async { DateTime? picked = await BottomDateTimePicker.showDate( + mode: BottomPickerMode.dateTimeWithSeconds, context, ); if (picked != null) { diff --git a/lib/pages/home/tap/tabList/special_wrok/lsyd_work/lsyd_work_detai/electricity_apply_detail.dart b/lib/pages/home/tap/tabList/special_wrok/lsyd_work/lsyd_work_detai/electricity_apply_detail.dart index 7cb335c..3f05bea 100644 --- a/lib/pages/home/tap/tabList/special_wrok/lsyd_work/lsyd_work_detai/electricity_apply_detail.dart +++ b/lib/pages/home/tap/tabList/special_wrok/lsyd_work/lsyd_work_detai/electricity_apply_detail.dart @@ -191,44 +191,8 @@ class _ElectricityApplyDetailState extends State { }); } } - /// 预计作业开始时间 - Future _chooseWorkStartTime() async { - DateTime? picked = await BottomDateTimePicker.showDate( - context, - allowFuture: true, - ); - if (picked != null) { - setState(() { - pd['WORK_EXPECTED_START_TIME'] = DateFormat( - 'yyyy-MM-dd HH:mm:ss', - ).format(picked); - - /// 开始时间必须早于结束时间 - if (FormUtils.hasValue(pd, 'WORK_EXPECTED_END_TIME') && - !isBeforeStr( - pd['WORK_EXPECTED_START_TIME'], - pd['WORK_EXPECTED_END_TIME'], - )) { - pd['WORK_EXPECTED_END_TIME'] = ''; - } - }); - } - } - /// 预计作业结束时间 - Future _chooseWorkEndTime() async { - DateTime? picked = await BottomDateTimePicker.showDate( - context, - minTimeStr: pd['WORK_EXPECTED_START_TIME'] ?? '', - allowFuture: true, - ); - if (picked != null) { - setState(() { - pd['WORK_EXPECTED_END_TIME'] = DateFormat( - 'yyyy-MM-dd HH:mm:ss', - ).format(picked); - }); - } - } + + /// 选择经纬度 Future _showLocationHandle() async{ if (!FormUtils.hasValue(pd, 'ELECTRONIC_FENCE_AREA_ID')) { @@ -670,8 +634,6 @@ class _ElectricityApplyDetailState extends State { }, // 新增 onChooseVideoManager: _chooseVideoManager, - onWorkStartTimeHandle: _chooseWorkStartTime, - onWorkEndTimeHandle: _chooseWorkEndTime, onContractorHandle: _chooseUnitManager, onWorkAreaHandle: _getWorkArea, onWorkAreaLocationHandle: _showLocationHandle, diff --git a/lib/pages/home/tap/tabList/special_wrok/lsyd_work/ysgd_work_detail/electricity_ysgd_detail.dart b/lib/pages/home/tap/tabList/special_wrok/lsyd_work/ysgd_work_detail/electricity_ysgd_detail.dart index 882748c..6855499 100644 --- a/lib/pages/home/tap/tabList/special_wrok/lsyd_work/ysgd_work_detail/electricity_ysgd_detail.dart +++ b/lib/pages/home/tap/tabList/special_wrok/lsyd_work/ysgd_work_detail/electricity_ysgd_detail.dart @@ -366,6 +366,7 @@ class _ElectricityYsgdDetailState extends State { ), onTap: () async { DateTime? picked = await BottomDateTimePicker.showDate( + mode: BottomPickerMode.dateTimeWithSeconds, context, ); if (picked != null) { diff --git a/lib/pages/home/tap/tabList/special_wrok/mbcd_work/BlindboardDetailFormWidget.dart b/lib/pages/home/tap/tabList/special_wrok/mbcd_work/BlindboardDetailFormWidget.dart index 3da5bdf..2128415 100644 --- a/lib/pages/home/tap/tabList/special_wrok/mbcd_work/BlindboardDetailFormWidget.dart +++ b/lib/pages/home/tap/tabList/special_wrok/mbcd_work/BlindboardDetailFormWidget.dart @@ -4,7 +4,8 @@ import 'package:flutter/material.dart'; import 'package:qhd_prevention/customWidget/ItemWidgetFactory.dart'; import 'package:qhd_prevention/customWidget/custom_button.dart'; import 'package:qhd_prevention/customWidget/single_image_viewer.dart'; - +import 'package:intl/intl.dart'; +import 'package:qhd_prevention/customWidget/picker/CupertinoDatePicker.dart'; import '../../../../../../tools/tools.dart'; import '../../../item_list_widget.dart'; import '../../special_Wrok/MeasuresListWidget.dart'; @@ -46,11 +47,8 @@ class BlindboardDetailFormWidget extends StatefulWidget { final bool isEditable; final VoidCallback onChooseLevel; // 新增 - final VoidCallback? onChooseVideoManager; - /// 选择摄像头 - final VoidCallback? onWorkStartTimeHandle; - final VoidCallback? onWorkEndTimeHandle; - /// 承包商 +/// 选择摄像头 + final VoidCallback? onChooseVideoManager;/// 承包商 final VoidCallback? onContractorHandle; /// 作业区域 final VoidCallback? onWorkAreaHandle; @@ -74,8 +72,6 @@ class BlindboardDetailFormWidget extends StatefulWidget { required this.boardList, /// 新增 this.onChooseVideoManager, - this.onWorkStartTimeHandle, - this.onWorkEndTimeHandle, this.onContractorHandle, this.onWorkAreaHandle, this.onWorkAreaLocationHandle, @@ -308,6 +304,7 @@ class _BlindboardDetailFormWidgetState ], ItemListWidget.twoRowButtonTitleText( label: '关联其他特殊作业及安全作业票编号', + isRequired: false, isEditable: widget.isEditable, onTap: () async { final val = await showDialog( @@ -375,14 +372,49 @@ class _BlindboardDetailFormWidgetState ItemListWidget.selectableLineTitleTextRightButton( label: '预计作业开始时间:', isEditable: widget.isEditable, - onTap: widget.onWorkStartTimeHandle ?? () {}, + onTap: () async { + DateTime? picked = await BottomDateTimePicker.showDate( + mode: BottomPickerMode.dateTimeWithSeconds, + context, + allowFuture: true, + ); + if (picked != null) { + setState(() { + pd['WORK_EXPECTED_START_TIME'] = DateFormat( + 'yyyy-MM-dd HH:mm:ss', + ).format(picked); + + /// 开始时间必须早于结束时间 + if (FormUtils.hasValue(pd, 'WORK_EXPECTED_END_TIME') && + !isBeforeStr( + pd['WORK_EXPECTED_START_TIME'], + pd['WORK_EXPECTED_END_TIME'], + )) { + pd['WORK_EXPECTED_END_TIME'] = ''; + } + }); + } + }, text: pd['WORK_EXPECTED_START_TIME'] ?? '', ), const Divider(), ItemListWidget.selectableLineTitleTextRightButton( label: '预计作业结束时间:', isEditable: widget.isEditable, - onTap: widget.onWorkEndTimeHandle ?? () {}, + onTap: () async { + DateTime? picked = await BottomDateTimePicker.showDate( + context, + minTimeStr: pd['WORK_EXPECTED_START_TIME'] ?? '', + allowFuture: true, + ); + if (picked != null) { + setState(() { + pd['WORK_EXPECTED_END_TIME'] = DateFormat( + 'yyyy-MM-dd HH:mm:ss', + ).format(picked); + }); + } + }, text: pd['WORK_EXPECTED_END_TIME'] ?? '', ), const Divider(), diff --git a/lib/pages/home/tap/tabList/special_wrok/mbcd_work/jszy_work_detail/blindboard_jszy_detail.dart b/lib/pages/home/tap/tabList/special_wrok/mbcd_work/jszy_work_detail/blindboard_jszy_detail.dart index c797686..01d32dc 100644 --- a/lib/pages/home/tap/tabList/special_wrok/mbcd_work/jszy_work_detail/blindboard_jszy_detail.dart +++ b/lib/pages/home/tap/tabList/special_wrok/mbcd_work/jszy_work_detail/blindboard_jszy_detail.dart @@ -313,6 +313,7 @@ class _BlindboardJszyDetailState extends State { ), onTap: () async { DateTime? picked = await BottomDateTimePicker.showDate( + mode: BottomPickerMode.dateTimeWithSeconds, context, ); if (picked != null) { diff --git a/lib/pages/home/tap/tabList/special_wrok/mbcd_work/kszy_work_detail/blindboard_kszy_detail.dart b/lib/pages/home/tap/tabList/special_wrok/mbcd_work/kszy_work_detail/blindboard_kszy_detail.dart index ce120ef..a698637 100644 --- a/lib/pages/home/tap/tabList/special_wrok/mbcd_work/kszy_work_detail/blindboard_kszy_detail.dart +++ b/lib/pages/home/tap/tabList/special_wrok/mbcd_work/kszy_work_detail/blindboard_kszy_detail.dart @@ -302,6 +302,7 @@ class _BlindboardKszyDetailState extends State { ), onTap: () async { DateTime? picked = await BottomDateTimePicker.showDate( + mode: BottomPickerMode.dateTimeWithSeconds, context, ); if (picked != null) { diff --git a/lib/pages/home/tap/tabList/special_wrok/mbcd_work/mbcd_work_detai/blindboard_apply_detail.dart b/lib/pages/home/tap/tabList/special_wrok/mbcd_work/mbcd_work_detai/blindboard_apply_detail.dart index 0d75d4b..b2a3d30 100644 --- a/lib/pages/home/tap/tabList/special_wrok/mbcd_work/mbcd_work_detai/blindboard_apply_detail.dart +++ b/lib/pages/home/tap/tabList/special_wrok/mbcd_work/mbcd_work_detai/blindboard_apply_detail.dart @@ -181,44 +181,8 @@ class _BlindboardApplyDetailState extends State { }); } } - /// 预计作业开始时间 - Future _chooseWorkStartTime() async { - DateTime? picked = await BottomDateTimePicker.showDate( - context, - allowFuture: true, - ); - if (picked != null) { - setState(() { - pd['WORK_EXPECTED_START_TIME'] = DateFormat( - 'yyyy-MM-dd HH:mm:ss', - ).format(picked); - - /// 开始时间必须早于结束时间 - if (FormUtils.hasValue(pd, 'WORK_EXPECTED_END_TIME') && - !isBeforeStr( - pd['WORK_EXPECTED_START_TIME'], - pd['WORK_EXPECTED_END_TIME'], - )) { - pd['WORK_EXPECTED_END_TIME'] = ''; - } - }); - } - } - /// 预计作业结束时间 - Future _chooseWorkEndTime() async { - DateTime? picked = await BottomDateTimePicker.showDate( - context, - minTimeStr: pd['WORK_EXPECTED_START_TIME'] ?? '', - allowFuture: true, - ); - if (picked != null) { - setState(() { - pd['WORK_EXPECTED_END_TIME'] = DateFormat( - 'yyyy-MM-dd HH:mm:ss', - ).format(picked); - }); - } - } + + /// 选择经纬度 Future _showLocationHandle() async{ if (!FormUtils.hasValue(pd, 'ELECTRONIC_FENCE_AREA_ID')) { @@ -659,8 +623,6 @@ class _BlindboardApplyDetailState extends State { onChooseLevel: _chooseLevel, // 新增 onChooseVideoManager: _chooseVideoManager, - onWorkStartTimeHandle: _chooseWorkStartTime, - onWorkEndTimeHandle: _chooseWorkEndTime, onContractorHandle: _chooseUnitManager, onWorkAreaHandle: _getWorkArea, onWorkAreaLocationHandle: _showLocationHandle, diff --git a/lib/pages/home/tap/tabList/special_wrok/mbcd_work/ysgd_work_detail/blindboard_ysgd_detail.dart b/lib/pages/home/tap/tabList/special_wrok/mbcd_work/ysgd_work_detail/blindboard_ysgd_detail.dart index cc1a645..d177d59 100644 --- a/lib/pages/home/tap/tabList/special_wrok/mbcd_work/ysgd_work_detail/blindboard_ysgd_detail.dart +++ b/lib/pages/home/tap/tabList/special_wrok/mbcd_work/ysgd_work_detail/blindboard_ysgd_detail.dart @@ -353,6 +353,7 @@ class _BlindboardYsgdDetailState extends State { ), onTap: () async { DateTime? picked = await BottomDateTimePicker.showDate( + mode: BottomPickerMode.dateTimeWithSeconds, context, ); if (picked != null) { diff --git a/lib/pages/home/tap/tabList/special_wrok/sxkj_work/SpaceWorkDetailFormWidget.dart b/lib/pages/home/tap/tabList/special_wrok/sxkj_work/SpaceWorkDetailFormWidget.dart index 2e727a8..5db1e16 100644 --- a/lib/pages/home/tap/tabList/special_wrok/sxkj_work/SpaceWorkDetailFormWidget.dart +++ b/lib/pages/home/tap/tabList/special_wrok/sxkj_work/SpaceWorkDetailFormWidget.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:qhd_prevention/customWidget/ItemWidgetFactory.dart'; - +import 'package:intl/intl.dart'; +import 'package:qhd_prevention/customWidget/picker/CupertinoDatePicker.dart'; import '../../../../../../tools/tools.dart'; import '../../../item_list_widget.dart'; import '../../special_Wrok/MeasuresListWidget.dart'; @@ -14,11 +15,8 @@ class SpaceWorkDetailFormWidget extends StatefulWidget { final VoidCallback onChooseSpaceName; final VoidCallback onAnalyzeTap; // 新增 - final VoidCallback? onChooseVideoManager; - /// 选择摄像头 - final VoidCallback? onWorkStartTimeHandle; - final VoidCallback? onWorkEndTimeHandle; - /// 承包商 +/// 选择摄像头 + final VoidCallback? onChooseVideoManager;/// 承包商 final VoidCallback? onContractorHandle; /// 作业区域 final VoidCallback? onWorkAreaHandle; @@ -42,8 +40,6 @@ class SpaceWorkDetailFormWidget extends StatefulWidget { required this.onAnalyzeTap, /// 新增 this.onChooseVideoManager, - this.onWorkStartTimeHandle, - this.onWorkEndTimeHandle, this.onContractorHandle, this.onWorkAreaHandle, this.onWorkAreaLocationHandle, @@ -171,7 +167,6 @@ class _SpaceWorkDetailFormWidgetState extends State { ItemListWidget.selectableLineTitleTextRightButton( label: '作业开始时间:', isEditable: false, - onTap: widget.onChooseLevel, text: pd['WORK_START_DATE'] ?? '', ), ], @@ -180,13 +175,13 @@ class _SpaceWorkDetailFormWidgetState extends State { ItemListWidget.selectableLineTitleTextRightButton( label: '作业结束时间:', isEditable: false, - onTap: widget.onChooseLevel, text: pd['WORK_END_DATE'] ?? '', ), ], const Divider(), ItemListWidget.twoRowButtonTitleText( label: '关联其他特殊作业及安全作业票编号', + isRequired: false, isEditable: widget.isEditable, onTap: () async { final val = await showDialog( @@ -254,14 +249,49 @@ class _SpaceWorkDetailFormWidgetState extends State { ItemListWidget.selectableLineTitleTextRightButton( label: '预计作业开始时间:', isEditable: widget.isEditable, - onTap: widget.onWorkStartTimeHandle ?? () {}, + onTap: () async { + DateTime? picked = await BottomDateTimePicker.showDate( + mode: BottomPickerMode.dateTimeWithSeconds, + context, + allowFuture: true, + ); + if (picked != null) { + setState(() { + pd['WORK_EXPECTED_START_TIME'] = DateFormat( + 'yyyy-MM-dd HH:mm:ss', + ).format(picked); + + /// 开始时间必须早于结束时间 + if (FormUtils.hasValue(pd, 'WORK_EXPECTED_END_TIME') && + !isBeforeStr( + pd['WORK_EXPECTED_START_TIME'], + pd['WORK_EXPECTED_END_TIME'], + )) { + pd['WORK_EXPECTED_END_TIME'] = ''; + } + }); + } + }, text: pd['WORK_EXPECTED_START_TIME'] ?? '', ), const Divider(), ItemListWidget.selectableLineTitleTextRightButton( label: '预计作业结束时间:', isEditable: widget.isEditable, - onTap: widget.onWorkEndTimeHandle ?? () {}, + onTap: () async { + DateTime? picked = await BottomDateTimePicker.showDate( + context, + minTimeStr: pd['WORK_EXPECTED_START_TIME'] ?? '', + allowFuture: true, + ); + if (picked != null) { + setState(() { + pd['WORK_EXPECTED_END_TIME'] = DateFormat( + 'yyyy-MM-dd HH:mm:ss', + ).format(picked); + }); + } + }, text: pd['WORK_EXPECTED_END_TIME'] ?? '', ), const Divider(), diff --git a/lib/pages/home/tap/tabList/special_wrok/sxkj_work/jszy_work_detail/spacework_jszy_detail.dart b/lib/pages/home/tap/tabList/special_wrok/sxkj_work/jszy_work_detail/spacework_jszy_detail.dart index ddf9219..b79a14c 100644 --- a/lib/pages/home/tap/tabList/special_wrok/sxkj_work/jszy_work_detail/spacework_jszy_detail.dart +++ b/lib/pages/home/tap/tabList/special_wrok/sxkj_work/jszy_work_detail/spacework_jszy_detail.dart @@ -320,6 +320,7 @@ class _SpaceworkJszyDetailState extends State { ), onTap: () async { DateTime? picked = await BottomDateTimePicker.showDate( + mode: BottomPickerMode.dateTimeWithSeconds, context, ); if (picked != null) { diff --git a/lib/pages/home/tap/tabList/special_wrok/sxkj_work/kszy_work_detail/spacework_kszy_detail.dart b/lib/pages/home/tap/tabList/special_wrok/sxkj_work/kszy_work_detail/spacework_kszy_detail.dart index b59788c..b2c5bd1 100644 --- a/lib/pages/home/tap/tabList/special_wrok/sxkj_work/kszy_work_detail/spacework_kszy_detail.dart +++ b/lib/pages/home/tap/tabList/special_wrok/sxkj_work/kszy_work_detail/spacework_kszy_detail.dart @@ -313,6 +313,7 @@ class _SpaceworkKszyDetailState extends State { ), onTap: () async { DateTime? picked = await BottomDateTimePicker.showDate( + mode: BottomPickerMode.dateTimeWithSeconds, context, ); if (picked != null) { diff --git a/lib/pages/home/tap/tabList/special_wrok/sxkj_work/space_work_detai/spacework_apply_detail.dart b/lib/pages/home/tap/tabList/special_wrok/sxkj_work/space_work_detai/spacework_apply_detail.dart index 7f4e931..cd4806f 100644 --- a/lib/pages/home/tap/tabList/special_wrok/sxkj_work/space_work_detai/spacework_apply_detail.dart +++ b/lib/pages/home/tap/tabList/special_wrok/sxkj_work/space_work_detai/spacework_apply_detail.dart @@ -186,45 +186,9 @@ class _SpaceworkApplyDetailState extends State { } } - /// 预计作业开始时间 - Future _chooseWorkStartTime() async { - DateTime? picked = await BottomDateTimePicker.showDate( - context, - allowFuture: true, - ); - if (picked != null) { - setState(() { - pd['WORK_EXPECTED_START_TIME'] = DateFormat( - 'yyyy-MM-dd HH:mm:ss', - ).format(picked); + - /// 开始时间必须早于结束时间 - if (FormUtils.hasValue(pd, 'WORK_EXPECTED_END_TIME') && - !isBeforeStr( - pd['WORK_EXPECTED_START_TIME'], - pd['WORK_EXPECTED_END_TIME'], - )) { - pd['WORK_EXPECTED_END_TIME'] = ''; - } - }); - } - } - - /// 预计作业结束时间 - Future _chooseWorkEndTime() async { - DateTime? picked = await BottomDateTimePicker.showDate( - context, - minTimeStr: pd['WORK_EXPECTED_START_TIME'] ?? '', - allowFuture: true, - ); - if (picked != null) { - setState(() { - pd['WORK_EXPECTED_END_TIME'] = DateFormat( - 'yyyy-MM-dd HH:mm:ss', - ).format(picked); - }); - } - } + /// 选择经纬度 Future _showLocationHandle() async { @@ -665,8 +629,6 @@ class _SpaceworkApplyDetailState extends State { onAnalyzeTap: () {}, // 新增 onChooseVideoManager: _chooseVideoManager, - onWorkStartTimeHandle: _chooseWorkStartTime, - onWorkEndTimeHandle: _chooseWorkEndTime, onContractorHandle: _chooseUnitManager, onWorkAreaHandle: _getWorkArea, onWorkAreaLocationHandle: _showLocationHandle, diff --git a/lib/pages/home/tap/tabList/special_wrok/sxkj_work/ysgd_work_detail/spacework_ysgd_detail.dart b/lib/pages/home/tap/tabList/special_wrok/sxkj_work/ysgd_work_detail/spacework_ysgd_detail.dart index ac18d7e..86c3f00 100644 --- a/lib/pages/home/tap/tabList/special_wrok/sxkj_work/ysgd_work_detail/spacework_ysgd_detail.dart +++ b/lib/pages/home/tap/tabList/special_wrok/sxkj_work/ysgd_work_detail/spacework_ysgd_detail.dart @@ -370,6 +370,7 @@ class _SpaceworkYsgdDetailState extends State { ), onTap: () async { DateTime? picked = await BottomDateTimePicker.showDate( + mode: BottomPickerMode.dateTimeWithSeconds, context, ); if (picked != null) { diff --git a/lib/pages/mine/mine_page.dart b/lib/pages/mine/mine_page.dart index fc31c81..b9f09aa 100644 --- a/lib/pages/mine/mine_page.dart +++ b/lib/pages/mine/mine_page.dart @@ -214,7 +214,7 @@ class _MinePageState extends State { child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text(text, style: TextStyle(fontSize: 16),), + Text(text, style: TextStyle(fontSize: 14),), Icon(Icons.chevron_right) ], ), diff --git a/lib/pages/mine/mine_sign_page.dart b/lib/pages/mine/mine_sign_page.dart index f6c5dcb..a18ec84 100644 --- a/lib/pages/mine/mine_sign_page.dart +++ b/lib/pages/mine/mine_sign_page.dart @@ -6,6 +6,7 @@ import 'dart:ui' as ui; import 'package:flutter/services.dart'; import 'package:path_provider/path_provider.dart'; +import 'package:qhd_prevention/tools/tools.dart'; class MineSignPage extends StatelessWidget { const MineSignPage({super.key}); @@ -95,6 +96,7 @@ class _SignatureConfirmPageState extends State { @override void initState() { super.initState(); + NativeOrientation.setLandscape(); SystemChrome.setPreferredOrientations([ DeviceOrientation.landscapeRight, DeviceOrientation.landscapeLeft, @@ -106,8 +108,9 @@ class _SignatureConfirmPageState extends State { // 不要忘记重置方向设置,以避免影响其他页面或应用。 SystemChrome.setPreferredOrientations([ DeviceOrientation.portraitUp, - ]); + NativeOrientation.setPortrait(); + super.dispose(); }