# Conflicts:
#	star_lock/lib/blue/blue_manage.dart
#	star_lock/lib/blue/sender_beforeDataManage.dart
This commit is contained in:
魏少阳 2024-05-10 09:21:23 +08:00
commit 56efaa9947
27 changed files with 659 additions and 614 deletions

View File

@ -832,5 +832,6 @@
"钥匙详情":"Key details", "钥匙详情":"Key details",
"姓名":"Name", "姓名":"Name",
"发送":"Send", "发送":"Send",
"请确认姓名全名和身份证号码是否正确":"Please confirm that the full name and ID number are correct" "请确认姓名全名和身份证号码是否正确":"Please confirm that the full name and ID number are correct",
"传输期间请勿离开当前页面":"Do not leave the current page during transfer"
} }

View File

@ -860,5 +860,6 @@
"钥匙详情":"钥匙详情", "钥匙详情":"钥匙详情",
"姓名":"姓名", "姓名":"姓名",
"发送":"发送", "发送":"发送",
"请确认姓名全名和身份证号码是否正确":"请确认姓名全名和身份证号码是否正确" "请确认姓名全名和身份证号码是否正确":"请确认姓名全名和身份证号码是否正确",
"传输期间请勿离开当前页面":"传输期间请勿离开当前页面"
} }

View File

@ -349,7 +349,7 @@
"customMailTemplate":"自定义邮件模版", "customMailTemplate":"自定义邮件模版",
"record":"记录", "record":"记录",
"buyRealNameTip":"给用户发送电子钥匙时,可以要求其开锁前先进行实名认证,以保证是他本人在操作。实名认证调用国家公安系统接口,为付费功能,请购买次数后再使用。", "buyRealNameTip":"给用户发送电子钥匙时,可以要求其开锁前先进行人脸识别,以保证是他本人在操作。人脸实名认证调用国家公安系统接口,为付费功能,请购买次数后再使用。",
"buyRealNameSelectYouWantBuyTip":"请选择你希望的实名认证频数", "buyRealNameSelectYouWantBuyTip":"请选择你希望的实名认证频数",
"forTheFirstTime":"仅首次", "forTheFirstTime":"仅首次",
"onceDay":"每日一次", "onceDay":"每日一次",
@ -863,5 +863,7 @@
"钥匙详情":"钥匙详情", "钥匙详情":"钥匙详情",
"姓名":"姓名", "姓名":"姓名",
"发送":"发送", "发送":"发送",
"请确认姓名全名和身份证号码是否正确":"请确认姓名全名和身份证号码是否正确" "请确认姓名全名和身份证号码是否正确":"请确认姓名全名和身份证号码是否正确",
"传输期间请勿离开当前页面":"传输期间请勿离开当前页面"
} }

View File

@ -183,7 +183,6 @@ class OTAUpgradeReply extends Reply {
data = dataDetail; data = dataDetail;
token = data.sublist(2, 6); token = data.sublist(2, 6);
status = data[6]; status = data[6];
// AppLog.log('--->2' + data.toString());
errorWithStstus(status); errorWithStstus(status);
} }
} }

View File

@ -12,121 +12,124 @@ abstract class Reply{
//command key flag //command key flag
int status = 0; int status = 0;
List<int> data = []; List<int> data = [];
static String logTag= '锁 -> App指令订阅类型 :';
Reply.parseData(this.commandType, List<int> dataDetail); Reply.parseData(this.commandType, List<int> dataDetail);
void errorWithStstus(int status){ void errorWithStstus(int status){
switch(status){ switch(status){
case 0x00: case 0x00:
// //
AppLog.log("$logTag ${commandType?.typeName} 0x00 成功");
break; break;
case 0x01: case 0x01:
// //
AppLog.log("${commandType!.typeName} 0x01 包格式错误"); AppLog.log("$logTag ${commandType!.typeName} 0x01 包格式错误");
showErrorMessage("包格式错误"); showErrorMessage("包格式错误");
break; break;
case 0x02: case 0x02:
// //
AppLog.log("${commandType!.typeName} 0x02 密码错误"); AppLog.log("$logTag ${commandType!.typeName} 0x02 密码错误");
showErrorMessage("密码错误"); showErrorMessage("密码错误");
break; break;
case 0x03: case 0x03:
// //
AppLog.log("${commandType!.typeName} 0x03 网络中断"); AppLog.log("$logTag ${commandType!.typeName} 0x03 网络中断");
showErrorMessage("网络中断"); showErrorMessage("网络中断");
break; break;
case 0x04: case 0x04:
// //
AppLog.log("${commandType!.typeName} 0x04 用户未登记"); AppLog.log("$logTag ${commandType!.typeName} 0x04 用户未登记");
showErrorMessage("用户未登记"); showErrorMessage("用户未登记");
break; break;
case 0x05: case 0x05:
// //
AppLog.log("${commandType!.typeName} 0x05 参数错误"); AppLog.log("$logTag ${commandType!.typeName} 0x05 参数错误");
showErrorMessage("参数错误"); showErrorMessage("参数错误");
break; break;
case 0x06: case 0x06:
// //
AppLog.log("${commandType!.typeName} 0x06 需要鉴权"); AppLog.log("$logTag ${commandType!.typeName} 0x06 需要鉴权");
// showErrorMessage("需要鉴权"); // showErrorMessage("需要鉴权");
break; break;
case 0x07: case 0x07:
// //
AppLog.log("${commandType!.typeName} 0x07 无权限"); AppLog.log("$logTag ${commandType!.typeName} 0x07 无权限");
// showErrorMessage("无权限"); // showErrorMessage("无权限");
break; break;
case 0x08: case 0x08:
// //
AppLog.log("${commandType!.typeName} 0x08 应答超时"); AppLog.log("$logTag ${commandType!.typeName} 0x08 应答超时");
showErrorMessage("应答超时"); showErrorMessage("应答超时");
break; break;
case 0x09: case 0x09:
// //
AppLog.log("${commandType!.typeName} 0x09 权限校验错误"); AppLog.log("$logTag ${commandType!.typeName} 0x09 权限校验错误");
showErrorMessage("权限校验错误"); showErrorMessage("权限校验错误");
break; break;
case 0x0a: case 0x0a:
// //
showErrorMessage("钥匙不存在"); showErrorMessage("钥匙不存在");
AppLog.log("${commandType!.typeName} 0x0a 钥匙不存在"); AppLog.log("$logTag ${commandType!.typeName} 0x0a 钥匙不存在");
break; break;
case 0x0b: case 0x0b:
// //
showErrorMessage("钥匙过期"); showErrorMessage("钥匙过期");
AppLog.log("${commandType!.typeName} 0x0b 钥匙过期"); AppLog.log("$logTag ${commandType!.typeName} 0x0b 钥匙过期");
break; break;
case 0x0c: case 0x0c:
// //
showErrorMessage("钥匙数量已到上限"); showErrorMessage("钥匙数量已到上限");
AppLog.log("${commandType!.typeName} 0x0c 钥匙数量已到上限"); AppLog.log("$logTag ${commandType!.typeName} 0x0c 钥匙数量已到上限");
break; break;
case 0x0d: case 0x0d:
// //
showErrorMessage("钥匙无效"); showErrorMessage("钥匙无效");
AppLog.log("${commandType!.typeName} 0x0d 钥匙无效"); AppLog.log("$logTag ${commandType!.typeName} 0x0d 钥匙无效");
break; break;
case 0x0e: case 0x0e:
// //
showErrorMessage("钥匙已存在"); showErrorMessage("钥匙已存在");
AppLog.log("${commandType!.typeName} 0x0e 钥匙无效"); AppLog.log("$logTag ${commandType!.typeName} 0x0e 钥匙无效");
break; break;
case 0x0f: case 0x0f:
// //
AppLog.log("${commandType!.typeName} 0x0f 用户已存在"); AppLog.log("$logTag ${commandType!.typeName} 0x0f 用户已存在");
showErrorMessage("用户已存在"); showErrorMessage("用户已存在");
break; break;
case 0x10: case 0x10:
// //
AppLog.log("${commandType!.typeName} 0x11 密码失效"); AppLog.log("$logTag ${commandType!.typeName} 0x11 密码失效");
showErrorMessage("密码失效"); showErrorMessage("密码失效");
break; break;
case 0x11: case 0x11:
// //
AppLog.log("${commandType!.typeName} 0x11 无效指令"); AppLog.log("$logTag ${commandType!.typeName} 0x11 无效指令");
showErrorMessage("无效指令"); showErrorMessage("无效指令");
break; break;
case 0x12: case 0x12:
// //
AppLog.log("${commandType!.typeName} 0x12 门锁时间异常"); AppLog.log("$logTag ${commandType!.typeName} 0x12 门锁时间异常");
showErrorMessage("门锁时间异常"); showErrorMessage("门锁时间异常");
break; break;
case 0x15: case 0x15:
// APP() // APP()
AppLog.log("${commandType!.typeName} 0x15 APP(手机)未联网"); AppLog.log("$logTag ${commandType!.typeName} 0x15 APP(手机)未联网");
showErrorMessage("APP(手机)未联网"); showErrorMessage("APP(手机)未联网");
break; break;
case 0x16: case 0x16:
// ... // ...
AppLog.log("${commandType!.typeName}正在开锁中..."); AppLog.log("$logTag ${commandType!.typeName}正在开锁中...");
// showErrorMessage("正在开锁中..."); // showErrorMessage("正在开锁中...");
break; break;
case 0xff: case 0xff:
// //
AppLog.log("${commandType!.typeName} 0xff"); AppLog.log("$logTag ${commandType!.typeName} 0xff");
showErrorMessage("异常,未知错误"); showErrorMessage("异常,未知错误");
break; break;
default: default:
// //
AppLog.log("蓝牙返回其他错误问题"); AppLog.log("$logTag ${commandType!.typeName} 蓝牙返回其他错误问题");
break; break;
} }
} }

View File

@ -110,9 +110,6 @@ class CommandReciverManager {
} }
parseData(oriDataList).then((Reply? value) async { parseData(oriDataList).then((Reply? value) async {
EasyLoading.dismiss(); EasyLoading.dismiss();
if (value != null) {
AppLog.log("锁 -> App指令订阅类型 :${value.commandType?.typeName} \n $value");
}
await EventBusManager().eventBusFir(value); await EventBusManager().eventBusFir(value);
}).catchError((error) { }).catchError((error) {
AppLog.log("APP解析数据时发生错误: $error"); AppLog.log("APP解析数据时发生错误: $error");

View File

@ -44,6 +44,7 @@ class SenderBeforeDataManage {
// //
StreamSubscription<Reply>? _replySubscription; StreamSubscription<Reply>? _replySubscription;
//
void _initReplySubscription() { void _initReplySubscription() {
_replySubscription ??= _replySubscription ??=
EventBusManager().eventBus!.on<Reply>().listen((reply) async { EventBusManager().eventBus!.on<Reply>().listen((reply) async {
@ -52,128 +53,36 @@ class SenderBeforeDataManage {
_replyAddUserKey(reply); _replyAddUserKey(reply);
} }
if(reply is CleanUpUsersReply){ if (reply is CleanUpUsersReply) {
_cleanUpUsersReply(reply); _cleanUpUsersReply(reply);
} }
}); });
} }
// //
Future<void> _replyAddUserKey(Reply reply) async { Future<void> _replyAddUserKey(Reply reply) async {
int status = reply.data[46]; int status = reply.data[46];
switch (status) { switch (status) {
case 0x00: case 0x00:
// //
CommonDataManage().currentLockUserNo = listChangInt(reply.data.sublist(47, 49)); CommonDataManage().currentLockUserNo =
CommonDataManage().currentKeyInfo.lockUserNo = CommonDataManage().currentLockUserNo; listChangInt(reply.data.sublist(47, 49));
CommonDataManage().currentKeyInfo.lockUserNo =
CommonDataManage().currentLockUserNo;
_updateLockUserNo(); _updateLockUserNo();
break; break;
case 0x06: case 0x06:
// //
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var publicKey = await Storage.getStringList(saveBluePublicKey);
List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
var token = reply.data.sublist(42, 46); var token = reply.data.sublist(42, 46);
List<String> strTokenList = changeIntListToStringList(token); List<String> strTokenList = changeIntListToStringList(token);
Storage.setStringList(saveBlueToken, strTokenList); Storage.setStringList(saveBlueToken, strTokenList);
var addUserData = await getAddUserKeyData(tokenList: token);
// IoSenderManage.senderAddUser( eventBus.fire(LockAddUserSucceedEvent(addUserData, 1));
// lockID: BlueManage().connectDeviceName,
// authUserID: CommonDataManage().currentKeyInfo.senderUserId!.toString(),
// keyID: CommonDataManage().currentKeyInfo.keyId.toString(),
// userID: await Storage.getUid(),
// openMode: 1,
// keyType: 0,
// startDate: CommonDataManage().currentKeyInfo.startDate!~/10000,
// expireDate: CommonDataManage().currentKeyInfo.endDate!~/10000,
// role: CommonDataManage().currentKeyInfo.keyRight == 1 ? 1 : 0,
// password: "123456",
// needAuthor: 1,
// publicKey: publicKeyDataList,
// privateKey: getPrivateKeyList,
// token: token);
LockListInfoItemEntity currentKeyInfo = CommonDataManage().currentKeyInfo;
AppLog.log(
"startDate111:${currentKeyInfo.startDate} endDate:${currentKeyInfo.endDate}");
DateTime startTime = DateTime.fromMillisecondsSinceEpoch(
currentKeyInfo.startDate! ~/ 1000);
DateTime endTime = DateTime.fromMillisecondsSinceEpoch(
currentKeyInfo.endDate! ~/ 1000);
bool isRound = currentKeyInfo.keyType == 2;
var addUserData = AddUserCommand(
lockID: BlueManage().connectDeviceName,
authUserID: currentKeyInfo.senderUserId!.toString(),
keyID: currentKeyInfo.keyId.toString(),
userID: await Storage.getUid(),
openMode: 1,
keyType: currentKeyInfo.keyType,
startDate: currentKeyInfo.startDate! ~/ 1000,
expireDate: currentKeyInfo.endDate! ~/ 1000,
useCountLimit: 0xFFFF,
// useCountLimit: 1,
isRound: isRound ? 1 : 0,
weekRound: isRound
? DateTool().accordingTheCycleIntoTheCorrespondingNumber(
currentKeyInfo.weekDays!)
: 0,
startHour: isRound ? startTime.hour : 0,
startMin: isRound ? startTime.minute : 0,
endHour: isRound ? endTime.hour : 0,
endMin: isRound ? endTime.minute : 0,
role: currentKeyInfo.keyRight == 1 ? 1 : 0,
password: "123456",
needAuthor: 1,
publicKey: publicKeyDataList,
privateKey: getPrivateKeyList,
token: token);
eventBus.fire(LockAddUserSucceedEvent(addUserData.packageData(), 1));
break; break;
case 0x0c: case 0x0c:
// 32 // 32
var entity = await ApiRepository.to.getLockUserNoList( var addUserData = await getCleanUpUsers();
lockId: CommonDataManage().currentKeyInfo.lockId!); CommandSenderManager().sendNormalData(addUserData);
if (!entity.errorCode!.codeIsSuccessful &&
(entity.data?.userNos ?? []).isNotEmpty) {
return;
}
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var publicKey = await Storage.getStringList(saveBluePublicKey);
List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
var tokenKey = await Storage.getStringList(saveBlueToken);
List<int> tokenList = changeStringListToIntList(tokenKey!);
AppLog.log('---> ${entity.data?.userNos}');
var cleanUpUsersData = CleanUpUsersCommand(
lockID: BlueManage().connectDeviceName,
authUserID: CommonDataManage().currentKeyInfo.senderUserId!.toString(),
keyID: CommonDataManage().currentKeyInfo.keyId.toString(),
userID: await Storage.getUid(),
needAuthor: 1,
publicKey: publicKeyDataList,
privateKey: getPrivateKeyList,
userNoList: entity.data!.userNos!,
token: tokenList,
).packageData();
CommandSenderManager().sendNormalData(cleanUpUsersData);
// IoSenderManage.senderCleanUpUsersCommand(
// lockID: BlueManage().connectDeviceName,
// authUserID:
// CommonDataManage().currentKeyInfo.senderUserId!.toString(),
// keyID: CommonDataManage().currentKeyInfo.keyId.toString(),
// userID: await Storage.getUid(),
// userNoList: entity.data!.userNos!,
// needAuthor: 1,
// publicKey: publicKeyDataList,
// privateKey: getPrivateKeyList,
// token: tokenList);
break; break;
default: default:
// //
@ -181,47 +90,81 @@ class SenderBeforeDataManage {
} }
} }
// //
Future<void> _cleanUpUsersReply(Reply reply) async { Future<void> _cleanUpUsersReply(Reply reply) async {
int status = reply.data[6]; int status = reply.data[6];
switch (status) { switch (status) {
case 0x00: case 0x00:
// //
//
var addUserData = await getAddUserKeyData();
CommandSenderManager().sendNormalData(addUserData);
break; break;
case 0x06: case 0x06:
// //
var privateKey = await Storage.getStringList(saveBluePrivateKey); var token = reply.data.sublist(2, 6);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var publicKey = await Storage.getStringList(saveBluePublicKey);
List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
var token = reply.data.sublist(42, 46);
List<String> strTokenList = changeIntListToStringList(token); List<String> strTokenList = changeIntListToStringList(token);
Storage.setStringList(saveBlueToken, strTokenList); Storage.setStringList(saveBlueToken, strTokenList);
var addUserData = await getCleanUpUsers(tokenList: token);
CommandSenderManager().sendNormalData(addUserData);
break; break;
default: default:
// //
break; break;
} }
} }
Future<List<int>> getAddUserKeyData() async { //
Future<List<int>> getCleanUpUsers({List<int>? tokenList}) async {
var entity = await ApiRepository.to
.getLockUserNoList(lockId: CommonDataManage().currentKeyInfo.lockId!);
if (!entity.errorCode!.codeIsSuccessful ||
(entity.data?.userNos ?? []).isEmpty) {
throw Exception('ApiRepository.to.getLockUserNoList 访问失败');
}
var privateKey = await Storage.getStringList(saveBluePrivateKey); var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!); List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var publicKey = await Storage.getStringList(saveBluePublicKey); var publicKey = await Storage.getStringList(saveBluePublicKey);
List<int> publicKeyDataList = changeStringListToIntList(publicKey!); List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
var token = await Storage.getStringList(saveBlueToken); if (tokenList == null) {
List<int> getTokenList = changeStringListToIntList(token!); var tokenKey = await Storage.getStringList(saveBlueToken);
tokenList = changeStringListToIntList(tokenKey!);
}
var cleanUpUsersData = CleanUpUsersCommand(
lockID: BlueManage().connectDeviceName,
authUserID: CommonDataManage().currentKeyInfo.senderUserId!.toString(),
keyID: CommonDataManage().currentKeyInfo.keyId.toString(),
userID: await Storage.getUid(),
needAuthor: 1,
publicKey: publicKeyDataList,
privateKey: getPrivateKeyList,
userNoList: entity.data!.userNos!,
token: tokenList,
);
return cleanUpUsersData.packageData();
}
//
Future<List<int>> getAddUserKeyData({List<int>? tokenList}) async {
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var publicKey = await Storage.getStringList(saveBluePublicKey);
List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
if (tokenList == null) {
var token = await Storage.getStringList(saveBlueToken);
tokenList = changeStringListToIntList(token!);
}
LockListInfoItemEntity currentKeyInfo = CommonDataManage().currentKeyInfo; LockListInfoItemEntity currentKeyInfo = CommonDataManage().currentKeyInfo;
DateTime startTime = DateTime.fromMillisecondsSinceEpoch(currentKeyInfo.startDate! ~/ 1000); DateTime startTime =
DateTime endTime = DateTime.fromMillisecondsSinceEpoch(currentKeyInfo.endDate! ~/ 1000); DateTime.fromMillisecondsSinceEpoch(currentKeyInfo.startDate! ~/ 1000);
DateTime endTime =
DateTime.fromMillisecondsSinceEpoch(currentKeyInfo.endDate! ~/ 1000);
bool isRound = currentKeyInfo.keyType == 2; bool isRound = currentKeyInfo.keyType == 2;
var addUserData = AddUserCommand( var addUserData = AddUserCommand(
@ -234,7 +177,6 @@ class SenderBeforeDataManage {
startDate: currentKeyInfo.startDate! ~/ 1000, startDate: currentKeyInfo.startDate! ~/ 1000,
expireDate: currentKeyInfo.endDate! ~/ 1000, expireDate: currentKeyInfo.endDate! ~/ 1000,
useCountLimit: 0xFFFF, useCountLimit: 0xFFFF,
// useCountLimit: 1,
isRound: isRound ? 1 : 0, isRound: isRound ? 1 : 0,
weekRound: isRound weekRound: isRound
? DateTool().accordingTheCycleIntoTheCorrespondingNumber( ? DateTool().accordingTheCycleIntoTheCorrespondingNumber(
@ -249,7 +191,7 @@ class SenderBeforeDataManage {
needAuthor: 1, needAuthor: 1,
publicKey: publicKeyDataList, publicKey: publicKeyDataList,
privateKey: getPrivateKeyList, privateKey: getPrivateKeyList,
token: getTokenList); token: tokenList);
return addUserData.packageData(); return addUserData.packageData();
} }

View File

@ -9,11 +9,16 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:rxdart/rxdart.dart'; import 'package:rxdart/rxdart.dart';
import 'package:star_lock/app_settings/app_colors.dart'; import 'package:star_lock/app_settings/app_colors.dart';
import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/blue/blue_manage.dart'; import 'package:star_lock/blue/blue_manage.dart';
import 'package:star_lock/blue/io_protocol/io_cleanUpUsers.dart';
import 'package:star_lock/blue/io_tool/io_tool.dart'; import 'package:star_lock/blue/io_tool/io_tool.dart';
import 'package:star_lock/blue/sender_data.dart';
import 'package:star_lock/blue/sender_manage.dart'; import 'package:star_lock/blue/sender_manage.dart';
import 'package:star_lock/debug/log.dart'; import 'package:star_lock/debug/log.dart';
import 'package:star_lock/main/lockMian/entity/lockListInfo_entity.dart'; import 'package:star_lock/main/lockMian/entity/lockListInfo_entity.dart';
import 'package:star_lock/network/api_repository.dart';
import 'package:star_lock/tools/baseGetXController.dart';
import 'package:star_lock/tools/commonDataManage.dart'; import 'package:star_lock/tools/commonDataManage.dart';
import 'package:star_lock/tools/dateTool.dart'; import 'package:star_lock/tools/dateTool.dart';
import 'package:star_lock/tools/storage.dart'; import 'package:star_lock/tools/storage.dart';
@ -85,6 +90,14 @@ class DebugConsoleController {
.catchError(EasyLoading.dismiss); .catchError(EasyLoading.dismiss);
}, },
child: const Text('给锁设备创建 32个用户')), child: const Text('给锁设备创建 32个用户')),
ElevatedButton(
onPressed: () {
EasyLoading.show();
sendCleanUpUsers()
.then((value) => EasyLoading.dismiss())
.catchError(EasyLoading.dismiss);
},
child: const Text('清除用户,只保留超级管理员')),
], ],
), ),
), ),
@ -141,9 +154,11 @@ class DebugConsoleController {
privateKey: getPrivateKeyList, privateKey: getPrivateKeyList,
token: tokenList); token: tokenList);
} }
AppLog.log('--> 添加第$count 用户');
}); });
await Future.delayed(const Duration(seconds: 2)); await Future.delayed(const Duration(seconds: 3));
count++; count++;
await randomlyCreate32Users(count, max); await randomlyCreate32Users(count, max);
} }
@ -155,4 +170,36 @@ class DebugConsoleController {
return List.generate(length, (index) => chars[random.nextInt(chars.length)]) return List.generate(length, (index) => chars[random.nextInt(chars.length)])
.join(); .join();
} }
//
Future<void> sendCleanUpUsers({List<int>? tokenList}) async {
var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var publicKey = await Storage.getStringList(saveBluePublicKey);
List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
if (tokenList == null) {
var tokenKey = await Storage.getStringList(saveBlueToken);
tokenList = changeStringListToIntList(tokenKey!);
}
BlueManage().bludSendData(BlueManage().connectDeviceName,
(BluetoothConnectionState deviceConnectionState) async {
if (deviceConnectionState == BluetoothConnectionState.connected) {
IoSenderManage.senderCleanUpUsersCommand(
lockID: BlueManage().connectDeviceName,
authUserID:
CommonDataManage().currentKeyInfo.senderUserId!.toString(),
keyID: CommonDataManage().currentKeyInfo.keyId.toString(),
userID: await Storage.getUid(),
needAuthor: 1,
publicKey: publicKeyDataList,
privateKey: getPrivateKeyList,
userNoList: [1],
token: tokenList,
);
}
});
}
} }

View File

@ -1,9 +1,13 @@
import 'dart:async'; import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_blue_plus/flutter_blue_plus.dart'; import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/appRouters.dart';
import 'package:star_lock/app_settings/app_settings.dart'; import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/mine/valueAddedServices/advancedFunctionRecord/advancedFunctionRecord_entity.dart';
import 'package:star_lock/tools/dateTool.dart'; import 'package:star_lock/tools/dateTool.dart';
import 'package:star_lock/tools/showCupertinoAlertView.dart';
import '../../../../blue/blue_manage.dart'; import '../../../../blue/blue_manage.dart';
import '../../../../blue/io_reply.dart'; import '../../../../blue/io_reply.dart';
@ -136,6 +140,45 @@ class AuthorizedAdminLogic extends BaseGetXController {
} }
} }
//
if (state.isAuthentication.value == true) {
if (state.realNameController.text.isEmpty) {
showToast("请输入真实姓名".tr);
return;
}
if (state.idCardController.text.isEmpty) {
showToast("请输入身份证号".tr);
return;
}
//
ShowCupertinoAlertView().realNameIDCardInfoComfirmAlert(
getNameStr: state.realNameController.text,
getIDCardStr: state.idCardController.text,
onConfirm: () {
goSendElectronicKey(
endDate: endDate,
getKeyType: getKeyType,
startDate: startDate,
startTime: startTime,
endTime: endTime);
});
} else {
goSendElectronicKey(
endDate: endDate,
getKeyType: getKeyType,
startDate: startDate,
startTime: startTime,
endTime: endTime);
}
}
Future<void> goSendElectronicKey(
{required String endDate,
required String getKeyType,
required String startDate,
required String startTime,
required String endTime}) async {
var entity = await ApiRepository.to.sendElectronicKey( var entity = await ApiRepository.to.sendElectronicKey(
createUser: state.isCreateUser.value ? "1" : "0", createUser: state.isCreateUser.value ? "1" : "0",
countryCode: state.countryCode.value, countryCode: state.countryCode.value,
@ -156,8 +199,12 @@ class AuthorizedAdminLogic extends BaseGetXController {
startTime: int.parse(startTime), startTime: int.parse(startTime),
endTime: int.parse(endTime), endTime: int.parse(endTime),
isOnlyManageSelf: state.onlyManageYouCreatesUser.value ? 1 : 0, isOnlyManageSelf: state.onlyManageYouCreatesUser.value ? 1 : 0,
realName: '', realName: state.isRequireAuth.value == true
idCardNumber: ''); ? state.realNameController.text
: "",
idCardNumber: state.isRequireAuth.value == true
? state.idCardController.text
: "");
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
state.isCreateUser.value = false; state.isCreateUser.value = false;
state.isSendSuccess.value = true; state.isSendSuccess.value = true;
@ -169,7 +216,6 @@ class AuthorizedAdminLogic extends BaseGetXController {
if (entity.errorCode == 425) { if (entity.errorCode == 425) {
// //
state.isCreateUser.value = true; state.isCreateUser.value = true;
// _showDialog('${entity.errorMsg}');
ShowTipView().showIosTipWithContentDialog( ShowTipView().showIosTipWithContentDialog(
'${"是否发送授权管理员给未注册账号".tr}\n${state.emailOrPhoneController.text}', '${"是否发送授权管理员给未注册账号".tr}\n${state.emailOrPhoneController.text}',
() { () {
@ -179,6 +225,24 @@ class AuthorizedAdminLogic extends BaseGetXController {
} }
} }
//
Future<void> keyCheckFace() async {
AdvancedFunctionRecordEntity entity = await ApiRepository.to.keyCheckFace(
countryCode: int.parse(state.countryCode.value),
account: state.emailOrPhoneController.text);
if (entity.errorCode!.codeIsSuccessful) {
//
state.isRequireAuth.value = true;
} else {
ShowTipView().showBuyTipWithContentAlert(
titleStr: '实名认证为付费功能,请购买后再使用'.tr,
sureClick: () {
Get.toNamed(Routers.advancedFeaturesWebPage,
arguments: {'isShop': false});
});
}
}
// isOn:: 1 2 // isOn:: 1 2
Future<void> updateRoomCheckIn() async { Future<void> updateRoomCheckIn() async {
var entity = await ApiRepository.to.setRoomStatusData( var entity = await ApiRepository.to.setRoomStatusData(
@ -190,40 +254,25 @@ class AuthorizedAdminLogic extends BaseGetXController {
} }
} }
// TextEditingController getCurrentController(int lineIndex) {
// void _showDialog(String errMsg) { TextEditingController currentController = TextEditingController();
// showCupertinoDialog( switch (lineIndex) {
// context: Get.context!, case 1:
// builder: (context) { currentController = state.emailOrPhoneController;
// return CupertinoAlertDialog( break;
// title: const Text('接收者号码未注册,请重新发送'), case 2:
// actions: [ currentController = state.keyNameController;
// CupertinoDialogAction( break;
// child: Text(TranslationLoader.lanKeys!.cancel!.tr), case 3:
// onPressed: () { currentController = state.realNameController;
// Get.back(); break;
// }, case 4:
// ), currentController = state.idCardController;
// CupertinoDialogAction( break;
// child: Text(TranslationLoader.lanKeys!.sure!.tr), default:
// onPressed: () async { }
// // return currentController;
// Get.back(); }
//
// // var result = await Get.toNamed(Routers.selectCountryRegionPage);
// // if (result != null) {
// // result as Map<String, dynamic>;
// // state.countryCode.value = result['code'];
// // state.countryName.value = result['countryName'];
// // }
// sendElectronicKeyRequest();
// },
// ),
// ],
// );
// },
// );
// }
@override @override
void onReady() { void onReady() {

View File

@ -36,7 +36,6 @@ class _AuthorizedAdminPageState extends State<AuthorizedAdminPage>
@override @override
void initState() { void initState() {
// TODO: implement initState
super.initState(); super.initState();
state.tabController = state.tabController =
@ -82,7 +81,7 @@ class _AuthorizedAdminPageState extends State<AuthorizedAdminPage>
children: [ children: [
keyInfoWidget(), keyInfoWidget(),
keyTimeWidget(), keyTimeWidget(),
keyRealNameWidget(), keyOnlyManageWidget(),
keyBottomWidget( keyBottomWidget(
TranslationLoader.lanKeys!.authorizedAdminTip!.tr) TranslationLoader.lanKeys!.authorizedAdminTip!.tr)
], ],
@ -95,7 +94,7 @@ class _AuthorizedAdminPageState extends State<AuthorizedAdminPage>
child: Column( child: Column(
children: [ children: [
keyInfoWidget(), keyInfoWidget(),
keyRealNameWidget(), keyOnlyManageWidget(),
keyBottomWidget( keyBottomWidget(
TranslationLoader.lanKeys!.authorizedAdminTip!.tr) TranslationLoader.lanKeys!.authorizedAdminTip!.tr)
], ],
@ -189,7 +188,7 @@ class _AuthorizedAdminPageState extends State<AuthorizedAdminPage>
} }
// //
Widget keyRealNameWidget() { Widget keyOnlyManageWidget() {
return Column( return Column(
children: [ children: [
CommonItem( CommonItem(
@ -205,17 +204,7 @@ class _AuthorizedAdminPageState extends State<AuthorizedAdminPage>
height: 50.h, height: 50.h,
child: _onlyManageYouCreatesUserSwitch())), child: _onlyManageYouCreatesUserSwitch())),
Container(height: 10.h), Container(height: 10.h),
CommonItem( keyRealNameWidget(),
leftTitel: TranslationLoader.lanKeys!.realNameAuthentication!.tr,
rightTitle: "",
isTipsImg: true,
tipsImgAction: () {
ShowTipView().showSureAlertDialog(
"人脸实名认证指的是用户在使用手机APP开锁时需要先进行本人人脸验证验证通过才能开锁。");
},
isHaveRightWidget: true,
rightWidget: SizedBox(width: 60.w, height: 50.h, child: _switch()),
action: () {}),
Container(height: 10.h), Container(height: 10.h),
], ],
); );
@ -227,7 +216,6 @@ class _AuthorizedAdminPageState extends State<AuthorizedAdminPage>
Container( Container(
padding: EdgeInsets.all(20.w), padding: EdgeInsets.all(20.w),
child: Row( child: Row(
// crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Expanded( Expanded(
child: Text( child: Text(
@ -255,7 +243,6 @@ class _AuthorizedAdminPageState extends State<AuthorizedAdminPage>
}), }),
Container( Container(
padding: EdgeInsets.only(right: 30.w), padding: EdgeInsets.only(right: 30.w),
// color: Colors.red,
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.end, mainAxisAlignment: MainAxisAlignment.end,
children: [ children: [
@ -264,7 +251,6 @@ class _AuthorizedAdminPageState extends State<AuthorizedAdminPage>
var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot); var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
if (isDemoMode == false) { if (isDemoMode == false) {
Get.toNamed(Routers.volumeAuthorizationLockManagePage); Get.toNamed(Routers.volumeAuthorizationLockManagePage);
// Navigator.pushNamed(context, Routers.volumeAuthorizationLockManagePage);
} else { } else {
logic.showToast("演示模式"); logic.showToast("演示模式");
} }
@ -281,6 +267,43 @@ class _AuthorizedAdminPageState extends State<AuthorizedAdminPage>
); );
} }
//
Widget keyRealNameWidget() {
return Column(
children: [
Obx(() => CommonItem(
leftTitel: TranslationLoader.lanKeys!.realNameAuthentication!.tr,
rightTitle: "",
isTipsImg: true,
isHaveLine:
logic.state.isRequireAuth.value == true ? true : false,
tipsImgAction: () {
ShowTipView().showSureAlertDialog(
"人脸实名认证指的是用户在使用手机APP开锁时需要先进行本人人脸验证验证通过才能开锁。".tr);
},
isHaveRightWidget: true,
rightWidget: SizedBox(
width: 60.w, height: 50.h, child: _realNameAuthSwitch()),
)),
Obx(() => Visibility(
visible: logic.state.isRequireAuth.value,
child: CommonItem(
leftTitel: '真实姓名'.tr,
rightTitle: "",
isHaveRightWidget: true,
isHaveLine: true,
rightWidget: getTFWidget(false, '请输入真实姓名'.tr, 3)))),
Obx(() => Visibility(
visible: logic.state.isRequireAuth.value,
child: CommonItem(
leftTitel: '身份证号'.tr,
rightTitle: "",
isHaveRightWidget: true,
rightWidget: getTFWidget(false, '请输入身份证号'.tr, 4)))),
],
);
}
// //
Widget sendElectronicKeySucceed() { Widget sendElectronicKeySucceed() {
return Column( return Column(
@ -336,11 +359,9 @@ class _AuthorizedAdminPageState extends State<AuthorizedAdminPage>
if (state.emailOrPhoneController.text.contains("@")) { if (state.emailOrPhoneController.text.contains("@")) {
Get.toNamed(Routers.sendEmailNotificationPage); Get.toNamed(Routers.sendEmailNotificationPage);
} else { } else {
// _openModalBottomSheet();
NativeInteractionTool() NativeInteractionTool()
.loadNativeShare(shareText: state.pwdShareStr); .loadNativeShare(shareText: state.pwdShareStr);
} }
// Get.toNamed(state.emailOrPhoneController.text.contains("@")? Routers.sendEmailNotificationPage:Routers.sendEmailNotificationPage);
}, },
), ),
SizedBox( SizedBox(
@ -349,7 +370,6 @@ class _AuthorizedAdminPageState extends State<AuthorizedAdminPage>
OutLineBtn( OutLineBtn(
btnName: '微信通知', btnName: '微信通知',
onClick: () { onClick: () {
// _openModalBottomSheet();
NativeInteractionTool() NativeInteractionTool()
.loadNativeShare(shareText: state.pwdShareStr); .loadNativeShare(shareText: state.pwdShareStr);
}, },
@ -357,12 +377,6 @@ class _AuthorizedAdminPageState extends State<AuthorizedAdminPage>
SizedBox( SizedBox(
height: 10.h, height: 10.h,
), ),
// OutLineBtn(
// btnName: '标记为:已入住',
// onClick: () {
// logic.updateRoomCheckIn();
// },
// ),
], ],
); );
} }
@ -384,9 +398,7 @@ class _AuthorizedAdminPageState extends State<AuthorizedAdminPage>
], ],
style: TextStyle( style: TextStyle(
fontSize: 22.sp, color: AppColors.darkGrayTextColor), fontSize: 22.sp, color: AppColors.darkGrayTextColor),
controller: lineIndex == 1 controller: logic.getCurrentController(lineIndex),
? state.emailOrPhoneController
: state.keyNameController,
autofocus: false, autofocus: false,
textAlign: TextAlign.end, textAlign: TextAlign.end,
decoration: InputDecoration( decoration: InputDecoration(
@ -408,15 +420,6 @@ class _AuthorizedAdminPageState extends State<AuthorizedAdminPage>
BorderSide(width: 0, color: Colors.transparent)), BorderSide(width: 0, color: Colors.transparent)),
contentPadding: const EdgeInsets.symmetric(vertical: 0), contentPadding: const EdgeInsets.symmetric(vertical: 0),
), ),
// decoration: InputDecoration(
// //
// contentPadding: const EdgeInsets.only(top: 12.0, bottom: 8.0),
// hintText: tfStr,
// hintStyle: TextStyle(
// color: AppColors.placeholderTextColor, fontSize: 22.sp),
// //线
// border: InputBorder.none,
// ),
), ),
), ),
SizedBox( SizedBox(
@ -460,7 +463,7 @@ class _AuthorizedAdminPageState extends State<AuthorizedAdminPage>
} }
// //
CupertinoSwitch _switch() { CupertinoSwitch _realNameAuthSwitch() {
return CupertinoSwitch( return CupertinoSwitch(
activeColor: CupertinoColors.activeBlue, activeColor: CupertinoColors.activeBlue,
trackColor: CupertinoColors.systemGrey5, trackColor: CupertinoColors.systemGrey5,
@ -469,6 +472,11 @@ class _AuthorizedAdminPageState extends State<AuthorizedAdminPage>
onChanged: (value) { onChanged: (value) {
setState(() { setState(() {
state.isAuthentication.value = !state.isAuthentication.value; state.isAuthentication.value = !state.isAuthentication.value;
if (state.isAuthentication.value == true) {
logic.keyCheckFace();
} else {
state.isRequireAuth.value = false;
}
}); });
}, },
); );
@ -631,11 +639,9 @@ class _AuthorizedAdminPageState extends State<AuthorizedAdminPage>
Tab _tab(ItemView item) { Tab _tab(ItemView item) {
return Tab( return Tab(
// text: item.title,
child: Container( child: Container(
width: 1.sw / 4, width: 1.sw / 4,
margin: EdgeInsets.all(10.w), margin: EdgeInsets.all(10.w),
// color: Colors.red,
child: Text( child: Text(
item.title, item.title,
textAlign: TextAlign.center, textAlign: TextAlign.center,

View File

@ -3,23 +3,27 @@ import 'package:flutter_native_contact_picker/flutter_native_contact_picker.dart
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/tools/dateTool.dart'; import 'package:star_lock/tools/dateTool.dart';
import '../../../lockMian/entity/lockListInfo_entity.dart';
class AuthorizedAdminState { class AuthorizedAdminState {
final TextEditingController emailOrPhoneController = TextEditingController(); /// final TextEditingController emailOrPhoneController =
final TextEditingController keyNameController = TextEditingController(); // TextEditingController(); ///
final TextEditingController keyNameController =
TextEditingController(); //
late TabController tabController; late TabController tabController;
TextEditingController realNameController = TextEditingController(); //
TextEditingController idCardController = TextEditingController(); //
final FlutterContactPicker contactPicker = FlutterContactPicker(); final FlutterContactPicker contactPicker = FlutterContactPicker();
late Contact contact; late Contact contact;
// final keyInfo = LockListInfoItemEntity().obs; var isAuthentication = false.obs; //
// final lockMainEntity = LockMainEntity().obs;
final isAuthentication = false.obs; //
final onlyManageYouCreatesUser = false.obs; // final onlyManageYouCreatesUser = false.obs; //
var beginDate = DateTool().dateToYMDHNString(DateTime.now().millisecondsSinceEpoch.toString()).obs; // var beginDate = DateTool()
var endDate = DateTool().dateToYMDHNString(DateTime.now().millisecondsSinceEpoch.toString()).obs;// .dateToYMDHNString(DateTime.now().millisecondsSinceEpoch.toString())
.obs; //
var endDate = DateTool()
.dateToYMDHNString(DateTime.now().millisecondsSinceEpoch.toString())
.obs; //
var isSendSuccess = false.obs; var isSendSuccess = false.obs;
var countryName = '中国'.obs; var countryName = '中国'.obs;
@ -31,9 +35,5 @@ class AuthorizedAdminState {
String pwdShareStr = '您好,您的授权管理员生成成功'; String pwdShareStr = '您好,您的授权管理员生成成功';
var addUserId = ''.obs; var addUserId = ''.obs;
// AuthorizedAdminState() { var isRequireAuth = false.obs; //
// Map map = Get.arguments;
// // lockMainEntity.value = map["lockMainEntity"];
// keyInfo.value = map["keyInfo"];
// }
} }

View File

@ -22,14 +22,14 @@ class AuthorizedAdminListLogic extends BaseGetXController {
pageNo: pageNo.toString(), pageNo: pageNo.toString(),
pageSize: pageSize.toString(), pageSize: pageSize.toString(),
startDate: '0', startDate: '0',
searchStr:state.searchStr.value); searchStr: state.searchStr.value);
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
if (pageNo == 1) { if (pageNo == 1) {
state.itemDataList.value = entity.data!.itemList!; state.itemDataList.value = entity.data!.itemList;
pageNo++; pageNo++;
} else { } else {
if (entity.data!.itemList!.isNotEmpty) { if (entity.data!.itemList.isNotEmpty) {
state.itemDataList.value.addAll(entity.data!.itemList!); state.itemDataList.addAll(entity.data!.itemList);
pageNo++; pageNo++;
} }
} }
@ -39,11 +39,8 @@ class AuthorizedAdminListLogic extends BaseGetXController {
// //
Future<void> deleteKeyRequest(String keyId, int includeUnderlings) async { Future<void> deleteKeyRequest(String keyId, int includeUnderlings) async {
ElectronicKeyListEntity entity = ElectronicKeyListEntity entity = await ApiRepository.to.deleteElectronicKey(
await ApiRepository.to.deleteElectronicKey( keyId: keyId, includeUnderlings: includeUnderlings);
keyId:keyId,
includeUnderlings: includeUnderlings
);
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
showToast("删除成功"); showToast("删除成功");
pageNo = 1; pageNo = 1;
@ -55,7 +52,8 @@ class AuthorizedAdminListLogic extends BaseGetXController {
StreamSubscription? _getAuthorizedAdminPageRefreshUIEvent; StreamSubscription? _getAuthorizedAdminPageRefreshUIEvent;
void _getAuthorizedAdminPageRefreshUIAction() { void _getAuthorizedAdminPageRefreshUIAction() {
// eventBus // eventBus
_getAuthorizedAdminPageRefreshUIEvent = eventBus.on<AuthorizedAdminPageRefreshUI>().listen((event) { _getAuthorizedAdminPageRefreshUIEvent =
eventBus.on<AuthorizedAdminPageRefreshUI>().listen((event) {
pageNo = 1; pageNo = 1;
mockNetworkDataRequest(); mockNetworkDataRequest();
}); });

View File

@ -11,7 +11,6 @@ import 'package:star_lock/tools/storage.dart';
import '../../../../appRouters.dart'; import '../../../../appRouters.dart';
import '../../../../app_settings/app_colors.dart'; import '../../../../app_settings/app_colors.dart';
import '../../../../tools/EasyRefreshTool.dart'; import '../../../../tools/EasyRefreshTool.dart';
import '../../../../tools/showIosTipView.dart';
import '../../../../tools/showTipView.dart'; import '../../../../tools/showTipView.dart';
import '../../../../tools/submitBtn.dart'; import '../../../../tools/submitBtn.dart';
import '../../../../tools/titleAppBar.dart'; import '../../../../tools/titleAppBar.dart';
@ -40,7 +39,7 @@ class _AuthorizedAdminListPageState extends State<AuthorizedAdminListPage> {
// //
var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot); var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
if (isDemoMode == false) { if (isDemoMode == false) {
logic.mockNetworkDataRequest().then((ElectronicKeyListEntity value){ logic.mockNetworkDataRequest().then((ElectronicKeyListEntity value) {
setState(() {}); setState(() {});
}); });
} }
@ -56,24 +55,24 @@ class _AuthorizedAdminListPageState extends State<AuthorizedAdminListPage> {
backgroundColor: AppColors.mainColor, backgroundColor: AppColors.mainColor,
), ),
body: EasyRefreshTool( body: EasyRefreshTool(
onRefresh: (){ onRefresh: () {
logic.pageNo = 1; logic.pageNo = 1;
mockRequest(); mockRequest();
}, },
onLoad: (){ onLoad: () {
mockRequest(); mockRequest();
}, },
child: Column( child: Column(
children: [ children: [
Expanded( Expanded(child: _buildMainUI()),
child:_buildMainUI()),
SizedBox( SizedBox(
height: 20.h, height: 20.h,
), ),
AddBottomWhiteBtn( AddBottomWhiteBtn(
btnName: TranslationLoader.lanKeys!.addAuthorizedAdmin!.tr, btnName: TranslationLoader.lanKeys!.addAuthorizedAdmin!.tr,
onClick: () { onClick: () {
Navigator.pushNamed(context, Routers.authorizedAdminPage).then((val) { Navigator.pushNamed(context, Routers.authorizedAdminPage)
.then((val) {
if (val != null) { if (val != null) {
logic.pageNo = 1; logic.pageNo = 1;
mockRequest(); mockRequest();
@ -93,116 +92,80 @@ class _AuthorizedAdminListPageState extends State<AuthorizedAdminListPage> {
return Obx(() => state.itemDataList.value.isEmpty return Obx(() => state.itemDataList.value.isEmpty
? NoData(noDataHeight: 1.sh - ScreenUtil().statusBarHeight - 90) ? NoData(noDataHeight: 1.sh - ScreenUtil().statusBarHeight - 90)
: SlidableAutoCloseBehavior( : SlidableAutoCloseBehavior(
child: ListView.separated( child: ListView.separated(
itemCount: state.itemDataList.value.length, itemCount: state.itemDataList.value.length,
itemBuilder: (c, index) { itemBuilder: (c, index) {
ElectronicKeyListItem indexEntity = state.itemDataList.value[index]; ElectronicKeyListItem indexEntity =
String useDateStr = ''; //使 state.itemDataList.value[index];
String keyStatus = ''; // String useDateStr = ''; //使
String keyStatus = ''; //
//使 //使
useDateStr = getUseDateStr(indexEntity); useDateStr = getUseDateStr(indexEntity);
// //
keyStatus = XSConstantMacro.getKeyStatusStr(indexEntity.keyStatus!); keyStatus =
XSConstantMacro.getKeyStatusStr(indexEntity.keyStatus!);
// //
bool isAdminKey = false; bool isAdminKey = false;
if (indexEntity.keyRight == 1) { if (indexEntity.keyRight == 1) {
isAdminKey = true; isAdminKey = true;
} else { } else {
isAdminKey = false; isAdminKey = false;
}
return Slidable(
key:ValueKey(indexEntity.keyId),
endActionPane: ActionPane(
extentRatio: 0.2,
motion: const ScrollMotion(),
children: [
SlidableAction(
onPressed: (BuildContext context){
ShowTipView().showDeleteAdministratorIsHaveAllDataDialog('同时删除其发送的所有钥匙,钥匙删除后不能恢复', (isAllData) {
logic.deleteKeyRequest(indexEntity.keyId.toString(), isAllData ? 1 : 0);
});
},
backgroundColor: Colors.red,
foregroundColor: Colors.white,
label: '删除',
padding: EdgeInsets.only(left: 5.w, right: 5.w),
),
],
),
child: _electronicKeyItem('images/controls_user.png', indexEntity.keyName!, useDateStr, keyStatus, isAdminKey, () {
Navigator.pushNamed(context, Routers.electronicKeyDetailPage, arguments: {
"itemData": indexEntity,
}).then((val) {
if (val != null) {
logic.mockNetworkDataRequest();
setState(() {});
} }
});
}),
);
// if (index < state.itemDataList.value.length) { return Slidable(
// return LeftSlideActions( key: ValueKey(indexEntity.keyId),
// // key: Key(indexEntity.lockId!.toString()), endActionPane: ActionPane(
// actionsWidth: 60, extentRatio: 0.2,
// actions: [ motion: const ScrollMotion(),
// _buildDeleteBtn(indexEntity), children: [
// ], SlidableAction(
// decoration: const BoxDecoration( onPressed: (BuildContext context) {
// borderRadius: BorderRadius.all(Radius.circular(1)), ShowTipView()
// ), .showDeleteAdministratorIsHaveAllDataDialog(
// child: _electronicKeyItem( '同时删除其发送的所有钥匙,钥匙删除后不能恢复', (isAllData) {
// 'images/controls_user.png', logic.deleteKeyRequest(indexEntity.keyId.toString(),
// indexEntity.keyName!, isAllData ? 1 : 0);
// useDateStr, });
// keyStatus, },
// isAdminKey, () { backgroundColor: Colors.red,
// Navigator.pushNamed( foregroundColor: Colors.white,
// context, Routers.electronicKeyDetailPage, label: '删除',
// arguments: {'itemData': indexEntity}).then((val) { padding: EdgeInsets.only(left: 5.w, right: 5.w),
// if (val != null) { ),
// logic.mockNetworkDataRequest(); ],
// setState(() {}); ),
// } child: _electronicKeyItem(
// }); 'images/controls_user.png',
// }), indexEntity.keyName!,
// ); useDateStr,
// } keyStatus,
return const SizedBox.shrink(); isAdminKey, () {
}, Navigator.pushNamed(
separatorBuilder: (BuildContext context, int index) { context, Routers.electronicKeyDetailPage,
return Divider( arguments: {
height: 1.h, "itemData": indexEntity,
color: AppColors.greyLineColor, }).then((val) {
); if (val != null) {
}, logic.mockNetworkDataRequest();
), setState(() {});
)); }
});
}),
);
},
separatorBuilder: (BuildContext context, int index) {
return Divider(
height: 1.h,
color: AppColors.greyLineColor,
);
},
),
));
} }
// void showIosTipViewDialog(
// BuildContext context, String keyId) {
// showDialog(
// context: context,
// builder: (BuildContext context) {
// return ShowIosTipView(
// title: "提示",
// tipTitle: "确定要删除吗?",
// sureClick: () {
// Get.back();
// logic.deleteKeyRequest(keyId);
// },
// cancelClick: () {
// Get.back();
// },
// );
// });
// }
//使 //使
String getUseDateStr(ElectronicKeyListItem indexEntity) { String getUseDateStr(ElectronicKeyListItem indexEntity) {
String useDateStr = ''; String useDateStr = '';
@ -216,48 +179,11 @@ class _AuthorizedAdminListPageState extends State<AuthorizedAdminListPage> {
useDateStr = useDateStr =
'${startDateStr.toLocal().toString().substring(0, 16)}-${endDateStr.toLocal().toString().substring(0, 16)}'; '${startDateStr.toLocal().toString().substring(0, 16)}-${endDateStr.toLocal().toString().substring(0, 16)}';
} else if (indexEntity.keyType == XSConstantMacro.keyTypeLong) { } else if (indexEntity.keyType == XSConstantMacro.keyTypeLong) {
//
// DateTime dateStr = DateTime.fromMillisecondsSinceEpoch(indexEntity.date!);
// useDateStr = '${dateStr.toLocal().toString().substring(0, 16)} 永久';
useDateStr = "永久"; useDateStr = "永久";
} }
// else if (indexEntity.keyType == XSConstantMacro.keyTypeOnce) {
// //
// // DateTime dateStr = DateTime.fromMillisecondsSinceEpoch(indexEntity.date!);
// // useDateStr = '${dateStr.toLocal().toString().substring(0, 16)} 单次';
// useDateStr = "单次";
// } else if (indexEntity.keyType == XSConstantMacro.keyTypeLoop) {
// //
// useDateStr = '循环';
// }
return useDateStr; return useDateStr;
} }
//
// String getKeyStatus(int? keyStatusFlag) {
// String keyStatus = '';
//
// if (keyStatusFlag == 110401) {
// //使
// keyStatus = '';
// } else if (keyStatusFlag == 110402) {
// //
// keyStatus = '待接收';
// } else if (keyStatusFlag == 110405) {
// //
// keyStatus = '已冻结';
// } else if (keyStatusFlag == 110408) {
// //
// keyStatus = '已删除';
// } else if (keyStatusFlag == 110410) {
// //
// keyStatus = '已重置';
// }
//
// return keyStatus;
// }
Widget _electronicKeyItem(String avatarURL, String receiveUser, Widget _electronicKeyItem(String avatarURL, String receiveUser,
String useDate, String keyStatus, bool isAdminKey, Function() action) { String useDate, String keyStatus, bool isAdminKey, Function() action) {
return GestureDetector( return GestureDetector(
@ -268,7 +194,11 @@ class _AuthorizedAdminListPageState extends State<AuthorizedAdminListPage> {
child: Row( child: Row(
children: [ children: [
SizedBox(width: 30.w), SizedBox(width: 30.w),
Image.asset(avatarURL, width: 60.w, height: 60.w,), Image.asset(
avatarURL,
width: 60.w,
height: 60.w,
),
SizedBox(width: 20.w), SizedBox(width: 20.w),
Expanded( Expanded(
child: Column( child: Column(
@ -281,14 +211,13 @@ class _AuthorizedAdminListPageState extends State<AuthorizedAdminListPage> {
child: Row( child: Row(
children: [ children: [
Flexible( Flexible(
child: Text( child: Text(receiveUser,
receiveUser,
maxLines: 1, maxLines: 1,
overflow: TextOverflow.ellipsis, overflow: TextOverflow.ellipsis,
style: TextStyle(fontSize: 24.sp, color: AppColors.blackColor) style: TextStyle(
), fontSize: 24.sp,
color: AppColors.blackColor)),
), ),
], ],
), ),
), ),
@ -321,80 +250,4 @@ class _AuthorizedAdminListPageState extends State<AuthorizedAdminListPage> {
), ),
); );
} }
// Widget _electronicKeyItem(String avatarURL, String receiveUser,
// String useDate, String keyStatus, bool isAdminKey, Function() action) {
// return GestureDetector(
// onTap: action,
// child: Container(
// height: 100.h,
// // margin: EdgeInsets.only(left: 20.w, right: 20.w, top: 20.w),
// // decoration: BoxDecoration(
// // color: Colors.white,
// // borderRadius: BorderRadius.circular(10.w),
// // ),
// child: Row(
// children: [
// SizedBox(
// width: 30.w,
// ),
// Image.asset(
// avatarURL,
// width: 60.w,
// height: 60.w,
// ),
// SizedBox(
// width: 20.w,
// ),
// Expanded(
// child: Column(
// mainAxisAlignment: MainAxisAlignment.center,
// children: [
// Row(
// mainAxisAlignment: MainAxisAlignment.start,
// children: [
// Text(
// receiveUser,
// style: TextStyle(
// fontSize: 24.sp, color: AppColors.blackColor),
// ),
// SizedBox(
// width: 8.w,
// ),
// Container(
// padding: EdgeInsets.only(
// left: 4.w, right: 4.w, top: 1.w, bottom: 1.w),
// decoration: BoxDecoration(
// color: AppColors.toBeReceiveBgColor,
// borderRadius: BorderRadius.circular(5.0),
// ),
// child: Text(
// keyStatus,
// style: TextStyle(color: Colors.red, fontSize: 16.sp),
// ),
// )
// ],
// ),
// SizedBox(height: 5.h),
// Row(
// mainAxisAlignment: MainAxisAlignment.start,
// children: [
// Text(
// useDate,
// style: TextStyle(
// fontSize: 18.sp,
// color: AppColors.placeholderTextColor),
// ),
// ],
// ),
// SizedBox(width: 20.h),
// ],
// ),
// ),
// SizedBox(width: 20.h),
// ],
// ),
// ),
// );
// }
} }

View File

@ -270,8 +270,6 @@ class _VolumeAuthorizationLockPageState
autofocus: false, autofocus: false,
textAlign: TextAlign.end, textAlign: TextAlign.end,
decoration: InputDecoration( decoration: InputDecoration(
//
// contentPadding: const EdgeInsets.only(top: 12.0, bottom: 8.0),
hintText: tfStr, hintText: tfStr,
hintStyle: TextStyle(fontSize: 22.sp), hintStyle: TextStyle(fontSize: 22.sp),
focusedBorder: const OutlineInputBorder( focusedBorder: const OutlineInputBorder(
@ -288,14 +286,6 @@ class _VolumeAuthorizationLockPageState
BorderSide(width: 0, color: Colors.transparent)), BorderSide(width: 0, color: Colors.transparent)),
contentPadding: const EdgeInsets.symmetric(vertical: 0), contentPadding: const EdgeInsets.symmetric(vertical: 0),
), ),
// decoration: InputDecoration(
// //
// contentPadding: const EdgeInsets.only(top: 12.0, bottom: 8.0),
// hintText: tfStr,
// hintStyle: TextStyle(fontSize: 22.sp),
// //线
// border: InputBorder.none,
// ),
), ),
), ),
SizedBox( SizedBox(

View File

@ -169,7 +169,6 @@ class ElectronicKeyDetailLogic extends BaseGetXController {
showToast("修改成功".tr, something: () { showToast("修改成功".tr, something: () {
eventBus.fire(ElectronicKeyListRefreshUI()); eventBus.fire(ElectronicKeyListRefreshUI());
eventBus.fire(AuthorizedAdminPageRefreshUI()); eventBus.fire(AuthorizedAdminPageRefreshUI());
Get.back();
}); });
} }
} }

View File

@ -2,9 +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:get/get_rx/src/rx_typedefs/rx_typedefs.dart';
import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyDetail/electronicKeyDetail_logic.dart'; import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyDetail/electronicKeyDetail_logic.dart';
import 'package:star_lock/tools/showCupertinoAlertView.dart';
import '../../../../../appRouters.dart'; import '../../../../../appRouters.dart';
import '../../../../../app_settings/app_colors.dart'; import '../../../../../app_settings/app_colors.dart';
@ -326,6 +324,7 @@ class _ElectronicKeyDetailPageState extends State<ElectronicKeyDetailPage> {
if (alertEnum == ShowAlertEnum.name) { if (alertEnum == ShowAlertEnum.name) {
logic.modifyKeyNameRequest(); logic.modifyKeyNameRequest();
} else { } else {
Get.back();
logic.updateRealNameInfoRequest(alertEnum); logic.updateRealNameInfoRequest(alertEnum);
} }
}, },

View File

@ -35,7 +35,9 @@ class ElectronicKeyDetailState {
keyName.value = itemData.value.keyName!; keyName.value = itemData.value.keyName!;
if (itemData.value.userIdCard != null) { if (itemData.value.userIdCard != null) {
getRealName.value = itemData.value.userIdCard!.realName ?? ""; getRealName.value = itemData.value.userIdCard!.realName ?? "";
changeRealNameController.text = getRealName.value;
getIDCardNumber.value = itemData.value.userIdCard!.idCardNumber ?? ""; getIDCardNumber.value = itemData.value.userIdCard!.idCardNumber ?? "";
changeIDCardController.text = getIDCardNumber.value;
} }
isRemoteUnlock.value = itemData.value.remoteEnable! == 1 ? true : false; isRemoteUnlock.value = itemData.value.remoteEnable! == 1 ? true : false;

View File

@ -142,7 +142,7 @@ class SendElectronicKeyViewLogic extends BaseGetXController {
? '1' ? '1'
: '2', : '2',
endDate: int.parse(endDate), endDate: int.parse(endDate),
faceAuthentication: state.isAuthentication == true ? '1' : '2', faceAuthentication: state.isAuthentication.value == true ? '1' : '2',
isCameraEnable: '2', isCameraEnable: '2',
isRemoteUnlock: state.isRemoteUnlock == true ? '1' : '2', isRemoteUnlock: state.isRemoteUnlock == true ? '1' : '2',
keyNameForAdmin: state.keyNameController.text, keyNameForAdmin: state.keyNameController.text,

View File

@ -43,18 +43,6 @@ class _LockOperatingRecordPageState extends State<LockOperatingRecordPage> {
onPressed: () async { onPressed: () async {
var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot); var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
if (isDemoMode == false) { if (isDemoMode == false) {
// JhPopMenus.showLinePop(context, clickCallback: (index, selText) {
// if (index == 0) {
// logic.mockNetworkDataRequest();
// } else if (index == 1) {
// logic.clearOperationRecordRequest();
// }
// }, listData: [
// {'text': '读取记录'},
// {'text': '清空记录'},
// {'text': '导出记录'},
// ]);
_openModalBottomSheet(); _openModalBottomSheet();
} else { } else {
// Get.toNamed(Routers.selectLockTypePage); // Get.toNamed(Routers.selectLockTypePage);
@ -67,20 +55,22 @@ class _LockOperatingRecordPageState extends State<LockOperatingRecordPage> {
), ),
body: Column( body: Column(
children: [ children: [
(state.keyInfos.value.isLockOwner == 1 || state.keyInfos.value.keyRight == 1) ? (state.keyInfos.value.isLockOwner == 1 ||
Column( state.keyInfos.value.keyRight == 1)
children: [ ? Column(
Container( children: [
padding: EdgeInsets.all(20.h), Container(
child: Text( padding: EdgeInsets.all(20.h),
TranslationLoader.lanKeys!.lockOperatingRecordTip!.tr, child: Text(
textAlign: TextAlign.start, TranslationLoader.lanKeys!.lockOperatingRecordTip!.tr,
style: TextStyle(fontSize: 20.sp), textAlign: TextAlign.start,
), style: TextStyle(fontSize: 20.sp),
), ),
_searchWidget(), ),
], _searchWidget(),
) : Container(), ],
)
: Container(),
SizedBox(height: 10.h), SizedBox(height: 10.h),
Expanded(child: _buildMainUI()), Expanded(child: _buildMainUI()),
], ],
@ -148,22 +138,6 @@ class _LockOperatingRecordPageState extends State<LockOperatingRecordPage> {
: NoData()); : NoData());
} }
Widget _dateItem(String lockDate) {
return Container(
height: 60.h,
// color: Colors.red,
padding: EdgeInsets.only(left: 20.h, right: 20.h),
child: Row(
children: [
Text(
lockDate,
style: TextStyle(fontSize: 24.sp, color: AppColors.blackColor),
),
],
),
);
}
String getTypeIcon(int type) { String getTypeIcon(int type) {
String title = 'images/controls_user.png'; String title = 'images/controls_user.png';
switch (type) { switch (type) {

View File

@ -14,7 +14,7 @@ class CatEyeWorkModeLogic extends BaseGetXController {
catEyeConfig: [ catEyeConfig: [
{ {
'catEyeMode': 'catEyeMode':
state.boolList.value.indexWhere((element) => element == true) + 1, state.boolList.indexWhere((element) => element == true) + 1,
'catEyeModeConfig': { 'catEyeModeConfig': {
'recordMode': state.lockSetInfoData.value.lockSettingInfo! 'recordMode': state.lockSetInfoData.value.lockSettingInfo!
.catEyeConfig!.isNotEmpty .catEyeConfig!.isNotEmpty
@ -63,24 +63,17 @@ class CatEyeWorkModeLogic extends BaseGetXController {
state.catEyeConfigData.value = state.catEyeConfigData.value =
entity.data!.lockSettingInfo!.catEyeConfig![0]; entity.data!.lockSettingInfo!.catEyeConfig![0];
// state.selectCatEyeWorkMode.value =
// state.catEyeConfigData.value.catEyeMode!;
if (state.catEyeConfigData.value.catEyeMode == if (state.catEyeConfigData.value.catEyeMode ==
XSConstantMacro.catEyeWorkModePowerSaving) { XSConstantMacro.catEyeWorkModePowerSaving) {
// state.boolList.value[0] = true;
state.boolList.value = [true, false, false, false]; state.boolList.value = [true, false, false, false];
} else if (state.catEyeConfigData.value.catEyeMode == } else if (state.catEyeConfigData.value.catEyeMode ==
XSConstantMacro.catEyeWorkModeStayCapture) { XSConstantMacro.catEyeWorkModeStayCapture) {
// state.boolList.value[1] = true;
state.boolList.value = [false, true, false, false]; state.boolList.value = [false, true, false, false];
} else if (state.catEyeConfigData.value.catEyeMode == } else if (state.catEyeConfigData.value.catEyeMode ==
XSConstantMacro.catEyeWorkModeRealTimeMonitoring) { XSConstantMacro.catEyeWorkModeRealTimeMonitoring) {
// state.boolList.value[2] = true;
state.boolList.value = [false, false, true, false]; state.boolList.value = [false, false, true, false];
} else if (state.catEyeConfigData.value.catEyeMode == } else if (state.catEyeConfigData.value.catEyeMode ==
XSConstantMacro.catEyeWorkModeCustom) { XSConstantMacro.catEyeWorkModeCustom) {
// state.boolList.value[3] = true;
state.boolList.value = [false, false, false, true]; state.boolList.value = [false, false, false, true];
} }
} }

View File

@ -137,24 +137,6 @@ class _CatEyeWorkModePageState extends State<CatEyeWorkModePage> {
for (int i = 0; i < state.boolList.value.length; i++) { for (int i = 0; i < state.boolList.value.length; i++) {
if (clickIndex == i) { if (clickIndex == i) {
state.boolList.value[clickIndex] = true; state.boolList.value[clickIndex] = true;
// switch (clickIndex) {
// case 0:
// state.selectCatEyeWorkMode.value =
// XSConstantMacro.catEyeWorkModePowerSaving;
// break;
// case 1:
// state.selectCatEyeWorkMode.value =
// XSConstantMacro.catEyeWorkModeStayCapture;
// break;
// case 2:
// state.selectCatEyeWorkMode.value =
// XSConstantMacro.catEyeWorkModeRealTimeMonitoring;
// break;
// case 3:
// state.selectCatEyeWorkMode.value =
// XSConstantMacro.catEyeWorkModeCustom;
// break;
// }
logic.updateCatEyeModeConfig(); logic.updateCatEyeModeConfig();
} else { } else {
state.boolList.value[i] = false; state.boolList.value[i] = false;

View File

@ -479,7 +479,6 @@ class NearbyLockLogic extends BaseGetXController {
token: token, token: token,
encrypt: false, encrypt: false,
).packageData()); ).packageData());
showTitleEasyLoading("连接设备中...");
} else if (deviceConnectionState == } else if (deviceConnectionState ==
BluetoothConnectionState.disconnected) {} BluetoothConnectionState.disconnected) {}
},isAddEquipment: true); },isAddEquipment: true);

View File

@ -279,20 +279,31 @@ class OTAProgressDialog extends StatelessWidget {
title: Text( title: Text(
'固件升级中'.tr, '固件升级中'.tr,
), ),
content: Row( content: Column(
children: [ children: [
Text( Padding(
'传输中'.tr, padding: EdgeInsets.only(top: 20.h, bottom: 10.h),
style: TextStyle(fontSize: 22.sp, color: AppColors.mainColor), child: Text(
'传输期间请勿离开当前页面'.tr,
style: TextStyle(fontSize: 20.sp, color: AppColors.blackColor),
),
), ),
SizedBox( Row(
width: 15.w, children: [
Text(
'传输中'.tr,
style: TextStyle(fontSize: 18.sp, color: AppColors.mainColor),
),
SizedBox(
width: 15.w,
),
Expanded(
child: LinearProgressIndicator(
value: logic.state.otaProgress.value,
color: AppColors.mainColor,
)),
],
), ),
Expanded(
child: LinearProgressIndicator(
value: logic.state.otaProgress.value,
color: AppColors.mainColor,
)),
], ],
), ),
actions: [ actions: [

View File

@ -1,25 +1,116 @@
class UseRecordListEntity { class UseRecordListEntity {
UseRecordListEntity({
this.description,
this.errorCode,
this.errorMsg,
});
UseRecordListEntity.fromJson(dynamic json) {
description = json['description'];
errorCode = json['errorCode'];
errorMsg = json['errorMsg'];
}
String? description;
int? errorCode; int? errorCode;
String? description;
String? errorMsg; String? errorMsg;
Data? data;
UseRecordListEntity(
{this.errorCode, this.description, this.errorMsg, this.data});
UseRecordListEntity.fromJson(Map<String, dynamic> json) {
errorCode = json['errorCode'];
description = json['description'];
errorMsg = json['errorMsg'];
data = json['data'] != null ? Data.fromJson(json['data']) : null;
}
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
final map = <String, dynamic>{}; final Map<String, dynamic> data = <String, dynamic>{};
map['description'] = description; data['errorCode'] = errorCode;
map['errorCode'] = errorCode; data['description'] = description;
map['errorMsg'] = errorMsg; data['errorMsg'] = errorMsg;
return map; if (this.data != null) {
data['data'] = this.data!.toJson();
}
return data;
}
}
class Data {
int? pageNo;
int? pageSize;
int? total;
List<UseItemData>? useRecordList;
Data({this.pageNo, this.pageSize, this.total, this.useRecordList});
Data.fromJson(Map<String, dynamic> json) {
pageNo = json['pageNo'];
pageSize = json['pageSize'];
total = json['total'];
if (json['list'] != null) {
useRecordList = <UseItemData>[];
json['list'].forEach((v) {
useRecordList!.add(UseItemData.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['pageNo'] = pageNo;
data['pageSize'] = pageSize;
data['total'] = total;
if (useRecordList != null) {
data['list'] = useRecordList!.map((v) => v.toJson()).toList();
}
return data;
}
}
class UseItemData {
int? id;
int? userId;
String? type;
String? receiverAccount;
String? realName;
int? authStatus;
int? lockId;
String? lockName;
int? consCount;
String? createdAt;
String? updatedAt;
UseItemData(
{this.id,
this.userId,
this.type,
this.receiverAccount,
this.realName,
this.authStatus,
this.lockId,
this.lockName,
this.consCount,
this.createdAt,
this.updatedAt});
UseItemData.fromJson(Map<String, dynamic> json) {
id = json['id'];
userId = json['user_id'];
type = json['type'];
receiverAccount = json['receiver_account'];
realName = json['real_name'];
authStatus = json['status'];
lockId = json['lock_id'];
lockName = json['lock_name'];
consCount = json['cons_count'];
createdAt = json['created_at'];
updatedAt = json['updated_at'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['user_id'] = userId;
data['type'] = type;
data['receiver_account'] = receiverAccount;
data['real_name'] = realName;
data['status'] = authStatus;
data['lock_id'] = lockId;
data['lock_name'] = lockName;
data['cons_count'] = consCount;
data['created_at'] = createdAt;
data['updated_at'] = updatedAt;
return data;
} }
} }

View File

@ -2,6 +2,7 @@ import 'dart:async';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/mine/valueAddedServices/advancedFunctionRecord/advancedFunctionRecord_entity.dart'; import 'package:star_lock/mine/valueAddedServices/advancedFunctionRecord/advancedFunctionRecord_entity.dart';
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesRecord/use_record_list_entity.dart';
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesRecord/value_added_services_record_state.dart'; import 'package:star_lock/mine/valueAddedServices/valueAddedServicesRecord/value_added_services_record_state.dart';
import 'package:star_lock/tools/baseGetXController.dart'; import 'package:star_lock/tools/baseGetXController.dart';
import '../../../network/api_repository.dart'; import '../../../network/api_repository.dart';
@ -11,6 +12,7 @@ class ValueAddedServicesRecordLogic extends BaseGetXController {
final ValueAddedServicesRecordState state = ValueAddedServicesRecordState(); final ValueAddedServicesRecordState state = ValueAddedServicesRecordState();
int buyPageNo = 1; int buyPageNo = 1;
int usePageNo = 1;
late String type; late String type;
@override @override
@ -41,10 +43,26 @@ class ValueAddedServicesRecordLogic extends BaseGetXController {
} }
} }
//使
Future<void> loadUseRecordList(bool load) async {
if (!load) {
usePageNo = 1;
}
UseRecordListEntity entity = await ApiRepository.to.getUseRecordList(
type: type,
pageNo: buyPageNo,
);
if (entity.errorCode!.codeIsSuccessful) {
state.useRecordList.value = entity.data!.useRecordList!;
state.useRecordList.refresh();
}
}
@override @override
void onReady() { void onReady() {
super.onReady(); super.onReady();
loadBuyRecordList(true); loadBuyRecordList(true);
loadUseRecordList(true);
} }
} }

View File

@ -3,6 +3,7 @@ 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/mine/valueAddedServices/advancedFunctionRecord/advancedFunctionRecord_entity.dart'; import 'package:star_lock/mine/valueAddedServices/advancedFunctionRecord/advancedFunctionRecord_entity.dart';
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesRecord/use_record_list_entity.dart';
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesRecord/value_added_services_record_logic.dart'; import 'package:star_lock/mine/valueAddedServices/valueAddedServicesRecord/value_added_services_record_logic.dart';
import 'package:star_lock/tools/noData.dart'; import 'package:star_lock/tools/noData.dart';
import '../../../app_settings/app_colors.dart'; import '../../../app_settings/app_colors.dart';
@ -45,10 +46,10 @@ class _ValueAddedServicesRealNamePageState
Obx(() => Expanded( Obx(() => Expanded(
child: TabBarView(children: [ child: TabBarView(children: [
_PurchaseRecords( _PurchaseRecords(
getRecordList: logic.state.buyRecordList.value, buyRecordList: logic.state.buyRecordList.value,
), ),
_PurchaseRecords( _UseRecordsTable(
getRecordList: logic.state.useRecordList.value, useRecordList: logic.state.useRecordList.value,
), ),
]), ]),
)), )),
@ -70,11 +71,11 @@ Widget tabTextItem(String tabText) {
); );
} }
//使 //
class _PurchaseRecords extends StatefulWidget { class _PurchaseRecords extends StatefulWidget {
final List getRecordList; final List buyRecordList;
const _PurchaseRecords({required this.getRecordList}); const _PurchaseRecords({required this.buyRecordList});
@override @override
State<_PurchaseRecords> createState() => _PurchaseRecordsState(); State<_PurchaseRecords> createState() => _PurchaseRecordsState();
@ -88,11 +89,11 @@ class _PurchaseRecordsState extends State<_PurchaseRecords> {
return EasyRefresh( return EasyRefresh(
onRefresh: () async {}, onRefresh: () async {},
onLoad: () async {}, onLoad: () async {},
child: widget.getRecordList.isNotEmpty child: widget.buyRecordList.isNotEmpty
? ListView.builder( ? ListView.builder(
itemCount: widget.getRecordList.length, itemCount: widget.buyRecordList.length,
itemBuilder: (BuildContext context, int index) { itemBuilder: (BuildContext context, int index) {
return _recordKeyItem(widget.getRecordList[index]); return _recordKeyItem(widget.buyRecordList[index]);
}) })
: NoData(), : NoData(),
); );
@ -143,3 +144,82 @@ class _PurchaseRecordsState extends State<_PurchaseRecords> {
); );
} }
} }
//使
class _UseRecordsTable extends StatefulWidget {
final List useRecordList;
const _UseRecordsTable({required this.useRecordList});
@override
State<_UseRecordsTable> createState() => _UseRecordsTableState();
}
class _UseRecordsTableState extends State<_UseRecordsTable> {
@override
Widget build(BuildContext context) {
return EasyRefresh(
onRefresh: () async {},
onLoad: () async {},
child: widget.useRecordList.isNotEmpty
? ListView.builder(
itemCount: widget.useRecordList.length,
itemBuilder: (BuildContext context, int index) {
return _recordKeyItem(widget.useRecordList[index]);
})
: NoData(),
);
}
Widget _recordKeyItem(UseItemData itemData) {
return Container(
color: Colors.white,
margin: EdgeInsets.only(left: 20.w, right: 20.w, top: 10.h),
padding:
EdgeInsets.only(left: 20.w, right: 20.w, top: 16.h, bottom: 16.h),
child: Column(
children: [
Row(
children: [
Text(
'${itemData.lockName ?? ""} ${itemData.realName ?? ""}',
style: TextStyle(
fontSize: 24.sp,
color: AppColors.blackColor,
fontWeight: FontWeight.bold),
),
Expanded(child: Container()),
itemData.authStatus == 0
? Container(
padding: EdgeInsets.only(
right: 6.w, left: 6.w, top: 2.h, bottom: 2.h),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(5.w),
color: AppColors.toBeReceiveBgColor,
),
child: Text('失败',
style: TextStyle(fontSize: 16.sp, color: Colors.red)),
)
: Container()
],
),
SizedBox(
height: 8.h,
),
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Text(
itemData.createdAt!.length > 10
? itemData.createdAt!.substring(0, 10)
: itemData.createdAt!,
textAlign: TextAlign.left,
style: TextStyle(
fontSize: 22.sp, color: AppColors.darkGrayTextColor))
],
),
],
),
);
}
}

View File

@ -1387,8 +1387,19 @@ class ApiRepository {
required int startTime, required int startTime,
required int endTime, required int endTime,
required int faceRight}) async { required int faceRight}) async {
final res = await apiProvider.addFaceData(lockId, faceName, faceNumber, final res = await apiProvider.addFaceData(
faceType, startDate, endDate, featureData, addType, weekDay, startTime, endTime, faceRight); lockId,
faceName,
faceNumber,
faceType,
startDate,
endDate,
featureData,
addType,
weekDay,
startTime,
endTime,
faceRight);
return AddFaceEntity.fromJson(res.body); return AddFaceEntity.fromJson(res.body);
} }
@ -1652,10 +1663,8 @@ class ApiRepository {
} }
// //
Future<PasswordKeyListEntity> keyboardPwdReset({ Future<PasswordKeyListEntity> keyboardPwdReset(
required String lockId, {required String lockId, required List passwordKey}) async {
required List passwordKey
}) async {
final res = await apiProvider.keyboardPwdReset(lockId, passwordKey); final res = await apiProvider.keyboardPwdReset(lockId, passwordKey);
return PasswordKeyListEntity.fromJson(res.body); return PasswordKeyListEntity.fromJson(res.body);
} }
@ -2031,7 +2040,7 @@ class ApiRepository {
return FaceAuthenticationEntity.fromJson(res.body); return FaceAuthenticationEntity.fromJson(res.body);
} }
// 使 //
Future<AdvancedFunctionRecordEntity> getBuyRecordList({ Future<AdvancedFunctionRecordEntity> getBuyRecordList({
required String type, required String type,
required int pageNo, required int pageNo,
@ -2043,7 +2052,7 @@ class ApiRepository {
return AdvancedFunctionRecordEntity.fromJson(res.body); return AdvancedFunctionRecordEntity.fromJson(res.body);
} }
// // 使
Future<UseRecordListEntity> getUseRecordList({ Future<UseRecordListEntity> getUseRecordList({
required String type, required String type,
required int pageNo, required int pageNo,