From 8725be3487e716bb861a50741a6325382a3c4ad5 Mon Sep 17 00:00:00 2001 From: Daisy <> Date: Wed, 19 Jun 2024 11:02:21 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=93=8D=E4=BD=9C=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E2=80=94=E5=AF=BC=E5=87=BA=E8=AE=B0=E5=BD=95Dialog?= =?UTF-8?q?=E7=9B=B8=E5=85=B3UI=E5=8F=8A=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- images/lan/lan_en.json | 7 +- images/lan/lan_keys.json | 7 +- images/lan/lan_zh.json | 7 +- .../batchExportLog/batchExportLog_logic.dart | 0 .../batchExportLog/batchExportLog_page.dart | 0 .../batchExportLog/batchExportLog_state.dart | 0 .../doorLockLog/doorLockLog_page.dart | 15 +- .../doorLockLog/doorLockLog_state.dart | 58 ++--- .../exportRecordDialog_logic.dart | 0 .../exportRecordDialog_page.dart | 204 ++++++++++++++++++ .../exportRecordDialog_state.dart | 0 11 files changed, 266 insertions(+), 32 deletions(-) create mode 100644 lib/main/lockDetail/doorLockLog/batchExportLog/batchExportLog_logic.dart create mode 100644 lib/main/lockDetail/doorLockLog/batchExportLog/batchExportLog_page.dart create mode 100644 lib/main/lockDetail/doorLockLog/batchExportLog/batchExportLog_state.dart create mode 100644 lib/main/lockDetail/doorLockLog/exportRecordDialog/exportRecordDialog_logic.dart create mode 100644 lib/main/lockDetail/doorLockLog/exportRecordDialog/exportRecordDialog_page.dart create mode 100644 lib/main/lockDetail/doorLockLog/exportRecordDialog/exportRecordDialog_state.dart diff --git a/images/lan/lan_en.json b/images/lan/lan_en.json index cb39e17a..f823750b 100755 --- a/images/lan/lan_en.json +++ b/images/lan/lan_en.json @@ -906,5 +906,10 @@ "转移成功": "Transfer success", "该已锁被删除": "The locked is deleted", "授权管理员只能查看和管理自己下发的钥匙、密码等权限": "Authorized administrators can only view and manage the keys, passwords, etc. they issued", - "添加授权管理员": "Add authorized administrator" + "添加授权管理员": "Add authorized administrator", + "导出记录":"Export record", + "选择时间段":"Select time period", + "导出":"Export", + "批量导出":"Batch export", + "读取记录":"Read record" } diff --git a/images/lan/lan_keys.json b/images/lan/lan_keys.json index 49d763d5..83ecce10 100755 --- a/images/lan/lan_keys.json +++ b/images/lan/lan_keys.json @@ -938,5 +938,10 @@ "转移成功": "转移成功", "该已锁被删除": "该已锁被删除", "授权管理员只能查看和管理自己下发的钥匙、密码等权限": "授权管理员只能查看和管理自己下发的钥匙、密码等权限", - "添加授权管理员": "添加授权管理员" + "添加授权管理员": "添加授权管理员", + "导出记录":"导出记录", + "选择时间段":"选择时间段", + "导出":"导出", + "批量导出":"批量导出", + "读取记录":"读取记录" } diff --git a/images/lan/lan_zh.json b/images/lan/lan_zh.json index 91ab9c85..0ea53f8d 100755 --- a/images/lan/lan_zh.json +++ b/images/lan/lan_zh.json @@ -903,5 +903,10 @@ "转移成功": "转移成功", "该已锁被删除": "该已锁被删除", "授权管理员只能查看和管理自己下发的钥匙、密码等权限": "授权管理员只能查看和管理自己下发的钥匙、密码等权限", - "添加授权管理员": "添加授权管理员" + "添加授权管理员": "添加授权管理员", + "导出记录":"导出记录", + "选择时间段":"选择时间段", + "导出":"导出", + "批量导出":"批量导出", + "读取记录":"读取记录" } diff --git a/lib/main/lockDetail/doorLockLog/batchExportLog/batchExportLog_logic.dart b/lib/main/lockDetail/doorLockLog/batchExportLog/batchExportLog_logic.dart new file mode 100644 index 00000000..e69de29b diff --git a/lib/main/lockDetail/doorLockLog/batchExportLog/batchExportLog_page.dart b/lib/main/lockDetail/doorLockLog/batchExportLog/batchExportLog_page.dart new file mode 100644 index 00000000..e69de29b diff --git a/lib/main/lockDetail/doorLockLog/batchExportLog/batchExportLog_state.dart b/lib/main/lockDetail/doorLockLog/batchExportLog/batchExportLog_state.dart new file mode 100644 index 00000000..e69de29b diff --git a/lib/main/lockDetail/doorLockLog/doorLockLog_page.dart b/lib/main/lockDetail/doorLockLog/doorLockLog_page.dart index 662a4248..92244573 100755 --- a/lib/main/lockDetail/doorLockLog/doorLockLog_page.dart +++ b/lib/main/lockDetail/doorLockLog/doorLockLog_page.dart @@ -6,6 +6,7 @@ import 'package:star_lock/appRouters.dart'; import 'package:star_lock/main/lockDetail/doorLockLog/doorLockLog_entity.dart'; import 'package:star_lock/main/lockDetail/doorLockLog/doorLockLog_logic.dart'; import 'package:star_lock/main/lockDetail/doorLockLog/doorLockLog_state.dart'; +import 'package:star_lock/main/lockDetail/doorLockLog/exportRecordDialog/exportRecordDialog_page.dart'; import 'package:star_lock/tools/EasyRefreshTool.dart'; import 'package:star_lock/tools/advancedCalendar/src/widget.dart'; import 'package:star_lock/tools/commonDataManage.dart'; @@ -13,6 +14,7 @@ import 'package:star_lock/tools/menuItem/xsDropDownWidget.dart'; import 'package:star_lock/tools/noData.dart'; import 'package:star_lock/tools/showCupertinoAlertView.dart'; import 'package:star_lock/tools/showTipView.dart'; +import 'package:star_lock/tools/submitBtn.dart'; import 'package:timelines/timelines.dart'; import '../../../app_settings/app_colors.dart'; @@ -53,7 +55,7 @@ class _DoorLockLogPageState extends State with RouteAware { ShowTipView().showSureAlertDialog( '1.锁没有联网,密码、IC卡、指纹等开门记录无法实时上传,可以点击右上角按钮,然后读取记录。\n2.只能保留一定时间内的记录,如果您需要保留历史记录,可以点击右上角按钮,然后导出记录', tipTitle: '看不到操作记录,可能原因有', - sureStr: '我知道了'); + sureStr: '我知道了'.tr); }, )), Visibility( @@ -131,7 +133,16 @@ class _DoorLockLogPageState extends State with RouteAware { } break; case '导出记录': - {} + { + showDialog( + context: context, + builder: (BuildContext context) { + return ExportRecordDialog( + onExport: () {}, + ); + }, + ); + } break; } } diff --git a/lib/main/lockDetail/doorLockLog/doorLockLog_state.dart b/lib/main/lockDetail/doorLockLog/doorLockLog_state.dart index 5cfeda59..9baea876 100755 --- a/lib/main/lockDetail/doorLockLog/doorLockLog_state.dart +++ b/lib/main/lockDetail/doorLockLog/doorLockLog_state.dart @@ -7,59 +7,63 @@ import 'package:star_lock/tools/menuItem/dropDownItem.dart'; import '../../lockMian/entity/lockListInfo_entity.dart'; class DoorLockLogState { - final lockLogEntity = DoorLockLogEntity().obs; - final keyInfos = LockListInfoItemEntity().obs; - final lockLogItemList = [].obs; - final calendarControllerToday = AdvancedCalendarController.today(); - final calendarControllerCustom = AdvancedCalendarController.today(); - final events = [ + // 当前选择的日期 + + DoorLockLogState() { + keyInfos.value = Get.arguments['keyInfo']; + } + final Rx lockLogEntity = DoorLockLogEntity().obs; + final Rx keyInfos = LockListInfoItemEntity().obs; + final RxList lockLogItemList = + [].obs; + final AdvancedCalendarController calendarControllerToday = + AdvancedCalendarController.today(); + final AdvancedCalendarController calendarControllerCustom = + AdvancedCalendarController.today(); + final List events = [ DateTime.now(), DateTime(2024, 10, 10), ]; - final startDate = + final RxInt startDate = DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().day) .millisecondsSinceEpoch .obs; - final endDate = (DateTime( - DateTime.now().year, DateTime.now().month, DateTime.now().day + 1) - .subtract(const Duration(milliseconds: 1))) + final RxInt endDate = DateTime( + DateTime.now().year, DateTime.now().month, DateTime.now().day + 1) + .subtract(const Duration(milliseconds: 1)) .millisecondsSinceEpoch .obs; - var dropdownTitle = '全部事件'.tr.obs; - var dropdownValue = XSConstantMacro.lockEventTypeAll.obs; + RxString dropdownTitle = '全部事件'.tr.obs; + RxInt dropdownValue = XSConstantMacro.lockEventTypeAll.obs; - List getDropDownItemList = [ + List getDropDownItemList = [ DropDownItem( - itemTitle: "全部事件".tr, + itemTitle: '全部事件'.tr, itemValue: XSConstantMacro.lockEventTypeAll.toString(), isCheked: false), DropDownItem( - itemTitle: "开锁事件".tr, + itemTitle: '开锁事件'.tr, itemValue: XSConstantMacro.lockEventTypeOpenDoor.toString(), isCheked: false), DropDownItem( - itemTitle: "异常事件".tr, + itemTitle: '异常事件'.tr, itemValue: XSConstantMacro.lockEventTypeAbnormal.toString(), isCheked: false), DropDownItem( - itemTitle: "门铃事件".tr, + itemTitle: '门铃事件'.tr, itemValue: XSConstantMacro.lockEventTypeDoorbell.toString(), isCheked: false), DropDownItem( - itemTitle: "视频事件".tr, + itemTitle: '视频事件'.tr, itemValue: XSConstantMacro.lockEventTypeVideo.toString(), isCheked: false), ]; - var ifCurrentScreen = true.obs; // 是否是当前界面,用于判断是否需要针对当前界面进行展示 - var operateDate = 0; // 按日期查询消息记录的时间戳 - var ifHaveNext = false; // 页码 - var logCountPage = 10; // 蓝牙记录一页多少个 - var currentSelectDate = DateTime.now().obs; // 当前选择的日期 - - DoorLockLogState() { - keyInfos.value = Get.arguments["keyInfo"]; - } + RxBool ifCurrentScreen = true.obs; // 是否是当前界面,用于判断是否需要针对当前界面进行展示 + int operateDate = 0; // 按日期查询消息记录的时间戳 + bool ifHaveNext = false; // 页码 + int logCountPage = 10; // 蓝牙记录一页多少个 + Rx currentSelectDate = DateTime.now().obs; } diff --git a/lib/main/lockDetail/doorLockLog/exportRecordDialog/exportRecordDialog_logic.dart b/lib/main/lockDetail/doorLockLog/exportRecordDialog/exportRecordDialog_logic.dart new file mode 100644 index 00000000..e69de29b diff --git a/lib/main/lockDetail/doorLockLog/exportRecordDialog/exportRecordDialog_page.dart b/lib/main/lockDetail/doorLockLog/exportRecordDialog/exportRecordDialog_page.dart new file mode 100644 index 00000000..615c954f --- /dev/null +++ b/lib/main/lockDetail/doorLockLog/exportRecordDialog/exportRecordDialog_page.dart @@ -0,0 +1,204 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; +import 'package:intl/intl.dart'; +import 'package:star_lock/app_settings/app_colors.dart'; +import 'package:star_lock/tools/pickers/pickers.dart'; +import 'package:star_lock/tools/pickers/time_picker/model/date_mode.dart'; +import 'package:star_lock/tools/pickers/time_picker/model/pduration.dart'; +import 'package:star_lock/tools/showTipView.dart'; +import 'package:star_lock/tools/submitBtn.dart'; + +class ExportRecordDialog extends StatelessWidget { + const ExportRecordDialog({required this.onExport, Key? key}) + : super(key: key); + final VoidCallback onExport; + + @override + Widget build(BuildContext context) { + return GestureDetector( + onTap: () { + Navigator.of(context).pop(); + }, + child: Container( + color: Colors.transparent, + child: GestureDetector( + onTap: () {}, + child: Center( + child: Padding( + padding: EdgeInsets.symmetric(horizontal: 60.w), + child: _DerivedRecordWidget(onExport: onExport), + ), + ), + ), + ), + ); + } +} + +class _DerivedRecordWidget extends StatefulWidget { + const _DerivedRecordWidget({required this.onExport, Key? key}) + : super(key: key); + final VoidCallback onExport; + + @override + __DerivedRecordWidgetState createState() => __DerivedRecordWidgetState(); +} + +class __DerivedRecordWidgetState extends State<_DerivedRecordWidget> { + DateTime? startDate; + DateTime? endDate; + + @override + Widget build(BuildContext context) { + return Center( + child: IntrinsicHeight( + child: Container( + padding: EdgeInsets.symmetric(horizontal: 16.w, vertical: 20.h), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(16.w), + ), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + '导出记录'.tr, + style: TextStyle(fontSize: 22.sp), + ), + SizedBox(height: 16.h), + Text( + '选择时间段'.tr, + style: TextStyle(fontSize: 24.sp, fontWeight: FontWeight.bold), + ), + SizedBox(height: 26.h), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + _buildDateContainer( + startDate != null + ? DateFormat('yyyy-MM-dd').format(startDate!) + : DateFormat('yyyy-MM-dd').format(DateTime.now()), + _showStartDatePicker), + Text( + '--', + style: TextStyle(fontSize: 24.sp), + ), + _buildDateContainer( + endDate != null + ? DateFormat('yyyy-MM-dd').format(endDate!) + : DateFormat('yyyy-MM-dd').format(DateTime.now()), + _showEndDatePicker), + ], + ), + SizedBox(height: 26.h), + Divider( + height: 1.sp, + color: AppColors.greyLineColor, + ), + SizedBox(height: 26.h), + SubmitBtn( + btnName: '导出'.tr, + onClick: _handleExport, + ), + Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + TextButton( + onPressed: () { + // 批量导出的处理逻辑 + }, + child: Text( + '批量导出'.tr, + style: TextStyle( + fontSize: 22.sp, + color: AppColors.mainColor, + ), + ), + ), + ], + ), + ], + ), + ), + ), + ); + } + + Widget _buildDateContainer(String date, VoidCallback onPressed) { + return GestureDetector( + onTap: onPressed, + child: Container( + width: 200.w, + height: 60.h, + decoration: BoxDecoration( + border: Border.all( + color: AppColors.greyLineColor, + width: 1.w, + ), + borderRadius: BorderRadius.circular(8.w), + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + date, + style: TextStyle(fontSize: 24.sp), + ), + Icon( + Icons.arrow_drop_down, + size: 30.w, + ), + ], + ), + ), + ); + } + + void _showStartDatePicker() { + final PDuration selectDate = PDuration.parse(startDate ?? DateTime.now()); + Pickers.showDatePicker( + context, + selectDate: selectDate, + mode: DateMode.YMD, + onConfirm: (PDuration p) { + setState(() { + startDate = DateTime(p.year!, p.month!, p.day!); + }); + }, + ); + } + + void _showEndDatePicker() { + final PDuration selectDate = PDuration.parse(endDate ?? DateTime.now()); + Pickers.showDatePicker( + context, + selectDate: selectDate, + mode: DateMode.YMD, + onConfirm: (PDuration p) { + setState(() { + endDate = DateTime(p.year!, p.month!, p.day!); + }); + }, + ); + } + + void _handleExport() { + if (startDate == null || endDate == null) { + ShowTipView().showSureAlertDialog( + '请选择开始和结束日期'.tr, + tipTitle: '提示'.tr, + sureStr: '我知道了'.tr, + ); + return; + } + + // 调用导出接口的逻辑示例 + + // 调用导出成功后的回调 + widget.onExport(); + + // 关闭弹窗 + Navigator.of(context).pop(); + } +} diff --git a/lib/main/lockDetail/doorLockLog/exportRecordDialog/exportRecordDialog_state.dart b/lib/main/lockDetail/doorLockLog/exportRecordDialog/exportRecordDialog_state.dart new file mode 100644 index 00000000..e69de29b