flutter_integrated_whb/lib/pages/mine/mine_duty_application.dart

264 lines
7.2 KiB
Dart

import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:qhd_prevention/pages/my_appbar.dart';
class MineDutyApplicationPage extends StatefulWidget {
const MineDutyApplicationPage({super.key});
@override
State<MineDutyApplicationPage> createState() => _MineDutyApplicationPage();
}
class _MineDutyApplicationPage extends State<MineDutyApplicationPage> {
DateTime? _startDate;
DateTime? _endDate;
final TextEditingController _reasonController = TextEditingController();
final String _applicant = "王轩";
Future<void> _selectDate(BuildContext context, bool isStartDate) async {
final DateTime? picked = await showDatePicker(
context: context,
initialDate: DateTime.now(),
firstDate: DateTime(2000),
lastDate: DateTime(2100),
builder: (BuildContext context, Widget? child) {
return Theme(
data: ThemeData.light().copyWith(
colorScheme: const ColorScheme.light(
primary: Color(0xFF1976D2),
// buttonTheme: ButtonThemeData(
// textTheme: ButtonTextTheme.primary,
// ),
),
),
child: child!,
);
},
);
if (picked != null) {
setState(() {
if (isStartDate) {
_startDate = picked;
// 如果结束日期早于开始日期,自动更新结束日期
if (_endDate == null || _endDate!.isBefore(picked)) {
_endDate = picked;
}
} else {
// 确保结束日期不早于开始日期
if (_startDate != null && picked.isBefore(_startDate!)) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('结束日期不能早于开始日期'))
);
} else {
_endDate = picked;
}
}
});
}
}
void _submitApplication() {
if (_startDate == null || _endDate == null) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('请选择离岗时间'))
);
return;
}
if (_reasonController.text.isEmpty) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('请输入离岗原因'))
);
return;
}
// 提交申请逻辑
showDialog(
context: context,
builder: (context) => AlertDialog(
title: const Text('申请提交成功'),
content: const Text('您的离岗申请已成功提交,请等待审批'),
actions: [
TextButton(
onPressed: () {
Navigator.pop(context); // 关闭对话框
Navigator.pop(context); // 返回上一页
},
child: const Text("确定"),
)
],
),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: const Color(0xFFF5F7FA),
appBar:MyAppbar(title: "离岗申请"),
body: SingleChildScrollView(
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 20),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// 离岗开始时间
_buildDateField(
label: "离岗开始时间",
date: _startDate,
onTap: () => _selectDate(context, true),
),
const SizedBox(height: 16),
// 离岗结束时间
_buildDateField(
label: "离岗结束时间",
date: _endDate,
onTap: () => _selectDate(context, false),
),
const SizedBox(height: 24),
// 离岗原因标题
const Text(
"离岗原因",
style: TextStyle(fontSize: 16, fontWeight: FontWeight.w500),
),
const SizedBox(height: 8),
// 原因输入框
Container(
padding: const EdgeInsets.all(16),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(12),
boxShadow: [
BoxShadow(
color: Colors.grey.withOpacity(0.1),
spreadRadius: 1,
blurRadius: 6,
offset: const Offset(0, 2),
),
],
),
child: TextField(
controller: _reasonController,
maxLines: 5,
decoration: const InputDecoration(
hintText: "请输入离岗原因",
hintStyle: TextStyle(color: Color(0xFF9E9E9E)),
border: InputBorder.none,
),
),
),
const SizedBox(height: 24),
// 申请人信息
_buildInfoRow("申请人", _applicant),
const SizedBox(height: 40),
// 提交按钮
SizedBox(
width: double.infinity,
child: TextButton(
onPressed: _submitApplication,
style: ElevatedButton.styleFrom(
backgroundColor: const Color(0xFF1976D2),
padding: const EdgeInsets.symmetric(vertical: 16),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
),
),
child: Text(
"提交",
style: TextStyle(fontSize: 16, color: Colors.white),
),
),
),
],
),
),
);
}
Widget _buildDateField({
required String label,
required DateTime? date,
required VoidCallback onTap,
}) {
return GestureDetector(
onTap: onTap,
child: Container(
padding: const EdgeInsets.all(16),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(12),
boxShadow: [
BoxShadow(
color: Colors.grey.withOpacity(0.1),
spreadRadius: 1,
blurRadius: 6,
offset: const Offset(0, 2),
),
],
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
label,
style: const TextStyle(fontSize: 16),
),
Text(
date != null ? DateFormat('yyyy-MM-dd').format(date) : "请选择日期",
style: TextStyle(
fontSize: 16,
color: date != null ? Colors.black : const Color(0xFF9E9E9E),
),
),
],
),
),
);
}
Widget _buildInfoRow(String title, String value) {
return Container(
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(12),
boxShadow: [
BoxShadow(
color: Colors.grey.withOpacity(0.1),
spreadRadius: 1,
blurRadius: 6,
offset: const Offset(0, 2),
),
],
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
title,
style: const TextStyle(fontSize: 16),
),
Text(
value,
style: const TextStyle(fontSize: 16, fontWeight: FontWeight.w500),
),
],
),
);
}
}