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 with SingleTickerProviderStateMixin { late TabController _tabController; int _selectedTab = 0; final TextEditingController _searchController = TextEditingController(); String appBarTitle=""; String id=""; String searchKey=""; String searchName=""; bool showBottomTags=true; List listOne = []; List listTwo = []; List 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 _getHazardInvestigationList() async { try { final result = await ApiService.getHazardInvestigationList(id,searchKey); if (result['result'] == 'success') { final List newList = result['varList'] ?? []; setState(() { for(int i=0;i _getStandardInvestigationList() async { try { final result = await ApiService.getStandardInvestigationList(id,searchKey); if (result['result'] == 'success') { final List newList = result['varList'] ?? []; setState(() { for(int i=0;i _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); _goScan(); }, 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"), ], ), ), ], ), ), ); } Future _goScan() async { final result = await Navigator.push( context, MaterialPageRoute(builder: (_) => ScanPage()), ); dynamic item; for(int i=0;i