Compare commits
2 Commits
e727730f0c
...
e86a91fc19
Author | SHA1 | Date |
---|---|---|
|
e86a91fc19 | |
|
f0ecc31e27 |
|
@ -1,6 +1,7 @@
|
|||
import 'dart:convert';
|
||||
import 'dart:io';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
import 'package:qhd_prevention/customWidget/custom_button.dart';
|
||||
import 'package:qhd_prevention/customWidget/single_image_viewer.dart';
|
||||
import 'package:qhd_prevention/pages/main_tab.dart';
|
||||
|
@ -54,8 +55,8 @@ class _PromisePageState extends State<PromisePage> {
|
|||
resolved['TEXT'] = payload['TEXT']?.toString() ?? '';
|
||||
}
|
||||
resolved['DETAIL'] = DETAIL;
|
||||
resolved['SIGNTIME'] =
|
||||
DateTime.now().millisecondsSinceEpoch.toString();
|
||||
resolved['SIGNTIME'] = DateFormat('yyyy-MM-dd').format(DateTime.now());
|
||||
|
||||
resolved['COVERPEOPLE'] =
|
||||
(payload['COVERPEOPLE'] is List && payload['COVERPEOPLE'].isNotEmpty)
|
||||
? payload['COVERPEOPLE'][0]['USERNAME']?.toString() ?? ''
|
||||
|
|
|
@ -28,8 +28,6 @@ class ApiService {
|
|||
static const String basePath = "http://192.168.20.240:8500/integrated_whb";
|
||||
// static const String basePath = "http://192.168.0.45:28199";//长久服务器
|
||||
|
||||
// static const String basePath = "http://192.168.0.37:8099/api";
|
||||
|
||||
/// 图片文件服务
|
||||
static const String baseImgPath = "https://file.zcloudchina.com/YTHFile";
|
||||
|
||||
|
|
|
@ -37,10 +37,12 @@ class _PunishmentManagerDetailPageState extends State<PunishmentManagerDetailPag
|
|||
}
|
||||
|
||||
Future<void> _getData() async {
|
||||
LoadingDialogHelper.show();
|
||||
final result = await ApiService.getKeyprojectDangerFindHidden(
|
||||
widget.info['HIDDEN_ID'] ?? '',
|
||||
widget.info['OUTSOURCED_ID'] ?? '',
|
||||
);
|
||||
LoadingDialogHelper.hide();
|
||||
try {
|
||||
setState(() {
|
||||
hiddenForm = result['pd'] ?? {};
|
||||
|
@ -116,12 +118,12 @@ class _PunishmentManagerDetailPageState extends State<PunishmentManagerDetailPag
|
|||
presentOpaque(
|
||||
SingleImageViewer(
|
||||
imageUrl:
|
||||
'${ApiService.baseImgPath}${_getServerPath(punishForm['HANDLE_IMG'])[index]}',
|
||||
'${ApiService.baseImgPath}${punishForm['HANDLE_IMG']}',
|
||||
),
|
||||
context,
|
||||
);
|
||||
},
|
||||
imageUrls: punishForm['HANDLE_IMG'],
|
||||
imageUrls: [punishForm['HANDLE_IMG'] ?? ''],
|
||||
),
|
||||
const Divider(),
|
||||
ItemListWidget.multiLineTitleTextField(
|
||||
|
@ -363,7 +365,7 @@ class _PunishmentManagerDetailPageState extends State<PunishmentManagerDetailPag
|
|||
}), onAiIdentify: () { },
|
||||
|
||||
),)
|
||||
|
||||
|
||||
],
|
||||
),
|
||||
|
||||
|
|
|
@ -112,14 +112,17 @@ class _PunishmentManagerPageState extends State<PunishmentManagerPage>
|
|||
|
||||
Future<void> _keyprojectPunishAdd(Map<String, dynamic> form) async {
|
||||
try {
|
||||
if (form['ISPUNISH'] == 1) {
|
||||
LoadingDialogHelper.show();
|
||||
if (form['ISPUNISH'] == "1") {
|
||||
final result = await ApiService.keyprojectpunishAdd(form);
|
||||
LoadingDialogHelper.hide();
|
||||
if (result['result'] == 'success') {
|
||||
await ApiService.keyprojectPunishEdit(form, '1');
|
||||
_getDataWithIndex(_selectedTab);
|
||||
}
|
||||
}else{
|
||||
await ApiService.keyprojectPunishEdit(form, '2');
|
||||
LoadingDialogHelper.hide();
|
||||
_getDataWithIndex(_selectedTab);
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,514 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
import 'package:qhd_prevention/customWidget/ItemWidgetFactory.dart';
|
||||
import 'package:qhd_prevention/customWidget/big_video_viewer.dart';
|
||||
import 'package:qhd_prevention/customWidget/full_screen_video_page.dart';
|
||||
import 'package:qhd_prevention/customWidget/single_image_viewer.dart';
|
||||
import 'package:qhd_prevention/http/ApiService.dart';
|
||||
import 'package:qhd_prevention/pages/app/danger_wait_list_page.dart';
|
||||
import 'package:qhd_prevention/pages/home/tap/item_list_widget.dart';
|
||||
import 'package:qhd_prevention/pages/my_appbar.dart';
|
||||
import 'package:qhd_prevention/tools/tools.dart';
|
||||
import 'dart:convert';
|
||||
import 'package:video_player/video_player.dart';
|
||||
|
||||
|
||||
|
||||
class SafecheckAcceptancePage extends StatefulWidget {
|
||||
const SafecheckAcceptancePage(this.dangerType, this.item, {Key? key}) : super(key: key);
|
||||
|
||||
|
||||
final DangerType dangerType;
|
||||
final item;
|
||||
|
||||
@override
|
||||
_SafecheckAcceptancePageState createState() => _SafecheckAcceptancePageState();
|
||||
}
|
||||
|
||||
class _SafecheckAcceptancePageState extends State<SafecheckAcceptancePage> {
|
||||
late Map<String, dynamic> pd = {};
|
||||
late Map<String, dynamic> hs = {};
|
||||
List<String> files = [];
|
||||
List<String> files2 = [];
|
||||
List<String> files4 = [];
|
||||
List<String> files5 = [];
|
||||
List<dynamic> files6 = [];
|
||||
List<dynamic> videoList = [];
|
||||
List<dynamic> checkList = [];
|
||||
List<String> files7 = [];
|
||||
|
||||
|
||||
bool modalShow = false;
|
||||
String videoSrc = "";
|
||||
VideoPlayerController? _videoController;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
if("2"==widget.item['HIDDEN_RISKSTANDARD']){
|
||||
getDataTwo();
|
||||
}else {
|
||||
getData();
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_videoController?.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
Future<void> getData() async {
|
||||
try {
|
||||
final data = await ApiService.getDangerDetail(widget.item['HIDDEN_ID']);
|
||||
if (data['result'] == 'success') {
|
||||
|
||||
setState(() {
|
||||
pd = data['pd'];
|
||||
hs = data['hs'] ?? {};
|
||||
|
||||
// 处理图片和视频
|
||||
for (var img in data['hImgs']) {
|
||||
if (img['FILEPATH'].toString().endsWith('.mp4')) {
|
||||
videoList.add(img);
|
||||
} else {
|
||||
files.add(img["FILEPATH"]);
|
||||
}
|
||||
}
|
||||
|
||||
// List<dynamic> filesZheng = data['rImgs'] ?? [];
|
||||
for (var img in data['rImgs']) {
|
||||
files2.add(img["FILEPATH"]);
|
||||
}
|
||||
// files2=data['rImgs'] ?? [];
|
||||
// files4 = data['sImgs'] ?? [];
|
||||
for (var img in data['sImgs']) {
|
||||
files4.add(img["FILEPATH"]);
|
||||
}
|
||||
// files5 = data['pImgs'] ?? [];
|
||||
for (var img in data['pImgs']) {
|
||||
files5.add(img["FILEPATH"]);
|
||||
}
|
||||
files6 = data['yImgs'] ?? [];
|
||||
checkList = data['checkList'] ?? [];
|
||||
if(checkList.isNotEmpty) {
|
||||
for (var img in checkList[0]['cImgs']) {
|
||||
files7.add(img["FILEPATH"]);
|
||||
}
|
||||
}
|
||||
});
|
||||
}else{
|
||||
getDataTwo();
|
||||
}
|
||||
|
||||
} catch (e) {
|
||||
print('Error fetching data: $e');
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> getDataTwo() async {
|
||||
try {
|
||||
final data = await ApiService.getDangerDetailTwo(widget.item['HIDDEN_ID']);
|
||||
if (data['result'] == 'success') {
|
||||
|
||||
setState(() {
|
||||
pd = data['pd'];
|
||||
hs = data['hs'] ?? {};
|
||||
|
||||
// 处理图片和视频
|
||||
for (var img in data['hImgs']) {
|
||||
if (img['FILEPATH'].toString().endsWith('.mp4')) {
|
||||
videoList.add(img);
|
||||
} else {
|
||||
files.add(img["FILEPATH"]);
|
||||
}
|
||||
}
|
||||
|
||||
// List<dynamic> filesZheng = data['rImgs'] ?? [];
|
||||
for (var img in data['rImgs']) {
|
||||
files2.add(img["FILEPATH"]);
|
||||
}
|
||||
// files2=data['rImgs'] ?? [];
|
||||
// files4 = data['sImgs'] ?? [];
|
||||
for (var img in data['sImgs']) {
|
||||
files4.add(img["FILEPATH"]);
|
||||
}
|
||||
// files5 = data['pImgs'] ?? [];
|
||||
for (var img in data['pImgs']) {
|
||||
files5.add(img["FILEPATH"]);
|
||||
}
|
||||
files6 = data['yImgs'] ?? [];
|
||||
|
||||
checkList = data['checkList'] ?? [];
|
||||
if(checkList.isNotEmpty) {
|
||||
for (var img in checkList[0]['cImgs']) {
|
||||
files7.add(img["FILEPATH"]);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
} catch (e) {
|
||||
print('Error fetching data: $e');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Widget _buildInfoItem(String title, String value) {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 8,horizontal: 10),
|
||||
child: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
SizedBox(
|
||||
width: 120,
|
||||
child: Text(
|
||||
title,
|
||||
style: const TextStyle(fontWeight: FontWeight.bold),
|
||||
),
|
||||
),
|
||||
Expanded(child: Text(value,textAlign: TextAlign.right,)),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: MyAppbar(title: widget.dangerType.detailTitle),
|
||||
body: pd.isEmpty
|
||||
? const Center(child: CircularProgressIndicator())
|
||||
: LayoutBuilder(
|
||||
builder: (context, constraints) {
|
||||
return SingleChildScrollView(
|
||||
child: ConstrainedBox(
|
||||
constraints: BoxConstraints(
|
||||
minHeight: constraints.maxHeight,
|
||||
),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(10),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
|
||||
Card(
|
||||
color: Colors.white,
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
_buildInfoItem('隐患描述', pd['HIDDENDESCR'] ?? ''),
|
||||
Divider(height: 1),
|
||||
// 隐患来源
|
||||
_buildInfoItem('隐患来源', _getSourceText(pd['SOURCE'])),
|
||||
Divider(height: 1),
|
||||
// 条件渲染部分
|
||||
if (pd['SOURCE'] == '2') ...[
|
||||
_buildInfoItem('风险点(单元)', pd['RISK_UNIT'] ?? ''),
|
||||
Divider(height: 1),
|
||||
_buildInfoItem('辨识部位', pd['IDENTIFICATION'] ?? ''),
|
||||
Divider(height: 1),
|
||||
_buildInfoItem('存在风险', pd['RISK_DESCR'] ?? ''),
|
||||
Divider(height: 1),
|
||||
_buildInfoItem('风险分级', pd['LEVEL'] ?? ''),
|
||||
Divider(height: 1),
|
||||
_buildInfoItem('检查内容', pd['CHECK_CONTENT'] ?? ''),
|
||||
Divider(height: 1),
|
||||
],
|
||||
|
||||
_buildInfoItem('隐患部位', pd['HIDDENPART'] ?? ''),
|
||||
Divider(height: 1),
|
||||
_buildInfoItem('发现人', pd['CREATORNAME'] ?? ''),
|
||||
Divider(height: 1),
|
||||
_buildInfoItem('发现时间', pd['CREATTIME'] ?? ''),
|
||||
Divider(height: 1),
|
||||
|
||||
if (pd['HIDDEN_CATEGORY']?.isNotEmpty == true)
|
||||
_buildInfoItem('隐患类别', pd['HIDDEN_CATEGORY_NAME'] ?? ''),
|
||||
|
||||
_buildInfoItem('隐患类型', pd['HIDDENTYPE_NAME'] ?? ''),
|
||||
Divider(height: 1),
|
||||
_buildInfoItem('整改类型', _getRectificationType(pd['RECTIFICATIONTYPE'])),
|
||||
|
||||
if (pd['RECTIFICATIONTYPE'] == '2')
|
||||
_buildInfoItem('整改期限', pd['RECTIFICATIONDEADLINE'] ?? ''),
|
||||
Divider(height: 1),
|
||||
// 隐患照片
|
||||
// const Text('隐患照片', style: TextStyle(fontWeight: FontWeight.bold)),
|
||||
// _buildImageGrid(files, onTap: (index) => _showImageGallery(files, index)),
|
||||
ListItemFactory.createTextImageItem(
|
||||
text: "隐患照片",
|
||||
imageUrls: files,
|
||||
horizontalPadding:10,
|
||||
onImageTapped: (index) {
|
||||
presentOpaque(
|
||||
SingleImageViewer(imageUrl:ApiService.baseImgPath + files[index]),
|
||||
context,
|
||||
);
|
||||
},
|
||||
),
|
||||
|
||||
// 隐患视频
|
||||
if (videoList.isNotEmpty) ...[
|
||||
SizedBox(height: 10),
|
||||
Padding(
|
||||
padding: EdgeInsets.only(left: 10,right: 10),
|
||||
child: Text('隐患视频', style: TextStyle(fontWeight: FontWeight.bold)),
|
||||
|
||||
),
|
||||
|
||||
GestureDetector(
|
||||
onTap: () {
|
||||
showDialog(
|
||||
context: context,
|
||||
barrierColor: Colors.black54,
|
||||
builder: (_) => VideoPlayerPopup(videoUrl: ApiService.baseImgPath + videoList[0]['FILEPATH']),
|
||||
);
|
||||
|
||||
// present(
|
||||
// BigVideoViewer(videoUrl:ApiService.baseImgPath + videoList[0]['FILEPATH']),
|
||||
// context,
|
||||
// );
|
||||
},
|
||||
// => _playVideo(ApiService.baseImgPath + videoList[0]['FILEPATH']),
|
||||
child: Image.asset(
|
||||
'assets/image/videostart.png', // 替换为你的视频占位图
|
||||
color: Colors.blue,
|
||||
width: 120,
|
||||
height: 120,
|
||||
),
|
||||
),
|
||||
],
|
||||
|
||||
|
||||
],
|
||||
),
|
||||
),
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// 整改信息部分
|
||||
if (pd['STATE'] != null && int.parse(pd['STATE']) >= 2 && int.parse(pd['STATE']) <= 4) ...[
|
||||
SizedBox(height: 10,),
|
||||
// const Divider(height: 10,color: Colors.grey,),
|
||||
Card(
|
||||
color: Colors.white,
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Padding(
|
||||
padding: EdgeInsets.only(top: 10,left: 10,right: 10),
|
||||
child: Row(
|
||||
children: [
|
||||
Container(width: 3, height: 15, color: Colors.blue),
|
||||
const SizedBox(width: 8),
|
||||
Text(
|
||||
"整改信息",
|
||||
style: const TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
|
||||
|
||||
|
||||
// const Text('整改信息', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
|
||||
Divider(height: 1),
|
||||
_buildInfoItem('整改描述', pd['RECTIFYDESCR'] ?? ''),
|
||||
Divider(height: 1),
|
||||
_buildInfoItem('整改部门', pd['RECTIFICATIONDEPTNAME'] ?? ''),
|
||||
Divider(height: 1),
|
||||
_buildInfoItem('整改人', pd['RECTIFICATIONORNAME'] ?? ''),
|
||||
Divider(height: 1),
|
||||
_buildInfoItem('整改时间', pd['RECTIFICATIONTIME'] ?? ''),
|
||||
Divider(height: 1),
|
||||
// const Text('整改后图片', style: TextStyle(fontWeight: FontWeight.bold)),
|
||||
// _buildImageGrid(files2, onTap: (index) => _showImageGallery(files2, index)),
|
||||
ListItemFactory.createTextImageItem(
|
||||
text: "整改后图片",
|
||||
imageUrls: files2,
|
||||
horizontalPadding: 10,
|
||||
onImageTapped: (index) {
|
||||
presentOpaque(
|
||||
SingleImageViewer(imageUrl: ApiService.baseImgPath +files2[index]),
|
||||
context,
|
||||
);
|
||||
},
|
||||
),
|
||||
|
||||
|
||||
Divider(height: 1),
|
||||
_buildInfoItem('整改方案', pd['HAVESCHEME']=="1" ? '有':'无'),
|
||||
Divider(height: 1),
|
||||
if(pd['HAVESCHEME']=="1")
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
_buildInfoItem('排查日期', hs['SCREENINGDATE'] ?? ''),
|
||||
Divider(height: 1),
|
||||
_buildInfoItem('隐患清单', hs['LISTNAME'] ?? ''),
|
||||
Divider(height: 1),
|
||||
_buildInfoItem('治理标准要求', hs['GOVERNSTANDARDS'] ?? ''),
|
||||
Divider(height: 1),
|
||||
_buildInfoItem('治理方法', hs['GOVERNMETHOD'] ?? ''),
|
||||
Divider(height: 1),
|
||||
_buildInfoItem('经费和物资的落实', hs['EXPENDITURE'] ?? ''),
|
||||
Divider(height: 1),
|
||||
_buildInfoItem('负责治理人员', hs['PRINCIPAL'] ?? ''),
|
||||
Divider(height: 1),
|
||||
_buildInfoItem('工时安排', hs['PROGRAMMING'] ?? ''),
|
||||
Divider(height: 1),
|
||||
_buildInfoItem('时限要求', hs['TIMELIMITFOR'] ?? ''),
|
||||
Divider(height: 1),
|
||||
_buildInfoItem('工作要求', hs['JOBREQUIREMENT'] ?? ''),
|
||||
Divider(height: 1),
|
||||
_buildInfoItem('其他事项', hs['OTHERBUSINESS'] ?? ''),
|
||||
Divider(height: 1),
|
||||
ListItemFactory.createTextImageItem(
|
||||
text: "方案图片",
|
||||
imageUrls: files4,
|
||||
horizontalPadding: 10,
|
||||
onImageTapped: (index) {
|
||||
presentOpaque(
|
||||
SingleImageViewer(imageUrl: ApiService.baseImgPath +files2[index]),
|
||||
context,
|
||||
);
|
||||
},
|
||||
),
|
||||
|
||||
|
||||
],
|
||||
),
|
||||
|
||||
Divider(height: 1),
|
||||
_buildInfoItem('整改计划', pd['HAVEPLAN']=="1" ? '有':'无'),
|
||||
Divider(height: 1),
|
||||
if(pd['HAVEPLAN']=="1")
|
||||
ListItemFactory.createTextImageItem(
|
||||
text: "计划图片",
|
||||
imageUrls: files2,
|
||||
horizontalPadding: 10,
|
||||
onImageTapped: (index) {
|
||||
presentOpaque(
|
||||
SingleImageViewer(imageUrl: ApiService.baseImgPath +files2[index]),
|
||||
context,
|
||||
);
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
// ... 其他整改信息字段
|
||||
],
|
||||
|
||||
|
||||
|
||||
// 验收信息部分
|
||||
if ((6==widget.dangerType.index||1==widget.dangerType.index||0==widget.dangerType.index)&&checkList.isNotEmpty) ...[
|
||||
// const Divider(height: 10,color: Colors.grey,),
|
||||
SizedBox(height: 10,),
|
||||
Card(
|
||||
color: Colors.white,
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
|
||||
Padding(
|
||||
padding: EdgeInsets.only(top: 10,left: 10,right: 10),
|
||||
child:
|
||||
Row(
|
||||
children: [
|
||||
Container(width: 3, height: 15, color: Colors.blue),
|
||||
const SizedBox(width: 8),
|
||||
Text(
|
||||
"验收信息",
|
||||
style: const TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
|
||||
|
||||
// const Text('整改信息', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
|
||||
Divider(height: 1),
|
||||
_buildInfoItem('验收描述', checkList[0]['CHECKDESCR'] ?? ''),
|
||||
Divider(height: 1),
|
||||
_buildInfoItem('是否合格',_getText (checkList[0]['STATUS'] )),
|
||||
Divider(height: 1),
|
||||
_buildInfoItem('验收部门', checkList[0]['CHECKDEPTNAME'] ?? ''),
|
||||
Divider(height: 1),
|
||||
_buildInfoItem('验收部门负责人', checkList[0]['CHECKORNAME'] ?? ''),
|
||||
Divider(height: 1),
|
||||
_buildInfoItem('验收时间', checkList[0]['CHECK_TIME'] ?? ''),
|
||||
Divider(height: 1),
|
||||
// const Text('整改后图片', style: TextStyle(fontWeight: FontWeight.bold)),
|
||||
// _buildImageGrid(files2, onTap: (index) => _showImageGallery(files2, index)),
|
||||
ListItemFactory.createTextImageItem(
|
||||
text: "验收图片",
|
||||
imageUrls: files7,
|
||||
horizontalPadding: 10,
|
||||
onImageTapped: (index) {
|
||||
presentOpaque(
|
||||
SingleImageViewer(imageUrl: ApiService.baseImgPath +files5[index]),
|
||||
context,
|
||||
);
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
|
||||
|
||||
// 添加底部安全区域间距
|
||||
SizedBox(height: MediaQuery.of(context).padding.bottom + 20),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
String _getText(String source) {
|
||||
if(source.isNotEmpty){
|
||||
if(source=="1"){
|
||||
return "是";
|
||||
}else{
|
||||
return "否";
|
||||
}
|
||||
}else{
|
||||
return "";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
String _getSourceText(String? source) {
|
||||
|
||||
switch (source) {
|
||||
case '1': return '隐患快报';
|
||||
case '2': return '隐患排查清单检查';
|
||||
case '3': return '标准排查清单检查';
|
||||
case '4': return '专项检查';
|
||||
case '5': return '安全检查';
|
||||
case '6': return 'NFC设备巡检';
|
||||
|
||||
default: return '';
|
||||
}
|
||||
}
|
||||
|
||||
String _getRectificationType(String? type) {
|
||||
switch (type) {
|
||||
case '1': return '立即整改';
|
||||
case '2': return '限期整改';
|
||||
default: return '';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,5 +1,7 @@
|
|||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:qhd_prevention/pages/app/danger_wait_list_page.dart';
|
||||
import 'package:qhd_prevention/pages/home/SafeCheck/DangeCheck/safeCheck_acceptance_page.dart';
|
||||
import 'package:qhd_prevention/pages/home/SafeCheck/DangeCheck/safeCheck_assignment_detail_page.dart';
|
||||
import 'package:qhd_prevention/pages/my_appbar.dart';
|
||||
import 'package:qhd_prevention/tools/tools.dart';
|
||||
|
@ -124,7 +126,7 @@ class _SafecheckAssignmentListState extends State<SafecheckAssignmentList> {
|
|||
// 验收
|
||||
void _goAccept(Map<String, dynamic> item) async {
|
||||
|
||||
// await pushPage(SafecheckSignDetail(INSPECTION_ID: item['INSPECTION_ID'] ?? '', INSPECTION_INSPECTOR_ID: item['INSPECTION_INSPECTOR_ID'] ?? '',isEdit: false), context);
|
||||
await pushPage(SafecheckAcceptancePage(DangerType.waitAcceptance, item), context);
|
||||
_fetchData();
|
||||
|
||||
|
||||
|
@ -242,8 +244,7 @@ class _SafecheckAssignmentListState extends State<SafecheckAssignmentList> {
|
|||
),
|
||||
if (item['CREATOR'] == SessionService.instance.loginUserId &&
|
||||
(item['HIDDEN_STATUS'] == '4' || item['HIDDEN_STATUS'] == '8') &&
|
||||
(item['HIDDEN_STATUS'] == '4' || item['HIDDEN_STATUS'] == '8') &&
|
||||
FormUtils.hasValue(item, 'FINAL_CHECK'))
|
||||
(!FormUtils.hasValue(item, 'FINAL_CHECK') || item['FINAL_CHECK'] == '2'))
|
||||
CustomButton(
|
||||
text: '验收',
|
||||
height: 32,
|
||||
|
|
|
@ -80,7 +80,7 @@ class _SafecheckDangerListPageState extends State<SafecheckDangerListPage> {
|
|||
|
||||
try {
|
||||
final data = {
|
||||
'INSPECTION_STATUS': sindex > 0 ? stepList[sindex]['id'] : '',
|
||||
'INSPECTION_STATUS': sindex > 0 ? stepList[sindex]['id'] : '3-7',
|
||||
'ARCHIVE_USER_ID': SessionService.instance.loginUserId,
|
||||
'KEYWORDS': searchKeywords,
|
||||
};
|
||||
|
@ -129,10 +129,8 @@ class _SafecheckDangerListPageState extends State<SafecheckDangerListPage> {
|
|||
/// 验收
|
||||
void _goAccept(Map<String, dynamic> item) async {
|
||||
|
||||
// await pushPage(SafecheckSignDetail(INSPECTION_ID: item['INSPECTION_ID'] ?? '', INSPECTION_INSPECTOR_ID: item['INSPECTION_INSPECTOR_ID'] ?? '',isEdit: false), context);
|
||||
await pushPage(SafecheckAssignmentList(INSPECTION_ID: item['INSPECTION_ID'] ?? ''), context);
|
||||
_fetchData();
|
||||
|
||||
|
||||
}
|
||||
|
||||
Widget _buildFlowStepItem({
|
||||
|
|
|
@ -379,7 +379,7 @@ class _SafecheckStartDetailState extends State<SafecheckStartDetail> {
|
|||
}
|
||||
seenIds.add(id);
|
||||
} else {
|
||||
// 如果某个检查人没选 ID,也视为错误(对应 uniapp 的校验)
|
||||
// 如果某个检查人没选 ID,也视为错误
|
||||
LoadingDialogHelper.hide();
|
||||
ToastUtil.showNormal(context, '有检查人未选择数据,请选择');
|
||||
return;
|
||||
|
|
|
@ -6,9 +6,7 @@ import 'package:qhd_prevention/customWidget/custom_alert_dialog.dart';
|
|||
import 'package:qhd_prevention/customWidget/promise/promise_page.dart';
|
||||
import 'package:qhd_prevention/customWidget/toast_util.dart';
|
||||
import 'package:qhd_prevention/pages/home/scan_page.dart';
|
||||
import 'package:qhd_prevention/pages/my_appbar.dart';
|
||||
import 'package:qhd_prevention/services/auth_service.dart';
|
||||
import 'package:qhd_prevention/services/location_service.dart';
|
||||
import 'package:qhd_prevention/tools/coord_convert.dart';
|
||||
import 'package:qhd_prevention/tools/update/update_dialogs.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
@ -548,19 +546,19 @@ class HomePageState extends State<HomePage> {
|
|||
case 6: //安全承诺
|
||||
pushPage(SafetyCommitmentPage(), context);
|
||||
break;
|
||||
case 7:
|
||||
case 7: // 学习园地
|
||||
pushPage(StudyGardenPage(), context);
|
||||
break;
|
||||
case 9:
|
||||
pushPage(EquipmentInspectionListPage(), context);
|
||||
break;
|
||||
case 8: // 安全检查
|
||||
await pushPage(SafecheckTabList(), context);
|
||||
break;
|
||||
case 10:
|
||||
case 9: // 设备巡检
|
||||
pushPage(EquipmentInspectionListPage(), context);
|
||||
break;
|
||||
case 10: // 安全例会
|
||||
pushPage(SafetyMeetingListPage(), context);
|
||||
break;
|
||||
case 11:
|
||||
case 11: // NFC巡检
|
||||
pushPage(HomeNfcListPage(), context);
|
||||
break;
|
||||
}
|
||||
|
@ -740,13 +738,13 @@ class HomePageState extends State<HomePage> {
|
|||
Text(
|
||||
title,
|
||||
style: const TextStyle(
|
||||
fontSize: 14,
|
||||
fontSize: 13,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
maxLines: 1,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
),
|
||||
const SizedBox(height: 4),
|
||||
const SizedBox(height: 2),
|
||||
Text(
|
||||
subtitle,
|
||||
style: const TextStyle(fontSize: 13, color: Colors.black),
|
||||
|
|
|
@ -127,27 +127,17 @@ class _DangerousOptionsPageState extends State<DangerousOptionsPage> {
|
|||
for (Map<String, dynamic> img in signList) {
|
||||
String imgName = 'file${data.key}';
|
||||
if (data.filePath!.contains('uploadFiles')) {
|
||||
// final idata = {
|
||||
// 'filePath': data.filePath,
|
||||
// 'SIGNER_TIME': data.SIGNER_TIME,
|
||||
// 'key': data.key,
|
||||
// };
|
||||
final idata = {
|
||||
'SIGN_PATH': data.filePath,
|
||||
'SIGN_TIME': data.SIGNER_TIME,
|
||||
'filePath': data.filePath,
|
||||
'SIGNER_TIME': data.SIGNER_TIME,
|
||||
'key': data.key,
|
||||
};
|
||||
sineImageList.add(idata);
|
||||
}
|
||||
if (imgName == img['key']) {
|
||||
// final idata = {
|
||||
// 'filePath': img['filePath'] ?? '',
|
||||
// 'SIGNER_TIME': data.SIGNER_TIME,
|
||||
// 'key': data.key,
|
||||
// };
|
||||
final idata = {
|
||||
'SIGN_PATH': img['filePath'] ?? '',
|
||||
'SIGN_TIME': data.SIGNER_TIME,
|
||||
'filePath': img['filePath'] ?? '',
|
||||
'SIGNER_TIME': data.SIGNER_TIME,
|
||||
'key': data.key,
|
||||
};
|
||||
sineImageList.add(idata);
|
||||
|
|
|
@ -208,7 +208,7 @@ class _HotWorkDetailFormWidgetState extends State<HotWorkDetailFormWidget> {
|
|||
),
|
||||
const Divider(),
|
||||
ItemListWidget.selectableLineTitleTextRightButton(
|
||||
label: '视频监控:',
|
||||
label: '作业视频监控:',
|
||||
isClean: widget.isEditable && (pd['WORK_LEVEL'] == '一级' || pd['WORK_LEVEL'] == '二级'),
|
||||
cleanText: '清除监控',
|
||||
isRequired: pd['WORK_LEVEL'] == '特级',
|
||||
|
|
|
@ -266,11 +266,17 @@ class _CutroadDetailFormWidgetState extends State<CutroadDetailFormWidget> {
|
|||
const Divider(),
|
||||
],
|
||||
ItemListWidget.singleLineTitleText(
|
||||
label: '申请部门:',
|
||||
label: '作业申请单位:',
|
||||
isEditable: false,
|
||||
text: pd['APPLY_DEPARTMENT_NAME'] ?? '',
|
||||
),
|
||||
const Divider(),
|
||||
ItemListWidget.singleLineTitleText(
|
||||
label: '申请人:',
|
||||
isEditable: false,
|
||||
text: pd['APPLY_USER_NAME'] ?? '',
|
||||
),
|
||||
const Divider(),
|
||||
|
||||
ItemListWidget.singleLineTitleText(
|
||||
label: '涉及相关单位(部门):',
|
||||
|
@ -288,26 +294,6 @@ class _CutroadDetailFormWidgetState extends State<CutroadDetailFormWidget> {
|
|||
text: pd['WORK_REASON'] ?? '',
|
||||
),
|
||||
const Divider(),
|
||||
|
||||
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(),
|
||||
],
|
||||
|
||||
ItemListWidget.twoRowButtonTitleText(
|
||||
label: '关联其他特殊作业及安全作业票编号',
|
||||
isRequired: false,
|
||||
|
@ -333,6 +319,25 @@ class _CutroadDetailFormWidgetState extends State<CutroadDetailFormWidget> {
|
|||
text: pd['SPECIAL_WORK'] ?? '',
|
||||
),
|
||||
const Divider(),
|
||||
|
||||
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(),
|
||||
],
|
||||
ItemListWidget.twoRowButtonTitleText(
|
||||
label: '风险辨识结果',
|
||||
isEditable: widget.isEditable,
|
||||
|
@ -357,23 +362,6 @@ class _CutroadDetailFormWidgetState extends State<CutroadDetailFormWidget> {
|
|||
text: pd['RISK_IDENTIFICATION'] ?? '',
|
||||
),
|
||||
const Divider(),
|
||||
|
||||
ItemListWidget.selectableLineTitleTextRightButton(
|
||||
label: '视频监控:',
|
||||
isClean: widget.isEditable,
|
||||
cleanText: '清除监控',
|
||||
onTapClean: () {
|
||||
setState(() {
|
||||
pd['VIDEONAME'] = '';
|
||||
pd['VIDEOMANAGER_ID'] = '';
|
||||
});
|
||||
},
|
||||
isRequired: false,
|
||||
isEditable: widget.isEditable,
|
||||
onTap: widget.onChooseVideoManager ?? () {},
|
||||
text: pd['VIDEONAME'] ?? '',
|
||||
),
|
||||
const Divider(),
|
||||
ItemListWidget.selectableLineTitleTextRightButton(
|
||||
label: '预计作业开始时间:',
|
||||
isEditable: widget.isEditable,
|
||||
|
@ -468,12 +456,29 @@ class _CutroadDetailFormWidgetState extends State<CutroadDetailFormWidget> {
|
|||
hintText: '',
|
||||
text: pd['LATITUDE_LONGITUDE'] ?? (widget.isEditable ? '' : '无'),
|
||||
),
|
||||
const Divider(),
|
||||
|
||||
ItemListWidget.selectableLineTitleTextRightButton(
|
||||
label: '作业视频监控:',
|
||||
isClean: widget.isEditable,
|
||||
cleanText: '清除监控',
|
||||
onTapClean: () {
|
||||
setState(() {
|
||||
pd['VIDEONAME'] = '';
|
||||
pd['VIDEOMANAGER_ID'] = '';
|
||||
});
|
||||
},
|
||||
isRequired: false,
|
||||
isEditable: widget.isEditable,
|
||||
onTap: widget.onChooseVideoManager ?? () {},
|
||||
text: pd['VIDEONAME'] ?? '',
|
||||
),
|
||||
|
||||
if (widget.signs != null && FormUtils.hasValue(widget.signs, 'PROJECT_MANAGER'))
|
||||
Column(
|
||||
children: [
|
||||
Divider(),
|
||||
signItemWidget('PROJECT_MANAGER', 'PROJECT_MANAGER_USER_NAME', '作业项目负责人', context),
|
||||
signItemWidget('PROJECT_MANAGER', 'PROJECT_MANAGER_USER_NAME', '断路示意图负责人签字', context),
|
||||
],
|
||||
)
|
||||
],
|
||||
|
|
|
@ -58,7 +58,6 @@ class _CutroadListPageState extends State<CutroadListPage> {
|
|||
void initState() {
|
||||
super.initState();
|
||||
_fetchSteps();
|
||||
_fetchData();
|
||||
_scrollController.addListener(_onScroll);
|
||||
}
|
||||
|
||||
|
@ -80,25 +79,31 @@ class _CutroadListPageState extends State<CutroadListPage> {
|
|||
}
|
||||
|
||||
Future<void> _fetchSteps() async {
|
||||
|
||||
try {
|
||||
final response = await ApiService.searchGetTaskSetps(1);
|
||||
LoadingDialogHelper.show();
|
||||
final response = await ApiService.searchGetTaskSetps(12);
|
||||
setState(() {
|
||||
stepList = [
|
||||
{'STEP_NAME': '全部', 'STEP_ID': ''},
|
||||
...response['list'] ?? [],
|
||||
{"STEP_NAME": "验收归档",
|
||||
"STEP_ID": "99"}
|
||||
];
|
||||
_fetchData();
|
||||
|
||||
});
|
||||
} catch (e) {
|
||||
print('Error fetching steps: $e');
|
||||
LoadingDialogHelper.hide();
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _fetchData() async {
|
||||
if (isLoading) return;
|
||||
setState(() => isLoading = true);
|
||||
|
||||
int code = 0;
|
||||
for (Map item in stepList) {
|
||||
if (item['STEP_NAME'] == widget.flow) {
|
||||
code = item['STEP_ID'] ?? 0;
|
||||
}
|
||||
}
|
||||
try {
|
||||
final data = {
|
||||
'CREATOR':
|
||||
|
@ -107,12 +112,14 @@ class _CutroadListPageState extends State<CutroadListPage> {
|
|||
widget.flow == '气体检测' ? SessionService.instance.loginUserId : '',
|
||||
'STEP_NAME':
|
||||
(widget.flow == '提交申请' || widget.flow == '气体检测') ? '' : widget.flow,
|
||||
'STEP_CODE': code,
|
||||
'STEP_ID': sindex > 0 ? stepList[sindex]['STEP_ID'] : '',
|
||||
'KEYWORDS': searchKeywords,
|
||||
'WORK_STATE': '0',
|
||||
};
|
||||
final url = '/app/cutroad/list?showCount=-1¤tPage=$currentPage';
|
||||
final response = await ApiService.specialCheckListWorkCount(data, url);
|
||||
LoadingDialogHelper.hide();
|
||||
|
||||
setState(() {
|
||||
if (currentPage == 1) {
|
||||
|
@ -178,7 +185,7 @@ class _CutroadListPageState extends State<CutroadListPage> {
|
|||
case '提交申请':
|
||||
await pushPage(CutroadApplyDetail(CUTROAD_ID: item['CUTROAD_ID'], flow: widget.flow), context);
|
||||
break;
|
||||
case '作业项目负责人':
|
||||
case '断路示意图负责人':
|
||||
await pushPage(CutroadZyrDetail(CUTROAD_ID: item['CUTROAD_ID'], flow: widget.flow), context);
|
||||
break;
|
||||
case '设置安全措施确认人':
|
||||
|
@ -225,7 +232,6 @@ class _CutroadListPageState extends State<CutroadListPage> {
|
|||
}
|
||||
setState(() {
|
||||
_fetchSteps();
|
||||
_fetchData();
|
||||
});
|
||||
// Navigator.pushNamed(
|
||||
// context,
|
||||
|
@ -329,7 +335,7 @@ class _CutroadListPageState extends State<CutroadListPage> {
|
|||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text("申请人: ${item['APPLY_USER_NAME'] ?? ''}"),
|
||||
Expanded(child: Text("作业项目负责人: ${item['PROJECT_MANAGER_USER_NAME'] ?? ''}",softWrap: true,
|
||||
Expanded(child: Text("断路示意图负责人: ${item['PROJECT_MANAGER_USER_NAME'] ?? ''}",softWrap: true,
|
||||
textAlign: TextAlign.right,
|
||||
maxLines: null, // 不限制行数
|
||||
overflow: TextOverflow.visible,)
|
||||
|
|
|
@ -21,13 +21,13 @@ import 'package:qhd_prevention/pages/home/tap/workArea_picker.dart';
|
|||
|
||||
|
||||
enum EditUserType {
|
||||
PROJECT_MANAGER('作业人项目负责单位', '作业人项目负责人', true),
|
||||
PROJECT_MANAGER('断路示意图负责单位', '断路示意图负责人', true),
|
||||
GUARDIAN('监护人单位', '监护人', true),
|
||||
CONFESS('安全交底人单位', '安全交底人', true),
|
||||
ACCEPT_CONFESS('接受交底人单位', '接受交底人', true),
|
||||
CONFIRM('作业负责人单位', '作业负责人', true),
|
||||
LEADER('所在单位', '所在单位负责人', true),
|
||||
AUDIT('安全管理部门', '安全管理部门负责人', true),
|
||||
AUDIT('消防、安全管理部门', '安全管理部门负责人', true),
|
||||
APPROVE('审批部门', '审批部门负责人', true),
|
||||
WORK_START('作业开始负责人单位', '作业开始负责人', true),
|
||||
WORK_END('作业结束负责人单位', '作业结束负责人', true),
|
||||
|
@ -364,6 +364,7 @@ class _CutroadApplyDetailState extends State<CutroadApplyDetail> {
|
|||
pd['APPLY_USER_ID'] = SessionService.instance.loginUserId;
|
||||
pd['APPLY_USER_NAME'] = SessionService.instance.username;
|
||||
pd['USER_ID'] = SessionService.instance.loginUserId;
|
||||
pd['SPECIAL_WORK'] = FormUtils.hasValue(pd, 'SPECIAL_WORK') ? pd['SPECIAL_WORK'] : '无';
|
||||
}
|
||||
|
||||
LoadingDialogHelper.show();
|
||||
|
@ -390,7 +391,6 @@ class _CutroadApplyDetailState extends State<CutroadApplyDetail> {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
/// ---------------------------- 新增 --------------------------------
|
||||
/// 视频监控摄像头
|
||||
Future<void> _chooseVideoManager() async {
|
||||
|
|
|
@ -22,7 +22,7 @@ class ImageData {
|
|||
|
||||
ImageData({required this.localPath, required this.serverPath});
|
||||
}
|
||||
/// 作业项目负责人意见
|
||||
/// 断路示意图负责人意见
|
||||
class CutroadZyrDetail extends StatefulWidget {
|
||||
const CutroadZyrDetail({
|
||||
super.key,
|
||||
|
@ -294,7 +294,7 @@ setState(() {
|
|||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: MyAppbar(title: '作业项目负责人意见'),
|
||||
appBar: MyAppbar(title: '断路示意图负责人意见'),
|
||||
body: SafeArea(
|
||||
child: SingleChildScrollView(
|
||||
padding: EdgeInsets.all(12),
|
||||
|
@ -340,7 +340,7 @@ setState(() {
|
|||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
ListItemFactory.headerTitle('作业项目负责人'),
|
||||
ListItemFactory.headerTitle('断路示意图负责人签字',isRequired: true),
|
||||
CustomButton(
|
||||
text: '新增手写签字',
|
||||
height: 36,
|
||||
|
|
|
@ -406,7 +406,7 @@ class _BreakgroundDetailFormWidgetState
|
|||
const Divider(),
|
||||
|
||||
ItemListWidget.selectableLineTitleTextRightButton(
|
||||
label: '视频监控:',
|
||||
label: '作业视频监控:',
|
||||
isClean: widget.isEditable,
|
||||
cleanText: '清除监控',
|
||||
onTapClean: () {
|
||||
|
|
|
@ -82,12 +82,11 @@ class _BreakgroundListPageState extends State<BreakgroundListPage> {
|
|||
|
||||
Future<void> _fetchSteps() async {
|
||||
try {
|
||||
final response = await ApiService.searchGetTaskSetps(1);
|
||||
final response = await ApiService.searchGetTaskSetps(9);
|
||||
setState(() {
|
||||
stepList = [
|
||||
{'STEP_NAME': '全部', 'STEP_ID': ''},
|
||||
...response['list'] ?? [],
|
||||
{"STEP_NAME": "验收归档", "STEP_ID": "99"},
|
||||
];
|
||||
});
|
||||
} catch (e) {
|
||||
|
|
|
@ -387,7 +387,7 @@ class _HoistworkDetailFormWidgetState extends State<HoistWorkDetailFormWidget> {
|
|||
),
|
||||
const Divider(),
|
||||
ItemListWidget.selectableLineTitleTextRightButton(
|
||||
label: '视频监控:',
|
||||
label: '作业视频监控:',
|
||||
isClean: widget.isEditable,
|
||||
cleanText: '清除监控',
|
||||
onTapClean: () {
|
||||
|
|
|
@ -84,13 +84,12 @@ class _HoistworkListPageState extends State<HoistworkListPage> {
|
|||
|
||||
Future<void> _fetchSteps() async {
|
||||
try {
|
||||
final response = await ApiService.searchGetTaskSetps(1);
|
||||
final response = await ApiService.searchGetTaskSetps(10);
|
||||
setState(() {
|
||||
stepList = [
|
||||
{'STEP_NAME': '全部', 'STEP_ID': ''},
|
||||
...response['list'] ?? [],
|
||||
{"STEP_NAME": "验收归档",
|
||||
"STEP_ID": "99"}
|
||||
|
||||
];
|
||||
});
|
||||
} catch (e) {
|
||||
|
|
|
@ -176,7 +176,7 @@ class _HighWorkDetailFormWidgetState extends State<HighWorkDetailFormWidget> {
|
|||
),
|
||||
const Divider(),
|
||||
ItemListWidget.selectableLineTitleTextRightButton(
|
||||
label: '视频监控:',
|
||||
label: '作业视频监控:',
|
||||
isClean: widget.isEditable,
|
||||
cleanText: '清除监控',
|
||||
onTapClean: () {
|
||||
|
|
|
@ -82,7 +82,7 @@ class _HighworkListPageState extends State<HighworkListPage> {
|
|||
|
||||
Future<void> _fetchSteps() async {
|
||||
try {
|
||||
final response = await ApiService.searchGetTaskSetps(1);
|
||||
final response = await ApiService.searchGetTaskSetps(5);
|
||||
setState(() {
|
||||
stepList = [
|
||||
{'STEP_NAME': '全部', 'STEP_ID': ''},
|
||||
|
|
|
@ -244,7 +244,7 @@ class _ElectricityDetailFormWidgetState extends State<ElectricityDetailFormWidge
|
|||
const Divider(),
|
||||
|
||||
ItemListWidget.selectableLineTitleTextRightButton(
|
||||
label: '视频监控:',
|
||||
label: '作业视频监控:',
|
||||
isClean: widget.isEditable,
|
||||
cleanText: '清除监控',
|
||||
onTapClean: () {
|
||||
|
|
|
@ -82,7 +82,7 @@ class _ElectricityListPageState extends State<ElectricityListPage> {
|
|||
|
||||
Future<void> _fetchSteps() async {
|
||||
try {
|
||||
final response = await ApiService.searchGetTaskSetps(1);
|
||||
final response = await ApiService.searchGetTaskSetps(8);
|
||||
setState(() {
|
||||
stepList = [
|
||||
{'STEP_NAME': '全部', 'STEP_ID': ''},
|
||||
|
|
|
@ -354,7 +354,7 @@ class _BlindboardDetailFormWidgetState
|
|||
),
|
||||
const Divider(),
|
||||
ItemListWidget.selectableLineTitleTextRightButton(
|
||||
label: '视频监控:',
|
||||
label: '作业视频监控:',
|
||||
isClean: widget.isEditable,
|
||||
cleanText: '清除监控',
|
||||
onTapClean: () {
|
||||
|
|
|
@ -82,13 +82,11 @@ class _BlindboardListPageState extends State<BlindboardListPage> {
|
|||
|
||||
Future<void> _fetchSteps() async {
|
||||
try {
|
||||
final response = await ApiService.searchGetTaskSetps(1);
|
||||
final response = await ApiService.searchGetTaskSetps(13);
|
||||
setState(() {
|
||||
stepList = [
|
||||
{'STEP_NAME': '全部', 'STEP_ID': ''},
|
||||
...response['list'] ?? [],
|
||||
{"STEP_NAME": "验收归档",
|
||||
"STEP_ID": "99"}
|
||||
];
|
||||
});
|
||||
} catch (e) {
|
||||
|
|
|
@ -231,7 +231,7 @@ class _SpaceWorkDetailFormWidgetState extends State<SpaceWorkDetailFormWidget> {
|
|||
),
|
||||
const Divider(),
|
||||
ItemListWidget.selectableLineTitleTextRightButton(
|
||||
label: '视频监控:',
|
||||
label: '作业视频监控:',
|
||||
isClean: widget.isEditable,
|
||||
cleanText: '清除监控',
|
||||
onTapClean: () {
|
||||
|
|
|
@ -26,7 +26,6 @@ class _SxkjTzglListPageState extends State<SxkjTzglListPage> {
|
|||
bool isLoading = false;
|
||||
final TextEditingController _searchController = TextEditingController();
|
||||
|
||||
List<Map<String, dynamic>> stepList = [];
|
||||
int sindex = 0;
|
||||
String searchKeywords = '';
|
||||
|
||||
|
@ -38,7 +37,6 @@ class _SxkjTzglListPageState extends State<SxkjTzglListPage> {
|
|||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_fetchSteps();
|
||||
_fetchData();
|
||||
_scrollController.addListener(_onScroll);
|
||||
}
|
||||
|
@ -60,20 +58,6 @@ class _SxkjTzglListPageState extends State<SxkjTzglListPage> {
|
|||
}
|
||||
}
|
||||
|
||||
Future<void> _fetchSteps() async {
|
||||
try {
|
||||
final response = await ApiService.searchGetTaskSetps(1);
|
||||
setState(() {
|
||||
stepList = [
|
||||
{'STEP_NAME': '全部', 'STEP_ID': ''},
|
||||
...response['list'] ?? [],
|
||||
];
|
||||
});
|
||||
} catch (e) {
|
||||
print('Error fetching steps: $e');
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _fetchData() async {
|
||||
if (isLoading) return;
|
||||
setState(() => isLoading = true);
|
||||
|
@ -159,44 +143,6 @@ class _SxkjTzglListPageState extends State<SxkjTzglListPage> {
|
|||
);
|
||||
}
|
||||
|
||||
// 显示底部选择器
|
||||
Future<void> _showStepPicker() async {
|
||||
if (stepList.isEmpty) {
|
||||
ScaffoldMessenger.of(
|
||||
context,
|
||||
).showSnackBar(SnackBar(content: Text('正在加载步骤数据,请稍后...')));
|
||||
await _fetchSteps();
|
||||
if (stepList.isEmpty) {
|
||||
ScaffoldMessenger.of(
|
||||
context,
|
||||
).showSnackBar(SnackBar(content: Text('无法加载步骤数据')));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// 创建选项列表
|
||||
final options = stepList.map((e) => e['STEP_NAME'] as String).toList();
|
||||
|
||||
// 显示底部选择器
|
||||
final choice = await BottomPicker.show<String>(
|
||||
context,
|
||||
items: options,
|
||||
itemBuilder: (item) => Text(item, textAlign: TextAlign.center),
|
||||
initialIndex: sindex,
|
||||
);
|
||||
|
||||
if (choice != null) {
|
||||
// 找到选择的索引
|
||||
final newIndex = options.indexOf(choice);
|
||||
if (newIndex != -1) {
|
||||
setState(() {
|
||||
sindex = newIndex;
|
||||
});
|
||||
_search();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Widget _buildListContent() {
|
||||
if (isLoading && list.isEmpty) {
|
||||
// 初始加载时显示居中的加载指示器
|
||||
|
|
|
@ -23,7 +23,9 @@ class _WorkTabDhListState extends State<WorkTabDhList> {
|
|||
_getData();
|
||||
}
|
||||
Future<void> _getData() async {
|
||||
LoadingDialogHelper.show();
|
||||
final data = await ApiService.specialcheckWorkCount('hotwork');
|
||||
LoadingDialogHelper.hide();
|
||||
setState(() {
|
||||
final eight_work_count = data['count'] ?? {};
|
||||
buttonInfos = [
|
||||
|
|
|
@ -24,7 +24,9 @@ class _WorkTabDlListState extends State<WorkTabDlList> {
|
|||
_getData();
|
||||
}
|
||||
Future<void> _getData() async {
|
||||
LoadingDialogHelper.show();
|
||||
final data = await ApiService.specialcheckWorkCount('cutroad');
|
||||
LoadingDialogHelper.hide();
|
||||
setState(() {
|
||||
final eight_work_count = data['count'] ?? {};
|
||||
buttonInfos = [
|
||||
|
@ -35,7 +37,7 @@ class _WorkTabDlListState extends State<WorkTabDlList> {
|
|||
},
|
||||
{
|
||||
"icon": "assets/icon-apps/icon-yxkj-2.png",
|
||||
"title": "作业项目负责人\n意见",
|
||||
"title": "断路示意图\n负责人意见",
|
||||
"unreadCount": eight_work_count['PROJECT_MANAGER'] ?? '0',
|
||||
},
|
||||
{
|
||||
|
@ -109,7 +111,7 @@ class _WorkTabDlListState extends State<WorkTabDlList> {
|
|||
String title = '';
|
||||
switch (index) {
|
||||
case 0: title = '提交申请'; break;
|
||||
case 1: title = '作业项目负责人'; break;
|
||||
case 1: title = '断路示意图负责人'; break;
|
||||
case 2: title = '设置安全措施确认人'; break;
|
||||
case 3: title = '安全措施确认'; break;
|
||||
case 4: title = '监护人签字'; break;
|
||||
|
|
|
@ -24,7 +24,9 @@ class _WorkTabDtListState extends State<WorkTabDtList> {
|
|||
_getData();
|
||||
}
|
||||
Future<void> _getData() async {
|
||||
LoadingDialogHelper.show();
|
||||
final data = await ApiService.specialcheckWorkCount('breakground');
|
||||
LoadingDialogHelper.hide();
|
||||
setState(() {
|
||||
final eight_work_count = data['count'] ?? {};
|
||||
buttonInfos = [
|
||||
|
|
|
@ -24,7 +24,9 @@ class _WorkTabDzListState extends State<WorkTabDzList> {
|
|||
_getData();
|
||||
}
|
||||
Future<void> _getData() async {
|
||||
LoadingDialogHelper.show();
|
||||
final data = await ApiService.specialcheckWorkCount('hoisting');
|
||||
LoadingDialogHelper.hide();
|
||||
setState(() {
|
||||
final eight_work_count = data['count'] ?? {};
|
||||
buttonInfos = [
|
||||
|
|
|
@ -24,7 +24,9 @@ class _WorkTabGcListState extends State<WorkTabGcList> {
|
|||
_getData();
|
||||
}
|
||||
Future<void> _getData() async {
|
||||
LoadingDialogHelper.show();
|
||||
final data = await ApiService.specialcheckWorkCount('highwork');
|
||||
LoadingDialogHelper.hide();
|
||||
setState(() {
|
||||
final eight_work_count = data['count'] ?? {};
|
||||
buttonInfos = [
|
||||
|
|
|
@ -24,7 +24,9 @@ class _WorkTabLsydListState extends State<WorkTabLsydList> {
|
|||
_getData();
|
||||
}
|
||||
Future<void> _getData() async {
|
||||
LoadingDialogHelper.show();
|
||||
final data = await ApiService.specialcheckWorkCount('electricity');
|
||||
LoadingDialogHelper.hide();
|
||||
setState(() {
|
||||
final eight_work_count = data['count'] ?? {};
|
||||
buttonInfos = [
|
||||
|
|
|
@ -24,7 +24,9 @@ class _WorkTabMbcdListState extends State<WorkTabMbcdList> {
|
|||
_getData();
|
||||
}
|
||||
Future<void> _getData() async {
|
||||
LoadingDialogHelper.show();
|
||||
final data = await ApiService.specialcheckWorkCount('blindboard');
|
||||
LoadingDialogHelper.hide();
|
||||
setState(() {
|
||||
final eight_work_count = data['count'] ?? {};
|
||||
buttonInfos = [
|
||||
|
|
|
@ -27,7 +27,9 @@ class _WorkTabSxkjListState extends State<WorkTabSxkjList> {
|
|||
}
|
||||
|
||||
Future<void> _getData() async {
|
||||
LoadingDialogHelper.show();
|
||||
final data = await ApiService.specialcheckWorkCount('confinedspace');
|
||||
LoadingDialogHelper.hide();
|
||||
setState(() {
|
||||
final eight_work_count = data['count'] ?? {};
|
||||
topButtonInfos = [
|
||||
|
|
|
@ -16,7 +16,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
|
|||
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
||||
# In Windows, build-name is used as the major, minor, and patch parts
|
||||
# of the product and file versions while build-number is used as the build suffix.
|
||||
version: 2.1.2+5
|
||||
version: 2.1.2+6
|
||||
|
||||
environment:
|
||||
sdk: ^3.7.0
|
||||
|
|
Loading…
Reference in New Issue