八项作业翻版完成

main
hs 2025-08-11 17:40:03 +08:00
parent 698ccad423
commit 72c9e8c00d
62 changed files with 2602 additions and 1416 deletions

View File

@ -247,8 +247,8 @@ class ListItemFactory {
/// YesNo
static Widget createYesNoSection({
required String title,
required String yesLabel,
required String noLabel,
String yesLabel = '',
String noLabel = '',
required bool groupValue,
required ValueChanged<bool> onChanged,
double verticalPadding = 15,
@ -313,14 +313,15 @@ class ListItemFactory {
}
/// +
static Widget createBuildSimpleSection(String title) {
static Widget createBuildSimpleSection(String title, {double horPadding = 10}) {
return Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(8),
),
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 10),
padding: EdgeInsets.symmetric(horizontal: horPadding, vertical: 10),
child: Row(
children: [
Container(width: 3, height: 15, color: Colors.blue),

View File

@ -61,10 +61,12 @@ class _MediaPickerGridState extends State<MediaPickerRow> {
Future<void> _showPickerOptions() async {
showModalBottomSheet(
context: context,
backgroundColor: Colors.white,
builder: (_) => SafeArea(
child: Wrap(
children: [
ListTile(
titleAlignment: ListTileTitleAlignment.center,
leading: Icon(
widget.mediaType == MediaType.image
? Icons.camera_alt
@ -79,6 +81,8 @@ class _MediaPickerGridState extends State<MediaPickerRow> {
},
),
ListTile(
titleAlignment: ListTileTitleAlignment.center,
leading: Icon(
widget.mediaType == MediaType.image
? Icons.photo_library
@ -95,6 +99,8 @@ class _MediaPickerGridState extends State<MediaPickerRow> {
},
),
ListTile(
titleAlignment: ListTileTitleAlignment.center,
leading: const Icon(Icons.close),
title: const Text('取消'),
onTap: () => Navigator.of(context).pop(),
@ -212,7 +218,7 @@ class _MediaPickerGridState extends State<MediaPickerRow> {
),
Positioned(
top: -15,
right: -10,
right: -15,
child: IconButton(
icon: const Icon(Icons.cancel, size: 20, color: Colors.red),
onPressed: () => _removeMedia(index),
@ -263,7 +269,7 @@ class RepairedPhotoSection extends StatefulWidget {
this.isShowAI = false,
required this.onChanged,
required this.onAiIdentify,
this.horizontalPadding = 10,
this.horizontalPadding = 5,
this.onMediaAdded,
this.onMediaRemoved,
this.isRequired = false,

View File

@ -679,6 +679,7 @@ U6Hzm1ninpWeE+awIDAQAB
},
);
}
///
static Future<Map<String, dynamic>> listSignFinished(String workType,String hotworkId) {
// workType 'hotwork' -> 'HOTWORK_ID'
final idKey = '${workType.toUpperCase()}_ID';

View File

@ -31,18 +31,18 @@ void main() async {
WidgetsFlutterBinding.ensureInitialized();
// EasyLoading
// EasyLoading
EasyLoading.instance
..displayDuration = const Duration(milliseconds: 2000)
..indicatorType = EasyLoadingIndicatorType.fadingCircle
..loadingStyle = EasyLoadingStyle.dark
..indicatorSize = 45.0
..radius = 10.0
..progressColor = Colors.blue
..backgroundColor = Colors.black.withOpacity(0.7)
..indicatorColor = Colors.blue
..textColor = Colors.white
..maskColor = Colors.black.withOpacity(0.3)
..userInteractions = false
..displayDuration = const Duration(seconds: 20)
..indicatorType = EasyLoadingIndicatorType.ring // 使
..loadingStyle = EasyLoadingStyle.custom // 使
..indicatorSize = 36.0 //
..radius = 0 //
..progressColor = Colors.blue //
..backgroundColor = Colors.grey.shade100
..indicatorColor = Colors.blue //
..textColor = Colors.black //
..userInteractions = false //
..dismissOnTap = false;
await initializeDateFormatting('zh_CN', null);

View File

@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
import 'package:qhd_prevention/customWidget/custom_button.dart';
import 'package:qhd_prevention/customWidget/single_image_viewer.dart';
import 'package:qhd_prevention/http/ApiService.dart';
import 'package:qhd_prevention/tools/tools.dart';
class ItemListWidget {
static const Color detailtextColor = Colors.black54;
@ -19,8 +20,10 @@ class ItemListWidget {
String hintText = '请输入',
double fontSize = 15, //
bool isRequired = true,
bool strongRequired = false, ///
bool strongRequired = false,
ValueChanged<String>? onChanged,
///
TextInputType keyboardType = TextInputType.text,
}) {
return Container(
@ -50,6 +53,7 @@ class ItemListWidget {
child: TextField(
autofocus: false,
controller: controller,
onChanged: onChanged, // <---
keyboardType: keyboardType,
style: TextStyle(fontSize: fontSize),
maxLines: 1,
@ -152,8 +156,7 @@ class ItemListWidget {
bool isClean = false,
VoidCallback? onTapClean, //
bool isRequired = true,
String cleanText = '清除'
String cleanText = '清除',
}) {
return InkWell(
onTap: isEditable ? onTap : null,
@ -184,7 +187,8 @@ class ItemListWidget {
padding: EdgeInsets.symmetric(horizontal: 10, vertical: 0),
textStyle: TextStyle(fontSize: 11, color: Colors.white),
borderRadius: 10,
backgroundColor: cleanText == '清除' ? Colors.red : Colors.green,
backgroundColor:
cleanText == '清除' ? Colors.red : Colors.green,
onPressed: onTapClean,
),
SizedBox(height: 20),
@ -269,10 +273,17 @@ class ItemListWidget {
CustomButton(
text: cleanText,
height: 20,
padding: EdgeInsets.symmetric(horizontal: 10, vertical: 0),
textStyle: TextStyle(fontSize: 11, color: Colors.white),
padding: EdgeInsets.symmetric(
horizontal: 10,
vertical: 0,
),
textStyle: TextStyle(
fontSize: 11,
color: Colors.white,
),
borderRadius: 10,
backgroundColor: cleanText == '清除' ? Colors.red : Colors.green,
backgroundColor:
cleanText == '清除' ? Colors.red : Colors.green,
onPressed: onTapClean,
),
SizedBox(height: 20),
@ -292,7 +303,6 @@ class ItemListWidget {
),
),
),
],
),
),
@ -302,7 +312,6 @@ class ItemListWidget {
);
}
///
///
///
@ -541,7 +550,7 @@ class ItemListWidget {
static Widget OneRowButtonTitle({
required String label, //
required String buttonText, //
required VoidCallback? onTap, //
required VoidCallback onTap, //
double fontSize = 15, //
Color btnColor = Colors.blue,
bool isRequired = false,
@ -602,10 +611,11 @@ class ItemListWidget {
),
GestureDetector(
onTap: () {
if (imgPath.isNotEmpty)
if (imgPath.isNotEmpty) {
SingleImageViewer(
imageUrl: '${ApiService.baseImgPath}${imgPath}',
);
}
},
child:
imgPath.isNotEmpty
@ -621,6 +631,83 @@ class ItemListWidget {
);
}
///
///
///
static Widget twoRowTitleAndImages({
required String title, //
required List<dynamic>? imageUrls, // pd['CONTENT_IMG_PATH']
double row2Height = 80, //
double fontSize = 15, //
void Function(String)? onTapCallBack,
bool isRequired = true,
}) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
//
Padding(
padding: const EdgeInsets.symmetric(vertical: 8.0, horizontal: 12),
child: Text(
title,
style: TextStyle(
fontSize: fontSize,
fontWeight: FontWeight.bold,
),
),
),
//
SizedBox(
height: 80, //
child: ListView.builder(
padding: EdgeInsets.symmetric(horizontal: 12),
scrollDirection: Axis.horizontal,
itemCount: imageUrls?.length,
itemBuilder: (context, index) {
return Container(
margin: const EdgeInsets.only(right: 8), //
child: ClipRRect(
borderRadius: BorderRadius.circular(8),
child: GestureDetector(
onTap: () {
if (onTapCallBack != null) onTapCallBack('${ApiService.baseImgPath}${imageUrls![index] ?? ''}');
},
child: Image.network(
'${ApiService.baseImgPath}${imageUrls![index] ?? ''}',
width: 80, //
height: 80, //
fit: BoxFit.cover,
loadingBuilder: (context, child, loadingProgress) {
if (loadingProgress == null) return child;
return Container(
width: 80,
height: 80,
color: Colors.grey[200],
child: const Center(child: CircularProgressIndicator()),
);
},
errorBuilder: (context, error, stackTrace) {
return Container(
width: 80,
height: 80,
color: Colors.grey[200],
child: const Icon(Icons.broken_image, size: 40),
);
},
),
)
),
);
},
),
),
],
);
}
static Widget itemContainer(Widget child) {
return Container(
decoration: BoxDecoration(

View File

@ -19,7 +19,7 @@ class MeasuresListWidget extends StatelessWidget {
required this.baseImgPath,
required this.isAllowEdit,
this.onSign,
this.isShowSign = false,
this.isShowSign = true,
});
/// Map
@ -164,6 +164,7 @@ class MeasuresListWidget extends StatelessWidget {
(item['IMG_PATH'] as String).split(','),
'',
),
],
),
),

View File

@ -100,7 +100,7 @@ class _HotworkGasListState extends State<HotworkGasList> {
final img = baseImgPath + images[i];
return GestureDetector(
onTap: () {
present(
presentOpaque(
SingleImageViewer(imageUrl: img),
context,
);

View File

@ -1,36 +1,42 @@
import 'dart:math' as math;
import 'package:flutter/material.dart';
import 'package:qhd_prevention/customWidget/ItemWidgetFactory.dart';
import 'package:qhd_prevention/customWidget/single_image_viewer.dart';
import 'package:qhd_prevention/http/ApiService.dart';
import '../../../../../../tools/tools.dart';
import '../../../item_list_widget.dart';
import '../../special_Wrok/MeasuresListWidget.dart';
/// /
/// /
class CutroadDetailFormWidget extends StatefulWidget {
final Map<String, dynamic> pd;
final bool isEditable;
final VoidCallback onChooseLevel;
///
final TextEditingController? locationController; //
final TextEditingController? hightController; //
final TextEditingController? contentController; //
final TextEditingController? unitController; //
final TextEditingController? contentController; //
final TextEditingController? relatedController;
final TextEditingController? riskController;
///
final signs;
const CutroadDetailFormWidget({
Key? key,
required this.pd,
required this.isEditable,
required this.onChooseLevel,
this.locationController,
this.hightController,
this.unitController,
this.contentController,
this.relatedController,
this.riskController,
this.signs = null,
}) : assert(
!isEditable ||
(locationController != null &&
hightController != null &&
(unitController != null &&
contentController != null &&
relatedController != null &&
riskController != null),
@ -43,16 +49,180 @@ class CutroadDetailFormWidget extends StatefulWidget {
}
class _CutroadDetailFormWidgetState extends State<CutroadDetailFormWidget> {
String _getWorkLevelText(dynamic level) {
switch (level?.toString()) {
case '1': return 'I级高处作业';
case '2': return 'II级高处作业';
case '3': return 'III级高处作业';
case '4': return 'IV级高处作业';
default: return '';
}
Widget _itemContainer(Widget child) {
return Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(8),
),
padding: const EdgeInsets.symmetric(horizontal: 5, vertical: 8),
child: child,
);
}
Widget signItemWidget(
String signKey,
String nameKey,
String name,
BuildContext context,
) {
return _itemContainer(
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
//
Padding(
padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 10),
child: Row(
children: [
Expanded(
child: ListItemFactory.headerTitle(name),
),
if (FormUtils.hasValue(widget.pd, nameKey))
Text(
widget.pd[nameKey]?.toString() ?? '',
style: const TextStyle(fontSize: 16),
),
],
),
),
const SizedBox(height: 8),
if (FormUtils.hasValue(widget.signs, signKey))
...((widget.signs[signKey] as List<dynamic>)
.cast<Map<String, dynamic>>()
.map((item) {
// SIGN_PATH
List<String> signPaths = [];
final rawSP = FormUtils.hasValue(item, 'SIGN_PATH') ? item['SIGN_PATH'] : null;
if (rawSP is String && rawSP.isNotEmpty) {
signPaths = rawSP.split(',').map((s) => s.trim()).toList();
} else if (rawSP is List) {
signPaths = rawSP.cast<String>();
}
// SIGN_TIME
List<String> signTimes = [];
final rawST = FormUtils.hasValue(item, 'SIGN_TIME') ? item['SIGN_TIME'] : null;
if (rawST is String && rawST.isNotEmpty) {
signTimes = rawST.split(',');
} else if (rawST is List) {
signTimes = rawST.cast<String>();
}
final pairCount = math.min(signPaths.length, signTimes.length);
// IMG_PATH, 2
List<String> imgPaths = [];
final rawIP = FormUtils.hasValue(item, 'IMG_PATH') ? item['IMG_PATH'] : null;
if (rawIP is String && rawIP.isNotEmpty) {
imgPaths = rawIP.split(',').map((s) => s.trim()).take(2).toList();
} else if (rawIP is List) {
imgPaths = rawIP.cast<String>().take(2).toList();
}
return Padding(
padding: const EdgeInsets.symmetric(vertical: 8.0, horizontal: 10),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
if (imgPaths.isNotEmpty) ...[
Row(
children: imgPaths.map((p) {
final fullUrl = '${ApiService.baseImgPath}$p';
return GestureDetector(
onTap: () => presentOpaque(
SingleImageViewer(imageUrl: fullUrl),
context,
),
child: Padding(
padding: const EdgeInsets.only(right: 8.0),
child: ClipRRect(
borderRadius: BorderRadius.circular(2),
child: Image.network(
fullUrl,
width: 50,
height: 50,
fit: BoxFit.cover,
errorBuilder: (_, __, ___) => const Icon(
Icons.broken_image,
size: 40,
),
),
),
),
);
}).toList(),
),
const SizedBox(height: 8),
],
//
...List.generate(pairCount, (index) {
final imgPath = signPaths[index];
final timeLabel = signTimes[index];
final fullUrl = '${ApiService.baseImgPath}$imgPath';
const imageWidth = 200.0;
const imageHeight = 100.0;
return Padding(
padding: const EdgeInsets.symmetric(vertical: 8.0),
child: Column(
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
GestureDetector(
onTap: () => presentOpaque(
SingleImageViewer(imageUrl: fullUrl),
context,
),
child: ClipRRect(
borderRadius: BorderRadius.circular(4),
child: Image.network(
fullUrl,
width: imageWidth,
height: imageHeight,
fit: BoxFit.cover,
errorBuilder: (_, __, ___) =>
const Icon(Icons.broken_image, size: 60),
),
),
),
const SizedBox(width: 12),
Expanded(
child: SizedBox(
height: imageHeight,
child: Align(
alignment: Alignment.bottomRight,
child: Text(
timeLabel,
style: const TextStyle(
fontSize: 14,
color: Colors.black87,
),
),
),
),
),
],
),
if (index < pairCount - 1)
const Padding(
padding: EdgeInsets.only(top: 8.0),
child: Divider(height: 1),
),
],
),
);
}),
],
),
);
}).toList()),
],
),
);
}
@override
Widget build(BuildContext context) {
final pd = widget.pd;
@ -74,36 +244,45 @@ class _CutroadDetailFormWidgetState extends State<CutroadDetailFormWidget> {
const Divider(),
],
ItemListWidget.singleLineTitleText(
label: '作业地点:',
isEditable: widget.isEditable,
controller: widget.locationController,
text: pd['WORK_PLACE'] ?? '',
label: '申请部门:',
isEditable: false,
text: pd['APPLY_DEPARTMENT_NAME'] ?? '',
),
const Divider(),
ItemListWidget.singleLineTitleText(
label: '作业高度(米):',
keyboardType: TextInputType.numberWithOptions(
decimal: true, //
signed: false, //
),
label: '涉及相关单位(部门):',
isEditable: widget.isEditable,
controller: widget.hightController,
text: pd['WORK_HIGH'] ?? '',
),
const Divider(),
ItemListWidget.selectableLineTitleTextRightButton(
label: '高处作业级别:',
isEditable: widget.isEditable,
onTap: widget.onChooseLevel,
text: _getWorkLevelText(pd['WORK_LEVEL']),
hintText: '请输入涉及相关单位(部门)',
controller: widget.unitController,
text: pd['OTHER_DEPT'] ?? '',
),
const Divider(),
ItemListWidget.multiLineTitleTextField(
label: '作业内容',
label: '断路原因:',
isEditable: widget.isEditable,
controller: widget.contentController,
text: pd['WORK_CONTENT'] ?? '',
hintText: '请输入断路原因',
text: pd['WORK_REASON'] ?? '',
),
if (!widget.isEditable && FormUtils.hasValue(pd, 'WORK_CONTENT')) ...[
ItemListWidget.singleLineTitleText(
label: '断路地段示意图相关说明:',
isEditable: false,
text: pd['WORK_CONTENT'] ?? '',
),
const Divider(),
],
if (!widget.isEditable && FormUtils.hasValue(pd, 'CONTENT_IMG_PATH')) ...[
ItemListWidget.twoRowTitleAndImages(
onTapCallBack: (val) {
presentOpaque(SingleImageViewer(imageUrl: val), context);
},
title: '断路地段示意图:',
imageUrls: pd['CONTENT_IMG_PATH'],
),
const Divider(),
],
const Divider(),
ItemListWidget.twoRowButtonTitleText(
label: '关联其他特殊作业及安全作业票编号:',
@ -152,6 +331,14 @@ class _CutroadDetailFormWidgetState extends State<CutroadDetailFormWidget> {
controller: widget.riskController,
text: pd['RISK_IDENTIFICATION'] ?? '',
),
if (widget.signs != null && FormUtils.hasValue(widget.signs, 'PROJECT_MANAGER'))
Column(
children: [
Divider(),
signItemWidget('PROJECT_MANAGER', 'PROJECT_MANAGER_USER_NAME', '作业项目负责人', context),
],
)
],
),
);

View File

@ -224,6 +224,7 @@ class CutroadFormBaseWork extends StatelessWidget {
children: [
// 1.
CutroadDetailFormWidget(
signs: signs,
pd: pd,
isEditable: isEditable,
onChooseLevel: onChooseLevel,
@ -324,7 +325,7 @@ class CutroadFormBaseWork extends StatelessWidget {
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(padding: EdgeInsets.symmetric(horizontal: 8), child: ListItemFactory.headerTitle('安全管理部门意见'),),
Padding(padding: EdgeInsets.symmetric(horizontal: 8), child: ListItemFactory.headerTitle('消防、安全管理部门意见'),),
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(signs['AUDIT'][0]['DESCR'] ?? ''),
@ -333,7 +334,7 @@ class CutroadFormBaseWork extends StatelessWidget {
),
),
Divider(height: 1,),
signItemWidget('AUDIT', 'AUDIT_USER_NAME', '安全管理部门负责人', context),
signItemWidget('AUDIT', 'AUDIT_USER_NAME', '消防、安全管理部门负责人', context),
],
)
],

View File

@ -175,6 +175,9 @@ class _CutroadListPageState extends State<CutroadListPage> {
case '提交申请':
await pushPage(CutroadApplyDetail(CUTROAD_ID: item['CUTROAD_ID'], flow: widget.flow), context);
break;
case '作业项目负责人':
await pushPage(CutroadZyrDetail(CUTROAD_ID: item['CUTROAD_ID'], flow: widget.flow), context);
break;
case '设置安全措施确认人':
await pushPage(CutroadSetSafeDetail(CUTROAD_ID: item['CUTROAD_ID'], flow: widget.flow), context);
break;
@ -190,16 +193,13 @@ class _CutroadListPageState extends State<CutroadListPage> {
case '接受交底人签字':
await pushPage(CutroadJsjdDetail(CUTROAD_ID: item['CUTROAD_ID'], flow: widget.flow), context);
break;
case '作业人签字':
await pushPage(CutroadZyrDetail(CUTROAD_ID: item['CUTROAD_ID'], flow: widget.flow), context);
break;
case '作业负责人签字':
await pushPage(CutroadZyfzDetail(CUTROAD_ID: item['CUTROAD_ID'], flow: widget.flow), context);
break;
case '所在单位签字':
await pushPage(CutroadSzdwDetail(CUTROAD_ID: item['CUTROAD_ID'], flow: widget.flow), context);
break;
case '审核人签字':
case '消防、安全管理部门签字':
await pushPage(CutroadShbmDetail(CUTROAD_ID: item['CUTROAD_ID'], flow: widget.flow), context);
break;
case '审批人签字':
@ -298,18 +298,7 @@ class _CutroadListPageState extends State<CutroadListPage> {
);
}
String _getWorkLevelText(dynamic level) {
switch (level?.toString()) {
case '1':
return 'I级高处作业';
case '2':
return 'II级高处作业';
case '3':
return 'III级高处作业';
default:
return 'IV级高处作业';
}
}
Widget _buildListItem(Map<String, dynamic> item) {
return Card(
@ -330,44 +319,46 @@ class _CutroadListPageState extends State<CutroadListPage> {
"编号: ${item['CHECK_NO'] ?? ''}",
style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
),
Text(
"作业级别: ${_getWorkLevelText(item['WORK_LEVEL'])}",
style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
),
],
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text("申请人: ${item['APPLY_USER_NAME'] ?? ''}"),
Text("作业项目负责人: ${item['PROJECT_MANAGER_USER_NAME'] ?? ''}"),
],
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text("监护人: ${item['GUARDIAN_USER_NAME'] ?? ''}"),
],
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text("安全交底人: ${item['CONFESS_USER_NAME'] ?? ''}"),
],
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text("接受交底人: ${item['ACCEPT_CONFESS_USER_NAME'] ?? ''}"),
],
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text("作业负责人: ${item['CONFIRM_USER_NAME'] ?? ''}"),
Text("所在单位负责人: ${item['LEADER_USER_NAME'] ?? ''}"),
],
),
if (item['AUDIT_USER_NAME'] != null)
Text("安全管理部门负责人: ${item['AUDIT_USER_NAME'] ?? ''}"),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
if (item['APPROVE_USER_NAME'] != null)
Text("审批部门负责人: ${item['APPROVE_USER_NAME'] ?? ''}"),
Text("所在单位负责人: ${item['LEADER_USER_NAME'] ?? ''}"),
Text("消防、安全管理部门: ${item['AUDIT_USER_NAME'] ?? ''}"),
],
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text("审批部门负责人: ${item['APPROVE_USER_NAME'] ?? ''}"),
Text("验收部门负责人: ${item['ACCEPT_USER_NAME'] ?? ''}"),
],
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [

View File

@ -17,13 +17,13 @@ import 'package:qhd_prevention/pages/home/tap/tabList/special_Wrok/MeasuresListW
enum EditUserType {
PROJECT_MANAGER('作业人项目负责单位', '作业人项目负责人', true),
GUARDIAN('监护人单位', '监护人', true),
CONFESS('安全交底人单位', '安全交底人', true),
ACCEPT_CONFESS('接受交底人单位', '接受交底人', true),
WORK_USER('作业人单位', '作业人', true),
CONFIRM('作业负责人单位', '作业负责人', true),
LEADER('所在单位', '所在单位负责人', true),
AUDIT('审核部门', '审核部门负责人', true),
AUDIT('安全管理部门', '安全管理部门负责人', true),
APPROVE('审批部门', '审批部门负责人', true),
WORK_START('作业开始负责人单位', '作业开始负责人', true),
WORK_END('作业结束负责人单位', '作业结束负责人', true),
@ -53,8 +53,6 @@ class CutroadApplyDetail extends StatefulWidget {
class _CutroadApplyDetailState extends State<CutroadApplyDetail> {
late bool isEditable = false;
final levelList = ["I级高处作业", "II级高处作业", "III级高处作业","IV级高处作业"];
///
late String msg = 'add';
@ -63,8 +61,7 @@ class _CutroadApplyDetailState extends State<CutroadApplyDetail> {
late Map<String, dynamic> signs = {};
late List<Map<String, dynamic>> measuresList = [];
final TextEditingController _locationController = TextEditingController();
final TextEditingController _hightController = TextEditingController();
final TextEditingController _unitController = TextEditingController();
final TextEditingController _contentController = TextEditingController();
final TextEditingController _relatedController = TextEditingController();
final TextEditingController _riskController = TextEditingController();
@ -93,15 +90,13 @@ class _CutroadApplyDetailState extends State<CutroadApplyDetail> {
_contentController.addListener(() {
setState(() {
pd['WORK_CONTENT'] = _contentController.text.trim();
pd['WORK_REASON'] = _contentController.text.trim();
});
});
_locationController.addListener(() {
pd['WORK_PLACE'] = _locationController.text.trim();
});
_hightController.addListener(() {
pd['WORK_HIGH'] = _hightController.text.trim();
_unitController.addListener(() {
pd['OTHER_DEPT'] = _unitController.text.trim();
});
_relatedController.addListener(() {
pd['SPECIAL_WORK'] = _relatedController.text.trim();
});
@ -119,11 +114,7 @@ class _CutroadApplyDetailState extends State<CutroadApplyDetail> {
}
void set_pd_USER_ID(EditUserType type, String id) {
if (type == EditUserType.WORK_USER) {
pd['${type.name}_ID'] = id;
}else{
pd['${type.name}_USER_ID'] = id;
}
}
void set_pd_USER_Name(EditUserType type, String name) {
@ -139,34 +130,15 @@ class _CutroadApplyDetailState extends State<CutroadApplyDetail> {
}
String get_pd_USER_ID(EditUserType type) {
if (type == EditUserType.WORK_USER) {
return pd['${type.name}_ID'] ?? '';
}else{
return pd['${type.name}_USER_ID'] ?? '';
}
}
String get_pd_USER_Name(EditUserType type) {
return pd['${type.name}_USER_NAME'] ?? '';
}
Future<void> _chooseLevel() async {
final choice = await BottomPicker.show<String>(
context,
items: levelList,
itemBuilder: (item) => Text(item, textAlign: TextAlign.center),
initialIndex: 0,
);
if (choice != null) {
// choice
setState(() {
pd['WORK_LEVEL_NAME'] = choice;
pd['WORK_LEVEL'] = (levelList.indexOf(choice) + 1).toString();
FocusHelper.clearFocus(context);
});
}
}
Widget _card(Widget child) {
return Container(
padding: EdgeInsets.symmetric(vertical: 5),
@ -181,16 +153,6 @@ class _CutroadApplyDetailState extends State<CutroadApplyDetail> {
Widget _chooseItem(EditUserType type) {
bool isClean = false;
bool isRequird = true;
if (pd['WORK_LEVEL'] == '1' && type == EditUserType.AUDIT) {
isRequird = false;
isClean = true;
}
if (pd['WORK_LEVEL'] != '4' && type == EditUserType.APPROVE) {
isRequird = false;
isClean = true;
}
return Column(
children: [
@ -302,31 +264,25 @@ class _CutroadApplyDetailState extends State<CutroadApplyDetail> {
Future<void> _submit(String status) async {
//
final textRules = <Map<String, dynamic>>[
{'value': _locationController.text.trim(), 'message': '请填写地点及部位'},
{'value': _hightController.text.trim(), 'message': '请填写高度'},
{'value': _unitController.text.trim(), 'message': '请输入涉及相关单位(部门)'},
{'value': _contentController.text.trim(), 'message': '填写作业内容'},
{'value': _contentController.text.trim(), 'message': '输入断路原因'},
{
'value': _relatedController.text.trim(),
'message': '请输入关联的其他特殊作业及安全作业票编号',
},
{'value': _riskController.text.trim(), 'message': '请填写风险辨识结果'},
];
final level = pd['WORK_LEVEL'] ?? '';
print('---level-$level');
///
final unitRules = <EditUserType>[
EditUserType.PROJECT_MANAGER,
EditUserType.GUARDIAN,
EditUserType.CONFESS,
EditUserType.ACCEPT_CONFESS,
EditUserType.CONFIRM,
EditUserType.LEADER,
if (pd['WORK_LEVEL'] != '1')
EditUserType.AUDIT,
if (pd['WORK_LEVEL'] == '4')
EditUserType.APPROVE,
EditUserType.WORK_USER,
EditUserType.WORK_START,
EditUserType.WORK_END,
EditUserType.ACCEPT,
@ -339,11 +295,7 @@ class _CutroadApplyDetailState extends State<CutroadApplyDetail> {
return;
}
}
//
if (level.length == 0) {
ToastUtil.showNormal(context, '请输入高处作业级别');
return;
}
for (var type in unitRules) {
if (get_pd_DEPARTMENT_ID(type).length == 0) {
@ -358,15 +310,8 @@ class _CutroadApplyDetailState extends State<CutroadApplyDetail> {
}
// LoadingDialogHelper.show();
String taskId = '0';
if (pd['WORK_LEVEL'] == '1') {
taskId = '5';
} else if (pd['WORK_LEVEL'] == '2' || pd['WORK_LEVEL'] == '3') {
taskId = '6';
} else if (pd['WORK_LEVEL'] == '4') {
taskId = '7';
}
pd['WORK_LEVEL_NAME'] = levelList[int.parse(pd['WORK_LEVEL'])];
String taskId = '12';
pd['USER_ID'] = SessionService.instance.loginUserId;
pd['STEP_ID'] = status;
pd['CORPINFO_ID'] = SessionService.instance.corpinfoId;
@ -433,12 +378,9 @@ class _CutroadApplyDetailState extends State<CutroadApplyDetail> {
_getSigns(pd['CUTROAD_ID'] ?? '');
_getMeasures(pd['CUTROAD_ID'] ?? '');
}
pd['WORK_LEVEL'] = pd['WORK_LEVEL']?.toString() ?? '';
//
_contentController.text = pd['WORK_CONTENT'] ?? '';
_locationController.text = pd['WORK_PLACE'] ?? '';
_hightController.text = pd['WORK_HIGH'] ?? '';
_contentController.text = pd['WORK_REASON'] ?? '';
_unitController.text = pd['OTHER_DEPT'] ?? '';
_relatedController.text = pd['SPECIAL_WORK'] ?? '';
_riskController.text = pd['RISK_IDENTIFICATION'] ?? '';
});
@ -473,7 +415,7 @@ class _CutroadApplyDetailState extends State<CutroadApplyDetail> {
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: h_backGroundColor(),
appBar: MyAppbar(title: '高处作业申请'),
appBar: MyAppbar(title: '断路作业申请'),
body: SafeArea(
child: SingleChildScrollView(
padding: EdgeInsets.all(12),
@ -481,20 +423,21 @@ class _CutroadApplyDetailState extends State<CutroadApplyDetail> {
children: [
_card(
CutroadDetailFormWidget(
signs: signs,
pd: pd,
isEditable: isEditable,
contentController: _contentController,
locationController: _locationController,
hightController: _hightController,
unitController: _unitController,
relatedController: _relatedController,
riskController: _riskController,
onChooseLevel: _chooseLevel,
onChooseLevel: (){},
),
),
if (isEditable)
Column(
children: [
SizedBox(height: 15),
_card(_chooseItem(EditUserType.PROJECT_MANAGER)),
SizedBox(height: 15),
_card(_chooseItem(EditUserType.GUARDIAN)),
SizedBox(height: 15),
@ -502,8 +445,6 @@ class _CutroadApplyDetailState extends State<CutroadApplyDetail> {
SizedBox(height: 15),
_card(_chooseItem(EditUserType.ACCEPT_CONFESS)),
SizedBox(height: 15),
_card(_chooseItem(EditUserType.WORK_USER)),
SizedBox(height: 15),
_card(_chooseItem(EditUserType.CONFIRM)),
SizedBox(height: 15),
_card(_chooseItem(EditUserType.LEADER)),

View File

@ -330,6 +330,7 @@ class _CutroadJhrDetailState extends State<CutroadJhrDetail> {
children: [
// _card(_defaultDetail()),
CutroadDetailFormWidget(
signs: signs,
pd: pd,
isEditable: false,
onChooseLevel: (){},

View File

@ -294,7 +294,6 @@ class _CutroadKszyDetailState extends State<CutroadKszyDetail> {
GestureDetector(
child: Row(
children: [
Text('* ', style: TextStyle(color: Colors.red)),
Expanded(
child: ListItemFactory.createRowSpaceBetweenItem(
leftText: '作业开始时间',

View File

@ -14,7 +14,7 @@ import 'package:qhd_prevention/pages/mine/mine_sign_page.dart';
import 'package:qhd_prevention/pages/my_appbar.dart';
///
///
class CutroadShbmDetail extends StatefulWidget {
const CutroadShbmDetail({
super.key,
@ -263,7 +263,7 @@ class _CutroadShbmDetailState extends State<CutroadShbmDetail> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: MyAppbar(title: '审核部门意见'),
appBar: MyAppbar(title: '消防、安全管理部门意见'),
body: SafeArea(
child: SingleChildScrollView(
padding: EdgeInsets.all(12),
@ -284,7 +284,7 @@ class _CutroadShbmDetailState extends State<CutroadShbmDetail> {
Column(
children: [
ListItemFactory.createBuildMultilineInput(
'审核部门意见',
'消防、安全管理部门意见',
'请输入意见',
_contentController,
isRequired: true
@ -295,7 +295,7 @@ class _CutroadShbmDetailState extends State<CutroadShbmDetail> {
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
ListItemFactory.headerTitle('审核部门负责人'),
ListItemFactory.headerTitle('消防、安全管理部门负责人'),
CustomButton(
text: '新增手写签字',
height: 36,

View File

@ -3,6 +3,7 @@ import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:qhd_prevention/customWidget/ItemWidgetFactory.dart';
import 'package:qhd_prevention/customWidget/custom_button.dart';
import 'package:qhd_prevention/customWidget/photo_picker_row.dart';
import 'package:qhd_prevention/customWidget/toast_util.dart';
import 'package:qhd_prevention/pages/home/tap/item_list_widget.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/dl_work/CutroadFormBaseWork.dart';
@ -14,8 +15,14 @@ import 'package:qhd_prevention/customWidget/custom_alert_dialog.dart';
import 'package:qhd_prevention/customWidget/single_image_viewer.dart';
import 'package:qhd_prevention/pages/mine/mine_sign_page.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/dl_work/CutroadFormBaseWork.dart';
/// + 线
class ImageData {
String localPath;
String serverPath;
///
ImageData({required this.localPath, required this.serverPath});
}
///
class CutroadZyrDetail extends StatefulWidget {
const CutroadZyrDetail({
super.key,
@ -35,7 +42,9 @@ class _CutroadZyrDetailState extends State<CutroadZyrDetail> {
///
late Map<String, dynamic> pd = {};
final TextEditingController _contentController = TextEditingController();
late List<ImageData> imgList = [];
///
late List<Map<String, dynamic>> measuresList = [];
late Map<String, dynamic> signs = {};
@ -132,6 +141,14 @@ class _CutroadZyrDetailState extends State<CutroadZyrDetail> {
String reasonText = '';
if (status == '1') {
if (_contentController.text.trim().isEmpty) {
ToastUtil.showNormal(context, '请输入断路地段示意图相关说明');
return;
}
if (imgList.isEmpty) {
ToastUtil.showNormal(context, '请上传缩略图');
return;
}
} else {
await showDialog<String>(
context: context,
@ -152,10 +169,18 @@ class _CutroadZyrDetailState extends State<CutroadZyrDetail> {
return;
}
}
final serverPathString = imgList
.map((e) => e.serverPath)
.where((s) => s.isNotEmpty)
.map((s) => s) // String? String
.join(',');
// measures
final Map<String, dynamic> formData = {};
//
formData['WORK_CONTENT'] = _contentController.text.trim();
formData['CONIMG_PATH'] = serverPathString;
formData['DESCR'] = FormUtils.hasValue(pd, 'DESCR') ?pd['DESCR']: '';
formData['CUTROAD_ID'] = widget.CUTROAD_ID;
formData['SIGNTIME'] = signTimes.join(',');
formData['USER_ID'] = SessionService.instance.loginUserId;
@ -222,7 +247,25 @@ class _CutroadZyrDetailState extends State<CutroadZyrDetail> {
signs = data['signs'] ?? {};
});
}
///
Future<void> _onImageAdded(String localPath) async {
//
final res = await ApiService.uploadSaveFile(localPath);
final url = res['FILE_PATH'] as String;
setState(() {
imgList.add(ImageData(localPath: localPath, serverPath: url));
});
}
///
Future<void> _onImageRemoved(ImageData item) async {
if (item.serverPath != null) {
await ApiService.deleteSaveFile(item.serverPath!);
}
setState(() {
imgList.remove(item);
});
}
///
Widget _bottomButtons() {
return Row(
@ -257,7 +300,7 @@ class _CutroadZyrDetailState extends State<CutroadZyrDetail> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: MyAppbar(title: '作业人意见'),
appBar: MyAppbar(title: '作业项目负责人意见'),
body: SafeArea(
child: SingleChildScrollView(
padding: EdgeInsets.all(12),
@ -276,13 +319,34 @@ class _CutroadZyrDetailState extends State<CutroadZyrDetail> {
ItemListWidget.itemContainer(
Column(
children: [
ListItemFactory.createBuildMultilineInput(
'断路地段示意图相关说明:',
'请输入断路地段示意图相关说明',
_contentController,
isRequired: true
),
Divider(),
RepairedPhotoSection(
title: '断路地段示意图:',
maxCount: 100,
mediaType: MediaType.image,
onChanged: (paths) {},
isShowNum: false,
horizontalPadding: 0,
isRequired: true,
onMediaAdded: _onImageAdded,
onMediaRemoved: (path) {
final item = imgList.firstWhere((e) => e.localPath == path);
_onImageRemoved(item);
},
onAiIdentify: () {},
),
Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
ListItemFactory.headerTitle('作业人'),
ListItemFactory.headerTitle('作业项目负责'),
CustomButton(
text: '新增手写签字',
height: 36,

View File

@ -294,7 +294,6 @@ class _HoistworkKszyDetailState extends State<HoistworkKszyDetail> {
GestureDetector(
child: Row(
children: [
Text('* ', style: TextStyle(color: Colors.red)),
Expanded(
child: ListItemFactory.createRowSpaceBetweenItem(
leftText: '作业开始时间',

View File

@ -294,7 +294,6 @@ class _HighworkKszyDetailState extends State<HighworkKszyDetail> {
GestureDetector(
child: Row(
children: [
Text('* ', style: TextStyle(color: Colors.red)),
Expanded(
child: ListItemFactory.createRowSpaceBetweenItem(
leftText: '作业开始时间',

View File

@ -15,11 +15,12 @@ class ElectricityDetailFormWidget extends StatefulWidget {
///
final TextEditingController? contentController;
final TextEditingController? locationController;
final TextEditingController? methodController;
final TextEditingController? hotworkPersonController;
final TextEditingController? cardController;
final TextEditingController? powerController;
final TextEditingController? ratedPowerController;
final TextEditingController? VController;
final TextEditingController? relatedController;
final TextEditingController? riskController;
const ElectricityDetailFormWidget({
Key? key,
required this.pd,
@ -29,18 +30,20 @@ class ElectricityDetailFormWidget extends StatefulWidget {
required this.onAnalyzeTap,
this.contentController,
this.locationController,
this.methodController,
this.hotworkPersonController,
this.cardController,
this.powerController,
this.ratedPowerController,
this.VController,
this.relatedController,
this.riskController,
}) : assert(
!isEditable ||
(contentController != null &&
locationController != null &&
methodController != null &&
hotworkPersonController != null &&
relatedController != null &&
riskController != null),
cardController != null &&
powerController != null &&
ratedPowerController != null &&
VController != null),
'Editable mode requires all TextEditingController parameters',
),
super(key: key);
@ -82,49 +85,86 @@ class _ElectricityDetailFormWidgetState extends State<ElectricityDetailFormWidge
),
],
const Divider(),
ItemListWidget.singleLineTitleText(
label: '作业地点:',
isEditable: widget.isEditable,
controller: widget.locationController,
text: pd['WORK_PLACE'] ?? '',
),
const Divider(),
ItemListWidget.multiLineTitleTextField(
label: '作业内容:',
isEditable: widget.isEditable,
controller: widget.contentController,
text: pd['WORK_CONTENT'] ?? '',
),
const Divider(),
ItemListWidget.singleLineTitleText(
label: '动火地点及动火部位',
label: '电工证号',
isEditable: widget.isEditable,
controller: widget.locationController,
text: pd['WORK_PLACE'] ?? '',
controller: widget.cardController,
hintText: '请输入电工证号',
text: pd['CARD_NO'] ?? '',
),
const Divider(),
ItemListWidget.selectableLineTitleTextRightButton(
label: '动火作业级别:',
isEditable: widget.isEditable,
onTap: widget.onChooseLevel,
text: pd['WORK_LEVEL'] ?? '',
),
const Divider(),
ItemListWidget.singleLineTitleText(
label: '动火方式:',
isEditable: widget.isEditable,
controller: widget.methodController,
text: pd['WORK_FUNCTION'] ?? '',
),
if (pd['WORK_START_DATE']?.toString().isNotEmpty == true) ...[
const Divider(),
ItemListWidget.singleLineTitleText(
label: '动火作业实施时间:',
isEditable: false,
text: '${pd['WORK_START_DATE']}${pd['WORK_END_DATE'] ?? '--'}',
if (FormUtils.hasValue(pd, 'WORK_START_DATE'))
Column(
children: [
ItemListWidget.singleLineTitleText(
label: '作业开始时间:',
isEditable: false,
text: pd['WORK_START_DATE'] ?? '',
),
const Divider(),
],
),
],
const Divider(),
ItemListWidget.twoRowSelectableTitleText(
label: '动火人及证书编号:',
if (FormUtils.hasValue(pd, 'WORK_END_DATE'))
Column(
children: [
ItemListWidget.singleLineTitleText(
label: '作业结束时间:',
isEditable: false,
text: pd['WORK_END_DATE'] ?? '',
),
const Divider(),
],
),
ItemListWidget.singleLineTitleText(
label: '电源接入点及许可用电功率:',
isEditable: widget.isEditable,
onTap: widget.onChooseHotworkUser,
text: pd['WORK_USER'] ?? '',
controller: widget.hotworkPersonController,
controller: widget.powerController,
hintText: '请输入电源接入点及许可用电功率',
text: pd['ALLOW_POWER'] ?? '',
),
const Divider(),
ItemListWidget.singleLineTitleText(
label: '用电设备名称及额定功率:',
isEditable: widget.isEditable,
controller: widget.ratedPowerController,
hintText: '请输入用电设备名称及额定功率',
text: pd['RATED_POWER'] ?? '',
),
const Divider(),
ItemListWidget.singleLineTitleText(
label: '工作电压:',
isEditable: widget.isEditable,
controller: widget.VController,
hintText: '请输入工作电压',
text: pd['WORK_VOLTAGE'] ?? '',
),
const Divider(),
if (FormUtils.hasValue(pd, 'LEADER_CARD_NO'))
ItemListWidget.singleLineTitleText(
label: '负责人电工号:',
isEditable: false,
text: pd['LEADER_CARD_NO'] ?? '',
),
const Divider(),
ItemListWidget.twoRowButtonTitleText(
label: '关联其他特殊作业及安全作业票编号:',

View File

@ -267,7 +267,8 @@ class SpecialWorkFormBaseWork extends StatelessWidget {
// 4.
if (FormUtils.hasValue(signs, 'GUARDIAN'))
signItemWidget('GUARDIAN', 'GUARDIAN_USER_NAME', '监护人', context),
if (FormUtils.hasValue(signs, 'ELECTRICITY'))
signItemWidget('ELECTRICITY', 'ELECTRICITY_USER_NAME', 'jia人', context),
if (FormUtils.hasValue(signs, 'CONFESS'))
signItemWidget('CONFESS', 'CONFESS_USER_NAME', '安全交底人', context),

View File

@ -18,7 +18,7 @@ import 'package:qhd_prevention/pages/mine/mine_sign_page.dart';
import 'package:qhd_prevention/pages/my_appbar.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_Wrok/MeasuresListWidget.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/lsyd_work/qtfx_work_detail/electricity_gas_list.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/dh_work/HotWorkDetailFormWidget.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/lsyd_work/ElectricityDetailFormWidget.dart';
///
class ElectricitySafeFuncSure extends StatefulWidget {
@ -449,7 +449,7 @@ class _ElectricitySafeFuncSureState extends State<ElectricitySafeFuncSure> {
padding: EdgeInsets.all(12),
child: Column(
children: [
HotWorkDetailFormWidget(
ElectricityDetailFormWidget(
pd: pd,
isEditable: false,
onChooseLevel: () {},

View File

@ -5,7 +5,7 @@ import 'package:qhd_prevention/customWidget/ItemWidgetFactory.dart';
import 'package:qhd_prevention/customWidget/custom_button.dart';
import 'package:qhd_prevention/customWidget/toast_util.dart';
import 'package:qhd_prevention/pages/home/tap/item_list_widget.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/dh_work/SpecialWorkFormBaseWork.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/lsyd_work/SpecialWorkFormBaseWork.dart';
import 'package:qhd_prevention/tools/tools.dart';
import 'package:qhd_prevention/customWidget/custom_alert_dialog.dart';
import 'package:qhd_prevention/customWidget/photo_picker_row.dart';

View File

@ -7,7 +7,7 @@ import 'package:qhd_prevention/customWidget/ItemWidgetFactory.dart';
import 'package:qhd_prevention/customWidget/custom_button.dart';
import 'package:qhd_prevention/customWidget/toast_util.dart';
import 'package:qhd_prevention/pages/home/tap/item_list_widget.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/dh_work/SpecialWorkFormBaseWork.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/lsyd_work/SpecialWorkFormBaseWork.dart';
import 'package:qhd_prevention/tools/tools.dart';
import 'package:qhd_prevention/customWidget/custom_alert_dialog.dart';
import 'package:qhd_prevention/customWidget/single_image_viewer.dart';

View File

@ -2,15 +2,17 @@ import 'package:flutter/material.dart';
import 'package:qhd_prevention/customWidget/toast_util.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/lsyd_work/lsyd_work_detai/electricity_apply_detail.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/lsyd_work/aqcs_work_detail/electricity_safe_func_sure.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/lsyd_work/aqgl_work_detail/electricity_aqgl_detail.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/lsyd_work/aqjd_work_detail/electricity_aqjd_detail.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/lsyd_work/jhr_work_detail/electricity_jhr_detail.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/lsyd_work/jszy_work_detail/electricity_jszy_detail.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/lsyd_work/kszy_work_detail/electricity_kszy_detail.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/lsyd_work/psdw_work_detail/electricity_psdw_detail.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/lsyd_work/szaq_work_detail/electricity_set_safe_detail.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/lsyd_work/szdw_work_detail/electricity_szdw_detail.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/lsyd_work/yddw_work_detail/electricity_yddw_detail.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/lsyd_work/ydr_work_detail/electricity_ydr_detail.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/lsyd_work/ysgd_work_detail/electricity_ysgd_detail.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/lsyd_work/zyfz_work_detail/electricity_zyfz_detail.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/lsyd_work/zyr_work_detail/electricity_zyr_detail.dart';
import 'package:qhd_prevention/pages/my_appbar.dart';
import 'package:qhd_prevention/tools/tools.dart';
import 'package:qhd_prevention/customWidget/bottom_picker.dart';
@ -23,7 +25,12 @@ import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/lsyd_work/jsj
class ElectricityListPage extends StatefulWidget {
final String flow;
final String workTypeTitle;
const ElectricityListPage({Key? key, required this.flow, required this.workTypeTitle}) : super(key: key);
const ElectricityListPage({
Key? key,
required this.flow,
required this.workTypeTitle,
}) : super(key: key);
@override
_ElectricityListPageState createState() => _ElectricityListPageState();
@ -102,7 +109,7 @@ class _ElectricityListPageState extends State<ElectricityListPage> {
'KEYWORDS': searchKeywords,
'WORK_STATE': '0',
};
final url = '/app/hotwork/list?showCount=-1&currentPage=$currentPage';
final url = '/app/electricity/list?showCount=-1&currentPage=$currentPage';
final response = await ApiService.specialCheckListWorkCount(data, url);
setState(() {
@ -127,10 +134,14 @@ class _ElectricityListPageState extends State<ElectricityListPage> {
list.clear();
_fetchData();
}
///
void _handleApply() {
//
pushPage(ElectricityApplyDetail(ELECTRICITY_ID: '', flow: widget.flow), context);
pushPage(
ElectricityApplyDetail(ELECTRICITY_ID: '', flow: widget.flow),
context,
);
}
///
@ -156,82 +167,145 @@ class _ElectricityListPageState extends State<ElectricityListPage> {
).showSnackBar(SnackBar(content: Text('获取流程图失败: $e')));
}
}
// case 0: title = '提交申请'; break;
// case 1: title = '气体检测'; break;
// case 2: title = '设置安全措施确认人'; break;
// case 3: title = '安全措施确认'; break;
// case 4: title = '监护人签字'; break;
// case 5: title = '用电人签字'; break;
// case 6: title = '安全交底人签字'; break;
// case 7: title = '接受交底人签字'; break;
// case 8: title = '作业人签字'; break;
// case 9: title = '作业负责人签字'; break;
// case 10: title = '用电单位签字'; break;
// case 11: title = '配送电单位签字'; break;
// case 12: title = '开始作业'; break;
// case 13: title = '结束作业'; break;
// case 14: title = '验收签字'; break;
void _goToDetail(Map<String, dynamic> item) async {
switch (widget.flow) {
case '提交申请':
await pushPage(ElectricityApplyDetail(ELECTRICITY_ID: item['ELECTRICITY_ID'], flow: widget.flow), context);
await pushPage(
ElectricityApplyDetail(
ELECTRICITY_ID: item['ELECTRICITY_ID'],
flow: widget.flow,
),
context,
);
_fetchData();
break;
case '气体检测':
await pushPage(ElectricityGasList(ELECTRICITY_ID: item['ELECTRICITY_ID'], addFlag:true), context);
await pushPage(
ElectricityGasList(
ELECTRICITY_ID: item['ELECTRICITY_ID'],
addFlag: true,
),
context,
);
break;
case '设置安全措施确认人':
await pushPage(ElectricitySetSafeDetail(ELECTRICITY_ID: item['ELECTRICITY_ID'], flow: widget.flow), context);
await pushPage(
ElectricitySetSafeDetail(
ELECTRICITY_ID: item['ELECTRICITY_ID'],
flow: widget.flow,
),
context,
);
break;
case '安全措施确认':
await pushPage(ElectricitySafeFuncSure(ELECTRICITY_ID: item['ELECTRICITY_ID'], flow: widget.flow), context);
await pushPage(
ElectricitySafeFuncSure(
ELECTRICITY_ID: item['ELECTRICITY_ID'],
flow: widget.flow,
),
context,
);
break;
case '监护人签字':
await pushPage(ElectricityJhrDetail(ELECTRICITY_ID: item['ELECTRICITY_ID'], flow: widget.flow), context);
await pushPage(
ElectricityJhrDetail(
ELECTRICITY_ID: item['ELECTRICITY_ID'],
flow: widget.flow,
),
context,
);
break;
case '用电人签字':
// await pushPage(ElectricityJhrDetail(ELECTRICITY_ID: item['ELECTRICITY_ID'], flow: widget.flow), context);
await pushPage(ElectricityYdrDetail(ELECTRICITY_ID: item['ELECTRICITY_ID'], flow: widget.flow), context);
break;
case '安全交底人签字':
await pushPage(ElectricityAqjdDetail(ELECTRICITY_ID: item['ELECTRICITY_ID'], flow: widget.flow), context);
await pushPage(
ElectricityAqjdDetail(
ELECTRICITY_ID: item['ELECTRICITY_ID'],
flow: widget.flow,
),
context,
);
break;
case '接受交底人签字':
await pushPage(ElectricityJsjdDetail(ELECTRICITY_ID: item['ELECTRICITY_ID'], flow: widget.flow), context);
await pushPage(
ElectricityJsjdDetail(
ELECTRICITY_ID: item['ELECTRICITY_ID'],
flow: widget.flow,
),
context,
);
break;
case '作业人签字':
// await pushPage(ElectricityZyfzDetail(ELECTRICITY_ID: item['ELECTRICITY_ID'], flow: widget.flow), context);
await pushPage(ElectricityZyrDetail(ELECTRICITY_ID: item['ELECTRICITY_ID'], flow: widget.flow), context);
break;
case '作业负责人签字':
await pushPage(ElectricityZyfzDetail(ELECTRICITY_ID: item['ELECTRICITY_ID'], flow: widget.flow), context);
await pushPage(
ElectricityZyfzDetail(
ELECTRICITY_ID: item['ELECTRICITY_ID'],
flow: widget.flow,
),
context,
);
break;
case '用电单位签字':
await pushPage(ElectricitySzdwDetail(ELECTRICITY_ID: item['ELECTRICITY_ID'], flow: widget.flow), context);
await pushPage(
ElectricityYddwDetail(
ELECTRICITY_ID: item['ELECTRICITY_ID'],
flow: widget.flow,
),
context,
);
break;
case '配送电单位签字':
await pushPage(ElectricityAqglDetail(ELECTRICITY_ID: item['ELECTRICITY_ID'], flow: widget.flow), context);
await pushPage(
ElectricityPsdwDetail(
ELECTRICITY_ID: item['ELECTRICITY_ID'],
flow: widget.flow,
),
context,
);
break;
// case '审批人签字':
// routeName = '/hotwork-approve-detail';
// await pushPage(ElectricityDhspDetail(ELECTRICITY_ID: item['ELECTRICITY_ID'], flow: widget.flow), context);
//
// break;
// case '当班班长验票':
// routeName = '/hotwork-monitor-detail';
// await pushPage(ElectricityDbbzDetail(ELECTRICITY_ID: item['ELECTRICITY_ID'], flow: widget.flow), context);
// case '审批人签字':
// routeName = '/hotwork-approve-detail';
// await pushPage(ElectricityDhspDetail(ELECTRICITY_ID: item['ELECTRICITY_ID'], flow: widget.flow), context);
//
// break;
// case '当班班长验票':
// routeName = '/hotwork-monitor-detail';
// await pushPage(ElectricityDbbzDetail(ELECTRICITY_ID: item['ELECTRICITY_ID'], flow: widget.flow), context);
break;
case '开始作业':
await pushPage(ElectricityKszyDetail(ELECTRICITY_ID: item['ELECTRICITY_ID'], flow: widget.flow), context);
await pushPage(
ElectricityKszyDetail(
ELECTRICITY_ID: item['ELECTRICITY_ID'],
flow: widget.flow,
),
context,
);
break;
case '结束作业':
await pushPage(ElectricityJszyDetail(ELECTRICITY_ID: item['ELECTRICITY_ID'], flow: widget.flow), context);
await pushPage(
ElectricityJszyDetail(
ELECTRICITY_ID: item['ELECTRICITY_ID'],
flow: widget.flow,
),
context,
);
break;
case '验收签字':
await pushPage(ElectricityYsgdDetail(ELECTRICITY_ID: item['ELECTRICITY_ID'], flow: widget.flow), context);
await pushPage(
ElectricityYsgdDetail(
ELECTRICITY_ID: item['ELECTRICITY_ID'],
flow: widget.flow,
),
context,
);
break;
default:
break;
@ -240,7 +314,6 @@ class _ElectricityListPageState extends State<ElectricityListPage> {
_fetchSteps();
_fetchData();
});
}
Widget _buildFlowStepItem({
@ -253,9 +326,7 @@ class _ElectricityListPageState extends State<ElectricityListPage> {
final Color dotColor =
status == 1 ? Colors.green : (status == 0 ? Colors.blue : Colors.grey);
final Color textColor =
status == 1
? Colors.green
: (status == 0 ? Colors.blue : Colors.black);
status == 1 ? Colors.green : (status == 0 ? Colors.blue : Colors.black);
return ListTile(
visualDensity: VisualDensity(vertical: -4),
@ -326,8 +397,10 @@ class _ElectricityListPageState extends State<ElectricityListPage> {
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text("编号: ${item['CHECK_NO'] ?? ''}", style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold),),
Text("作业级别: ${item['WORK_LEVEL'] ?? ''}", style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold),),
Text(
"编号: ${item['CHECK_NO'] ?? ''}",
style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
),
],
),
const SizedBox(height: 8),
@ -335,7 +408,8 @@ class _ElectricityListPageState extends State<ElectricityListPage> {
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text("申请人: ${item['APPLY_USER_NAME'] ?? ''}"),
Text("分析人: ${item['ANALYZE_USER_NAME'] ?? ''}"),
if (FormUtils.hasValue(item, 'ANALYZE_USER_NAME'))
Text("分析人: ${item['ANALYZE_USER_NAME'] ?? ''}"),
],
),
const SizedBox(height: 8),
@ -343,36 +417,31 @@ class _ElectricityListPageState extends State<ElectricityListPage> {
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text("监护人: ${item['GUARDIAN_USER_NAME'] ?? ''}"),
Text("批准人: ${item['APPROVE_USER_NAME'] ?? ''}"),
Text("安全交底人: ${item['CONFESS_USER_NAME'] ?? ''}"),
],
),
const SizedBox(height: 8),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text("安全交底人: ${item['CONFESS_USER_NAME'] ?? ''}"),
Text("接受交底人: ${item['ACCEPT_CONFESS_USER_NAME'] ?? ''}"),
],
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text("接受交底人: ${item['ACCEPT_CONFESS_USER_NAME'] ?? ''}"),
Text("作业负责人: ${item['CONFIRM_USER_NAME'] ?? ''}"),
],
),
const SizedBox(height: 8),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text("作业负责人: ${item['CONFIRM_USER_NAME'] ?? ''}"),
Text("动火点负责人: ${item['LEADER_USER_NAME'] ?? ''}"),
],
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text("用电单位负责人: ${item['AUDIT_USER_NAME'] ?? ''}"),
Text("配送电单位负责人: ${item['APPROVE_USER_NAME'] ?? ''}"),
],
),
const SizedBox(height: 8),
if (item['AUDIT_USER_NAME'] != null)
Text("安全管理部门负责人: ${item['AUDIT_USER_NAME'] ?? ''}"),
const SizedBox(height: 8),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text("动火前在岗班长: ${item['MONITOR_USER_NAME'] ?? ''}"),
Text("验收部门负责人: ${item['ACCEPT_USER_NAME'] ?? ''}"),
],
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [Text("验收部门负责人: ${item['ACCEPT_USER_NAME'] ?? ''}")],
),
const SizedBox(height: 8),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
@ -386,17 +455,19 @@ class _ElectricityListPageState extends State<ElectricityListPage> {
],
),
const SizedBox(height: 8),
Row(children: [
CustomButton(
text: '查看流程图',
height: 35,
padding: EdgeInsets.symmetric(horizontal: 12),
margin: EdgeInsets.only(left: 0),
backgroundColor: Colors.blue,
onPressed: () => _openFlowDrawer(item['ELECTRICITY_ID']),
),
SizedBox(width: 1,)
],)
Row(
children: [
CustomButton(
text: '查看流程图',
height: 35,
padding: EdgeInsets.symmetric(horizontal: 12),
margin: EdgeInsets.only(left: 0),
backgroundColor: Colors.blue,
onPressed: () => _openFlowDrawer(item['ELECTRICITY_ID']),
),
SizedBox(width: 1),
],
),
],
),
),

View File

@ -4,7 +4,7 @@ import 'package:intl/intl.dart';
import 'package:qhd_prevention/customWidget/ItemWidgetFactory.dart';
import 'package:qhd_prevention/customWidget/custom_button.dart';
import 'package:qhd_prevention/customWidget/toast_util.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/dh_work/HotWorkDetailFormWidget.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/lsyd_work/ElectricityDetailFormWidget.dart';
import 'package:qhd_prevention/tools/tools.dart';
import 'package:qhd_prevention/http/ApiService.dart';
import 'package:qhd_prevention/pages/my_appbar.dart';
@ -327,7 +327,7 @@ class _ElectricityJhrDetailState extends State<ElectricityJhrDetail> {
child: Column(
children: [
// _card(_defaultDetail()),
HotWorkDetailFormWidget(
ElectricityDetailFormWidget(
pd: pd,
isEditable: false,
onChooseLevel: (){},

View File

@ -12,7 +12,7 @@ import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/lsyd_work/qtf
import 'package:qhd_prevention/customWidget/custom_alert_dialog.dart';
import 'package:qhd_prevention/customWidget/single_image_viewer.dart';
import 'package:qhd_prevention/pages/mine/mine_sign_page.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/dh_work/SpecialWorkFormBaseWork.dart';///
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/lsyd_work/SpecialWorkFormBaseWork.dart';///
class ElectricityJsjdDetail extends StatefulWidget {
const ElectricityJsjdDetail({
super.key,

View File

@ -12,7 +12,7 @@ import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/lsyd_work/qtf
import 'package:qhd_prevention/customWidget/custom_alert_dialog.dart';
import 'package:qhd_prevention/customWidget/single_image_viewer.dart';
import 'package:qhd_prevention/pages/mine/mine_sign_page.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/dh_work/SpecialWorkFormBaseWork.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/lsyd_work/SpecialWorkFormBaseWork.dart';
import 'package:qhd_prevention/customWidget/picker/CupertinoDatePicker.dart';
///

View File

@ -12,7 +12,7 @@ import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/lsyd_work/qtf
import 'package:qhd_prevention/customWidget/custom_alert_dialog.dart';
import 'package:qhd_prevention/customWidget/single_image_viewer.dart';
import 'package:qhd_prevention/pages/mine/mine_sign_page.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/dh_work/SpecialWorkFormBaseWork.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/lsyd_work/SpecialWorkFormBaseWork.dart';
import 'package:qhd_prevention/customWidget/picker/CupertinoDatePicker.dart';
///

View File

@ -7,7 +7,8 @@ import 'package:qhd_prevention/customWidget/department_person_picker.dart';
import 'package:qhd_prevention/customWidget/department_picker.dart';
import 'package:qhd_prevention/customWidget/toast_util.dart';
import 'package:qhd_prevention/pages/home/tap/item_list_widget.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/dh_work/HotWorkDetailFormWidget.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/lsyd_work/ElectricityDetailFormWidget.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/lsyd_work/ElectricityDetailFormWidget.dart';
import 'package:qhd_prevention/tools/h_colors.dart';
import 'package:qhd_prevention/tools/tools.dart';
import 'package:qhd_prevention/http/ApiService.dart';
@ -16,17 +17,17 @@ import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/lsyd_work/qtf
import 'package:qhd_prevention/customWidget/bottom_picker.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_Wrok/MeasuresListWidget.dart';
enum EditUserType {
// 12
ANALYZE('分析单位', '分析单位负责人', true),
GUARDIAN('监护人单位', '监护人', true),
ELECTRICITY('用电单位', '用电人', true),//
CONFESS('安全交底人单位', '安全交底人', true),
ACCEPT_CONFESS('接受交底人单位', '接受交底人', true),
WORK('作业人单位', '作业人', true), //
CONFIRM('作业负责人单位', '作业负责人', true),
LEADER('所在单位', '所在单位负责人', true),
AUDIT('安全管理部门', '安全管理部门负责人', true),
APPROVE('动火审批单位', '动火审批负责人', true),
MONITOR('动火前在岗部门', '动火前在岗班长', true),
AUDIT('用电单位', '用电单位负责人', true),
APPROVE('配送电单位', '配送电单负责人', true),
WORK_START('作业开始负责人单位', '作业开始负责人', true),
WORK_END('作业结束负责人单位', '作业结束负责人', true),
ACCEPT('验收部门', '验收部门负责人', true);
@ -39,7 +40,6 @@ enum EditUserType {
const EditUserType(this.displayName, this.personName, this.isRequired);
}
class ElectricityApplyDetail extends StatefulWidget {
const ElectricityApplyDetail({
super.key,
@ -56,11 +56,13 @@ class ElectricityApplyDetail extends StatefulWidget {
class _ElectricityApplyDetailState extends State<ElectricityApplyDetail> {
late bool isEditable = false;
final levelList = ["特级", "一级", "二级"];
///
late String msg = 'add';
//
bool _isGasAnalyze = false;
///
late Map<String, dynamic> pd = {};
late Map<String, dynamic> signs = {};
@ -68,14 +70,14 @@ class _ElectricityApplyDetailState extends State<ElectricityApplyDetail> {
final TextEditingController _contentController = TextEditingController();
final TextEditingController _locationController = TextEditingController();
final TextEditingController _methodController = TextEditingController();
final TextEditingController _hotworkPersonController =
TextEditingController();
final TextEditingController _cardController = TextEditingController();
final TextEditingController _powerController = TextEditingController();
final TextEditingController _ratedPowerController = TextEditingController();
final TextEditingController _VController = TextEditingController();
final TextEditingController _relatedController = TextEditingController();
final TextEditingController _riskController = TextEditingController();
///
late List<dynamic> workUserList = [];
//
final TextEditingController _fzCardController = TextEditingController();
//
final Map<EditUserType, List<Map<String, dynamic>>> _personCache = {};
@ -88,28 +90,34 @@ class _ElectricityApplyDetailState extends State<ElectricityApplyDetail> {
_getData();
} else {
isEditable = true;
pd['ANALYZE_TIME'] = 1;
pd['APPLY_DEPARTMENT_ID'] = SessionService.instance.deptId;
pd['APPLY_DEPARTMENT_NAME'] =
SessionService.instance.loginUser!['DEPARTMENT_NAME'] ?? '';
pd['APPLY_USER_ID'] = SessionService.instance.loginUserId;
pd['APPLY_USER_NAME'] = SessionService.instance.username;
}
_getHotWorkNameList();
_contentController.addListener(() {
setState(() {
pd['WORK_CONTENT'] = _contentController.text.trim();
});
pd['WORK_CONTENT'] = _contentController.text.trim();
});
_locationController.addListener(() {
pd['WORK_PLACE'] = _locationController.text.trim();
});
_methodController.addListener(() {
pd['WORK_FUNCTION'] = _methodController.text.trim();
_cardController.addListener(() {
pd['CARD_NO'] = _cardController.text.trim();
});
_hotworkPersonController.addListener(() {
pd['WORK_USER'] = _hotworkPersonController.text.trim();
_powerController.addListener(() {
pd['ALLOW_POWER'] = _powerController.text.trim();
});
_ratedPowerController.addListener(() {
pd['RATED_POWER'] = _ratedPowerController.text.trim();
});
_VController.addListener(() {
pd['WORK_VOLTAGE'] = _VController.text.trim();
});
_fzCardController.addListener(() {
pd['LEADER_CARD_NO'] = _VController.text.trim();
});
_relatedController.addListener(() {
pd['SPECIAL_WORK'] = _relatedController.text.trim();
@ -148,47 +156,13 @@ class _ElectricityApplyDetailState extends State<ElectricityApplyDetail> {
}
String get_pd_USER_Name(EditUserType type) {
if (type == EditUserType.WORK) {
return pd['${type.name}_USER_USER_NAME'] ?? '';
}
return pd['${type.name}_USER_NAME'] ?? '';
}
Future<void> _chooseLevel() async {
final choice = await BottomPicker.show<String>(
context,
items: levelList,
itemBuilder: (item) => Text(item, textAlign: TextAlign.center),
initialIndex: 0,
);
if (choice != null) {
// choice
setState(() {
pd['WORK_LEVEL'] = choice;
FocusHelper.clearFocus(context);
});
}
}
Future<void> _chooseHorkUser() async {
final choice = await BottomPicker.show<String>(
context,
items: workUserList.map((item) => item['NAME'] as String).toList(),
itemBuilder: (item) => Text(item, textAlign: TextAlign.center),
initialIndex: 0,
);
if (choice != null) {
setState(() {
pd['WORK_USER'] = choice;
_hotworkPersonController.text = choice;
Map<String, dynamic> result = workUserList.firstWhere(
(item) => item['NAME'] == choice,
orElse: () => {}, //
);
if (FormUtils.hasValue(result, 'USER_ID')) {
pd['WORK_USER_ID'] = result['USER_ID'];
}
FocusHelper.clearFocus(context);
});
}
}
Widget _card(Widget child) {
return Container(
@ -205,26 +179,6 @@ class _ElectricityApplyDetailState extends State<ElectricityApplyDetail> {
bool isClean = false;
bool isRequired = true;
if (isEditable) {
if (type == EditUserType.AUDIT && (pd['WORK_LEVEL'] ?? '') == '二级') {
isClean = true;
isRequired = false;
}
// APPROVE
if (type == EditUserType.APPROVE && pd['WORK_LEVEL'] != '特级') {
isRequired = false;
isClean = true;
}
// EditUserType.APPROVE,
if (type == EditUserType.APPROVE &&
((pd['WORK_LEVEL'] ?? '') == '二级' ||
(pd['WORK_LEVEL'] ?? '') == '一级')) {
isClean = true;
}
}
return Column(
children: [
ItemListWidget.selectableLineTitleTextRightButton(
@ -250,6 +204,19 @@ class _ElectricityApplyDetailState extends State<ElectricityApplyDetail> {
text: pd['${type.name}_USER_NAME'] ?? '请选择',
onTap: () => choosePersonHandle(type),
),
if (type == EditUserType.CONFIRM)
Column(
children: [
Divider(),
ItemListWidget.singleLineTitleText(
label: '负责人电工号:',
isEditable: isEditable,
controller: _fzCardController,
hintText: '请输入负责人电工号',
text: pd['LEADER_CARD_NO'] ?? '',
),
],
)
],
);
}
@ -301,13 +268,15 @@ class _ElectricityApplyDetailState extends State<ElectricityApplyDetail> {
return;
}
if (personList.isEmpty) { //
if (personList.isEmpty) {
//
await _getPersonListForUnitId(unitId, type);
final list = _personCache[type] ?? [];
if (list.isEmpty) { //
if (list.isEmpty) {
//
ToastUtil.showNormal(context, '暂无数据,请选择其他单位');
}else{
} else {
choosePersonHandle(type);
}
return;
@ -337,40 +306,46 @@ class _ElectricityApplyDetailState extends State<ElectricityApplyDetail> {
//
final textRules = <Map<String, dynamic>>[
{'value': _contentController.text.trim(), 'message': '请填写作业内容'},
{'value': _locationController.text.trim(), 'message': '填写动火地点及部位'},
{'value': _methodController.text.trim(), 'message': '填写动火方式'},
{'value': _hotworkPersonController.text.trim(), 'message': '填写动火人及证书编号'},
{'value': _locationController.text.trim(), 'message': '输入作业地点'},
{'value': _cardController.text.trim(), 'message': '输入电工证号'},
{'value': _powerController.text.trim(), 'message': '输入电源接入点及许可用电功率'},
{
'value': _relatedController.text.trim(),
'message': '请输入关联的其他特殊作业及安全作业票编号',
'value': _ratedPowerController.text.trim(),
'message': '请输入用电设备名称及额定功率',
},
{
'value': _fzCardController.text.trim(),
'message': '请输入负责人电工号',
},
{'value': _VController.text.trim(), 'message': '请输入工作电压'},
{'value': _relatedController.text.trim(), 'message': '请输入关联的其他特殊作业及安全作业票编号'},
{'value': _riskController.text.trim(), 'message': '请填写风险辨识结果'},
];
final level = pd['WORK_LEVEL'] ?? '';
print('---level-$level');
///
final unitRules = <EditUserType>[
EditUserType.ANALYZE,
if (_isGasAnalyze)
EditUserType.ANALYZE,
EditUserType.GUARDIAN,
EditUserType.ELECTRICITY,
EditUserType.CONFESS,
EditUserType.ACCEPT_CONFESS,
EditUserType.WORK,
EditUserType.CONFIRM,
EditUserType.LEADER,
// SAFETY_USER_ID AUDIT
if (pd['WORK_LEVEL'] != '二级' || FormUtils.hasValue(pd, 'SAFETY_USER_ID')) EditUserType.AUDIT,
EditUserType.AUDIT,
// APPROVE
if (pd['WORK_LEVEL'] == '特级')
EditUserType.APPROVE,
EditUserType.MONITOR,
EditUserType.AUDIT,
EditUserType.APPROVE,
EditUserType.WORK_START,
EditUserType.WORK_END,
EditUserType.ACCEPT,
];
if (status == '1') {
if (!_isGasAnalyze) {
pd['ANALYZE_DEPARTMENT_ID'] = '';
pd['ANALYZE_USER_ID'] = '';
}
//
for (var rule in textRules) {
if ((rule['value'] as String).isEmpty) {
@ -378,11 +353,6 @@ class _ElectricityApplyDetailState extends State<ElectricityApplyDetail> {
return;
}
}
//
if (level.length == 0) {
ToastUtil.showNormal(context, '请选择动火级别');
return;
}
for (var type in unitRules) {
if (get_pd_DEPARTMENT_ID(type).length == 0) {
@ -397,20 +367,15 @@ class _ElectricityApplyDetailState extends State<ElectricityApplyDetail> {
}
// LoadingDialogHelper.show();
String taskId = '0';
if (level == '特级') {
taskId = '1';
} else if (level == '一级') {
taskId = '2';
} else if (level == '二级') {
taskId = '3';
}
String taskId = '8';
pd['USER_ID'] = SessionService.instance.loginUserId;
pd['STEP_ID'] = status;
pd['CORPINFO_ID'] = SessionService.instance.corpinfoId;
pd['OPERATOR'] = SessionService.instance.loginUserId;
pd['CREATOR'] = SessionService.instance.loginUserId;
pd['ACTION_USER'] = SessionService.instance.username;
pd['ISANALYZE'] = _isGasAnalyze ? 1 : 0;
pd['APPLY_STATUS'] = status;
pd['TASK_ID'] = taskId;
@ -428,15 +393,14 @@ class _ElectricityApplyDetailState extends State<ElectricityApplyDetail> {
String jsonStr = jsonEncode(pd);
printLongString(jsonStr);
try {
String url = "/app/hotwork/" + msg;
String url = "/app/electricity/" + msg;
final result = await ApiService.submitHomework(url, pd);
LoadingDialogHelper.hide();
if (result['result'] == 'success') {
ToastUtil.showSuccess(context, status == '1' ? '提交成功' : '已暂存');
Navigator.pop(context);
}else{
} else {
ToastUtil.showSuccess(context, '提交失败');
}
} catch (e) {
LoadingDialogHelper.hide();
@ -444,18 +408,13 @@ class _ElectricityApplyDetailState extends State<ElectricityApplyDetail> {
}
}
Future<void> _getHotWorkNameList() async {
final result = await ApiService.getHotWorkNameList();
setState(() {
workUserList = result['varList'] ?? '';
List<String> names =
workUserList.map((item) => item['NAME'] as String).toList();
});
}
///
Future<void> _getData() async {
final data = await ApiService.getHomeworkFindById('electricity', widget.ELECTRICITY_ID);
final data = await ApiService.getHomeworkFindById(
'electricity',
widget.ELECTRICITY_ID,
);
setState(() {
pd = data['pd'];
if (pd['STEP_ID'] == 0) {
@ -467,8 +426,10 @@ class _ElectricityApplyDetailState extends State<ElectricityApplyDetail> {
//
_contentController.text = pd['WORK_CONTENT'] ?? '';
_locationController.text = pd['WORK_PLACE'] ?? '';
_methodController.text = pd['WORK_FUNCTION'] ?? '';
_hotworkPersonController.text = pd['WORK_USER'] ?? '';
_cardController.text = pd['WORK_FUNCTION'] ?? '';
_powerController.text = pd['WORK_USER'] ?? '';
_ratedPowerController.text = pd['SPECIAL_WORK'] ?? '';
_VController.text = pd['WORK_VOLTAGE'] ?? '';
_relatedController.text = pd['SPECIAL_WORK'] ?? '';
_riskController.text = pd['RISK_IDENTIFICATION'] ?? '';
});
@ -480,7 +441,8 @@ class _ElectricityApplyDetailState extends State<ElectricityApplyDetail> {
}
Future<void> _getSigns(String homework_id) async {
final data = await ApiService.listSignFinished('electricity',
final data = await ApiService.listSignFinished(
'electricity',
homework_id.length > 0 ? homework_id : widget.ELECTRICITY_ID,
);
setState(() {
@ -489,7 +451,8 @@ class _ElectricityApplyDetailState extends State<ElectricityApplyDetail> {
}
Future<void> _getMeasures(String homework_id) async {
final data = await ApiService.listSignFinishMeasures('electricity',
final data = await ApiService.listSignFinishMeasures(
'electricity',
homework_id.length > 0 ? homework_id : widget.ELECTRICITY_ID,
);
setState(() {
@ -503,24 +466,26 @@ class _ElectricityApplyDetailState extends State<ElectricityApplyDetail> {
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: h_backGroundColor(),
appBar: MyAppbar(title: '动火安全作业申请'),
appBar: MyAppbar(title: '临时用电作业申请'),
body: SafeArea(
child: SingleChildScrollView(
padding: EdgeInsets.all(12),
child: Column(
children: [
_card(
HotWorkDetailFormWidget(
ElectricityDetailFormWidget(
pd: pd,
isEditable: isEditable,
contentController: _contentController,
locationController: _locationController,
methodController: _methodController,
hotworkPersonController: _hotworkPersonController,
cardController: _cardController,
powerController: _powerController,
ratedPowerController: _ratedPowerController,
VController: _VController,
relatedController: _relatedController,
riskController: _riskController,
onChooseLevel: _chooseLevel,
onChooseHotworkUser: _chooseHorkUser,
onChooseLevel: () {},
onChooseHotworkUser: (){},
onAnalyzeTap: () {
pushPage(
ElectricityGasList(ELECTRICITY_ID: widget.ELECTRICITY_ID),
@ -529,28 +494,46 @@ class _ElectricityApplyDetailState extends State<ElectricityApplyDetail> {
},
),
),
SizedBox(height: 10),
ListItemFactory.createYesNoSection(
title: '是否进行气体分析',
horizontalPadding: 0,
groupValue: _isGasAnalyze,
onChanged: (val) {
setState(() {
_isGasAnalyze = val;
});
},
),
if (isEditable)
Column(
children: [
SizedBox(height: 15),
_card(_chooseItem(EditUserType.ANALYZE)),
SizedBox(height: 15),
if (_isGasAnalyze)
Column(
children: [
_card(_chooseItem(EditUserType.ANALYZE)),
SizedBox(height: 15),
],
),
_card(_chooseItem(EditUserType.GUARDIAN)),
SizedBox(height: 15),
_card(_chooseItem(EditUserType.CONFESS)),
SizedBox(height: 15),
_card(_chooseItem(EditUserType.ELECTRICITY)),
SizedBox(height: 15),
_card(_chooseItem(EditUserType.CONFESS)),
SizedBox(height: 15),
_card(_chooseItem(EditUserType.ACCEPT_CONFESS)),
SizedBox(height: 15),
_card(_chooseItem(EditUserType.CONFIRM)),
_card(_chooseItem(EditUserType.WORK)),
SizedBox(height: 15),
_card(_chooseItem(EditUserType.LEADER)),
_card(_chooseItem(EditUserType.CONFIRM)),
SizedBox(height: 15),
_card(_chooseItem(EditUserType.AUDIT)),
SizedBox(height: 15),
_card(_chooseItem(EditUserType.APPROVE)),
SizedBox(height: 15),
_card(_chooseItem(EditUserType.MONITOR)),
SizedBox(height: 15),
_card(
Column(
mainAxisAlignment: MainAxisAlignment.start,
@ -604,7 +587,7 @@ class _ElectricityApplyDetailState extends State<ElectricityApplyDetail> {
color: Colors.white,
child: MeasuresListWidget(
measuresList:
measuresList, // List<Map<String, dynamic>>
measuresList, // List<Map<String, dynamic>>
baseImgPath: ApiService.baseImgPath,
isAllowEdit: false,
),
@ -632,45 +615,9 @@ class _ElectricityApplyDetailState extends State<ElectricityApplyDetail> {
),
isEditable
? Row(
spacing: 10,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Expanded(
child: CustomButton(
height: 45,
textStyle: TextStyle(
fontSize: 16,
color: Colors.white,
),
text: '提交',
backgroundColor: Colors.blue,
onPressed: () {
_submit('1');
},
),
),
Expanded(
child: CustomButton(
textStyle: TextStyle(
fontSize: 16,
color: Colors.white,
),
text: '暂存',
backgroundColor: Colors.green,
onPressed: () {
_submit('0');
},
),
),
],
)
: Column(
children: [
SizedBox(height: 20),
Row(
spacing: 10,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
SizedBox(width: 50),
Expanded(
child: CustomButton(
height: 45,
@ -678,18 +625,54 @@ class _ElectricityApplyDetailState extends State<ElectricityApplyDetail> {
fontSize: 16,
color: Colors.white,
),
text: '返回',
backgroundColor: Colors.green,
text: '提交',
backgroundColor: Colors.blue,
onPressed: () {
Navigator.pop(context);
_submit('1');
},
),
),
SizedBox(width: 50),
Expanded(
child: CustomButton(
textStyle: TextStyle(
fontSize: 16,
color: Colors.white,
),
text: '暂存',
backgroundColor: Colors.green,
onPressed: () {
_submit('0');
},
),
),
],
)
: Column(
children: [
SizedBox(height: 20),
Row(
children: [
SizedBox(width: 50),
Expanded(
child: CustomButton(
height: 45,
textStyle: TextStyle(
fontSize: 16,
color: Colors.white,
),
text: '返回',
backgroundColor: Colors.green,
onPressed: () {
Navigator.pop(context);
},
),
),
SizedBox(width: 50),
],
),
],
),
],
),
],
),
),

View File

@ -5,7 +5,7 @@ import 'package:qhd_prevention/customWidget/ItemWidgetFactory.dart';
import 'package:qhd_prevention/customWidget/custom_button.dart';
import 'package:qhd_prevention/customWidget/toast_util.dart';
import 'package:qhd_prevention/pages/home/tap/item_list_widget.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/dh_work/SpecialWorkFormBaseWork.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/lsyd_work/SpecialWorkFormBaseWork.dart';
import 'package:qhd_prevention/tools/tools.dart';
import 'package:qhd_prevention/customWidget/custom_alert_dialog.dart';
import 'package:qhd_prevention/customWidget/single_image_viewer.dart';
@ -15,9 +15,9 @@ import 'package:qhd_prevention/pages/my_appbar.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/lsyd_work/qtfx_work_detail/electricity_gas_list.dart';
///
class ElectricityAqglDetail extends StatefulWidget {
const ElectricityAqglDetail({
///
class ElectricityPsdwDetail extends StatefulWidget {
const ElectricityPsdwDetail({
super.key,
required this.ELECTRICITY_ID,
required this.flow,
@ -27,10 +27,10 @@ class ElectricityAqglDetail extends StatefulWidget {
final String flow;
@override
State<ElectricityAqglDetail> createState() => _ElectricityAqglDetailState();
State<ElectricityPsdwDetail> createState() => _ElectricityPsdwDetailState();
}
class _ElectricityAqglDetailState extends State<ElectricityAqglDetail> {
class _ElectricityPsdwDetailState extends State<ElectricityPsdwDetail> {
late bool isEditable = false;
///
@ -263,7 +263,7 @@ class _ElectricityAqglDetailState extends State<ElectricityAqglDetail> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: MyAppbar(title: '安全管理部门意见'),
appBar: MyAppbar(title: '配送电单位意见'),
body: SafeArea(
child: SingleChildScrollView(
padding: EdgeInsets.all(12),
@ -290,7 +290,7 @@ class _ElectricityAqglDetailState extends State<ElectricityAqglDetail> {
Column(
children: [
ListItemFactory.createBuildMultilineInput(
'安全管理部门意见',
'配送电单位意见',
'请输入意见',
_contentController,
isRequired: true
@ -301,7 +301,7 @@ class _ElectricityAqglDetailState extends State<ElectricityAqglDetail> {
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
ListItemFactory.headerTitle('安全管理部门负责人'),
ListItemFactory.headerTitle('配送电单位负责人'),
CustomButton(
text: '新增手写签字',
height: 36,

View File

@ -1,272 +0,0 @@
import 'package:flutter/material.dart';
import 'package:qhd_prevention/customWidget/custom_button.dart';
import 'package:qhd_prevention/customWidget/toast_util.dart';
import 'package:qhd_prevention/pages/home/tap/item_list_widget.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/sxkj_work/qtfx_work_detail/spacework_gas_list.dart';
import 'package:qhd_prevention/tools/h_colors.dart';
import 'package:qhd_prevention/tools/tools.dart';
import 'package:qhd_prevention/http/ApiService.dart';
import 'package:qhd_prevention/pages/my_appbar.dart';
import 'package:qhd_prevention/customWidget/custom_alert_dialog.dart';
import 'package:qhd_prevention/customWidget/single_image_viewer.dart';
///
class ElectricityGasEdit extends StatefulWidget {
const ElectricityGasEdit({
super.key,
required this.CONFINEDSPACE_ID,
this.addFlag = false,
});
final String CONFINEDSPACE_ID;
final bool addFlag;
@override
State<ElectricityGasEdit> createState() => _ElectricityGasEditState();
}
class _ElectricityGasEditState extends State<ElectricityGasEdit> {
Map<String, dynamic> pd = {};
final TextEditingController _gasName1Controller = TextEditingController();
final TextEditingController _gasName2Controller = TextEditingController();
final TextEditingController _gasName3Controller = TextEditingController();
final TextEditingController _gasName4Controller = TextEditingController();
final TextEditingController _gasStandard1Controller = TextEditingController();
final TextEditingController _gasStandard2Controller = TextEditingController();
final TextEditingController _gasStandard3Controller = TextEditingController();
final TextEditingController _gasStandard4Controller = TextEditingController();
@override
void initState() {
super.initState();
_getData();
}
Future<void> _getData() async {
try {
final result = await ApiService.getConfinedspacegaswh(widget.CONFINEDSPACE_ID);
if (FormUtils.hasValue(result, 'pd')) {
setState(() {
pd = result['pd'];
_gasName1Controller.text = pd['GAS_NAME1'] ?? '';
_gasStandard1Controller.text = pd['GAS_STANDARD1'] ?? '';
_gasName2Controller.text = pd['GAS_NAME2'] ?? '';
_gasStandard2Controller.text = pd['GAS_STANDARD2'] ?? '';
_gasName3Controller.text = pd['GAS_NAME3'] ?? '';
_gasStandard3Controller.text = pd['GAS_STANDARD3'] ?? '';
_gasName4Controller.text = pd['GAS_NAME4'] ?? '';
_gasStandard4Controller.text = pd['GAS_STANDARD4'] ?? '';
});
}
} catch (e) {
ToastUtil.showNormal(context, '获取数据失败: \$e');
}
}
Future<void> _gasAnalyze() async {
//
for (var key in [
'GAS_NAME1', 'GAS_STANDARD1',
'GAS_NAME2', 'GAS_STANDARD2',
'GAS_NAME3', 'GAS_STANDARD3',
'GAS_NAME4', 'GAS_STANDARD4'
]) {
pd.remove(key);
}
// pd
void assignIfNotEmpty(String key, String value) {
if (value.trim().isNotEmpty) pd[key] = value.trim();
}
assignIfNotEmpty('GAS_NAME1', _gasName1Controller.text);
assignIfNotEmpty('GAS_STANDARD1', _gasStandard1Controller.text);
assignIfNotEmpty('GAS_NAME2', _gasName2Controller.text);
assignIfNotEmpty('GAS_STANDARD2', _gasStandard2Controller.text);
assignIfNotEmpty('GAS_NAME3', _gasName3Controller.text);
assignIfNotEmpty('GAS_STANDARD3', _gasStandard3Controller.text);
assignIfNotEmpty('GAS_NAME4', _gasName4Controller.text);
assignIfNotEmpty('GAS_STANDARD4', _gasStandard4Controller.text);
//
pd['CONFINEDSPACE_ID'] = widget.CONFINEDSPACE_ID;
pd['ANALYZE_USER'] = SessionService.instance.username;
//
final hasAnyName = pd.containsKey('GAS_NAME1') || pd.containsKey('GAS_NAME2') ||
pd.containsKey('GAS_NAME3') || pd.containsKey('GAS_NAME4');
if (!hasAnyName) {
ToastUtil.showNormal(context,
widget.addFlag ? '最少填写一项气体名称' : '无气体检测信息');
return;
}
//
void checkPair(String nameKey, String stdKey, String label) {
final hasName = pd.containsKey(nameKey);
final hasStd = pd.containsKey(stdKey);
if (hasName && !hasStd) {
ToastUtil.showNormal(context, '请输入$label 的合格标准');
throw '';
}
if (!hasName && hasStd) {
ToastUtil.showNormal(context, '请输入$label 的名称');
throw '';
}
}
try {
checkPair('GAS_NAME1', 'GAS_STANDARD1', '有毒有害气体名称1');
checkPair('GAS_NAME2', 'GAS_STANDARD2', '有毒有害气体名称2');
checkPair('GAS_NAME3', 'GAS_STANDARD3', '可燃气体名称1');
checkPair('GAS_NAME4', 'GAS_STANDARD4', '可燃气体名称2');
} catch (_) {
return;
}
//
final isEdit = pd.containsKey('CONFINEDSPACEGASWH_ID') &&
pd['CONFINEDSPACEGASWH_ID'] != null;
final url = isEdit ? '/app/confinedspacegaswh/edit' : '/app/confinedspacegaswh/add';
try {
LoadingDialogHelper.show();
final res = await ApiService.submitSpaceGas(url, pd);
LoadingDialogHelper.hide();
if (res != null && res['result'] == 'success') {
Map<String, dynamic> arguments = {
'isShow': widget.addFlag,
'CONFINEDSPACE_ID': widget.CONFINEDSPACE_ID,
'addFlag': 1,
'GAS_NAME1': pd['GAS_NAME1'] ?? '',
'GAS_NAME2': pd['GAS_NAME2'] ?? '',
'GAS_NAME3': pd['GAS_NAME3'] ?? '',
'GAS_NAME4': pd['GAS_NAME4'] ?? '',
};
pushPage(SpaceworkGasList(CONFINEDSPACE_ID: widget.CONFINEDSPACE_ID, saveParams: arguments,addFlag: true,), context);
} else {
ToastUtil.showNormal(context, res['message'] ?? '提交失败');
}
} catch (e) {
LoadingDialogHelper.hide();
ToastUtil.showNormal(context, '提交异常: $e');
}
}
Widget _card(Widget child) {
return Container(
padding: const EdgeInsets.symmetric(vertical: 5),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(5),
),
child: child,
);
}
Widget _buildListContent() {
return Padding(
padding: const EdgeInsets.all(12),
child: SingleChildScrollView(
child: Column(
children: [
_card(
Column(
children: [
ItemListWidget.selectableLineTitleTextField(
label: '有毒有害气体名称1',
isEditable: true,
controller: _gasName1Controller,
text: '',
),
const Divider(),
ItemListWidget.selectableLineTitleTextField(
label: '合格标准:',
isEditable: true,
controller: _gasStandard1Controller,
text: '',
),
],
),
),
const SizedBox(height: 12),
_card(
Column(
children: [
ItemListWidget.selectableLineTitleTextField(
label: '有毒有害气体名称2',
isEditable: true,
controller: _gasName2Controller,
text: '',
),
const Divider(),
ItemListWidget.selectableLineTitleTextField(
label: '合格标准:',
isEditable: true,
controller: _gasStandard2Controller,
text: '',
),
],
),
),
const SizedBox(height: 12),
_card(
Column(
children: [
ItemListWidget.selectableLineTitleTextField(
label: '可燃气体名称1',
isEditable: true,
controller: _gasName3Controller,
text: '',
),
const Divider(),
ItemListWidget.selectableLineTitleTextField(
label: '合格标准:',
isEditable: true,
controller: _gasStandard3Controller,
text: '',
),
],
),
),
const SizedBox(height: 12),
_card(
Column(
children: [
ItemListWidget.selectableLineTitleTextField(
label: '可燃气体名称2',
isEditable: true,
controller: _gasName4Controller,
text: '',
),
const Divider(),
ItemListWidget.selectableLineTitleTextField(
label: '合格标准:',
isEditable: true,
controller: _gasStandard4Controller,
text: '',
),
],
),
),
const SizedBox(height: 20),
CustomButton(
text: '气体分析',
backgroundColor: Colors.green,
onPressed: _gasAnalyze,
),
],
),
),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: h_backGroundColor(),
appBar: MyAppbar(title: '气体名称'),
body: SafeArea(child: _buildListContent()),
);
}
}

View File

@ -75,23 +75,23 @@ class _ElectricityGasListState extends State<ElectricityGasList> {
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text('分析时间: ${item['ANALYZE_TIME'] ?? ''}'),
Text('代表性气体: ${item['ANALYZE_GAS'] ?? ''}'),
],
),
const SizedBox(height: 6),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text('分析数据: ${item['ANALYZE_RESULT'] ?? ''}'),
if ((item['ANALYZE_PLACE'] ?? '').toString().isNotEmpty)
Text('分析地点: ${item['ANALYZE_PLACE']}'),
],
),
const SizedBox(height: 6),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text('可燃气体检测结果: ${item['ANALYZE_RESULT'] ?? ''}'),
],
),
const SizedBox(height: 6),
Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
const Text('分析人:'),
Text('分析人:${item['ANALYZE_USER'] ?? ''}'),
const SizedBox(width: 8),
Expanded(
child: Wrap(
@ -101,7 +101,7 @@ class _ElectricityGasListState extends State<ElectricityGasList> {
final img = baseImgPath + images[i];
return GestureDetector(
onTap: () {
present(
presentOpaque(
SingleImageViewer(imageUrl: img),
context,
);
@ -119,7 +119,7 @@ class _ElectricityGasListState extends State<ElectricityGasList> {
if (widget.addFlag)
TextButton(
onPressed: () =>
_deleteItem(item['HOTWORKGAS_ID'].toString()),
_deleteItem(item['ELECTRICITYGAS_ID'].toString()),
style: TextButton.styleFrom(
backgroundColor: Colors.red,
padding: const EdgeInsets.symmetric(horizontal: 12),
@ -171,7 +171,7 @@ class _ElectricityGasListState extends State<ElectricityGasList> {
return Scaffold(
backgroundColor: Colors.white,
appBar: MyAppbar(
title: '气体分析详情',
title: '临时用电作业气体分析',
actions: [
if (widget.addFlag)
TextButton(

View File

@ -1,5 +1,4 @@
import 'dart:io';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/sxkj_work/qtfx_work_detail/spacework_gas_list.dart';
import 'package:dotted_line/dotted_line.dart';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
@ -15,13 +14,8 @@ import 'package:qhd_prevention/tools/tools.dart';
import 'package:qhd_prevention/pages/mine/mine_sign_page.dart';
class ElectricityGasTestPage extends StatefulWidget {
const ElectricityGasTestPage({
Key? key,
required this.ELECTRICITY_ID,
this.saveParams = const {},
}) : super(key: key);
const ElectricityGasTestPage({Key? key, required this.ELECTRICITY_ID}) : super(key: key);
final Map<String, dynamic> saveParams;
final String ELECTRICITY_ID;
@override
@ -32,24 +26,13 @@ class _ElectricityGasTestPageState extends State<ElectricityGasTestPage> {
String _selectData = '';
List<String> imagePaths = [];
List<String> signTimes = []; //
Map<String, dynamic> pd = {};
final TextEditingController _PartController = TextEditingController(); //
final TextEditingController _O2Controller = TextEditingController(); //
final TextEditingController _addressController =
TextEditingController(); //
final TextEditingController _gas1Controller = TextEditingController(); //
final TextEditingController _gas2Controller = TextEditingController(); //
final TextEditingController _gas3Controller = TextEditingController(); //
final TextEditingController _gas4Controller = TextEditingController(); //
final TextEditingController _pointController = TextEditingController();
final TextEditingController _resultController = TextEditingController();
bool _loading = false;
@override
void initState() {
super.initState();
pd['ANALYZE_USER'] = SessionService.instance.username;
pd['ELECTRICITY_ID'] = widget.ELECTRICITY_ID;
}
Future<void> _chooseDatePicker() async {
@ -57,7 +40,6 @@ class _ElectricityGasTestPageState extends State<ElectricityGasTestPage> {
if (picked != null) {
setState(() {
_selectData = DateFormat('yyyy-MM-dd HH:mm').format(picked);
pd['ANALYZE_TIME'] = _selectData;
});
}
}
@ -80,59 +62,58 @@ class _ElectricityGasTestPageState extends State<ElectricityGasTestPage> {
Widget _signListWidget() {
return Column(
children:
imagePaths.map((path) {
return Column(
children: imagePaths.map((path) {
return Column(
children: [
const SizedBox(height: 10),
const Divider(),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
const SizedBox(height: 10),
const Divider(),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
GestureDetector(
child: // ConstrainedBox BoxFit.contain
ConstrainedBox(
constraints: const BoxConstraints(
maxWidth: 200,
maxHeight: 150,
),
child: Image.file(
File(path),
//
fit: BoxFit.contain,
),
),
onTap: () {
presentOpaque(
SingleImageViewer(imageUrl: path),
context,
);
},
),
Column(
children: [
GestureDetector(
child: // ConstrainedBox BoxFit.contain
ConstrainedBox(
constraints: const BoxConstraints(
maxWidth: 200,
maxHeight: 150,
),
child: Image.file(
File(path),
//
fit: BoxFit.contain,
),
Container(
padding: const EdgeInsets.only(right: 5),
child: CustomButton(
text: 'X',
height: 30,
padding: const EdgeInsets.symmetric(horizontal: 10),
backgroundColor: Colors.red,
onPressed: () {
setState(() {
imagePaths.remove(path);
});
},
),
onTap: () {
presentOpaque(
SingleImageViewer(imageUrl: path),
context,
);
},
),
Column(
children: [
Container(
padding: const EdgeInsets.only(right: 5),
child: CustomButton(
text: 'X',
height: 30,
padding: const EdgeInsets.symmetric(horizontal: 10),
backgroundColor: Colors.red,
onPressed: () {
setState(() {
imagePaths.remove(path);
});
},
),
),
const SizedBox(height: 80),
],
),
const SizedBox(height: 80),
],
),
],
);
}).toList(),
),
],
);
}).toList(),
);
}
@ -142,13 +123,7 @@ class _ElectricityGasTestPageState extends State<ElectricityGasTestPage> {
return;
}
if (status == 1) {
if (_selectData.isEmpty) {
ToastUtil.showNormal(context, '请选择取样分析时间');
return;
}
if (_PartController.text.isEmpty ||
_O2Controller.text.isEmpty ||
_addressController.text.isEmpty) {
if (_selectData.isEmpty || _resultController.text.isEmpty || _pointController.text.isEmpty) {
ToastUtil.showNormal(context, '请完善所有字段');
return;
}
@ -158,82 +133,53 @@ class _ElectricityGasTestPageState extends State<ElectricityGasTestPage> {
if (status != 1) {
await showDialog<String>(
context: context,
builder:
(_) => CustomAlertDialog(
title: '作废原因',
mode: DialogMode.input,
hintText: '请输入作废原因',
cancelText: '取消',
confirmText: '确定',
onInputConfirm: (text) {
reasonText = text;
},
),
builder: (_) => CustomAlertDialog(
title: '作废原因',
mode: DialogMode.input,
hintText: '请输入作废原因',
cancelText: '取消',
confirmText: '确定',
onInputConfirm: (text) {
reasonText = text;
},
),
);
if (reasonText.isEmpty) {
ToastUtil.showNormal(context, '请填写作废原因');
return;
}
}
if (FormUtils.hasValue(widget.saveParams, 'GAS_NAME1')) {
if (_gas1Controller.text.trim().isEmpty) {
pd['DATA1'] = 0;
} else {
pd['DATA1'] = _gas1Controller.text;
}
}
if (FormUtils.hasValue(widget.saveParams, 'GAS_NAME2')) {
if (_gas2Controller.text.trim().isEmpty) {
pd['DATA2'] = 0;
} else {
pd['DATA2'] = _gas2Controller.text;
}
}
if (FormUtils.hasValue(widget.saveParams, 'GAS_NAME3')) {
if (_gas3Controller.text.trim().isEmpty) {
pd['DATA3'] = 0;
} else {
pd['DATA3'] = _gas3Controller.text;
}
}
if (FormUtils.hasValue(widget.saveParams, 'GAS_NAME4')) {
if (_gas4Controller.text.trim().isEmpty) {
pd['DATA4'] = 0;
} else {
pd['DATA4'] = _gas4Controller.text;
}
}
bool isConfirm = false;
await showDialog<bool>(
context: context,
builder: (_) => CustomAlertDialog(
title: '请确认',
content: status == 1 ? '通过本作业票?' : '作废本作业票?',
onConfirm: () {
isConfirm = true;
},
),
);
if (isConfirm != true) return;
setState(() => _loading = true);
final formData = {
...pd,
'ANALYZE_PART': _PartController.text,
'OXYGEN_CONTENT': _O2Controller.text,
'ANALYZE_PLACE': _addressController.text,
'ELECTRICITY_ID': widget.ELECTRICITY_ID,
'ANALYZE_TIME': _selectData,
'ANALYZE_USER': SessionService.instance.username,
'ANALYZE_PLACE': _pointController.text,
'ANALYZE_RESULT': _resultController.text,
'APPLY_STATUS': status,
'STEP_REASON': reasonText ?? '',
'SIGNTIME': signTimes.join(','),
'SIGNTIME':signTimes.join(','),
'CORPINFO_ID': SessionService.instance.corpinfoId,
'USER_ID': SessionService.instance.loginUserId,
};
await showDialog<bool>(
context: context,
builder:
(_) => CustomAlertDialog(
title: '请确认',
content: status == 1 ? '通过本作业票?' : '作废本作业票?',
onConfirm: () {
isConfirm = true;
},
),
);
if (isConfirm != true) return;
try {
await ApiService.saveGasTest('confinedspace',formData, imagePaths);
await ApiService.saveGasTest('electricity',formData, imagePaths);
ToastUtil.showNormal(context, status == 1 ? '保存成功' : '作废成功');
Navigator.of(context).pop(status == 1);
} catch (e) {
@ -243,169 +189,96 @@ class _ElectricityGasTestPageState extends State<ElectricityGasTestPage> {
}
}
Future<void> setRequest() async {}
Future<void> setRequest() async {
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: MyAppbar(title: '气体检测'),
body: SafeArea(
child:
_loading
? const Center(child: CircularProgressIndicator())
: SingleChildScrollView(
padding: const EdgeInsets.all(12),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Container(
padding: const EdgeInsets.all(5),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(10),
),
child: Column(
children: [
if (FormUtils.hasValue(
widget.saveParams,
'GAS_NAME1',
))
Column(
children: [
ItemListWidget.singleLineTitleText(
label: '${widget.saveParams['GAS_NAME1']}',
isEditable: true,
isRequired: false,
strongRequired: false,
controller: _gas1Controller,
),
const Divider(),
],
),
if (FormUtils.hasValue(
widget.saveParams,
'GAS_NAME2',
))
Column(
children: [
ItemListWidget.singleLineTitleText(
label: '${widget.saveParams['GAS_NAME2']}',
isEditable: true,
isRequired: false,
strongRequired: false,
controller: _gas2Controller,
),
const Divider(),
],
),
if (FormUtils.hasValue(
widget.saveParams,
'GAS_NAME3',
))
Column(
children: [
ItemListWidget.singleLineTitleText(
label: '${widget.saveParams['GAS_NAME3']}',
isEditable: true,
isRequired: false,
strongRequired: false,
controller: _gas3Controller,
),
const Divider(),
],
),
if (FormUtils.hasValue(
widget.saveParams,
'GAS_NAME4',
))
Column(
children: [
ItemListWidget.singleLineTitleText(
label: '${widget.saveParams['GAS_NAME4']}',
isEditable: true,
isRequired: false,
strongRequired: false,
controller: _gas4Controller,
),
const Divider(),
],
),
ItemListWidget.selectableLineTitleTextRightButton(
label: '取样分析时间',
isEditable: true,
text: _selectData,
onTap: _chooseDatePicker,
),
const Divider(),
ItemListWidget.singleLineTitleText(
label: '分析部位:',
hintText: '请输入分析部位',
isEditable: true,
controller: _PartController,
),
const Divider(),
ItemListWidget.singleLineTitleText(
label: '氧气含量:',
hintText: '请输入氧气含量',
isEditable: true,
controller: _O2Controller,
),
const Divider(),
ItemListWidget.singleLineTitleText(
label: '分析地点:',
hintText: '请输入分析地点',
isEditable: true,
controller: _addressController,
),
const Divider(),
ItemListWidget.singleLineTitleText(
label: '分析人:',
isEditable: false,
strongRequired: true,
text: SessionService.instance.username,
),
const SizedBox(height: 20),
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
CustomButton(
text: '新增手写签字',
height: 40,
backgroundColor: Colors.blue,
onPressed: _sign,
),
],
),
if (imagePaths.isNotEmpty) _signListWidget(),
],
),
),
const SizedBox(height: 20),
Row(
children: [
Expanded(
child: CustomButton(
text: '作废',
backgroundColor: Colors.red,
onPressed: () => _submit(-1),
),
),
const SizedBox(width: 20),
Expanded(
child: CustomButton(
text: '保存',
backgroundColor: Colors.blue,
onPressed: () => _submit(1),
),
),
],
),
],
),
appBar: MyAppbar(title: '气体检测'),
body: SafeArea(child:
_loading
? const Center(child: CircularProgressIndicator())
: SingleChildScrollView(
padding: const EdgeInsets.all(12),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Container(
padding: const EdgeInsets.all(5),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(10),
),
),
child: Column(
children: [
ItemListWidget.selectableLineTitleTextRightButton(
label: '分析时间',
isEditable: true,
text: _selectData,
onTap: _chooseDatePicker,
),
const Divider(),
ItemListWidget.singleLineTitleText(
label: '分析点:',
isEditable: true,
controller: _pointController,
),
const Divider(),
ItemListWidget.singleLineTitleText(
label: '可燃气体检测结果:',
isEditable: true,
controller: _resultController,
),
const Divider(),
ItemListWidget.singleLineTitleText(
label: '分析人:',
isEditable: false,
text: SessionService.instance.username,
),
const SizedBox(height: 20),
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
CustomButton(
text: '新增手写签字',
height: 40,
backgroundColor: Colors.blue,
onPressed: _sign,
),
],
),
if (imagePaths.isNotEmpty) _signListWidget(),
],
),
),
const SizedBox(height: 20),
Row(
children: [
Expanded(
child: CustomButton(
text: '作废',
backgroundColor: Colors.red,
onPressed: () => _submit(-1),
),
),
const SizedBox(width: 20),
Expanded(
child: CustomButton(
text: '保存',
backgroundColor: Colors.blue,
onPressed: () => _submit(1),
),
),
],
),
],
),
),
)
);
}
}

View File

@ -43,6 +43,7 @@ class _SafeFunctionDialogState extends State<SafeFunctionDialog> {
@override
Widget build(BuildContext context) {
return AlertDialog(
backgroundColor: Colors.white,
insetPadding: const EdgeInsets.symmetric(horizontal: 12, vertical: 24),
content: SizedBox(
width: MediaQuery.of(context).size.width - 24,

View File

@ -9,7 +9,7 @@ import 'package:qhd_prevention/customWidget/department_person_picker.dart';
import 'package:qhd_prevention/customWidget/department_picker.dart';
import 'package:qhd_prevention/customWidget/toast_util.dart';
import 'package:qhd_prevention/pages/home/tap/item_list_widget.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/dh_work/HotWorkDetailFormWidget.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/lsyd_work/ElectricityDetailFormWidget.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/lsyd_work/qtfx_work_detail/electricity_gas_list.dart';
import 'package:qhd_prevention/tools/tools.dart';
import 'package:qhd_prevention/http/ApiService.dart';
@ -18,7 +18,7 @@ import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/lsyd_work/qtf
import 'package:qhd_prevention/customWidget/custom_alert_dialog.dart';
import 'package:qhd_prevention/customWidget/single_image_viewer.dart';
import 'package:qhd_prevention/pages/mine/mine_sign_page.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_Wrok/dh_work/szaq_work_detail/SafeFunctionDialog.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/lsyd_work/szaq_work_detail/SafeFunctionDialog.dart';
///
class ElectricitySetSafeDetail extends StatefulWidget {
const ElectricitySetSafeDetail({
@ -568,7 +568,7 @@ class _ElectricitySetSafeDetailState extends State<ElectricitySetSafeDetail> {
child: Column(
children: [
// _card(_defaultDetail()),
HotWorkDetailFormWidget(
ElectricityDetailFormWidget(
pd: pd,
isEditable: false,
onChooseLevel: (){},

View File

@ -12,11 +12,11 @@ import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/lsyd_work/qtf
import 'package:qhd_prevention/customWidget/custom_alert_dialog.dart';
import 'package:qhd_prevention/customWidget/single_image_viewer.dart';
import 'package:qhd_prevention/pages/mine/mine_sign_page.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/dh_work/SpecialWorkFormBaseWork.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/lsyd_work/SpecialWorkFormBaseWork.dart';
///
class ElectricitySzdwDetail extends StatefulWidget {
const ElectricitySzdwDetail({
///
class ElectricityYddwDetail extends StatefulWidget {
const ElectricityYddwDetail({
super.key,
required this.ELECTRICITY_ID,
required this.flow,
@ -26,10 +26,10 @@ class ElectricitySzdwDetail extends StatefulWidget {
final String flow;
@override
State<ElectricitySzdwDetail> createState() => _ElectricitySzdwDetailState();
State<ElectricityYddwDetail> createState() => _ElectricityYddwDetailState();
}
class _ElectricitySzdwDetailState extends State<ElectricitySzdwDetail> {
class _ElectricityYddwDetailState extends State<ElectricityYddwDetail> {
late bool isEditable = false;
///
@ -133,7 +133,7 @@ class _ElectricitySzdwDetailState extends State<ElectricitySzdwDetail> {
String DESCR = _contentController.text.trim();
if (DESCR.isEmpty) {
ToastUtil.showNormal(context, '请输入所在单位负责人意见');
ToastUtil.showNormal(context, '请输入用电单位意见');
return;
}
if (status == '1') {
@ -263,7 +263,7 @@ class _ElectricitySzdwDetailState extends State<ElectricitySzdwDetail> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: MyAppbar(title: '所在单位意见'),
appBar: MyAppbar(title: '用电单位意见'),
body: SafeArea(
child: SingleChildScrollView(
padding: EdgeInsets.all(12),
@ -290,7 +290,7 @@ class _ElectricitySzdwDetailState extends State<ElectricitySzdwDetail> {
Column(
children: [
ListItemFactory.createBuildMultilineInput(
'所在单位负责人意见',
'用电单位意见',
'请输入意见',
_contentController,
isRequired: true
@ -301,7 +301,7 @@ class _ElectricitySzdwDetailState extends State<ElectricitySzdwDetail> {
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
ListItemFactory.headerTitle('所在单位负责人'),
ListItemFactory.headerTitle('用电单位负责人'),
CustomButton(
text: '新增手写签字',
height: 36,

View File

@ -0,0 +1,321 @@
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:qhd_prevention/customWidget/ItemWidgetFactory.dart';
import 'package:qhd_prevention/customWidget/custom_button.dart';
import 'package:qhd_prevention/customWidget/toast_util.dart';
import 'package:qhd_prevention/tools/tools.dart';
import 'package:qhd_prevention/http/ApiService.dart';
import 'package:qhd_prevention/pages/my_appbar.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/lsyd_work/qtfx_work_detail/electricity_gas_list.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/lsyd_work/SpecialWorkFormBaseWork.dart';
import 'package:qhd_prevention/customWidget/custom_alert_dialog.dart';
import 'package:qhd_prevention/customWidget/single_image_viewer.dart';
import 'package:qhd_prevention/pages/mine/mine_sign_page.dart';
///
class ElectricityYdrDetail extends StatefulWidget {
const ElectricityYdrDetail({
super.key,
required this.ELECTRICITY_ID,
required this.flow,
});
final String ELECTRICITY_ID;
final String flow;
@override
State<ElectricityYdrDetail> createState() => _ElectricityYdrDetailState();
}
class _ElectricityYdrDetailState extends State<ElectricityYdrDetail> {
late bool isEditable = false;
///
late Map<String, dynamic> pd = {};
///
late List<Map<String, dynamic>> measuresList = [];
late Map<String, dynamic> signs = {};
List<String> imagePaths = [];
List<String> signTimes = []; //
@override
void initState() {
super.initState();
_getData();
}
///
Future<void> _sign() async {
final path = await Navigator.push(
context,
MaterialPageRoute(builder: (context) => MineSignPage()),
);
if (path != null) {
final now = DateFormat('yyyy-MM-dd HH:mm').format(DateTime.now());
setState(() {
imagePaths.add(path);
signTimes.add(now);
FocusHelper.clearFocus(context);
});
}
}
Widget _signListWidget() {
return Column(
children:
imagePaths.map((path) {
return Column(
children: [
const SizedBox(height: 10),
const Divider(),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
GestureDetector(
child: // ConstrainedBox BoxFit.contain
ConstrainedBox(
constraints: const BoxConstraints(
maxWidth: 200,
maxHeight: 150,
),
child: Image.file(
File(path),
//
fit: BoxFit.contain,
),
),
onTap: () {
presentOpaque(
SingleImageViewer(imageUrl: path),
context,
);
},
),
Column(
children: [
Container(
padding: const EdgeInsets.only(right: 5),
child: CustomButton(
text: 'X',
height: 30,
padding: const EdgeInsets.symmetric(horizontal: 10),
backgroundColor: Colors.red,
onPressed: () {
setState(() {
imagePaths.remove(path);
});
},
),
),
const SizedBox(height: 80),
],
),
],
),
],
);
}).toList(),
);
}
/// -1 1
Future<void> _submit(String status) async {
if (imagePaths.isEmpty) {
ToastUtil.showNormal(context, '请签字');
return;
}
String reasonText = '';
if (status == '1') {
} else {
await showDialog<String>(
context: context,
builder:
(_) => CustomAlertDialog(
title: '作废原因',
mode: DialogMode.input,
hintText: '请输入作废原因',
cancelText: '取消',
confirmText: '确定',
onInputConfirm: (text) {
reasonText = text;
},
),
);
if (reasonText.isEmpty) {
ToastUtil.showNormal(context, '请填写作废原因');
return;
}
}
final Map<String, dynamic> formData = {};
//
formData['ELECTRICITY_ID'] = widget.ELECTRICITY_ID;
formData['SIGNTIME'] = signTimes.join(',');
formData['USER_ID'] = SessionService.instance.loginUserId;
formData['APPLY_STATUS'] = status;
formData['STEP_REASON'] = reasonText;
await showDialog<String>(
context: context,
builder:
(_) => CustomAlertDialog(
title: '提示',
content: '请确认' + (status == '1' ? "通过" : "作废") + '本作业票?',
cancelText: '取消',
confirmText: '确定',
onConfirm: () async {
LoadingDialogHelper.show();
try {
final result = await ApiService.saveSafeFunctionSure(
'electricity',
formData,
imagePaths,
);
LoadingDialogHelper.hide();
if (result['result'] == 'success') {
ToastUtil.showSuccess(
context,
'保存成功',
);
Navigator.pop(context);
}
} catch (e) {
LoadingDialogHelper.hide();
ToastUtil.showNormal(context, '操作失败:$e');
}
},
),
);
}
///
Future<void> _getData() async {
final data = await ApiService.getHomeworkFindById('electricity', widget.ELECTRICITY_ID);
setState(() {
pd = data['pd'];
_getSigns(pd['ELECTRICITY_ID'] ?? '');
_getMeasures(pd['ELECTRICITY_ID'] ?? '');
});
}
Future<void> _getMeasures(String homework_id) async {
final data = await ApiService.listSignFinishMeasures('electricity',
homework_id.length > 0 ? homework_id : widget.ELECTRICITY_ID,
);
setState(() {
measuresList = List<Map<String, dynamic>>.from(
data['finishMeasuresList'] ?? <Map<String, dynamic>>[],
);
});
}
Future<void> _getSigns(String homework_id) async {
final data = await ApiService.listSignFinished('electricity',
homework_id.length > 0 ? homework_id : widget.ELECTRICITY_ID,
);
setState(() {
signs = data['signs'] ?? {};
});
}
///
Widget _setSafeDetailWidget() {
return Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(8),
),
padding: EdgeInsets.symmetric(horizontal: 5),
child: Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
ListItemFactory.createBuildSimpleSection('用电人'),
CustomButton(
text: '新增手写签字',
height: 36,
backgroundColor: Colors.green,
onPressed: () {
_sign();
},
),
],
),
SizedBox(height: 10),
if (imagePaths.isNotEmpty) _signListWidget(),
],
),
);
}
///
Widget _bottomButtons() {
return Row(
spacing: 10,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Expanded(
child: CustomButton(
height: 45,
textStyle: TextStyle(fontSize: 16, color: Colors.white),
text: '作废',
backgroundColor: Colors.red,
onPressed: () {
_submit('-1');
},
),
),
Expanded(
child: CustomButton(
textStyle: TextStyle(fontSize: 16, color: Colors.white),
text: '通过',
backgroundColor: Colors.green,
onPressed: () {
_submit('1');
},
),
),
],
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: MyAppbar(title: '用电人签字确认'),
body: SafeArea(
child: SingleChildScrollView(
padding: EdgeInsets.all(12),
child: Column(
children: [
// _card(_defaultDetail()),
SpecialWorkFormBaseWork(
pd: pd,
measuresList: measuresList,
signs: signs,
baseImgPath: ApiService.baseImgPath,
isEditable: false,
onChooseLevel: () {},
onChooseHotworkUser: () {},
onAnalyzeTap: () {
pushPage(
ElectricityGasList(ELECTRICITY_ID: widget.ELECTRICITY_ID),
context,
);
},
),
SizedBox(height: 20),
_setSafeDetailWidget(),
SizedBox(height: 20),
_bottomButtons(),
],
),
),
),
);
}
}

View File

@ -12,7 +12,7 @@ import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/lsyd_work/qtf
import 'package:qhd_prevention/customWidget/custom_alert_dialog.dart';
import 'package:qhd_prevention/customWidget/single_image_viewer.dart';
import 'package:qhd_prevention/pages/mine/mine_sign_page.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/dh_work/SpecialWorkFormBaseWork.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/lsyd_work/SpecialWorkFormBaseWork.dart';
import 'package:qhd_prevention/customWidget/picker/CupertinoDatePicker.dart';
import 'package:qhd_prevention/customWidget/photo_picker_row.dart';

View File

@ -12,7 +12,7 @@ import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/lsyd_work/qtf
import 'package:qhd_prevention/customWidget/custom_alert_dialog.dart';
import 'package:qhd_prevention/customWidget/single_image_viewer.dart';
import 'package:qhd_prevention/pages/mine/mine_sign_page.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/dh_work/SpecialWorkFormBaseWork.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/lsyd_work/SpecialWorkFormBaseWork.dart';
///
class ElectricityZyfzDetail extends StatefulWidget {

View File

@ -0,0 +1,308 @@
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:qhd_prevention/customWidget/ItemWidgetFactory.dart';
import 'package:qhd_prevention/customWidget/custom_button.dart';
import 'package:qhd_prevention/customWidget/toast_util.dart';
import 'package:qhd_prevention/pages/home/tap/item_list_widget.dart';
import 'package:qhd_prevention/tools/tools.dart';
import 'package:qhd_prevention/http/ApiService.dart';
import 'package:qhd_prevention/pages/my_appbar.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/lsyd_work/qtfx_work_detail/electricity_gas_list.dart';
import 'package:qhd_prevention/customWidget/custom_alert_dialog.dart';
import 'package:qhd_prevention/customWidget/single_image_viewer.dart';
import 'package:qhd_prevention/pages/mine/mine_sign_page.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/lsyd_work/SpecialWorkFormBaseWork.dart';///
class ElectricityZyrDetail extends StatefulWidget {
const ElectricityZyrDetail({
super.key,
required this.ELECTRICITY_ID,
required this.flow,
});
final String ELECTRICITY_ID;
final String flow;
@override
State<ElectricityZyrDetail> createState() => _ElectricityZyrDetailState();
}
class _ElectricityZyrDetailState extends State<ElectricityZyrDetail> {
late bool isEditable = false;
///
late Map<String, dynamic> pd = {};
///
late List<Map<String, dynamic>> measuresList = [];
late Map<String, dynamic> signs = {};
List<String> signImages = [];
List<String> signTimes = []; //
@override
void initState() {
super.initState();
_getData();
}
///
Future<void> _sign() async {
final path = await Navigator.push(
context,
MaterialPageRoute(builder: (context) => MineSignPage()),
);
if (path != null) {
final now = DateFormat('yyyy-MM-dd HH:mm').format(DateTime.now());
setState(() {
signImages.add(path);
signTimes.add(now);
FocusHelper.clearFocus(context);
});
}
}
Widget _signListWidget() {
return Column(
children:
signImages.map((path) {
return Column(
children: [
const SizedBox(height: 10),
const Divider(),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
GestureDetector(
child: // ConstrainedBox BoxFit.contain
ConstrainedBox(
constraints: const BoxConstraints(
maxWidth: 200,
maxHeight: 150,
),
child: Image.file(
File(path),
//
fit: BoxFit.contain,
),
),
onTap: () {
presentOpaque(
SingleImageViewer(imageUrl: path),
context,
);
},
),
Column(
children: [
Container(
padding: const EdgeInsets.only(right: 5),
child: CustomButton(
text: 'X',
height: 30,
padding: const EdgeInsets.symmetric(horizontal: 10),
backgroundColor: Colors.red,
onPressed: () {
setState(() {
signImages.remove(path);
});
},
),
),
const SizedBox(height: 80),
],
),
],
),
],
);
}).toList(),
);
}
/// -1 1
Future<void> _submit(String status) async {
if (signImages.isEmpty) {
ToastUtil.showNormal(context, '请签字');
return;
}
String reasonText = '';
if (status == '1') {
} else {
await showDialog<String>(
context: context,
builder:
(_) => CustomAlertDialog(
title: '作废原因',
mode: DialogMode.input,
hintText: '请输入作废原因',
cancelText: '取消',
confirmText: '确定',
onInputConfirm: (text) {
reasonText = text;
},
),
);
if (reasonText.isEmpty) {
ToastUtil.showNormal(context, '请填写作废原因');
return;
}
}
// measures
final Map<String, dynamic> formData = {};
//
formData['ELECTRICITY_ID'] = widget.ELECTRICITY_ID;
formData['SIGNTIME'] = signTimes.join(',');
formData['USER_ID'] = SessionService.instance.loginUserId;
formData['APPLY_STATUS'] = status;
formData['STEP_REASON'] = reasonText;
await showDialog<String>(
context: context,
builder:
(_) => CustomAlertDialog(
title: '提示',
content: '请确认' + (status == '1' ? "通过" : "作废") + '本作业票?',
cancelText: '取消',
confirmText: '确定',
onConfirm: () async {
LoadingDialogHelper.show();
try {
final result = await ApiService.saveSafeFunctionSure(
'electricity',
formData,
signImages,
);
LoadingDialogHelper.hide();
if (result['result'] == 'success') {
ToastUtil.showSuccess(context, '保存成功');
Navigator.pop(context);
}
} catch (e) {
LoadingDialogHelper.hide();
ToastUtil.showNormal(context, '操作失败:$e');
}
},
),
);
}
///
Future<void> _getData() async {
final data = await ApiService.getHomeworkFindById('electricity', widget.ELECTRICITY_ID);
setState(() {
pd = data['pd'];
_getSigns(pd['ELECTRICITY_ID'] ?? '');
_getMeasures(pd['ELECTRICITY_ID'] ?? '');
});
}
Future<void> _getMeasures(String homework_id) async {
final data = await ApiService.listSignFinishMeasures('electricity',
homework_id.length > 0 ? homework_id : widget.ELECTRICITY_ID,
);
setState(() {
measuresList = List<Map<String, dynamic>>.from(
data['finishMeasuresList'] ?? <Map<String, dynamic>>[],
);
});
}
Future<void> _getSigns(String homework_id) async {
final data = await ApiService.listSignFinished('electricity',
homework_id.length > 0 ? homework_id : widget.ELECTRICITY_ID,
);
setState(() {
signs = data['signs'] ?? {};
});
}
///
Widget _bottomButtons() {
return Row(
spacing: 10,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Expanded(
child: CustomButton(
height: 45,
textStyle: TextStyle(fontSize: 16, color: Colors.white),
text: '作废',
backgroundColor: Colors.red,
onPressed: () {
_submit('-1');
},
),
),
Expanded(
child: CustomButton(
textStyle: TextStyle(fontSize: 16, color: Colors.white),
text: '通过',
backgroundColor: Colors.green,
onPressed: () {
_submit('1');
},
),
),
],
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: MyAppbar(title: '作业人签字确认'),
body: SafeArea(
child: SingleChildScrollView(
padding: EdgeInsets.all(12),
child: Column(
spacing: 12,
children: [
// _setSafeDetailWidget(),
SpecialWorkFormBaseWork(
pd: pd,
measuresList: measuresList,
signs: signs,
baseImgPath: ApiService.baseImgPath,
isEditable: false,
onChooseLevel: () {},
onChooseHotworkUser: () {},
onAnalyzeTap: () {
pushPage(
ElectricityGasList(ELECTRICITY_ID: widget.ELECTRICITY_ID),
context,
);
},
),
ItemListWidget.itemContainer(
Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
ListItemFactory.headerTitle('作业人'),
CustomButton(
text: '新增手写签字',
height: 36,
backgroundColor: Colors.green,
onPressed: () {
_sign();
},
),
],
),
if (signImages.isNotEmpty) _signListWidget(),
],
),
),
_bottomButtons(),
],
),
),
),
);
}
}

View File

@ -1,19 +1,58 @@
import 'dart:convert';
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/single_image_viewer.dart';
import '../../../../../../tools/tools.dart';
import '../../../item_list_widget.dart';
import '../../special_Wrok/MeasuresListWidget.dart';
/// /
class MBCD_data_model {
String BOARD_MATERIAL;
String BOARD_SPECIFICATION;
String BOARD_NO;
MBCD_data_model({
required this.BOARD_MATERIAL,
required this.BOARD_SPECIFICATION,
required this.BOARD_NO,
});
factory MBCD_data_model.fromJson(Map<String, dynamic> json) {
return MBCD_data_model(
BOARD_MATERIAL: json['BOARD_MATERIAL'] as String? ?? '',
BOARD_SPECIFICATION: json['BOARD_SPECIFICATION'] as String? ?? '',
// BOARD_NO BOARD_SPECIFICATION
BOARD_NO: json['BOARD_NO'] as String? ?? '',
);
}
Map<String, dynamic> toJson() {
return {
'BOARD_MATERIAL': BOARD_MATERIAL,
'BOARD_SPECIFICATION': BOARD_SPECIFICATION,
'BOARD_NO': BOARD_NO,
};
}
}
/// /
class BlindboardDetailFormWidget extends StatefulWidget {
final Map<String, dynamic> pd;
final List<dynamic> boardList;
final bool isEditable;
final VoidCallback onChooseLevel;
///
final TextEditingController? locationController; //
final TextEditingController? hightController; //
final TextEditingController? contentController; //
final TextEditingController? nameController; //
///
final TextEditingController? mediumController; //
final TextEditingController? temperatureController; //
final TextEditingController? pressureController; //
final TextEditingController? relatedController;
final TextEditingController? riskController;
@ -22,40 +61,51 @@ class BlindboardDetailFormWidget extends StatefulWidget {
required this.pd,
required this.isEditable,
required this.onChooseLevel,
this.locationController,
this.hightController,
this.contentController,
required this.boardList,
this.nameController,
this.mediumController,
this.temperatureController,
this.pressureController,
this.relatedController,
this.riskController,
}) : assert(
!isEditable ||
(locationController != null &&
hightController != null &&
contentController != null &&
relatedController != null &&
riskController != null),
'Editable mode requires all TextEditingController parameters',
),
super(key: key);
!isEditable ||
(nameController != null &&
mediumController != null &&
temperatureController != null &&
pressureController != null &&
relatedController != null &&
riskController != null),
'Editable mode requires all TextEditingController parameters',
),
super(key: key);
@override
State<BlindboardDetailFormWidget> createState() => _BlindboardDetailFormWidgetState();
State<BlindboardDetailFormWidget> createState() =>
_BlindboardDetailFormWidgetState();
}
class _BlindboardDetailFormWidgetState extends State<BlindboardDetailFormWidget> {
class _BlindboardDetailFormWidgetState
extends State<BlindboardDetailFormWidget> {
///
late final List<Map<String, dynamic>> boardList;
String _getWorkLevelText(dynamic level) {
switch (level?.toString()) {
case '1': return 'I级高处作业';
case '2': return 'II级高处作业';
case '3': return 'III级高处作业';
case '4': return 'IV级高处作业';
default: return '';
case '1':
return '堵盲板';
case '2':
return '抽盲板';
default:
return '';
}
}
@override
Widget build(BuildContext context) {
final boardList = widget.boardList;
final pd = widget.pd;
return Container(
padding: const EdgeInsets.symmetric(vertical: 10),
decoration: const BoxDecoration(
@ -74,53 +124,183 @@ class _BlindboardDetailFormWidgetState extends State<BlindboardDetailFormWidget>
const Divider(),
],
ItemListWidget.singleLineTitleText(
label: '作业地点:',
isEditable: widget.isEditable,
controller: widget.locationController,
text: pd['WORK_PLACE'] ?? '',
label: '申请部门:',
isEditable: false,
text: pd['APPLY_DEPARTMENT_NAME'] ?? '',
),
const Divider(),
ItemListWidget.singleLineTitleText(
label: '作业高度(米):',
keyboardType: TextInputType.numberWithOptions(
decimal: true, //
signed: false, //
),
isEditable: widget.isEditable,
controller: widget.hightController,
text: pd['WORK_HIGH'] ?? '',
label: '申请人:',
isEditable: false,
text: pd['APPLY_USER_NAME'] ?? '',
),
const Divider(),
ItemListWidget.selectableLineTitleTextRightButton(
label: '高处作业级别',
label: '作业方式:',
isEditable: widget.isEditable,
onTap: widget.onChooseLevel,
text: _getWorkLevelText(pd['WORK_LEVEL']),
text: _getWorkLevelText(pd['WORK_TYPE']),
),
const Divider(),
ItemListWidget.multiLineTitleTextField(
label: '作业内容',
ItemListWidget.singleLineTitleText(
label: '设备管道名称',
isEditable: widget.isEditable,
controller: widget.contentController,
text: pd['WORK_CONTENT'] ?? '',
controller: widget.nameController,
text: pd['NAME'] ?? '',
),
const Divider(),
ListItemFactory.createBuildSimpleSection('管道参数'),
Container(
padding: EdgeInsets.symmetric(horizontal: 10),
child: Column(
children: [
ItemListWidget.singleLineTitleText(
label: '介质:',
isEditable: widget.isEditable,
controller: widget.mediumController,
text: pd['MEDIUM'] ?? '',
),
const Divider(),
ItemListWidget.singleLineTitleText(
label: '温度:',
isEditable: widget.isEditable,
controller: widget.temperatureController,
text: pd['TEMPERATURE'] ?? '',
),
const Divider(),
ItemListWidget.singleLineTitleText(
label: '压力:',
isEditable: widget.isEditable,
controller: widget.pressureController,
text: pd['PRESSURE'] ?? '',
),
],
),
),
const Divider(),
...boardList.map((board) {
return Container(
padding: EdgeInsets.symmetric(horizontal: 10),
child: Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
ListItemFactory.createBuildSimpleSection('盲板抽堵参数', horPadding: 0),
if (widget.isEditable)
CustomButton(
onPressed: () {
setState(() {
if (boardList.indexOf(board) == 0) {
boardList.add({
'BOARD_MATERIAL': '',
'BOARD_SPECIFICATION': '',
'BOARD_NO': '',
});
} else {
boardList.remove(board);
}
});
},
text: boardList.indexOf(board) == 0 ? '添加' : '删除',
backgroundColor:
boardList.indexOf(board) == 0
? Colors.blue
: Colors.red,
padding: EdgeInsets.symmetric(
horizontal: 15,
vertical: 2,
),
height: 30,
borderRadius: 15,
),
],
),
ItemListWidget.singleLineTitleText(
label: '材质:',
isEditable: widget.isEditable,
text: board['BOARD_MATERIAL'],
hintText: '请输入材质',
onChanged: (val) {
setState(() {
board['BOARD_MATERIAL'] = val;
});
},
isRequired: false,
),
const Divider(),
ItemListWidget.singleLineTitleText(
label: '规格:',
isEditable: widget.isEditable,
text: board['BOARD_SPECIFICATION'],
onChanged: (val) {
setState(() {
board['BOARD_SPECIFICATION'] = val;
});
},
hintText: '请输入规格',
isRequired: false,
),
const Divider(),
ItemListWidget.singleLineTitleText(
label: '编号:',
isEditable: widget.isEditable,
text: board['BOARD_NO'],
onChanged: (val) {
setState(() {
board['BOARD_NO'] = val;
});
},
hintText: '请输入编号',
isRequired: false,
),
if (boardList.indexOf(board) != boardList.length-1)
const Divider(),
],
),
);
}),
const Divider(),
if (!widget.isEditable && FormUtils.hasValue(pd, 'BOARD_PATH')) ...[
ItemListWidget.singleLineTitleText(
label: '盲板抽堵位置及安全措施:',
isEditable: false,
text:'',
),
const Divider(),
],
if (!widget.isEditable && FormUtils.hasValue(pd, 'BOARD_PATH')) ...[
ItemListWidget.twoRowTitleAndImages(
onTapCallBack: (val) {
presentOpaque(SingleImageViewer(imageUrl: val), context);
},
title: '断路地段示意图:',
imageUrls: pd['BOARD_PATH'],
),
const Divider(),
],
ItemListWidget.twoRowButtonTitleText(
label: '关联其他特殊作业及安全作业票编号:',
isEditable: widget.isEditable,
onTap: () async {
final val = await showDialog<String>(
context: context,
builder: (_) => SelectionPopup(
type: 'assignments',
initialValue: pd['SPECIAL_WORK'] ?? '',
onConfirm: (v) {
setState(() {
pd['SPECIAL_WORK'] = v;
widget.relatedController?.text = v;
});
},
),
builder:
(_) => SelectionPopup(
type: 'assignments',
initialValue: pd['SPECIAL_WORK'] ?? '',
onConfirm: (v) {
setState(() {
pd['SPECIAL_WORK'] = v;
widget.relatedController?.text = v;
});
},
),
);
FocusHelper.clearFocus(context);
},
@ -135,16 +315,17 @@ class _BlindboardDetailFormWidgetState extends State<BlindboardDetailFormWidget>
onTap: () async {
await showDialog<String>(
context: context,
builder: (_) => SelectionPopup(
type: 'identification',
initialValue: pd['RISK_IDENTIFICATION'] ?? '',
onConfirm: (v) {
setState(() {
pd['RISK_IDENTIFICATION'] = v;
widget.riskController?.text = v;
});
},
),
builder:
(_) => SelectionPopup(
type: 'identification',
initialValue: pd['RISK_IDENTIFICATION'] ?? '',
onConfirm: (v) {
setState(() {
pd['RISK_IDENTIFICATION'] = v;
widget.riskController?.text = v;
});
},
),
);
FocusHelper.clearFocus(context);
},

View File

@ -10,6 +10,7 @@ import '../../special_Wrok/MeasuresListWidget.dart';
class BlindboardFormBaseWork extends StatelessWidget {
///
final Map<String, dynamic> pd;
final List<dynamic> boardList;
///
final List<Map<String, dynamic>> measuresList;
@ -35,6 +36,8 @@ class BlindboardFormBaseWork extends StatelessWidget {
required this.measuresList,
required this.signs,
required this.baseImgPath,
required this.boardList,
this.isEditable = false,
required this.onChooseLevel,
required this.onAnalyzeTap,
@ -224,6 +227,7 @@ class BlindboardFormBaseWork extends StatelessWidget {
children: [
// 1.
BlindboardDetailFormWidget(
boardList: boardList,
pd: pd,
isEditable: isEditable,
onChooseLevel: onChooseLevel,

View File

@ -38,6 +38,8 @@ class _BlindboardSafeFuncSureState extends State<BlindboardSafeFuncSure> {
///
late Map<String, dynamic> pd = {};
late List<dynamic> boardList = [];
late List<Map<String, dynamic>> measuresList = [];
///
final TextEditingController _otherController = TextEditingController();
@ -289,6 +291,7 @@ class _BlindboardSafeFuncSureState extends State<BlindboardSafeFuncSure> {
final data = await ApiService.getHomeworkFindById('blindboard', widget.BLINDBOARD_ID);
setState(() {
pd = data['pd'];
boardList = data['boardList'];
_getMeasures();
});
}
@ -450,6 +453,7 @@ class _BlindboardSafeFuncSureState extends State<BlindboardSafeFuncSure> {
child: Column(
children: [
BlindboardDetailFormWidget(
boardList: boardList,
pd: pd,
isEditable: false,
onChooseLevel: () {},

View File

@ -5,7 +5,7 @@ import 'package:qhd_prevention/customWidget/ItemWidgetFactory.dart';
import 'package:qhd_prevention/customWidget/custom_button.dart';
import 'package:qhd_prevention/customWidget/toast_util.dart';
import 'package:qhd_prevention/pages/home/tap/item_list_widget.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_Wrok/gc_work/SpecialWorkFormBaseWork.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_Wrok/mbcd_work/BlindboardFormBaseWork.dart';
import 'package:qhd_prevention/tools/tools.dart';
import 'package:qhd_prevention/customWidget/custom_alert_dialog.dart';
import 'package:qhd_prevention/customWidget/photo_picker_row.dart';
@ -42,6 +42,7 @@ class _BlindboardAqjdDetailState extends State<BlindboardAqjdDetail> {
///
late Map<String, dynamic> pd = {};
late List<dynamic> boardList = [];
late List<ImageData> imgList = [];
///
@ -233,6 +234,7 @@ class _BlindboardAqjdDetailState extends State<BlindboardAqjdDetail> {
final data = await ApiService.getHomeworkFindById('blindboard', widget.BLINDBOARD_ID);
setState(() {
pd = data['pd'];
boardList = data['boardList'];
_getSigns(pd['BLINDBOARD_ID'] ?? '');
_getMeasures(pd['BLINDBOARD_ID'] ?? '');
@ -301,7 +303,8 @@ class _BlindboardAqjdDetailState extends State<BlindboardAqjdDetail> {
spacing: 12,
children: [
// _setSafeDetailWidget(),
HighWorkFormBaseWork(
BlindboardFormBaseWork(
boardList: boardList,
pd: pd,
measuresList: measuresList,
signs: signs,

View File

@ -1,5 +1,6 @@
import 'package:flutter/material.dart';
import 'package:qhd_prevention/customWidget/toast_util.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/mbcd_work/cjry_work_detail/blindboard_cjry_detail.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/mbcd_work/jsjd_work_detail/blindboard_jsjd_detail.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/mbcd_work/mbcd_work_detai/blindboard_apply_detail.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/mbcd_work/aqcs_work_detail/blindboard_safe_func_sure.dart';
@ -167,14 +168,14 @@ class _BlindboardListPageState extends State<BlindboardListPage> {
}
void _goToDetail(Map<String, dynamic> item) async {
final Map<String, dynamic> data = {
'BLINDBOARD_ID': item['BLINDBOARD_ID'],
'flow': widget.flow,
};
switch (widget.flow) {
case '提交申请':
await pushPage(BlindboardApplyDetail(BLINDBOARD_ID: item['BLINDBOARD_ID'], flow: widget.flow), context);
break;
case '车间人员签字':
await pushPage(BlindboardCjryDetail(BLINDBOARD_ID: item['BLINDBOARD_ID'], flow: widget.flow), context);
break;
case '设置安全措施确认人':
await pushPage(BlindboardSetSafeDetail(BLINDBOARD_ID: item['BLINDBOARD_ID'], flow: widget.flow), context);
break;
@ -207,11 +208,6 @@ class _BlindboardListPageState extends State<BlindboardListPage> {
break;
case '开始作业':
await pushPage(BlindboardKszyDetail(BLINDBOARD_ID: item['BLINDBOARD_ID'], flow: widget.flow), context);
break;
case '结束作业':
await pushPage(BlindboardJszyDetail(BLINDBOARD_ID: item['BLINDBOARD_ID'], flow: widget.flow), context);
break;
case '验收签字':
await pushPage(BlindboardYsgdDetail(BLINDBOARD_ID: item['BLINDBOARD_ID'], flow: widget.flow), context);
@ -301,13 +297,13 @@ class _BlindboardListPageState extends State<BlindboardListPage> {
String _getWorkLevelText(dynamic level) {
switch (level?.toString()) {
case '1':
return 'I级高处作业';
return 'I级盲板作业';
case '2':
return 'II级高处作业';
return 'II级盲板作业';
case '3':
return 'III级高处作业';
return 'III级盲板作业';
default:
return 'IV级高处作业';
return 'IV级盲板作业';
}
}
@ -330,10 +326,6 @@ class _BlindboardListPageState extends State<BlindboardListPage> {
"编号: ${item['CHECK_NO'] ?? ''}",
style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
),
Text(
"作业级别: ${_getWorkLevelText(item['WORK_LEVEL'])}",
style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
),
],
),
Row(
@ -357,17 +349,8 @@ class _BlindboardListPageState extends State<BlindboardListPage> {
Text("所在单位负责人: ${item['LEADER_USER_NAME'] ?? ''}"),
],
),
Text("验收部门负责人: ${item['ACCEPT_USER_NAME'] ?? ''}"),
if (item['AUDIT_USER_NAME'] != null)
Text("安全管理部门负责人: ${item['AUDIT_USER_NAME'] ?? ''}"),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
if (item['APPROVE_USER_NAME'] != null)
Text("审批部门负责人: ${item['APPROVE_USER_NAME'] ?? ''}"),
Text("验收部门负责人: ${item['ACCEPT_USER_NAME'] ?? ''}"),
],
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [

View File

@ -0,0 +1,371 @@
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:qhd_prevention/customWidget/ItemWidgetFactory.dart';
import 'package:qhd_prevention/customWidget/custom_button.dart';
import 'package:qhd_prevention/customWidget/photo_picker_row.dart';
import 'package:qhd_prevention/customWidget/toast_util.dart';
import 'package:qhd_prevention/pages/home/tap/item_list_widget.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/dl_work/CutroadFormBaseWork.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/mbcd_work/BlindboardDetailFormWidget.dart';
import 'package:qhd_prevention/tools/tools.dart';
import 'package:qhd_prevention/http/ApiService.dart';
import 'package:qhd_prevention/pages/my_appbar.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/dh_work/qtfx_work_detail/hotwork_gas_list.dart';
import 'package:qhd_prevention/customWidget/custom_alert_dialog.dart';
import 'package:qhd_prevention/customWidget/single_image_viewer.dart';
import 'package:qhd_prevention/pages/mine/mine_sign_page.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/dl_work/CutroadFormBaseWork.dart';
/// + 线
class ImageData {
String localPath;
String serverPath;
ImageData({required this.localPath, required this.serverPath});
}
///
class BlindboardCjryDetail extends StatefulWidget {
const BlindboardCjryDetail({
super.key,
required this.BLINDBOARD_ID,
required this.flow,
});
final String BLINDBOARD_ID;
final String flow;
@override
State<BlindboardCjryDetail> createState() => _BlindboardCjryDetailState();
}
class _BlindboardCjryDetailState extends State<BlindboardCjryDetail> {
late bool isEditable = false;
///
late Map<String, dynamic> pd = {};
late List<dynamic> boardList = [];
// final TextEditingController _contentController = TextEditingController();
late List<ImageData> imgList = [];
///
late List<Map<String, dynamic>> measuresList = [];
late Map<String, dynamic> signs = {};
List<String> signImages = [];
List<String> signTimes = []; //
@override
void initState() {
super.initState();
_getData();
}
///
Future<void> _sign() async {
final path = await Navigator.push(
context,
MaterialPageRoute(builder: (context) => MineSignPage()),
);
if (path != null) {
final now = DateFormat('yyyy-MM-dd HH:mm').format(DateTime.now());
setState(() {
signImages.add(path);
signTimes.add(now);
FocusHelper.clearFocus(context);
});
}
}
Widget _signListWidget() {
return Column(
children:
signImages.map((path) {
return Column(
children: [
const SizedBox(height: 10),
const Divider(),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
GestureDetector(
child: // ConstrainedBox BoxFit.contain
ConstrainedBox(
constraints: const BoxConstraints(
maxWidth: 200,
maxHeight: 150,
),
child: Image.file(
File(path),
//
fit: BoxFit.contain,
),
),
onTap: () {
presentOpaque(
SingleImageViewer(imageUrl: path),
context,
);
},
),
Column(
children: [
Container(
padding: const EdgeInsets.only(right: 5),
child: CustomButton(
text: 'X',
height: 30,
padding: const EdgeInsets.symmetric(horizontal: 10),
backgroundColor: Colors.red,
onPressed: () {
setState(() {
signImages.remove(path);
});
},
),
),
const SizedBox(height: 80),
],
),
],
),
],
);
}).toList(),
);
}
/// -1 1
Future<void> _submit(String status) async {
if (signImages.isEmpty) {
ToastUtil.showNormal(context, '请签字');
return;
}
String reasonText = '';
if (status == '1') {
// if (_contentController.text.trim().isEmpty) {
// ToastUtil.showNormal(context, '盲板抽堵位置及安全措施');
// return;
// }
if (imgList.isEmpty) {
ToastUtil.showNormal(context, '请上传盲板抽堵位置图');
return;
}
} else {
await showDialog<String>(
context: context,
builder:
(_) => CustomAlertDialog(
title: '作废原因',
mode: DialogMode.input,
hintText: '请输入作废原因',
cancelText: '取消',
confirmText: '确定',
onInputConfirm: (text) {
reasonText = text;
},
),
);
if (reasonText.isEmpty) {
ToastUtil.showNormal(context, '请填写作废原因');
return;
}
}
final serverPathString = imgList
.map((e) => e.serverPath)
.where((s) => s.isNotEmpty)
.map((s) => s) // String? String
.join(',');
// measures
final Map<String, dynamic> formData = {};
//
// formData['WORK_CONTENT'] = _contentController.text.trim();
formData['CONIMG_PATH'] = serverPathString;
formData['DESCR'] = FormUtils.hasValue(pd, 'DESCR') ?pd['DESCR']: '';
formData['BLINDBOARD_ID'] = pd['BLINDBOARD_ID'] ?? widget.BLINDBOARD_ID;
formData['SIGNTIME'] = signTimes.join(',');
formData['USER_ID'] = SessionService.instance.loginUserId;
formData['APPLY_STATUS'] = status;
formData['STEP_REASON'] = reasonText;
await showDialog<String>(
context: context,
builder:
(_) => CustomAlertDialog(
title: '提示',
content: '请确认' + (status == '1' ? "通过" : "作废") + '本作业票?',
cancelText: '取消',
confirmText: '确定',
onConfirm: () async {
LoadingDialogHelper.show();
try {
final result = await ApiService.saveSafeFunctionSure(
'blindboard',
formData,
signImages,
);
LoadingDialogHelper.hide();
if (result['result'] == 'success') {
ToastUtil.showSuccess(context, '保存成功');
Navigator.pop(context);
}
} catch (e) {
LoadingDialogHelper.hide();
ToastUtil.showNormal(context, '操作失败:$e');
}
},
),
);
}
///
Future<void> _getData() async {
LoadingDialogHelper.show();
final data = await ApiService.getHomeworkFindById('blindboard', widget.BLINDBOARD_ID);
setState(() {
pd = data['pd'];
boardList = data['boardList'];
_getSigns(pd['BLINDBOARD_ID'] ?? '');
_getMeasures(pd['BLINDBOARD_ID'] ?? '');
});
LoadingDialogHelper.hide();
}
Future<void> _getMeasures(String homework_id) async {
final data = await ApiService.listSignFinishMeasures('blindboard',
homework_id.length > 0 ? homework_id : widget.BLINDBOARD_ID,
);
setState(() {
measuresList = List<Map<String, dynamic>>.from(
data['finishMeasuresList'] ?? <Map<String, dynamic>>[],
);
});
}
Future<void> _getSigns(String homework_id) async {
final data = await ApiService.listSignFinished('blindboard',
homework_id.length > 0 ? homework_id : widget.BLINDBOARD_ID,
);
setState(() {
signs = data['signs'] ?? {};
});
}
///
Future<void> _onImageAdded(String localPath) async {
//
final res = await ApiService.uploadSaveFile(localPath);
final url = res['FILE_PATH'] as String;
setState(() {
imgList.add(ImageData(localPath: localPath, serverPath: url));
});
}
///
Future<void> _onImageRemoved(ImageData item) async {
if (item.serverPath != null) {
await ApiService.deleteSaveFile(item.serverPath!);
}
setState(() {
imgList.remove(item);
});
}
///
Widget _bottomButtons() {
return Row(
spacing: 10,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Expanded(
child: CustomButton(
height: 45,
textStyle: TextStyle(fontSize: 16, color: Colors.white),
text: '作废',
backgroundColor: Colors.red,
onPressed: () {
_submit('-1');
},
),
),
Expanded(
child: CustomButton(
textStyle: TextStyle(fontSize: 16, color: Colors.white),
text: '通过',
backgroundColor: Colors.green,
onPressed: () {
_submit('1');
},
),
),
],
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: MyAppbar(title: '车间人员签字'),
body: SafeArea(
child: SingleChildScrollView(
padding: EdgeInsets.all(12),
child: Column(
spacing: 12,
children: [
BlindboardDetailFormWidget(
pd: pd,
boardList: boardList,
isEditable: false,
onChooseLevel: (){},
),
ItemListWidget.itemContainer(
Column(
children: [
ListItemFactory.headerTitle('盲板抽堵位置及安全措施'),
Divider(),
RepairedPhotoSection(
title: '断路地段示意图:',
maxCount: 100,
mediaType: MediaType.image,
onChanged: (paths) {},
isShowNum: false,
horizontalPadding: 0,
isRequired: true,
onMediaAdded: _onImageAdded,
onMediaRemoved: (path) {
final item = imgList.firstWhere((e) => e.localPath == path);
_onImageRemoved(item);
},
onAiIdentify: () {},
),
Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
ListItemFactory.headerTitle('车间人员'),
CustomButton(
text: '新增手写签字',
height: 36,
backgroundColor: Colors.green,
onPressed: () {
_sign();
},
),
],
),
if (signImages.isNotEmpty) _signListWidget(),
],
)
],
),
),
_bottomButtons(),
],
),
),
),
);
}
}

View File

@ -34,6 +34,7 @@ class _BlindboardJhrDetailState extends State<BlindboardJhrDetail> {
late bool isEditable = false;
///
late Map<String, dynamic> pd = {};
late List<dynamic> boardList = [];
///
late List<Map<String, dynamic>> measuresList = [];
late Map<String, dynamic> signs = {};
@ -198,7 +199,7 @@ class _BlindboardJhrDetailState extends State<BlindboardJhrDetail> {
final data = await ApiService.getHomeworkFindById('blindboard', widget.BLINDBOARD_ID);
setState(() {
pd = data['pd'];
boardList = data['boardList'];
_getSigns(pd['BLINDBOARD_ID'] ?? '');
_getMeasures(pd['BLINDBOARD_ID'] ?? '');
});
@ -331,6 +332,7 @@ class _BlindboardJhrDetailState extends State<BlindboardJhrDetail> {
// _card(_defaultDetail()),
BlindboardDetailFormWidget(
pd: pd,
boardList: boardList,
isEditable: false,
onChooseLevel: (){},
),

View File

@ -12,7 +12,7 @@ import 'package:qhd_prevention/pages/my_appbar.dart';
import 'package:qhd_prevention/customWidget/custom_alert_dialog.dart';
import 'package:qhd_prevention/customWidget/single_image_viewer.dart';
import 'package:qhd_prevention/pages/mine/mine_sign_page.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/gc_work/SpecialWorkFormBaseWork.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_Wrok/mbcd_work/BlindboardFormBaseWork.dart';
///
@ -35,6 +35,7 @@ class _BlindboardJsjdDetailState extends State<BlindboardJsjdDetail> {
///
late Map<String, dynamic> pd = {};
late List<dynamic> boardList = [];
///
late List<Map<String, dynamic>> measuresList = [];
@ -200,6 +201,7 @@ class _BlindboardJsjdDetailState extends State<BlindboardJsjdDetail> {
);
setState(() {
pd = data['pd'];
boardList = data['boardList'];
_getSigns(pd['BLINDBOARD_ID'] ?? '');
_getMeasures(pd['BLINDBOARD_ID'] ?? '');
@ -270,7 +272,8 @@ class _BlindboardJsjdDetailState extends State<BlindboardJsjdDetail> {
spacing: 12,
children: [
// _setSafeDetailWidget(),
HighWorkFormBaseWork(
BlindboardFormBaseWork(
boardList: boardList,
pd: pd,
measuresList: measuresList,
signs: signs,

View File

@ -12,7 +12,7 @@ import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/dh_work/qtfx_
import 'package:qhd_prevention/customWidget/custom_alert_dialog.dart';
import 'package:qhd_prevention/customWidget/single_image_viewer.dart';
import 'package:qhd_prevention/pages/mine/mine_sign_page.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_Wrok/gc_work/SpecialWorkFormBaseWork.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_Wrok/mbcd_work/BlindboardFormBaseWork.dart';
import 'package:qhd_prevention/customWidget/picker/CupertinoDatePicker.dart';
///
@ -35,6 +35,7 @@ class _BlindboardJszyDetailState extends State<BlindboardJszyDetail> {
///
late Map<String, dynamic> pd = {};
late List<dynamic> boardList = [];
///
String endTime = '';
@ -239,6 +240,7 @@ class _BlindboardJszyDetailState extends State<BlindboardJszyDetail> {
final data = await ApiService.getHomeworkFindById('blindboard', widget.BLINDBOARD_ID);
setState(() {
pd = data['pd'];
boardList = data['boardList'];
_getSigns(pd['BLINDBOARD_ID'] ?? '');
_getMeasures(pd['BLINDBOARD_ID'] ?? '');
@ -307,7 +309,8 @@ class _BlindboardJszyDetailState extends State<BlindboardJszyDetail> {
spacing: 12,
children: [
// _setSafeDetailWidget(),
HighWorkFormBaseWork(
BlindboardFormBaseWork(
boardList: boardList,
pd: pd,
measuresList: measuresList,
signs: signs,

View File

@ -12,7 +12,7 @@ import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/dh_work/qtfx_
import 'package:qhd_prevention/customWidget/custom_alert_dialog.dart';
import 'package:qhd_prevention/customWidget/single_image_viewer.dart';
import 'package:qhd_prevention/pages/mine/mine_sign_page.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_Wrok/gc_work/SpecialWorkFormBaseWork.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_Wrok/mbcd_work/BlindboardFormBaseWork.dart';
import 'package:qhd_prevention/customWidget/picker/CupertinoDatePicker.dart';
@ -36,6 +36,7 @@ class _BlindboardKszyDetailState extends State<BlindboardKszyDetail> {
///
late Map<String, dynamic> pd = {};
late List<dynamic> boardList = [];
///
String startTime = '';
@ -209,6 +210,7 @@ class _BlindboardKszyDetailState extends State<BlindboardKszyDetail> {
);
setState(() {
pd = data['pd'];
boardList = data['boardList'];
_getSigns(pd['BLINDBOARD_ID'] ?? '');
_getMeasures(pd['BLINDBOARD_ID'] ?? '');
@ -279,7 +281,8 @@ class _BlindboardKszyDetailState extends State<BlindboardKszyDetail> {
spacing: 12,
children: [
// _setSafeDetailWidget(),
HighWorkFormBaseWork(
BlindboardFormBaseWork(
boardList: boardList,
pd: pd,
measuresList: measuresList,
signs: signs,
@ -294,7 +297,6 @@ class _BlindboardKszyDetailState extends State<BlindboardKszyDetail> {
GestureDetector(
child: Row(
children: [
Text('* ', style: TextStyle(color: Colors.red)),
Expanded(
child: ListItemFactory.createRowSpaceBetweenItem(
leftText: '作业开始时间',

View File

@ -15,18 +15,15 @@ import 'package:qhd_prevention/pages/my_appbar.dart';
import 'package:qhd_prevention/customWidget/bottom_picker.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_Wrok/MeasuresListWidget.dart';
enum EditUserType {
WORKSHOP('车间人员单位', '车间人员', true),
GUARDIAN('监护人单位', '监护人', true),
CONFESS('安全交底人单位', '安全交底人', true),
ACCEPT_CONFESS('接受交底人单位', '接受交底人', true),
WORK_USER('作业人单位', '作业人', true),
CONFIRM('作业负责人单位', '作业负责人', true),
LEADER('所在单位', '所在单位负责人', true),
AUDIT('审核部门', '审核部门负责人', true),
APPROVE('审批部门', '审批部门负责人', true),
WORK_START('作业开始负责人单位', '作业开始负责人', true),
WORK_END('作业结束负责人单位', '作业结束负责人', true),
WORK_START('实际作业开始负责人单位', '实际作业开始负责人', true),
ACCEPT('验收部门', '验收部门负责人', true);
///
@ -53,19 +50,27 @@ class BlindboardApplyDetail extends StatefulWidget {
class _BlindboardApplyDetailState extends State<BlindboardApplyDetail> {
late bool isEditable = false;
final levelList = ["I级高处作业", "II级高处作业", "III级高处作业","IV级高处作业"];
final levelList = ["堵盲板", "抽盲板"];
///
late String msg = 'add';
///
late Map<String, dynamic> pd = {};
late List<dynamic> boardList = [
{'BOARD_MATERIAL': '', 'BOARD_SPECIFICATION': '', 'BOARD_NO': ''},
];
late Map<String, dynamic> signs = {};
late List<Map<String, dynamic>> measuresList = [];
final TextEditingController _locationController = TextEditingController();
final TextEditingController _hightController = TextEditingController();
final TextEditingController _contentController = TextEditingController();
final TextEditingController _nameController = TextEditingController(); //
///
final TextEditingController _mediumController = TextEditingController(); //
final TextEditingController _temperatureController =
TextEditingController(); //
final TextEditingController _pressureController =
TextEditingController(); //
final TextEditingController _relatedController = TextEditingController();
final TextEditingController _riskController = TextEditingController();
@ -91,16 +96,19 @@ class _BlindboardApplyDetailState extends State<BlindboardApplyDetail> {
}
_getHotWorkNameList();
_contentController.addListener(() {
_nameController.addListener(() {
setState(() {
pd['WORK_CONTENT'] = _contentController.text.trim();
pd['NAME'] = _nameController.text.trim();
});
});
_locationController.addListener(() {
pd['WORK_PLACE'] = _locationController.text.trim();
_mediumController.addListener(() {
pd['MEDIUM'] = _mediumController.text.trim();
});
_hightController.addListener(() {
pd['WORK_HIGH'] = _hightController.text.trim();
_temperatureController.addListener(() {
pd['TEMPERATURE'] = _temperatureController.text.trim();
});
_pressureController.addListener(() {
pd['PRESSURE'] = _pressureController.text.trim();
});
_relatedController.addListener(() {
pd['SPECIAL_WORK'] = _relatedController.text.trim();
@ -121,7 +129,7 @@ class _BlindboardApplyDetailState extends State<BlindboardApplyDetail> {
void set_pd_USER_ID(EditUserType type, String id) {
if (type == EditUserType.WORK_USER) {
pd['${type.name}_ID'] = id;
}else{
} else {
pd['${type.name}_USER_ID'] = id;
}
}
@ -141,7 +149,7 @@ class _BlindboardApplyDetailState extends State<BlindboardApplyDetail> {
String get_pd_USER_ID(EditUserType type) {
if (type == EditUserType.WORK_USER) {
return pd['${type.name}_ID'] ?? '';
}else{
} else {
return pd['${type.name}_USER_ID'] ?? '';
}
}
@ -160,8 +168,8 @@ class _BlindboardApplyDetailState extends State<BlindboardApplyDetail> {
if (choice != null) {
// choice
setState(() {
pd['WORK_LEVEL_NAME'] = choice;
pd['WORK_LEVEL'] = (levelList.indexOf(choice) + 1).toString();
pd['WORK_TYPE_NAME'] = choice;
pd['WORK_TYPE'] = (levelList.indexOf(choice) + 1).toString();
FocusHelper.clearFocus(context);
});
}
@ -181,16 +189,6 @@ class _BlindboardApplyDetailState extends State<BlindboardApplyDetail> {
Widget _chooseItem(EditUserType type) {
bool isClean = false;
bool isRequird = true;
if (pd['WORK_LEVEL'] == '1' && type == EditUserType.AUDIT) {
isRequird = false;
isClean = true;
}
if (pd['WORK_LEVEL'] != '4' && type == EditUserType.APPROVE) {
isRequird = false;
isClean = true;
}
return Column(
children: [
@ -268,13 +266,15 @@ class _BlindboardApplyDetailState extends State<BlindboardApplyDetail> {
return;
}
if (personList.isEmpty) { //
if (personList.isEmpty) {
//
await _getPersonListForUnitId(unitId, type);
final list = _personCache[type] ?? [];
if (list.isEmpty) { //
if (list.isEmpty) {
//
ToastUtil.showNormal(context, '暂无数据,请选择其他单位');
}else{
} else {
choosePersonHandle(type);
}
return;
@ -302,17 +302,19 @@ class _BlindboardApplyDetailState extends State<BlindboardApplyDetail> {
Future<void> _submit(String status) async {
//
final textRules = <Map<String, dynamic>>[
{'value': _locationController.text.trim(), 'message': '请填写地点及部位'},
{'value': _hightController.text.trim(), 'message': '请填写高度'},
{'value': _nameController.text.trim(), 'message': '请输入设备管线名'},
{'value': pd['WORK_TYPE'], 'message': '请选择作业方式'},
{'value': _mediumController.text.trim(), 'message': '请输入介质'},
{'value': _temperatureController.text.trim(), 'message': '请输入温度'},
{'value': _pressureController.text.trim(), 'message': '请输入压力'},
{'value': _contentController.text.trim(), 'message': '请填写作业内容'},
{
'value': _relatedController.text.trim(),
'message': '请输入关联的其他特殊作业及安全作业票编号',
},
{'value': _riskController.text.trim(), 'message': '请填写风险辨识结果'},
];
final level = pd['WORK_LEVEL'] ?? '';
final level = pd['WORK_TYPE'] ?? '';
print('---level-$level');
///
@ -322,13 +324,9 @@ class _BlindboardApplyDetailState extends State<BlindboardApplyDetail> {
EditUserType.ACCEPT_CONFESS,
EditUserType.CONFIRM,
EditUserType.LEADER,
if (pd['WORK_LEVEL'] != '1')
EditUserType.AUDIT,
if (pd['WORK_LEVEL'] == '4')
EditUserType.APPROVE,
EditUserType.WORKSHOP,
EditUserType.WORK_USER,
EditUserType.WORK_START,
EditUserType.WORK_END,
EditUserType.ACCEPT,
];
if (status == '1') {
@ -341,7 +339,7 @@ class _BlindboardApplyDetailState extends State<BlindboardApplyDetail> {
}
//
if (level.length == 0) {
ToastUtil.showNormal(context, '输入高处作业级别');
ToastUtil.showNormal(context, '选择盲板作业方式');
return;
}
@ -358,15 +356,9 @@ class _BlindboardApplyDetailState extends State<BlindboardApplyDetail> {
}
// LoadingDialogHelper.show();
String taskId = '0';
if (pd['WORK_LEVEL'] == '1') {
taskId = '5';
} else if (pd['WORK_LEVEL'] == '2' || pd['WORK_LEVEL'] == '3') {
taskId = '6';
} else if (pd['WORK_LEVEL'] == '4') {
taskId = '7';
}
pd['WORK_LEVEL_NAME'] = levelList[int.parse(pd['WORK_LEVEL'])];
String taskId = '13';
pd['WORK_TYPE_NAME'] = levelList[int.parse(pd['WORK_TYPE'])];
pd['USER_ID'] = SessionService.instance.loginUserId;
pd['STEP_ID'] = status;
pd['CORPINFO_ID'] = SessionService.instance.corpinfoId;
@ -374,12 +366,13 @@ class _BlindboardApplyDetailState extends State<BlindboardApplyDetail> {
pd['CREATOR'] = SessionService.instance.loginUserId;
pd['ACTION_USER'] = SessionService.instance.username;
pd['APPLY_STATUS'] = status;
pd['boardList'] = jsonEncode(boardList).toString();
//
if (msg == 'add') {
pd['STEP_ID'] = status;
pd['TASK_ID'] = taskId;
pd['BLINDBOARD_ID'] = widget.BLINDBOARD_ID;
pd['BLINDBOARD_ID'] = pd['BLINDBOARD_ID'] ?? widget.BLINDBOARD_ID;
pd['APPLY_DEPARTMENT_ID'] = SessionService.instance.deptId;
pd['APPLY_DEPARTMENT_NAME'] =
SessionService.instance.loginUser?['DEPARTMENT_NAME'] ?? '';
@ -423,23 +416,26 @@ class _BlindboardApplyDetailState extends State<BlindboardApplyDetail> {
///
Future<void> _getData() async {
final data = await ApiService.getHomeworkFindById('blindboard', widget.BLINDBOARD_ID);
final data = await ApiService.getHomeworkFindById(
'blindboard',
widget.BLINDBOARD_ID,
);
setState(() {
pd = data['pd'];
boardList = data['boardList'];
if (pd['STEP_ID'] == 0) {
isEditable = true;
} else {
_getSigns(pd['BLINDBOARD_ID'] ?? '');
_getMeasures(pd['BLINDBOARD_ID'] ?? '');
}
pd['WORK_LEVEL'] = pd['WORK_LEVEL']?.toString() ?? '';
pd['WORK_TYPE'] = pd['WORK_TYPE']?.toString() ?? '';
//
_contentController.text = pd['WORK_CONTENT'] ?? '';
_locationController.text = pd['WORK_PLACE'] ?? '';
_hightController.text = pd['WORK_HIGH'] ?? '';
_relatedController.text = pd['SPECIAL_WORK'] ?? '';
_nameController.text = pd['NAME'] ?? '';
_mediumController.text = pd['MEDIUM'] ?? '';
_temperatureController.text = pd['TEMPERATURE'] ?? '';
_pressureController.text = pd['PRESSURE'] ?? '';
_riskController.text = pd['RISK_IDENTIFICATION'] ?? '';
});
// final data = await ApiService.getHomeworkFindById('blindboard', widget.BLINDBOARD_ID);
@ -450,7 +446,8 @@ class _BlindboardApplyDetailState extends State<BlindboardApplyDetail> {
}
Future<void> _getSigns(String homework_id) async {
final data = await ApiService.listSignFinished('blindboard',
final data = await ApiService.listSignFinished(
'blindboard',
homework_id.length > 0 ? homework_id : widget.BLINDBOARD_ID,
);
setState(() {
@ -459,7 +456,8 @@ class _BlindboardApplyDetailState extends State<BlindboardApplyDetail> {
}
Future<void> _getMeasures(String homework_id) async {
final data = await ApiService.listSignFinishMeasures('blindboard',
final data = await ApiService.listSignFinishMeasures(
'blindboard',
homework_id.length > 0 ? homework_id : widget.BLINDBOARD_ID,
);
setState(() {
@ -473,7 +471,7 @@ class _BlindboardApplyDetailState extends State<BlindboardApplyDetail> {
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: h_backGroundColor(),
appBar: MyAppbar(title: '高处作业申请'),
appBar: MyAppbar(title: '盲板作业申请'),
body: SafeArea(
child: SingleChildScrollView(
padding: EdgeInsets.all(12),
@ -481,11 +479,13 @@ class _BlindboardApplyDetailState extends State<BlindboardApplyDetail> {
children: [
_card(
BlindboardDetailFormWidget(
boardList: boardList,
pd: pd,
isEditable: isEditable,
contentController: _contentController,
locationController: _locationController,
hightController: _hightController,
nameController: _nameController,
mediumController: _mediumController,
temperatureController: _temperatureController,
pressureController: _pressureController,
relatedController: _relatedController,
riskController: _riskController,
onChooseLevel: _chooseLevel,
@ -494,7 +494,8 @@ class _BlindboardApplyDetailState extends State<BlindboardApplyDetail> {
if (isEditable)
Column(
children: [
SizedBox(height: 15),
_card(_chooseItem(EditUserType.WORKSHOP)),
SizedBox(height: 15),
_card(_chooseItem(EditUserType.GUARDIAN)),
SizedBox(height: 15),
@ -507,10 +508,7 @@ class _BlindboardApplyDetailState extends State<BlindboardApplyDetail> {
_card(_chooseItem(EditUserType.CONFIRM)),
SizedBox(height: 15),
_card(_chooseItem(EditUserType.LEADER)),
SizedBox(height: 15),
_card(_chooseItem(EditUserType.AUDIT)),
SizedBox(height: 15),
_card(_chooseItem(EditUserType.APPROVE)),
SizedBox(height: 15),
_card(
Column(
@ -531,26 +529,7 @@ class _BlindboardApplyDetailState extends State<BlindboardApplyDetail> {
],
),
),
SizedBox(height: 15),
_card(
Column(
mainAxisAlignment: MainAxisAlignment.start,
children: [
_chooseItem(EditUserType.WORK_END),
Divider(),
Row(
children: [
SizedBox(width: 12),
Text(
'友情提示:负责填写作业实际结束时间',
style: TextStyle(color: Colors.red),
),
],
),
SizedBox(height: 5),
],
),
),
SizedBox(height: 15),
_card(_chooseItem(EditUserType.ACCEPT)),
SizedBox(height: 15),
@ -565,7 +544,7 @@ class _BlindboardApplyDetailState extends State<BlindboardApplyDetail> {
color: Colors.white,
child: MeasuresListWidget(
measuresList:
measuresList, // List<Map<String, dynamic>>
measuresList, // List<Map<String, dynamic>>
baseImgPath: ApiService.baseImgPath,
isAllowEdit: false,
),
@ -593,45 +572,9 @@ class _BlindboardApplyDetailState extends State<BlindboardApplyDetail> {
),
isEditable
? Row(
spacing: 10,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Expanded(
child: CustomButton(
height: 45,
textStyle: TextStyle(
fontSize: 16,
color: Colors.white,
),
text: '提交',
backgroundColor: Colors.blue,
onPressed: () {
_submit('1');
},
),
),
Expanded(
child: CustomButton(
textStyle: TextStyle(
fontSize: 16,
color: Colors.white,
),
text: '暂存',
backgroundColor: Colors.green,
onPressed: () {
_submit('0');
},
),
),
],
)
: Column(
children: [
SizedBox(height: 20),
Row(
spacing: 10,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
SizedBox(width: 50),
Expanded(
child: CustomButton(
height: 45,
@ -639,18 +582,54 @@ class _BlindboardApplyDetailState extends State<BlindboardApplyDetail> {
fontSize: 16,
color: Colors.white,
),
text: '返回',
backgroundColor: Colors.green,
text: '提交',
backgroundColor: Colors.blue,
onPressed: () {
Navigator.pop(context);
_submit('1');
},
),
),
SizedBox(width: 50),
Expanded(
child: CustomButton(
textStyle: TextStyle(
fontSize: 16,
color: Colors.white,
),
text: '暂存',
backgroundColor: Colors.green,
onPressed: () {
_submit('0');
},
),
),
],
)
: Column(
children: [
SizedBox(height: 20),
Row(
children: [
SizedBox(width: 50),
Expanded(
child: CustomButton(
height: 45,
textStyle: TextStyle(
fontSize: 16,
color: Colors.white,
),
text: '返回',
backgroundColor: Colors.green,
onPressed: () {
Navigator.pop(context);
},
),
),
SizedBox(width: 50),
],
),
],
),
],
),
],
),
),

View File

@ -5,7 +5,7 @@ import 'package:qhd_prevention/customWidget/ItemWidgetFactory.dart';
import 'package:qhd_prevention/customWidget/custom_button.dart';
import 'package:qhd_prevention/customWidget/toast_util.dart';
import 'package:qhd_prevention/pages/home/tap/item_list_widget.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_Wrok/gc_work/SpecialWorkFormBaseWork.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_Wrok/mbcd_work/BlindboardFormBaseWork.dart';
import 'package:qhd_prevention/tools/tools.dart';
import 'package:qhd_prevention/customWidget/custom_alert_dialog.dart';
import 'package:qhd_prevention/customWidget/single_image_viewer.dart';
@ -34,6 +34,7 @@ class _BlindboardShbmDetailState extends State<BlindboardShbmDetail> {
///
late Map<String, dynamic> pd = {};
late List<dynamic> boardList = [];
final TextEditingController _contentController = TextEditingController();
///
@ -203,6 +204,7 @@ class _BlindboardShbmDetailState extends State<BlindboardShbmDetail> {
final data = await ApiService.getHomeworkFindById('blindboard', widget.BLINDBOARD_ID);
setState(() {
pd = data['pd'];
boardList = data['boardList'];
_getSigns(pd['BLINDBOARD_ID'] ?? '');
_getMeasures(pd['BLINDBOARD_ID'] ?? '');
@ -271,7 +273,8 @@ class _BlindboardShbmDetailState extends State<BlindboardShbmDetail> {
spacing: 12,
children: [
// _setSafeDetailWidget(),
HighWorkFormBaseWork(
BlindboardFormBaseWork(
boardList: boardList,
pd: pd,
measuresList: measuresList,
signs: signs,

View File

@ -11,7 +11,7 @@ import 'package:qhd_prevention/pages/my_appbar.dart';
import 'package:qhd_prevention/customWidget/custom_alert_dialog.dart';
import 'package:qhd_prevention/customWidget/single_image_viewer.dart';
import 'package:qhd_prevention/pages/mine/mine_sign_page.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_Wrok/gc_work/SpecialWorkFormBaseWork.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_Wrok/mbcd_work/BlindboardFormBaseWork.dart';
///
class BlindboardSpbmDetail extends StatefulWidget {
@ -33,6 +33,7 @@ class _BlindboardSpbmDetailState extends State<BlindboardSpbmDetail> {
///
late Map<String, dynamic> pd = {};
late List<dynamic> boardList = [];
final TextEditingController _contentController = TextEditingController();
///
@ -179,7 +180,7 @@ class _BlindboardSpbmDetailState extends State<BlindboardSpbmDetail> {
LoadingDialogHelper.show();
try {
final result = await ApiService.saveSafeFunctionSure(
'blindboard',
'blindboard',
formData,
signImages,
);
@ -199,9 +200,13 @@ class _BlindboardSpbmDetailState extends State<BlindboardSpbmDetail> {
///
Future<void> _getData() async {
final data = await ApiService.getHomeworkFindById('blindboard', widget.BLINDBOARD_ID);
final data = await ApiService.getHomeworkFindById(
'blindboard',
widget.BLINDBOARD_ID,
);
setState(() {
pd = data['pd'];
boardList = data['boardList'];
_getSigns(pd['BLINDBOARD_ID'] ?? '');
_getMeasures(pd['BLINDBOARD_ID'] ?? '');
@ -209,7 +214,8 @@ class _BlindboardSpbmDetailState extends State<BlindboardSpbmDetail> {
}
Future<void> _getMeasures(String homework_id) async {
final data = await ApiService.listSignFinishMeasures('blindboard',
final data = await ApiService.listSignFinishMeasures(
'blindboard',
homework_id.length > 0 ? homework_id : widget.BLINDBOARD_ID,
);
setState(() {
@ -220,7 +226,8 @@ class _BlindboardSpbmDetailState extends State<BlindboardSpbmDetail> {
}
Future<void> _getSigns(String homework_id) async {
final data = await ApiService.listSignFinished('blindboard',
final data = await ApiService.listSignFinished(
'blindboard',
homework_id.length > 0 ? homework_id : widget.BLINDBOARD_ID,
);
setState(() {
@ -270,7 +277,8 @@ class _BlindboardSpbmDetailState extends State<BlindboardSpbmDetail> {
spacing: 12,
children: [
// _setSafeDetailWidget(),
HighWorkFormBaseWork(
BlindboardFormBaseWork(
boardList: boardList,
pd: pd,
measuresList: measuresList,
signs: signs,
@ -286,8 +294,7 @@ class _BlindboardSpbmDetailState extends State<BlindboardSpbmDetail> {
'审批部门负责人意见',
'请输入意见',
_contentController,
isRequired: true
isRequired: true,
),
Divider(),
Column(
@ -313,7 +320,7 @@ class _BlindboardSpbmDetailState extends State<BlindboardSpbmDetail> {
),
if (signImages.isNotEmpty) _signListWidget(),
],
)
),
],
),
),

View File

@ -37,6 +37,8 @@ class _BlindboardSetSafeDetailState extends State<BlindboardSetSafeDetail> {
///
late Map<String, dynamic> pd = {};
late List<dynamic> boardList = [];
late List<Map<String, dynamic>> measuresList = [];
///
@ -355,6 +357,7 @@ class _BlindboardSetSafeDetailState extends State<BlindboardSetSafeDetail> {
final data = await ApiService.getHomeworkFindById('blindboard', widget.BLINDBOARD_ID);
setState(() {
pd = data['pd'];
boardList = data['boardList'];
_getMeasures();
});
}
@ -567,6 +570,7 @@ class _BlindboardSetSafeDetailState extends State<BlindboardSetSafeDetail> {
children: [
// _card(_defaultDetail()),
BlindboardDetailFormWidget(
boardList: boardList,
pd: pd,
isEditable: false,
onChooseLevel: (){},

View File

@ -12,7 +12,7 @@ import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/dh_work/qtfx_
import 'package:qhd_prevention/customWidget/custom_alert_dialog.dart';
import 'package:qhd_prevention/customWidget/single_image_viewer.dart';
import 'package:qhd_prevention/pages/mine/mine_sign_page.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_Wrok/gc_work/SpecialWorkFormBaseWork.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_Wrok/mbcd_work/BlindboardFormBaseWork.dart';
///
class BlindboardSzdwDetail extends StatefulWidget {
@ -34,6 +34,7 @@ class _BlindboardSzdwDetailState extends State<BlindboardSzdwDetail> {
///
late Map<String, dynamic> pd = {};
late List<dynamic> boardList = [];
final TextEditingController _contentController = TextEditingController();
///
@ -203,6 +204,7 @@ class _BlindboardSzdwDetailState extends State<BlindboardSzdwDetail> {
final data = await ApiService.getHomeworkFindById('blindboard', widget.BLINDBOARD_ID);
setState(() {
pd = data['pd'];
boardList = data['boardList'];
_getSigns(pd['BLINDBOARD_ID'] ?? '');
_getMeasures(pd['BLINDBOARD_ID'] ?? '');
@ -271,7 +273,8 @@ class _BlindboardSzdwDetailState extends State<BlindboardSzdwDetail> {
spacing: 12,
children: [
// _setSafeDetailWidget(),
HighWorkFormBaseWork(
BlindboardFormBaseWork(
boardList: boardList,
pd: pd,
measuresList: measuresList,
signs: signs,

View File

@ -12,7 +12,7 @@ import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/dh_work/qtfx_
import 'package:qhd_prevention/customWidget/custom_alert_dialog.dart';
import 'package:qhd_prevention/customWidget/single_image_viewer.dart';
import 'package:qhd_prevention/pages/mine/mine_sign_page.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_Wrok/gc_work/SpecialWorkFormBaseWork.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_Wrok/mbcd_work/BlindboardFormBaseWork.dart';
import 'package:qhd_prevention/customWidget/picker/CupertinoDatePicker.dart';
import 'package:qhd_prevention/customWidget/photo_picker_row.dart';
@ -43,8 +43,11 @@ class _BlindboardYsgdDetailState extends State<BlindboardYsgdDetail> {
///
late Map<String, dynamic> pd = {};
late List<dynamic> boardList = [];
///
String startTime = '';
///
final TextEditingController _contentController = TextEditingController();
late List<ImageData> imgList = [];
@ -60,6 +63,7 @@ class _BlindboardYsgdDetailState extends State<BlindboardYsgdDetail> {
super.initState();
_getData();
}
///
Future<void> _onImageAdded(String localPath) async {
//
@ -79,6 +83,7 @@ class _BlindboardYsgdDetailState extends State<BlindboardYsgdDetail> {
imgList.remove(item);
});
}
///
Future<void> _sign() async {
final path = await Navigator.push(
@ -172,17 +177,7 @@ class _BlindboardYsgdDetailState extends State<BlindboardYsgdDetail> {
ToastUtil.showNormal(context, '请选择验收时间');
return;
}
// final workStart = DateTime.parse(pd['WORK_START_DATE'] as String);
final endTime = DateTime.parse(pd['WORK_END_DATE'] as String);
final acceptTime = DateTime.parse(startTime);
final intervalMs = endTime.difference(acceptTime).inMilliseconds;
const thresholdMs = 30 * 60 * 1000;
if (intervalMs >= thresholdMs) {
ToastUtil.showNormal(context, '请在作业结束30分钟内完成验收');
return;
}
if (imgList.isEmpty) {
ToastUtil.showNormal(context, '请上传验收视频');
@ -211,7 +206,7 @@ class _BlindboardYsgdDetailState extends State<BlindboardYsgdDetail> {
final serverPathString = imgList
.map((e) => e.serverPath)
.where((s) => s.isNotEmpty)
.map((s) => s) // String? String
.map((s) => s) // String? String
.join(',');
// measures
final Map<String, dynamic> formData = {};
@ -237,7 +232,7 @@ class _BlindboardYsgdDetailState extends State<BlindboardYsgdDetail> {
LoadingDialogHelper.show();
try {
final result = await ApiService.saveSafeFunctionSure(
'blindboard',
'blindboard',
formData,
signImages,
);
@ -257,9 +252,13 @@ class _BlindboardYsgdDetailState extends State<BlindboardYsgdDetail> {
///
Future<void> _getData() async {
final data = await ApiService.getHomeworkFindById('blindboard', widget.BLINDBOARD_ID);
final data = await ApiService.getHomeworkFindById(
'blindboard',
widget.BLINDBOARD_ID,
);
setState(() {
pd = data['pd'];
boardList = data['boardList'];
_getSigns(pd['BLINDBOARD_ID'] ?? '');
_getMeasures(pd['BLINDBOARD_ID'] ?? '');
@ -267,7 +266,8 @@ class _BlindboardYsgdDetailState extends State<BlindboardYsgdDetail> {
}
Future<void> _getMeasures(String homework_id) async {
final data = await ApiService.listSignFinishMeasures('blindboard',
final data = await ApiService.listSignFinishMeasures(
'blindboard',
homework_id.length > 0 ? homework_id : widget.BLINDBOARD_ID,
);
setState(() {
@ -278,7 +278,8 @@ class _BlindboardYsgdDetailState extends State<BlindboardYsgdDetail> {
}
Future<void> _getSigns(String homework_id) async {
final data = await ApiService.listSignFinished('blindboard',
final data = await ApiService.listSignFinished(
'blindboard',
homework_id.length > 0 ? homework_id : widget.BLINDBOARD_ID,
);
setState(() {
@ -328,7 +329,8 @@ class _BlindboardYsgdDetailState extends State<BlindboardYsgdDetail> {
spacing: 12,
children: [
// _setSafeDetailWidget(),
HighWorkFormBaseWork(
BlindboardFormBaseWork(
boardList: boardList,
pd: pd,
measuresList: measuresList,
signs: signs,
@ -345,16 +347,25 @@ class _BlindboardYsgdDetailState extends State<BlindboardYsgdDetail> {
'完工验收',
'请输入意见',
_contentController,
isRequired: true
isRequired: true,
),
Divider(),
GestureDetector(
child: ListItemFactory.createRowSpaceBetweenItem(leftText: '验收时间', rightText: startTime.isEmpty?'请选择':startTime, isRight: true, isRequired: true),
child: ListItemFactory.createRowSpaceBetweenItem(
leftText: '验收时间',
rightText: startTime.isEmpty ? '请选择' : startTime,
isRight: true,
isRequired: true,
),
onTap: () async {
DateTime? picked = await BottomDateTimePicker.showDate(context);
DateTime? picked = await BottomDateTimePicker.showDate(
context,
);
if (picked != null) {
setState(() {
startTime = DateFormat('yyyy-MM-dd HH:mm').format(picked);
startTime = DateFormat(
'yyyy-MM-dd HH:mm',
).format(picked);
});
FocusHelper.clearFocus(context);
}
@ -366,11 +377,13 @@ class _BlindboardYsgdDetailState extends State<BlindboardYsgdDetail> {
title: '验收视频',
maxCount: 1,
mediaType: MediaType.video,
horizontalPadding: 0,
horizontalPadding: 0,
onChanged: (paths) {},
onMediaAdded: _onImageAdded,
onMediaRemoved: (path) {
final item = imgList.firstWhere((e) => e.localPath == path);
final item = imgList.firstWhere(
(e) => e.localPath == path,
);
_onImageRemoved(item);
},
onAiIdentify: () {},

View File

@ -12,7 +12,7 @@ import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/dh_work/qtfx_
import 'package:qhd_prevention/customWidget/custom_alert_dialog.dart';
import 'package:qhd_prevention/customWidget/single_image_viewer.dart';
import 'package:qhd_prevention/pages/mine/mine_sign_page.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_Wrok/gc_work/SpecialWorkFormBaseWork.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_Wrok/mbcd_work/BlindboardFormBaseWork.dart';
///
class BlindboardZyfzDetail extends StatefulWidget {
@ -34,6 +34,7 @@ class _BlindboardZyfzDetailState extends State<BlindboardZyfzDetail> {
///
late Map<String, dynamic> pd = {};
late List<dynamic> boardList = [];
final TextEditingController _contentController = TextEditingController();
///
@ -203,6 +204,7 @@ class _BlindboardZyfzDetailState extends State<BlindboardZyfzDetail> {
final data = await ApiService.getHomeworkFindById('blindboard', widget.BLINDBOARD_ID);
setState(() {
pd = data['pd'];
boardList = data['boardList'];
_getSigns(pd['BLINDBOARD_ID'] ?? '');
_getMeasures(pd['BLINDBOARD_ID'] ?? '');
@ -270,7 +272,8 @@ class _BlindboardZyfzDetailState extends State<BlindboardZyfzDetail> {
child: Column(
spacing: 12,
children: [
HighWorkFormBaseWork(
BlindboardFormBaseWork(
boardList: boardList,
pd: pd,
measuresList: measuresList,
signs: signs,

View File

@ -12,7 +12,7 @@ import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/dh_work/qtfx_
import 'package:qhd_prevention/customWidget/custom_alert_dialog.dart';
import 'package:qhd_prevention/customWidget/single_image_viewer.dart';
import 'package:qhd_prevention/pages/mine/mine_sign_page.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_Wrok/gc_work/SpecialWorkFormBaseWork.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_Wrok/mbcd_work/BlindboardFormBaseWork.dart';
///
class BlindboardZyrDetail extends StatefulWidget {
@ -34,6 +34,7 @@ class _BlindboardZyrDetailState extends State<BlindboardZyrDetail> {
///
late Map<String, dynamic> pd = {};
late List<dynamic> boardList = [];
///
late List<Map<String, dynamic>> measuresList = [];
@ -196,6 +197,7 @@ class _BlindboardZyrDetailState extends State<BlindboardZyrDetail> {
final data = await ApiService.getHomeworkFindById('blindboard', widget.BLINDBOARD_ID);
setState(() {
pd = data['pd'];
boardList = data['boardList'];
_getSigns(pd['BLINDBOARD_ID'] ?? '');
_getMeasures(pd['BLINDBOARD_ID'] ?? '');
@ -263,7 +265,8 @@ class _BlindboardZyrDetailState extends State<BlindboardZyrDetail> {
child: Column(
spacing: 12,
children: [
HighWorkFormBaseWork(
BlindboardFormBaseWork(
boardList: boardList,
pd: pd,
measuresList: measuresList,
signs: signs,

View File

@ -102,7 +102,7 @@ class _SpaceworkGasListState extends State<SpaceworkGasList> {
final img = baseImgPath + images[i];
return GestureDetector(
onTap: () {
present(
presentOpaque(
SingleImageViewer(imageUrl: img),
context,
);

View File

@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:qhd_prevention/customWidget/ItemWidgetFactory.dart';
import 'package:qhd_prevention/http/ApiService.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/dh_work/hotwork_list_page.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/dl_work/cutroad_list_page.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/work_tab_icon_grid.dart';
import 'package:qhd_prevention/pages/my_appbar.dart';
import 'package:qhd_prevention/tools/tools.dart';
@ -23,15 +24,20 @@ class _WorkTabDlListState extends State<WorkTabDlList> {
_getData();
}
Future<void> _getData() async {
final data = await ApiService.specialcheckWorkCount('highwork');
final data = await ApiService.specialcheckWorkCount('cutroad');
setState(() {
final eight_work_count = data['count'] ?? {};
buttonInfos = [
{
"icon": "assets/icon-apps/icon-yxkj-1.png",
"title": "高处作业\n申请",
"title": "断路作业\n申请",
"unreadCount": eight_work_count['CREATE'] ?? '0',
},
{
"icon": "assets/icon-apps/icon-yxkj-2.png",
"title": "作业项目负责人\n意见",
"unreadCount": eight_work_count['PROJECT_MANAGER'] ?? '0',
},
{
"icon": "assets/icon-apps/icon-yh-1.png",
"title": "设置安全\n措施确认人",
@ -58,11 +64,6 @@ class _WorkTabDlListState extends State<WorkTabDlList> {
"title": "接受交底人\n意见",
"unreadCount": eight_work_count['ACCEPT_CONFESS'] ?? '0',
},
{
"icon": "assets/icon-apps/icon-yxkj-2.png",
"title": "作业人\n意见",
"unreadCount": eight_work_count['WORK_USER'] ?? '0',
},
{
"icon": "assets/icon-apps/icon-yxkj-2.png",
"title": "作业负责人\n意见",
@ -75,9 +76,10 @@ class _WorkTabDlListState extends State<WorkTabDlList> {
},
{
"icon": "assets/icon-apps/icon-901.png",
"title": "审核部门\n意见",
"unreadCount": eight_work_count['REVIEWER'] ?? '0',
"title": "消防、安全管理\n部门意见",
"unreadCount": eight_work_count['AUDIT'] ?? '0',
},
{
"icon": "assets/icon-apps/icon-901.png",
"title": "审批部门\n意见",
@ -107,15 +109,15 @@ class _WorkTabDlListState extends State<WorkTabDlList> {
String title = '';
switch (index) {
case 0: title = '提交申请'; break;
case 1: title = '设置安全措施确认'; break;
case 2: title = '安全措施确认'; break;
case 3: title = '监护人签字'; break;
case 4: title = '安全交底人签字'; break;
case 5: title = '接受交底人签字'; break;
case 6: title = '作业人签字'; break;
case 1: title = '作业项目负责'; break;
case 2: title = '设置安全措施确认'; break;
case 3: title = '安全措施确认'; break;
case 4: title = '监护人签字'; break;
case 5: title = '安全交底人签字'; break;
case 6: title = '接受交底人签字'; break;
case 7: title = '作业负责人签字'; break;
case 8: title = '所在单位签字'; break;
case 9: title = '审核人签字'; break;
case 9: title = '消防、安全管理部门签字'; break;
case 10: title = '审批人签字'; break;
case 11: title = '开始作业'; break;
case 12: title = '结束作业'; break;
@ -123,18 +125,18 @@ class _WorkTabDlListState extends State<WorkTabDlList> {
default:
print("按钮 $index 被点击");
}
await pushPage(HotWorkListPage(flow: title, workTypeTitle: '高处作业'), context);
await pushPage(CutroadListPage(flow: title, workTypeTitle: '断路作业'), context);
_getData();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: MyAppbar(title: '高处作业'),
appBar: MyAppbar(title: '断路作业'),
body: SafeArea(
child: Column(
children: [
ListItemFactory.createBuildSimpleSection('高处作业审批管理'),
ListItemFactory.createBuildSimpleSection('断路作业审批管理'),
WorkTabIconGrid(
buttonInfos: buttonInfos,
onItemPressed: _handleItemPressed,

View File

@ -49,10 +49,15 @@ class _WorkTabLsydListState extends State<WorkTabLsydList> {
"unreadCount": eight_work_count['MEASURES_CONFIRM'] ?? '0',
},
{
"icon": "assets/icon-apps/icon-yxkj-4.png",
"title": "用电人意见",
"icon": "assets/icon-apps/icon-zl-9.png",
"title": "监护人\n意见",
"unreadCount": eight_work_count['GUARDIAN'] ?? '0',
},
{
"icon": "assets/icon-apps/icon-yxkj-4.png",
"title": "用电人\n意见",
"unreadCount": eight_work_count['ELECTRICITY'] ?? '0',
},
{
"icon": "assets/icon-apps/icon-807.png",
"title": "安全交底人\n意见",
@ -76,12 +81,12 @@ class _WorkTabLsydListState extends State<WorkTabLsydList> {
{
"icon": "assets/icon-apps/icon-907.png",
"title": "用电单位\n意见",
"unreadCount": eight_work_count['LEADER'] ?? '0',
"unreadCount": eight_work_count['AUDIT'] ?? '0',
},
{
"icon": "assets/icon-apps/icon-907.png",
"title": "配送电单位\n意见",
"unreadCount": eight_work_count['REVIEWER'] ?? '0',
"unreadCount": eight_work_count['APPROVE'] ?? '0',
},
{
"icon": "assets/icon-apps/icon-aq-1.png",

View File

@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:qhd_prevention/customWidget/ItemWidgetFactory.dart';
import 'package:qhd_prevention/http/ApiService.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/dh_work/hotwork_list_page.dart';
import 'package:qhd_prevention/pages/home/tap/tabList/special_wrok/mbcd_work/blindboard_list_page.dart';
import 'package:qhd_prevention/pages/my_appbar.dart';
import 'package:qhd_prevention/tools/tools.dart';
@ -112,7 +113,7 @@ class _WorkTabMbcdListState extends State<WorkTabMbcdList> {
default:
print("按钮 $index 被点击");
}
await pushPage(HotWorkListPage(flow: title, workTypeTitle: '盲板作业',), context);
await pushPage(BlindboardListPage(flow: title, workTypeTitle: '盲板作业',), context);
_getData();
}

View File

@ -65,7 +65,7 @@ class _NotifPageState extends State<NotifPage>
}
Future<void> _getNotifList(String keyWord) async {
// LoadingDialogHelper.show();
LoadingDialogHelper.show();
try {
final result = await ApiService.getNotifList("-1", pageNum.toString(),keyWord);
if (result['result'] == 'success') {
@ -74,7 +74,10 @@ class _NotifPageState extends State<NotifPage>
_list.addAll(newList);
});
}
LoadingDialogHelper.hide();
} catch (e) {
LoadingDialogHelper.hide();
print('加载出错: $e');
} finally {
LoadingDialogHelper.hide();