flutter_integrated_whb/lib/pages/home/work/danger_page.dart

399 lines
12 KiB
Dart
Raw Normal View History

2025-07-11 11:03:21 +08:00
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';
2025-07-31 21:15:00 +08:00
import 'package:qhd_prevention/customWidget/toast_util.dart';
import 'package:qhd_prevention/http/ApiService.dart';
2025-07-11 11:03:21 +08:00
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 DangerPage extends StatefulWidget {
2025-07-31 21:15:00 +08:00
const DangerPage(this.type, {super.key});
2025-07-11 11:03:21 +08:00
2025-07-31 21:15:00 +08:00
final int type;
2025-07-11 11:03:21 +08:00
@override
_DangerPageState createState() => _DangerPageState();
}
class _DangerPageState extends State<DangerPage>
with SingleTickerProviderStateMixin {
late TabController _tabController;
int _selectedTab = 0;
2025-07-31 21:15:00 +08:00
// // 模拟数据
// 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);
// });
2025-07-24 11:18:47 +08:00
2025-07-11 11:03:21 +08:00
final TextEditingController _searchController = TextEditingController();
2025-07-31 21:15:00 +08:00
String appBarTitle="";
String id="";
String searchKey="";
String searchName="";
bool showBottomTags=false;
List<dynamic> listOne = [];
List<dynamic> listTwo = [];
List<dynamic> listDates = [];
2025-07-11 11:03:21 +08:00
@override
void initState() {
super.initState();
_tabController = TabController(length: 2, vsync: this);
_tabController.addListener(() {
2025-07-31 21:15:00 +08:00
if (_tabController.indexIsChanging) {
setState(() => _selectedTab = _tabController.index);
print('切换到标签:${_tabController.index}');
listDates.clear();
setState(() {
if(_selectedTab==0){
listDates.addAll(listOne);
if(widget.type==1){
showBottomTags=true;
}else{
showBottomTags=false;
}
}else{
listDates.addAll(listTwo);
showBottomTags=false;
}
});
}
});
if(widget.type==1){
showBottomTags=true;
}else{
showBottomTags=false;
2025-07-11 11:03:21 +08:00
}
2025-07-31 21:15:00 +08:00
id=SessionService.instance.loginUser?["DEPARTMENT_ID"]??"";
getListData();
2025-07-11 11:03:21 +08:00
}
2025-07-31 21:15:00 +08:00
void getListData(){
listDates.clear();
listOne.clear();
listTwo.clear();
switch(widget.type ){
case 1://隐患排查
appBarTitle="隐患排查";
_getHazardInvestigationList();
break;
case 2://标准排查
appBarTitle="标准排查";
_getStandardInvestigationList();
break;
// 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');
}
}
2025-07-11 11:03:21 +08:00
@override
void dispose() {
_tabController.dispose();
super.dispose();
}
2025-07-31 21:15:00 +08:00
void _handleItemTap( item, int index) {
print("点击了是: ${index}");
switch(widget.type ){
case 1://隐患排查
pushPage(RiskListPage(widget.type,item["LISTMANAGER_ID"]), context);
break;
case 2://标准排查
appBarTitle="标准排查";
pushPage(RiskListPage(widget.type,item["CUSTOM_ID"]), context);
break;
}
2025-07-11 11:03:21 +08:00
}
// 显示分类选择器
void showCategoryPicker() {
showModalBottomSheet(
context: context,
isScrollControlled: true,
barrierColor: Colors.black54,
backgroundColor: Colors.transparent,
builder:
2025-07-24 11:18:47 +08:00
(ctx) => DepartmentPicker(onSelected: (id, name) {
2025-07-31 21:15:00 +08:00
setState(() {
searchKey=id;
searchName=name;
_searchController.text=name;
});
getListData();
2025-07-24 11:18:47 +08:00
}),
2025-07-11 11:03:21 +08:00
);
}
@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: '已排查')],
),
2025-07-31 21:15:00 +08:00
Container(
color: Colors.white,
child: Padding(
2025-07-11 11:03:21 +08:00
padding: const EdgeInsets.all(10),
child: SearchBarWidget(
showResetButton: true,
onInputTap: () {
showCategoryPicker();
2025-07-31 21:15:00 +08:00
2025-07-11 11:03:21 +08:00
},
hintText: "",
isClickableOnly: true,
onSearch: (text) {
print('----------');
2025-07-31 21:15:00 +08:00
// searchKey=text;
// getListData();
2025-07-11 11:03:21 +08:00
},
controller: _searchController,
),
),
2025-07-31 21:15:00 +08:00
),
2025-07-11 11:03:21 +08:00
// List
Expanded(
2025-07-31 21:15:00 +08:00
child: listDates.isEmpty
? NoDataWidget.show()
: ListView.separated(
padding: EdgeInsets.only(top: 15),
itemCount: listDates.length,
2025-07-11 11:03:21 +08:00
separatorBuilder: (_, __) => const SizedBox(),
itemBuilder: (context, index) {
2025-07-31 21:15:00 +08:00
final item = listDates[index];
2025-07-11 11:03:21 +08:00
return GestureDetector(
onTap: () => _handleItemTap(item, index),
child: DannerRepainItem(
2025-07-31 21:15:00 +08:00
title: item['NAME'],
2025-07-11 11:03:21 +08:00
details: [
2025-07-31 21:15:00 +08:00
'清单类型:${item['TYPENAME']}',
'排查周期:${item['PERIODNAME']}',
'包含检查项:${item['count']}',
'负责人:${item['USER_NAME']}',
'起始时间:${item['START_DATE']}-${item['END_DATE']}',
2025-07-11 11:03:21 +08:00
],
2025-07-31 21:15:00 +08:00
showBottomTags: showBottomTags,
2025-07-11 11:03:21 +08:00
bottomTags: [
2025-07-31 21:15:00 +08:00
riskTagText(1, "重大风险:${item['ACOUNT']}"),
riskTagText(2, "较大:${item['BCOUNT']}"),
riskTagText(3, "一般:${item['CCOUNT']}"),
riskTagText(4, "低:${item['DCOUNT']}"),
2025-07-11 11:03:21 +08:00
],
),
);
},
),
),
],
),
),
);
}
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);
}