This commit is contained in:
魏少阳 2023-08-18 16:25:47 +08:00
commit 1a659b5579
15 changed files with 600 additions and 155 deletions

View File

@ -1,6 +1,7 @@
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/common/safetyVerification/safetyVerification_binding.dart'; import 'package:star_lock/common/safetyVerification/safetyVerification_binding.dart';
import 'package:star_lock/login/register/starLock_register_binding.dart'; import 'package:star_lock/login/register/starLock_register_binding.dart';
import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyList/entity/ElectronicKeyListEntity.dart';
import 'package:star_lock/mine/minePersonInfo/minePersonInfoEmail/minePersonInfoEmail_page.dart'; import 'package:star_lock/mine/minePersonInfo/minePersonInfoEmail/minePersonInfoEmail_page.dart';
import 'package:star_lock/mine/mineSet/authorizedAdministrator/addAuthorizedAdministrator_page.dart'; import 'package:star_lock/mine/mineSet/authorizedAdministrator/addAuthorizedAdministrator_page.dart';
import 'package:star_lock/mine/mineSet/lockGroup/lockGroupList_page.dart'; import 'package:star_lock/mine/mineSet/lockGroup/lockGroupList_page.dart';
@ -246,26 +247,32 @@ abstract class Routers {
'/ValueAddedServicesListEmailTemplatePage'; // - '/ValueAddedServicesListEmailTemplatePage'; // -
static const valueAddedServicesAddEmailTemplatePage = static const valueAddedServicesAddEmailTemplatePage =
'/ValueAddedServicesAddEmailTemplatePage'; // - '/ValueAddedServicesAddEmailTemplatePage'; // -
static const valueAddedServicesBuyAndUseRecordManagePage = '/ValueAddedServicesBuyAndUseRecordManagePage'; // -使 static const valueAddedServicesBuyAndUseRecordManagePage =
'/ValueAddedServicesBuyAndUseRecordManagePage'; // -使
static const lockScreenPage = '/LockScreenPage'; // - static const lockScreenPage = '/LockScreenPage'; // -
static const aPPUnlockNeedMobileNetworkingLockPage = '/APPUnlockNeedMobileNetworkingLockPage'; // -app开锁时需手机连网的锁 static const aPPUnlockNeedMobileNetworkingLockPage =
static const hideInvalidUnlockPermissionsPage = '/HideInvalidUnlockPermissionsPage'; // - '/APPUnlockNeedMobileNetworkingLockPage'; // -app开锁时需手机连网的锁
static const hideInvalidUnlockPermissionsPage =
'/HideInvalidUnlockPermissionsPage'; // -
static const lockUserManageLisPage = '/LockUserManageLisPage'; //- static const lockUserManageLisPage = '/LockUserManageLisPage'; //-
static const authorizedAdministratorListPage = '/AuthorizedAdministratorListPage'; //- static const authorizedAdministratorListPage =
'/AuthorizedAdministratorListPage'; //-
static const lockGroupListPage = '/LockGroupListPage'; //- static const lockGroupListPage = '/LockGroupListPage'; //-
static const lockItemListPage = '/LockItemListPage'; //- static const lockItemListPage = '/LockItemListPage'; //-
static const transferSmartLockPage = '/transferSmartLockPage'; // static const transferSmartLockPage = '/transferSmartLockPage'; //
static const recipientInformationPage = '/recipientInformationPage'; // static const recipientInformationPage = '/recipientInformationPage'; //
static const selectBranchPage = '/SelectBranchPage'; // static const selectBranchPage = '/SelectBranchPage'; //
static const selectGetewayListPage = '/selectGetewayListPage'; // static const selectGetewayListPage = '/selectGetewayListPage'; //
static const addAuthorizedAdministratorPage = '/addAuthorizedAdministratorPage'; // static const addAuthorizedAdministratorPage =
'/addAuthorizedAdministratorPage'; //
static const ownedKeyListPage = '/ownedKeyListPage'; // static const ownedKeyListPage = '/ownedKeyListPage'; //
static const starLockLoginPage = '/StarLockLoginPage'; // static const starLockLoginPage = '/StarLockLoginPage'; //
static const starLockRegisterPage = '/StarLockRegisterPage'; // static const starLockRegisterPage = '/StarLockRegisterPage'; //
static const starLockForgetPasswordPage = '/StarLockForgetPasswordPage'; // static const starLockForgetPasswordPage =
'/StarLockForgetPasswordPage'; //
static const seletCountryRegionPage = '/SeletCountryRegionPage'; // static const seletCountryRegionPage = '/SeletCountryRegionPage'; //
static const safetyVerificationPage = '/SafetyVerificationPage'; // static const safetyVerificationPage = '/SafetyVerificationPage'; //
@ -395,9 +402,9 @@ abstract class AppRouters {
page: () => const StarLockLoginPage(), page: () => const StarLockLoginPage(),
), ),
GetPage( GetPage(
name: Routers.starLockRegisterPage, name: Routers.starLockRegisterPage,
page: () => const StarLockRegisterPage(), binding:StarLockRegisterBinding() page: () => const StarLockRegisterPage(),
), binding: StarLockRegisterBinding()),
GetPage( GetPage(
name: Routers.starLockForgetPasswordPage, name: Routers.starLockForgetPasswordPage,
page: () => const StarLockForgetPasswordPage(), page: () => const StarLockForgetPasswordPage(),
@ -672,52 +679,46 @@ abstract class AppRouters {
), ),
GetPage( GetPage(
name: Routers.authorizedAdministratorListPage, name: Routers.authorizedAdministratorListPage,
page: () => const AuthorizedAdministratorListPage() page: () => const AuthorizedAdministratorListPage()),
),
GetPage( GetPage(
name: Routers.lockUserManageLisPage, name: Routers.lockUserManageLisPage,
page: () => const LockUserManageListListPage() page: () => const LockUserManageListListPage()),
),
GetPage( GetPage(
name: Routers.lockGroupListPage, page: () => const LockGroupListPage() name: Routers.lockGroupListPage, page: () => const LockGroupListPage()),
),
GetPage( GetPage(
name: Routers.lockItemListPage, page: () => const LockItemListPage() name: Routers.lockItemListPage, page: () => const LockItemListPage()),
),
GetPage( GetPage(
name: Routers.transferSmartLockPage, name: Routers.transferSmartLockPage,
page: () => const TransferSmartLockPage() page: () => const TransferSmartLockPage()),
),
GetPage( GetPage(
name: Routers.recipientInformationPage, name: Routers.recipientInformationPage,
page: () => const RecipientInformationPage() page: () => const RecipientInformationPage()),
),
GetPage( GetPage(
name: Routers.selectBranchPage, page: () => const SelectBranchPage() name: Routers.selectBranchPage, page: () => const SelectBranchPage()),
),
GetPage( GetPage(
name: Routers.selectGetewayListPage, name: Routers.selectGetewayListPage,
page: () => const SelectGetewayListPage() page: () => const SelectGetewayListPage()),
),
GetPage( GetPage(
name: Routers.minePersonInfoEditEmailPage, name: Routers.minePersonInfoEditEmailPage,
page: () => const MinePersonInfoEditEmailPage() page: () => const MinePersonInfoEditEmailPage()),
),
GetPage( GetPage(
name: Routers.addAuthorizedAdministratorPage, name: Routers.addAuthorizedAdministratorPage,
page: () => const AddAuthorizedAdministratorPage() page: () => const AddAuthorizedAdministratorPage()),
),
GetPage( GetPage(
name: Routers.safetyVerificationPage, name: Routers.safetyVerificationPage,
page: () => const SafetyVerificationPage(), page: () => const SafetyVerificationPage(),
binding: SafetyVerificationBinding(), binding: SafetyVerificationBinding(),
), ),
GetPage( GetPage(
name: Routers.ownedKeyListPage, page: () => const OwnedKeyListPage() name: Routers.ownedKeyListPage, page: () => const OwnedKeyListPage()),
), GetPage(
GetPage(name: Routers.keyOperationRecordPage, page: () => const KeyOperationRecordPage()), name: Routers.keyOperationRecordPage,
GetPage(name: Routers.getDeviceListPage, page: () => const GetDeviceListPage()), page: () => const KeyOperationRecordPage()),
GetPage(
name: Routers.getDeviceListPage, page: () => const GetDeviceListPage()),
GetPage(name: Routers.getNameListPage, page: () => const GetNameListPage()), GetPage(name: Routers.getNameListPage, page: () => const GetNameListPage()),
GetPage(name: Routers.authorityManagementPage, page: () => const AuthorityManagementPage()), GetPage(
name: Routers.authorityManagementPage,
page: () => const AuthorityManagementPage()),
]; ];
} }

View File

@ -10,7 +10,6 @@ import 'io_sender.dart';
import 'io_type.dart'; import 'io_type.dart';
class GetPublicKeyCommand extends SenderProtocol { class GetPublicKeyCommand extends SenderProtocol {
String? lockID; String? lockID;
GetPublicKeyCommand({ GetPublicKeyCommand({
this.lockID, this.lockID,
@ -22,9 +21,9 @@ class GetPublicKeyCommand extends SenderProtocol {
// //
int type = commandType!.typeValue; int type = commandType!.typeValue;
double typeDouble = type/256; double typeDouble = type / 256;
int type1 = typeDouble.toInt(); int type1 = typeDouble.toInt();
int type2 = type%256; int type2 = type % 256;
data.add(type1); data.add(type1);
data.add(type2); data.add(type2);
// print("type:$type"); // print("type:$type");
@ -41,7 +40,7 @@ class GetPublicKeyCommand extends SenderProtocol {
} }
class GetPublicKeyReply extends Reply { class GetPublicKeyReply extends Reply {
GetPublicKeyReply.parseData(CommandType commandType, List<int> dataDetail) GetPublicKeyReply.parseData(CommandType commandType, List<int> dataDetail)
: super.parseData(commandType, dataDetail) { : super.parseData(commandType, dataDetail) {
status = dataDetail[2]; status = dataDetail[2];
data = dataDetail; data = dataDetail;

View File

@ -2,6 +2,7 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyList/entity/ElectronicKeyListEntity.dart';
import 'package:star_lock/tools/jh_pop_menus.dart'; import 'package:star_lock/tools/jh_pop_menus.dart';
import '../../../../../appRouters.dart'; import '../../../../../appRouters.dart';
@ -25,6 +26,13 @@ class _ElectronicKeyDetailPageState extends State<ElectronicKeyDetailPage> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
ElectronicKeyListItem itemData = ElectronicKeyListItem();
dynamic obj = ModalRoute.of(context)?.settings.arguments;
if (obj != null && (obj["itemData"] != null)) {
itemData = obj["itemData"];
}
return Scaffold( return Scaffold(
resizeToAvoidBottomInset: false, resizeToAvoidBottomInset: false,
backgroundColor: AppColors.mainBackgroundColor, backgroundColor: AppColors.mainBackgroundColor,
@ -55,7 +63,7 @@ class _ElectronicKeyDetailPageState extends State<ElectronicKeyDetailPage> {
children: [ children: [
CommonItem( CommonItem(
leftTitel: TranslationLoader.lanKeys!.name!.tr, leftTitel: TranslationLoader.lanKeys!.name!.tr,
rightTitle: "", rightTitle: itemData.keyName,
isHaveDirection: true, isHaveDirection: true,
isHaveLine: true, isHaveLine: true,
action: () { action: () {
@ -64,7 +72,7 @@ class _ElectronicKeyDetailPageState extends State<ElectronicKeyDetailPage> {
CommonItem( CommonItem(
leftTitel: TranslationLoader.lanKeys!.effectiveTime!.tr, leftTitel: TranslationLoader.lanKeys!.effectiveTime!.tr,
allHeight: 90.h, allHeight: 90.h,
rightTitle: "2020.06.20 11:49\n2020.06.21 11:49", rightTitle: getUseDateStr(itemData),
isHaveDirection: true, isHaveDirection: true,
action: () { action: () {
Navigator.pushNamed( Navigator.pushNamed(
@ -73,24 +81,27 @@ class _ElectronicKeyDetailPageState extends State<ElectronicKeyDetailPage> {
Container(height: 10.h), Container(height: 10.h),
CommonItem( CommonItem(
leftTitel: TranslationLoader.lanKeys!.receiver!.tr, leftTitel: TranslationLoader.lanKeys!.receiver!.tr,
rightTitle: "786612630@qq.com", rightTitle: itemData.username,
action: () {}), action: () {}),
const SizedBox(height: 1), const SizedBox(height: 1),
CommonItem( CommonItem(
leftTitel: TranslationLoader.lanKeys!.sender!.tr, leftTitel: TranslationLoader.lanKeys!.sender!.tr,
rightTitle: "15080825640", rightTitle: itemData.senderUsername,
action: () {}), action: () {}),
const SizedBox(height: 1), const SizedBox(height: 1),
CommonItem( CommonItem(
leftTitel: TranslationLoader.lanKeys!.senderTime!.tr, leftTitel: TranslationLoader.lanKeys!.senderTime!.tr,
rightTitle: "2020.06.21 11:49", rightTitle: itemData.date.toString(),
action: () {}), action: () {}),
Container(height: 10.h), Container(height: 10.h),
CommonItem( CommonItem(
leftTitel: TranslationLoader.lanKeys!.realNameAuthentication!.tr, leftTitel: TranslationLoader.lanKeys!.realNameAuthentication!.tr,
rightTitle: "", rightTitle: "",
isHaveRightWidget: true, isHaveRightWidget: true,
rightWidget: SizedBox(width: 60.w, child: _switch()), rightWidget: SizedBox(
width: 60.w,
child:
_switch(itemData.faceAuthentication == 1 ? true : false)),
action: () {}), action: () {}),
Container(height: 10.h), Container(height: 10.h),
CommonItem( CommonItem(
@ -115,6 +126,33 @@ class _ElectronicKeyDetailPageState extends State<ElectronicKeyDetailPage> {
); );
} }
//使
String getUseDateStr(ElectronicKeyListItem indexEntity) {
String useDateStr = '';
if (indexEntity.keyType == 1) {
//
DateTime startDateStr =
DateTime.fromMillisecondsSinceEpoch(indexEntity.startDate!);
DateTime endDateStr =
DateTime.fromMillisecondsSinceEpoch(indexEntity.endDate!);
useDateStr =
'${startDateStr.toLocal().toString().substring(0, 16)}\n${endDateStr.toLocal().toString().substring(0, 16)}';
} else if (indexEntity.keyType == 2) {
//
DateTime dateStr = DateTime.fromMillisecondsSinceEpoch(indexEntity.date!);
useDateStr = '${dateStr.toLocal().toString()} 永久';
} else if (indexEntity.keyType == 3) {
//
DateTime dateStr = DateTime.fromMillisecondsSinceEpoch(indexEntity.date!);
useDateStr = '${dateStr.toLocal().toString()} 单次';
} else if (indexEntity.keyType == 4) {
//
useDateStr = '循环';
}
return useDateStr;
}
Widget commonItem(String leftTitle, String rightTitle, Widget commonItem(String leftTitle, String rightTitle,
{bool isHaveDirection = false, {bool isHaveDirection = false,
bool isHaveLine = false, bool isHaveLine = false,
@ -178,16 +216,15 @@ class _ElectronicKeyDetailPageState extends State<ElectronicKeyDetailPage> {
); );
} }
CupertinoSwitch _switch() { CupertinoSwitch _switch(isOn) {
bool _isOn = false;
return CupertinoSwitch( return CupertinoSwitch(
activeColor: CupertinoColors.activeBlue, activeColor: CupertinoColors.activeBlue,
trackColor: CupertinoColors.systemGrey5, trackColor: CupertinoColors.systemGrey5,
thumbColor: CupertinoColors.white, thumbColor: CupertinoColors.white,
value: _isOn, value: isOn,
onChanged: (value) { onChanged: (value) {
setState(() { setState(() {
_isOn = value; isOn = value;
}); });
}, },
); );

View File

@ -0,0 +1,114 @@
class KeyOperationRecordEntity {
int? errorCode;
String? description;
String? errorMsg;
KeyOperationRecordData? data;
KeyOperationRecordEntity(
{this.errorCode, this.description, this.errorMsg, this.data});
KeyOperationRecordEntity.fromJson(Map<String, dynamic> json) {
errorCode = json['errorCode'];
description = json['description'];
errorMsg = json['errorMsg'];
data = json['data'] != null
? KeyOperationRecordData.fromJson(json['data'])
: null;
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['errorCode'] = errorCode;
data['description'] = description;
data['errorMsg'] = errorMsg;
if (this.data != null) {
data['data'] = this.data!.toJson();
}
return data;
}
}
class KeyOperationRecordData {
List<KeyRecordDataItem>? itemList;
int? pageNo;
int? pageSize;
int? pages;
int? total;
KeyOperationRecordData(
{this.itemList, this.pageNo, this.pageSize, this.pages, this.total});
KeyOperationRecordData.fromJson(Map<String, dynamic> json) {
if (json['list'] != null) {
itemList = <KeyRecordDataItem>[];
json['list'].forEach((v) {
itemList!.add(KeyRecordDataItem.fromJson(v));
});
}
pageNo = json['pageNo'];
pageSize = json['pageSize'];
pages = json['pages'];
total = json['total'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
if (itemList != null) {
data['list'] = itemList!.map((v) => v.toJson()).toList();
}
data['pageNo'] = pageNo;
data['pageSize'] = pageSize;
data['pages'] = pages;
data['total'] = total;
return data;
}
}
class KeyRecordDataItem {
int? recordId;
int? lockId;
int? recordType;
String? recordTypeName;
int? success;
String? username;
String? lockDate;
int? operateDate;
String? keyboardPwd;
KeyRecordDataItem(
{this.recordId,
this.lockId,
this.recordType,
this.recordTypeName,
this.success,
this.username,
this.lockDate,
this.operateDate,
this.keyboardPwd});
KeyRecordDataItem.fromJson(Map<String, dynamic> json) {
recordId = json['recordId'];
lockId = json['lockId'];
recordType = json['recordType'];
recordTypeName = json['recordTypeName'];
success = json['success'];
username = json['username'];
lockDate = json['lockDate'];
operateDate = json['operateDate'];
keyboardPwd = json['keyboardPwd'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['recordId'] = recordId;
data['lockId'] = lockId;
data['recordType'] = recordType;
data['recordTypeName'] = recordTypeName;
data['success'] = success;
data['username'] = username;
data['lockDate'] = lockDate;
data['operateDate'] = operateDate;
data['keyboardPwd'] = keyboardPwd;
return data;
}
}

View File

@ -1,6 +1,10 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart'; import 'package:get/get.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/network/api_repository.dart';
import 'package:star_lock/tools/baseGetXController.dart';
import '../../../../appRouters.dart'; import '../../../../appRouters.dart';
import '../../../../app_settings/app_colors.dart'; import '../../../../app_settings/app_colors.dart';
@ -25,14 +29,48 @@ class _KeyOperationRecordPageState extends State<KeyOperationRecordPage> {
haveBack: true, haveBack: true,
backgroundColor: AppColors.mainColor, backgroundColor: AppColors.mainColor,
), ),
body: Column( body: FutureBuilder<List<KeyRecordDataItem>>(
children: [ // future: mockNetworkDataRequest(),
Expanded(child: _buildMainUI()), builder: (BuildContext context,
], AsyncSnapshot<List<KeyRecordDataItem>> snapshot) {
), //
if (snapshot.connectionState == ConnectionState.done) {
if (snapshot.hasError) {
//
return const Text('请求失败');
} else {
//
final List<KeyRecordDataItem> itemData = snapshot.data!;
return Column(
children: [
Expanded(child: _buildMainUI()),
],
);
}
} else {
// loading
return Container();
}
}),
); );
} }
//
Future<List<KeyRecordDataItem>?> mockNetworkDataRequest() async {
KeyOperationRecordEntity entity = (await ApiRepository.to
.lockRecordList('0', '63', '0', '28', '1', '1', '20', '0', '', '', ''));
if (entity.errorCode!.codeIsSuccessful) {
print("操作记录列表成功:${entity.data?.itemList}");
}
if (entity.data != null) {
return entity.data!.itemList;
} else {
List<KeyRecordDataItem> dataList = [];
return dataList;
}
}
Widget _buildMainUI() { Widget _buildMainUI() {
return ListView.separated( return ListView.separated(
itemCount: 5, itemCount: 5,

View File

@ -6,6 +6,7 @@ import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyList/electr
import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyList/entity/ElectronicKeyListEntity.dart'; import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyList/entity/ElectronicKeyListEntity.dart';
import 'package:star_lock/network/api_repository.dart'; import 'package:star_lock/network/api_repository.dart';
import 'package:star_lock/tools/baseGetXController.dart'; import 'package:star_lock/tools/baseGetXController.dart';
import 'package:star_lock/tools/toast.dart';
import '../../../../appRouters.dart'; import '../../../../appRouters.dart';
import '../../../../app_settings/app_colors.dart'; import '../../../../app_settings/app_colors.dart';
@ -24,7 +25,7 @@ class _ElectronicKeyListPageState extends State<ElectronicKeyListPage> {
final logic = Get.put(ElectronicKeyListLogic()); final logic = Get.put(ElectronicKeyListLogic());
// //
Future<List<ElectronicKeyListItem>> mockNetworkData() async { Future<List<ElectronicKeyListItem>> mockNetworkDataRequest() async {
ElectronicKeyListEntity entity = await ApiRepository.to ElectronicKeyListEntity entity = await ApiRepository.to
.electronicKeyList('0', '63', '0', '28', '1', '1', '20', '0'); .electronicKeyList('0', '63', '0', '28', '1', '1', '20', '0');
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
@ -38,6 +39,18 @@ class _ElectronicKeyListPageState extends State<ElectronicKeyListPage> {
} }
} }
//
Future<void> resetElectronicKeyListRequest() async {
ElectronicKeyListEntity entity =
await ApiRepository.to.resetElectronicKey('28', '0');
if (entity.errorCode!.codeIsSuccessful) {
print("重置电子钥匙成功啦啦啦啦啦");
Toast.show(msg: "重置成功");
mockNetworkDataRequest();
setState(() {});
}
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
@ -52,12 +65,14 @@ class _ElectronicKeyListPageState extends State<ElectronicKeyListPage> {
TranslationLoader.lanKeys!.reset!.tr, TranslationLoader.lanKeys!.reset!.tr,
style: TextStyle(color: Colors.white, fontSize: 24.sp), style: TextStyle(color: Colors.white, fontSize: 24.sp),
), ),
onPressed: () {}, onPressed: () {
resetElectronicKeyListRequest();
},
), ),
], ],
), ),
body: FutureBuilder<List<ElectronicKeyListItem>>( body: FutureBuilder<List<ElectronicKeyListItem>>(
future: mockNetworkData(), future: mockNetworkDataRequest(),
builder: (BuildContext context, builder: (BuildContext context,
AsyncSnapshot<List<ElectronicKeyListItem>> snapshot) { AsyncSnapshot<List<ElectronicKeyListItem>> snapshot) {
// //
@ -155,8 +170,9 @@ class _ElectronicKeyListPageState extends State<ElectronicKeyListPage> {
isAdminKey = false; isAdminKey = false;
} }
return _electronicKeyItem('images/controls_user.png', return _electronicKeyItem('images/controls_user.png',
indexEntity.senderUsername!, useDateStr, keyStatus, isAdminKey, () { indexEntity.keyName!, useDateStr, keyStatus, isAdminKey, () {
Navigator.pushNamed(context, Routers.electronicKeyDetailPage); Navigator.pushNamed(context, Routers.electronicKeyDetailPage,
arguments: {"itemData": indexEntity});
}); });
}, },
separatorBuilder: (BuildContext context, int index) { separatorBuilder: (BuildContext context, int index) {

View File

@ -86,7 +86,7 @@ class ElectronicKeyListItem {
int? date; int? date;
int? remoteEnable; int? remoteEnable;
int? appUnlockMustOnline; int? appUnlockMustOnline;
List<int>? weekDays; List? weekDays;
ElectronicKeyListItem( ElectronicKeyListItem(
{this.keyId, {this.keyId,

View File

@ -6,30 +6,62 @@ import 'package:star_lock/tools/baseGetXController.dart';
class SendElectronicKeyLogic extends BaseGetXController { class SendElectronicKeyLogic extends BaseGetXController {
final SendElectronicKeyState state = SendElectronicKeyState(); final SendElectronicKeyState state = SendElectronicKeyState();
// final stateMyLogic = Get.put(SendElectronicKeyLogic()).state; final stateMyLogic = Get.put(SendElectronicKeyLogic()).state;
void sendElectronicKey() async { void sendElectronicKey() async {
var entity = await ApiRepository.to.sendElectronicKey( // String getFailureDateTime = '0';
'0', // String getEffectiveDateTime = '0';
'0', // String getKeyType = (int.parse(state.keyType) + 1).toString();
'0',
'0', // if (state.keyType == '1') {
'2', // getFailureDateTime = DateTime.fromMillisecondsSinceEpoch(
'2', // int.parse(state.failureDate.value) * 1000)
'2', // .toString()
'0', // .substring(0, 19);
'1', // getEffectiveDateTime = DateTime.fromMillisecondsSinceEpoch(
'0', // int.parse(state.effectiveDate.value) * 1000)
'0', // .toString()
'小吴副号', // .substring(0, 19);
'19128333512', // }
'0', // var entity = await ApiRepository.to.sendElectronicKey(
'0', // '0',
'0'); // '0',
if (entity.errorCode!.codeIsSuccessful) { // '1',
print('发送电子钥匙成功'); // getFailureDateTime,
Get.back(); // state.isRealName == true ? '1' : '2',
} // '2',
// state.isRemoteUnlock == true ? '1' : '2',
// state.keyNameController.text,
// '1',
// getKeyType,
// '28',
// '小吴副号',
// emailOrPhoneController.text,
// '0',
// getEffectiveDateTime, []);
// if (entity.errorCode!.codeIsSuccessful) {
// // print('发送电子钥匙成功');
// }
// var entity = await ApiRepository.to.sendElectronicKey(
// '0',
// '0',
// '1',
// state.failureDate,
// state.isRealName == true ? '1' : '2',
// '2',
// state.isRemoteUnlock == true ? '1' : '2',
// state.emailOrPhoneController.text,
// '1',
// '0',
// '28',
// '小吴副号',
// '18682150237',
// '0',
// '0', []);
// if (entity.errorCode!.codeIsSuccessful) {
// print('发送电子钥匙成功');
// Get.back();
// }
} }
// void checkNext(TextEditingController controller) { // void checkNext(TextEditingController controller) {

View File

@ -1,10 +1,15 @@
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_pickers/pickers.dart';
import 'package:flutter_pickers/time_picker/model/date_mode.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/app_settings/app_colors.dart'; import 'package:star_lock/app_settings/app_colors.dart';
import 'package:flutter_native_contact_picker/flutter_native_contact_picker.dart'; import 'package:flutter_native_contact_picker/flutter_native_contact_picker.dart';
import 'package:star_lock/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/sendElectronicKey_logic.dart'; import 'package:star_lock/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/sendElectronicKey_logic.dart';
import 'package:star_lock/network/api_repository.dart';
import 'package:star_lock/tools/baseGetXController.dart';
import '../../../../../appRouters.dart'; import '../../../../../appRouters.dart';
import '../../../../../tools/commonItem.dart'; import '../../../../../tools/commonItem.dart';
@ -24,11 +29,29 @@ class _SendElectronicKeyPageState extends State<SendElectronicKeyPage> {
final FlutterContactPicker _contactPicker = FlutterContactPicker(); final FlutterContactPicker _contactPicker = FlutterContactPicker();
late Contact _contact; late Contact _contact;
final logic = Get.put(SendElectronicKeyLogic()); // final logic = Get.put(SendElectronicKeyLogic());
// final state = Get.find<SendElectronicKeyLogic>().state; // final state = Get.find<SendElectronicKeyLogic>().state;
bool _isRemoteUnlock = false; // bool _isRemoteUnlock = false; //
bool _isAuthentication = false; // bool _isAuthentication = false; //
var _selectEffectiveDate = ''; //
var _selectFailureDate = ''; //
TextEditingController emailOrPhoneController =
TextEditingController(); ///
TextEditingController keyNameController = TextEditingController(); //
late bool _isSendSuccess;
@override
void initState() {
super.initState();
DateTime dateTime = DateTime.now();
_selectEffectiveDate =
'${dateTime.year}-${dateTime.month}-${dateTime.day} ${dateTime.hour}:${dateTime.minute}'; //
_selectFailureDate =
'${dateTime.year}-${dateTime.month}-${dateTime.day} ${dateTime.hour}:${dateTime.minute}'; //
_isSendSuccess = false;
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -42,53 +65,60 @@ class _SendElectronicKeyPageState extends State<SendElectronicKeyPage> {
case 0: case 0:
{ {
// //
return sendElectronicKeySucceed(); return _isSendSuccess
// return Column( ? sendElectronicKeySucceed()
// children: [ : Column(
// keyInfoWidget(), children: [
// keyTimeWidget(), keyInfoWidget(),
// remoteUnlockingWidget(), keyTimeWidget(),
// keyRealNameWidget(), remoteUnlockingWidget(),
// keyBottomWidget() keyRealNameWidget(),
// ], keyBottomWidget()
// ); ],
);
} }
case 1: case 1:
{ {
// //
return Column( return _isSendSuccess
children: [ ? sendElectronicKeySucceed()
keyInfoWidget(), : Column(
remoteUnlockingWidget(), children: [
keyRealNameWidget(), keyInfoWidget(),
keyBottomWidget() remoteUnlockingWidget(),
], keyRealNameWidget(),
); keyBottomWidget()
],
);
} }
case 2: case 2:
{ {
// //
return Column( return _isSendSuccess
children: [ ? sendElectronicKeySucceed()
keyInfoWidget(), : Column(
remoteUnlockingWidget(), children: [
keyRealNameWidget(), keyInfoWidget(),
keyBottomWidget() remoteUnlockingWidget(),
], keyRealNameWidget(),
); keyBottomWidget()
],
);
} }
case 3: case 3:
{ {
// //
return Column( return _isSendSuccess
children: [ ? sendElectronicKeySucceed()
keyInfoWidget(), : Column(
keyPeriodValidityWidget(), children: [
remoteUnlockingWidget(), keyInfoWidget(),
keyRealNameWidget(), keyPeriodValidityWidget(),
keyBottomWidget() remoteUnlockingWidget(),
], keyRealNameWidget(),
); keyBottomWidget()
],
);
} }
default: default:
return Container(); return Container();
@ -124,18 +154,30 @@ class _SendElectronicKeyPageState extends State<SendElectronicKeyPage> {
children: [ children: [
CommonItem( CommonItem(
leftTitel: TranslationLoader.lanKeys!.effectiveTime!.tr, leftTitel: TranslationLoader.lanKeys!.effectiveTime!.tr,
rightTitle: "2020.06.20 11:49", rightTitle: _selectEffectiveDate,
isHaveLine: true, isHaveLine: true,
isHaveDirection: true, isHaveDirection: true,
action: () { action: () {
// _showDatePicker(); Pickers.showDatePicker(context, mode: DateMode.YMDHM,
onConfirm: (p) {
setState(() {
_selectEffectiveDate =
'${p.year}-${p.month}-${p.day} ${p.hour}:${p.minute}';
});
});
}), }),
CommonItem( CommonItem(
leftTitel: TranslationLoader.lanKeys!.failureTime!.tr, leftTitel: TranslationLoader.lanKeys!.failureTime!.tr,
rightTitle: "2020.06.20 11:49", rightTitle: _selectFailureDate,
isHaveDirection: true, isHaveDirection: true,
action: () { action: () {
// _showDatePicker(); Pickers.showDatePicker(context, mode: DateMode.YMDHM,
onConfirm: (p) {
setState(() {
_selectFailureDate =
'${p.year}-${p.month}-${p.day} ${p.hour}:${p.minute}';
});
});
}), }),
Container(height: 10.h), Container(height: 10.h),
], ],
@ -199,7 +241,10 @@ class _SendElectronicKeyPageState extends State<SendElectronicKeyPage> {
btnName: TranslationLoader.lanKeys!.send!.tr, btnName: TranslationLoader.lanKeys!.send!.tr,
onClick: () { onClick: () {
// //
logic.sendElectronicKey(); if (emailOrPhoneController.text.isNotEmpty &&
keyNameController.text.isNotEmpty) {
sendElectronicKeyRequest();
}
}), }),
Container( Container(
padding: EdgeInsets.only(right: 30.w), padding: EdgeInsets.only(right: 30.w),
@ -224,6 +269,44 @@ class _SendElectronicKeyPageState extends State<SendElectronicKeyPage> {
); );
} }
Future<void> sendElectronicKeyRequest() async {
String getFailureDateTime = '0';
String getEffectiveDateTime = '0';
String deviceID = '28';
String getKeyType = (int.parse(widget.type) + 1).toString();
if (widget.type == '0') {
getFailureDateTime =
DateTime.fromMillisecondsSinceEpoch(int.parse(_selectFailureDate))
.toString()
.substring(0, 19);
getEffectiveDateTime =
DateTime.fromMillisecondsSinceEpoch(int.parse(_selectEffectiveDate))
.toString()
.substring(0, 19);
}
var entity = await ApiRepository.to.sendElectronicKey(
'0',
'0',
'1',
getFailureDateTime,
_isAuthentication == true ? '1' : '2',
'2',
_isRemoteUnlock == true ? '1' : '2',
keyNameController.text,
'1',
getKeyType,
deviceID,
'小吴副号',
emailOrPhoneController.text,
'0',
getEffectiveDateTime, []);
if (entity.errorCode!.codeIsSuccessful) {
// print('发送电子钥匙成功');
_isSendSuccess = true;
setState(() {});
}
}
// //
Widget sendElectronicKeySucceed() { Widget sendElectronicKeySucceed() {
return Column( return Column(
@ -263,23 +346,35 @@ class _SendElectronicKeyPageState extends State<SendElectronicKeyPage> {
SizedBox( SizedBox(
height: 20.h, height: 20.h,
), ),
SubmitBtn(btnName: '完成', onClick: () {}),
SizedBox(
height: 10.h,
),
SubmitBtn( SubmitBtn(
btnName: '邮件通知', btnName: '完成',
onClick: () { onClick: () {
Navigator.pushNamed(context, Routers.sendEmailNotificationPage); _isSendSuccess = false;
setState(() {});
}), }),
SizedBox( SizedBox(
height: 10.h, height: 10.h,
), ),
SubmitBtn(btnName: '微信通知', onClick: () {}), OutLineBtn(
btnName: '邮件通知',
onClick: () {
Navigator.pushNamed(context, Routers.sendEmailNotificationPage);
},
),
SizedBox( SizedBox(
height: 10.h, height: 10.h,
), ),
SubmitBtn(btnName: '标记为已入住', onClick: () {}), OutLineBtn(
btnName: '微信通知',
onClick: () {},
),
SizedBox(
height: 10.h,
),
OutLineBtn(
btnName: '标记为已入住',
onClick: () {},
),
], ],
); );
} }
@ -293,9 +388,8 @@ class _SendElectronicKeyPageState extends State<SendElectronicKeyPage> {
children: [ children: [
Expanded( Expanded(
child: TextField( child: TextField(
// controller: lineIndex == 1 controller:
// ? state.emailOrPhoneController lineIndex == 1 ? emailOrPhoneController : keyNameController,
// : state.keyNameController,
// //
maxLines: 1, maxLines: 1,
// controller: _controller, // controller: _controller,

View File

@ -2,22 +2,28 @@ import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
class SendElectronicKeyState { class SendElectronicKeyState {
var emailOrPhone = ''.obs; // var emailOrPhone = ''.obs;
var keyName = ''.obs; // var keyName = ''.obs;
var canNext = false.obs; // var effectiveDate = ''.obs; //
bool get isEmailOrPhoneOK => emailOrPhone.value.isNotEmpty; // var failureDate = ''.obs; //
bool get isKeyNameOK => keyName.value.isNotEmpty; // var isRemoteUnlock = false; //
// var isRealName = false; //
// var keyType = '1'; // 1234
// var canNext = false.obs;
TextEditingController emailOrPhoneController = // bool get isEmailOrPhoneOK => emailOrPhone.value.isNotEmpty;
TextEditingController(); /// // bool get isKeyNameOK => keyName.value.isNotEmpty;
TextEditingController keyNameController = TextEditingController(); //
SendElectronicKeyState() {
emailOrPhoneController.text = emailOrPhone.value;
keyNameController.text = keyName.value;
}
void onClose() { // TextEditingController emailOrPhoneController =
emailOrPhoneController.dispose(); // TextEditingController(); ///
keyNameController.dispose(); // TextEditingController keyNameController = TextEditingController(); //
} // SendElectronicKeyState() {
// emailOrPhoneController.text = emailOrPhone.value;
// keyNameController.text = keyName.value;
// }
// void onClose() {
// emailOrPhoneController.dispose();
// keyNameController.dispose();
// }
} }

View File

@ -13,6 +13,8 @@ abstract class Api {
final String getCountryRegionURL = '/system/listCountry'; // final String getCountryRegionURL = '/system/listCountry'; //
final String electronicKeyListURL = '/key/listUser'; // final String electronicKeyListURL = '/key/listUser'; //
final String sendElectronicKeyURL = '/key/send'; // final String sendElectronicKeyURL = '/key/send'; //
final String resetElectronicKeyURL = '/key/reset'; //
final String keyOperationRecordURL = '/lockRecords/list'; //
final String uploadElectricQuantityURL = final String uploadElectricQuantityURL =
'/room/uploadElectricQuantity'; // '/room/uploadElectricQuantity'; //
} }

View File

@ -131,7 +131,7 @@ class ApiProvider extends BaseProvider {
String receiverUsername, String receiverUsername,
String remarks, String remarks,
String startDate, String startDate,
String weekDays) => List weekDays) =>
post( post(
sendElectronicKeyURL.toUrl, sendElectronicKeyURL.toUrl,
jsonEncode({ jsonEncode({
@ -163,6 +163,38 @@ class ApiProvider extends BaseProvider {
'electricQuantity': electricQuantity, 'electricQuantity': electricQuantity,
'lockId': lockId, 'lockId': lockId,
})); }));
Future<Response> resetElectronicKey(String lockId, String operatorUid) =>
post(resetElectronicKeyURL.toUrl,
jsonEncode({'lockId': lockId, 'operatorUid': operatorUid}));
Future<Response> lockRecordList(
String endDate,
String keyId,
String keyStatus,
String lockId,
String operatorUid,
String pageNo,
String pageSize,
String startDate,
String recordType,
String searchStr,
String timezoneRawOffSet) =>
post(
keyOperationRecordURL.toUrl,
jsonEncode({
'endDate': endDate,
'keyId': keyId,
"keyStatus": keyStatus,
'lockId': lockId,
"operatorUid": operatorUid,
'pageNo': pageNo,
'pageSize': pageSize,
'startDate': startDate,
'recordType': recordType,
'searchStr': searchStr,
'timezoneRawOffSet': timezoneRawOffSet
}));
} }
extension ExtensionString on String { extension ExtensionString on String {

View File

@ -53,7 +53,7 @@ class BaseProvider extends GetConnect with Api {
statusText: res.statusText, statusText: res.statusText,
); );
} }
print('得到的数据======>res'); print('得到的数据======>$res');
return res; return res;
} }
} }

View File

@ -1,4 +1,5 @@
import 'package:get/get.dart'; import 'package:get/get.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/electronicKey/electronicKeyList/entity/ElectronicKeyListEntity.dart';
import '../common/safetyVerification/entity/CheckSafetyVerificationEntity.dart'; import '../common/safetyVerification/entity/CheckSafetyVerificationEntity.dart';
import '../common/safetyVerification/entity/SafetyVerificationEntity.dart'; import '../common/safetyVerification/entity/SafetyVerificationEntity.dart';
@ -112,7 +113,7 @@ class ApiRepository {
String receiverUsername, String receiverUsername,
String remarks, String remarks,
String startDate, String startDate,
String weekDays) async { List weekDays) async {
final res = await apiProvider.sendElectronicKey( final res = await apiProvider.sendElectronicKey(
createUser, createUser,
countryCode, countryCode,
@ -132,4 +133,39 @@ class ApiRepository {
weekDays); weekDays);
return ElectronicKeyListEntity.fromJson(res.body); return ElectronicKeyListEntity.fromJson(res.body);
} }
//
Future<ElectronicKeyListEntity> resetElectronicKey(
String lockId, String operatorUid) async {
final res = await apiProvider.resetElectronicKey(lockId, operatorUid);
return ElectronicKeyListEntity.fromJson(res.body);
}
//-
Future<KeyOperationRecordEntity> lockRecordList(
String endDate,
String keyId,
String keyStatus,
String lockId,
String operatorUid,
String pageNo,
String pageSize,
String startDate,
String recordType,
String searchStr,
String timezoneRawOffSet) async {
final res = await apiProvider.lockRecordList(
endDate,
keyId,
keyStatus,
lockId,
operatorUid,
pageNo,
pageSize,
startDate,
recordType,
searchStr,
timezoneRawOffSet);
return KeyOperationRecordEntity.fromJson(res.body);
}
} }

View File

@ -160,3 +160,41 @@ class AddBottomWhiteBtn extends StatelessWidget {
); );
} }
} }
/*
*
* */
class OutLineBtn extends StatelessWidget {
String? btnName;
Function()? onClick;
OutLineBtn({
Key? key,
required this.btnName,
this.onClick,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return SizedBox(
width: ScreenUtil().screenWidth - 40.w,
height: 60.h,
child: OutlinedButton(
style: OutlinedButton.styleFrom(
backgroundColor: Colors.white,
side: BorderSide(width: 1, color: AppColors.mainColor)),
onPressed: () {
if (onClick != null) {
onClick!();
}
},
child: Text(
btnName!,
style: TextStyle(
color: AppColors.mainColor, fontSize: ScreenUtil().setSp(24)),
)),
);
}
}