251 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			Dart
		
	
	
			
		
		
	
	
			251 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			Dart
		
	
	
| import 'package:flutter/material.dart';
 | |
| import 'package:qhd_prevention/customWidget/ItemWidgetFactory.dart';
 | |
| import 'package:qhd_prevention/customWidget/custom_button.dart';
 | |
| import 'package:qhd_prevention/customWidget/danner_repain_item.dart';
 | |
| import 'package:qhd_prevention/http/ApiService.dart';
 | |
| import 'package:qhd_prevention/pages/KeyProjects/Danger/danger_manager_detail_page.dart';
 | |
| import 'package:qhd_prevention/pages/my_appbar.dart';
 | |
| import 'package:qhd_prevention/tools/tools.dart';
 | |
| 
 | |
| class DangerManagerPage extends StatefulWidget {
 | |
|   const DangerManagerPage({super.key, required this.OUTSOURCED_ID});
 | |
| 
 | |
|   final String OUTSOURCED_ID;
 | |
| 
 | |
|   @override
 | |
|   State<DangerManagerPage> createState() => _DangerManagerPageState();
 | |
| }
 | |
| 
 | |
| class _DangerManagerPageState extends State<DangerManagerPage>
 | |
|     with SingleTickerProviderStateMixin {
 | |
|   late TabController _tabController;
 | |
|   late int _selectedTab = 0;
 | |
|   late List listDates = [];
 | |
|   late int totalPage = 0;
 | |
|   int currentPage = 1;
 | |
|   final ScrollController _scrollController = ScrollController();
 | |
| 
 | |
|   @override
 | |
|   void dispose() {
 | |
|     _scrollController.dispose();
 | |
|     super.dispose();
 | |
|   }
 | |
|   @override
 | |
|   void initState() {
 | |
|     // TODO: implement initState
 | |
|     super.initState();
 | |
|     _scrollController.addListener(_onScroll);
 | |
| 
 | |
|     _tabController = TabController(length: 2, vsync: this);
 | |
|     _tabController.addListener(() {
 | |
|       if (_tabController.indexIsChanging) {
 | |
|         setState(() {
 | |
|           _selectedTab = _tabController.index;
 | |
|           currentPage = 1;
 | |
|         });
 | |
|         print('切换到标签:${_tabController.index}');
 | |
| 
 | |
|         _getDataWithIndex(_tabController.index);
 | |
|       }
 | |
|     });
 | |
|     _getDataWithIndex(_selectedTab);
 | |
| 
 | |
|   }
 | |
|   void _onScroll() {
 | |
|     if (_scrollController.position.pixels >=
 | |
|         _scrollController.position.maxScrollExtent) {
 | |
|       if (currentPage < totalPage) {
 | |
|         currentPage++;
 | |
|         _getDataWithIndex(_selectedTab);
 | |
|       }
 | |
|     }
 | |
|   }
 | |
|   Future<void> _getDataWithIndex(int index) async {
 | |
|     LoadingDialogHelper.show();
 | |
|     try {
 | |
|       final data = {
 | |
|         'KEYWORDS': '',
 | |
|         'OUTSOURCED_ID': widget.OUTSOURCED_ID,
 | |
|         'CREATOR': SessionService.instance.loginUserId,
 | |
|         'ISCHECK': index + 1,
 | |
|       };
 | |
|       final url =
 | |
|           '/app/keyprojectcheck/listHidden?showCount=10¤tPage=$currentPage';
 | |
|       final response = await ApiService.getKeyprojectDangerList(url, data);
 | |
| 
 | |
|       setState(() {
 | |
|         if (currentPage == 1) {
 | |
|           listDates = response['varList'];
 | |
|         } else {
 | |
|           listDates.addAll(response['varList']);
 | |
|         }
 | |
|         Map<String, dynamic> page = response['page'];
 | |
|         totalPage = page['totalPage'] ?? 1;
 | |
|       });
 | |
|       LoadingDialogHelper.hide();
 | |
|     } catch (e) {
 | |
|       print('Error fetching data: $e');
 | |
|       LoadingDialogHelper.show();
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   String _getState(String state) {
 | |
|     final info = {'1': "未整改",
 | |
|       '2': "已整改",
 | |
|       '4': "已验收",};
 | |
|     return info[state] as String;
 | |
|   }
 | |
| 
 | |
|   void _goToDetail(Map<String, dynamic> item, String tabCur) async {
 | |
|     item['TabCur'] = tabCur;
 | |
|     await pushPage(DangerManagerDetailPage(info: item), context);
 | |
|     _getDataWithIndex(_selectedTab);
 | |
|   }
 | |
| 
 | |
|   Widget _itemCell(Map<String, dynamic> item) {
 | |
|     return Padding(
 | |
|       padding: EdgeInsets.symmetric(horizontal: 12),
 | |
|       child: GestureDetector(
 | |
|         onTap: () {
 | |
|           _goToDetail(item, '2');
 | |
|         },
 | |
|         child: Container(
 | |
|           padding: EdgeInsets.only(top: 12, left: 12, right: 12),
 | |
|           decoration: BoxDecoration(
 | |
|             borderRadius: BorderRadius.circular(5),
 | |
|             color: Colors.white,
 | |
|           ),
 | |
|           child: Column(
 | |
|             children: [
 | |
|               ListItemFactory.headerTitle(item['OUTSOURCED_NAME'] ?? ''),
 | |
|               const SizedBox(height: 5,),
 | |
|               Row(
 | |
|                 mainAxisAlignment: MainAxisAlignment.spaceBetween,
 | |
|                 children: [
 | |
|                   Text("隐患来源: ${item['SOURCE'] ?? ''}"),
 | |
|                 ],
 | |
|               ),
 | |
|               Row(
 | |
|                 mainAxisAlignment: MainAxisAlignment.spaceBetween,
 | |
|                 children: [
 | |
|                   Text("隐患描述: ${item['HIDDENDESCR'] ?? ''}"),
 | |
|                 ],
 | |
|               ),
 | |
|               Row(
 | |
|                 mainAxisAlignment: MainAxisAlignment.spaceBetween,
 | |
|                 children: [
 | |
|                   Text("隐患发现人: ${item['CREATOR_NAME'] ?? item['CREATOR_NAMES']}"),
 | |
|                 ],
 | |
|               ),
 | |
|               Row(
 | |
|                 mainAxisAlignment: MainAxisAlignment.spaceBetween,
 | |
|                 children: [
 | |
|                   Text("隐患发现时间: ${item['CREATTIME'] ?? ''}"),
 | |
|                 ],
 | |
|               ),
 | |
|               Row(
 | |
|                 mainAxisAlignment: MainAxisAlignment.spaceBetween,
 | |
|                 children: [
 | |
|                   Text("隐患整改人: ${item['RECTIFICATIONOR_NAME'] ?? ''}"),
 | |
|                   Text("整改时间: ${item['RECTIFICATIONTIME'] ?? ''}"),
 | |
|                 ],
 | |
|               ),
 | |
|               Row(
 | |
|                 mainAxisAlignment: MainAxisAlignment.spaceBetween,
 | |
|                 children: [
 | |
|                   Text("隐患验收人: ${item['CREATOR_NAME'] ?? ''}"),
 | |
|                   Text("验收时间: ${item['CHECKTIME'] ?? ''}"),
 | |
|                 ],
 | |
|               ),
 | |
|               Row(
 | |
|                 mainAxisAlignment: MainAxisAlignment.spaceBetween,
 | |
|                 children: [
 | |
|                   Text("隐患状态: ${_getState(item['STATE'].toString())}"),
 | |
|                   Text("是否处罚: ${FormUtils.hasValue(item, 'ISPUNISH') ? (item['ISPUNISH'] == '1' ? '是' : '否'):''}"),
 | |
|                 ],
 | |
|               ),
 | |
|               SizedBox(height: 5,),
 | |
|               Row(
 | |
|                 mainAxisAlignment: MainAxisAlignment.spaceBetween,
 | |
|                 children: [
 | |
|                   SizedBox(),
 | |
|                   Row(
 | |
|                     children: [
 | |
|                       if (item['CREATOR'] == SessionService.instance.loginUserId && _selectedTab == 0)
 | |
|                         CustomButton(
 | |
|                           onPressed: () { _goToDetail(item, '1');},
 | |
|                           text: '验收',
 | |
|                           height: 30,
 | |
|                           padding: EdgeInsets.symmetric(vertical: 5, horizontal: 15),
 | |
|                           textStyle: TextStyle(fontSize: 13, color: Colors.white),
 | |
|                           backgroundColor: Colors.blue,
 | |
|                         ),
 | |
|                       CustomButton(
 | |
|                         onPressed: () { _goToDetail(item, '2');},
 | |
|                         text: '查看',
 | |
|                         height: 30,
 | |
|                         padding: EdgeInsets.symmetric(vertical: 5, horizontal: 15),
 | |
|                         textStyle: TextStyle(fontSize: 13, color: Colors.white),
 | |
|                         backgroundColor: Colors.blue,
 | |
|                       ),
 | |
|                     ],
 | |
|                   )
 | |
|                 ],
 | |
|               ),
 | |
|               SizedBox(height: 10,),
 | |
|               const Divider(height: 1,)
 | |
|             ],
 | |
|           ),
 | |
|         ),
 | |
|       )
 | |
|     );
 | |
|   }
 | |
| 
 | |
|   void _handleItemTap(Map item, int index) {}
 | |
| 
 | |
|   @override
 | |
|   Widget build(BuildContext context) {
 | |
|     return Scaffold(
 | |
|       appBar: MyAppbar(title: '隐患管理'),
 | |
|       body: SafeArea(
 | |
|         child: Column(
 | |
|           children: [
 | |
|             Container(
 | |
|               color: Colors.white,
 | |
|               child: 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: '已验收隐患')],
 | |
|               ),
 | |
|             ),
 | |
|             Expanded(
 | |
|               child:
 | |
|                   listDates.isEmpty
 | |
|                       ? NoDataWidget.show()
 | |
|                       : ListView.separated(
 | |
|                         padding: EdgeInsets.only(top: 15),
 | |
|                         itemCount: listDates.length,
 | |
|                         controller: _scrollController,
 | |
|                         separatorBuilder: (_, __) => const SizedBox(),
 | |
|                         itemBuilder: (context, index) {
 | |
|                           final item = listDates[index];
 | |
|                           return GestureDetector(
 | |
|                             onTap: () => _handleItemTap(item, index),
 | |
|                             child: _itemCell(item),
 | |
|                           );
 | |
|                         },
 | |
|                       ),
 | |
|             ),
 | |
|           ],
 | |
|         ),
 | |
|       ),
 | |
|     );
 | |
|   }
 | |
| }
 |