390 lines
12 KiB
Dart
390 lines
12 KiB
Dart
import 'dart:ui';
|
||
|
||
import 'package:flutter/material.dart';
|
||
import 'package:qhd_prevention/customWidget/danner_repain_item.dart';
|
||
import 'package:qhd_prevention/customWidget/department_picker.dart';
|
||
import 'package:qhd_prevention/customWidget/search_bar_widget.dart';
|
||
import 'package:qhd_prevention/customWidget/toast_util.dart';
|
||
import 'package:qhd_prevention/http/ApiService.dart';
|
||
import 'package:qhd_prevention/pages/home/scan_page.dart';
|
||
import 'package:qhd_prevention/pages/home/work/risk_list_page.dart';
|
||
import 'package:qhd_prevention/pages/my_appbar.dart';
|
||
import 'package:qhd_prevention/tools/SmallWidget.dart';
|
||
import 'package:qhd_prevention/tools/tools.dart';
|
||
|
||
class HomeDangerPage extends StatefulWidget {
|
||
const HomeDangerPage( {super.key});
|
||
|
||
|
||
@override
|
||
_HomeDangerPageState createState() => _HomeDangerPageState();
|
||
}
|
||
|
||
class _HomeDangerPageState extends State<HomeDangerPage>
|
||
with SingleTickerProviderStateMixin {
|
||
late TabController _tabController;
|
||
int _selectedTab = 0;
|
||
|
||
// // 模拟数据
|
||
// final List<NotificationItem> _notifications = List.generate(10, (i) {
|
||
// bool read = i % 3 == 0;
|
||
// String title = '测试数据标题标题 ${i + 1}';
|
||
// String time = '2025-06-${10 + i} 12:3${i}';
|
||
// return NotificationItem(title, time);
|
||
// });
|
||
|
||
final TextEditingController _searchController = TextEditingController();
|
||
|
||
String appBarTitle="";
|
||
String id="";
|
||
String searchKey="";
|
||
String searchName="";
|
||
bool showBottomTags=true;
|
||
|
||
|
||
|
||
|
||
List<dynamic> listOne = [];
|
||
List<dynamic> listTwo = [];
|
||
|
||
List<dynamic> listDates = [];
|
||
|
||
@override
|
||
void initState() {
|
||
super.initState();
|
||
_tabController = TabController(length: 2, vsync: this);
|
||
_tabController.addListener(() {
|
||
|
||
if (_tabController.indexIsChanging) {
|
||
setState(() => _selectedTab = _tabController.index);
|
||
print('切换到标签:${_tabController.index}');
|
||
listDates.clear();
|
||
setState(() {
|
||
if(_selectedTab==0){
|
||
listDates.addAll(listOne);
|
||
showBottomTags=true;
|
||
}else{
|
||
listDates.addAll(listTwo);
|
||
showBottomTags=false;
|
||
}
|
||
});
|
||
}
|
||
});
|
||
|
||
|
||
id=SessionService.instance.loginUser?["DEPARTMENT_ID"]??"";
|
||
getListData();
|
||
|
||
}
|
||
|
||
|
||
void getListData(){
|
||
listDates.clear();
|
||
listOne.clear();
|
||
listTwo.clear();
|
||
appBarTitle="待排查";
|
||
_getHazardInvestigationList();
|
||
_getStandardInvestigationList();
|
||
// case 3://首页-待排查
|
||
// appBarTitle="待排查";
|
||
// // _getStandardInvestigationRecordList(_page,keyWord,"","","","","","",addList);
|
||
// break;
|
||
|
||
}
|
||
|
||
Future<void> _getHazardInvestigationList() async {
|
||
try {
|
||
|
||
final result = await ApiService.getHazardInvestigationList(id,searchKey);
|
||
if (result['result'] == 'success') {
|
||
final List<dynamic> newList = result['varList'] ?? [];
|
||
setState(() {
|
||
|
||
for(int i=0;i<newList.length;i++){
|
||
if(newList[i]["checkCount"]==0){
|
||
listOne.add(newList[i]);
|
||
// }else{
|
||
// listTwo.add(newList[i]);
|
||
}
|
||
}
|
||
listDates.addAll(listOne);
|
||
});
|
||
|
||
}else{
|
||
ToastUtil.showNormal(context, "加载数据失败");
|
||
// _showMessage('加载数据失败');
|
||
}
|
||
} catch (e) {
|
||
// 出错时可以 Toast 或者在页面上显示错误状态
|
||
print('加载数据失败:$e');
|
||
}
|
||
}
|
||
|
||
Future<void> _getStandardInvestigationList() async {
|
||
try {
|
||
|
||
final result = await ApiService.getStandardInvestigationList(id,searchKey);
|
||
if (result['result'] == 'success') {
|
||
final List<dynamic> newList = result['varList'] ?? [];
|
||
setState(() {
|
||
|
||
for(int i=0;i<newList.length;i++){
|
||
if(newList[i]["checkCount"]==0){
|
||
// listOne.add(newList[i]);
|
||
// }else{
|
||
listTwo.add(newList[i]);
|
||
}
|
||
}
|
||
listDates.addAll(listOne);
|
||
});
|
||
|
||
}else{
|
||
ToastUtil.showNormal(context, "加载数据失败");
|
||
// _showMessage('加载数据失败');
|
||
}
|
||
} catch (e) {
|
||
// 出错时可以 Toast 或者在页面上显示错误状态
|
||
print('加载数据失败:$e');
|
||
}
|
||
}
|
||
|
||
|
||
|
||
|
||
@override
|
||
void dispose() {
|
||
_tabController.dispose();
|
||
super.dispose();
|
||
}
|
||
|
||
Future<void> _handleItemTap( item, int index) async {
|
||
print("点击了是: ${index}");
|
||
SessionService.instance.setListItemNameJson(item['NAME']);
|
||
switch(_selectedTab ){
|
||
case 0://隐患排查
|
||
// pushPage(RiskListPage(1,item["LISTMANAGER_ID"]), context);
|
||
final result = await Navigator.push(
|
||
context,
|
||
MaterialPageRoute(builder: (_) => RiskListPage(1,item["LISTMANAGER_ID"])),
|
||
);
|
||
break;
|
||
case 1://标准排查
|
||
// pushPage(RiskListPage(2,item["CUSTOM_ID"]), context);
|
||
final result = await Navigator.push(
|
||
context,
|
||
MaterialPageRoute(builder: (_) => RiskListPage(2,item["CUSTOM_ID"])),
|
||
);
|
||
|
||
break;
|
||
}
|
||
getListData();
|
||
}
|
||
|
||
// 显示分类选择器
|
||
void showCategoryPicker() {
|
||
showModalBottomSheet(
|
||
context: context,
|
||
isScrollControlled: true,
|
||
barrierColor: Colors.black54,
|
||
backgroundColor: Colors.transparent,
|
||
builder:
|
||
(ctx) => DepartmentPicker(onSelected: (id, name) {
|
||
setState(() {
|
||
searchKey=id;
|
||
searchName=name;
|
||
_searchController.text=name;
|
||
});
|
||
getListData();
|
||
|
||
}),
|
||
);
|
||
}
|
||
|
||
@override
|
||
Widget build(BuildContext context) {
|
||
return Scaffold(
|
||
appBar: MyAppbar(
|
||
title: "隐患排查",
|
||
actions: [
|
||
TextButton(
|
||
onPressed: () {
|
||
pushPage(ScanPage(), context);
|
||
},
|
||
child: Text(
|
||
"清单扫描",
|
||
style: TextStyle(color: Colors.white, fontSize: 16),
|
||
),
|
||
),
|
||
],
|
||
),
|
||
body: SafeArea(
|
||
child: Column(
|
||
children: [
|
||
// Tab bar
|
||
TabBar(
|
||
controller: _tabController,
|
||
labelStyle: TextStyle(fontSize: 16),
|
||
indicator: UnderlineTabIndicator(
|
||
borderSide: BorderSide(width: 3.0, color: Colors.blue),
|
||
insets: EdgeInsets.symmetric(horizontal: 100.0),
|
||
),
|
||
labelColor: Colors.blue,
|
||
unselectedLabelColor: Colors.grey,
|
||
tabs: const [Tab(text: '待排查'), Tab(text: '已排查')],
|
||
),
|
||
|
||
Container(
|
||
color: Colors.white,
|
||
child: Padding(
|
||
padding: const EdgeInsets.all(10),
|
||
child: SearchBarWidget(
|
||
showResetButton: true,
|
||
onInputTap: () {
|
||
showCategoryPicker();
|
||
|
||
},
|
||
hintText: "",
|
||
isClickableOnly: true,
|
||
onSearch: (text) {
|
||
print('----------');
|
||
// searchKey=text;
|
||
// getListData();
|
||
},
|
||
controller: _searchController,
|
||
),
|
||
),
|
||
),
|
||
|
||
// List
|
||
Expanded(
|
||
child: listDates.isEmpty
|
||
? NoDataWidget.show()
|
||
: ListView.separated(
|
||
padding: EdgeInsets.only(top: 15),
|
||
itemCount: listDates.length,
|
||
separatorBuilder: (_, __) => const SizedBox(),
|
||
itemBuilder: (context, index) {
|
||
final item = listDates[index];
|
||
return GestureDetector(
|
||
onTap: () => _handleItemTap(item, index),
|
||
child: DannerRepainItem(
|
||
title: item['NAME'],
|
||
details: [
|
||
'清单类型:${item['TYPENAME']}',
|
||
'排查周期:${item['PERIODNAME']}',
|
||
'包含检查项:${item['count']}',
|
||
'负责人:${item['USER_NAME']}',
|
||
'起始时间:${item['START_DATE']}-${item['END_DATE']}',
|
||
|
||
],
|
||
showBottomTags: showBottomTags,
|
||
bottomTags: [
|
||
riskTagText(1, "重大风险:${item['ACOUNT']}"),
|
||
riskTagText(2, "较大:${item['BCOUNT']}"),
|
||
riskTagText(3, "一般:${item['CCOUNT']}"),
|
||
riskTagText(4, "低:${item['DCOUNT']}"),
|
||
],
|
||
),
|
||
);
|
||
},
|
||
),
|
||
),
|
||
],
|
||
),
|
||
),
|
||
);
|
||
}
|
||
|
||
Widget _itemCell(final item) {
|
||
return Padding(
|
||
padding: EdgeInsets.only(left: 15, right: 15, bottom: 15),
|
||
child: Container(
|
||
decoration: const BoxDecoration(
|
||
color: Colors.white,
|
||
borderRadius: BorderRadius.all(Radius.circular(5)),
|
||
),
|
||
child: Column(
|
||
children: [
|
||
Padding(
|
||
padding: EdgeInsets.symmetric(vertical: 10, horizontal: 15),
|
||
child: Row(
|
||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||
children: [
|
||
Row(
|
||
children: [
|
||
Icon(
|
||
Icons.star_rate_sharp,
|
||
color: Colors.green,
|
||
size: 18,
|
||
),
|
||
SizedBox(width: 5),
|
||
Text("测试--------", style: TextStyle(fontSize: 14)),
|
||
],
|
||
),
|
||
Icon(
|
||
Icons.arrow_forward_ios_rounded,
|
||
color: Colors.grey,
|
||
size: 15,
|
||
),
|
||
],
|
||
),
|
||
),
|
||
Divider(height: 1),
|
||
Padding(
|
||
padding: EdgeInsets.symmetric(vertical: 10, horizontal: 15),
|
||
child: Column(
|
||
spacing: 5,
|
||
children: [
|
||
Row(
|
||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||
children: [
|
||
HhTextStyleUtils.secondaryTitle("清单类型:测试"),
|
||
HhTextStyleUtils.secondaryTitle("排查周期:测试"),
|
||
],
|
||
),
|
||
Row(
|
||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||
children: [
|
||
HhTextStyleUtils.secondaryTitle("包含检查项:3"),
|
||
HhTextStyleUtils.secondaryTitle("负责人:是测试"),
|
||
],
|
||
),
|
||
Row(
|
||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||
children: [
|
||
HhTextStyleUtils.secondaryTitle(
|
||
"起始时间:2025-6-20 - 2026-3-31",
|
||
),
|
||
SizedBox(),
|
||
],
|
||
),
|
||
],
|
||
),
|
||
),
|
||
Padding(
|
||
padding: EdgeInsets.only(top: 0, bottom: 15, left: 15, right: 15),
|
||
child: Row(
|
||
spacing: 5,
|
||
children: [
|
||
riskTagText(1, "重大风险:0"),
|
||
riskTagText(2, "较大:3"),
|
||
riskTagText(3, "一般:1"),
|
||
riskTagText(4, "低:0"),
|
||
],
|
||
),
|
||
),
|
||
],
|
||
),
|
||
),
|
||
);
|
||
}
|
||
}
|
||
|
||
// 模拟数据模版
|
||
class NotificationItem {
|
||
final String title;
|
||
final String time;
|
||
|
||
NotificationItem(this.title, this.time);
|
||
}
|