flutter_integrated_whb/lib/pages/KeyProjects/Punishment/punishment_manager_page.dart

291 lines
9.7 KiB
Dart
Raw Normal View History

2025-08-14 15:05:48 +08:00
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/customWidget/toast_util.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/KeyProjects/Punishment/PunishmentModalAlert.dart';
import 'package:qhd_prevention/pages/KeyProjects/Punishment/punishment_manager_detail_page.dart';
import 'package:qhd_prevention/pages/my_appbar.dart';
import 'package:qhd_prevention/tools/tools.dart';
class PunishmentManagerPage extends StatefulWidget {
const PunishmentManagerPage({super.key, required this.OUTSOURCED_ID});
final String OUTSOURCED_ID;
@override
State<PunishmentManagerPage> createState() => _PunishmentManagerPageState();
}
class _PunishmentManagerPageState extends State<PunishmentManagerPage>
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,
'HANDLED': index + 1,
};
final url =
'/app/keyprojectcheck/punishlist?showCount=10&currentPage=$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();
}
}
void _punishment(Map item) {
showPunishDialog(
context,
initial: {
'ISPUNISH': '2',
'RECTIFICATIONDEPT_NAME': item['UNITS_NAME'],
'RECTIFICATIONOR_NAME': item['RECTIFICATIONOR_NAME'],
},
onSubmit: (form) {
// 这里接收用户确认后的表单数据
form['HIDDEN_ID'] = item['HIDDEN_ID'];
_keyprojectPunishAdd(form);
},
);
}
Future<void> _keyprojectPunishAdd(Map<String, dynamic> form) async {
try {
if (form['ISPUNISH'] == 1) {
final result = await ApiService.keyprojectpunishAdd(form);
if (result['result'] == 'success') {
await ApiService.keyprojectPunishEdit(form, '1');
_getDataWithIndex(_selectedTab);
}
}else{
await ApiService.keyprojectPunishEdit(form, '2');
_getDataWithIndex(_selectedTab);
}
} catch (e) {
ToastUtil.showNormal(context, '$e');
}
}
void _goToDetail(Map<String, dynamic> item, String tabCur) async {
item['TabCur'] = tabCur;
await pushPage(PunishmentManagerDetailPage(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: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [Text('${item['HIDDENDESCR'] ?? ''}')],
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text("被处罚单位: ${item['UNITS_NAME'] ?? ''}"),
if (item['ISPUNISH'].toString() == '1' &&
item['HANDLED'].toString() == '0')
Text("被处罚人: ${item['PERSON_NAME'] ?? ''}"),
],
),
if (item['ISPUNISH'].toString() == '1')
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [Text("处罚原因: ${item['REASON'] ?? ''}")],
),
if (FormUtils.hasValue(item, 'ISPUNISH'))
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text("下发人: ${item['CREATOR_NAME'] ?? ''}"),
Text("是否处罚: ${item['ISPUNISH'] == '2' ? "" : ""}"),
],
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
"处罚处理状态: ${item['ISPUNISH'] == '2'
? "不处罚"
: item['HANDLED'] == '1'
? '已完成'
: item['ISPUNISH'] == "1"
? "待反馈"
: "待处罚"}",
),
// Text("整改时间: ${item['RECTIFICATIONTIME'] ?? ''}"),
],
),
SizedBox(height: 5),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
SizedBox(),
Row(
children: [
if (!FormUtils.hasValue(item, 'ISPUNISH'))
CustomButton(
onPressed: () {
_punishment(item);
},
text: '处罚',
height: 30,
padding: EdgeInsets.symmetric(
vertical: 5,
horizontal: 15,
),
textStyle: TextStyle(
fontSize: 13,
color: Colors.white,
),
backgroundColor: Colors.red,
),
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),
);
},
),
),
],
),
),
);
}
}