确实文件

main
hs 2025-08-08 11:08:25 +08:00
parent 980bbe19c9
commit 698ccad423
1 changed files with 309 additions and 0 deletions

View File

@ -0,0 +1,309 @@
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/pages/home/tap/tabList/special_wrok/dl_work/CutroadFormBaseWork.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 CutroadZyrDetail extends StatefulWidget {
const CutroadZyrDetail({
super.key,
required this.CUTROAD_ID,
required this.flow,
});
final String CUTROAD_ID;
final String flow;
@override
State<CutroadZyrDetail> createState() => _CutroadZyrDetailState();
}
class _CutroadZyrDetailState extends State<CutroadZyrDetail> {
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['CUTROAD_ID'] = widget.CUTROAD_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(
'cutroad',
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('cutroad', widget.CUTROAD_ID);
setState(() {
pd = data['pd'];
_getSigns(pd['CUTROAD_ID'] ?? '');
_getMeasures(pd['CUTROAD_ID'] ?? '');
});
}
Future<void> _getMeasures(String homework_id) async {
final data = await ApiService.listSignFinishMeasures('cutroad',
homework_id.length > 0 ? homework_id : widget.CUTROAD_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('cutroad',
homework_id.length > 0 ? homework_id : widget.CUTROAD_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: [
CutroadFormBaseWork(
pd: pd,
measuresList: measuresList,
signs: signs,
baseImgPath: ApiService.baseImgPath,
isEditable: false,
onChooseLevel: () {},
onAnalyzeTap: () {},
),
ItemListWidget.itemContainer(
Column(
children: [
Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
ListItemFactory.headerTitle('作业人'),
CustomButton(
text: '新增手写签字',
height: 36,
backgroundColor: Colors.green,
onPressed: () {
_sign();
},
),
],
),
if (signImages.isNotEmpty) _signListWidget(),
],
)
],
),
),
_bottomButtons(),
],
),
),
),
);
}
}