2025.9.5 修改bug
parent
26c64aa5ea
commit
10868ac6cf
|
@ -24,7 +24,7 @@ class ApiService {
|
|||
"http://192.168.20.240:8500/whb_stu_face/";
|
||||
/// 登录及其他管理后台接口
|
||||
// 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.37:8099/api";
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@ import 'package:qhd_prevention/customWidget/toast_util.dart';
|
|||
import 'package:qhd_prevention/http/ApiService.dart';
|
||||
import 'package:qhd_prevention/pages/home/tap/item_list_widget.dart';
|
||||
import 'package:qhd_prevention/pages/my_appbar.dart';
|
||||
import 'package:qhd_prevention/tools/tools.dart';
|
||||
|
||||
class PhotoItem {
|
||||
final String id;
|
||||
|
@ -40,38 +41,38 @@ class _DangerImageUpdataPageState extends State<DangerImageUpdataPage> {
|
|||
// TODO: implement initState
|
||||
super.initState();
|
||||
_imgList = widget.imgList;
|
||||
_getAlreadyUpImages();
|
||||
// _getAlreadyUpImages();
|
||||
}
|
||||
|
||||
Future<void> _getAlreadyUpImages() async {
|
||||
try {
|
||||
final result = await ApiService.getAlreadyUpImages(widget.id);
|
||||
if (result['result'] == 'success') {
|
||||
final List<dynamic> newList = result['imgs'] ?? [];
|
||||
setState(() {
|
||||
for (Map item in newList) {
|
||||
String id = item['IMGFILES_ID'] ?? '';
|
||||
String filePath = item['FILEPATH'] ?? '';
|
||||
_imgList.add(
|
||||
PhotoItem(
|
||||
id: id, // 新图片没有ID
|
||||
filePath: ApiService.baseImgPath+filePath,
|
||||
type: "1",
|
||||
),
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
} else {
|
||||
ToastUtil.showNormal(context, "加载数据失败");
|
||||
// _showMessage('加载数据失败');
|
||||
}
|
||||
} catch (e) {
|
||||
// 出错时可以 Toast 或者在页面上显示错误状态
|
||||
print('加载数据失败:$e');
|
||||
}
|
||||
}
|
||||
// Future<void> _getAlreadyUpImages() async {
|
||||
// try {
|
||||
// final result = await ApiService.getAlreadyUpImages(widget.id);
|
||||
// if (result['result'] == 'success') {
|
||||
// final List<dynamic> newList = result['imgs'] ?? [];
|
||||
// setState(() {
|
||||
// for (Map item in newList) {
|
||||
// String id = item['IMGFILES_ID'] ?? '';
|
||||
// String filePath = item['FILEPATH'] ?? '';
|
||||
// _imgList.add(
|
||||
// PhotoItem(
|
||||
// id: id, // 新图片没有ID
|
||||
// filePath: ApiService.baseImgPath+filePath,
|
||||
// type: "1",
|
||||
// ),
|
||||
// );
|
||||
//
|
||||
// }
|
||||
//
|
||||
// });
|
||||
// } else {
|
||||
// ToastUtil.showNormal(context, "加载数据失败");
|
||||
// // _showMessage('加载数据失败');
|
||||
// }
|
||||
// } catch (e) {
|
||||
// // 出错时可以 Toast 或者在页面上显示错误状态
|
||||
// print('加载数据失败:$e');
|
||||
// }
|
||||
// }
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
|
@ -151,6 +152,7 @@ class _DangerImageUpdataPageState extends State<DangerImageUpdataPage> {
|
|||
);
|
||||
}
|
||||
Future<void> _submitAll() async {
|
||||
LoadingDialogHelper.show(message: "上传中...");
|
||||
int i = 0;
|
||||
for (PhotoItem item in _imgList) {
|
||||
if (item.type == '2') {
|
||||
|
@ -163,7 +165,7 @@ class _DangerImageUpdataPageState extends State<DangerImageUpdataPage> {
|
|||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
LoadingDialogHelper.hide();
|
||||
ToastUtil.showNormal(context, "提交成功");
|
||||
Navigator.of(context).pop();
|
||||
}
|
||||
|
|
|
@ -560,6 +560,8 @@ class _QuickReportPageState extends State<QuickReportPage> {
|
|||
});
|
||||
}else{
|
||||
LoadingDialogHelper.hide();
|
||||
ToastUtil.showNormal(context, "提交失败");
|
||||
|
||||
}
|
||||
} catch (e) {
|
||||
LoadingDialogHelper.hide();
|
||||
|
|
|
@ -99,9 +99,9 @@ class _CheckingInformationOnePageState extends State<CheckingInformationOnePage>
|
|||
listDates.addAll(newList);//"HIDDENDESCR" -> "3111111"
|
||||
for(int i=0;i<listDates.length;i++){
|
||||
try{
|
||||
otherHidden.add(DepartmentEntry(department: listDates[i]["HIDDENDESCR"], responsible: '请选择',index:'',departmentId:listDates[i]['HIDDEN_ID'] ,responsibleId:''));
|
||||
otherHidden.add(DepartmentEntry(department: listDates[i]["HIDDENDESCR"], responsible: '点击填写',index:'',departmentId:listDates[i]['HIDDEN_ID'] ,responsibleId:''));
|
||||
}catch(e){
|
||||
otherHidden.add(DepartmentEntry(department: "", responsible: '请选择',index:'',departmentId:listDates[i]['HIDDEN_ID'],responsibleId:''));
|
||||
otherHidden.add(DepartmentEntry(department: "", responsible: '点击填写',index:'',departmentId:listDates[i]['HIDDEN_ID'],responsibleId:''));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -130,9 +130,9 @@ class _CheckingInformationOnePageState extends State<CheckingInformationOnePage>
|
|||
listDates.addAll(newList);//"HIDDENDESCR" -> "3111111"
|
||||
for(int i=0;i<listDates.length;i++){
|
||||
try{
|
||||
otherHidden.add(DepartmentEntry(department: listDates[i]["HIDDENDESCR"], responsible: '请选择',index:'',departmentId:listDates[i]['HIDDEN_ID'] ,responsibleId:''));
|
||||
otherHidden.add(DepartmentEntry(department: listDates[i]["HIDDENDESCR"], responsible: '点击填写',index:'',departmentId:listDates[i]['HIDDEN_ID'] ,responsibleId:''));
|
||||
}catch(e){
|
||||
otherHidden.add(DepartmentEntry(department: "", responsible: '请选择',index:'',departmentId:listDates[i]['HIDDEN_ID'],responsibleId:''));
|
||||
otherHidden.add(DepartmentEntry(department: "", responsible: '点击填写',index:'',departmentId:listDates[i]['HIDDEN_ID'],responsibleId:''));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -158,11 +158,22 @@ class _CheckingInformationOnePageState extends State<CheckingInformationOnePage>
|
|||
Container(
|
||||
color: Colors.white,
|
||||
padding: EdgeInsets.symmetric(horizontal: 15),
|
||||
child: GestureDetector(
|
||||
child: ListItemFactory.createRowSpaceBetweenItem(
|
||||
leftText: "日期选择",
|
||||
rightText: dataTime.isEmpty?"请选择":dataTime,
|
||||
isRight: true,
|
||||
),
|
||||
onTap: () async {
|
||||
DateTime? picked = await BottomDateTimePicker.showDate(context);
|
||||
if (picked != null) {
|
||||
setState(() {
|
||||
dataTime = DateFormat('yyyy-MM-dd').format(picked);
|
||||
stringTime = DateFormat('HH:mm').format(picked);
|
||||
});
|
||||
}
|
||||
},
|
||||
),
|
||||
),
|
||||
|
||||
Divider(height: 1,),
|
||||
|
@ -176,6 +187,7 @@ class _CheckingInformationOnePageState extends State<CheckingInformationOnePage>
|
|||
DateTime? picked = await BottomDateTimePicker.showDate(context);
|
||||
if (picked != null) {
|
||||
setState(() {
|
||||
dataTime = DateFormat('yyyy-MM-dd').format(picked);
|
||||
stringTime = DateFormat('HH:mm').format(picked);
|
||||
});
|
||||
}
|
||||
|
@ -559,7 +571,7 @@ class _CheckingInformationOnePageState extends State<CheckingInformationOnePage>
|
|||
}
|
||||
void _addOtherHidden() {
|
||||
setState(() {
|
||||
otherHidden.add(DepartmentEntry(department: '请选择', responsible: '请选择',index:'',departmentId: '',responsibleId:''));
|
||||
otherHidden.add(DepartmentEntry(department: '点击填写', responsible: '点击填写',index:'',departmentId: '',responsibleId:''));
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -460,9 +460,9 @@ class _DangerWaitListPageState extends State<DangerWaitListPage> {
|
|||
if("1"==type){
|
||||
return "隐患来源:隐患快报";
|
||||
}else if("2"==type){
|
||||
return "隐患来源:隐患排查清单检查";
|
||||
return "隐患来源:隐患排查";
|
||||
}else if("3"==type){
|
||||
return "隐患来源:标准排查清单检查";
|
||||
return "隐患来源:标准排查";
|
||||
}else if("4"==type){
|
||||
return "隐患来源:专项检查";
|
||||
}else{
|
||||
|
|
|
@ -300,7 +300,8 @@ class DannerRepairState extends State<DannerRepair> {
|
|||
Widget _acceptPrepare() {
|
||||
final fields = [
|
||||
_buildReadOnlyRow("排查日期", widget.pd["CREATTIME"]),
|
||||
_buildReadOnlyRow("隐患清单", ""),
|
||||
if(FormUtils.hasValue(widget.pd, "LIST_NAME"))
|
||||
_buildReadOnlyRow("隐患清单", widget.pd["LIST_NAME"]),
|
||||
ListItemFactory.createBuildMultilineInput("治理标准", "请输入治理标准", standardController),
|
||||
ListItemFactory.createBuildMultilineInput("治理方法", "请输入治理方法", methodController),
|
||||
ListItemFactory.createBuildMultilineInput("经费落实", "请输入经费落实", fundController),
|
||||
|
|
|
@ -157,7 +157,7 @@ class _HiddenDangerAcceptancePageState extends State<HiddenDangerAcceptancePage>
|
|||
|
||||
Widget _buildInfoItem(String title, String value) {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 8),
|
||||
padding: const EdgeInsets.symmetric(vertical: 8,horizontal: 10),
|
||||
child: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
|
@ -188,12 +188,17 @@ class _HiddenDangerAcceptancePageState extends State<HiddenDangerAcceptancePage>
|
|||
minHeight: constraints.maxHeight,
|
||||
),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(16),
|
||||
padding: const EdgeInsets.all(10),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
_buildInfoItem('隐患描述', pd['HIDDENDESCR'] ?? ''),
|
||||
|
||||
Card(
|
||||
color: Colors.white,
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
_buildInfoItem('隐患描述', pd['HIDDENDESCR'] ?? ''),
|
||||
Divider(height: 1),
|
||||
// 隐患来源
|
||||
_buildInfoItem('隐患来源', _getSourceText(pd['SOURCE'])),
|
||||
|
@ -240,6 +245,7 @@ class _HiddenDangerAcceptancePageState extends State<HiddenDangerAcceptancePage>
|
|||
ListItemFactory.createTextImageItem(
|
||||
text: "隐患照片",
|
||||
imageUrls: files,
|
||||
horizontalPadding:10,
|
||||
onImageTapped: (index) {
|
||||
presentOpaque(
|
||||
SingleImageViewer(imageUrl:ApiService.baseImgPath + files[index]),
|
||||
|
@ -249,10 +255,14 @@ class _HiddenDangerAcceptancePageState extends State<HiddenDangerAcceptancePage>
|
|||
),
|
||||
|
||||
|
||||
// 隐患视频
|
||||
if (videoList.isNotEmpty) ...[
|
||||
const SizedBox(height: 16),
|
||||
const Text('隐患视频', style: TextStyle(fontWeight: FontWeight.bold)),
|
||||
// 隐患视频
|
||||
if (videoList.isNotEmpty) ...[
|
||||
SizedBox(height: 10),
|
||||
Padding(
|
||||
padding: EdgeInsets.only(left: 10,right: 10),
|
||||
child: Text('隐患视频', style: TextStyle(fontWeight: FontWeight.bold)),
|
||||
|
||||
),
|
||||
GestureDetector(
|
||||
onTap: () {
|
||||
showDialog(
|
||||
|
@ -274,13 +284,27 @@ class _HiddenDangerAcceptancePageState extends State<HiddenDangerAcceptancePage>
|
|||
height: 120,
|
||||
),
|
||||
),
|
||||
],
|
||||
],
|
||||
|
||||
|
||||
],
|
||||
),
|
||||
),
|
||||
|
||||
|
||||
SizedBox(height: 10,),
|
||||
// 整改信息部分
|
||||
if (pd['STATE'] != null && int.parse(pd['STATE']) >= 2 && int.parse(pd['STATE']) <= 4) ...[
|
||||
// const Divider(height: 10,color: Colors.grey,),
|
||||
Row(
|
||||
SizedBox(height: 10,),
|
||||
Card(
|
||||
color: Colors.white,
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Padding(
|
||||
padding: EdgeInsets.only(top: 10,left: 10,right: 10),
|
||||
child:
|
||||
Row(
|
||||
children: [
|
||||
Container(width: 3, height: 15, color: Colors.blue),
|
||||
const SizedBox(width: 8),
|
||||
|
@ -290,7 +314,7 @@ class _HiddenDangerAcceptancePageState extends State<HiddenDangerAcceptancePage>
|
|||
),
|
||||
],
|
||||
),
|
||||
|
||||
),
|
||||
|
||||
// const Text('整改信息', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
|
||||
Divider(height: 1),
|
||||
|
@ -307,6 +331,7 @@ class _HiddenDangerAcceptancePageState extends State<HiddenDangerAcceptancePage>
|
|||
ListItemFactory.createTextImageItem(
|
||||
text: "整改后图片",
|
||||
imageUrls: files2,
|
||||
horizontalPadding: 10,
|
||||
onImageTapped: (index) {
|
||||
presentOpaque(
|
||||
SingleImageViewer(imageUrl: ApiService.baseImgPath +files2[index]),
|
||||
|
@ -346,6 +371,7 @@ class _HiddenDangerAcceptancePageState extends State<HiddenDangerAcceptancePage>
|
|||
ListItemFactory.createTextImageItem(
|
||||
text: "方案图片",
|
||||
imageUrls: files4,
|
||||
horizontalPadding: 10,
|
||||
onImageTapped: (index) {
|
||||
presentOpaque(
|
||||
SingleImageViewer(imageUrl: ApiService.baseImgPath +files2[index]),
|
||||
|
@ -360,11 +386,13 @@ class _HiddenDangerAcceptancePageState extends State<HiddenDangerAcceptancePage>
|
|||
|
||||
Divider(height: 1),
|
||||
_buildInfoItem('整改计划', pd['HAVEPLAN']=="0" ? '无':'有'),
|
||||
if(pd['HAVEPLAN']=="1")
|
||||
Divider(height: 1),
|
||||
if(pd['HAVEPLAN']=="1")
|
||||
ListItemFactory.createTextImageItem(
|
||||
text: "计划图片",
|
||||
imageUrls: files2,
|
||||
horizontalPadding: 10,
|
||||
onImageTapped: (index) {
|
||||
presentOpaque(
|
||||
SingleImageViewer(imageUrl: ApiService.baseImgPath +files2[index]),
|
||||
|
@ -373,7 +401,9 @@ class _HiddenDangerAcceptancePageState extends State<HiddenDangerAcceptancePage>
|
|||
},
|
||||
),
|
||||
|
||||
|
||||
],
|
||||
),
|
||||
),
|
||||
// 隐患整改
|
||||
_danner_type_wait(),
|
||||
|
||||
|
@ -399,7 +429,11 @@ class _HiddenDangerAcceptancePageState extends State<HiddenDangerAcceptancePage>
|
|||
return SizedBox(
|
||||
child: Column(
|
||||
children: [
|
||||
_getRepairState(),
|
||||
Card(
|
||||
color:Colors.white,
|
||||
child: _getRepairState(),
|
||||
),
|
||||
|
||||
// 整改选项
|
||||
// _accepted ? _getRepairState() : _noAccepet_repair(_accepted),
|
||||
|
||||
|
@ -427,11 +461,12 @@ class _HiddenDangerAcceptancePageState extends State<HiddenDangerAcceptancePage>
|
|||
|
||||
children: [
|
||||
|
||||
ListItemFactory.createBuildSimpleSection("隐患验收",horPadding:0),
|
||||
ListItemFactory.createBuildSimpleSection("隐患验收",horPadding:10),
|
||||
Divider(height: 1),
|
||||
|
||||
ListItemFactory.createYesNoSection(
|
||||
horizontalPadding: 0,
|
||||
verticalPadding:0,
|
||||
title: '是否合格',
|
||||
yesLabel: '是',
|
||||
noLabel: '否',
|
||||
|
@ -448,7 +483,7 @@ class _HiddenDangerAcceptancePageState extends State<HiddenDangerAcceptancePage>
|
|||
Column(children: [
|
||||
Divider(),
|
||||
Container(
|
||||
padding: EdgeInsets.only(top: 15,bottom: 15),
|
||||
padding: EdgeInsets.only(top: 10,bottom: 10,left: 10,right: 10),
|
||||
child: Column(
|
||||
children: [
|
||||
Row(
|
||||
|
@ -481,7 +516,7 @@ class _HiddenDangerAcceptancePageState extends State<HiddenDangerAcceptancePage>
|
|||
|
||||
},
|
||||
child: Padding(
|
||||
padding: EdgeInsets.symmetric(horizontal: 0),
|
||||
padding: EdgeInsets.symmetric(horizontal: 10),
|
||||
child: ListItemFactory.createRowSpaceBetweenItem(
|
||||
leftText: "验收日期",
|
||||
rightText: dataTime.isEmpty?"请选择":dataTime,
|
||||
|
@ -494,6 +529,7 @@ class _HiddenDangerAcceptancePageState extends State<HiddenDangerAcceptancePage>
|
|||
title: "验收照片",
|
||||
maxCount: 4,
|
||||
mediaType: MediaType.image,
|
||||
horizontalPadding: 10,
|
||||
onChanged: (files) {
|
||||
// 上传 files 到服务器
|
||||
gaiHouImages.clear();
|
||||
|
|
|
@ -98,7 +98,9 @@ class _HiddenRecordDetailPageState extends State<HiddenRecordDetailPage> {
|
|||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}else{
|
||||
getDataTwo();
|
||||
}
|
||||
|
||||
} catch (e) {
|
||||
print('Error fetching data: $e');
|
||||
|
@ -156,7 +158,7 @@ class _HiddenRecordDetailPageState extends State<HiddenRecordDetailPage> {
|
|||
|
||||
Widget _buildInfoItem(String title, String value) {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 8),
|
||||
padding: const EdgeInsets.symmetric(vertical: 8,horizontal: 10),
|
||||
child: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
|
@ -187,105 +189,133 @@ class _HiddenRecordDetailPageState extends State<HiddenRecordDetailPage> {
|
|||
minHeight: constraints.maxHeight,
|
||||
),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(16),
|
||||
padding: const EdgeInsets.all(10),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
_buildInfoItem('隐患描述', pd['HIDDENDESCR'] ?? ''),
|
||||
|
||||
Divider(height: 1),
|
||||
// 隐患来源
|
||||
_buildInfoItem('隐患来源', _getSourceText(pd['SOURCE'])),
|
||||
Divider(height: 1),
|
||||
// 条件渲染部分
|
||||
if (pd['SOURCE'] == '2') ...[
|
||||
_buildInfoItem('风险点(单元)', pd['RISK_UNIT'] ?? ''),
|
||||
Divider(height: 1),
|
||||
_buildInfoItem('辨识部位', pd['IDENTIFICATION'] ?? ''),
|
||||
Divider(height: 1),
|
||||
_buildInfoItem('存在风险', pd['RISK_DESCR'] ?? ''),
|
||||
Divider(height: 1),
|
||||
_buildInfoItem('风险分级', pd['LEVEL'] ?? ''),
|
||||
Divider(height: 1),
|
||||
_buildInfoItem('检查内容', pd['CHECK_CONTENT'] ?? ''),
|
||||
Divider(height: 1),
|
||||
],
|
||||
Card(
|
||||
color: Colors.white,
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
_buildInfoItem('隐患描述', pd['HIDDENDESCR'] ?? ''),
|
||||
Divider(height: 1),
|
||||
// 隐患来源
|
||||
_buildInfoItem('隐患来源', _getSourceText(pd['SOURCE'])),
|
||||
Divider(height: 1),
|
||||
// 条件渲染部分
|
||||
if (pd['SOURCE'] == '2') ...[
|
||||
_buildInfoItem('风险点(单元)', pd['RISK_UNIT'] ?? ''),
|
||||
Divider(height: 1),
|
||||
_buildInfoItem('辨识部位', pd['IDENTIFICATION'] ?? ''),
|
||||
Divider(height: 1),
|
||||
_buildInfoItem('存在风险', pd['RISK_DESCR'] ?? ''),
|
||||
Divider(height: 1),
|
||||
_buildInfoItem('风险分级', pd['LEVEL'] ?? ''),
|
||||
Divider(height: 1),
|
||||
_buildInfoItem('检查内容', pd['CHECK_CONTENT'] ?? ''),
|
||||
Divider(height: 1),
|
||||
],
|
||||
|
||||
_buildInfoItem('隐患部位', pd['HIDDENPART'] ?? ''),
|
||||
Divider(height: 1),
|
||||
_buildInfoItem('发现人', pd['CREATORNAME'] ?? ''),
|
||||
Divider(height: 1),
|
||||
_buildInfoItem('发现时间', pd['CREATTIME'] ?? ''),
|
||||
Divider(height: 1),
|
||||
_buildInfoItem('隐患部位', pd['HIDDENPART'] ?? ''),
|
||||
Divider(height: 1),
|
||||
_buildInfoItem('发现人', pd['CREATORNAME'] ?? ''),
|
||||
Divider(height: 1),
|
||||
_buildInfoItem('发现时间', pd['CREATTIME'] ?? ''),
|
||||
Divider(height: 1),
|
||||
|
||||
if (pd['HIDDEN_CATEGORY']?.isNotEmpty == true)
|
||||
_buildInfoItem('隐患类别', pd['HIDDEN_CATEGORY_NAME'] ?? ''),
|
||||
if (pd['HIDDEN_CATEGORY']?.isNotEmpty == true)
|
||||
_buildInfoItem('隐患类别', pd['HIDDEN_CATEGORY_NAME'] ?? ''),
|
||||
|
||||
_buildInfoItem('隐患类型', pd['HIDDENTYPE_NAME'] ?? ''),
|
||||
Divider(height: 1),
|
||||
_buildInfoItem('整改类型', _getRectificationType(pd['RECTIFICATIONTYPE'])),
|
||||
_buildInfoItem('隐患类型', pd['HIDDENTYPE_NAME'] ?? ''),
|
||||
Divider(height: 1),
|
||||
_buildInfoItem('整改类型', _getRectificationType(pd['RECTIFICATIONTYPE'])),
|
||||
|
||||
if (pd['RECTIFICATIONTYPE'] == '2')
|
||||
_buildInfoItem('整改期限', pd['RECTIFICATIONDEADLINE'] ?? ''),
|
||||
Divider(height: 1),
|
||||
// 隐患照片
|
||||
// const Text('隐患照片', style: TextStyle(fontWeight: FontWeight.bold)),
|
||||
// _buildImageGrid(files, onTap: (index) => _showImageGallery(files, index)),
|
||||
ListItemFactory.createTextImageItem(
|
||||
text: "隐患照片",
|
||||
imageUrls: files,
|
||||
onImageTapped: (index) {
|
||||
presentOpaque(
|
||||
SingleImageViewer(imageUrl:ApiService.baseImgPath + files[index]),
|
||||
context,
|
||||
);
|
||||
},
|
||||
if (pd['RECTIFICATIONTYPE'] == '2')
|
||||
_buildInfoItem('整改期限', pd['RECTIFICATIONDEADLINE'] ?? ''),
|
||||
Divider(height: 1),
|
||||
// 隐患照片
|
||||
// const Text('隐患照片', style: TextStyle(fontWeight: FontWeight.bold)),
|
||||
// _buildImageGrid(files, onTap: (index) => _showImageGallery(files, index)),
|
||||
ListItemFactory.createTextImageItem(
|
||||
text: "隐患照片",
|
||||
imageUrls: files,
|
||||
horizontalPadding:10,
|
||||
onImageTapped: (index) {
|
||||
presentOpaque(
|
||||
SingleImageViewer(imageUrl:ApiService.baseImgPath + files[index]),
|
||||
context,
|
||||
);
|
||||
},
|
||||
),
|
||||
|
||||
// 隐患视频
|
||||
if (videoList.isNotEmpty) ...[
|
||||
SizedBox(height: 10),
|
||||
Padding(
|
||||
padding: EdgeInsets.only(left: 10,right: 10),
|
||||
child: Text('隐患视频', style: TextStyle(fontWeight: FontWeight.bold)),
|
||||
|
||||
),
|
||||
|
||||
GestureDetector(
|
||||
onTap: () {
|
||||
showDialog(
|
||||
context: context,
|
||||
barrierColor: Colors.black54,
|
||||
builder: (_) => VideoPlayerPopup(videoUrl: ApiService.baseImgPath + videoList[0]['FILEPATH']),
|
||||
);
|
||||
|
||||
// present(
|
||||
// BigVideoViewer(videoUrl:ApiService.baseImgPath + videoList[0]['FILEPATH']),
|
||||
// context,
|
||||
// );
|
||||
},
|
||||
// => _playVideo(ApiService.baseImgPath + videoList[0]['FILEPATH']),
|
||||
child: Image.asset(
|
||||
'assets/image/videostart.png', // 替换为你的视频占位图
|
||||
color: Colors.blue,
|
||||
width: 120,
|
||||
height: 120,
|
||||
),
|
||||
),
|
||||
],
|
||||
|
||||
|
||||
],
|
||||
),
|
||||
),
|
||||
|
||||
|
||||
// 隐患视频
|
||||
if (videoList.isNotEmpty) ...[
|
||||
const SizedBox(height: 16),
|
||||
const Text('隐患视频', style: TextStyle(fontWeight: FontWeight.bold)),
|
||||
GestureDetector(
|
||||
onTap: () {
|
||||
showDialog(
|
||||
context: context,
|
||||
barrierColor: Colors.black54,
|
||||
builder: (_) => VideoPlayerPopup(videoUrl: ApiService.baseImgPath + videoList[0]['FILEPATH']),
|
||||
);
|
||||
|
||||
// present(
|
||||
// BigVideoViewer(videoUrl:ApiService.baseImgPath + videoList[0]['FILEPATH']),
|
||||
// context,
|
||||
// );
|
||||
},
|
||||
// => _playVideo(ApiService.baseImgPath + videoList[0]['FILEPATH']),
|
||||
child: Image.asset(
|
||||
'assets/image/videostart.png', // 替换为你的视频占位图
|
||||
color: Colors.blue,
|
||||
width: 120,
|
||||
height: 120,
|
||||
),
|
||||
),
|
||||
],
|
||||
|
||||
SizedBox(height: 10,),
|
||||
|
||||
// 整改信息部分
|
||||
if (pd['STATE'] != null && int.parse(pd['STATE']) >= 2 && int.parse(pd['STATE']) <= 4) ...[
|
||||
SizedBox(height: 10,),
|
||||
// const Divider(height: 10,color: Colors.grey,),
|
||||
Row(
|
||||
children: [
|
||||
Container(width: 3, height: 15, color: Colors.blue),
|
||||
const SizedBox(width: 8),
|
||||
Text(
|
||||
Card(
|
||||
color: Colors.white,
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Padding(
|
||||
padding: EdgeInsets.only(top: 10,left: 10,right: 10),
|
||||
child: Row(
|
||||
children: [
|
||||
Container(width: 3, height: 15, color: Colors.blue),
|
||||
const SizedBox(width: 8),
|
||||
Text(
|
||||
"整改信息",
|
||||
style: const TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
|
||||
|
||||
|
||||
// const Text('整改信息', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
|
||||
Divider(height: 1),
|
||||
_buildInfoItem('整改描述', pd['RECTIFYDESCR'] ?? ''),
|
||||
|
@ -301,6 +331,7 @@ class _HiddenRecordDetailPageState extends State<HiddenRecordDetailPage> {
|
|||
ListItemFactory.createTextImageItem(
|
||||
text: "整改后图片",
|
||||
imageUrls: files2,
|
||||
horizontalPadding: 10,
|
||||
onImageTapped: (index) {
|
||||
presentOpaque(
|
||||
SingleImageViewer(imageUrl: ApiService.baseImgPath +files2[index]),
|
||||
|
@ -340,6 +371,7 @@ class _HiddenRecordDetailPageState extends State<HiddenRecordDetailPage> {
|
|||
ListItemFactory.createTextImageItem(
|
||||
text: "方案图片",
|
||||
imageUrls: files4,
|
||||
horizontalPadding: 10,
|
||||
onImageTapped: (index) {
|
||||
presentOpaque(
|
||||
SingleImageViewer(imageUrl: ApiService.baseImgPath +files2[index]),
|
||||
|
@ -359,6 +391,7 @@ class _HiddenRecordDetailPageState extends State<HiddenRecordDetailPage> {
|
|||
ListItemFactory.createTextImageItem(
|
||||
text: "计划图片",
|
||||
imageUrls: files2,
|
||||
horizontalPadding: 10,
|
||||
onImageTapped: (index) {
|
||||
presentOpaque(
|
||||
SingleImageViewer(imageUrl: ApiService.baseImgPath +files2[index]),
|
||||
|
@ -366,7 +399,9 @@ class _HiddenRecordDetailPageState extends State<HiddenRecordDetailPage> {
|
|||
);
|
||||
},
|
||||
),
|
||||
|
||||
],
|
||||
),
|
||||
),
|
||||
// ... 其他整改信息字段
|
||||
],
|
||||
|
||||
|
@ -376,16 +411,26 @@ class _HiddenRecordDetailPageState extends State<HiddenRecordDetailPage> {
|
|||
if ((6==widget.dangerType.index||1==widget.dangerType.index||0==widget.dangerType.index)&&checkList.isNotEmpty) ...[
|
||||
// const Divider(height: 10,color: Colors.grey,),
|
||||
SizedBox(height: 10,),
|
||||
Row(
|
||||
Card(
|
||||
color: Colors.white,
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Container(width: 3, height: 15, color: Colors.blue),
|
||||
const SizedBox(width: 8),
|
||||
Text(
|
||||
"验收信息",
|
||||
style: const TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
||||
Padding(
|
||||
padding: EdgeInsets.only(top: 10,left: 10,right: 10),
|
||||
child:
|
||||
Row(
|
||||
children: [
|
||||
Container(width: 3, height: 15, color: Colors.blue),
|
||||
const SizedBox(width: 8),
|
||||
Text(
|
||||
"验收信息",
|
||||
style: const TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
|
||||
|
||||
// const Text('整改信息', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
|
||||
|
@ -405,6 +450,7 @@ class _HiddenRecordDetailPageState extends State<HiddenRecordDetailPage> {
|
|||
ListItemFactory.createTextImageItem(
|
||||
text: "验收图片",
|
||||
imageUrls: files7,
|
||||
horizontalPadding: 10,
|
||||
onImageTapped: (index) {
|
||||
presentOpaque(
|
||||
SingleImageViewer(imageUrl: ApiService.baseImgPath +files5[index]),
|
||||
|
@ -412,6 +458,9 @@ class _HiddenRecordDetailPageState extends State<HiddenRecordDetailPage> {
|
|||
);
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
|
||||
|
||||
|
|
|
@ -159,7 +159,7 @@ class _EquipmentInspectionListPageState
|
|||
|
||||
return ListView.builder(
|
||||
controller: _scrollController,
|
||||
itemCount: _equipList.length,
|
||||
itemCount: _periodList.length,
|
||||
itemBuilder: (context, index) {
|
||||
final period = _periodList[index];
|
||||
final items = groupedItems[period] ?? [];
|
||||
|
|
|
@ -86,7 +86,8 @@ class _HomeNfcDetailPageState extends State<HomeNfcDetailPage> {
|
|||
);
|
||||
|
||||
if (result == null) {
|
||||
_showMessage('请求失败:结果为 null');
|
||||
ToastUtil.showNormal(context, '请求失败:结果为 null');
|
||||
// _showMessage('请求失败:结果为 null');
|
||||
return;
|
||||
}
|
||||
printLongString(jsonEncode(result));
|
||||
|
|
|
@ -168,12 +168,14 @@ class _NfcQuestionFecebookState extends State<NfcQuestionFecebook> {
|
|||
final text = _descriptionController.text.trim();
|
||||
|
||||
if (text.isEmpty) {
|
||||
_showMessage('请填写问题');
|
||||
ToastUtil.showNormal(context, '请填写问题');
|
||||
// _showMessage('请填写问题');
|
||||
return;
|
||||
}
|
||||
|
||||
if (_images.isEmpty) {
|
||||
_showMessage('请上传图片');
|
||||
ToastUtil.showNormal(context, '请上传图片');
|
||||
// _showMessage('请上传图片');
|
||||
return;
|
||||
}
|
||||
Map data = {
|
||||
|
@ -225,9 +227,11 @@ class _NfcQuestionFecebookState extends State<NfcQuestionFecebook> {
|
|||
final raw = await ApiService.nfcFeedBack(data);
|
||||
|
||||
if (raw['result'] == 'success') {
|
||||
_showMessage('提交成功');
|
||||
ToastUtil.showNormal(context, '提交成功');
|
||||
// _showMessage('提交成功');
|
||||
} else {
|
||||
_showMessage('提交失败');
|
||||
ToastUtil.showNormal(context, '提交失败');
|
||||
// _showMessage('提交失败');
|
||||
}
|
||||
} catch (e) {
|
||||
// 出错时可以 Toast 或者在页面上显示错误状态
|
||||
|
|
|
@ -77,7 +77,7 @@ class _CompanySafetyCommitmentApplyState extends State<CompanySafetyCommitmentAp
|
|||
isEditable: true,
|
||||
controller: _controller1,
|
||||
text: '',
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
isNumericInput: true,
|
||||
keyboardType:TextInputType.number,
|
||||
),
|
||||
const Divider(),
|
||||
|
@ -86,7 +86,7 @@ class _CompanySafetyCommitmentApplyState extends State<CompanySafetyCommitmentAp
|
|||
isEditable: true,
|
||||
controller: _controller2,
|
||||
text: '',
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
isNumericInput: true,
|
||||
keyboardType:TextInputType.number,
|
||||
),
|
||||
const Divider(),
|
||||
|
@ -95,7 +95,7 @@ class _CompanySafetyCommitmentApplyState extends State<CompanySafetyCommitmentAp
|
|||
isEditable: true,
|
||||
controller: _controller3,
|
||||
text: '',
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
isNumericInput: true,
|
||||
keyboardType:TextInputType.number,
|
||||
),
|
||||
const Divider(),
|
||||
|
@ -104,7 +104,7 @@ class _CompanySafetyCommitmentApplyState extends State<CompanySafetyCommitmentAp
|
|||
isEditable: true,
|
||||
controller: _controller4,
|
||||
text: '',
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
isNumericInput: true,
|
||||
keyboardType:TextInputType.number,
|
||||
),
|
||||
|
||||
|
@ -130,7 +130,7 @@ class _CompanySafetyCommitmentApplyState extends State<CompanySafetyCommitmentAp
|
|||
isEditable: true,
|
||||
controller: _controller5,
|
||||
text: '',
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
isNumericInput: true,
|
||||
keyboardType:TextInputType.number,
|
||||
),
|
||||
const Divider(),
|
||||
|
@ -139,7 +139,7 @@ class _CompanySafetyCommitmentApplyState extends State<CompanySafetyCommitmentAp
|
|||
isEditable: true,
|
||||
controller: _controller6,
|
||||
text: '',
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
isNumericInput: true,
|
||||
keyboardType:TextInputType.number,
|
||||
),
|
||||
const Divider(),
|
||||
|
@ -148,7 +148,7 @@ class _CompanySafetyCommitmentApplyState extends State<CompanySafetyCommitmentAp
|
|||
isEditable: true,
|
||||
controller: _controller7,
|
||||
text: '',
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
isNumericInput: true,
|
||||
keyboardType:TextInputType.number,
|
||||
),
|
||||
const Divider(),
|
||||
|
@ -157,7 +157,7 @@ class _CompanySafetyCommitmentApplyState extends State<CompanySafetyCommitmentAp
|
|||
isEditable: true,
|
||||
controller: _controller8,
|
||||
text: '',
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
isNumericInput: true,
|
||||
keyboardType:TextInputType.number,
|
||||
),
|
||||
const Divider(),
|
||||
|
@ -166,7 +166,7 @@ class _CompanySafetyCommitmentApplyState extends State<CompanySafetyCommitmentAp
|
|||
isEditable: true,
|
||||
controller: _controller9,
|
||||
text: '',
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
isNumericInput: true,
|
||||
keyboardType:TextInputType.number,
|
||||
),
|
||||
const Divider(),
|
||||
|
@ -175,7 +175,7 @@ class _CompanySafetyCommitmentApplyState extends State<CompanySafetyCommitmentAp
|
|||
isEditable: true,
|
||||
controller: _controller10,
|
||||
text: '',
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
isNumericInput: true,
|
||||
keyboardType:TextInputType.number,
|
||||
),
|
||||
|
||||
|
|
|
@ -103,7 +103,7 @@ class _TeamSafetyCommitmentApplyState extends State<TeamSafetyCommitmentApply> {
|
|||
isEditable: true,
|
||||
controller: _controller1,
|
||||
text: '',
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
isNumericInput: true,
|
||||
keyboardType:TextInputType.number,
|
||||
),
|
||||
const Divider(),
|
||||
|
@ -112,7 +112,7 @@ class _TeamSafetyCommitmentApplyState extends State<TeamSafetyCommitmentApply> {
|
|||
isEditable: true,
|
||||
controller: _controller2,
|
||||
text: '',
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
isNumericInput: true,
|
||||
keyboardType:TextInputType.number,
|
||||
),
|
||||
|
||||
|
@ -123,7 +123,7 @@ class _TeamSafetyCommitmentApplyState extends State<TeamSafetyCommitmentApply> {
|
|||
isEditable: true,
|
||||
controller: _controller3,
|
||||
text: '',
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
isNumericInput: true,
|
||||
keyboardType:TextInputType.number,
|
||||
),
|
||||
const Divider(),
|
||||
|
@ -132,7 +132,7 @@ class _TeamSafetyCommitmentApplyState extends State<TeamSafetyCommitmentApply> {
|
|||
isEditable: true,
|
||||
controller: _controller4,
|
||||
text: '',
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
isNumericInput: true,
|
||||
keyboardType:TextInputType.number,
|
||||
),
|
||||
const Divider(),
|
||||
|
@ -141,7 +141,7 @@ class _TeamSafetyCommitmentApplyState extends State<TeamSafetyCommitmentApply> {
|
|||
isEditable: true,
|
||||
controller: _controller5,
|
||||
text: '',
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
isNumericInput: true,
|
||||
keyboardType:TextInputType.number,
|
||||
),
|
||||
|
||||
|
@ -151,7 +151,7 @@ class _TeamSafetyCommitmentApplyState extends State<TeamSafetyCommitmentApply> {
|
|||
isEditable: true,
|
||||
controller: _controller6,
|
||||
text: '',
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
isNumericInput: true,
|
||||
keyboardType:TextInputType.number,
|
||||
),
|
||||
|
||||
|
@ -161,7 +161,7 @@ class _TeamSafetyCommitmentApplyState extends State<TeamSafetyCommitmentApply> {
|
|||
isEditable: true,
|
||||
controller: _controller7,
|
||||
text: '',
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
isNumericInput: true,
|
||||
keyboardType:TextInputType.number,
|
||||
),
|
||||
|
||||
|
@ -171,7 +171,7 @@ class _TeamSafetyCommitmentApplyState extends State<TeamSafetyCommitmentApply> {
|
|||
isEditable: true,
|
||||
controller: _controller8,
|
||||
text: '',
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
isNumericInput: true,
|
||||
keyboardType:TextInputType.number,
|
||||
),
|
||||
const Divider(),
|
||||
|
@ -180,7 +180,7 @@ class _TeamSafetyCommitmentApplyState extends State<TeamSafetyCommitmentApply> {
|
|||
isEditable: true,
|
||||
controller: _controller9,
|
||||
text: '',
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
isNumericInput: true,
|
||||
keyboardType:TextInputType.number,
|
||||
),
|
||||
|
||||
|
@ -190,7 +190,7 @@ class _TeamSafetyCommitmentApplyState extends State<TeamSafetyCommitmentApply> {
|
|||
isEditable: true,
|
||||
controller: _controller10,
|
||||
text: '',
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
isNumericInput: true,
|
||||
keyboardType:TextInputType.number,
|
||||
),
|
||||
|
||||
|
@ -200,7 +200,7 @@ class _TeamSafetyCommitmentApplyState extends State<TeamSafetyCommitmentApply> {
|
|||
isEditable: true,
|
||||
controller: _controller11,
|
||||
text: '',
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
isNumericInput: true,
|
||||
keyboardType:TextInputType.number,
|
||||
),
|
||||
|
||||
|
@ -210,7 +210,7 @@ class _TeamSafetyCommitmentApplyState extends State<TeamSafetyCommitmentApply> {
|
|||
isEditable: true,
|
||||
controller: _controller12,
|
||||
text: '',
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
isNumericInput: true,
|
||||
keyboardType:TextInputType.number,
|
||||
),
|
||||
|
||||
|
@ -220,7 +220,7 @@ class _TeamSafetyCommitmentApplyState extends State<TeamSafetyCommitmentApply> {
|
|||
isEditable: true,
|
||||
controller: _controller13,
|
||||
text: '',
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
isNumericInput: true,
|
||||
keyboardType:TextInputType.number,
|
||||
),
|
||||
// const Divider(),
|
||||
|
@ -273,7 +273,7 @@ class _TeamSafetyCommitmentApplyState extends State<TeamSafetyCommitmentApply> {
|
|||
isEditable: true,
|
||||
controller: _controller14,
|
||||
text: '',
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
isNumericInput: true,
|
||||
keyboardType:TextInputType.number,
|
||||
),
|
||||
const Divider(),
|
||||
|
@ -366,7 +366,7 @@ class _TeamSafetyCommitmentApplyState extends State<TeamSafetyCommitmentApply> {
|
|||
isEditable: true,
|
||||
controller: _controller16,
|
||||
text: '',
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
isNumericInput: true,
|
||||
keyboardType:TextInputType.number,
|
||||
),
|
||||
const Divider(),
|
||||
|
@ -375,7 +375,7 @@ class _TeamSafetyCommitmentApplyState extends State<TeamSafetyCommitmentApply> {
|
|||
isEditable: true,
|
||||
controller: _controller17,
|
||||
text: '',
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
isNumericInput: true,
|
||||
keyboardType:TextInputType.number,
|
||||
),
|
||||
const Divider(),
|
||||
|
@ -384,7 +384,7 @@ class _TeamSafetyCommitmentApplyState extends State<TeamSafetyCommitmentApply> {
|
|||
isEditable: true,
|
||||
controller: _controller18,
|
||||
text: '',
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
isNumericInput: true,
|
||||
keyboardType:TextInputType.number,
|
||||
),
|
||||
|
||||
|
|
|
@ -101,7 +101,7 @@ class _WorkShopSafetyCommitmentApplyState extends State<WorkShopSafetyCommitment
|
|||
isEditable: true,
|
||||
controller: _controller1,
|
||||
text: '',
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
isNumericInput: true,
|
||||
keyboardType:TextInputType.number,
|
||||
),
|
||||
const Divider(),
|
||||
|
@ -122,7 +122,7 @@ class _WorkShopSafetyCommitmentApplyState extends State<WorkShopSafetyCommitment
|
|||
isEditable: true,
|
||||
controller: _controller2,
|
||||
text: '',
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
isNumericInput: true,
|
||||
keyboardType:TextInputType.number,
|
||||
),
|
||||
const Divider(),
|
||||
|
@ -131,7 +131,7 @@ class _WorkShopSafetyCommitmentApplyState extends State<WorkShopSafetyCommitment
|
|||
isEditable: true,
|
||||
controller: _controller3,
|
||||
text: '',
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
isNumericInput: true,
|
||||
keyboardType:TextInputType.number,
|
||||
),
|
||||
const Divider(),
|
||||
|
@ -140,7 +140,7 @@ class _WorkShopSafetyCommitmentApplyState extends State<WorkShopSafetyCommitment
|
|||
isEditable: true,
|
||||
controller: _controller4,
|
||||
text: '',
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
isNumericInput: true,
|
||||
keyboardType:TextInputType.number,
|
||||
),
|
||||
|
||||
|
@ -150,7 +150,7 @@ class _WorkShopSafetyCommitmentApplyState extends State<WorkShopSafetyCommitment
|
|||
isEditable: true,
|
||||
controller: _controller5,
|
||||
text: '',
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
isNumericInput: true,
|
||||
keyboardType:TextInputType.number,
|
||||
),
|
||||
|
||||
|
@ -160,7 +160,7 @@ class _WorkShopSafetyCommitmentApplyState extends State<WorkShopSafetyCommitment
|
|||
isEditable: true,
|
||||
controller: _controller6,
|
||||
text: '',
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
isNumericInput: true,
|
||||
keyboardType:TextInputType.number,
|
||||
),
|
||||
|
||||
|
@ -170,7 +170,7 @@ class _WorkShopSafetyCommitmentApplyState extends State<WorkShopSafetyCommitment
|
|||
isEditable: true,
|
||||
controller: _controller7,
|
||||
text: '',
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
isNumericInput: true,
|
||||
keyboardType:TextInputType.number,
|
||||
),
|
||||
const Divider(),
|
||||
|
@ -179,7 +179,7 @@ class _WorkShopSafetyCommitmentApplyState extends State<WorkShopSafetyCommitment
|
|||
isEditable: true,
|
||||
controller: _controller8,
|
||||
text: '',
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
isNumericInput: true,
|
||||
keyboardType:TextInputType.number,
|
||||
),
|
||||
|
||||
|
@ -189,7 +189,7 @@ class _WorkShopSafetyCommitmentApplyState extends State<WorkShopSafetyCommitment
|
|||
isEditable: true,
|
||||
controller: _controller9,
|
||||
text: '',
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
isNumericInput: true,
|
||||
keyboardType:TextInputType.number,
|
||||
),
|
||||
|
||||
|
@ -199,7 +199,7 @@ class _WorkShopSafetyCommitmentApplyState extends State<WorkShopSafetyCommitment
|
|||
isEditable: true,
|
||||
controller: _controller10,
|
||||
text: '',
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
isNumericInput: true,
|
||||
keyboardType:TextInputType.number,
|
||||
),
|
||||
|
||||
|
@ -209,7 +209,7 @@ class _WorkShopSafetyCommitmentApplyState extends State<WorkShopSafetyCommitment
|
|||
isEditable: true,
|
||||
controller: _controller11,
|
||||
text: '',
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
isNumericInput: true,
|
||||
keyboardType:TextInputType.number,
|
||||
),
|
||||
|
||||
|
@ -219,7 +219,7 @@ class _WorkShopSafetyCommitmentApplyState extends State<WorkShopSafetyCommitment
|
|||
isEditable: true,
|
||||
controller: _controller12,
|
||||
text: '',
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
isNumericInput: true,
|
||||
keyboardType:TextInputType.number,
|
||||
),
|
||||
const Divider(),
|
||||
|
@ -228,7 +228,7 @@ class _WorkShopSafetyCommitmentApplyState extends State<WorkShopSafetyCommitment
|
|||
isEditable: true,
|
||||
controller: _controller13,
|
||||
text: '',
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
isNumericInput: true,
|
||||
keyboardType:TextInputType.number,
|
||||
),
|
||||
const Divider(),
|
||||
|
@ -261,7 +261,7 @@ class _WorkShopSafetyCommitmentApplyState extends State<WorkShopSafetyCommitment
|
|||
isEditable: true,
|
||||
controller: _controller14,
|
||||
text: '',
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
isNumericInput: true,
|
||||
keyboardType:TextInputType.number,
|
||||
),
|
||||
const Divider(),
|
||||
|
@ -336,7 +336,7 @@ class _WorkShopSafetyCommitmentApplyState extends State<WorkShopSafetyCommitment
|
|||
isEditable: true,
|
||||
controller: _controller15,
|
||||
text: '',
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
isNumericInput: true,
|
||||
keyboardType:TextInputType.number,
|
||||
),
|
||||
const Divider(),
|
||||
|
@ -345,7 +345,7 @@ class _WorkShopSafetyCommitmentApplyState extends State<WorkShopSafetyCommitment
|
|||
isEditable: true,
|
||||
controller: _controller16,
|
||||
text: '',
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
isNumericInput: true,
|
||||
keyboardType:TextInputType.number,
|
||||
),
|
||||
const Divider(),
|
||||
|
@ -354,7 +354,7 @@ class _WorkShopSafetyCommitmentApplyState extends State<WorkShopSafetyCommitment
|
|||
isEditable: true,
|
||||
controller: _controller17,
|
||||
text: '',
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
isNumericInput: true,
|
||||
keyboardType:TextInputType.number,
|
||||
),
|
||||
const Divider(),
|
||||
|
@ -363,7 +363,7 @@ class _WorkShopSafetyCommitmentApplyState extends State<WorkShopSafetyCommitment
|
|||
isEditable: true,
|
||||
controller: _controller18,
|
||||
text: '',
|
||||
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
|
||||
isNumericInput: true,
|
||||
keyboardType:TextInputType.number,
|
||||
),
|
||||
|
||||
|
|
|
@ -175,7 +175,7 @@ class _RiskControlPageState extends State<RiskControlPage> {
|
|||
);
|
||||
},
|
||||
child: Container(
|
||||
height: 100,
|
||||
|
||||
color: Colors.white,
|
||||
padding: EdgeInsets.symmetric(horizontal: 16), // 添加水平内边距
|
||||
child: Row(
|
||||
|
@ -197,6 +197,8 @@ class _RiskControlPageState extends State<RiskControlPage> {
|
|||
Text(
|
||||
'风险点(单元):${item['RISKUNITNAME'] ?? ''}',
|
||||
style: TextStyle(fontSize: 14, color: Colors.grey),
|
||||
maxLines: 2,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
),
|
||||
SizedBox(height: 4),
|
||||
Text(
|
||||
|
@ -209,8 +211,10 @@ class _RiskControlPageState extends State<RiskControlPage> {
|
|||
|
||||
// 右侧风险等级和箭头
|
||||
Padding(
|
||||
padding: EdgeInsets.only(top: 15),
|
||||
child: Column(
|
||||
padding: EdgeInsets.only(top: 5,bottom: 5),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
// 风险等级标签
|
||||
Row(
|
||||
|
@ -235,7 +239,7 @@ class _RiskControlPageState extends State<RiskControlPage> {
|
|||
SizedBox(height: 12), // 添加间距
|
||||
Row(
|
||||
children: [
|
||||
SizedBox(width: 110),
|
||||
|
||||
Icon(Icons.arrow_forward_ios_rounded, size: 16),
|
||||
],
|
||||
),
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:qhd_prevention/customWidget/toast_util.dart';
|
||||
import 'package:qhd_prevention/pages/my_appbar.dart';
|
||||
import 'package:qhd_prevention/tools/coord_convert.dart';
|
||||
import 'package:qhd_prevention/tools/tools.dart';
|
||||
|
@ -65,7 +66,7 @@ class _RiskDetailPageState extends State<RiskDetailPage> {
|
|||
|
||||
Future<void> _addCoordinate() async {
|
||||
try {
|
||||
|
||||
LoadingDialogHelper.show(message: "提交中...");
|
||||
//获取定位
|
||||
await fetchAndSaveBd09(context);
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
|
@ -73,16 +74,20 @@ class _RiskDetailPageState extends State<RiskDetailPage> {
|
|||
String longitude = prefs.getString('bd_lon') ?? '';
|
||||
final result = await ApiService.addCoordinate( widget.itemData["IDENTIFICATIONPARTS_ID"],
|
||||
longitude,latitude);
|
||||
LoadingDialogHelper.hide();
|
||||
if (result['result'] == 'success') {
|
||||
setState(() {
|
||||
_showMessage('提交成功');
|
||||
ToastUtil.showNormal(context, "提交成功");
|
||||
// _showMessage('提交成功');
|
||||
Navigator.pop(context);
|
||||
});
|
||||
|
||||
}else{
|
||||
ToastUtil.showNormal(context, "提交失败");
|
||||
_showMessage('加载数据失败');
|
||||
}
|
||||
} catch (e) {
|
||||
LoadingDialogHelper.hide();
|
||||
// 出错时可以 Toast 或者在页面上显示错误状态
|
||||
print('加载数据失败:$e');
|
||||
}
|
||||
|
@ -99,13 +104,13 @@ class _RiskDetailPageState extends State<RiskDetailPage> {
|
|||
// 设置底部最小高度,要预留出来
|
||||
const double bottomAreaHeight = 100;
|
||||
final double maxCardHeight =
|
||||
constraints.maxHeight - bottomAreaHeight;
|
||||
constraints.maxHeight - bottomAreaHeight-10;
|
||||
|
||||
return Column(
|
||||
children: [
|
||||
// 卡片区:最大高度受限
|
||||
Padding(
|
||||
padding: const EdgeInsets.all(15),
|
||||
padding: EdgeInsets.all(15),
|
||||
child: ConstrainedBox(
|
||||
constraints: BoxConstraints(maxHeight: maxCardHeight),
|
||||
child: Container(
|
||||
|
@ -118,12 +123,6 @@ class _RiskDetailPageState extends State<RiskDetailPage> {
|
|||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||
children: [
|
||||
_buildHeader(),
|
||||
const Divider(
|
||||
height: .5,
|
||||
thickness: .5,
|
||||
color: Colors.grey,
|
||||
),
|
||||
|
||||
// ★ 这个 Flexible 包裹 SingleChildScrollView ★
|
||||
Flexible(
|
||||
|
@ -134,6 +133,14 @@ class _RiskDetailPageState extends State<RiskDetailPage> {
|
|||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
|
||||
_buildHeader(),
|
||||
const Divider(
|
||||
height: .5,
|
||||
thickness: .5,
|
||||
color: Colors.grey,
|
||||
),
|
||||
|
||||
_itemCell("存在风险",0),
|
||||
_itemCell("主要管控措施",1),
|
||||
_itemCell("管控部门",2),
|
||||
|
@ -171,17 +178,23 @@ class _RiskDetailPageState extends State<RiskDetailPage> {
|
|||
// 头部信息组件
|
||||
Widget _buildHeader() {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.all(15),
|
||||
padding: EdgeInsets.only(top:5,left: 15,right: 15,bottom: 15),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
widget.itemData['RISKUNITNAME']?? "",
|
||||
style: TextStyle(fontSize: 16, color: Colors.black54),
|
||||
Expanded(
|
||||
child: Text(
|
||||
widget.itemData['RISKUNITNAME']?? "",
|
||||
style: TextStyle(fontSize: 16, color: Colors.black54),
|
||||
),
|
||||
),
|
||||
Text(
|
||||
widget.itemData['PARTSNAME'] ?? "未知地区",
|
||||
style: const TextStyle(fontSize: 16, color: Colors.black54),
|
||||
SizedBox(width: 15,),
|
||||
Expanded(
|
||||
child: Text(
|
||||
widget.itemData['PARTSNAME'] ?? "未知地区",
|
||||
style: const TextStyle(fontSize: 16, color: Colors.black54),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
|
|
@ -82,18 +82,19 @@ class _ScanPageState extends State<ScanPage> {
|
|||
}
|
||||
} else {
|
||||
// 不是 STUDENT_ID 的情况:按列表 id 匹配
|
||||
bool found = false;
|
||||
final listId = result;
|
||||
for (final item in widget.totalList) {
|
||||
if (item['LISTMANAGER_ID'] == listId) {
|
||||
found = true;
|
||||
goToList(listId: item['LISTMANAGER_ID'], listName: item['NAME']);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
ToastUtil.showError(context, '无法检查该清单');
|
||||
}
|
||||
Navigator.pop(context, result);
|
||||
// bool found = false;
|
||||
// final listId = result;
|
||||
// for (final item in widget.totalList) {
|
||||
// if (item['LISTMANAGER_ID'] == listId) {
|
||||
// found = true;
|
||||
// goToList(listId: item['LISTMANAGER_ID'], listName: item['NAME']);
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
// if (!found) {
|
||||
// ToastUtil.showError(context, '无法检查该清单');
|
||||
// }
|
||||
}
|
||||
} catch (e, st) {
|
||||
// 捕获解析或运行时错误
|
||||
|
|
|
@ -44,7 +44,7 @@ class _DangerPageState extends State<DangerPage>
|
|||
|
||||
|
||||
|
||||
|
||||
List<dynamic> allList = [];
|
||||
List<dynamic> listOne = [];
|
||||
List<dynamic> listTwo = [];
|
||||
|
||||
|
@ -97,11 +97,11 @@ class _DangerPageState extends State<DangerPage>
|
|||
listTwo.clear();
|
||||
switch(widget.type ){
|
||||
case 1://隐患排查
|
||||
appBarTitle="隐患排查清单";
|
||||
appBarTitle="隐患排查";
|
||||
_getHazardInvestigationList();
|
||||
break;
|
||||
case 2://标准排查
|
||||
appBarTitle="标准排查清单";
|
||||
appBarTitle="标准排查";
|
||||
_getStandardInvestigationList();
|
||||
break;
|
||||
// case 3://首页-待排查
|
||||
|
@ -117,6 +117,7 @@ class _DangerPageState extends State<DangerPage>
|
|||
final result = await ApiService.getHazardInvestigationList(id,searchKey);
|
||||
if (result['result'] == 'success') {
|
||||
final List<dynamic> newList = result['varList'] ?? [];
|
||||
allList.addAll(newList);
|
||||
setState(() {
|
||||
|
||||
for(int i=0;i<newList.length;i++){
|
||||
|
@ -149,6 +150,7 @@ class _DangerPageState extends State<DangerPage>
|
|||
final result = await ApiService.getStandardInvestigationList(id,searchKey);
|
||||
if (result['result'] == 'success') {
|
||||
final List<dynamic> newList = result['varList'] ?? [];
|
||||
allList.addAll(newList);
|
||||
setState(() {
|
||||
|
||||
for(int i=0;i<newList.length;i++){
|
||||
|
@ -230,7 +232,7 @@ class _DangerPageState extends State<DangerPage>
|
|||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: MyAppbar(
|
||||
title: "隐患排查",
|
||||
title: appBarTitle,
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
|
@ -427,12 +429,12 @@ class _DangerPageState extends State<DangerPage>
|
|||
Future<void> _goScan() async {
|
||||
final result = await Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(builder: (_) => ScanPage(totalList: [])),
|
||||
MaterialPageRoute(builder: (_) => ScanPage(totalList: allList)),
|
||||
);
|
||||
|
||||
dynamic item;
|
||||
for(int i=0;i<listDates.length;i++){
|
||||
final listItem= listDates[i];
|
||||
for(int i=0;i<allList.length;i++){
|
||||
final listItem= allList[i];
|
||||
String code="";
|
||||
switch(widget.type ){
|
||||
case 1://隐患排查
|
||||
|
@ -446,8 +448,11 @@ class _DangerPageState extends State<DangerPage>
|
|||
item=listItem;
|
||||
}
|
||||
}
|
||||
|
||||
_handleItemTap(item,0);
|
||||
if(item!=null) {
|
||||
_handleItemTap(item, 0);
|
||||
}else{
|
||||
ToastUtil.showNormal(context, "无法检查该清单");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -1,9 +1,13 @@
|
|||
import 'dart:io';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:open_file/open_file.dart';
|
||||
|
||||
import 'dart:convert';
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:qhd_prevention/customWidget/toast_util.dart';
|
||||
import 'package:qhd_prevention/pages/home/work/read_file_page.dart';
|
||||
import 'package:qhd_prevention/pages/home/work/risk_list_picker.dart';
|
||||
import 'package:qhd_prevention/pages/my_appbar.dart';
|
||||
|
@ -78,6 +82,34 @@ class _LawsRegulationsPage extends State<LawsRegulationsPage> {
|
|||
);
|
||||
}
|
||||
|
||||
Future<void> _downloadAndLoad(String url) async {
|
||||
try {
|
||||
|
||||
final filename = url.split('/').last;
|
||||
final dir = await getTemporaryDirectory();
|
||||
final filePath = '${dir.path}/$filename';
|
||||
|
||||
final dio = Dio();
|
||||
final response = await dio.get<List<int>>(
|
||||
url,
|
||||
options: Options(responseType: ResponseType.bytes),
|
||||
);
|
||||
final file = File(filePath);
|
||||
await file.writeAsBytes(response.data!);
|
||||
|
||||
final result = await OpenFile.open(filePath);
|
||||
if (result.type != ResultType.done) {
|
||||
ToastUtil.showNormal(context, "文件加载失败");
|
||||
}
|
||||
} catch (e) {
|
||||
// 下载或加载失败
|
||||
ToastUtil.showNormal(context, "文件加载失败");
|
||||
// ScaffoldMessenger.of(context).showSnackBar(
|
||||
// SnackBar(content: Text('文件加载失败: \$e')),
|
||||
// );
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _downloadFile(String filePath) async {
|
||||
//下载
|
||||
try {
|
||||
|
@ -94,13 +126,13 @@ class _LawsRegulationsPage extends State<LawsRegulationsPage> {
|
|||
//预览
|
||||
try {
|
||||
final url =ApiService.baseImgPath + file["FILEPATH"];
|
||||
|
||||
pushPage(
|
||||
ReadFilePage(
|
||||
fileUrl: url,
|
||||
),
|
||||
context,
|
||||
);
|
||||
_downloadAndLoad(url);
|
||||
// pushPage(
|
||||
// ReadFilePage(
|
||||
// fileUrl: url,
|
||||
// ),
|
||||
// context,
|
||||
// );
|
||||
} catch (e) {
|
||||
print(e.toString());
|
||||
}
|
||||
|
|
|
@ -1,9 +1,13 @@
|
|||
import 'dart:io';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:open_file/open_file.dart';
|
||||
|
||||
import 'dart:convert';
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:qhd_prevention/customWidget/toast_util.dart';
|
||||
import 'package:qhd_prevention/pages/home/work/read_file_page.dart';
|
||||
import 'package:qhd_prevention/pages/home/work/risk_list_picker.dart';
|
||||
import 'package:qhd_prevention/pages/my_appbar.dart';
|
||||
|
@ -57,7 +61,33 @@ class _LawsRegulationsTwoPage extends State<LawsRegulationsTwoPage> {
|
|||
}
|
||||
}
|
||||
|
||||
Future<void> _downloadAndLoad(String url) async {
|
||||
try {
|
||||
|
||||
final filename = url.split('/').last;
|
||||
final dir = await getTemporaryDirectory();
|
||||
final filePath = '${dir.path}/$filename';
|
||||
|
||||
final dio = Dio();
|
||||
final response = await dio.get<List<int>>(
|
||||
url,
|
||||
options: Options(responseType: ResponseType.bytes),
|
||||
);
|
||||
final file = File(filePath);
|
||||
await file.writeAsBytes(response.data!);
|
||||
|
||||
final result = await OpenFile.open(filePath);
|
||||
if (result.type != ResultType.done) {
|
||||
ToastUtil.showNormal(context, "文件加载失败");
|
||||
}
|
||||
} catch (e) {
|
||||
// 下载或加载失败
|
||||
ToastUtil.showNormal(context, "文件加载失败");
|
||||
// ScaffoldMessenger.of(context).showSnackBar(
|
||||
// SnackBar(content: Text('文件加载失败: \$e')),
|
||||
// );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -78,12 +108,13 @@ class _LawsRegulationsTwoPage extends State<LawsRegulationsTwoPage> {
|
|||
try {
|
||||
final url =ApiService.baseImgPath + file["FILEPATH"];
|
||||
|
||||
pushPage(
|
||||
ReadFilePage(
|
||||
fileUrl: url,
|
||||
),
|
||||
context,
|
||||
);
|
||||
_downloadAndLoad(url);
|
||||
// pushPage(
|
||||
// ReadFilePage(
|
||||
// fileUrl: url,
|
||||
// ),
|
||||
// context,
|
||||
// );
|
||||
} catch (e) {
|
||||
print(e.toString());
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import 'dart:math';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:qhd_prevention/customWidget/toast_util.dart';
|
||||
import 'package:qhd_prevention/pages/home/work_alert.dart';
|
||||
import 'package:qhd_prevention/pages/my_appbar.dart';
|
||||
import 'package:qhd_prevention/tools/tools.dart';
|
||||
|
@ -103,7 +104,8 @@ class _WorkSetPageState extends State<WorkSetPage> {
|
|||
final result = await ApiService.addRiCheng(data,title,content,id,urlPath);
|
||||
if (result['result'] == 'success') {
|
||||
setState(() {
|
||||
_showMessage('保存成功');
|
||||
ToastUtil.showNormal(context, '保存成功');
|
||||
// _showMessage('保存成功');
|
||||
String data= DateFormat('yyyy-MM-dd').format(_selectedDay);
|
||||
_getRiCheng(data,false);
|
||||
});
|
||||
|
|
|
@ -39,6 +39,8 @@ class _MineDutyApplicationPage extends State<MineDutyApplicationPage> {
|
|||
ToastUtil.showSuccess(context, '提交成功');
|
||||
widget.onClose('关闭提交'); // 触发回调
|
||||
Navigator.pop(context); // 关闭页面
|
||||
}else{
|
||||
ToastUtil.showSuccess(context, '提交失败');
|
||||
}
|
||||
} catch (e) {
|
||||
print('加载出错: $e');
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:image_picker/image_picker.dart';
|
||||
import 'package:qhd_prevention/customWidget/toast_util.dart';
|
||||
import 'dart:io';
|
||||
import '../../../../../customWidget/photo_picker_row.dart';
|
||||
import 'package:qhd_prevention/pages/my_appbar.dart';
|
||||
|
@ -296,17 +297,20 @@ class _FeedbackPageState extends State<FeedbackPage> {
|
|||
final text = _descriptionController.text.trim();
|
||||
|
||||
if (title.isEmpty ) {
|
||||
_showMessage('请填写标题');
|
||||
ToastUtil.showNormal(context, '请填写标题');
|
||||
// _showMessage('请填写标题');
|
||||
return;
|
||||
}
|
||||
|
||||
if (text.isEmpty ) {
|
||||
_showMessage('请填写问题和意见');
|
||||
ToastUtil.showNormal(context, '请填写问题和意见');
|
||||
// _showMessage('请填写问题和意见');
|
||||
return;
|
||||
}
|
||||
|
||||
if (_images.isEmpty) {
|
||||
_showMessage('请上传隐患图片');
|
||||
ToastUtil.showNormal(context, '请上传相关图片');
|
||||
// _showMessage('请上传隐患图片');
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -373,11 +377,13 @@ class _FeedbackPageState extends State<FeedbackPage> {
|
|||
final raw = await ApiService.setFeedBack(title,text,num,imagePaths);
|
||||
|
||||
if (raw['result'] == 'success') {
|
||||
ToastUtil.showNormal(context, '反馈提交成功');
|
||||
Navigator.pop(context); // 关闭加载对话框
|
||||
_showMessage('反馈提交成功');
|
||||
// _showMessage('反馈提交成功');
|
||||
|
||||
}else{
|
||||
_showMessage('反馈提交失败');
|
||||
ToastUtil.showNormal(context, '反馈提交失败');
|
||||
// _showMessage('反馈提交失败');
|
||||
}
|
||||
|
||||
} catch (e) {
|
||||
|
|
|
@ -120,8 +120,9 @@ class _MinePageState extends State<MinePage> {
|
|||
GestureDetector(
|
||||
child: _setItemWidget("离岗"),
|
||||
onTap: () async {
|
||||
|
||||
LoadingDialogHelper.show();
|
||||
bool isRest= await _getIsRest();
|
||||
LoadingDialogHelper.hide();
|
||||
if(isRest){
|
||||
ToastUtil.showNormal(context, "您已经处于离岗状态中");
|
||||
return;
|
||||
|
|
|
@ -2,6 +2,7 @@ import 'dart:convert';
|
|||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:qhd_prevention/customWidget/custom_button.dart';
|
||||
import 'package:qhd_prevention/customWidget/toast_util.dart';
|
||||
import 'package:qhd_prevention/pages/my_appbar.dart';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
|
@ -36,25 +37,47 @@ class _MineSetPwdPageState extends State<MineSetPwdPage> {
|
|||
final newPwd = _newPwdController.text.trim();
|
||||
final confirmPwd = _confirmPwdController.text.trim();
|
||||
|
||||
if (oldPwd.isEmpty || newPwd.isEmpty || confirmPwd.isEmpty) {
|
||||
_showMessage('请填写完整所有字段');
|
||||
if (oldPwd.isEmpty) {
|
||||
ToastUtil.showNormal(context, '请填写旧密码');
|
||||
// _showMessage('请填写旧密码');
|
||||
return;
|
||||
}
|
||||
|
||||
if (newPwd.isEmpty) {
|
||||
ToastUtil.showNormal(context, '请填写新密码');
|
||||
// _showMessage('请填写新密码');
|
||||
return;
|
||||
}
|
||||
|
||||
if (confirmPwd.isEmpty) {
|
||||
ToastUtil.showNormal(context, '请填写确认新密码');
|
||||
// _showMessage('请填写确认新密码');
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// if (oldPwd.isEmpty || newPwd.isEmpty || confirmPwd.isEmpty) {
|
||||
// _showMessage('请填写完整所有字段');
|
||||
// return;
|
||||
// }
|
||||
|
||||
if (newPwd != confirmPwd) {
|
||||
_showMessage('新密码与确认密码不一致');
|
||||
ToastUtil.showNormal(context, '新密码与确认密码不一致');
|
||||
// _showMessage('新密码与确认密码不一致');
|
||||
return;
|
||||
}
|
||||
|
||||
final RegExp regex = RegExp(r'^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{6,18}$');
|
||||
if (regex.hasMatch(newPwd)) {
|
||||
_showMessage('密码长度为6-18位,必须包含大小字母,小写字母数字和特殊符号。');
|
||||
ToastUtil.showNormal(context, '密码长度为6-18位,必须包含大小字母,小写字母数字和特殊符号。');
|
||||
// _showMessage('密码长度为6-18位,必须包含大小字母,小写字母数字和特殊符号。');
|
||||
return;
|
||||
}
|
||||
|
||||
// 示例验证:密码复杂度(实际可用正则加强)
|
||||
if (newPwd.length < 8 || newPwd.length > 18) {
|
||||
_showMessage('密码长度需在8-18位之间');
|
||||
ToastUtil.showNormal(context, '密码长度需在8-18位之间');
|
||||
// _showMessage('密码长度需在8-18位之间');
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -138,7 +161,8 @@ class _MineSetPwdPageState extends State<MineSetPwdPage> {
|
|||
// final hidCount = raw['hidCount'] as Map<String, dynamic>;
|
||||
// print(hidCount);
|
||||
if (raw['result'] == 'success') {
|
||||
_showMessage('密码修改成功'); // 这里换成实际调用接口逻辑
|
||||
ToastUtil.showNormal(context, '密码修改成功');
|
||||
// _showMessage('密码修改成功'); // 这里换成实际调用接口逻辑
|
||||
Navigator.pop(context,true);
|
||||
|
||||
// 清除用户登录状态
|
||||
|
@ -151,13 +175,15 @@ class _MineSetPwdPageState extends State<MineSetPwdPage> {
|
|||
);
|
||||
|
||||
}else{
|
||||
_showMessage('密码修改失败');
|
||||
ToastUtil.showNormal(context, '密码修改失败');
|
||||
// _showMessage('密码修改失败');
|
||||
}
|
||||
|
||||
} catch (e) {
|
||||
// 出错时可以 Toast 或者在页面上显示错误状态
|
||||
print('加载首页数据失败:$e');
|
||||
_showMessage('密码修改失败');
|
||||
ToastUtil.showNormal(context, '密码修改失败');
|
||||
// _showMessage('密码修改失败');
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -22,6 +22,7 @@ class _NotifPageState extends State<NotifPage>
|
|||
late TabController _tabController;
|
||||
int _selectedTab = 0;
|
||||
int pageNum = 1;
|
||||
String keyWord="";
|
||||
|
||||
// 模拟数据
|
||||
final List<Map<String, dynamic>> _notifications = List.generate(10, (i) {
|
||||
|
@ -45,25 +46,26 @@ class _NotifPageState extends State<NotifPage>
|
|||
if (_tabController.indexIsChanging) {
|
||||
setState(() => _selectedTab = _tabController.index);
|
||||
print('切换到标签:${_tabController.index}');
|
||||
searchController.text = "";
|
||||
keyWord="";
|
||||
reRefreshData();
|
||||
}
|
||||
});
|
||||
|
||||
_getNotifList("");
|
||||
_getNotifList();
|
||||
}
|
||||
|
||||
void reRefreshData() {
|
||||
pageNum = 1;
|
||||
_list.clear();
|
||||
searchController.text = "";
|
||||
if (0 == _selectedTab) {
|
||||
_getNotifList("");
|
||||
_getNotifList();
|
||||
} else {
|
||||
_getNotifEnterprise("");
|
||||
_getNotifEnterprise();
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _getNotifList(String keyWord) async {
|
||||
Future<void> _getNotifList() async {
|
||||
LoadingDialogHelper.show();
|
||||
try {
|
||||
final result = await ApiService.getNotifList(
|
||||
|
@ -87,7 +89,7 @@ class _NotifPageState extends State<NotifPage>
|
|||
}
|
||||
}
|
||||
|
||||
Future<void> _getNotifEnterprise(String keyWord) async {
|
||||
Future<void> _getNotifEnterprise() async {
|
||||
// LoadingDialogHelper.show();
|
||||
try {
|
||||
final result = await ApiService.getNotifEnterprise(
|
||||
|
@ -166,10 +168,11 @@ class _NotifPageState extends State<NotifPage>
|
|||
// String word="整改";
|
||||
pageNum = 1;
|
||||
_list.clear();
|
||||
keyWord=keyword;
|
||||
if (0 == _selectedTab) {
|
||||
_getNotifList(keyword);
|
||||
_getNotifList();
|
||||
} else {
|
||||
_getNotifEnterprise(keyword);
|
||||
_getNotifEnterprise();
|
||||
}
|
||||
},
|
||||
),
|
||||
|
|
|
@ -114,7 +114,7 @@ dependencies:
|
|||
video_compress: ^3.1.4
|
||||
#息屏处理
|
||||
wakelock_plus: ^1.3.2
|
||||
|
||||
open_file: ^3.2.1
|
||||
|
||||
|
||||
dev_dependencies:
|
||||
|
|
Loading…
Reference in New Issue