flutter_integrated_whb/lib/pages/mine/mine_duty_management.dart

332 lines
9.9 KiB
Dart
Raw Normal View History

2025-07-16 08:38:10 +08:00
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:qhd_prevention/pages/my_appbar.dart';
import '../../http/ApiService.dart';
import '../../tools/tools.dart';
import 'mine_duty_application.dart';
import 'mine_duty_detail.dart';
class LeaveRecord {
final String applicant;
final String department;
final String position;
final DateTime startDate;
final DateTime endDate;
final String status;
final Color statusColor;
LeaveRecord({
required this.applicant,
required this.department,
required this.position,
required this.startDate,
required this.endDate,
required this.status,
required this.statusColor,
});
}
class MineDutyManagementPage extends StatefulWidget {
const MineDutyManagementPage({super.key});
@override
State<MineDutyManagementPage> createState() => _MineDutyManagementPageState();
}
class _MineDutyManagementPageState extends State<MineDutyManagementPage> {
int showCount=-1;
int currentPage=1;
Future<void> _onRefresh() async {
// 模拟网络请求
await Future.delayed(const Duration(seconds: 2));
// 刷新数据逻辑,如 fetchData()
setState(() {
// TODO: 更新数据源
});
}
@override
void initState() {
_getListData();
}
@override
Widget build(BuildContext context) {
// 模拟数据
final leaveRecords = [
LeaveRecord(
applicant: "王轩",
department: "测试部",
position: "测试员",
startDate: DateTime(2025, 7, 18),
endDate: DateTime(2025, 7, 18),
status: "无需审批",
statusColor: const Color(0xFF4CAF50),
),
LeaveRecord(
applicant: "王轩",
department: "测试部",
position: "测试员",
startDate: DateTime(2025, 7, 16),
endDate: DateTime(2025, 7, 16),
status: "无需审批",
statusColor: const Color(0xFF4CAF50),
),
LeaveRecord(
applicant: "李思",
department: "开发部",
position: "高级工程师",
startDate: DateTime(2025, 7, 20),
endDate: DateTime(2025, 7, 22),
status: "待审批",
statusColor: const Color(0xFFF57C00),
),
LeaveRecord(
applicant: "张伟",
department: "产品部",
position: "产品经理",
startDate: DateTime(2025, 7, 15),
endDate: DateTime(2025, 7, 17),
status: "已拒绝",
statusColor: const Color(0xFFF44336),
),
];
return Scaffold(
backgroundColor: const Color(0xFFF5F7FA),
appBar: MyAppbar(title: "离岗管理",actions: [
TextButton(
onPressed: () {
pushPage(MineDutyApplicationPage(), context);
},
child: Text("申请",style: TextStyle(color: Colors.white,fontSize: 16,fontWeight:FontWeight.bold),))
],),
body:
RefreshIndicator(
onRefresh: _onRefresh,
child:
// Column(
// children: [
// 顶部信息栏
// Container(
// padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12),
// color: const Color(0xFFE3F2FD),
// child: const Row(
// children: [
// Icon(Icons.info_outline, color: Color(0xFF1976D2)),
// SizedBox(width: 8),
// Text(
// "离岗记录显示最近30天内的申请记录",
// style: TextStyle(color: Color(0xFF1976D2), fontSize: 14),
// ),
// ],
// ),
// ),
// 记录列表
Expanded(
child: ListView.builder(
padding: const EdgeInsets.symmetric(vertical: 16),
itemCount: leaveRecords.length,
itemBuilder: (context, index) {
final record = leaveRecords[index];
return _buildRecordCard(record,context);
},
),
// ),
// ],
),
),
);
}
Widget _buildRecordCard(LeaveRecord record, BuildContext context) {
final dateFormat = DateFormat('yyyy-MM-dd');
final isSameDay = record.startDate == record.endDate;
final dateRange = isSameDay
? dateFormat.format(record.startDate)
: "${dateFormat.format(record.startDate)}${dateFormat.format(record.endDate)}";
return
// GestureDetector(
// onTap: () {
// pushPage(MineDutyDetailPage(), context);
// },
// child:
Container(
margin: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
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: Padding(
padding: const EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// 申请人信息
Row(
children: [
// Container(
// width: 40,
// height: 40,
// decoration: BoxDecoration(
// color: const Color(0xFFE3F2FD),
// shape: BoxShape.circle,
// ),
// child: const Icon(Icons.person, color: Color(0xFF1976D2)),
// ),
// const SizedBox(width: 12),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
"申请人:${record.applicant}",
style: const TextStyle(
fontSize: 16,
fontWeight: FontWeight.w600,
),
),
const SizedBox(height: 4),
Text(
"部门:${record.department} \n岗位:${record.position}",
style: TextStyle(
fontSize: 13,
color: Colors.grey[600],
),
),
],
),
const Spacer(),
Container(
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 6),
decoration: BoxDecoration(
color: record.statusColor.withOpacity(0.1),
borderRadius: BorderRadius.circular(20),
),
child: Text(
record.status,
style: TextStyle(
color: record.statusColor,
fontWeight: FontWeight.w500,
),
),
),
],
),
const SizedBox(height: 16),
// 离岗时间
Row(
children: [
const Icon(Icons.calendar_today, size: 18, color: Colors.grey),
const SizedBox(width: 8),
Text(
"离岗时间: $dateRange",
style: const TextStyle(color: Colors.grey),
),
],
),
const SizedBox(height: 8),
// 操作按钮
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
TextButton(
onPressed: () {
pushPage(MineDutyDetailPage(), context);
},
style: TextButton.styleFrom(
foregroundColor: const Color(0xFF1976D2),
),
child: const Text("查看详情"),
),
// const SizedBox(width: 16),
// if (record.status == "待审批")
// ElevatedButton(
// onPressed: () {},
// style: ElevatedButton.styleFrom(
// backgroundColor: const Color(0xFF1976D2),
// padding: const EdgeInsets.symmetric(horizontal: 20),
// ),
// child: const Text("审批", style: TextStyle(color: Colors.white)),
// )
],
),
],
),
),
// ),
);
}
Future<void> _getListData() async {
try {
final raw = await ApiService.getDutyManagement(showCount,currentPage);
// print(raw);
// setState(() {
// workInfos = [
// {
// "icon": "assets/icon-apps/jobico1.png",
// "index": 1,
// "detail": "待排查",
// "num": (hidCount['dpc'] ?? 0).toString(),
// },
// {
// "icon": "assets/icon-apps/jobico2.png",
// "index": 2,
// "detail": "待整改",
// "num": (hidCount['dzg'] ?? 0).toString(),
// },
// {
// "icon": "assets/icon-apps/jobico3.png",
// "index": 3,
// "detail": "已超期",
// "num": (hidCount['ycq'] ?? 0).toString(),
// },
// {
// "icon": "assets/icon-apps/jobico4.png",
// "index": 4,
// "detail": "待验收",
// "num": (hidCount['dys'] ?? 0).toString(),
// },
// {
// "icon": "assets/icon-apps/jobico5.png",
// "index": 5,
// "detail": "已验收",
// "num": (hidCount['yys'] ?? 0).toString(),
// },
// ];
//
// });
} catch (e) {
// 出错时可以 Toast 或者在页面上显示错误状态
print('加载首页数据失败:$e');
}
}
}