import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:star_lock/appRouters.dart'; import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart'; import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyDetail/electronicKeyDetail_page.dart'; import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyDetail/electronicKeyDetail_state.dart'; import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyList/entity/ElectronicKeyListEntity.dart'; import 'package:star_lock/mine/valueAddedServices/advancedFunctionRecord/advancedFunctionRecord_entity.dart'; import 'package:star_lock/network/api_repository.dart'; import 'package:star_lock/tools/baseGetXController.dart'; import 'package:star_lock/tools/showCupertinoAlertView.dart'; import '../../../../../tools/commonDataManage.dart'; import '../../../../../tools/custom_bottom_sheet.dart'; import '../../../../../tools/dateTool.dart'; import '../../../../../tools/eventBusEventManage.dart'; import '../../../../../tools/showTipView.dart'; import '../../../lockOperatingRecord/keyOperationRecord_entity.dart'; typedef BlockIsHaveAllDataCallback = void Function(bool isAllData); class ElectronicKeyDetailLogic extends BaseGetXController { final ElectronicKeyDetailState state = ElectronicKeyDetailState(); //修改钥匙名称请求 Future modifyKeyNameRequest() async { if (state.changeNameController.text.isEmpty) { showToast('请输入钥匙名称'.tr); return; } final KeyOperationRecordEntity entity = await ApiRepository.to .modifyKeyNameForAdmin(state.itemData.value.keyId.toString(), state.changeNameController.text, ''); if (entity.errorCode!.codeIsSuccessful) { state.itemData.value.keyName = state.changeNameController.text; state.keyName.value = state.itemData.value.keyName!; Get.back(); showToast('修改成功'.tr, something: () { eventBus.fire(ElectronicKeyListRefreshUI()); eventBus.fire(AuthorizedAdminPageRefreshUI()); }); } } //编辑电子钥匙有效期请求 updateType 1:仅管理自己创建的用户 2:远程开锁 Future updateKeyDateRequest(int updateType) async { final KeyOperationRecordEntity entity = await ApiRepository.to .updateKeyDate( keyId: state.itemData.value.keyId.toString(), lockId: state.itemData.value.lockId.toString(), endDate: state.endDate.value.toString(), startDate: state.starDate.value.toString(), weekDays: state.itemData.value.weekDays!, keyType: state.itemData.value.keyType!, startTime: int.parse(state.starTime.value), endTime: int.parse(state.endTime.value), isOnlyManageSelf: state.onlyManageYouCreatesUser.value == true ? 1 : 0, remoteEnable: state.isRemoteUnlock.value == true ? 1 : 2); if (entity.errorCode!.codeIsSuccessful) { showToast('修改成功'.tr, something: () { eventBus.fire(ElectronicKeyListRefreshUI()); eventBus.fire(AuthorizedAdminPageRefreshUI()); }); } } //删除电子钥匙名称请求 Future deleteKeyRequest(int includeUnderlings) async { final ElectronicKeyListEntity entity = await ApiRepository.to .deleteElectronicKey( keyId: state.itemData.value.keyId.toString(), includeUnderlings: includeUnderlings); if (entity.errorCode!.codeIsSuccessful) { showToast('删除成功'.tr, something: () { eventBus.fire(ElectronicKeyListRefreshUI()); eventBus.fire(AuthorizedAdminPageRefreshUI()); Get.back(); }); } } //设置授权管理员 Future setAdministrator() async { final ElectronicKeyListEntity entity = await ApiRepository.to.setAdministrator( keyId: state.itemData.value.keyId.toString(), ); if (entity.errorCode!.codeIsSuccessful) { showToast('设置成功'.tr, something: () { eventBus.fire(ElectronicKeyListRefreshUI()); eventBus.fire(AuthorizedAdminPageRefreshUI()); Get.back(); }); } } //取消授权管理员 Future cancelAdministrator() async { final ElectronicKeyListEntity entity = await ApiRepository.to.cancelAdministrator( keyId: state.itemData.value.keyId.toString(), ); if (entity.errorCode!.codeIsSuccessful) { showToast('设置成功'.tr, something: () { eventBus.fire(ElectronicKeyListRefreshUI()); eventBus.fire(AuthorizedAdminPageRefreshUI()); Get.back(); }); } } //冻结 Future freezeKey(int includeUnderlings) async { final ElectronicKeyListEntity entity = await ApiRepository.to.freezeKey( keyId: state.itemData.value.keyId.toString(), includeUnderlings: includeUnderlings); if (entity.errorCode!.codeIsSuccessful) { showToast('设置成功'.tr, something: () { eventBus.fire(ElectronicKeyListRefreshUI()); eventBus.fire(AuthorizedAdminPageRefreshUI()); Get.back(); }); } } //取消冻结 Future cancelFreeze(int includeUnderlings) async { final ElectronicKeyListEntity entity = await ApiRepository.to.cancelFreeze( keyId: state.itemData.value.keyId.toString(), includeUnderlings: includeUnderlings); if (entity.errorCode!.codeIsSuccessful) { showToast('设置成功'.tr, something: () { eventBus.fire(ElectronicKeyListRefreshUI()); eventBus.fire(AuthorizedAdminPageRefreshUI()); Get.back(); }); } } //检查实名认证状态 Future checkRealNameStatus(int realNameAuthStatus) async { //打开实名认证 必须输入身份证号和真实姓名 if (realNameAuthStatus == 1) { final AdvancedFunctionRecordEntity entity = await ApiRepository.to.keyCheckFace( lockId: CommonDataManage().currentKeyInfo.lockId ?? 0, ); if (entity.errorCode!.codeIsSuccessful) { if (state.getRealName.value.isEmpty || state.getIDCardNumber.value.isEmpty) { ShowCupertinoAlertView().showOpenAuthWithIDCardInfoAlert( (String? idCard, String? realName) { state.getIDCardNumber.value = idCard ?? ''; state.getRealName.value = realName ?? ''; updateRealNameInfoWithAuthStatus(realNameAuthStatus); }); } else { updateRealNameInfoWithAuthStatus(realNameAuthStatus); } } else if (entity.errorCode == 432) { //432--余量不足,需购买 ShowCupertinoAlertView().showBuyTipWithContentAlert( titleStr: '实名认证为付费功能,请购买后再使用'.tr, sureClick: () { Get.toNamed(Routers.advancedFeaturesWebPage, arguments: {'isShop': false}); }); } else if (entity.errorCode == 433) { //需联系管理员购买 ShowCupertinoAlertView().showContactAdministratorBuyAlert(); } } else { updateRealNameInfoWithAuthStatus(realNameAuthStatus); } } //更新钥匙实名认证信息--实名认证状态 Future updateRealNameInfoWithAuthStatus(int realNameAuthStatus) async { final KeyOperationRecordEntity entity = await ApiRepository.to .updateRealNameInfo( lockId: state.itemData.value.lockId ?? 0, keyId: state.itemData.value.keyId ?? 0, uid: state.itemData.value.uid ?? 0, faceAuthentication: realNameAuthStatus, realName: state.getRealName.value, idCardNumber: state.getIDCardNumber.value); if (entity.errorCode!.codeIsSuccessful) { state.isRealNameAuth.value = !state.isRealNameAuth.value; showToast('修改成功'.tr, something: () { eventBus.fire(ElectronicKeyListRefreshUI()); eventBus.fire(AuthorizedAdminPageRefreshUI()); }); } } //更新钥匙实名认证信息 Future updateRealNameInfoRequest(ShowAlertEnum alertEnum) async { switch (alertEnum) { case ShowAlertEnum.realName: if (state.changeRealNameController.text.isEmpty) { showToast('请输入真实姓名'.tr); return; } break; case ShowAlertEnum.idCardNumber: if (state.changeIDCardController.text.isEmpty) { showToast('请输入身份证号'.tr); return; } break; default: } final KeyOperationRecordEntity entity = await ApiRepository.to .updateRealNameInfo( lockId: state.itemData.value.lockId ?? 0, keyId: state.itemData.value.keyId ?? 0, uid: state.itemData.value.uid ?? 0, faceAuthentication: state.isRealNameAuth.value ? 1 : 2, realName: state.changeRealNameController.text, idCardNumber: state.changeIDCardController.text); if (entity.errorCode!.codeIsSuccessful) { if (alertEnum == ShowAlertEnum.realName) { state.itemData.value.userIdCard!.realName = state.changeRealNameController.text; state.getRealName.value = state.itemData.value.userIdCard!.realName!; } else if (alertEnum == ShowAlertEnum.idCardNumber) { state.itemData.value.userIdCard!.idCardNumber = state.changeIDCardController.text; state.getIDCardNumber.value = state.itemData.value.userIdCard!.idCardNumber!; } showToast('修改成功'.tr, something: () { eventBus.fire(ElectronicKeyListRefreshUI()); eventBus.fire(AuthorizedAdminPageRefreshUI()); }); } } String getKeyTypeShowDateTime() { String useDateStr = ''; if (state.keyType.value == 1) { useDateStr = '永久'.tr; } else if (state.keyType.value == 2) { useDateStr = '${DateTool().dateToYMDHNString(state.starDate.value)}\n${DateTool().dateToYMDHNString(state.endDate.value)}'; } else if (state.keyType.value == 3) { useDateStr = '单次'.tr; } else if (state.keyType.value == 4) { useDateStr = '${DateTool().dateToYMDString(state.starDate.value)}\n${DateTool().dateToYMDString(state.endDate.value)}'; } return useDateStr; } Future openModalBottomSheet(BuildContext context) async { List textList = []; final bool isAdminKey = state.itemData.value.keyRight == 1; final bool isLockOwner = CommonDataManage().currentKeyInfo.isLockOwner == 1; if (isAdminKey) { // 授权管理员 textList = [ if (state.itemData.value.keyStatus == XSConstantMacro.keyStatusFrozen) '取消冻结'.tr else '冻结'.tr, if (isLockOwner) '取消授权'.tr ]; } else if (isLockOwner) { // 锁拥有者 if (state.keyType.value == 1 || state.keyType.value == 2) { textList = [ if (state.itemData.value.keyStatus == XSConstantMacro.keyStatusFrozen) '取消冻结'.tr else '冻结'.tr, if (state.itemData.value.keyRight == 1) '取消授权'.tr else '授权'.tr ]; } else if (state.keyType.value == 4) { textList = [ if (state.itemData.value.keyStatus == XSConstantMacro.keyStatusFrozen) '取消冻结'.tr else '冻结'.tr ]; } } else { textList = [ if (state.itemData.value.keyStatus == XSConstantMacro.keyStatusFrozen) '取消冻结'.tr else '冻结'.tr, ]; } showModalBottomSheet( context: context, shape: RoundedRectangleBorder( borderRadius: BorderRadiusDirectional.circular(10)), builder: (BuildContext context) { return AlertBottomWidget( topTitle: '', items: textList, chooseCallback: (int value) { final int index = value; if (index == 0) { if (state.itemData.value.keyStatus == XSConstantMacro.keyStatusFrozen) { // 取消冻结 if (state.itemData.value.keyRight == 1) { // 管理员 ShowTipView().showDeleteAdministratorIsHaveAllDataDialog( '同时解冻其发送的钥匙'.tr, (bool isAllData) { cancelFreeze(isAllData ? 1 : 0); }); } else { ShowTipView() .showIosTipWithContentDialog('取消冻结会在用户APP连网后生效'.tr, () { cancelFreeze(0); }); } } else { if (state.itemData.value.keyRight == 1) { // 管理员 ShowTipView().showDeleteAdministratorIsHaveAllDataDialog( '同时冻结其发送的钥匙'.tr, (bool isAllData) { freezeKey(isAllData ? 1 : 0); }); } else { ShowTipView() .showIosTipWithContentDialog('冻结会在用户APP连网后生效'.tr, () { freezeKey(0); }); } } } else { // 取消/授权管理员 if (state.itemData.value.keyRight == 1) { // 管理员 ShowTipView().showIosTipWithContentDialog( '取消授权会在用户APP连网后生效'.tr, cancelAdministrator); } else { ShowTipView().showIosTipWithContentDialog( '授权用户拥有管理员的大部分权限,比如发送钥匙、发送密码'.tr, setAdministrator); } } }, ); }); } void deletKeyLogic() { if (state.itemData.value.keyRight == 1) { // 授权管理员 ShowTipView().showDeleteAdministratorIsHaveAllDataDialog( '同时删除其发送的所有钥匙,钥匙删除后不能恢复'.tr, (bool isAllData) { deleteKeyRequest(isAllData ? 1 : 0); }); } else { // 普通用户 ShowTipView().showIosTipWithContentDialog('删除钥匙会在用户APP连网后生效'.tr, () { deleteKeyRequest(0); }); } } TextEditingController getCurrentController(ShowAlertEnum alertEnum) { TextEditingController currentController = TextEditingController(); switch (alertEnum) { case ShowAlertEnum.name: currentController = state.changeNameController; break; case ShowAlertEnum.realName: currentController = state.changeRealNameController; break; case ShowAlertEnum.idCardNumber: currentController = state.changeIDCardController; break; default: } return currentController; } void noModificationAllowedDuringFreeze() { if (state.itemData.value.keyStatus == XSConstantMacro.keyStatusFrozen) { showToast('冻结状态下不允许修改钥匙权限'.tr); return; } } //检测实名认证是否支持开启 Future keyCheckFace() async { final AdvancedFunctionRecordEntity entity = await ApiRepository.to.keyCheckFace( lockId: CommonDataManage().currentKeyInfo.lockId ?? 0, ); if (entity.errorCode!.codeIsSuccessful) { //打开实名认证,需要弹出输入身份证信息框 state.isRequireAuth.value = true; state.isRealNameAuth.value = true; } else if (entity.errorCode == 432) { //432--余量不足,需购买 ShowCupertinoAlertView().showBuyTipWithContentAlert( titleStr: '实名认证为付费功能,请购买后再使用'.tr, sureClick: () { Get.toNamed(Routers.advancedFeaturesWebPage, arguments: {'isShop': false}); }); } else if (entity.errorCode == 433) { //需联系管理员购买 ShowCupertinoAlertView().showContactAdministratorBuyAlert(); } } @override void onReady() { // TODO: implement onReady super.onReady(); } @override void onInit() { // TODO: implement onInit super.onInit(); } @override void onClose() { // TODO: implement onClose super.onClose(); } }