From 945edcd968ad9350e0fcf24c7949c26da9e68116 Mon Sep 17 00:00:00 2001 From: xufei <727302827@qq.com> Date: Sat, 6 Sep 2025 16:52:08 +0800 Subject: [PATCH] =?UTF-8?q?2025.9.6=20=E4=BF=AE=E6=94=B9bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/images/document.png | Bin 0 -> 4110 bytes lib/customWidget/ItemWidgetFactory.dart | 2 + lib/http/ApiService.dart | 28 +++- .../KeyProject/keyProject_list_page.dart | 3 +- .../check_information_one_item.dart | 72 +++++++--- .../check_record_detail_page.dart | 2 + .../Danger_paicha/check_record_list_page.dart | 8 +- .../app/Danger_paicha/check_record_page.dart | 7 +- .../hazard_registration_page.dart | 80 +++++++---- .../app/Danger_paicha/quick_report_page.dart | 42 +++--- lib/pages/app/danger_wait_list_page.dart | 5 +- lib/pages/app/danner_repair.dart | 51 ++++--- .../app/hidden_danger_acceptance_page.dart | 6 +- lib/pages/home/home_danger_page.dart | 9 +- lib/pages/home/work/danger_page.dart | 11 +- lib/pages/home/work/danger_project_page.dart | 6 + lib/pages/home/work/danger_wait_deawer.dart | 136 ++++++++++++------ lib/pages/home/work/laws_list_picker.dart | 37 +++-- lib/pages/home/work/risk_list_page.dart | 7 +- lib/pages/mine/mine_feedback_page.dart | 41 +++--- lib/pages/mine/mine_first_sign_page.dart | 46 +++++- lib/pages/mine/mine_sign_page.dart | 19 ++- lib/pages/mine/webViewPage.dart | 8 +- 23 files changed, 449 insertions(+), 177 deletions(-) create mode 100644 assets/images/document.png diff --git a/assets/images/document.png b/assets/images/document.png new file mode 100644 index 0000000000000000000000000000000000000000..9c55f3100ee273f25cbe2e1788707370b7ec91fa GIT binary patch literal 4110 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 L=#*di>(Rdeg~~JX literal 0 HcmV?d00001 diff --git a/lib/customWidget/ItemWidgetFactory.dart b/lib/customWidget/ItemWidgetFactory.dart index 831a870..1cebbfc 100644 --- a/lib/customWidget/ItemWidgetFactory.dart +++ b/lib/customWidget/ItemWidgetFactory.dart @@ -446,6 +446,7 @@ class ListItemFactory { String hint, TextEditingController controller, { bool isRequired = false, + int inputNum=120, }) { return Container( height: 130, @@ -469,6 +470,7 @@ class ListItemFactory { child: TextField( autofocus: false, controller: controller, + maxLength: inputNum, keyboardType: TextInputType.multiline, maxLines: null, expands: true, diff --git a/lib/http/ApiService.dart b/lib/http/ApiService.dart index ba286f9..fb7cd69 100644 --- a/lib/http/ApiService.dart +++ b/lib/http/ApiService.dart @@ -23,9 +23,10 @@ class ApiService { static const String baseFacePath = "http://192.168.20.240:8500/whb_stu_face/"; /// 登录及其他管理后台接口 + // static const String basePath = "http://192.168.20.240:8500/integrated_whb";//测试服务器 // 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.45:28199";//长久服务器 // static const String basePath = "http://192.168.0.37:8099/api"; @@ -1981,9 +1982,10 @@ U6Hzm1ninpWeE+awIDAQAB data: { //隐患记录 "STARTTIME": startDate, - "ENDTIME": endDate, + "ENDTIME": endDate.isEmpty?"":"$endDate 23:59:59", "HIDDENLEVEL": level, "HIDDEN_RISKSTANDARD": riskStandard, + // "SOURCE": riskStandard, "STATE": state, "DEPARTMENT_ID": departmentId, "RECTIFICATIONDEPT": correctiveDepartment, @@ -3005,7 +3007,7 @@ U6Hzm1ninpWeE+awIDAQAB "HIDDENFINDDEPT": buMenPDId.isNotEmpty ? buMenPDId : buMenId, "CREATOR": SessionService.instance.loginUserId, - "LISTMANAGER_ID": id, + "CUSTOM_ID": id, "HIDDENTYPE_NAME": yinHuanTypeNames, "HIDDENTYPE1": hiddenType1, "HIDDENTYPE2": hiddenType2, @@ -3905,4 +3907,24 @@ U6Hzm1ninpWeE+awIDAQAB ); } + + + /// 获取个人签字 + static Future> getMySignature() { + return HttpManager().request( + basePath, + '/app/user/geUserInfoSign', + method: Method.post, + data: { + "CORPINFO_ID": SessionService.instance.corpinfoId, + "USER_ID": SessionService.instance.loginUserId, + }, + ); + } + + + + + + } diff --git a/lib/pages/KeyProjects/KeyProject/keyProject_list_page.dart b/lib/pages/KeyProjects/KeyProject/keyProject_list_page.dart index 4878efd..e32dd00 100644 --- a/lib/pages/KeyProjects/KeyProject/keyProject_list_page.dart +++ b/lib/pages/KeyProjects/KeyProject/keyProject_list_page.dart @@ -90,7 +90,8 @@ class _KeyprojectListPageState extends State { } void _goToDetail(Map item) async { - pushPage(KeyprojectDetail(OUTSOURCED_ID: item['OUTSOURCED_ID']), context); + await pushPage(KeyprojectDetail(OUTSOURCED_ID: item['OUTSOURCED_ID']), context); + _search(); } Widget _buildListItem(Map item) { diff --git a/lib/pages/app/Danger_paicha/check_information_one_item.dart b/lib/pages/app/Danger_paicha/check_information_one_item.dart index e20d991..ae7ac66 100644 --- a/lib/pages/app/Danger_paicha/check_information_one_item.dart +++ b/lib/pages/app/Danger_paicha/check_information_one_item.dart @@ -14,6 +14,7 @@ import 'package:qhd_prevention/customWidget/department_picker.dart'; import 'package:qhd_prevention/customWidget/department_picker_hidden_type.dart'; import 'package:qhd_prevention/customWidget/department_picker_two.dart'; import 'package:qhd_prevention/customWidget/full_screen_video_page.dart'; +import 'package:qhd_prevention/customWidget/picker/CupertinoDatePicker.dart'; import 'package:qhd_prevention/customWidget/toast_util.dart'; import 'package:qhd_prevention/pages/home/tap/item_list_widget.dart'; import 'package:qhd_prevention/pages/my_appbar.dart'; @@ -245,6 +246,7 @@ class _CheckInformationOneItemState extends State { _buildSectionContainer( child: RepairedPhotoSection( + isRequired:true, title: "隐患照片", maxCount: 4, mediaType: MediaType.image, @@ -321,6 +323,7 @@ class _CheckInformationOneItemState extends State { ), _buildSectionContainer( child: ListItemFactory.createBuildMultilineInput( + isRequired:true, "隐患描述", "请对隐患进行详细描述(必填项)", _standardController, @@ -328,6 +331,7 @@ class _CheckInformationOneItemState extends State { ), _buildSectionContainer( child: ListItemFactory.createBuildMultilineInput( + isRequired:true, "隐患部位", "请对隐患部位进行详细描述(必填项)", _partController, @@ -363,6 +367,7 @@ class _CheckInformationOneItemState extends State { }, child: _buildSectionContainer( child: ListItemFactory.createRowSpaceBetweenItem( + isRequired:true, leftText: "隐患级别", rightText: _repairLevelName.isNotEmpty?_repairLevelName:"请选择", isRight: true, @@ -396,6 +401,7 @@ class _CheckInformationOneItemState extends State { }, child: _buildSectionContainer( child: ListItemFactory.createRowSpaceBetweenItem( + isRequired:true, leftText: "隐患类型", rightText: yinHuanName.isNotEmpty?truncateText(yinHuanName):"请选择", isRight: true, @@ -424,6 +430,7 @@ class _CheckInformationOneItemState extends State { children: [ _buildSectionContainer( child: ListItemFactory.createBuildMultilineInput( + isRequired:true, "整改描述", "请对隐患进行整改描述(必填项)", _dangerDetailController, @@ -432,6 +439,7 @@ class _CheckInformationOneItemState extends State { SizedBox(height: 10), _buildSectionContainer( child: RepairedPhotoSection( + isRequired:true, title: "整改后图片", maxCount: 4, horizontalPadding: 0, @@ -499,6 +507,7 @@ class _CheckInformationOneItemState extends State { }, child: _buildSectionContainer( child: ListItemFactory.createRowSpaceBetweenItem( + isRequired:true, leftText: "整改责任部门", rightText: buMenName.isNotEmpty ? buMenName : "请选择", isRight: true, @@ -538,6 +547,7 @@ class _CheckInformationOneItemState extends State { borderRadius: BorderRadius.circular(5), ), child: ListItemFactory.createRowSpaceBetweenItem( + isRequired:true, leftText: "整改负责人", rightText: responsibleName.isNotEmpty?responsibleName:"请选择", isRight: true, @@ -546,28 +556,43 @@ class _CheckInformationOneItemState extends State { ), GestureDetector( - onTap: () { - showDialog( - context: context, - builder: - (_) => HDatePickerDialog( - initialDate: DateTime.now(), - onCancel: () => Navigator.of(context).pop(), - onConfirm: (selected) async { - Navigator.of(context).pop(); - setState(() { - dataTime = DateFormat( - 'yyyy-MM-dd', - ).format(selected); - }); - - - }, - ), + onTap: () async { + DateTime? picked = await BottomDateTimePicker.showDate( + mode: BottomPickerMode.date, + context, + allowPast:false, ); + if (picked != null) { + setState(() { + dataTime = DateFormat( + 'yyyy-MM-dd', + ).format(picked); + }); + //FocusHelper.clearFocus(context); + } + + // showDialog( + // context: context, + // builder: + // (_) => HDatePickerDialog( + // initialDate: DateTime.now(), + // onCancel: () => Navigator.of(context).pop(), + // onConfirm: (selected) async { + // Navigator.of(context).pop(); + // setState(() { + // dataTime = DateFormat( + // 'yyyy-MM-dd', + // ).format(selected); + // }); + // + // + // }, + // ), + // ); }, child: _buildSectionContainer( child: ListItemFactory.createRowSpaceBetweenItem( + isRequired:true, leftText: "整改期限", rightText: dataTime.isNotEmpty ? dataTime : "请选择", isRight: true, @@ -734,26 +759,27 @@ class _CheckInformationOneItemState extends State { // SessionService.instance.setUnqualifiedInspectionItemIDJson(hiddenId); bool success = true; for (int i=0;i<_yinHuanImages.length;i++){ - success = await _addImgFiles(_yinHuanImages[i],"3",hiddenId); + _addImgFiles(_yinHuanImages[i],"3",hiddenId); } if(_yinHuanVido.isNotEmpty) { - success = await _addImgFiles(_yinHuanVido[0],"3",hiddenId); + _addImgFiles(_yinHuanVido[0],"3",hiddenId); } if(_isDanger){ for (int i=0;i<_zhengGaiImages.length;i++){ - success = await _addImgFiles(_zhengGaiImages[i],"4",hiddenId); + _addImgFiles(_zhengGaiImages[i],"4",hiddenId); + // success = await _addImgFiles(_zhengGaiImages[i],"4",hiddenId); } } - if (success) { + // if (success) { setState(() { ToastUtil.showNormal(context, "提交成功"); Navigator.pop(context); widget.onClose(hiddenId,_standardController.text.trim()); }); - } + // } } } catch (e) { diff --git a/lib/pages/app/Danger_paicha/check_record_detail_page.dart b/lib/pages/app/Danger_paicha/check_record_detail_page.dart index b362007..1ba784f 100644 --- a/lib/pages/app/Danger_paicha/check_record_detail_page.dart +++ b/lib/pages/app/Danger_paicha/check_record_detail_page.dart @@ -71,11 +71,13 @@ class _CheckRecordDetailPageState extends State { } Future _fetchAll() async { // 并行发请求,界面加载更快 + await Future.wait([ _getInspectRecordsDetail(), _getInspectRecordsDetailTwo(), _getMapData(), ]); + } Future _getMapData() async { diff --git a/lib/pages/app/Danger_paicha/check_record_list_page.dart b/lib/pages/app/Danger_paicha/check_record_list_page.dart index 41888d3..e03c9ef 100644 --- a/lib/pages/app/Danger_paicha/check_record_list_page.dart +++ b/lib/pages/app/Danger_paicha/check_record_list_page.dart @@ -82,8 +82,9 @@ class _CheckRecordListPageState extends State Future _getCheckRecordListOne() async { try { - + LoadingDialogHelper.show(); final result = await ApiService.getCheckRecordListOne(widget.id,keyWord); + LoadingDialogHelper.hide(); if (result['result'] == 'success') { final List newList = result['varList'] ?? []; setState(() { @@ -103,6 +104,7 @@ class _CheckRecordListPageState extends State // _showMessage('加载数据失败'); } } catch (e) { + LoadingDialogHelper.hide(); // 出错时可以 Toast 或者在页面上显示错误状态 print('加载数据失败:$e'); } @@ -110,8 +112,9 @@ class _CheckRecordListPageState extends State Future _getCheckRecordList() async { try { - + LoadingDialogHelper.show(); final result = await ApiService.getCheckRecordList(widget.id,keyWord); + LoadingDialogHelper.hide(); if (result['result'] == 'success') { final List newList = result['varList'] ?? []; setState(() { @@ -131,6 +134,7 @@ class _CheckRecordListPageState extends State // _showMessage('加载数据失败'); } } catch (e) { + LoadingDialogHelper.hide(); // 出错时可以 Toast 或者在页面上显示错误状态 print('加载数据失败:$e'); } diff --git a/lib/pages/app/Danger_paicha/check_record_page.dart b/lib/pages/app/Danger_paicha/check_record_page.dart index 2a9ec5b..77fafeb 100644 --- a/lib/pages/app/Danger_paicha/check_record_page.dart +++ b/lib/pages/app/Danger_paicha/check_record_page.dart @@ -192,7 +192,8 @@ class _CheckRecordPageState extends State { } , // => _handleItemTap(item), child: DannerRepainItem( - showTitleIcon: true, + showTitleIcon: (SessionService.instance.username==item['USER_NAME']), + // showTitleIcon: true, title: '清单名称:${item['NAME']}', details: [ '清单类型:${item['TYPENAME']}', @@ -318,8 +319,9 @@ class _CheckRecordPageState extends State { Future _getListType() async { try { - + LoadingDialogHelper.show(); final result = await ApiService.getListType(); + LoadingDialogHelper.hide(); if (result['result'] == 'success') { setState(() { listType= result['list']; @@ -330,6 +332,7 @@ class _CheckRecordPageState extends State { // _showMessage('加载数据失败'); } } catch (e) { + LoadingDialogHelper.hide(); // 出错时可以 Toast 或者在页面上显示错误状态 print('加载数据失败:$e'); } diff --git a/lib/pages/app/Danger_paicha/hazard_registration_page.dart b/lib/pages/app/Danger_paicha/hazard_registration_page.dart index deb2fd9..5b54cf0 100644 --- a/lib/pages/app/Danger_paicha/hazard_registration_page.dart +++ b/lib/pages/app/Danger_paicha/hazard_registration_page.dart @@ -14,6 +14,7 @@ import 'package:qhd_prevention/customWidget/department_picker.dart'; import 'package:qhd_prevention/customWidget/department_picker_hidden_type.dart'; import 'package:qhd_prevention/customWidget/department_picker_two.dart'; import 'package:qhd_prevention/customWidget/full_screen_video_page.dart'; +import 'package:qhd_prevention/customWidget/picker/CupertinoDatePicker.dart'; import 'package:qhd_prevention/customWidget/single_image_viewer.dart'; import 'package:qhd_prevention/customWidget/toast_util.dart'; import 'package:qhd_prevention/pages/home/tap/item_list_widget.dart'; @@ -235,6 +236,7 @@ class _HazardRegistrationPageState extends State { _buildSectionContainer( child: RepairedPhotoSection( + isRequired:true, title: "隐患照片", maxCount: 4, mediaType: MediaType.image, @@ -291,6 +293,7 @@ class _HazardRegistrationPageState extends State { ), _buildSectionContainer( child: ListItemFactory.createBuildMultilineInput( + isRequired:true, "隐患描述", "请对隐患进行详细描述(必填项)", _standardController, @@ -298,6 +301,7 @@ class _HazardRegistrationPageState extends State { ), _buildSectionContainer( child: ListItemFactory.createBuildMultilineInput( + isRequired:true, "隐患部位", "请对隐患部位进行详细描述(必填项)", _partController, @@ -333,6 +337,7 @@ class _HazardRegistrationPageState extends State { }, child: _buildSectionContainer( child: ListItemFactory.createRowSpaceBetweenItem( + isRequired:true, leftText: "隐患级别", rightText: _repairLevelName.isNotEmpty?_repairLevelName:"请选择", isRight: true, @@ -366,6 +371,7 @@ class _HazardRegistrationPageState extends State { }, child: _buildSectionContainer( child: ListItemFactory.createRowSpaceBetweenItem( + isRequired:true, leftText: "隐患类型", rightText: yinHuanName.isNotEmpty?truncateText(yinHuanName):"请选择", isRight: true, @@ -394,6 +400,7 @@ class _HazardRegistrationPageState extends State { children: [ _buildSectionContainer( child: ListItemFactory.createBuildMultilineInput( + isRequired:true, "整改描述", "请对隐患进行整改描述(必填项)", _dangerDetailController, @@ -402,6 +409,7 @@ class _HazardRegistrationPageState extends State { SizedBox(height: 10), _buildSectionContainer( child: RepairedPhotoSection( + isRequired:true, title: "整改后图片", maxCount: 4, horizontalPadding: 0, @@ -467,6 +475,7 @@ class _HazardRegistrationPageState extends State { }, child: _buildSectionContainer( child: ListItemFactory.createRowSpaceBetweenItem( + isRequired:true, leftText: "整改责任部门", rightText: buMenName.isNotEmpty ? buMenName : "请选择", isRight: true, @@ -506,6 +515,7 @@ class _HazardRegistrationPageState extends State { borderRadius: BorderRadius.circular(5), ), child: ListItemFactory.createRowSpaceBetweenItem( + isRequired:true, leftText: "整改负责人", rightText: responsibleName.isNotEmpty?responsibleName:"请选择", isRight: true, @@ -514,28 +524,43 @@ class _HazardRegistrationPageState extends State { ), GestureDetector( - onTap: () { - showDialog( - context: context, - builder: - (_) => HDatePickerDialog( - initialDate: DateTime.now(), - onCancel: () => Navigator.of(context).pop(), - onConfirm: (selected) async { - Navigator.of(context).pop(); - setState(() { - dataTime = DateFormat( - 'yyyy-MM-dd', - ).format(selected); - }); - - - }, - ), + onTap: () async { + DateTime? picked = await BottomDateTimePicker.showDate( + mode: BottomPickerMode.date, + context, + allowPast:false, ); + if (picked != null) { + setState(() { + dataTime = DateFormat( + 'yyyy-MM-dd', + ).format(picked); + }); + //FocusHelper.clearFocus(context); + } + + // showDialog( + // context: context, + // builder: + // (_) => HDatePickerDialog( + // initialDate: DateTime.now(), + // onCancel: () => Navigator.of(context).pop(), + // onConfirm: (selected) async { + // Navigator.of(context).pop(); + // setState(() { + // dataTime = DateFormat( + // 'yyyy-MM-dd', + // ).format(selected); + // }); + // + // + // }, + // ), + // ); }, child: _buildSectionContainer( child: ListItemFactory.createRowSpaceBetweenItem( + isRequired:true, leftText: "整改期限", rightText: dataTime.isNotEmpty ? dataTime : "请选择", isRight: true, @@ -684,7 +709,7 @@ class _HazardRegistrationPageState extends State { - LoadingDialogHelper.hide(); + if (result['result'] == 'success') { String hiddenId = result['pd']['HIDDEN_ID'] ; @@ -692,27 +717,32 @@ class _HazardRegistrationPageState extends State { bool success = true; for (int i=0;i<_yinHuanImages.length;i++){ - success = await _addImgFiles(_yinHuanImages[i],"3",hiddenId); + _addImgFiles(_yinHuanImages[i],"3",hiddenId); } if(_yinHuanVido.isNotEmpty) { - success = await _addImgFiles(_yinHuanVido[0],"3",hiddenId); + _addImgFiles(_yinHuanVido[0],"3",hiddenId); } if(_isDanger){ for (int i=0;i<_zhengGaiImages.length;i++){ - success = await _addImgFiles(_zhengGaiImages[i],"4",hiddenId); + _addImgFiles(_zhengGaiImages[i],"4",hiddenId); + // success = await _addImgFiles(_zhengGaiImages[i],"4",hiddenId); } } - if (success) { + + LoadingDialogHelper.hide(); + + // if (success) { setState(() { ToastUtil.showNormal(context, "提交成功"); Navigator.pop(context); widget.onClose(hiddenId, _standardController.text.trim()); }); - } - }else{ + // } + }else{ + LoadingDialogHelper.hide(); ToastUtil.showNormal(context, "提交失败"); } } catch (e) { diff --git a/lib/pages/app/Danger_paicha/quick_report_page.dart b/lib/pages/app/Danger_paicha/quick_report_page.dart index dff767c..e17ba89 100644 --- a/lib/pages/app/Danger_paicha/quick_report_page.dart +++ b/lib/pages/app/Danger_paicha/quick_report_page.dart @@ -13,6 +13,7 @@ import 'package:qhd_prevention/customWidget/department_picker.dart'; import 'package:qhd_prevention/customWidget/department_picker_hidden_type.dart'; import 'package:qhd_prevention/customWidget/department_picker_two.dart'; import 'package:qhd_prevention/customWidget/full_screen_video_page.dart'; +import 'package:qhd_prevention/customWidget/picker/CupertinoDatePicker.dart'; import 'package:qhd_prevention/customWidget/single_image_viewer.dart'; import 'package:qhd_prevention/customWidget/toast_util.dart'; import 'package:qhd_prevention/pages/my_appbar.dart'; @@ -129,6 +130,7 @@ class _QuickReportPageState extends State { children: [ _buildSectionContainer( child: RepairedPhotoSection( + isRequired:true, title: "隐患照片", maxCount: 4, mediaType: MediaType.image, @@ -170,6 +172,7 @@ class _QuickReportPageState extends State { ), _buildSectionContainer( child: ListItemFactory.createBuildMultilineInput( + isRequired:true, "隐患描述", "请对隐患进行详细描述(必填项)", _standardController, @@ -177,6 +180,7 @@ class _QuickReportPageState extends State { ), _buildSectionContainer( child: ListItemFactory.createBuildMultilineInput( + isRequired:true, "隐患部位", "请对隐患部位进行详细描述(必填项)", _partController, @@ -211,6 +215,7 @@ class _QuickReportPageState extends State { }, child: _buildSectionContainer( child: ListItemFactory.createRowSpaceBetweenItem( + isRequired:true, leftText: "隐患级别", rightText: _repairLevelName.isNotEmpty?_repairLevelName:"请选择", isRight: true, @@ -244,6 +249,7 @@ class _QuickReportPageState extends State { }, child: _buildSectionContainer( child: ListItemFactory.createRowSpaceBetweenItem( + isRequired:true, leftText: "隐患类型", rightText: yinHuanName.isNotEmpty?yinHuanName:"请选择", isRight: true, @@ -272,6 +278,7 @@ class _QuickReportPageState extends State { children: [ _buildSectionContainer( child: ListItemFactory.createBuildMultilineInput( + isRequired:true, "整改描述", "请对隐患进行整改描述(必填项)", _dangerDetailController, @@ -280,6 +287,7 @@ class _QuickReportPageState extends State { SizedBox(height: 10), _buildSectionContainer( child: RepairedPhotoSection( + isRequired:true, title: "整改后图片", maxCount: 4, horizontalPadding: 0, @@ -332,6 +340,7 @@ class _QuickReportPageState extends State { }, child: _buildSectionContainer( child: ListItemFactory.createRowSpaceBetweenItem( + isRequired:true, leftText: "整改责任部门", rightText: buMenName.isNotEmpty ? buMenName : "请选择", isRight: true, @@ -371,6 +380,7 @@ class _QuickReportPageState extends State { borderRadius: BorderRadius.circular(5), ), child: ListItemFactory.createRowSpaceBetweenItem( + isRequired:true, leftText: "整改负责人", rightText: responsibleName.isNotEmpty?responsibleName:"请选择", isRight: true, @@ -379,28 +389,24 @@ class _QuickReportPageState extends State { ), GestureDetector( - onTap: () { - showDialog( - context: context, - builder: - (_) => HDatePickerDialog( - initialDate: DateTime.now(), - onCancel: () => Navigator.of(context).pop(), - onConfirm: (selected) async { - Navigator.of(context).pop(); - setState(() { - dataTime = DateFormat( - 'yyyy-MM-dd', - ).format(selected); - }); - - - }, - ), + onTap: () async { + DateTime? picked = await BottomDateTimePicker.showDate( + mode: BottomPickerMode.date, + context, + allowPast:false, ); + if (picked != null) { + setState(() { + dataTime = DateFormat( + 'yyyy-MM-dd', + ).format(picked); + }); + //FocusHelper.clearFocus(context); + } }, child: _buildSectionContainer( child: ListItemFactory.createRowSpaceBetweenItem( + isRequired:true, leftText: "整改期限", rightText: dataTime.isNotEmpty ? dataTime : "请选择", isRight: true, diff --git a/lib/pages/app/danger_wait_list_page.dart b/lib/pages/app/danger_wait_list_page.dart index 0905654..fd06dea 100644 --- a/lib/pages/app/danger_wait_list_page.dart +++ b/lib/pages/app/danger_wait_list_page.dart @@ -370,11 +370,11 @@ class _DangerWaitListPageState extends State { if (_isLoading) return; _isLoading = true; - + LoadingDialogHelper.show(); final result = await ApiService.getHiddenTreatmentList( type, currentPage, startDate, endDate, level, riskStandard, state, departmentId, correctiveDepartment, isIndex, keyWord); - + LoadingDialogHelper.hide(); if (result['result'] == 'success') { _totalPage =result["page"]['totalPage'] ?? 1; @@ -398,6 +398,7 @@ class _DangerWaitListPageState extends State { } } catch (e) { + LoadingDialogHelper.hide(); // 出错时可以 Toast 或者在页面上显示错误状态 print('加载数据失败:$e'); } finally { diff --git a/lib/pages/app/danner_repair.dart b/lib/pages/app/danner_repair.dart index 62dbdc7..8244809 100644 --- a/lib/pages/app/danner_repair.dart +++ b/lib/pages/app/danner_repair.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; import 'package:qhd_prevention/customWidget/department_person_picker.dart'; import 'package:qhd_prevention/customWidget/department_picker.dart'; +import 'package:qhd_prevention/customWidget/picker/CupertinoDatePicker.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'; @@ -145,7 +146,9 @@ class DannerRepairState extends State { child: Column( children: [ Row( - children: [HhTextStyleUtils.mainTitle("隐患描述", fontSize: 15)], + children: [ + Text('* ', style: TextStyle(color: Colors.red)), + HhTextStyleUtils.mainTitle("隐患描述", fontSize: 15)], ), TextField( controller: miaoShuController, @@ -162,27 +165,40 @@ class DannerRepairState extends State { ), Divider(height: 1), GestureDetector( - onTap: () { - showDialog( - context: context, - builder: - (_) => HDatePickerDialog( - initialDate: DateTime.now(), - onCancel: () => Navigator.of(context).pop(), - onConfirm: (selected) { - Navigator.of(context).pop(); - setState(() { - _selectData = selected; - dataTime= DateFormat('yyyy-MM-dd').format(selected); - - }); - }, - ), + onTap: () async { + DateTime? picked = await BottomDateTimePicker.showDate( + mode: BottomPickerMode.date, + context, + allowPast:false, ); + if (picked != null) { + setState(() { + _selectData = picked; + dataTime= DateFormat('yyyy-MM-dd').format(picked); + }); + //FocusHelper.clearFocus(context); + } + // showDialog( + // context: context, + // builder: + // (_) => HDatePickerDialog( + // initialDate: DateTime.now(), + // onCancel: () => Navigator.of(context).pop(), + // onConfirm: (selected) { + // Navigator.of(context).pop(); + // setState(() { + // _selectData = selected; + // dataTime= DateFormat('yyyy-MM-dd').format(selected); + // + // }); + // }, + // ), + // ); }, child: Padding( padding: EdgeInsets.symmetric(horizontal: 15), child: ListItemFactory.createRowSpaceBetweenItem( + isRequired:true, leftText: "整改日期", rightText: dataTime.isEmpty?"请选择":dataTime, isRight: true, @@ -192,6 +208,7 @@ class DannerRepairState extends State { Divider(), ItemListWidget.itemContainer( RepairedPhotoSection( + isRequired:true, title: "整改后照片", maxCount: 4, mediaType: MediaType.image, diff --git a/lib/pages/app/hidden_danger_acceptance_page.dart b/lib/pages/app/hidden_danger_acceptance_page.dart index 9d828fe..75fa9a8 100644 --- a/lib/pages/app/hidden_danger_acceptance_page.dart +++ b/lib/pages/app/hidden_danger_acceptance_page.dart @@ -487,7 +487,9 @@ class _HiddenDangerAcceptancePageState extends State child: Column( children: [ Row( - children: [HhTextStyleUtils.mainTitle("验收描述", fontSize: 15)], + children: [ + Text('* ', style: TextStyle(color: Colors.red)), + HhTextStyleUtils.mainTitle("验收描述", fontSize: 15)], ), TextField( controller: miaoShuController, @@ -518,6 +520,7 @@ class _HiddenDangerAcceptancePageState extends State child: Padding( padding: EdgeInsets.symmetric(horizontal: 10), child: ListItemFactory.createRowSpaceBetweenItem( + isRequired:true, leftText: "验收日期", rightText: dataTime.isEmpty?"请选择":dataTime, isRight: true, @@ -526,6 +529,7 @@ class _HiddenDangerAcceptancePageState extends State ), Divider(), RepairedPhotoSection( + isRequired:true, title: "验收照片", maxCount: 4, mediaType: MediaType.image, diff --git a/lib/pages/home/home_danger_page.dart b/lib/pages/home/home_danger_page.dart index b4fee5e..f987a30 100644 --- a/lib/pages/home/home_danger_page.dart +++ b/lib/pages/home/home_danger_page.dart @@ -91,8 +91,9 @@ class _HomeDangerPageState extends State Future _getHazardInvestigationList() async { try { - + LoadingDialogHelper.show(); final result = await ApiService.getHazardInvestigationList(id,searchKey); + LoadingDialogHelper.hide(); if (result['result'] == 'success') { final List newList = result['varList'] ?? []; setState(() { @@ -112,6 +113,7 @@ class _HomeDangerPageState extends State // _showMessage('加载数据失败'); } } catch (e) { + LoadingDialogHelper.hide(); // 出错时可以 Toast 或者在页面上显示错误状态 print('加载数据失败:$e'); } @@ -119,8 +121,9 @@ class _HomeDangerPageState extends State Future _getStandardInvestigationList() async { try { - + LoadingDialogHelper.show(); final result = await ApiService.getStandardInvestigationList(id,searchKey); + LoadingDialogHelper.hide(); if (result['result'] == 'success') { final List newList = result['varList'] ?? []; setState(() { @@ -140,6 +143,7 @@ class _HomeDangerPageState extends State // _showMessage('加载数据失败'); } } catch (e) { + LoadingDialogHelper.hide(); // 出错时可以 Toast 或者在页面上显示错误状态 print('加载数据失败:$e'); } @@ -273,6 +277,7 @@ class _HomeDangerPageState extends State return GestureDetector( onTap: () => _handleItemTap(item, index), child: DannerRepainItem( + showTitleIcon: (SessionService.instance.username==item['USER_NAME']), title: item['NAME'], details: [ '清单类型:${item['TYPENAME']}', diff --git a/lib/pages/home/work/danger_page.dart b/lib/pages/home/work/danger_page.dart index 9dec74b..42ef9b6 100644 --- a/lib/pages/home/work/danger_page.dart +++ b/lib/pages/home/work/danger_page.dart @@ -113,8 +113,9 @@ class _DangerPageState extends State Future _getHazardInvestigationList() async { try { - + LoadingDialogHelper.show(); final result = await ApiService.getHazardInvestigationList(id,searchKey); + LoadingDialogHelper.hide(); if (result['result'] == 'success') { final List newList = result['varList'] ?? []; allList.addAll(newList); @@ -135,10 +136,11 @@ class _DangerPageState extends State }); }else{ - ToastUtil.showNormal(context, "加载数据失败"); + ToastUtil.showNormal(context, result['msg']??"加载数据失败"); // _showMessage('加载数据失败'); } } catch (e) { + LoadingDialogHelper.hide(); // 出错时可以 Toast 或者在页面上显示错误状态 print('加载数据失败:$e'); } @@ -146,8 +148,9 @@ class _DangerPageState extends State Future _getStandardInvestigationList() async { try { - + LoadingDialogHelper.show(); final result = await ApiService.getStandardInvestigationList(id,searchKey); + LoadingDialogHelper.hide(); if (result['result'] == 'success') { final List newList = result['varList'] ?? []; allList.addAll(newList); @@ -172,6 +175,7 @@ class _DangerPageState extends State // _showMessage('加载数据失败'); } } catch (e) { + LoadingDialogHelper.hide(); // 出错时可以 Toast 或者在页面上显示错误状态 print('加载数据失败:$e'); } @@ -305,6 +309,7 @@ class _DangerPageState extends State return GestureDetector( onTap: () => _handleItemTap(item, index), child: DannerRepainItem( + showTitleIcon: (SessionService.instance.username==item['USER_NAME']), title: item['NAME'], details: [ '清单类型:${item['TYPENAME']}', diff --git a/lib/pages/home/work/danger_project_page.dart b/lib/pages/home/work/danger_project_page.dart index 3bfea6b..14aaf03 100644 --- a/lib/pages/home/work/danger_project_page.dart +++ b/lib/pages/home/work/danger_project_page.dart @@ -77,7 +77,9 @@ class _DangerProjectPageState extends State { Future _getInvestigationItemsYinHuan() async { try { + LoadingDialogHelper.show(); final result = await ApiService.getInvestigationItemsYinHuan(widget.item); + LoadingDialogHelper.hide(); if (result['result'] == 'success') { final List newList = result['varList'] ?? []; final List newListTwo = result['records'] ?? []; @@ -132,13 +134,16 @@ class _DangerProjectPageState extends State { ToastUtil.showNormal(context, result['msg']); } } catch (e) { + LoadingDialogHelper.hide(); print('加载数据失败:$e'); } } Future _getInvestigationItems() async { try { + LoadingDialogHelper.show(); final result = await ApiService.getInvestigationItems(widget.item); + LoadingDialogHelper.hide(); if (result['result'] == 'success') { final List newList = result['varList'] ?? []; final List newListTwo = result['records'] ?? []; @@ -193,6 +198,7 @@ class _DangerProjectPageState extends State { ToastUtil.showNormal(context, result['msg']); } } catch (e) { + LoadingDialogHelper.hide(); print('加载数据失败:$e'); } } diff --git a/lib/pages/home/work/danger_wait_deawer.dart b/lib/pages/home/work/danger_wait_deawer.dart index 19ff7ed..f6838b8 100644 --- a/lib/pages/home/work/danger_wait_deawer.dart +++ b/lib/pages/home/work/danger_wait_deawer.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; import 'package:qhd_prevention/customWidget/department_picker.dart'; import 'package:qhd_prevention/pages/home/work/wait_list_picker.dart'; +import 'package:webview_flutter/webview_flutter.dart'; import '../../../customWidget/bottom_picker.dart'; import '../../../tools/h_colors.dart'; import '/customWidget/custom_button.dart'; @@ -125,7 +126,10 @@ class DangerWaitDrawerState extends State { late List> departmentList ; - + // final List investigationMethod = ["隐患快报", "隐患排查", "标准排查", "专项检查", "安全检查"]; + final List investigationMethod = ["风险排查隐患", "隐患排查隐患"]; + final List hazardLevel = [" 一般风险 ", " 重大风险 "]; + final List dangerStatus = ["未整改", "已整改", "已验收", "已过期"]; @override void initState() { @@ -181,12 +185,6 @@ class DangerWaitDrawerState extends State { @override Widget build(BuildContext context) { - final List investigationMethod = ["风险排查隐患", "隐患排查隐患"]; - final List hazardLevel = [" 一般风险 ", " 重大风险 "]; - final List dangerStatus = ["未整改", "已整改", "已验收", "已过期"]; - - - // final List data = [ // Category( // id: '1', @@ -238,7 +236,10 @@ class DangerWaitDrawerState extends State { } return SafeArea( - child: Padding( + child: + SingleChildScrollView( // 添加这一行 + child: + Padding( padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 15), child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -295,39 +296,52 @@ class DangerWaitDrawerState extends State { const SizedBox(height: 6), // 风险等级:一行两个 - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: List.generate(investigationMethod.length, (idx) { - final bool selected = _investigationMethodOption == idx; - return GestureDetector( - onTap: (){ - setState(() { - _investigationMethodOption = idx; + GridView.builder( + shrinkWrap: true, // 添加这一行 + physics: const NeverScrollableScrollPhysics(), + gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( + crossAxisSpacing: 10, + mainAxisSpacing: 10, + crossAxisCount: 2, + childAspectRatio: 3.0, - investigationMethodId=idx+1; - setResult(); - }); - } , - // => setState(() => _investigationMethodOption = idx), - child: Container( - margin: const EdgeInsets.only(bottom: 8), - padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 6), - decoration: BoxDecoration( - color: selected ? Colors.blue : Colors.transparent, - borderRadius: BorderRadius.circular(4), - border: Border.all(color: Colors.blue, width: 1), - ), - child: Text( - investigationMethod[idx], - style: TextStyle( - fontSize: 14, - color: selected ? Colors.white : Colors.blue, - ), - ), - ), - ); - }), + ), + itemCount: investigationMethod.length, + itemBuilder: _itemGridviewItem ), + // Row( + // mainAxisAlignment: MainAxisAlignment.spaceBetween, + // children: List.generate(investigationMethod.length, (idx) { + // final bool selected = _investigationMethodOption == idx; + // return GestureDetector( + // onTap: (){ + // setState(() { + // _investigationMethodOption = idx; + // + // investigationMethodId=idx+1; + // setResult(); + // }); + // } , + // // => setState(() => _investigationMethodOption = idx), + // child: Container( + // margin: const EdgeInsets.only(bottom: 8), + // padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 6), + // decoration: BoxDecoration( + // color: selected ? Colors.blue : Colors.transparent, + // borderRadius: BorderRadius.circular(4), + // border: Border.all(color: Colors.blue, width: 1), + // ), + // child: Text( + // investigationMethod[idx], + // style: TextStyle( + // fontSize: 14, + // color: selected ? Colors.white : Colors.blue, + // ), + // ), + // ), + // ); + // }), + // ), const SizedBox(height: 12), const Text( @@ -441,10 +455,10 @@ class DangerWaitDrawerState extends State { }), ), - const Spacer(), + const SizedBox(height: 20), Row( children: [ - Expanded( + Flexible( flex: 1, child: CustomButton( text: "重置", @@ -474,7 +488,7 @@ class DangerWaitDrawerState extends State { ), ), const SizedBox(width: 12), - Expanded( + Flexible( flex: 2, child: CustomButton( text: "完成", @@ -490,6 +504,7 @@ class DangerWaitDrawerState extends State { ], ), ), + ), ); } @@ -508,7 +523,7 @@ class DangerWaitDrawerState extends State { child: Row( children: [ Text(title, style: const TextStyle(fontSize: 14)), - const Spacer(), + const SizedBox(height: 20), Row( children: [ Text(_truncateText(display,9)), @@ -522,6 +537,39 @@ class DangerWaitDrawerState extends State { } + Widget _itemGridviewItem(BuildContext context, int idx) { + final bool selected = _investigationMethodOption == idx; + return GestureDetector( + onTap: (){ + setState(() { + _investigationMethodOption = idx; + + investigationMethodId=idx+1; + setResult(); + }); + } , + // => setState(() => _investigationMethodOption = idx), + child: Container( + margin: const EdgeInsets.only(bottom: 8), + padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 6), + decoration: BoxDecoration( + color: selected ? Colors.blue : Colors.transparent, + borderRadius: BorderRadius.circular(4), + border: Border.all(color: Colors.blue, width: 1), + ), + child: Text( + investigationMethod[idx], + style: TextStyle( + fontSize: 14, + color: selected ? Colors.white : Colors.blue, + ), + ), + ), + ); + + + } + // 文本截取函数 String _truncateText(String text, int maxLength) { @@ -637,6 +685,8 @@ class DangerWaitDrawerState extends State { ); // 触发回调 } + + } diff --git a/lib/pages/home/work/laws_list_picker.dart b/lib/pages/home/work/laws_list_picker.dart index d991ff5..a3f4f1c 100644 --- a/lib/pages/home/work/laws_list_picker.dart +++ b/lib/pages/home/work/laws_list_picker.dart @@ -86,7 +86,27 @@ class _LawsListPickerState extends State { children: [ // 左侧缩进 SizedBox(width: 16.0 * indent), + + if(hasChildren) + Image.asset( + "assets/images/document.png", + width: 20, + height: 20, + ), // 展开/占位图标 + + if(hasChildren) + const SizedBox(width: 8), + // 标题 + Expanded( + child: Padding( + padding: const EdgeInsets.symmetric(vertical: 12), + child: Text(cat.name), + ), + ), + + const SizedBox(width: 8), + SizedBox( width: 24, child: hasChildren @@ -97,14 +117,7 @@ class _LawsListPickerState extends State { ) : const SizedBox.shrink(), ), - const SizedBox(width: 8), - // 标题 - Expanded( - child: Padding( - padding: const EdgeInsets.symmetric(vertical: 12), - child: Text(cat.name), - ), - ), + // 单选圈保持右侧对齐 // Padding( // padding: const EdgeInsets.symmetric(horizontal: 16), @@ -131,7 +144,7 @@ class _LawsListPickerState extends State { return Container( width: MediaQuery.of(context).size.width, height: MediaQuery.of(context).size.height * 0.7, - color: Colors.transparent, + color: Colors.white, child: Column( children: [ // 顶部操作栏 @@ -155,13 +168,17 @@ class _LawsListPickerState extends State { // const Divider(height: 1), // 列表区 Expanded( - child: Container( + child:Padding( + padding: EdgeInsets.only(left: 10,right: 10), + child: + Container( color: Colors.white, child: ListView.builder( itemCount: widget.data.length, itemBuilder: (ctx, idx) => _buildRow(widget.data[idx], 0), ), ), + ), ), ], ), diff --git a/lib/pages/home/work/risk_list_page.dart b/lib/pages/home/work/risk_list_page.dart index fb06c8e..1dfccd8 100644 --- a/lib/pages/home/work/risk_list_page.dart +++ b/lib/pages/home/work/risk_list_page.dart @@ -53,7 +53,9 @@ class _riskListPageState extends State { Future _getRiskPointsList() async { try { + LoadingDialogHelper.show(); final result = await ApiService.getRiskPointsList(widget.id); + LoadingDialogHelper.hide(); if (result['result'] == 'success') { final List newList = result['varList'] ?? []; setState(() { @@ -96,6 +98,7 @@ class _riskListPageState extends State { // _showMessage('加载数据失败'); } } catch (e) { + LoadingDialogHelper.hide(); // 出错时可以 Toast 或者在页面上显示错误状态 print('加载数据失败:$e'); } @@ -103,8 +106,9 @@ class _riskListPageState extends State { Future _getInspectionItemList() async { try { - + LoadingDialogHelper.show(); final result = await ApiService.getInspectionItemList(widget.id); + LoadingDialogHelper.hide(); if (result['result'] == 'success') { final List newList = result['varList'] ?? []; setState(() { @@ -149,6 +153,7 @@ class _riskListPageState extends State { // _showMessage('加载数据失败'); } } catch (e) { + LoadingDialogHelper.hide(); // 出错时可以 Toast 或者在页面上显示错误状态 print('加载数据失败:$e'); } diff --git a/lib/pages/mine/mine_feedback_page.dart b/lib/pages/mine/mine_feedback_page.dart index 236e242..fb73588 100644 --- a/lib/pages/mine/mine_feedback_page.dart +++ b/lib/pages/mine/mine_feedback_page.dart @@ -18,17 +18,6 @@ enum FeedbackType { } ///问题反馈 -class FeedbackApp extends StatelessWidget { - const FeedbackApp({super.key}); - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: MyAppbar(title:'问题反馈' ), - body: const FeedbackPage(), - ); - } -} class FeedbackPage extends StatefulWidget { const FeedbackPage({super.key}); @@ -98,7 +87,14 @@ class _FeedbackPageState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ // 标题输入 - const Text('标题', style: TextStyle(fontWeight: FontWeight.bold)), + Row( + children: [ + Text('* ', style: TextStyle(color: Colors.red)), + // 标题 + Text('标题', style: TextStyle(fontWeight: FontWeight.bold)), + ], + ), + const SizedBox(height: 8), TextFormField( maxLength: 50, @@ -117,10 +113,14 @@ class _FeedbackPageState extends State { const SizedBox(height: 24), // 问题描述 - const Text( - '详细问题和意见', - style: TextStyle(fontWeight: FontWeight.bold), + Row( + children: [ + Text('* ', style: TextStyle(color: Colors.red)), + // 标题 + const Text('详细问题和意见', style: TextStyle(fontWeight: FontWeight.bold),), + ], ), + const SizedBox(height: 8), TextFormField( controller: _descriptionController, @@ -142,10 +142,14 @@ class _FeedbackPageState extends State { const SizedBox(height: 24), // 反馈类型 - const Text( - '反馈类型', - style: TextStyle(fontWeight: FontWeight.bold), + Row( + children: [ + Text('* ', style: TextStyle(color: Colors.red)), + // 标题 + const Text('反馈类型', style: TextStyle(fontWeight: FontWeight.bold),), + ], ), + const SizedBox(height: 8), Wrap( spacing: 16, @@ -183,6 +187,7 @@ class _FeedbackPageState extends State { const SizedBox(height: 16), RepairedPhotoSection( + isRequired:true, horizontalPadding: 0, title: "请提供相关问题的截图或照片", maxCount: 4, diff --git a/lib/pages/mine/mine_first_sign_page.dart b/lib/pages/mine/mine_first_sign_page.dart index 41f5fd7..de4c02c 100644 --- a/lib/pages/mine/mine_first_sign_page.dart +++ b/lib/pages/mine/mine_first_sign_page.dart @@ -18,11 +18,43 @@ class FirstSignPage extends StatefulWidget { class _SignatureUpdatePageState extends State { String imagePath = ""; + + @override + void initState() { + super.initState(); + + _getMySignature(); + } + + + Future _getMySignature() async { + + try { + final response = await ApiService.getMySignature( ); + if (response['result'] == 'success') { + setState(() { + imagePath= ApiService.baseImgPath +response['IMGURL']; + }); + } + + } catch (e) { + print("错误:${e.toString()}"); + } + } + + Future refreshSign() async { if (imagePath.isEmpty) { ToastUtil.showNormal(context, '请签字'); return; } + + if(imagePath.startsWith('http')){ + ToastUtil.showSuccess(context, '保存成功'); + Navigator.pop(context); + return; + } + LoadingDialogHelper.show(); final result = await ApiService.refreshSignInfo(imagePath); LoadingDialogHelper.hide(); @@ -62,13 +94,21 @@ class _SignatureUpdatePageState extends State { ), ), const SizedBox(width: 15), - if (imagePath.isNotEmpty) + if (imagePath.isNotEmpty&&!imagePath.startsWith('http')) Image.file( File(imagePath), - width: 230, - height: 150, + width: 200, + height: 100, fit: BoxFit.fill, ), + if (imagePath.isNotEmpty&&imagePath.startsWith('http')) + Image.network( + imagePath, + width: 200, + height: 100, + fit: BoxFit.fill, + ), + ], ), diff --git a/lib/pages/mine/mine_sign_page.dart b/lib/pages/mine/mine_sign_page.dart index 2250f83..9f14cd5 100644 --- a/lib/pages/mine/mine_sign_page.dart +++ b/lib/pages/mine/mine_sign_page.dart @@ -302,7 +302,7 @@ class _SignatureConfirmPageState extends State { } } -// 签名绘制器 +// 签名绘制器 - 修改后的版本 class SignaturePainter extends CustomPainter { final List points; @@ -310,6 +310,10 @@ class SignaturePainter extends CustomPainter { @override void paint(Canvas canvas, Size size) { + // 创建裁剪区域,确保只在画布范围内绘制 + canvas.save(); + canvas.clipRect(Rect.fromLTWH(0, 0, size.width, size.height)); + Paint paint = Paint() ..color = Colors.black ..strokeCap = StrokeCap.round @@ -317,9 +321,20 @@ class SignaturePainter extends CustomPainter { for (int i = 0; i < points.length - 1; i++) { if (points[i] != null && points[i + 1] != null) { - canvas.drawLine(points[i]!, points[i + 1]!, paint); + // 确保点都在画布范围内 + Offset start = Offset( + points[i]!.dx.clamp(0, size.width), + points[i]!.dy.clamp(0, size.height), + ); + Offset end = Offset( + points[i + 1]!.dx.clamp(0, size.width), + points[i + 1]!.dy.clamp(0, size.height), + ); + canvas.drawLine(start, end, paint); } } + + canvas.restore(); } @override diff --git a/lib/pages/mine/webViewPage.dart b/lib/pages/mine/webViewPage.dart index 1183843..8aa4514 100644 --- a/lib/pages/mine/webViewPage.dart +++ b/lib/pages/mine/webViewPage.dart @@ -44,7 +44,13 @@ class _WebViewPageState extends State { Widget build(BuildContext context) { return Column( children: [ - MyAppbar(title: name), + MyAppbar(title: name,onBackPressed: () async { + if (await _controller.canGoBack()) { + _controller.goBack(); + } else{ + Navigator.of(context).pop(); + } + },), Expanded( child: WebViewWidget(controller: _controller),), // ValueListenableBuilder( // valueListenable: isLoading,