From f6ef117fe7ef550a934230b6aafb26121416f6af Mon Sep 17 00:00:00 2001 From: Daisy <> Date: Mon, 28 Aug 2023 10:14:14 +0800 Subject: [PATCH 1/2] =?UTF-8?q?1=EF=BC=8C=E5=AE=8C=E5=96=84=E5=BE=AA?= =?UTF-8?q?=E7=8E=AF=E9=80=BB=E8=BE=91=E5=A4=84=E7=90=86=202=EF=BC=8C?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=93=8D=E4=BD=9C=E8=AE=B0=E5=BD=95=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E6=8E=A5=E5=8F=A3API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../passwordKey_perpetual_page.dart | 86 ++++++++++++++++--- star_lock/lib/network/api.dart | 1 + 2 files changed, 74 insertions(+), 13 deletions(-) diff --git a/star_lock/lib/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKey_perpetual_page.dart b/star_lock/lib/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKey_perpetual_page.dart index 39b817be..429e90ac 100644 --- a/star_lock/lib/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKey_perpetual_page.dart +++ b/star_lock/lib/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKey_perpetual_page.dart @@ -2,6 +2,7 @@ import 'package:date_format/date_format.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_pickers/pickers.dart'; +import 'package:flutter_pickers/style/default_style.dart'; import 'package:flutter_pickers/time_picker/model/date_mode.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; @@ -27,11 +28,15 @@ class PasswordKeyPerpetualPage extends StatefulWidget { class _PasswordKeyPerpetualPageState extends State { final TextEditingController _controller = TextEditingController(); late bool _isSendSuccess; + late bool _isPermanent; late String _getPwdStr; String _selectEffectiveDate = ''; //生效时间 String _selectFailureDate = ''; //失效时间 late DateTime _effectiveDateTime; late DateTime _failureDateTime; + late String cyclicModeStr; + late String effectiveHourStr; + late String failureHourStr; @override Widget build(BuildContext context) { @@ -43,13 +48,21 @@ class _PasswordKeyPerpetualPageState extends State { super.initState(); _isSendSuccess = false; + _isPermanent = false; DateTime dateTime = DateTime.now(); _effectiveDateTime = dateTime; _failureDateTime = dateTime; - _selectEffectiveDate = formatDate( - dateTime, [yyyy, '-', mm, '-', dd, ' ', HH, ':', nn]); //默认为当前时间 - _selectFailureDate = formatDate( - dateTime, [yyyy, '-', mm, '-', dd, ' ', HH, ':', nn]); //默认为当前时间 + if (int.parse(widget.type) == 4) { + cyclicModeStr = '周末'; + + _selectEffectiveDate = formatDate(dateTime, [HH, ':', nn]); //默认为当前时间 + _selectFailureDate = formatDate(dateTime, [HH, ':', nn]); //默认为当前时间 + } else { + _selectEffectiveDate = formatDate( + dateTime, [yyyy, '-', mm, '-', dd, ' ', HH, ':', nn]); //默认为当前时间 + _selectFailureDate = formatDate( + dateTime, [yyyy, '-', mm, '-', dd, ' ', HH, ':', nn]); //默认为当前时间 + } } Widget indexChangeWidget() { @@ -103,6 +116,7 @@ class _PasswordKeyPerpetualPageState extends State { return Column( children: [ keyIfPerpetualWidget(), + _isPermanent == false ? keyTimeLimitWidget() : Container(), perpetualKeyWidget( TranslationLoader.lanKeys!.name!.tr, TranslationLoader.lanKeys!.pleaseNameYourPassword!.tr, @@ -221,7 +235,9 @@ class _PasswordKeyPerpetualPageState extends State { rightWidget: SizedBox(width: 60.w, height: 50.h, child: _switch()), action: () {}), - Container(height: 10.h), + _isPermanent == true + ? Container(height: 10.h) + : Container(height: 1.h), ], ), ); @@ -238,23 +254,68 @@ class _PasswordKeyPerpetualPageState extends State { rightTitle: "周末", isHaveLine: true, isHaveDirection: true, - action: () {}), + action: () { + List pickerDataList = [ + '周末', + '每日', + '工作日', + '星期一', + '星期二', + '星期三', + '星期四', + '星期五', + '星期六', + '星期日' + ]; + showPickerView(context, pickerDataList); + }), CommonItem( leftTitel: TranslationLoader.lanKeys!.effectiveTime!.tr, - rightTitle: "10:00", + rightTitle: _selectEffectiveDate, isHaveLine: true, isHaveDirection: true, - action: () {}), + action: () { + Pickers.showDatePicker(context, mode: DateMode.HM, + onConfirm: (p) { + setState(() { + _effectiveDateTime = DateTime.parse( + '${intToStr(p.hour!)}:${intToStr(p.minute!)}'); + _selectEffectiveDate = + formatDate(_effectiveDateTime, [HH, ':', nn]); + }); + }); + }), CommonItem( leftTitel: TranslationLoader.lanKeys!.failureTime!.tr, - rightTitle: "11:00", + rightTitle: _selectFailureDate, isHaveDirection: true, - action: () {}), + action: () { + Pickers.showDatePicker(context, mode: DateMode.HM, + onConfirm: (p) { + setState(() { + _failureDateTime = DateTime.parse( + '${intToStr(p.hour!)}:${intToStr(p.minute!)}'); + _selectFailureDate = + formatDate(_effectiveDateTime, [HH, ':', nn]); + }); + }); + }), ], ), ); } + //底部选择pickerView + showPickerView(BuildContext context, List dataList) { + Pickers.showSinglePicker(context, + data: dataList, + pickerStyle: DefaultPickerStyle(), onConfirm: (p, position) { + setState(() {}); + }, onChanged: (p, position) { + setState(() {}); + }); + } + Widget keyBottomWidget(String tipStr) { return Column( children: [ @@ -453,15 +514,14 @@ class _PasswordKeyPerpetualPageState extends State { } CupertinoSwitch _switch() { - bool _isOn = false; return CupertinoSwitch( activeColor: CupertinoColors.activeBlue, trackColor: CupertinoColors.systemGrey5, thumbColor: CupertinoColors.white, - value: _isOn, + value: _isPermanent, onChanged: (value) { setState(() { - _isOn = value; + _isPermanent = value; }); }, ); diff --git a/star_lock/lib/network/api.dart b/star_lock/lib/network/api.dart index 4ad0b6d9..b4f924c2 100644 --- a/star_lock/lib/network/api.dart +++ b/star_lock/lib/network/api.dart @@ -26,4 +26,5 @@ abstract class Api { final String passwordKeyListURL = '/keyboardPwd/listSendRecords'; //密码钥匙列表 final String passwordKeyResetURL = '/keyboardPwd/reset'; //密码钥匙重置 final String passwordKeyGetURL = '/keyboardPwd/get'; //获取密码 + final String lockRecordsListURL = '/lockRecords/list'; //操作记录列表 } From b98307f30096bb8204305ec09061bf9db26df5da Mon Sep 17 00:00:00 2001 From: Daisy <> Date: Mon, 28 Aug 2023 17:35:30 +0800 Subject: [PATCH 2/2] =?UTF-8?q?1=EF=BC=8C=E5=AE=8C=E6=88=90=E6=B8=85?= =?UTF-8?q?=E7=A9=BA=E6=93=8D=E4=BD=9C=E8=AE=B0=E5=BD=95=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E8=B0=83=E8=AF=95=202=EF=BC=8C=E5=AE=8C=E6=88=90=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E9=94=81=E5=88=86=E7=BB=84=E6=8E=A5=E5=8F=A3=E5=8F=8A?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E5=A4=84=E7=90=86=203=EF=BC=8C=E5=AE=8C?= =?UTF-8?q?=E6=88=90=E9=94=81=E5=88=86=E7=BB=84=E5=88=97=E8=A1=A8=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E8=B0=83=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../keyOperationRecordEntity.dart | 18 +- .../keyOperationRecord_page.dart | 2 +- .../massSendElectronicKey_page.dart | 1 - .../adminOpenLockPassword_page.dart | 34 +++- .../basicInformation_page.dart | 18 +- .../LockGroupListEntity.dart | 72 +++++++ .../lockSeletGrouping_page.dart | 141 ++++++++++--- .../lockDetail/lockDetail_page.dart | 21 +- .../lockOperatingRecord_page.dart | 186 +++++++++++------- star_lock/lib/network/api.dart | 4 +- star_lock/lib/network/api_provider.dart | 10 + star_lock/lib/network/api_provider_base.dart | 2 - star_lock/lib/network/api_repository.dart | 20 ++ 13 files changed, 398 insertions(+), 131 deletions(-) create mode 100644 star_lock/lib/main/lockDetail/lcokSet/basicInformation/lockSeletGrouping/LockGroupListEntity.dart diff --git a/star_lock/lib/main/lockDetail/electronicKey/electronicKeyDetail/keyOperationRecordEntity.dart b/star_lock/lib/main/lockDetail/electronicKey/electronicKeyDetail/keyOperationRecordEntity.dart index f1f43664..656dee06 100644 --- a/star_lock/lib/main/lockDetail/electronicKey/electronicKeyDetail/keyOperationRecordEntity.dart +++ b/star_lock/lib/main/lockDetail/electronicKey/electronicKeyDetail/keyOperationRecordEntity.dart @@ -90,12 +90,14 @@ class KeyRecordDataItem { recordId = json['recordId']; lockId = json['lockId']; recordType = json['recordType']; - recordTypeName = json['recordTypeName']; + json['recordTypeName'] != null + ? recordTypeName = json['recordTypeName'] + : ""; success = json['success']; - username = json['username']; - lockDate = json['lockDate']; + json['username'] != null ? username = json['username'] : ""; + json['lockDate'] != null ? lockDate = json['lockDate'] : ""; operateDate = json['operateDate']; - keyboardPwd = json['keyboardPwd']; + json['keyboardPwd'] != null ? keyboardPwd = json['keyboardPwd'] : ""; } Map toJson() { @@ -105,8 +107,12 @@ class KeyRecordDataItem { data['recordType'] = recordType; data['recordTypeName'] = recordTypeName; data['success'] = success; - data['username'] = username; - data['lockDate'] = lockDate; + if (data['username'] != null) { + data['username'] = username; + } + if (data['lockDate'] != null) { + data['lockDate'] = lockDate; + } data['operateDate'] = operateDate; data['keyboardPwd'] = keyboardPwd; return data; diff --git a/star_lock/lib/main/lockDetail/electronicKey/electronicKeyDetail/keyOperationRecord_page.dart b/star_lock/lib/main/lockDetail/electronicKey/electronicKeyDetail/keyOperationRecord_page.dart index 4874a62c..2b2d0d60 100644 --- a/star_lock/lib/main/lockDetail/electronicKey/electronicKeyDetail/keyOperationRecord_page.dart +++ b/star_lock/lib/main/lockDetail/electronicKey/electronicKeyDetail/keyOperationRecord_page.dart @@ -71,7 +71,7 @@ class _KeyOperationRecordPageState extends State { Widget _buildMainUI(List itemDataList) { return ListView.separated( - itemCount: 5, + itemCount: itemDataList.length, itemBuilder: (c, index) { KeyRecordDataItem dataItem = itemDataList[index]; int? operateDate = dataItem.operateDate; diff --git a/star_lock/lib/main/lockDetail/electronicKey/massSendElectronicKey/massSendElectronicKey_page.dart b/star_lock/lib/main/lockDetail/electronicKey/massSendElectronicKey/massSendElectronicKey_page.dart index 97657a9f..61cd1fdc 100644 --- a/star_lock/lib/main/lockDetail/electronicKey/massSendElectronicKey/massSendElectronicKey_page.dart +++ b/star_lock/lib/main/lockDetail/electronicKey/massSendElectronicKey/massSendElectronicKey_page.dart @@ -32,7 +32,6 @@ class _MassSendElectronicKeyPageState extends State { @override void initState() { - // TODO: implement initState super.initState(); } diff --git a/star_lock/lib/main/lockDetail/lcokSet/basicInformation/adminOpenLockPassword/adminOpenLockPassword_page.dart b/star_lock/lib/main/lockDetail/lcokSet/basicInformation/adminOpenLockPassword/adminOpenLockPassword_page.dart index 29c1e264..bc06ce26 100644 --- a/star_lock/lib/main/lockDetail/lcokSet/basicInformation/adminOpenLockPassword/adminOpenLockPassword_page.dart +++ b/star_lock/lib/main/lockDetail/lcokSet/basicInformation/adminOpenLockPassword/adminOpenLockPassword_page.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; +import 'package:star_lock/tools/showTFView.dart'; import '../../../../../app_settings/app_colors.dart'; import '../../../../../tools/commonItem.dart'; @@ -16,6 +17,8 @@ class AdminOpenLockPasswordPage extends StatefulWidget { } class _AdminOpenLockPasswordPageState extends State { + final TextEditingController _changePwdController = TextEditingController(); + @override Widget build(BuildContext context) { return Scaffold( @@ -28,10 +31,12 @@ class _AdminOpenLockPasswordPageState extends State { children: [ CommonItem( leftTitel: TranslationLoader.lanKeys!.password!.tr, - rightTitle: "189934", + rightTitle: "123456", isHaveLine: false, isHaveDirection: true, - action: () {}), + action: () { + showCupertinoAlertDialog(context); + }), Container( margin: EdgeInsets.all(30.w), child: Column( @@ -70,4 +75,29 @@ class _AdminOpenLockPasswordPageState extends State { ], )); } + + void showCupertinoAlertDialog( + BuildContext context, + ) { + showDialog( + context: context, + builder: (BuildContext context) { + return ShowTFView( + title: + "${TranslationLoader.lanKeys!.amend!.tr} ${TranslationLoader.lanKeys!.name!.tr}", + tipTitle: "请输入", + controller: _changePwdController, + sureClick: () { + //发送编辑钥匙名称请求 + if (_changePwdController.text.isNotEmpty) { + // modifyPwdRequest(); + } + }, + cancelClick: () { + Navigator.pop(context); + }, + ); + }, + ); + } } diff --git a/star_lock/lib/main/lockDetail/lcokSet/basicInformation/basicInformation/basicInformation_page.dart b/star_lock/lib/main/lockDetail/lcokSet/basicInformation/basicInformation/basicInformation_page.dart index e99d1d6f..56af0a4c 100644 --- a/star_lock/lib/main/lockDetail/lcokSet/basicInformation/basicInformation/basicInformation_page.dart +++ b/star_lock/lib/main/lockDetail/lcokSet/basicInformation/basicInformation/basicInformation_page.dart @@ -5,7 +5,6 @@ import 'package:get/get.dart'; import '../../../../../appRouters.dart'; import '../../../../../app_settings/app_colors.dart'; import '../../../../../tools/commonItem.dart'; -import '../../../../../tools/submitBtn.dart'; import '../../../../../tools/titleAppBar.dart'; import '../../../../../translations/trans_lib.dart'; @@ -17,6 +16,14 @@ class BasicInformationPage extends StatefulWidget { } class _BasicInformationPageState extends State { + late String _groupName = ""; + + @override + void initState() { + super.initState(); + _groupName = '未分组'; + } + @override Widget build(BuildContext context) { return Scaffold( @@ -71,12 +78,15 @@ class _BasicInformationPageState extends State { }), CommonItem( leftTitel: TranslationLoader.lanKeys!.lockGrouping!.tr, - rightTitle: "202307", + rightTitle: _groupName, isHaveLine: true, isHaveDirection: true, - action: () { - Navigator.pushNamed( + action: () async { + var result = await Navigator.pushNamed( context, Routers.lockSeletGroupingPage); + result as Map; + _groupName = result['groupName']; + setState(() {}); }), CommonItem( leftTitel: diff --git a/star_lock/lib/main/lockDetail/lcokSet/basicInformation/lockSeletGrouping/LockGroupListEntity.dart b/star_lock/lib/main/lockDetail/lcokSet/basicInformation/lockSeletGrouping/LockGroupListEntity.dart new file mode 100644 index 00000000..44ad0b92 --- /dev/null +++ b/star_lock/lib/main/lockDetail/lcokSet/basicInformation/lockSeletGrouping/LockGroupListEntity.dart @@ -0,0 +1,72 @@ +class LockGroupListEntity { + int? errorCode; + String? description; + String? errorMsg; + LockGroupData? data; + + LockGroupListEntity( + {this.errorCode, this.description, this.errorMsg, this.data}); + + LockGroupListEntity.fromJson(Map json) { + errorCode = json['errorCode']; + description = json['description']; + errorMsg = json['errorMsg']; + data = json['data'] != null ? LockGroupData.fromJson(json['data']) : null; + } + + Map toJson() { + final Map data = {}; + data['errorCode'] = errorCode; + data['description'] = description; + data['errorMsg'] = errorMsg; + if (this.data != null) { + data['data'] = this.data!.toJson(); + } + return data; + } +} + +class LockGroupData { + List? itemList; + + LockGroupData({this.itemList}); + + LockGroupData.fromJson(Map json) { + if (json['list'] != null) { + itemList = []; + json['list'].forEach((v) { + itemList!.add(LockGroupItem.fromJson(v)); + }); + } + } + + Map toJson() { + final Map data = {}; + if (itemList != null) { + data['list'] = itemList!.map((v) => v.toJson()).toList(); + } + return data; + } +} + +class LockGroupItem { + int? lockNum; + int? keyGroupId; + String? keyGroupName; + + LockGroupItem({this.lockNum, this.keyGroupId, this.keyGroupName}); + + LockGroupItem.fromJson(Map json) { + lockNum = json['lockNum']; + keyGroupId = json['keyGroupId']; + keyGroupName = json['keyGroupName']; + } + + Map toJson() { + final Map data = {}; + data['lockNum'] = lockNum; + data['keyGroupId'] = keyGroupId; + data['keyGroupName'] = keyGroupName; + return data; + } +} diff --git a/star_lock/lib/main/lockDetail/lcokSet/basicInformation/lockSeletGrouping/lockSeletGrouping_page.dart b/star_lock/lib/main/lockDetail/lcokSet/basicInformation/lockSeletGrouping/lockSeletGrouping_page.dart index 7fa3fe46..d78bf873 100644 --- a/star_lock/lib/main/lockDetail/lcokSet/basicInformation/lockSeletGrouping/lockSeletGrouping_page.dart +++ b/star_lock/lib/main/lockDetail/lcokSet/basicInformation/lockSeletGrouping/lockSeletGrouping_page.dart @@ -1,8 +1,12 @@ import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; +import 'package:star_lock/main/lockDetail/lcokSet/basicInformation/lockSeletGrouping/LockGroupListEntity.dart'; +import 'package:star_lock/network/api_repository.dart'; +import 'package:star_lock/tools/baseGetXController.dart'; +import 'package:star_lock/tools/showTFView.dart'; +import 'package:star_lock/tools/toast.dart'; -import '../../../../../appRouters.dart'; import '../../../../../app_settings/app_colors.dart'; import '../../../../../tools/commonItem.dart'; import '../../../../../tools/submitBtn.dart'; @@ -17,6 +21,9 @@ class LockSeletGroupingPage extends StatefulWidget { } class _LockSeletGroupingPageState extends State { + final TextEditingController _changeNameController = TextEditingController(); + final int _selectGroupIndex = -1; + @override Widget build(BuildContext context) { return Scaffold( @@ -25,46 +32,124 @@ class _LockSeletGroupingPageState extends State { barTitle: TranslationLoader.lanKeys!.selectGroup!.tr, haveBack: true, backgroundColor: AppColors.mainColor), - body: Column( - children: [ - Expanded(child: _buildMainUI()), - SubmitBtn( - btnName: TranslationLoader.lanKeys!.createNewGroup!.tr, - borderRadius: 20.w, - margin: EdgeInsets.only( - left: 30.w, right: 30.w, top: 30.w, bottom: 30.w), - padding: EdgeInsets.only(top: 25.w, bottom: 25.w), - onClick: () { - // Navigator.pushNamed(context, Routers.sendElectronicKeyManagePage); - }), - SizedBox( - height: 40.h, - ) - ], - ), + body: FutureBuilder>( + future: mockNetworkDataRequest(), + builder: (BuildContext context, + AsyncSnapshot> snapshot) { + //请求结束 + if (snapshot.connectionState == ConnectionState.done) { + if (snapshot.hasError) { + //请求失败 + return const Text('请求失败'); + } else { + //请求成功 + final List itemData = snapshot.data!; + + return Column( + children: [ + Expanded(child: _buildMainUI(context, itemData)), + SubmitBtn( + btnName: TranslationLoader.lanKeys!.createNewGroup!.tr, + borderRadius: 20.w, + margin: EdgeInsets.only( + left: 30.w, right: 30.w, top: 30.w, bottom: 30.w), + padding: EdgeInsets.only(top: 25.w, bottom: 25.w), + onClick: () { + showCupertinoAlertDialog(context); + Navigator.pop(context); + }), + SizedBox( + height: 40.h, + ) + ], + ); + } + } else { + //请求未结束 显示loading + return Container(); + } + }), ); } - Widget _buildMainUI() { + Widget _buildMainUI(BuildContext context, List itemList) { return ListView.builder( - itemCount: 2, + itemCount: itemList.length, itemBuilder: (c, index) { + LockGroupItem itemData = itemList[index]; return CommonItem( - leftTitel: "202307", + leftTitel: itemData.keyGroupName, rightTitle: "", allHeight: 70.h, isHaveLine: true, isHaveDirection: false, isHaveRightWidget: true, - rightWidget: Image( - image: const AssetImage("images/icon_item_checked.png"), - width: 30.w, - height: 30.w, - fit: BoxFit.contain, - ), + rightWidget: _selectGroupIndex == index + ? Image( + image: const AssetImage("images/icon_item_checked.png"), + width: 30.w, + height: 30.w, + fit: BoxFit.contain, + ) + : Container(), action: () { - // logic.changeLanguage(e); + Map resultMap = {}; + resultMap['groupName'] = itemData.keyGroupName; + Navigator.pop(context, resultMap); + + setState(() {}); }); }); } + + //创建锁分组请求 + Future addLockGroupRequest() async { + LockGroupListEntity entity = + await ApiRepository.to.addLockGroup(_changeNameController.text, '0'); + if (entity.errorCode!.codeIsSuccessful) { + Toast.show(msg: "创建成功"); + mockNetworkDataRequest(); + setState(() {}); + } + } + + //分组列表请求 + Future> mockNetworkDataRequest() async { + LockGroupListEntity entity = await ApiRepository.to.lockGroupList('1'); + if (entity.errorCode!.codeIsSuccessful) { + if (entity.data != null) { + return entity.data!.itemList!; + } else { + List dataList = []; + return dataList; + } + } else { + return []; + } + } + + void showCupertinoAlertDialog( + BuildContext context, + ) { + showDialog( + context: context, + builder: (BuildContext context) { + return ShowTFView( + title: + "${TranslationLoader.lanKeys!.amend!.tr} ${TranslationLoader.lanKeys!.name!.tr}", + tipTitle: "请输入", + controller: _changeNameController, + sureClick: () { + //发送编辑钥匙名称请求 + if (_changeNameController.text.isNotEmpty) { + addLockGroupRequest(); + } + }, + cancelClick: () { + Navigator.pop(context); + }, + ); + }, + ); + } } diff --git a/star_lock/lib/main/lockDetail/lockDetail/lockDetail_page.dart b/star_lock/lib/main/lockDetail/lockDetail/lockDetail_page.dart index 368942ae..5ef70ae1 100644 --- a/star_lock/lib/main/lockDetail/lockDetail/lockDetail_page.dart +++ b/star_lock/lib/main/lockDetail/lockDetail/lockDetail_page.dart @@ -4,8 +4,6 @@ import 'package:get/get.dart'; import '../../../appRouters.dart'; import '../../../app_settings/app_colors.dart'; -import '../../../blue/io_tool/io_manager.dart'; -import '../../../tools/storage.dart'; import '../../../tools/titleAppBar.dart'; import '../../../translations/trans_lib.dart'; import 'lockDetail_logic.dart'; @@ -23,7 +21,6 @@ class _LockDetailPageState extends State { @override Widget build(BuildContext context) { - return Scaffold( backgroundColor: Colors.white, appBar: TitleAppBar( @@ -78,15 +75,15 @@ class _LockDetailPageState extends State { children: [ Center( child: GestureDetector( - onTap: (){ - // logic.transferPermissionsAction(); - // logic.openDoorAction(); - // logic.editLockUserAction(); - logic.factoryDataResetAction(); - }, - child: Image.asset('images/main/icon_main_openLockBtn.png', - width: 268.w, height: 268.w), - )), + onTap: () { + // logic.transferPermissionsAction(); + // logic.openDoorAction(); + // logic.editLockUserAction(); + logic.factoryDataResetAction(); + }, + child: Image.asset('images/main/icon_main_openLockBtn.png', + width: 268.w, height: 268.w), + )), Align( alignment: const Alignment(0.6, 1), child: Image.asset( diff --git a/star_lock/lib/main/lockDetail/lockOperatingRecord/lockOperatingRecord_page.dart b/star_lock/lib/main/lockDetail/lockOperatingRecord/lockOperatingRecord_page.dart index ea7faba7..e5090853 100644 --- a/star_lock/lib/main/lockDetail/lockOperatingRecord/lockOperatingRecord_page.dart +++ b/star_lock/lib/main/lockDetail/lockOperatingRecord/lockOperatingRecord_page.dart @@ -1,6 +1,9 @@ import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; +import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyDetail/keyOperationRecordEntity.dart'; +import 'package:star_lock/network/api_repository.dart'; +import 'package:star_lock/tools/baseGetXController.dart'; import '../../../app_settings/app_colors.dart'; import '../../../tools/jh_pop_menus.dart'; @@ -35,12 +38,10 @@ class _LockOperatingRecordPageState extends State { JhPopMenus.showLinePop(context, clickCallback: (index, selText) { print('选中index: $index'); print('选中text: $selText'); - - if (selText == '添加朋友') { - // JhNavUtils.pushNamed(context, 'WxAddFriendPage'); - } - if (selText == '扫一扫') { - // _scan(); + if (index == 0) { + mockNetworkDataRequest(); + } else if (index == 1) { + clearOperationRecordRequest(); } }, listData: [ {'text': '读取记录'}, @@ -50,49 +51,78 @@ class _LockOperatingRecordPageState extends State { }, ), ], - - /* - actionsList: [ - TextButton( - child: const Text( - "操作", - style: TextStyle(color: Colors.white), - ), - onPressed: () { - JhPopMenus.showLinePop(context, clickCallback: (index, selText) { - print('选中index: $index'); - print('选中text: $selText'); - - if (selText == '添加朋友') { - // JhNavUtils.pushNamed(context, 'WxAddFriendPage'); - } - if (selText == '扫一扫') { - // _scan(); - } - }); - }, - ), - ], - */ - ), - body: Column( - children: [ - Container( - // crossAxisAlignment: CrossAxisAlignment.start, - padding: EdgeInsets.all(20.h), - child: Text( - TranslationLoader.lanKeys!.lockOperatingRecordTip!.tr, - textAlign: TextAlign.start, - style: TextStyle(fontSize: 20.sp), - ), - ), - _searchWidget(), - Expanded(child: _buildMainUI()), - ], ), + body: FutureBuilder>( + future: mockNetworkDataRequest(), + builder: (BuildContext context, + AsyncSnapshot> snapshot) { + //请求结束 + if (snapshot.connectionState == ConnectionState.done) { + if (snapshot.hasError) { + //请求失败 + return const Text('请求失败'); + } else { + //请求成功 + final List itemDataList = snapshot.data!; + + return Column( + children: [ + Container( + padding: EdgeInsets.all(20.h), + child: Text( + TranslationLoader.lanKeys!.lockOperatingRecordTip!.tr, + textAlign: TextAlign.start, + style: TextStyle(fontSize: 20.sp), + ), + ), + _searchWidget(), + SizedBox( + height: 10.h, + ), + Expanded(child: _buildMainUI(itemDataList)), + ], + ); + } + } else { + //请求未结束 显示loading + return Container(); + } + }), ); } + //请求操作记录列表 + Future> mockNetworkDataRequest() async { + KeyOperationRecordEntity entity = await ApiRepository.to + .lockRecordList('0', '63', '0', '28', '1', '1', '20', '0', '', '', ''); + if (entity.errorCode!.codeIsSuccessful) { + print("操作记录列表成功:${entity.data?.itemList}"); + } + final data = entity.data; + if (data != null) { + return data.itemList!; + } else { + List dataList = []; + return dataList; + } + } + + //清空操作记录 + Future> clearOperationRecordRequest() async { + KeyOperationRecordEntity entity = + await ApiRepository.to.clearOperationRecord('28'); + if (entity.errorCode!.codeIsSuccessful) { + print("操作记录列表成功:${entity.data?.itemList}"); + } + final data = entity.data; + if (data != null) { + return data.itemList!; + } else { + List dataList = []; + return dataList; + } + } + Widget _searchWidget() { return Container( height: 60.h, @@ -128,19 +158,29 @@ class _LockOperatingRecordPageState extends State { ); } - Widget _buildMainUI() { - return ListView.builder( - itemCount: 20, - itemBuilder: (c, index) { - if (index % 2 == 0) { - return _dateItem("2023-06-29"); - } else { - return _operatingRecordItem('images/controls_user.png', - "186823150237", "17:56:08用APP开锁", "", () { - // Navigator.pushNamed(context, Routers.electronicKeyDetailPage); - }); - } - }); + Widget _buildMainUI(List itemDataList) { + return ListView.separated( + itemCount: itemDataList.length, + itemBuilder: (c, index) { + KeyRecordDataItem dataItem = itemDataList[index]; + int? operateDate = dataItem.operateDate; + DateTime dateStr = DateTime.fromMillisecondsSinceEpoch(operateDate!); + String operateDateStr = + '${dateStr.toLocal().toString().substring(0, 16)} '; + + return _operatingRecordItem( + 'images/controls_user.png', + dataItem.username ?? "未知", + '$operateDateStr用${dataItem.recordTypeName}', + () {}); + }, + separatorBuilder: (BuildContext context, int index) { + return const Divider( + height: 1, + color: AppColors.greyLineColor, + ); + }, + ); } Widget _dateItem(String lockDate) { @@ -159,8 +199,8 @@ class _LockOperatingRecordPageState extends State { ); } - Widget _operatingRecordItem(String lockTypeIcon, String lockTypeTitle, - String beginTime, String endTime, Function() action) { + Widget _operatingRecordItem(String userAvatarStr, String userNameStr, + String unlockDescStr, Function() action) { return GestureDetector( onTap: action, child: Container( @@ -173,7 +213,7 @@ class _LockOperatingRecordPageState extends State { child: Row( children: [ Image.asset( - lockTypeIcon, + userAvatarStr, width: 50.w, height: 50.w, ), @@ -187,25 +227,23 @@ class _LockOperatingRecordPageState extends State { Row( children: [ Text( - lockTypeTitle, + userNameStr, style: TextStyle( fontSize: 24.sp, color: AppColors.blackColor), ), ], ), SizedBox(height: 10.h), - Container( - child: Row( - mainAxisAlignment: MainAxisAlignment.start, - children: [ - Text( - "17:56:08用APP开锁", - style: TextStyle( - fontSize: 20.sp, - color: AppColors.darkGrayTextColor), - ), - ], - ), + Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Text( + unlockDescStr, + style: TextStyle( + fontSize: 20.sp, + color: AppColors.darkGrayTextColor), + ), + ], ), SizedBox(width: 20.h), ], diff --git a/star_lock/lib/network/api.dart b/star_lock/lib/network/api.dart index 7c40b1ff..33992818 100644 --- a/star_lock/lib/network/api.dart +++ b/star_lock/lib/network/api.dart @@ -29,5 +29,7 @@ abstract class Api { final String getLockInfoURL = '/lock/syncDataPage'; // 获取锁信息 final String passwordKeyGetURL = '/keyboardPwd/get'; //获取密码 - final String lockRecordsListURL = '/lockRecords/list'; //操作记录列表 + final String clearOperationRecordURL = '/lockRecords/clear'; //清空操作记录 + final String addlockGroupURL = '/keyGroup/add'; //创建锁分组 + final String lockGroupListURL = '/authorizedAdmin/listGroup'; //锁分组列表 } diff --git a/star_lock/lib/network/api_provider.dart b/star_lock/lib/network/api_provider.dart index fa91300f..647355be 100644 --- a/star_lock/lib/network/api_provider.dart +++ b/star_lock/lib/network/api_provider.dart @@ -303,6 +303,16 @@ class ApiProvider extends BaseProvider { 'startDate': startDate, 'timezoneRawOffSet': timezoneRawOffSet })); + + Future clearOperationRecord(String lockId) => + post(clearOperationRecordURL.toUrl, jsonEncode({'lockId': lockId})); + + Future addLockGroup(String groupName, String operatorUid) => post( + addlockGroupURL.toUrl, + jsonEncode({'groupName': groupName, 'operatorUid': operatorUid})); + + Future lockGroupList(String type) => + post(lockGroupListURL.toUrl, jsonEncode({'type': type})); } extension ExtensionString on String { diff --git a/star_lock/lib/network/api_provider_base.dart b/star_lock/lib/network/api_provider_base.dart index 439ca7b0..02d8ac41 100644 --- a/star_lock/lib/network/api_provider_base.dart +++ b/star_lock/lib/network/api_provider_base.dart @@ -1,5 +1,3 @@ -import 'dart:convert'; - import 'package:flutter_easyloading/flutter_easyloading.dart'; import '../../tools/toast.dart'; diff --git a/star_lock/lib/network/api_repository.dart b/star_lock/lib/network/api_repository.dart index df4bb462..2b5b5191 100644 --- a/star_lock/lib/network/api_repository.dart +++ b/star_lock/lib/network/api_repository.dart @@ -2,6 +2,7 @@ import 'package:get/get.dart'; import 'package:star_lock/login/seletCountryRegion/common/countryRegionEntity.dart'; import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyDetail/keyOperationRecordEntity.dart'; import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyList/entity/ElectronicKeyListEntity.dart'; +import 'package:star_lock/main/lockDetail/lcokSet/basicInformation/lockSeletGrouping/LockGroupListEntity.dart'; import 'package:star_lock/main/lockDetail/passwordKey/passwordKeyList/passwordKeyListEntity.dart'; import 'package:star_lock/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKeyEntity.dart'; import '../common/safetyVerification/entity/CheckSafetyVerificationEntity.dart'; @@ -280,4 +281,23 @@ class ApiRepository { timezoneRawOffSet); return PasswordKeyEntity.fromJson(res.body); } + + //清空操作记录 + Future clearOperationRecord(String lockId) async { + final res = await apiProvider.clearOperationRecord(lockId); + return KeyOperationRecordEntity.fromJson(res.body); + } + + //创建锁分组 + Future addLockGroup( + String groupName, String operatorUid) async { + final res = await apiProvider.addLockGroup(groupName, operatorUid); + return LockGroupListEntity.fromJson(res.body); + } + + //锁分组列表 + Future lockGroupList(String type) async { + final res = await apiProvider.lockGroupList(type); + return LockGroupListEntity.fromJson(res.body); + } }