flutter_integrated_whb/lib/pages/KeyProjects/SafeCheck/safeCheck_detail.dart

247 lines
7.9 KiB
Dart

import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:qhd_prevention/customWidget/ItemWidgetFactory.dart';
import 'package:qhd_prevention/customWidget/bottom_picker.dart';
import 'package:qhd_prevention/customWidget/custom_alert_dialog.dart';
import 'package:qhd_prevention/customWidget/custom_button.dart';
import 'package:qhd_prevention/customWidget/toast_util.dart';
import 'package:qhd_prevention/http/ApiService.dart';
import 'package:qhd_prevention/pages/home/tap/item_list_widget.dart';
import 'package:qhd_prevention/pages/my_appbar.dart';
import 'package:qhd_prevention/tools/tools.dart';
class SafecheckDetail extends StatefulWidget {
const SafecheckDetail({
super.key,
required this.OUTSOURCED_ID,
required this.KEYPROJECTCHECK_ID,
required this.isEdit,
});
final String OUTSOURCED_ID;
final String KEYPROJECTCHECK_ID;
final bool isEdit;
@override
State<SafecheckDetail> createState() => _SafecheckDetailState();
}
class _SafecheckDetailState extends State<SafecheckDetail> {
late Map<String, dynamic> info = {};
/// 被检查单位负责人
late List<dynamic> personList = [];
/// 检查类型
late List<dynamic> typeList = [];
/// 被检查单位
late List<dynamic> toCheckUnitList = [];
bool? chooseTitleType = null;
final TextEditingController _unitController = TextEditingController();
final TextEditingController _locationController = TextEditingController();
final TextEditingController _personController = TextEditingController();
@override
void initState() {
// TODO: implement initState
super.initState();
_getData();
}
Future<void> _getData() async {
LoadingDialogHelper.show();
final result = await ApiService.addSafeCheckReciord(widget.OUTSOURCED_ID);
final personData = await ApiService.getSafeCheckPersonList(info['UNITS_ID']??'', '1');
final typeListData = await ApiService.getSafeCheckTypeList();
final toUnitListData = await ApiService.getSafeCheckToUnitList(widget.OUTSOURCED_ID);
try {
setState(() {
info = result['pd'] ?? {};
personList = personData['varList'];
typeList = jsonDecode(typeListData['zTreeNodes']);
toCheckUnitList = toUnitListData['varList'];
if (!FormUtils.hasValue(info, 'UNITS_NAME') && toCheckUnitList.isNotEmpty) {
info['UNITS_NAME'] = toCheckUnitList.first['UNITS_NAME'];
}
if (!FormUtils.hasValue(info, 'UNITS_ID') && toCheckUnitList.isNotEmpty) {
info['UNITS_ID'] = toCheckUnitList.first['UNITS_ID'];
}
});
} catch (e) {
print('加载数据失败:$e');
ToastUtil.showNormal(context, '加载数据失败:$e');
}
LoadingDialogHelper.hide();
}
Future<void> onUpdateState(String state) async {
// 提示文案
String content = '';
if (state == '1') {
content = '确定同意开工吗?';
} else if (state == '2') {
content = '确定同意结束吗?';
} else {
content = '确定操作吗?';
}
final bool confirmed =
await showDialog<bool>(
context: context,
builder:
(ctx) => CustomAlertDialog(
title: '提示',
content: content,
onConfirm: () => Navigator.of(ctx).pop(false),
),
) ??
false;
if (!confirmed) return;
LoadingDialogHelper.show();
try {
final response = await ApiService.sureKeyProjectState(
widget.OUTSOURCED_ID,
state,
);
LoadingDialogHelper.hide();
if (response['result'] == 'success') {
Navigator.of(context).pop();
} else {
ToastUtil.showNormal(context, '请求失败');
}
} catch (e) {
ToastUtil.showNormal(context, '请求异常:$e');
}
}
Widget lineItem({
required String label,
required bool isEditable,
String? text,
}) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
ItemListWidget.singleLineTitleText(
label: label,
isEditable: isEditable,
text: text ?? '',
),
const Divider(height: 1, thickness: 1),
],
);
}
Future<void> _choosePerson() async {
final choice = await BottomPicker.show<String>(
context,
items: personList.map((val) => val['NAME'] as String).toList(),
itemBuilder: (item) => Text(item, textAlign: TextAlign.center),
initialIndex: 0,
);
if (choice != null) {
// 用户点击确定并选择了 choice
setState(() {
info['PERSON_NAME'] = choice;
FocusHelper.clearFocus(context);
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: MyAppbar(title: "安全检查发起"),
body: SafeArea(
child: Padding(
padding: EdgeInsets.symmetric(horizontal: 12, vertical: 12),
child: Column(
children: [
ItemListWidget.itemContainer(
horizontal: 0,
Column(
children: [
ListItemFactory.createYesNoSection(
title: '检查题目:',
groupValue: chooseTitleType,
yesLabel: '安全',
noLabel: '综合',
horizontalPadding: 5,
verticalPadding: 0,
onChanged: (val) {
setState(() {
chooseTitleType = val;
});
},
isEdit: true,
text: info['INSPECTION_CATEGORY'] ?? '',
),
const Divider(),
ItemListWidget.singleLineTitleText(
label: '被检查单位:',
isEditable: false,
text: info['UNITS_NAME'],
controller: _unitController,
),
const Divider(),
ItemListWidget.selectableLineTitleTextRightButton(
label: '被检查单位现场负责人:',
isEditable: widget.isEdit,
onTap: () {
_choosePerson();
},
text: info['PERSON_NAME'] ?? '',
),
const Divider(),
ItemListWidget.singleLineTitleText(
label: '检查场所:',
isEditable: widget.isEdit,
text: info['INSPECTION_PLACE'],
hintText: '请输入检查场所',
controller: _locationController,
),
const Divider(),
ItemListWidget.selectableLineTitleTextRightButton(
label: '检查类型:',
isEditable: widget.isEdit,
text: info['INSPECTION_TYPE_NAME'] ?? '',
),
const Divider(),
ItemListWidget.selectableLineTitleTextRightButton(
label: '检查开始时间:',
isEditable: widget.isEdit,
text: info['INSPECTION_TIME_START'] ?? '',
),
],
),
),
SizedBox(height: 20),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
SizedBox(
width: 200,
child: CustomButton(
text: '提交',
textStyle: TextStyle(color: Colors.white, fontSize: 17),
backgroundColor: Colors.blue,
onPressed: () => Navigator.pop(context),
),
),
],
),
],
),
),
),
);
}
}