2026-05-19 17:39:46 +08:00
|
|
|
|
import 'dart:convert';
|
|
|
|
|
|
|
|
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
|
|
import 'package:intl/intl.dart';
|
|
|
|
|
|
import 'package:qhd_prevention/customWidget/ItemWidgetFactory.dart';
|
|
|
|
|
|
import 'package:qhd_prevention/customWidget/MultiDictValuesPicker.dart';
|
|
|
|
|
|
import 'package:qhd_prevention/customWidget/bottom_picker_two.dart';
|
|
|
|
|
|
import 'package:qhd_prevention/customWidget/department_person_picker.dart';
|
|
|
|
|
|
import 'package:qhd_prevention/customWidget/department_picker.dart';
|
|
|
|
|
|
import 'package:qhd_prevention/customWidget/department_picker_three.dart';
|
|
|
|
|
|
import 'package:qhd_prevention/customWidget/department_picker_two.dart';
|
|
|
|
|
|
import 'package:qhd_prevention/customWidget/item_list_widget.dart';
|
|
|
|
|
|
import 'package:qhd_prevention/customWidget/toast_util.dart';
|
|
|
|
|
|
import 'package:qhd_prevention/http/ApiService.dart';
|
|
|
|
|
|
|
|
|
|
|
|
import 'package:webview_flutter/webview_flutter.dart';
|
|
|
|
|
|
import '../../../customWidget/bottom_picker.dart';
|
|
|
|
|
|
import '../../../tools/h_colors.dart';
|
|
|
|
|
|
import '/customWidget/custom_button.dart';
|
|
|
|
|
|
import '../../../tools/tools.dart';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// 自定义抽屉
|
|
|
|
|
|
class HiddenDangerDeawer extends StatefulWidget {
|
|
|
|
|
|
const HiddenDangerDeawer(this.searchData, {super.key,required this.onClose});
|
|
|
|
|
|
|
|
|
|
|
|
final Function(Map<String, dynamic>) onClose; // 回调函数
|
|
|
|
|
|
final Map<String, dynamic> searchData;
|
|
|
|
|
|
// final DangerWaitBean waitBean;
|
|
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
|
_HiddenDangerDeawerState createState() => _HiddenDangerDeawerState();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
class _HiddenDangerDeawerState extends State<HiddenDangerDeawer> {
|
|
|
|
|
|
|
|
|
|
|
|
Map<String, dynamic> allData={};
|
|
|
|
|
|
|
|
|
|
|
|
DateTime? _startDate;
|
|
|
|
|
|
DateTime? _endDate;
|
|
|
|
|
|
|
|
|
|
|
|
// 存储各单位的人员列表
|
|
|
|
|
|
List<Map<String, dynamic>> _personCache = [];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 转换为List<Map<String, dynamic>>
|
|
|
|
|
|
late List<Map<String, dynamic>> departmentList ;
|
|
|
|
|
|
late List<dynamic> _HazardPersonlist = [];
|
|
|
|
|
|
dynamic _hazardLeve;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// final List<String> investigationMethod = ["隐患快报", "隐患排查", "标准排查", "专项检查", "安全检查"];
|
|
|
|
|
|
final List<String> investigationMethod = ["风险排查隐患", "隐患排查隐患"];
|
|
|
|
|
|
final List<String> hazardLevel = [" 一般风险 ", " 重大风险 "];
|
|
|
|
|
|
final List<String> dangerStatus = ["未整改", "已整改", "已验收", "已过期"];
|
|
|
|
|
|
final List<String> laiYuanStatus = ["隐患快报", "隐患排查", "标准排查", "专项检查", "安全检查", "NFC设备巡检"];
|
|
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
|
void initState() {
|
|
|
|
|
|
// TODO: implement initState
|
|
|
|
|
|
super.initState();
|
|
|
|
|
|
|
|
|
|
|
|
setState(() {
|
|
|
|
|
|
allData=widget.searchData;
|
|
|
|
|
|
if(allData['beginTIme']!=''){
|
|
|
|
|
|
_startDate= DateTime.parse(allData['beginTIme']);
|
|
|
|
|
|
}
|
|
|
|
|
|
if(allData['endTime']!='') {
|
|
|
|
|
|
_endDate = DateTime.parse(allData['endTime']);
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
// if(allData['findUserName']==''){
|
|
|
|
|
|
// _getUserData();
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
|
|
|
|
|
|
|
|
return SafeArea(
|
|
|
|
|
|
child:
|
|
|
|
|
|
// SingleChildScrollView( // 添加这一行
|
|
|
|
|
|
// child:
|
|
|
|
|
|
Padding(
|
|
|
|
|
|
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 15),
|
|
|
|
|
|
child: Column(
|
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
|
children: [
|
|
|
|
|
|
|
|
|
|
|
|
const Text(
|
|
|
|
|
|
"高级查询",
|
|
|
|
|
|
style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
|
|
|
|
const Divider(height: 20, color: Colors.grey),
|
|
|
|
|
|
|
|
|
|
|
|
// 开始时间 - 结束时间 —— //
|
|
|
|
|
|
Column(
|
|
|
|
|
|
children: [
|
|
|
|
|
|
_buildDatePickerBox(
|
|
|
|
|
|
label: "隐患发现开始时间",
|
|
|
|
|
|
date: _startDate,
|
|
|
|
|
|
onTap: _pickStartDate,
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
|
|
|
|
const SizedBox(height: 10),
|
|
|
|
|
|
|
|
|
|
|
|
_buildDatePickerBox(
|
|
|
|
|
|
label: "隐患发现结束时间",
|
|
|
|
|
|
date: _endDate,
|
|
|
|
|
|
onTap: _pickEndDate,
|
|
|
|
|
|
),
|
|
|
|
|
|
],
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
|
|
|
|
const SizedBox(height: 10),
|
|
|
|
|
|
|
|
|
|
|
|
Column(
|
|
|
|
|
|
children: [
|
|
|
|
|
|
GestureDetector(
|
|
|
|
|
|
onTap: () {
|
|
|
|
|
|
showModalBottomSheet(
|
|
|
|
|
|
context: context,
|
|
|
|
|
|
isScrollControlled: true,
|
|
|
|
|
|
barrierColor: Colors.black54,
|
|
|
|
|
|
backgroundColor: Colors.transparent,
|
|
|
|
|
|
builder:
|
|
|
|
|
|
(ctx) => DepartmentPickerTwo(
|
|
|
|
|
|
onSelected: (id, name,pdId) async {
|
|
|
|
|
|
setState(() {
|
|
|
|
|
|
|
|
|
|
|
|
allData['buMenId']= id;
|
|
|
|
|
|
allData['buMenName']= name;
|
|
|
|
|
|
|
|
|
|
|
|
allData['findUserId']= "";
|
|
|
|
|
|
allData['findUserName']= "";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
// 拉取该单位的人员列表并缓存
|
|
|
|
|
|
final result = await HiddenDangerApi.getListTreePersonList(id);
|
|
|
|
|
|
_personCache=List<Map<String, dynamic>>.from(
|
|
|
|
|
|
result['data'] as List,
|
|
|
|
|
|
);
|
|
|
|
|
|
},
|
|
|
|
|
|
),
|
|
|
|
|
|
);
|
|
|
|
|
|
},
|
|
|
|
|
|
child: _buildSectionContainer(
|
|
|
|
|
|
child: ListItemFactory.createRowSpaceBetweenItem(
|
|
|
|
|
|
isRequired:false,
|
|
|
|
|
|
leftText: "隐患发现部门",
|
|
|
|
|
|
rightText: allData['buMenName'].isNotEmpty ? allData['buMenName'] : "请选择",
|
|
|
|
|
|
isRight: true,
|
|
|
|
|
|
),
|
|
|
|
|
|
),
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const SizedBox(height: 10),
|
|
|
|
|
|
|
|
|
|
|
|
// GestureDetector(
|
|
|
|
|
|
// onTap: () async {
|
|
|
|
|
|
// if(_personCache.isEmpty){
|
|
|
|
|
|
// // 拉取该单位的人员列表并缓存
|
|
|
|
|
|
// final result = await HiddenDangerApi.getListTreePersonList(allData['buMenId']);
|
|
|
|
|
|
// _personCache=List<Map<String, dynamic>>.from(
|
|
|
|
|
|
// result['data'] as List,
|
|
|
|
|
|
// );
|
|
|
|
|
|
// }
|
|
|
|
|
|
// if ( allData['buMenName'].isEmpty) {
|
|
|
|
|
|
// ToastUtil.showNormal(context, '请先选择部门');
|
|
|
|
|
|
// return;
|
|
|
|
|
|
// }
|
|
|
|
|
|
// DepartmentPersonPicker.show(
|
|
|
|
|
|
// context,
|
|
|
|
|
|
// personsData: _personCache,
|
|
|
|
|
|
// onSelected: (userId, name) {
|
|
|
|
|
|
// setState(() {
|
|
|
|
|
|
//
|
|
|
|
|
|
// allData['findUserId']= userId;
|
|
|
|
|
|
// allData['findUserName']= name;
|
|
|
|
|
|
//
|
|
|
|
|
|
// });
|
|
|
|
|
|
//
|
|
|
|
|
|
// },
|
|
|
|
|
|
// );
|
|
|
|
|
|
// },
|
|
|
|
|
|
// child:Container(
|
|
|
|
|
|
// padding: EdgeInsets.symmetric(horizontal: 0),
|
|
|
|
|
|
// decoration: BoxDecoration(
|
|
|
|
|
|
// borderRadius: BorderRadius.circular(4),
|
|
|
|
|
|
// border: Border.all(color: Colors.grey.shade400),
|
|
|
|
|
|
// color: Colors.white,
|
|
|
|
|
|
// ),
|
|
|
|
|
|
// child: ListItemFactory.createRowSpaceBetweenItem(
|
|
|
|
|
|
// isRequired:false,
|
|
|
|
|
|
// leftText: "隐患发现人",
|
|
|
|
|
|
// rightText: allData['findUserName'].isNotEmpty?allData['findUserName']:"请选择",
|
|
|
|
|
|
// isRight: true,
|
|
|
|
|
|
// ),
|
|
|
|
|
|
// ),
|
|
|
|
|
|
// ),
|
|
|
|
|
|
|
|
|
|
|
|
Container(
|
|
|
|
|
|
padding: EdgeInsets.symmetric(horizontal: 0),
|
|
|
|
|
|
decoration: BoxDecoration(
|
|
|
|
|
|
borderRadius: BorderRadius.circular(4),
|
|
|
|
|
|
border: Border.all(color: Colors.grey.shade400),
|
|
|
|
|
|
color: Colors.white,
|
|
|
|
|
|
),
|
|
|
|
|
|
child: ItemListWidget.singleLineTitleText(
|
|
|
|
|
|
label: '隐患发现人',
|
|
|
|
|
|
isEditable: true,
|
|
|
|
|
|
isRequired:false,
|
|
|
|
|
|
isTextFont:false,
|
|
|
|
|
|
hintText: '',
|
|
|
|
|
|
text: allData['confirmUserName'] ?? '',
|
|
|
|
|
|
onChanged: (value) {
|
|
|
|
|
|
setState(() {
|
|
|
|
|
|
allData['confirmUserName'] = value;
|
|
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
},
|
|
|
|
|
|
),
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
],
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const SizedBox(height: 10),
|
2026-05-21 16:23:51 +08:00
|
|
|
|
Container(
|
|
|
|
|
|
padding: EdgeInsets.symmetric(horizontal: 0),
|
|
|
|
|
|
decoration: BoxDecoration(
|
|
|
|
|
|
borderRadius: BorderRadius.circular(4),
|
|
|
|
|
|
border: Border.all(color: Colors.grey.shade400),
|
|
|
|
|
|
color: Colors.white,
|
|
|
|
|
|
),
|
|
|
|
|
|
child: ItemListWidget.singleLineTitleText(
|
|
|
|
|
|
label: '隐患确认人',
|
|
|
|
|
|
isEditable: true,
|
|
|
|
|
|
isRequired:false,
|
|
|
|
|
|
isTextFont:false,
|
|
|
|
|
|
hintText: '',
|
|
|
|
|
|
text: allData['trueUserName'] ?? '',
|
|
|
|
|
|
onChanged: (value) {
|
2026-05-19 17:39:46 +08:00
|
|
|
|
setState(() {
|
2026-05-21 16:23:51 +08:00
|
|
|
|
allData['trueUserName'] = value;
|
2026-05-19 17:39:46 +08:00
|
|
|
|
|
|
|
|
|
|
});
|
2026-05-21 16:23:51 +08:00
|
|
|
|
},
|
2026-05-19 17:39:46 +08:00
|
|
|
|
),
|
|
|
|
|
|
),
|
2026-05-21 16:23:51 +08:00
|
|
|
|
// GestureDetector(
|
|
|
|
|
|
// onTap: () async {
|
|
|
|
|
|
//
|
|
|
|
|
|
// if(_HazardPersonlist.isEmpty){
|
|
|
|
|
|
// await _getHazardPersonlist();
|
|
|
|
|
|
// }
|
|
|
|
|
|
// String choice = await BottomPickerTwo.show<String>(
|
|
|
|
|
|
// context,
|
|
|
|
|
|
// items: _HazardPersonlist,
|
|
|
|
|
|
// itemName: "name",
|
|
|
|
|
|
// itemBuilder: (item) => Text(item["name"], textAlign: TextAlign.center),
|
|
|
|
|
|
// initialIndex: 0,
|
|
|
|
|
|
// );
|
|
|
|
|
|
// if (choice != null) {
|
|
|
|
|
|
// for(int i=0;i<_HazardPersonlist.length;i++){
|
|
|
|
|
|
// if(choice==_HazardPersonlist[i]["name"]){
|
|
|
|
|
|
// _hazardLeve = _HazardPersonlist[i];
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
//
|
|
|
|
|
|
// setState(() {
|
|
|
|
|
|
// allData['trueUserId']=_hazardLeve["userId"];
|
|
|
|
|
|
// allData['trueUserName']=_hazardLeve["name"];
|
|
|
|
|
|
//
|
|
|
|
|
|
// // addData['confirmDeptId']=_hazardLeve["deptId"];
|
|
|
|
|
|
// // addData['confirmDeptName']=_hazardLeve["deptName"];
|
|
|
|
|
|
//
|
|
|
|
|
|
// });
|
|
|
|
|
|
// }
|
|
|
|
|
|
// },
|
|
|
|
|
|
// child:Container(
|
|
|
|
|
|
// padding: EdgeInsets.symmetric(horizontal: 0),
|
|
|
|
|
|
// decoration: BoxDecoration(
|
|
|
|
|
|
// borderRadius: BorderRadius.circular(4),
|
|
|
|
|
|
// border: Border.all(color: Colors.grey.shade400),
|
|
|
|
|
|
// color: Colors.white,
|
|
|
|
|
|
// ),
|
|
|
|
|
|
// child: ListItemFactory.createRowSpaceBetweenItem(
|
|
|
|
|
|
// isRequired:false,
|
|
|
|
|
|
// leftText: "隐患确认人",
|
|
|
|
|
|
// rightText: allData['trueUserName'].isNotEmpty?allData['trueUserName']:"请选择",
|
|
|
|
|
|
// isRight: true,
|
|
|
|
|
|
// ),
|
|
|
|
|
|
// ),
|
|
|
|
|
|
// ),
|
2026-05-19 17:39:46 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const SizedBox(height: 10),
|
|
|
|
|
|
GestureDetector(
|
|
|
|
|
|
onTap: () {
|
|
|
|
|
|
_getHiddenDangerType();
|
|
|
|
|
|
},
|
|
|
|
|
|
child: _buildSectionContainer(
|
|
|
|
|
|
child: ListItemFactory.createRowSpaceBetweenItem(
|
|
|
|
|
|
isRequired:false,
|
|
|
|
|
|
leftText: "隐患类型",
|
|
|
|
|
|
rightText: allData['hiddenTypeName'].isNotEmpty?allData['hiddenTypeName']:"请选择",
|
|
|
|
|
|
isRight: true,
|
|
|
|
|
|
),
|
|
|
|
|
|
),
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Expanded(child: SizedBox(height: 20),),
|
|
|
|
|
|
Row(
|
|
|
|
|
|
children: [
|
|
|
|
|
|
Flexible(
|
|
|
|
|
|
flex: 1,
|
|
|
|
|
|
child: CustomButton(
|
|
|
|
|
|
text: "重置",
|
|
|
|
|
|
buttonStyle:ButtonStyleType.secondary,
|
|
|
|
|
|
backgroundColor: h_backGroundColor(),
|
|
|
|
|
|
textStyle: const TextStyle(color: Colors.black45),
|
|
|
|
|
|
onPressed: () {
|
|
|
|
|
|
setState(() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_startDate = null;
|
|
|
|
|
|
_endDate = null;
|
|
|
|
|
|
|
|
|
|
|
|
allData={
|
|
|
|
|
|
"beginTIme": "",
|
|
|
|
|
|
"endTime": "",
|
|
|
|
|
|
"buMenId": "",
|
|
|
|
|
|
"buMenName": "",
|
|
|
|
|
|
"findUserId": "",
|
|
|
|
|
|
"findUserName": "",
|
|
|
|
|
|
"trueUserId": "",
|
|
|
|
|
|
"trueUserName": "",
|
|
|
|
|
|
"type": "",
|
|
|
|
|
|
'hiddenTypeName': "",
|
|
|
|
|
|
'confirmUserName': "",
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
setResult();
|
|
|
|
|
|
// widget.onClose("","","","","","","");
|
|
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
},
|
|
|
|
|
|
),
|
|
|
|
|
|
),
|
|
|
|
|
|
const SizedBox(width: 12),
|
|
|
|
|
|
Flexible(
|
|
|
|
|
|
flex: 2,
|
|
|
|
|
|
child: CustomButton(
|
|
|
|
|
|
text: "完成",
|
|
|
|
|
|
backgroundColor: Colors.blue,
|
|
|
|
|
|
onPressed: () {
|
|
|
|
|
|
setResult();
|
|
|
|
|
|
// TODO: 提交筛选条件
|
|
|
|
|
|
Navigator.pop(context); // 关闭加载对话框
|
|
|
|
|
|
},
|
|
|
|
|
|
),
|
|
|
|
|
|
),
|
|
|
|
|
|
],
|
|
|
|
|
|
),
|
|
|
|
|
|
],
|
|
|
|
|
|
),
|
|
|
|
|
|
),
|
|
|
|
|
|
// ),
|
|
|
|
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Widget _buildSectionContainer({required Widget child}) {
|
|
|
|
|
|
return Container(
|
|
|
|
|
|
margin: const EdgeInsets.only(top: 1),
|
|
|
|
|
|
decoration: BoxDecoration(
|
|
|
|
|
|
borderRadius: BorderRadius.circular(4),
|
|
|
|
|
|
border: Border.all(color: Colors.grey.shade400),
|
|
|
|
|
|
color: Colors.white,
|
|
|
|
|
|
),
|
|
|
|
|
|
// color: Colors.white,
|
|
|
|
|
|
padding: const EdgeInsets.symmetric(horizontal: 0, vertical: 0),
|
|
|
|
|
|
child: child,
|
|
|
|
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Future<void> _pickStartDate() async {
|
|
|
|
|
|
final now = DateTime.now();
|
|
|
|
|
|
final picked = await showDatePicker(
|
|
|
|
|
|
context: context,
|
|
|
|
|
|
initialDate: _startDate ?? now,
|
|
|
|
|
|
firstDate: DateTime(now.year - 5),
|
|
|
|
|
|
lastDate: DateTime(now.year + 5),
|
|
|
|
|
|
);
|
|
|
|
|
|
if (picked != null) {
|
|
|
|
|
|
setState(() {
|
|
|
|
|
|
|
|
|
|
|
|
_startDate = picked;
|
|
|
|
|
|
final dateFormat = DateFormat('yyyy-MM-dd');
|
|
|
|
|
|
allData['beginTIme']=dateFormat.format(picked);
|
|
|
|
|
|
|
|
|
|
|
|
// 保证开始 <= 结束
|
|
|
|
|
|
if (_endDate != null && _endDate!.isBefore(picked)) {
|
|
|
|
|
|
_endDate = null;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// setResult();
|
|
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Future<void> _pickEndDate() async {
|
|
|
|
|
|
final now = DateTime.now();
|
|
|
|
|
|
final initial = _endDate ??
|
|
|
|
|
|
(_startDate != null && _startDate!.isAfter(now)
|
|
|
|
|
|
? _startDate!
|
|
|
|
|
|
: now);
|
|
|
|
|
|
final picked = await showDatePicker(
|
|
|
|
|
|
context: context,
|
|
|
|
|
|
initialDate: initial,
|
|
|
|
|
|
firstDate: _startDate ?? DateTime(now.year - 5),
|
|
|
|
|
|
lastDate: DateTime(now.year + 5),
|
|
|
|
|
|
);
|
|
|
|
|
|
if (picked != null) {
|
|
|
|
|
|
setState(() {
|
|
|
|
|
|
_endDate = picked;
|
|
|
|
|
|
|
|
|
|
|
|
final dateFormat = DateFormat('yyyy-MM-dd');
|
|
|
|
|
|
allData['endTime']=dateFormat.format(picked);
|
|
|
|
|
|
|
|
|
|
|
|
// setResult();
|
|
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Widget _buildDatePickerBox({
|
|
|
|
|
|
required String label,
|
|
|
|
|
|
DateTime? date,
|
|
|
|
|
|
required VoidCallback onTap,
|
|
|
|
|
|
}) {
|
|
|
|
|
|
final display = date != null
|
|
|
|
|
|
? "${date.year.toString().padLeft(4, '0')}-${date.month.toString().padLeft(2, '0')}-${date.day.toString().padLeft(2, '0')}"
|
|
|
|
|
|
: label;
|
|
|
|
|
|
return GestureDetector(
|
|
|
|
|
|
onTap: onTap,
|
|
|
|
|
|
child: Container(
|
|
|
|
|
|
height: 35,
|
|
|
|
|
|
padding: const EdgeInsets.symmetric(horizontal: 5),
|
|
|
|
|
|
decoration: BoxDecoration(
|
|
|
|
|
|
borderRadius: BorderRadius.circular(4),
|
|
|
|
|
|
border: Border.all(color: Colors.grey.shade400),
|
|
|
|
|
|
color: Colors.white,
|
|
|
|
|
|
),
|
|
|
|
|
|
child: Row(
|
|
|
|
|
|
children: [
|
|
|
|
|
|
const Icon(Icons.calendar_today, size: 18, color: Colors.grey),
|
|
|
|
|
|
const SizedBox(width: 6),
|
|
|
|
|
|
Text(display, style: const TextStyle(fontSize: 14, color: Colors.black38)),
|
|
|
|
|
|
],
|
|
|
|
|
|
),
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Future<void> _getHiddenDangerType() async {
|
|
|
|
|
|
|
|
|
|
|
|
showModalBottomSheet(
|
|
|
|
|
|
context: context,
|
|
|
|
|
|
isScrollControlled: true,
|
|
|
|
|
|
barrierColor: Colors.black54,
|
|
|
|
|
|
backgroundColor: Colors.transparent,
|
|
|
|
|
|
builder:
|
|
|
|
|
|
(_) => MultiDictValuesPicker(
|
|
|
|
|
|
title: '隐患类型',
|
|
|
|
|
|
dictType: 'hiddenType',
|
|
|
|
|
|
allowSelectParent: false,
|
|
|
|
|
|
onSelected: (id, name, extraData) {
|
|
|
|
|
|
setState(() {
|
|
|
|
|
|
allData['type'] = extraData?['dictValue'];
|
|
|
|
|
|
allData['hiddenTypeName'] = name;
|
|
|
|
|
|
|
|
|
|
|
|
//顶层
|
|
|
|
|
|
// allData['hiddenType2'] = extraData?['dingValue'];
|
|
|
|
|
|
// allData['hiddenType2Name'] = extraData?['dingName'];
|
|
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
},
|
|
|
|
|
|
),
|
|
|
|
|
|
).then((_) {
|
|
|
|
|
|
// 可选:FocusHelper.clearFocus(context);
|
|
|
|
|
|
});
|
|
|
|
|
|
// try {
|
|
|
|
|
|
// LoadingDialogHelper.show();
|
|
|
|
|
|
// final raw = await HiddenDangerApi.getHiddenDangerType( );
|
|
|
|
|
|
// if (raw['success'] ) {
|
|
|
|
|
|
// final newList = raw['data'] ?? [];
|
|
|
|
|
|
// LoadingDialogHelper.hide();
|
|
|
|
|
|
//
|
|
|
|
|
|
// for(int i=0;i<newList.length;i++){
|
|
|
|
|
|
// newList[i]["dataId"] = newList[i]["id"];
|
|
|
|
|
|
// newList[i]["dataName"] = newList[i]["dictLabel"];
|
|
|
|
|
|
//
|
|
|
|
|
|
// if(newList[i]['children']!=null&&newList[i]['children'].isNotEmpty){
|
|
|
|
|
|
// for(int m=0;m<newList[i]["children"].length;m++){
|
|
|
|
|
|
// newList[i]["children"][m]["dataId"] = newList[i]["children"][m]["id"];
|
|
|
|
|
|
// newList[i]["children"][m]["dataName"] = newList[i]["children"][m]["dictLabel"];
|
|
|
|
|
|
//
|
|
|
|
|
|
// if(newList[i]['children'][m]['children']!=null&&newList[i]['children'][m]['children'].isNotEmpty){
|
|
|
|
|
|
// for(int n=0;n<newList[i]["children"][m]['children'].length;n++){
|
|
|
|
|
|
// newList[i]["children"][m]['children'][n]["dataId"] = newList[i]["children"][m]['children'][n]["id"];
|
|
|
|
|
|
// newList[i]["children"][m]['children'][n]["dataName"] = newList[i]["children"][m]['children'][n]["dictLabel"];
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
//
|
|
|
|
|
|
//
|
|
|
|
|
|
// showModalBottomSheet(
|
|
|
|
|
|
// context: context,
|
|
|
|
|
|
// isScrollControlled: true,
|
|
|
|
|
|
// barrierColor: Colors.black54,
|
|
|
|
|
|
// backgroundColor: Colors.transparent,
|
|
|
|
|
|
// builder: (ctx) => DepartmentPickerThree(
|
|
|
|
|
|
// listdata: newList,
|
|
|
|
|
|
// onSelected: (id, name,pdId) async {
|
|
|
|
|
|
// setState(() {
|
|
|
|
|
|
// allData['type']=id;
|
|
|
|
|
|
// allData['hiddenTypeName']=name;
|
|
|
|
|
|
//
|
|
|
|
|
|
// });
|
|
|
|
|
|
//
|
|
|
|
|
|
// },
|
|
|
|
|
|
// ),
|
|
|
|
|
|
// );
|
|
|
|
|
|
//
|
|
|
|
|
|
// }else{
|
|
|
|
|
|
// ToastUtil.showNormal(context, "获取列表失败");
|
|
|
|
|
|
// LoadingDialogHelper.hide();
|
|
|
|
|
|
// }
|
|
|
|
|
|
//
|
|
|
|
|
|
// } catch (e) {
|
|
|
|
|
|
// // 出错时可以 Toast 或者在页面上显示错误状态
|
|
|
|
|
|
// print('加载首页数据失败:$e');
|
|
|
|
|
|
// LoadingDialogHelper.hide();
|
|
|
|
|
|
// }
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Future<void> _getUserData() async {
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
|
|
|
|
final raw = await AuthApi.getUserData( );
|
|
|
|
|
|
if (raw['success'] ) {
|
|
|
|
|
|
|
|
|
|
|
|
setState(() {
|
|
|
|
|
|
allData['findUserId']=raw['data']['id'];
|
|
|
|
|
|
allData['findUserName']=raw['data']['name'];
|
|
|
|
|
|
allData['buMenId']=raw['data']['departmentId'];
|
|
|
|
|
|
allData['buMenName']=raw['data']['departmentName'];
|
|
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
}else{
|
|
|
|
|
|
ToastUtil.showNormal(context, "获取个人信息失败");
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
} catch (e) {
|
|
|
|
|
|
// 出错时可以 Toast 或者在页面上显示错误状态
|
|
|
|
|
|
print('加载首页数据失败:$e');
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Future<void> _getHazardPersonlist() async {
|
|
|
|
|
|
try {
|
|
|
|
|
|
LoadingDialogHelper.show();
|
|
|
|
|
|
final raw = await HiddenDangerApi.getHazardPersonlist( );
|
|
|
|
|
|
if (raw['success'] ) {
|
|
|
|
|
|
_HazardPersonlist = raw['data'] ?? [];
|
|
|
|
|
|
LoadingDialogHelper.hide();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}else{
|
|
|
|
|
|
ToastUtil.showNormal(context, "获取列表失败");
|
|
|
|
|
|
LoadingDialogHelper.hide();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
} catch (e) {
|
|
|
|
|
|
// 出错时可以 Toast 或者在页面上显示错误状态
|
|
|
|
|
|
print('加载首页数据失败:$e');
|
|
|
|
|
|
LoadingDialogHelper.hide();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void setResult(){
|
|
|
|
|
|
widget.onClose(
|
|
|
|
|
|
allData
|
|
|
|
|
|
); // 触发回调
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|