diff --git a/star_lock/images/lan/lan_en.json b/star_lock/images/lan/lan_en.json index 90eb2734..9519b563 100644 --- a/star_lock/images/lan/lan_en.json +++ b/star_lock/images/lan/lan_en.json @@ -581,7 +581,7 @@ "您好,您的电子钥匙生成成功": "Hello, your electronic key is generated successfully", "生效时间不能小于当前时间": "The effective time cannot be less than the current time", "结束时间不能小于当前时间": "The end time cannot be less than the current time", - "是否是管理员": "Is it an administrator", + "是否为管理员": "Is it an administrator", "已连接到锁,请将卡靠近锁的读卡区": "Connected to the lock, please put the card close to the card reading area of the lock", "尝试连接设备...": "Trying to connect to the device...", "地理位置": "Geographical location", @@ -833,5 +833,12 @@ "姓名":"Name", "发送":"Send", "请确认姓名全名和身份证号码是否正确":"Please confirm that the full name and ID number are correct", - "传输期间请勿离开当前页面":"Do not leave the current page during transfer" + "传输期间请勿离开当前页面":"Do not leave the current page during transfer", + "机型": "models", + "硬件版本": "Hardware version", + "固件版本": "Firmware version", + "手动升级": "Manual upgrade", + "设备连接中...": "Device Connecting...", + "升级过程中无法开锁,请先开锁后再升级": "The lock cannot be unlocked during the upgrade, please unlock the lock before upgrading", + "钥匙无效": "The key is invalid" } diff --git a/star_lock/images/lan/lan_keys.json b/star_lock/images/lan/lan_keys.json index 7aaa9d43..19c60d8f 100644 --- a/star_lock/images/lan/lan_keys.json +++ b/star_lock/images/lan/lan_keys.json @@ -605,7 +605,7 @@ "您好,您的电子钥匙生成成功": "您好,您的电子钥匙生成成功", "生效时间不能小于当前时间": "生效时间不能小于当前时间", "结束时间不能小于当前时间": "结束时间不能小于当前时间", - "是否是管理员": "是否是管理员", + "是否为管理员": "是否为管理员", "已连接到锁,请将卡靠近锁的读卡区": "已连接到锁,请将卡靠近锁的读卡区", "尝试连接设备...": "尝试连接设备...", "地理位置": "地理位置", @@ -861,5 +861,12 @@ "姓名":"姓名", "发送":"发送", "请确认姓名全名和身份证号码是否正确":"请确认姓名全名和身份证号码是否正确", - "传输期间请勿离开当前页面":"传输期间请勿离开当前页面" + "传输期间请勿离开当前页面":"传输期间请勿离开当前页面", + "机型": "机型", + "硬件版本": "硬件版本", + "固件版本": "固件版本", + "手动升级": "手动升级", + "设备连接中...": "设备连接中...", + "升级过程中无法开锁,请先开锁后再升级": "升级过程中无法开锁,请先开锁后再升级", + "钥匙无效": "钥匙无效" } diff --git a/star_lock/images/lan/lan_zh.json b/star_lock/images/lan/lan_zh.json index 42188044..4cfe31db 100644 --- a/star_lock/images/lan/lan_zh.json +++ b/star_lock/images/lan/lan_zh.json @@ -1,273 +1,267 @@ { - "starLock":"星锁", - "lockThrough":"锁通通", - "clickUnlockAndHoldDownClose":"点击开锁,长按闭锁", - "checkingIn":"考勤", - "electronicKey":"电子钥匙", - "password":"密码", - "card":"卡", - "fingerprint":"指纹", - "remoteControl":"遥控", - "face":"人脸", - "operatingRecord":"操作记录", - "doorLockLog":"门锁日志", - "number":"号", - "additive":"添加者", - "addTime":"添加时间", - - "reset":"重置", - "sendKey":"发送钥匙", - "timeLimit":"限时", - "permanent":"永久", - "once":"单次", - "circulation":"循环", - "receiver":"接收者", - "pleaseEnterNumberOrEmail":"请输入手机号或者邮箱", - "name":"姓名", - "enterYourName":"请输入姓名", - "effectiveTime":"生效时间", - "failureTime":"失效时间", - "effectiveDate":"生效日期", - "failureDate":"失效日期", - "monday":"星期一", - "tuesday":"星期二", - "wednesday":"星期三", - "thursday":"星期四", - "friday":"星期五", - "saturday":"星期六", - "sunday":"星期日", - "mondayShort":"一", - "tuesdayShort":"二", - "wednesdayShort":"三", - "thursdayShort":"四", - "fridayShort":"五", - "saturdayShort":"六", - "sundayShort":"日", - - "realNameAuthentication":"实名认证", - "sendKeyBottomTip":"接收者在有效期内可以不限次数使用", - "send":"发送", - "periodValidity":"有效期", - "sendGroupKey":"群发钥匙", - "lock":"锁", - "pleaseAdd":"请添加", - "pleaseSelect":"请选择", - "remoteUnlockingAllowed":"允许远程开锁", - "pleaseEnter":"请输入", - "getPassword":"获取密码", - "custom":"自定义", - "clearAll":"清空", - "recursiveDevice":"循环方式", - "pleaseNameYourPassword":"请给密码命名", - "pleaseEnterDigitsNumber":"请输入6-9位数字", - "getPasswordTip1":"密码在24小时内至少要使用过一次,否则将无效", - "getPasswordTip2":"限时密码可以在有效期内不限次数使用 \n密码在生效后的24小时内至少要使用过一次,否则将失效", - "getPasswordTip3":"密码有限期为6个小时,只能使用一次", - "getPasswordTip4":"手动输入6-9位数字作为密码。可在锁旁边通过手机蓝牙添加,也可以通过网关远程添加", - "getPasswordTip5":"限时密码可以再有下期内不限次数使用 \n密码在生效后的24小时内至少要使用过一次,否则将失效", - "getPasswordTip6":"密码有效期为24小时,在锁上输入后,将使之前使用过的密码都失效", - "getTip":"获取", - "addTip":"添加", - "sender":"发送人", - "senderTime":"发送时间", - "keyDetail":"钥匙详情", - "detail":"详情", - "delete":"删除", - "passwordDetail":"密码详情", - "share":"分享", - "amend":"修改", - "sure":"确定", - "cancel":"取消", - "add":"添加", - "accountNumber":"账号", - "volumeAuthorizationLock":"批量授权锁", - "authorizedAdminTip":"授权管理员拥有操作这把锁的重要权限,请确保只发给我你信任的人", - "lockOperatingRecordTip":"只能保留一定时间内的记录,如果您需要保留历史记录,可以在右上角导出", - "rankingList":"排列榜", - "earlyArrivalList":"早到榜", - "lateList":"迟到榜", - "hardWorkingList":"勤奋榜", - "company":"公司", - "staff":"员工", - "work":"工作", - "workday":"工作日", - "holidays":"节假日", - "punchingMode":"打卡方式", - "whetherTheEmployeeHasAKey":"员工是否有钥匙", - "selectKey":"选择钥匙", - "officeHours":"上班时间", - "closingTime":"下班时间", - "thisWeek":"本周", - "singleDayWeekend":"单休", - "twoDaysOff":"双休", - "oddOrEvenDaysOff":"单双休", - "year":"年", - "month":"月", - "libertyDay":"放假日期", - "coverDate":"补班日期", - "addedHoliday":"添加假日", - "startDate":"开始日期", - "accessDate":"接入日期", - "mustFillIn":"必填", - "endDate":"结束日期", - "dailyCharts":"日榜", - "monthlyLeaderboard":"月榜", - "noAttendanceRecord":"无考勤记录", - "attendanceRecord":"考勤记录", - "everyoneIsVeryMotivated":"大家干劲十足", - "workingHoursWereNotReleased":"工作时长未出炉", - "beLate":"迟到", - "leaveEarly":"早退", - "noCardPunched":"未打卡", - "holidayInfo":"假日信息", - - "basicInformation":"基本信息", - "wirelessKeyboard":"无线键盘", - "doorMagnetic":"门磁", - "remoteUnlocking":"远程开锁", - "automaticBlocking":"自动闭锁", - "normallyOpenMode":"常开模式", - "automaticUnLock":"自动开锁", - "automaticUnLockTip":"开启后锁将在常开模式开始时自动打开", - "lockSound":"锁声音", - "burglarAlarm":"防撬报警", - "resetButton":"重置键", - "lockTime":"锁时间", - "diagnose":"诊断", - "uploadData":"上传数据", - "importOtherLockData":"导入其他锁数据", - "lockEscalation":"锁升级", - "markedHouseState":"标记房态", - "unlockReminder":"开锁提醒", - "unlockQRCode":"微信二维码", - "lockNumber":"锁编号", - "electricQuantity":"电量", - "lockName":"名称", - "lockGrouping":"锁分组", - "selectGroup":"选择分组", - "createNewGroup":"创建新分组", - "adminOpenLockPassword":"管理员开锁密码", - "update":"更新", - "updateElectricQuantityTip":"电量信息可以通过网关远程更新,或通过手机蓝牙在锁旁边更新", - "adminOpenLockPasswordTip":"如果你在锁上修改过密码,锁内实际有效密码与这里显示的可能不同", - "updateLockAdminPassword":"上传锁内管理员密码", - "whenScreenFlashesClickNext":"当屏幕闪烁时,点击下一步", - "theScreenNeverFlickered":"屏幕一直没有闪烁", - "enterNumberOrPressSet":"输入*529#或按设置键", - "theLocationOfTheSetKeyWillBeDifferent":"设置键的位置会有差异", - "pressAndHoldTheResetButtonTwoSeconds":"长按重置键2秒", - "nearbyEquipment":"附近的设备", - "noData":"暂无数据", - "doorMagneticListTopTip":"通过门磁可查询门的开、关状态。每把锁咳添加一个门磁", - "remoteUnlockingPageTip":"功能开启后,你将可以通过网关远程开锁。此功能的开启和关闭只能在锁附近通过手机蓝牙进行。", - "currentMode":"当前模式", - "delayTime":"延迟时间", - "automaticBlockingTip":"经过以上设定的时间,锁会自动关闭。开启或修改设置后,请先开一次锁,使时间生效", - "time":"时间", - "normallyOpen":"常开", - "date":"日期", - "begin":"开始", - "end":"结束", - "allDay":"全天", - "save":"保存", - "normallyOpenModeTip":"在设置的常开时间内,锁被打开后将一直处于打开的状态,直到被手动关闭", - "pleaseSelectLockVolume":"请选择锁音量", - "lockSoundTip":"功能开启后,你将可以听到智能锁的提示音。包括电量过低,密码错误等提示。", - "low":"低", - "lower":"较低", - "medium":"中", - "higher":"较高", - "high":"高", - "burglarAlarmTip":"开启后,锁被撬动时,会发出报警声", - "resetButtonTip1":"开启后,可通过长按锁上的重置键来用APP重新添加", - "resetButtonTip2":"关闭后,重置键无效,锁要通过app删除后才能重新添加", - "calibrationTime":"校准时间", - "setTheDSTMode":"夏令时模式设置", - "diagnoseTip":"诊断是读取锁内的配置信息并上传,以便工作人员分析故障的原因", - "uploading":"上传", - "uploadDataTip":"本操作将上传锁内数据到服务器,过程可能需要几分钟,请耐心等待", - "importOtherLockDataTip":"请选择要从哪把锁导入", - "haveNewVersion":"有新版本", - "currentVersion":"当前版本", - "newVersion":"新版本", - "upgrade":"升级", - "leisure":"空闲", - "checkedIn":"已入住", - - "lanEnglish":"英文", - "lanChinese":"中文", - "multilingual":"多语言", - "addLock":"添加锁", - "lockAddress":"锁地址", - "selectLockType":"选择锁类型", - "videoIntercomDoorLock":"可视对讲门锁", - "NFCPassiveLock":"NFC无源锁", - "addDevice":"添加设备", - "gateway":"网关", - "message":"消息", - "supportStaff":"客服", - "set":"设置", - "moreServices":"更多服务", - - "moreSet":"更多设置", - "prompTone":"提示音", - "touchUnlock":"触摸开锁", - "pushNotification":"消息推送", - "lockUserManagement":"锁用户管理", - "ownedKey":"拥有的钥匙", - "authorityManagement":"批量授权", - "associatedDevice":"关联设备", - "associatedName":"关联姓名", - "device":"设备", - "authorizedAdmin":"授权管理员", - "addAuthorizedAdmin":"添加授权管理员", - "lockGroup":"锁分组", - "transferSmartLock":"转移智能锁", - "selectiveLock":"选择锁", - "recipientInformation":"接收人信息", - "transferGateway":"转移网关", - "multiLanguage":"多语言", - "lockScreen":"锁屏", - "closed":"已关闭", - "opened":"已开启", - "close":"关闭", - "open":"开启", - "hideInvalidUnlockPermissions":"隐藏无效开锁权限", - "appUnlockRequiresMobilePhoneAccessToTheLock":"APP开锁时需手机连网的锁", - "valueAddedServices":"增值服务", - "about":"关于", - "userAgreement":"用户协议", - "privacyPolicy":"隐私政策", - "personalInformationCollectionList":"个人信息收集清单", - "applicationPermissionDescription":"应用权限说明", - "thirdPartyInformationSharingList":"第三方信息共享清单", - "logout":"退出", - "deleteAccount":"删除账号", - "personalInformation":"个人信息", - "avatar":"头像", - "nickName":"昵称", - "changeNickName":"修改昵称", - "modifyAccount":"修改账号", - "resetPasswords":"重置密码", - "safetyProblem":"安全问题", - "modifyAccountTip":"为了你的账号安全,修改账号前请先使用验证码验证", - "pleaseEnterAccountNumber":"请输入账号", - "pleaseEnterNewAccountNumber":"请输入新账号", - "changeIphoneTip":"找回密码和登录新设备时,可通过绑定的手机验证", - "changeEmailTip":"找回密码和登录新设备时,可通过绑定的邮箱验证", - "goBind":"去绑定", - "originalPassword":"原密码", - "newPassword":"新密码", - "surePassword":"确认密码", - "safetyProblemTip":"当你手机丢了,可以通过回答设置的安全问题来登录新设备", - "problemOne":"问题一", - "problemTwo":"问题二", - "problemThree":"问题三", - "pleaseEnterYourAnswer":"请输入你的答案", - "aboutToExpire":"即将到期", - "changeName":"修改名称", - "deAuthorize":"去授权", - + "starLock": "星锁", + "lockThrough": "锁通通", + "clickUnlockAndHoldDownClose": "点击开锁,长按闭锁", + "checkingIn": "考勤", + "electronicKey": "电子钥匙", + "password": "密码", + "card": "卡", + "fingerprint": "指纹", + "remoteControl": "遥控", + "face": "人脸", + "operatingRecord": "操作记录", + "doorLockLog": "门锁日志", + "number": "号", + "additive": "添加者", + "addTime": "添加时间", + "reset": "重置", + "sendKey": "发送钥匙", + "timeLimit": "限时", + "permanent": "永久", + "once": "单次", + "circulation": "循环", + "receiver": "接收者", + "pleaseEnterNumberOrEmail": "请输入手机号或者邮箱", + "name": "姓名", + "enterYourName": "请输入姓名", + "effectiveTime": "生效时间", + "failureTime": "失效时间", + "effectiveDate": "生效日期", + "failureDate": "失效日期", + "monday": "星期一", + "tuesday": "星期二", + "wednesday": "星期三", + "thursday": "星期四", + "friday": "星期五", + "saturday": "星期六", + "sunday": "星期日", + "mondayShort": "一", + "tuesdayShort": "二", + "wednesdayShort": "三", + "thursdayShort": "四", + "fridayShort": "五", + "saturdayShort": "六", + "sundayShort": "日", + "realNameAuthentication": "实名认证", + "sendKeyBottomTip": "接收者在有效期内可以不限次数使用", + "send": "发送", + "periodValidity": "有效期", + "sendGroupKey": "群发钥匙", + "lock": "锁", + "pleaseAdd": "请添加", + "pleaseSelect": "请选择", + "remoteUnlockingAllowed": "允许远程开锁", + "pleaseEnter": "请输入", + "getPassword": "获取密码", + "custom": "自定义", + "clearAll": "清空", + "recursiveDevice": "循环方式", + "pleaseNameYourPassword": "请给密码命名", + "pleaseEnterDigitsNumber": "请输入6-9位数字", + "getPasswordTip1": "密码在24小时内至少要使用过一次,否则将无效", + "getPasswordTip2": "限时密码可以在有效期内不限次数使用 \n密码在生效后的24小时内至少要使用过一次,否则将失效", + "getPasswordTip3": "密码有限期为6个小时,只能使用一次", + "getPasswordTip4": "手动输入6-9位数字作为密码。可在锁旁边通过手机蓝牙添加,也可以通过网关远程添加", + "getPasswordTip5": "限时密码可以再有下期内不限次数使用 \n密码在生效后的24小时内至少要使用过一次,否则将失效", + "getPasswordTip6": "密码有效期为24小时,在锁上输入后,将使之前使用过的密码都失效", + "getTip": "获取", + "addTip": "添加", + "sender": "发送人", + "senderTime": "发送时间", + "keyDetail": "钥匙详情", + "detail": "详情", + "delete": "删除", + "passwordDetail": "密码详情", + "share": "分享", + "amend": "修改", + "sure": "确定", + "cancel": "取消", + "add": "添加", + "accountNumber": "账号", + "volumeAuthorizationLock": "批量授权锁", + "authorizedAdminTip": "授权管理员拥有操作这把锁的重要权限,请确保只发给我你信任的人", + "lockOperatingRecordTip": "只能保留一定时间内的记录,如果您需要保留历史记录,可以在右上角导出", + "rankingList": "排列榜", + "earlyArrivalList": "早到榜", + "lateList": "迟到榜", + "hardWorkingList": "勤奋榜", + "company": "公司", + "staff": "员工", + "work": "工作", + "workday": "工作日", + "holidays": "节假日", + "punchingMode": "打卡方式", + "whetherTheEmployeeHasAKey": "员工是否有钥匙", + "selectKey": "选择钥匙", + "officeHours": "上班时间", + "closingTime": "下班时间", + "thisWeek": "本周", + "singleDayWeekend": "单休", + "twoDaysOff": "双休", + "oddOrEvenDaysOff": "单双休", + "year": "年", + "month": "月", + "libertyDay": "放假日期", + "coverDate": "补班日期", + "addedHoliday": "添加假日", + "startDate": "开始日期", + "accessDate": "接入日期", + "mustFillIn": "必填", + "endDate": "结束日期", + "dailyCharts": "日榜", + "monthlyLeaderboard": "月榜", + "noAttendanceRecord": "无考勤记录", + "attendanceRecord": "考勤记录", + "everyoneIsVeryMotivated": "大家干劲十足", + "workingHoursWereNotReleased": "工作时长未出炉", + "beLate": "迟到", + "leaveEarly": "早退", + "noCardPunched": "未打卡", + "holidayInfo": "假日信息", + "basicInformation": "基本信息", + "wirelessKeyboard": "无线键盘", + "doorMagnetic": "门磁", + "remoteUnlocking": "远程开锁", + "automaticBlocking": "自动闭锁", + "normallyOpenMode": "常开模式", + "automaticUnLock": "自动开锁", + "automaticUnLockTip": "开启后锁将在常开模式开始时自动打开", + "lockSound": "锁声音", + "burglarAlarm": "防撬报警", + "resetButton": "重置键", + "lockTime": "锁时间", + "diagnose": "诊断", + "uploadData": "上传数据", + "importOtherLockData": "导入其他锁数据", + "lockEscalation": "锁升级", + "markedHouseState": "标记房态", + "unlockReminder": "开锁提醒", + "unlockQRCode": "微信二维码", + "lockNumber": "锁编号", + "electricQuantity": "电量", + "lockName": "名称", + "lockGrouping": "锁分组", + "selectGroup": "选择分组", + "createNewGroup": "创建新分组", + "adminOpenLockPassword": "管理员开锁密码", + "update": "更新", + "updateElectricQuantityTip": "电量信息可以通过网关远程更新,或通过手机蓝牙在锁旁边更新", + "adminOpenLockPasswordTip": "如果你在锁上修改过密码,锁内实际有效密码与这里显示的可能不同", + "updateLockAdminPassword": "上传锁内管理员密码", + "whenScreenFlashesClickNext": "当屏幕闪烁时,点击下一步", + "theScreenNeverFlickered": "屏幕一直没有闪烁", + "enterNumberOrPressSet": "输入*529#或按设置键", + "theLocationOfTheSetKeyWillBeDifferent": "设置键的位置会有差异", + "pressAndHoldTheResetButtonTwoSeconds": "长按重置键2秒", + "nearbyEquipment": "附近的设备", + "noData": "暂无数据", + "doorMagneticListTopTip": "通过门磁可查询门的开、关状态。每把锁咳添加一个门磁", + "remoteUnlockingPageTip": "功能开启后,你将可以通过网关远程开锁。此功能的开启和关闭只能在锁附近通过手机蓝牙进行。", + "currentMode": "当前模式", + "delayTime": "延迟时间", + "automaticBlockingTip": "经过以上设定的时间,锁会自动关闭。开启或修改设置后,请先开一次锁,使时间生效", + "time": "时间", + "normallyOpen": "常开", + "date": "日期", + "begin": "开始", + "end": "结束", + "allDay": "全天", + "save": "保存", + "normallyOpenModeTip": "在设置的常开时间内,锁被打开后将一直处于打开的状态,直到被手动关闭", + "pleaseSelectLockVolume": "请选择锁音量", + "lockSoundTip": "功能开启后,你将可以听到智能锁的提示音。包括电量过低,密码错误等提示。", + "low": "低", + "lower": "较低", + "medium": "中", + "higher": "较高", + "high": "高", + "burglarAlarmTip": "开启后,锁被撬动时,会发出报警声", + "resetButtonTip1": "开启后,可通过长按锁上的重置键来用APP重新添加", + "resetButtonTip2": "关闭后,重置键无效,锁要通过app删除后才能重新添加", + "calibrationTime": "校准时间", + "setTheDSTMode": "夏令时模式设置", + "diagnoseTip": "诊断是读取锁内的配置信息并上传,以便工作人员分析故障的原因", + "uploading": "上传", + "uploadDataTip": "本操作将上传锁内数据到服务器,过程可能需要几分钟,请耐心等待", + "importOtherLockDataTip": "请选择要从哪把锁导入", + "haveNewVersion": "有新版本", + "currentVersion": "当前版本", + "newVersion": "新版本", + "upgrade": "升级", + "leisure": "空闲", + "checkedIn": "已入住", + "lanEnglish": "英文", + "lanChinese": "中文", + "multilingual": "多语言", + "addLock": "添加锁", + "lockAddress": "锁地址", + "selectLockType": "选择锁类型", + "videoIntercomDoorLock": "可视对讲门锁", + "NFCPassiveLock": "NFC无源锁", + "addDevice": "添加设备", + "gateway": "网关", + "message": "消息", + "supportStaff": "客服", + "set": "设置", + "moreServices": "更多服务", + "moreSet": "更多设置", + "prompTone": "提示音", + "touchUnlock": "触摸开锁", + "pushNotification": "消息推送", + "lockUserManagement": "锁用户管理", + "ownedKey": "拥有的钥匙", + "authorityManagement": "批量授权", + "associatedDevice": "关联设备", + "associatedName": "关联姓名", + "device": "设备", + "authorizedAdmin": "授权管理员", + "addAuthorizedAdmin": "添加授权管理员", + "lockGroup": "锁分组", + "transferSmartLock": "转移智能锁", + "selectiveLock": "选择锁", + "recipientInformation": "接收人信息", + "transferGateway": "转移网关", + "multiLanguage": "多语言", + "lockScreen": "锁屏", + "closed": "已关闭", + "opened": "已开启", + "close": "关闭", + "open": "开启", + "hideInvalidUnlockPermissions": "隐藏无效开锁权限", + "appUnlockRequiresMobilePhoneAccessToTheLock": "APP开锁时需手机连网的锁", + "valueAddedServices": "增值服务", + "about": "关于", + "userAgreement": "用户协议", + "privacyPolicy": "隐私政策", + "personalInformationCollectionList": "个人信息收集清单", + "applicationPermissionDescription": "应用权限说明", + "thirdPartyInformationSharingList": "第三方信息共享清单", + "logout": "退出", + "deleteAccount": "删除账号", + "personalInformation": "个人信息", + "avatar": "头像", + "nickName": "昵称", + "changeNickName": "修改昵称", + "modifyAccount": "修改账号", + "resetPasswords": "重置密码", + "safetyProblem": "安全问题", + "modifyAccountTip": "为了你的账号安全,修改账号前请先使用验证码验证", + "pleaseEnterAccountNumber": "请输入账号", + "pleaseEnterNewAccountNumber": "请输入新账号", + "changeIphoneTip": "找回密码和登录新设备时,可通过绑定的手机验证", + "changeEmailTip": "找回密码和登录新设备时,可通过绑定的邮箱验证", + "goBind": "去绑定", + "originalPassword": "原密码", + "newPassword": "新密码", + "surePassword": "确认密码", + "safetyProblemTip": "当你手机丢了,可以通过回答设置的安全问题来登录新设备", + "problemOne": "问题一", + "problemTwo": "问题二", + "problemThree": "问题三", + "pleaseEnterYourAnswer": "请输入你的答案", + "aboutToExpire": "即将到期", + "changeName": "修改名称", + "deAuthorize": "去授权", "designation": "名称", "state": "状态", "wifiName": "WiFi名称", @@ -297,163 +291,146 @@ "preferredDNS": "首选DNS", "alternativeDNS": "备选DNS", "noStaticIPIsUsed": "不使用静态IP", - - "allLock":"所有锁", - "searchAllLockType":"搜索所有锁类型", - "doorLock":"门锁", - "padlock":"挂锁", - "safeLock":"保险箱锁", - "intelligentLockCore":"智能锁芯", - "itelligentAccessControl":"智能门禁", - "parkingLock":"车位锁", - "bicycleLock":"自行车锁", - "longRangeControl":"远程控制", - "lightTouchScreen":"摸亮触摸屏", - "lightTouchScreenTip":"摸亮触摸屏,锁进入可添加状态,点击下一步", - "next":"下一步", - "nearbyLock":"附近的锁", - "addSuccessfullyPleaseRename":"如需修改名字请重新命名,点击确定添加锁", - "whenAddingLockThePhoneMustBeNextToTheLock":"添加锁时,手机必须在锁旁边", - - "login":"登录", - "register":"注册", - "forgetPassword":"忘记密码", - "readAndAgree":"我已阅读并同意", - "verificationCode":"验证码", - "registerPasswordTip":"密码必须是8-20位,至少包括数字/字母/符号中的2种", - "iphone":"手机", - "email":"邮箱", - "mobileNumber":"手机号", - "countryAndRegion":"国家/地区", - "select":"选择", - "getVerificationCode":"获取验证码", - - "businessCooperation":"商务合作", - "officialWebsite":"官网", - "computerWebVersion":"电脑网页版", - "hotelSystem":"酒店系统", - "manualWebVersion":"说明书网页版", - "introduce":"介绍", - - "note":"短信", - "mail":"邮件", - "advancedFunction":"高级功能", - "pushMessage":"推送", - "recordsRetention":"记录保存", - - "smsBuyTip":"您可通过短信将密码、电子钥匙信息发给接收人。", - "emailBuyTip":"您可通过邮件将密码、电子钥匙信息发给接收人。", - "currentRemainingQuantity":"当前剩余数量", - "buy":"购买", - "customSMSTemplate":"自定义短信模版", - "customMailTemplate":"自定义邮件模版", - "record":"记录", - - "buyRealNameTip":"给用户发送电子钥匙时,可以要求其开锁前先进行人脸识别,以保证是他本人在操作。人脸实名认证调用国家公安系统接口,为付费功能,请购买次数后再使用。", - "buyRealNameSelectYouWantBuyTip":"请选择你希望的实名认证频数", - "forTheFirstTime":"仅首次", - "onceDay":"每日一次", - "weekOnce":"每周一次", - "monthOnce":"每月一次", - - "currentState":"当前状态", - "onTrial":"试用中", - "haveNotOpened":"未开通", - "advancedFeaturesAndBenefitsContent":"高级功能权益内容", - "smsTemplate":"短信模板", - "emailTemplate":"邮件模板", - "cardIssuingtool":"发卡工具", - "titleForBuyingAdvancedFeatures":"购买高级功能须知", - "tipsForBuyingAdvancedFeatures":"更多的高级功能正在开发中,如果您需要这些功能,欢迎根据锁的数量开通服务。高级功能仅能用于您自己的锁。如果您是授权管理员,请联系锁的最高管理员开通服务。", - "freeTrial":"免费体验", - "openNow":"立即开通", - - "buySMS":"购买短信", - "buyMail":"购买邮件", - "buyRealNameAuthenticationTimes":"购买实名认证次数", - "enablingAdvancedFeatures":"开通高级功能", - "chooseAPackage":"选择套餐", - "modeOfPayment":"支付方式", - "alipay":"支付宝", - "goToPay":"去支付", - - "customTemplatesTip":"你可以自己定义模版的内容,用于发送密码或电子钥匙信息给他人", - "haveOpened":"已开通", - "unHaveOpenedTip1":"该功能是高级功能,请开通后再使用", - "unHaveOpenedTip2":"高级功能仅能用于你自己的锁", - "freeTrialKeywords":"免费试用", - "goToTheOpen":"去开通", - "creatingANewTemplate":"新建模板", - "type":"类型", - "templateContent":"模版内容", - "preview":"预览", - "hello":"你好", - "yourRoomIs":"您的房间是", - "roomName":"房间名", - "theCodeToOpenTheDoorIs":"开门密码是", - "templateTip1":"输入密码后请按#号键或其他开锁键结束。密码生效后24小时内至少要使用一次,否则将失效", - "templateTip2":"你收到一把电子钥匙,请使用小程序开门。", - "templateTip3":"或安装App来开门。", - "expectedNotoCount":"预计产生短信条数", - + "allLock": "所有锁", + "searchAllLockType": "搜索所有锁类型", + "doorLock": "门锁", + "padlock": "挂锁", + "safeLock": "保险箱锁", + "intelligentLockCore": "智能锁芯", + "itelligentAccessControl": "智能门禁", + "parkingLock": "车位锁", + "bicycleLock": "自行车锁", + "longRangeControl": "远程控制", + "lightTouchScreen": "摸亮触摸屏", + "lightTouchScreenTip": "摸亮触摸屏,锁进入可添加状态,点击下一步", + "next": "下一步", + "nearbyLock": "附近的锁", + "addSuccessfullyPleaseRename": "如需修改名字请重新命名,点击确定添加锁", + "whenAddingLockThePhoneMustBeNextToTheLock": "添加锁时,手机必须在锁旁边", + "login": "登录", + "register": "注册", + "forgetPassword": "忘记密码", + "readAndAgree": "我已阅读并同意", + "verificationCode": "验证码", + "registerPasswordTip": "密码必须是8-20位,至少包括数字/字母/符号中的2种", + "iphone": "手机", + "email": "邮箱", + "mobileNumber": "手机号", + "countryAndRegion": "国家/地区", + "select": "选择", + "getVerificationCode": "获取验证码", + "businessCooperation": "商务合作", + "officialWebsite": "官网", + "computerWebVersion": "电脑网页版", + "hotelSystem": "酒店系统", + "manualWebVersion": "说明书网页版", + "introduce": "介绍", + "note": "短信", + "mail": "邮件", + "advancedFunction": "高级功能", + "pushMessage": "推送", + "recordsRetention": "记录保存", + "smsBuyTip": "您可通过短信将密码、电子钥匙信息发给接收人。", + "emailBuyTip": "您可通过邮件将密码、电子钥匙信息发给接收人。", + "currentRemainingQuantity": "当前剩余数量", + "buy": "购买", + "customSMSTemplate": "自定义短信模版", + "customMailTemplate": "自定义邮件模版", + "record": "记录", + "buyRealNameTip": "给用户发送电子钥匙时,可以要求其开锁前先进行人脸识别,以保证是他本人在操作。人脸实名认证调用国家公安系统接口,为付费功能,请购买次数后再使用。", + "buyRealNameSelectYouWantBuyTip": "请选择你希望的实名认证频数", + "forTheFirstTime": "仅首次", + "onceDay": "每日一次", + "weekOnce": "每周一次", + "monthOnce": "每月一次", + "currentState": "当前状态", + "onTrial": "试用中", + "haveNotOpened": "未开通", + "advancedFeaturesAndBenefitsContent": "高级功能权益内容", + "smsTemplate": "短信模板", + "emailTemplate": "邮件模板", + "cardIssuingtool": "发卡工具", + "titleForBuyingAdvancedFeatures": "购买高级功能须知", + "tipsForBuyingAdvancedFeatures": "更多的高级功能正在开发中,如果您需要这些功能,欢迎根据锁的数量开通服务。高级功能仅能用于您自己的锁。如果您是授权管理员,请联系锁的最高管理员开通服务。", + "freeTrial": "免费体验", + "openNow": "立即开通", + "buySMS": "购买短信", + "buyMail": "购买邮件", + "buyRealNameAuthenticationTimes": "购买实名认证次数", + "enablingAdvancedFeatures": "开通高级功能", + "chooseAPackage": "选择套餐", + "modeOfPayment": "支付方式", + "alipay": "支付宝", + "goToPay": "去支付", + "customTemplatesTip": "你可以自己定义模版的内容,用于发送密码或电子钥匙信息给他人", + "haveOpened": "已开通", + "unHaveOpenedTip1": "该功能是高级功能,请开通后再使用", + "unHaveOpenedTip2": "高级功能仅能用于你自己的锁", + "freeTrialKeywords": "免费试用", + "goToTheOpen": "去开通", + "creatingANewTemplate": "新建模板", + "type": "类型", + "templateContent": "模版内容", + "preview": "预览", + "hello": "你好", + "yourRoomIs": "您的房间是", + "roomName": "房间名", + "theCodeToOpenTheDoorIs": "开门密码是", + "templateTip1": "输入密码后请按#号键或其他开锁键结束。密码生效后24小时内至少要使用一次,否则将失效", + "templateTip2": "你收到一把电子钥匙,请使用小程序开门。", + "templateTip3": "或安装App来开门。", + "expectedNotoCount": "预计产生短信条数", "templateTip4": "提示:向其他人发送消息时,关键宇", - "and":"和", - "willBeReplacedWithTheActualValue":"将替换为实际值", - "downloadLink":"下载链接", - - "lockScreenTip":"功能开启后,需使用指纹、人脸或账号密码来打开 APP。3分钟内不需要再次验证", - "hideInvalidUnlockPermissionsTip":"功能开启后,已失效较长时间的密码、电子钥匙、卡、指纹等开锁权限将被隐藏,不在列表里显示。", - "appUnlockRequiresMobilePhoneAccessToTheLockTip":"对于选中的这些锁,当用户用APP开锁时,他的手机需要是连网的,否则无法开锁", - "checkAll":"全选", - - "wifiDistributionNetwork":"WiFi配网", - "configuringWiFi":"配置WiFi", - "pleaseEnterWifiName":"请输入WiFi名字", - "wifiPwd":"WiFi名字", - "pleaseEnterWifiPwd":"请输入WiFi密码", - "edit":"编辑", - "stressFingerprint":"胁迫指纹", - "effectiveDay":"有效日", - "stressCard":"胁迫卡", - "stressPassword":"胁迫密码", - - "whetherTheEmployeeHasPassword":"员工是否有密码", - "whetherTheEmployeeHasCard":"员工是否有卡", - "whetherTheEmployeeHasFingerprint":"员工是否有指纹", - "selectPassword":"选择密码", - "selectCard":"选择卡", - "selectFingerprint":"选择指纹", - "getKey":"获取钥匙", - "getCard":"获取卡", - "getFingerprint":"获取指纹", - "safeVerify":"安全验证", - "deleteAccountTips":"删除账号后,你的所有信息及相关记录都会从平台彻底删除,且不可恢复,是否删除?", - - "humanFace":"人脸", - "monitoring":"监控", - "videoLog":"视频日志", - "messageReminding":"消息提醒", - "superAdmin":"超级管理员", - "normalUser":"普通用户", - "gatewayDevice":"网关设备", - - "illumination":"照明", - "doorOpener":"开门器", - "faceUnlocks":"面容开锁", - "catEyeSet":"猫眼设置", - "openingDirectionSet":"开门方向设置", - "motorPowerSetting":"电机功率设置", - "bluetoothBroadcast":"蓝牙广播", - "whetherInternetRequiredWhenUnlocking":"开锁时是否需联网", - - "selectTheLockToJoinTheGroup":"选择要加入分组的锁", - "lockTrCount":"锁数量", - "xiaomiIOTPlatform":"小米IOT平台", - "connectBlueErrorTip":"未连接到设备,请确保在设备附近,设备未被连接,设备已打开", + "and": "和", + "willBeReplacedWithTheActualValue": "将替换为实际值", + "downloadLink": "下载链接", + "lockScreenTip": "功能开启后,需使用指纹、人脸或账号密码来打开 APP。3分钟内不需要再次验证", + "hideInvalidUnlockPermissionsTip": "功能开启后,已失效较长时间的密码、电子钥匙、卡、指纹等开锁权限将被隐藏,不在列表里显示。", + "appUnlockRequiresMobilePhoneAccessToTheLockTip": "对于选中的这些锁,当用户用APP开锁时,他的手机需要是连网的,否则无法开锁", + "checkAll": "全选", + "wifiDistributionNetwork": "WiFi配网", + "configuringWiFi": "配置WiFi", + "pleaseEnterWifiName": "请输入WiFi名字", + "wifiPwd": "WiFi名字", + "pleaseEnterWifiPwd": "请输入WiFi密码", + "edit": "编辑", + "stressFingerprint": "胁迫指纹", + "effectiveDay": "有效日", + "stressCard": "胁迫卡", + "stressPassword": "胁迫密码", + "whetherTheEmployeeHasPassword": "员工是否有密码", + "whetherTheEmployeeHasCard": "员工是否有卡", + "whetherTheEmployeeHasFingerprint": "员工是否有指纹", + "selectPassword": "选择密码", + "selectCard": "选择卡", + "selectFingerprint": "选择指纹", + "getKey": "获取钥匙", + "getCard": "获取卡", + "getFingerprint": "获取指纹", + "safeVerify": "安全验证", + "deleteAccountTips": "删除账号后,你的所有信息及相关记录都会从平台彻底删除,且不可恢复,是否删除?", + "humanFace": "人脸", + "monitoring": "监控", + "videoLog": "视频日志", + "messageReminding": "消息提醒", + "superAdmin": "超级管理员", + "normalUser": "普通用户", + "gatewayDevice": "网关设备", + "illumination": "照明", + "doorOpener": "开门器", + "faceUnlocks": "面容开锁", + "catEyeSet": "猫眼设置", + "openingDirectionSet": "开门方向设置", + "motorPowerSetting": "电机功率设置", + "bluetoothBroadcast": "蓝牙广播", + "whetherInternetRequiredWhenUnlocking": "开锁时是否需联网", + "selectTheLockToJoinTheGroup": "选择要加入分组的锁", + "lockTrCount": "锁数量", + "xiaomiIOTPlatform": "小米IOT平台", + "connectBlueErrorTip": "未连接到设备,请确保在设备附近,设备未被连接,设备已打开", "pleaseEnterAGroupName": "请输入分组名称", "hint": "提示", "areYouSureYouWantToDeleteIt": "确定要删除吗?", - "faceUnlocksSet": "面容开锁设置", "automaticBrighteningScreen": "自动亮屏", "sensingDistance": "感应距离", @@ -464,60 +441,56 @@ "closeRange": "近距离", "addAndUseFaceWhenUnlocking": "添加和使用面容开锁时", "addAndUseFaceWhenUnlockingTip": "\n1、请尽量保持单人在门前操作;\n2、请站立在门锁正前方约0.5~0.8米,面向门锁;\n3、请保持脸部无遮挡,露出五官;\n4、面容识别异常时,可触摸数字键盘任意按键,手动重启人脸识别。", - "second": "秒", "motorPowerSettingTip": "请根据门锁实际情况,请谨慎选择电机功率:", "miniwatt": "小功率:", "miniwattTip": "耗电少", "highPower": "大功率:", "highPowerTip": "如果开锁时锁舌不能正常收回,,或需要带动\n天地钩,建议选择大功率。此时耗电将会\n增加。", - "openingDirectionSetTip": "请谨慎选择您家的开门方向(如果选择错误,将无法正常开关门):", "openLeft": "左开", "openRight": "右开", "judgmentMethod": "判断方法:\n", "judgmentMethodContent": "人站在屋外,面向入户门。\n如果门的合页或门轴在左边,则门是左开;\n如果门的合页或门轴在右边,则门是右开。\n如果设置错误,将无法正常开关门。\n建议由安装或维修人员操作。", - "customMode": "自定义模式", "videoSlot": "录像时段", - - "密码":"密码", - "卡":"卡", - "指纹":"指纹", - "人脸":"人脸", - "配件商城":"配件商城", - "公司名称":"公司名称", - "修改公司名字":"修改公司名字", - "请输入公司名字":"请输入公司名字", - "提示":"提示", - "是否删除?":"是否删除?", - "员工信息":"员工信息", - "员工":"员工", - "打卡方式无效":"打卡方式无效", - "中国":"中国", - "选择钥匙":"选择钥匙", - "编辑":"编辑", - "无":"无", - "有":"有", - "请输入姓名":"请输入姓名", - "获取人脸":"获取人脸", - "选择密码":"选择密码", - "选择卡":"选择卡", - "选择指纹":"选择指纹", - "选择人脸":"选择人脸", - "员工是否有人脸":"员工是否有人脸", - "同时删除员工钥匙":"同时删除员工钥匙", - "删除":"删除", - "确定要删除员工吗?":"确定要删除员工吗?", - "月统计":"月统计", - "迟到":"迟到", - "早退":"早退", - "钥匙将在":"钥匙将在", - "天后失效":"天后失效", - "锁电量更新时间:":"锁电量更新时间:", - "新增配件":"新增配件", - "请在锁旁边完成第一次开锁":"请在锁旁边完成第一次开锁", - "正在开锁中...":"正在开锁中...", + "密码": "密码", + "卡": "卡", + "指纹": "指纹", + "人脸": "人脸", + "配件商城": "配件商城", + "公司名称": "公司名称", + "修改公司名字": "修改公司名字", + "请输入公司名字": "请输入公司名字", + "提示": "提示", + "是否删除?": "是否删除?", + "员工信息": "员工信息", + "员工": "员工", + "打卡方式无效": "打卡方式无效", + "中国": "中国", + "选择钥匙": "选择钥匙", + "编辑": "编辑", + "无": "无", + "有": "有", + "请输入姓名": "请输入姓名", + "获取人脸": "获取人脸", + "选择密码": "选择密码", + "选择卡": "选择卡", + "选择指纹": "选择指纹", + "选择人脸": "选择人脸", + "员工是否有人脸": "员工是否有人脸", + "同时删除员工钥匙": "同时删除员工钥匙", + "删除": "删除", + "确定要删除员工吗?": "确定要删除员工吗?", + "月统计": "月统计", + "迟到": "迟到", + "早退": "早退", + "钥匙将在": "钥匙将在", + "天后失效": "天后失效", + "锁电量更新时间:": "锁电量更新时间:", + "新增配件": "新增配件", + "请在锁旁边完成第一次开锁": "请在锁旁边完成第一次开锁", + "正在开锁中...": "正在开锁中...", "你的钥匙": "你的钥匙", "常开模式启动!长按闭锁": "常开模式启动!长按闭锁", "演示模式": "演示模式", @@ -607,7 +580,7 @@ "您好,您的电子钥匙生成成功": "您好,您的电子钥匙生成成功", "生效时间不能小于当前时间": "生效时间不能小于当前时间", "结束时间不能小于当前时间": "结束时间不能小于当前时间", - "是否是管理员": "是否是管理员", + "是否为管理员": "是否为管理员", "已连接到锁,请将卡靠近锁的读卡区": "已连接到锁,请将卡靠近锁的读卡区", "尝试连接设备...": "尝试连接设备...", "地理位置": "地理位置", @@ -708,9 +681,8 @@ "厂商": "厂商", "型号": "型号", "密码生成后,请在当日23:59前使用一次进行激活,否则过0点后未激活则失效。密码激活后,有效期内不限次数使用。": "密码生成后,请在当日23:59前使用一次进行激活,否则过0点后未激活则失效。密码激活后,有效期内不限次数使用。", - "密码生成后,请在当日23:59前使用,否则过0点后失效。清空码用于清空今天0点之前生成的所有密码。":"密码生成后,请在当日23:59前使用,否则过0点后失效。清空码用于清空今天0点之前生成的所有密码。", - "密码不一致哦":"密码不一致哦", - + "密码生成后,请在当日23:59前使用,否则过0点后失效。清空码用于清空今天0点之前生成的所有密码。": "密码生成后,请在当日23:59前使用,否则过0点后失效。清空码用于清空今天0点之前生成的所有密码。", + "密码不一致哦": "密码不一致哦", "相机": "相机", "相册": "相册", "读写": "读写", @@ -727,143 +699,145 @@ "请手动在系统设置中开启": "请手动在系统设置中开启", "权限以继续使用应用": "权限以继续使用应用。", "去设置": "去设置", - - "虹膜":"虹膜", - "手掌":"手掌", - - "商城":"商城", - "我的":"我的", - "微信公众号推送":"微信公众号推送", - "开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置":"开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置", - "蓝牙":"蓝牙", - "需要访问蓝牙权限才能使用添加钥匙功能的位置信息":"需要访问蓝牙权限才能使用添加钥匙功能的位置信息", - "请输入Email":"请输入Email", - "请输入手机号":"请输入手机号", - "家人到家":"家人到家", - "添加家人":"添加家人", - "若锁没有联网,除电子钥匙外,密码、卡、指纹等开门提醒无法及时发送,请根据你的实际情况选择":"若锁没有联网,除电子钥匙外,密码、卡、指纹等开门提醒无法及时发送,请根据你的实际情况选择", - "消息提醒":"消息提醒", - "开门通知":"开门通知", - "N天未开门":"N天未开门", - "门未关好":"门未关好", - "防拆报警":"防拆报警", - "低电量提醒":"低电量提醒", - "胁迫开门":"胁迫开门", - "有人按门铃":"有人按门铃", - "有人出现在门口":"有人出现在门口", - "提醒方式":"提醒方式", - "电子钥匙":"电子钥匙", - "开门方式":"开门方式", - "请选择":"请选择", - "家人":"家人", - "保存":"保存", - "APP推送":"APP推送", - "管理员":"管理员", - "未启用":"未启用", - "已启用":"已启用", - "省电模式":"省电模式", - "逗留抓拍模式":"逗留抓拍模式", - "实时监控模式":"实时监控模式", - "自定义模式":"自定义模式", - "秒":"秒", - "猫眼设置":"猫眼设置", - "猫眼工作模式":"猫眼工作模式", - "自动亮屏":"自动亮屏", - "亮屏持续时间":"亮屏持续时间", - "逗留警告":"逗留警告", - "异常警告":"异常警告", - "短信提醒":"短信提醒", - "邮件提醒":"邮件提醒", - "关锁":"关锁", - "功能":"功能", - "配件":"配件", - "N天未开门提醒":"N天未开门提醒", - "当被胁迫要求强行开锁时,使用胁迫指纹会触发报警,报警消息会推送给管理员,该功能需要锁联网":"当被胁迫要求强行开锁时,使用胁迫指纹会触发报警,报警消息会推送给管理员,该功能需要锁联网", - "胁迫指纹":"胁迫指纹", - "指纹列表":"指纹列表", - "经过以上设定的时间,锁没有被开启,系统会给指定对象发送提醒消息,该功能需要锁联网":"经过以上设定的时间,锁没有被开启,系统会给指定对象发送提醒消息,该功能需要锁联网", - "打开提醒后,当锁电量低于20%、10%和5%,系统会给指定对象发送提醒消息。电量读取方式:网关读取或APP读取。":"打开提醒后,当锁电量低于20%、10%和5%,系统会给指定对象发送提醒消息。电量读取方式:网关读取或APP读取。", - "门未开时间":"门未开时间", - "添加和使用面容开锁时:":"添加和使用面容开锁时:", - "云存":"云存", - "本地":"本地", - "3天滚动储存":"3天滚动储存", - "去升级":"去升级", - "下载列表":"下载列表", - "已下载":"已下载", - "全部视频":"全部视频", - "已为本设备免费提供3大滚动视频储存服务":"已为本设备免费提供3大滚动视频储存服务", - "视频播放":"视频播放", - "全选":"全选", - "请选择要删除的视频":"请选择要删除的视频", - "请选择要下载的视频":"请选择要下载的视频", - "欢迎使用":"欢迎使用", + "虹膜": "虹膜", + "手掌": "手掌", + "商城": "商城", + "我的": "我的", + "微信公众号推送": "微信公众号推送", + "开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置": "开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置", + "蓝牙": "蓝牙", + "需要访问蓝牙权限才能使用添加钥匙功能的位置信息": "需要访问蓝牙权限才能使用添加钥匙功能的位置信息", + "请输入Email": "请输入Email", + "请输入手机号": "请输入手机号", + "家人到家": "家人到家", + "添加家人": "添加家人", + "若锁没有联网,除电子钥匙外,密码、卡、指纹等开门提醒无法及时发送,请根据你的实际情况选择": "若锁没有联网,除电子钥匙外,密码、卡、指纹等开门提醒无法及时发送,请根据你的实际情况选择", + "消息提醒": "消息提醒", + "开门通知": "开门通知", + "N天未开门": "N天未开门", + "门未关好": "门未关好", + "防拆报警": "防拆报警", + "低电量提醒": "低电量提醒", + "胁迫开门": "胁迫开门", + "有人按门铃": "有人按门铃", + "有人出现在门口": "有人出现在门口", + "提醒方式": "提醒方式", + "电子钥匙": "电子钥匙", + "开门方式": "开门方式", + "请选择": "请选择", + "家人": "家人", + "保存": "保存", + "APP推送": "APP推送", + "管理员": "管理员", + "未启用": "未启用", + "已启用": "已启用", + "省电模式": "省电模式", + "逗留抓拍模式": "逗留抓拍模式", + "实时监控模式": "实时监控模式", + "自定义模式": "自定义模式", + "秒": "秒", + "猫眼设置": "猫眼设置", + "猫眼工作模式": "猫眼工作模式", + "自动亮屏": "自动亮屏", + "亮屏持续时间": "亮屏持续时间", + "逗留警告": "逗留警告", + "异常警告": "异常警告", + "短信提醒": "短信提醒", + "邮件提醒": "邮件提醒", + "关锁": "关锁", + "功能": "功能", + "配件": "配件", + "N天未开门提醒": "N天未开门提醒", + "当被胁迫要求强行开锁时,使用胁迫指纹会触发报警,报警消息会推送给管理员,该功能需要锁联网": "当被胁迫要求强行开锁时,使用胁迫指纹会触发报警,报警消息会推送给管理员,该功能需要锁联网", + "胁迫指纹": "胁迫指纹", + "指纹列表": "指纹列表", + "经过以上设定的时间,锁没有被开启,系统会给指定对象发送提醒消息,该功能需要锁联网": "经过以上设定的时间,锁没有被开启,系统会给指定对象发送提醒消息,该功能需要锁联网", + "打开提醒后,当锁电量低于20%、10%和5%,系统会给指定对象发送提醒消息。电量读取方式:网关读取或APP读取。": "打开提醒后,当锁电量低于20%、10%和5%,系统会给指定对象发送提醒消息。电量读取方式:网关读取或APP读取。", + "门未开时间": "门未开时间", + "添加和使用面容开锁时:": "添加和使用面容开锁时:", + "云存": "云存", + "本地": "本地", + "3天滚动储存": "3天滚动储存", + "去升级": "去升级", + "下载列表": "下载列表", + "已下载": "已下载", + "全部视频": "全部视频", + "已为本设备免费提供3大滚动视频储存服务": "已为本设备免费提供3大滚动视频储存服务", + "视频播放": "视频播放", + "全选": "全选", + "请选择要删除的视频": "请选择要删除的视频", + "请选择要下载的视频": "请选择要下载的视频", + "欢迎使用": "欢迎使用", "用户协议和隐私政策概要": "用户协议和隐私政策概要", "协议概要": "协议概要", - "感谢您使用本应用。我们非常重视您的个人信息和隐私保护,在使用本产品之前,请认真阅读":"感谢您使用本应用。我们非常重视您的个人信息和隐私保护,在使用本产品之前,请认真阅读", - "《用户协议》":"《用户协议》", - "和":"和", + "感谢您使用本应用。我们非常重视您的个人信息和隐私保护,在使用本产品之前,请认真阅读": "感谢您使用本应用。我们非常重视您的个人信息和隐私保护,在使用本产品之前,请认真阅读", + "《用户协议》": "《用户协议》", + "和": "和", "《隐私政策》": "《隐私政策》", "的全部内容。点击“同意”即表示您同意并接受全部条款。若选择不同意,将无法使用我们的产品和服务,并会退出应用。": "的全部内容。点击“同意”即表示您同意并接受全部条款。若选择不同意,将无法使用我们的产品和服务,并会退出应用。", - "不同意":"不同意", - "同意":"同意", - "当前状态:已开通":"当前状态:已开通", - "该功能是高级功能,请开通后再使用":"该功能是高级功能,请开通后再使用", - "常用程序":"常用程序", - "该锁已被重置":"该锁已被重置", - "记录":"记录", - "需要访问读写权限才能使用手动升级固件":"需要访问读写权限才能使用手动升级固件", - "错误D固件,请选择正确的文件":"错误固件,请选择正确的文件", - "非SYD固件,请选择正确的文件":"非SYD固件,请选择正确的文件", - "文件校验失败 0x01":"文件校验失败 0x01", - "解析元数据失败,请选择正确的文件":"解析元数据失败,请选择正确的文件", - "文件校验失败 0x02":"文件校验失败 0x02", - "文件校验失败 0x03":"文件校验失败 0x03", - "固件升级完成":"固件升级完成", - "开通高级功能后才可以对锁进行管理":"开通高级功能后才可以对锁进行管理", - "去开通":"去开通", - "实名认证":"实名认证", - "当前剩余数量":"当前剩余数量", - "购买":"购买", - "实名认证为付费功能,请购买后再使用":"实名认证为付费功能,请购买后再使用", - - "退出添加":"退出添加", - "管理员已满":"管理员已满", + "不同意": "不同意", + "同意": "同意", + "当前状态:已开通": "当前状态:已开通", + "该功能是高级功能,请开通后再使用": "该功能是高级功能,请开通后再使用", + "常用程序": "常用程序", + "该锁已被重置": "该锁已被重置", + "记录": "记录", + "需要访问读写权限才能使用手动升级固件": "需要访问读写权限才能使用手动升级固件", + "错误D固件,请选择正确的文件": "错误固件,请选择正确的文件", + "非SYD固件,请选择正确的文件": "非SYD固件,请选择正确的文件", + "文件校验失败 0x01": "文件校验失败 0x01", + "解析元数据失败,请选择正确的文件": "解析元数据失败,请选择正确的文件", + "文件校验失败 0x02": "文件校验失败 0x02", + "文件校验失败 0x03": "文件校验失败 0x03", + "固件升级完成": "固件升级完成", + "开通高级功能后才可以对锁进行管理": "开通高级功能后才可以对锁进行管理", + "去开通": "去开通", + "实名认证": "实名认证", + "当前剩余数量": "当前剩余数量", + "购买": "购买", + "实名认证为付费功能,请购买后再使用": "实名认证为付费功能,请购买后再使用", + "退出添加": "退出添加", + "管理员已满": "管理员已满", "用户已满": "用户已满", "锁上面添加指纹已满": "锁上面添加指纹已满", "指纹已存在": "指纹已存在", "锁上面添加人脸已满": "锁上面添加人脸已满", "人脸已存在": "人脸已存在", - "锁上面添加卡已满":"锁上面添加卡已满", + "锁上面添加卡已满": "锁上面添加卡已满", "卡已存在": "卡已存在", "锁上面添加密码已满": "锁上面添加密码已满", "密码已存在": "密码已存在", "请输入密码": "请输入密码", "暂无密码,无需重置": "暂无密码,无需重置", - - "真实姓名":"真实姓名", - "身份证号":"身份证号", - "请输入真实姓名":"请输入真实姓名", - "请输入身份证号":"请输入身份证号", - - "点击返回设备配对":"点击返回设备配对", - "无法连接?尝试升级":"无法连接?尝试升级", - "固件升级提示":"固件升级提示", - "请先获取固件文件到手机本地,再选择升级":"请先获取固件文件到手机本地,再选择升级", - "固件升级中":"固件升级中", - "取消升级":"取消升级", - "固件传输中":"固件传输中", - "关闭":"关闭", - "传输中'":"传输中", - "操作记录":"操作记录", - "修改姓名":"修改姓名", - "传输中":"传输中", - "发送人":"发送人", - "发送时间":"发送时间", - "钥匙详情":"钥匙详情", - "姓名":"姓名", - "发送":"发送", - "请确认姓名全名和身份证号码是否正确":"请确认姓名全名和身份证号码是否正确", - "传输期间请勿离开当前页面":"传输期间请勿离开当前页面" + "真实姓名": "真实姓名", + "身份证号": "身份证号", + "请输入真实姓名": "请输入真实姓名", + "请输入身份证号": "请输入身份证号", + "点击返回设备配对": "点击返回设备配对", + "无法连接?尝试升级": "无法连接?尝试升级", + "固件升级提示": "固件升级提示", + "请先获取固件文件到手机本地,再选择升级": "请先获取固件文件到手机本地,再选择升级", + "固件升级中": "固件升级中", + "取消升级": "取消升级", + "固件传输中": "固件传输中", + "关闭": "关闭", + "传输中'": "传输中", + "操作记录": "操作记录", + "修改姓名": "修改姓名", + "传输中": "传输中", + "发送人": "发送人", + "发送时间": "发送时间", + "钥匙详情": "钥匙详情", + "姓名": "姓名", + "发送": "发送", + "请确认姓名全名和身份证号码是否正确": "请确认姓名全名和身份证号码是否正确", + "传输期间请勿离开当前页面": "传输期间请勿离开当前页面", + "机型": "机型", + "硬件版本": "硬件版本", + "固件版本": "固件版本", + "手动升级": "手动升级", + "设备连接中...": "设备连接中...", + "升级过程中无法开锁,请先开锁后再升级": "升级过程中无法开锁,请先开锁后再升级", + "钥匙无效": "钥匙无效" } diff --git a/star_lock/lib/app_settings/app_settings.dart b/star_lock/lib/app_settings/app_settings.dart index e768a2ba..53f711b5 100644 --- a/star_lock/lib/app_settings/app_settings.dart +++ b/star_lock/lib/app_settings/app_settings.dart @@ -2,7 +2,8 @@ import 'package:flutter/foundation.dart'; import 'package:get/get.dart'; import 'dart:io'; -import 'package:star_lock/debug/debug_console.dart'; +import 'package:star_lock/mine/about/debug/debug_console.dart'; + class AppLog { static bool _printLog = false; @@ -13,6 +14,7 @@ class AppLog { _onlyError = onlyError ?? false; } static log(String msg,{bool? error}){ + DebugConsole.info(msg); if(!kDebugMode)return; error = error ?? false; // if(!_printLog)return; @@ -20,7 +22,6 @@ class AppLog { if(error){ msg = '----->>> $msg'; } - DebugConsole.info(msg); Get.log(msg); } } diff --git a/star_lock/lib/blue/blue_manage.dart b/star_lock/lib/blue/blue_manage.dart index 061ea4aa..08c5d768 100644 --- a/star_lock/lib/blue/blue_manage.dart +++ b/star_lock/lib/blue/blue_manage.dart @@ -280,6 +280,17 @@ class BlueManage { } } } + + // String listStr = scanDevices + // // .where((element) => + // // element.advertisementData.advName == 'TMH_dc8f928369ed') + // .map((e) => 'advName:${e.advertisementData.advName} ' + // 'serviceUuids:${e.advertisementData.serviceUuids} ' + // '是否被重置:${e.advertisementData.serviceUuids[0].toString()[31]}') + // .join(',') + // .toString(); + // AppLog.log('--->扫描到的设备 ${listStr} '); + scanDevicesCallBack(scanDevices); // EventBusManager().eventBusFir(scanDevices); // FlutterBluePlus.stopScan(); @@ -364,7 +375,7 @@ class BlueManage { (d.device.platformName == deviceName) || (d.advertisementData.advName == deviceName)); - ScanResult? scanResult;//使用局部变量防止出现缓存 + ScanResult? scanResult; //使用局部变量防止出现缓存 if (knownDeviceIndex >= 0) { // 存在的时候赋值 connectDeviceMacAddress = @@ -381,7 +392,7 @@ class BlueManage { } // AppLog.log("1 connectDeviceId:$connectDeviceMacAddress connectDeviceName:$connectDeviceName"); // stopScan(); - if (scanResult == null ||connectDeviceMacAddress.isEmpty) { + if (scanResult == null || connectDeviceMacAddress.isEmpty) { // connectStateCallBack(BluetoothConnectionState.disconnected!); return; } diff --git a/star_lock/lib/blue/io_reply.dart b/star_lock/lib/blue/io_reply.dart index 135acd51..29265b10 100644 --- a/star_lock/lib/blue/io_reply.dart +++ b/star_lock/lib/blue/io_reply.dart @@ -90,7 +90,7 @@ abstract class Reply{ case 0x0e: // 钥匙已存在 showErrorMessage("钥匙已存在"); - AppLog.log("$logTag ${commandType!.typeName} 0x0e 钥匙无效"); + AppLog.log("$logTag ${commandType!.typeName} 0x0e 钥匙已存在"); break; case 0x0f: // 用户已存在 @@ -124,7 +124,7 @@ abstract class Reply{ break; case 0xff: // 异常,未知错误 - AppLog.log("$logTag ${commandType!.typeName} 0xff"); + AppLog.log("$logTag ${commandType!.typeName} 0xff 异常,未知错误"); showErrorMessage("异常,未知错误"); break; default: diff --git a/star_lock/lib/login/login/starLock_login_page.dart b/star_lock/lib/login/login/starLock_login_page.dart index 87a3e1f7..65855ad9 100644 --- a/star_lock/lib/login/login/starLock_login_page.dart +++ b/star_lock/lib/login/login/starLock_login_page.dart @@ -3,7 +3,6 @@ import 'package:flutter/services.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:star_lock/flavors.dart'; -import 'package:star_lock/widget/star_input_formatter.dart'; import '../../appRouters.dart'; import '../../app_settings/app_colors.dart'; @@ -48,6 +47,7 @@ class _StarLockLoginPageState extends State { logic.checkNext(state.emailOrPhoneController); state.pwdController.text = data['pwd']; logic.checkNext(state.pwdController); + setState(() {}); } }, ), diff --git a/star_lock/lib/login/login/starLock_login_xhj_page.dart b/star_lock/lib/login/login/starLock_login_xhj_page.dart index b7af3e0e..9b30a3a1 100644 --- a/star_lock/lib/login/login/starLock_login_xhj_page.dart +++ b/star_lock/lib/login/login/starLock_login_xhj_page.dart @@ -223,6 +223,7 @@ class _StarLockLoginPageState extends State { logic.checkNext(state.emailOrPhoneController); state.pwdController.text = data['pwd']; logic.checkNext(state.pwdController); + setState(() {}); } }, style: ElevatedButton.styleFrom( diff --git a/star_lock/lib/main.dart b/star_lock/lib/main.dart index 5b7c18bc..2d09e1a8 100644 --- a/star_lock/lib/main.dart +++ b/star_lock/lib/main.dart @@ -1,7 +1,6 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:star_lock/debug/debug_console.dart'; import 'package:star_lock/flavors.dart'; import 'package:star_lock/translations/trans_lib.dart'; import 'app.dart'; diff --git a/star_lock/lib/main/lockDetail/card/addCardType/addCardType_page.dart b/star_lock/lib/main/lockDetail/card/addCardType/addCardType_page.dart index d7137ea9..e825d838 100644 --- a/star_lock/lib/main/lockDetail/card/addCardType/addCardType_page.dart +++ b/star_lock/lib/main/lockDetail/card/addCardType/addCardType_page.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; +import 'package:star_lock/tools/commonDataManage.dart'; import 'package:star_lock/tools/pickers/pickers.dart'; import 'package:star_lock/tools/pickers/time_picker/model/date_mode.dart'; import 'package:star_lock/tools/pickers/time_picker/model/pduration.dart'; @@ -259,13 +260,17 @@ class _AddCardPageState extends State Widget keyBottomWidget() { return Column( children: [ - Obx(() => CommonItem( - leftTitel: "是否是管理员".tr, - rightTitle: "", - isTipsImg: false, - isHaveRightWidget: true, - rightWidget: - SizedBox(width: 60.w, height: 50.h, child: _isAdmin()))), + Obx(() => Visibility( + visible: CommonDataManage().currentKeyInfo.isLockOwner == 1 + ? true + : false, + child: CommonItem( + leftTitel: "是否为管理员".tr, + rightTitle: "", + isTipsImg: false, + isHaveRightWidget: true, + rightWidget: + SizedBox(width: 60.w, height: 50.h, child: _isAdmin())))), SizedBox(height: 10.h), Obx(() => CommonItem( leftTitel: TranslationLoader.lanKeys!.stressCard!.tr, @@ -369,7 +374,7 @@ class _AddCardPageState extends State ); } - // 是否是管理员 + // 是否为管理员 CupertinoSwitch _isAdmin() { return CupertinoSwitch( activeColor: CupertinoColors.activeBlue, diff --git a/star_lock/lib/main/lockDetail/card/cardDetail/cardDetail_page.dart b/star_lock/lib/main/lockDetail/card/cardDetail/cardDetail_page.dart index ce430d48..949a7c7b 100644 --- a/star_lock/lib/main/lockDetail/card/cardDetail/cardDetail_page.dart +++ b/star_lock/lib/main/lockDetail/card/cardDetail/cardDetail_page.dart @@ -1,4 +1,3 @@ - import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart'; @@ -41,7 +40,8 @@ class _CardDetailPageState extends State with RouteAware { body: ListView( children: [ Obx(() => CommonItem( - leftTitel: "${TranslationLoader.lanKeys!.card!.tr}${TranslationLoader.lanKeys!.number!.tr}", + leftTitel: + "${TranslationLoader.lanKeys!.card!.tr}${TranslationLoader.lanKeys!.number!.tr}", rightTitle: state.typeNumber.value, isHaveDirection: false, isHaveLine: true)), @@ -54,8 +54,8 @@ class _CardDetailPageState extends State with RouteAware { ShowTipView().showTFViewAlertDialog( state.changeNameController, "${TranslationLoader.lanKeys!.amend!.tr}${TranslationLoader.lanKeys!.name!.tr}", - "", (){ - if(state.changeNameController.text.isEmpty){ + "", () { + if (state.changeNameController.text.isEmpty) { logic.showToast("请输入姓名".tr); return; } @@ -65,7 +65,11 @@ class _CardDetailPageState extends State with RouteAware { }); })), Obx(() => Visibility( - visible: (state.keyType.value == 4 || state.keyType.value == 2 || state.keyType.value == 1) ? true : false, + visible: (state.keyType.value == 4 || + state.keyType.value == 2 || + state.keyType.value == 1) + ? true + : false, child: CommonItem( leftTitel: TranslationLoader.lanKeys!.periodValidity!.tr, allHeight: 70.h, @@ -162,13 +166,15 @@ class _CardDetailPageState extends State with RouteAware { isTipsImg: false, isHaveLine: true, isHaveRightWidget: true, - rightWidget: SizedBox(width: 60.w, height: 50.h, child: _isStressFingerprint()))), + rightWidget: SizedBox( + width: 60.w, height: 50.h, child: _isStressFingerprint()))), Obx(() => CommonItem( - leftTitel: "是否是管理员".tr, + leftTitel: "是否为管理员".tr, rightTitle: "", isTipsImg: false, isHaveRightWidget: true, - rightWidget: SizedBox(width: 60.w, height: 50.h, child: _isAdmin()))), + rightWidget: + SizedBox(width: 60.w, height: 50.h, child: _isAdmin()))), Container(height: 10.h), CommonItem( leftTitel: TranslationLoader.lanKeys!.operatingRecord!.tr, @@ -217,7 +223,7 @@ class _CardDetailPageState extends State with RouteAware { ); } - // 是否是管理员 + // 是否为管理员 CupertinoSwitch _isAdmin() { return CupertinoSwitch( activeColor: CupertinoColors.activeBlue, @@ -225,9 +231,9 @@ class _CardDetailPageState extends State with RouteAware { thumbColor: CupertinoColors.white, value: state.isAdministrator.value, onChanged: (value) { - state.isAdministrator.value = value; - state.isDeletCard.value = false; - logic.senderAddICCard(); + // state.isAdministrator.value = value; + // state.isDeletCard.value = false; + // logic.senderAddICCard(); }, ); } @@ -282,5 +288,4 @@ class _CardDetailPageState extends State with RouteAware { state.ifCurrentScreen.value = false; state.sureBtnState.value = 0; } - } diff --git a/star_lock/lib/main/lockDetail/card/cardDetail/cardDetail_state.dart b/star_lock/lib/main/lockDetail/card/cardDetail/cardDetail_state.dart index c95c014f..279e92e2 100644 --- a/star_lock/lib/main/lockDetail/card/cardDetail/cardDetail_state.dart +++ b/star_lock/lib/main/lockDetail/card/cardDetail/cardDetail_state.dart @@ -1,32 +1,30 @@ - - import 'package:flutter/material.dart'; import 'package:get/get.dart'; import '../../fingerprint/fingerprintList/fingerprintListData_entity.dart'; -class CardDetailState{ +class CardDetailState { final fingerprintItemData = FingerprintItemData().obs; final TextEditingController changeNameController = TextEditingController(); var ifCurrentScreen = true.obs; // 是否是当前界面,用于判断是否需要针对当前界面进行展示 - var sureBtnState = 0.obs;// 0普通状态(可用) 1连接中(不可用) - var isDeletCard = true.obs;// 是否删除卡 - var isStressCard = false.obs;// 是否胁迫 - var isAdministrator = false.obs;// 是否是管理员 + var sureBtnState = 0.obs; // 0普通状态(可用) 1连接中(不可用) + var isDeletCard = true.obs; // 是否删除卡 + var isStressCard = false.obs; // 是否胁迫 + var isAdministrator = false.obs; // 是否为管理员 - final typeNumber = "".obs;// 指纹号 - final typeName = "".obs;// 指纹名字 - var startDate = "".obs;// 开始时间 - var endDate = "".obs;// 结束时间 - var starTime = "".obs;// 生效时间 - var endTime = "".obs;// 失效时间 - final keyType = 0.obs;// 永久:1;限时2,单次3,循环:4 - var weekDay = [].obs;// 有效日 - var adder = "".obs;// 添加者 - var addTime = 0.obs;// 添加时间 - var keyId = 0.obs;// 卡id + final typeNumber = "".obs; // 指纹号 + final typeName = "".obs; // 指纹名字 + var startDate = "".obs; // 开始时间 + var endDate = "".obs; // 结束时间 + var starTime = "".obs; // 生效时间 + var endTime = "".obs; // 失效时间 + final keyType = 0.obs; // 永久:1;限时2,单次3,循环:4 + var weekDay = [].obs; // 有效日 + var adder = "".obs; // 添加者 + var addTime = 0.obs; // 添加时间 + var keyId = 0.obs; // 卡id CardDetailState() { Map map = Get.arguments; @@ -43,9 +41,11 @@ class CardDetailState{ keyType.value = fingerprintItemData.value.cardType!; adder.value = fingerprintItemData.value.senderUsername!; addTime.value = fingerprintItemData.value.createDate!; - isStressCard.value = fingerprintItemData.value.isCoerced! == 2 ? true : false; + isStressCard.value = + fingerprintItemData.value.isCoerced! == 2 ? true : false; weekDay.value = fingerprintItemData.value.weekDay!; - isAdministrator.value = fingerprintItemData.value.cardRight! == 1 ? true : false; + isAdministrator.value = + fingerprintItemData.value.cardRight! == 1 ? true : false; } } -} \ No newline at end of file +} diff --git a/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_page.dart b/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_page.dart index d373e4a6..37dc796e 100644 --- a/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_page.dart +++ b/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_page.dart @@ -22,7 +22,7 @@ class DoorLockLogPage extends StatefulWidget { State createState() => _DoorLockLogPageState(); } -class _DoorLockLogPageState extends State with RouteAware{ +class _DoorLockLogPageState extends State with RouteAware { final logic = Get.put(DoorLockLogLogic()); final state = Get.find().state; @@ -162,19 +162,11 @@ class _DoorLockLogPageState extends State with RouteAware{ child: Stack( children: [ timelineData.imagesUrl!.isNotEmpty - ? - Image.network( - timelineData.imagesUrl!, - width: 260.w, - height: 260.h, - ) - // Image( - // image: const AssetImage( - // 'images/main/icon_lockDetail_monitoringvoiceFrist.png'), - // width: 240.w, - // height: 180.h, - // fit: BoxFit.contain, - // ) + ? Image.network( + timelineData.imagesUrl!, + width: 260.w, + height: 260.h, + ) : Container(), Positioned( top: 150.h, @@ -263,5 +255,4 @@ class _DoorLockLogPageState extends State with RouteAware{ if (EasyLoading.isShow) EasyLoading.dismiss(animation: true); state.ifCurrentScreen.value = false; } - } diff --git a/star_lock/lib/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyDetail/electronicKeyDetail_logic.dart b/star_lock/lib/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyDetail/electronicKeyDetail_logic.dart index bd3be8c9..5a67ca86 100644 --- a/star_lock/lib/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyDetail/electronicKeyDetail_logic.dart +++ b/star_lock/lib/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyDetail/electronicKeyDetail_logic.dart @@ -139,14 +139,9 @@ class ElectronicKeyDetailLogic extends BaseGetXController { state.getIDCardNumber.value.isEmpty) { ShowCupertinoAlertView() .showOpenAuthWithIDCardInfoAlert((idCard, realName) { - if (idCard.isNotEmpty && realName.isNotEmpty) { - state.getIDCardNumber.value = idCard; - state.getRealName.value = realName; - updateRealNameInfoWithAuthStatus(realNameAuthStatus); - } else { - showToast("请输入完整信息".tr); - return; - } + state.getIDCardNumber.value = idCard ?? ''; + state.getRealName.value = realName ?? ''; + updateRealNameInfoWithAuthStatus(realNameAuthStatus); }); } else { updateRealNameInfoWithAuthStatus(realNameAuthStatus); @@ -234,11 +229,11 @@ class ElectronicKeyDetailLogic extends BaseGetXController { Future openModalBottomSheet(BuildContext context) async { var textList = []; - if(CommonDataManage().currentKeyInfo.keyRight == 1){ + if (CommonDataManage().currentKeyInfo.keyRight == 1) { textList = [ state.itemData.value.keyStatus == XSConstantMacro.keyStatusFrozen ? '取消冻结'.tr : "冻结".tr ]; - }else if(CommonDataManage().currentKeyInfo.isLockOwner == 1){ + } else if (CommonDataManage().currentKeyInfo.isLockOwner == 1) { if (state.keyType.value == 1 || state.keyType.value == 2) { textList = [ state.itemData.value.keyStatus == XSConstantMacro.keyStatusFrozen ? '取消冻结'.tr : "冻结".tr, diff --git a/star_lock/lib/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyDetail/electronicKeyDetail_page.dart b/star_lock/lib/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyDetail/electronicKeyDetail_page.dart index 68884069..742d1857 100644 --- a/star_lock/lib/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyDetail/electronicKeyDetail_page.dart +++ b/star_lock/lib/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyDetail/electronicKeyDetail_page.dart @@ -1,5 +1,6 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyDetail/electronicKeyDetail_logic.dart'; @@ -227,11 +228,10 @@ class _ElectronicKeyDetailPageState extends State { () => Visibility( // (state.keyInfo.value.lockSetting!.remoteUnlock == 1 ? true : false visible: CommonDataManage() - .currentKeyInfo - .lockSetting! - .remoteUnlock == - 1 && - state.itemData.value.keyRight != 1 + .currentKeyInfo + .lockSetting! + .remoteUnlock == + 1 ? true : false, child: CommonItem( @@ -332,6 +332,10 @@ class _ElectronicKeyDetailPageState extends State { title: tipsTitle, tipTitle: "请输入".tr, controller: logic.getCurrentController(alertEnum), + inputFormatters: [ + FilteringTextInputFormatter.deny('\n'), + LengthLimitingTextInputFormatter(50), + ], sureClick: () { if (alertEnum == ShowAlertEnum.name) { logic.modifyKeyNameRequest(); diff --git a/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_logic.dart b/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_logic.dart index 59fb9403..80589dc6 100644 --- a/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_logic.dart +++ b/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_logic.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import 'package:get_storage/get_storage.dart'; import 'package:star_lock/appRouters.dart'; import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart'; import 'package:star_lock/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_state.dart'; @@ -144,7 +145,7 @@ class SendElectronicKeyViewLogic extends BaseGetXController { endDate: int.parse(endDate), faceAuthentication: state.isAuthentication.value == true ? '1' : '2', isCameraEnable: '2', - isRemoteUnlock: state.isRemoteUnlock == true ? '1' : '2', + isRemoteUnlock: state.isRemoteUnlock.value == true ? '1' : '2', keyNameForAdmin: state.keyNameController.text, keyRight: '0', keyType: getKeyType, diff --git a/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_page.dart b/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_page.dart index 9020a178..8da3e928 100644 --- a/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_page.dart +++ b/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_page.dart @@ -525,13 +525,13 @@ class _SendElectronicKeyViewState extends State : false), child: Column( children: [ - CommonItem( + Obx(() => CommonItem( leftTitel: TranslationLoader.lanKeys!.remoteUnlockingAllowed!.tr, rightTitle: "", isHaveRightWidget: true, rightWidget: SizedBox( width: 60.w, height: 50.h, child: _remoteSwitch(true, logic)), - action: () {}), + action: () {})), Container(height: 10.h), ], ), @@ -546,11 +546,11 @@ class _SendElectronicKeyViewState extends State trackColor: CupertinoColors.systemGrey5, thumbColor: CupertinoColors.white, value: isRemote - ? logic.state.isRemoteUnlock + ? logic.state.isRemoteUnlock.value : logic.state.isAuthentication.value, onChanged: (value) { if (isRemote) { - logic.state.isRemoteUnlock = !logic.state.isRemoteUnlock; + logic.state.isRemoteUnlock.value = !logic.state.isRemoteUnlock.value; } else { logic.state.isAuthentication.value = !logic.state.isAuthentication.value; diff --git a/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_state.dart b/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_state.dart index 596b10e7..01ee2ec6 100644 --- a/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_state.dart +++ b/star_lock/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_state.dart @@ -13,7 +13,7 @@ class SendElectronicKeyViewState { final FlutterContactPicker contactPicker = FlutterContactPicker(); late Contact contact; - bool isRemoteUnlock = false; //是否允许远程开锁 + var isRemoteUnlock = false.obs; //是否允许远程开锁 var isAuthentication = false.obs; //是否可以实名认证 var timeLimitBeginTime = DateTool().dateToYMDHNString( diff --git a/star_lock/lib/main/lockDetail/face/addFaceType/addFaceType_page.dart b/star_lock/lib/main/lockDetail/face/addFaceType/addFaceType_page.dart index fd62abee..002df0f0 100644 --- a/star_lock/lib/main/lockDetail/face/addFaceType/addFaceType_page.dart +++ b/star_lock/lib/main/lockDetail/face/addFaceType/addFaceType_page.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; +import 'package:star_lock/tools/commonDataManage.dart'; import 'package:star_lock/tools/dateTool.dart'; import 'package:star_lock/tools/pickers/pickers.dart'; import 'package:star_lock/tools/pickers/time_picker/model/date_mode.dart'; @@ -164,8 +165,8 @@ class _AddFaceTypePageState extends State rightTitle: state.timeLimitEndTime.value, isHaveDirection: true, action: () { - PDuration selectDate = - PDuration.parse(DateTime.tryParse(state.timeLimitEndTime.value)); + PDuration selectDate = PDuration.parse( + DateTime.tryParse(state.timeLimitEndTime.value)); Pickers.showDatePicker(context, selectDate: selectDate, mode: DateMode.YMDHM, onConfirm: (p) { state.timeLimitEndTime.value = @@ -259,13 +260,17 @@ class _AddFaceTypePageState extends State Widget keyBottomWidget() { return Column( children: [ - CommonItem( - leftTitel: "是否是管理员".tr, - rightTitle: "", - isTipsImg: false, - isHaveRightWidget: true, - rightWidget: SizedBox( - width: 60.w, height: 50.h, child: Obx(() => _isAdmin()))), + Obx(() => Visibility( + visible: CommonDataManage().currentKeyInfo.isLockOwner == 1 + ? true + : false, + child: CommonItem( + leftTitel: "是否为管理员".tr, + rightTitle: "", + isTipsImg: false, + isHaveRightWidget: true, + rightWidget: SizedBox( + width: 60.w, height: 50.h, child: Obx(() => _isAdmin()))))), SizedBox(height: 30.h), SubmitBtn( btnName: TranslationLoader.lanKeys!.next!.tr, @@ -339,7 +344,7 @@ class _AddFaceTypePageState extends State ); } - // 是否是管理员 + // 是否为管理员 CupertinoSwitch _isAdmin() { return CupertinoSwitch( activeColor: CupertinoColors.activeBlue, diff --git a/star_lock/lib/main/lockDetail/face/addFaceType/addFaceType_state.dart b/star_lock/lib/main/lockDetail/face/addFaceType/addFaceType_state.dart index 9fc56bcc..fdc8d99d 100644 --- a/star_lock/lib/main/lockDetail/face/addFaceType/addFaceType_state.dart +++ b/star_lock/lib/main/lockDetail/face/addFaceType/addFaceType_state.dart @@ -8,15 +8,19 @@ class AddFaceTypeState { final selectType = "0".obs; // 0永久 1显示 2循环 final fromType = 1.obs; // // 1从添加钥匙列表进入 2从考勤添加员工入口进入 final isStressFingerprint = false.obs; - final isAdministrator = false.obs; // 是否是管理员 + final isAdministrator = false.obs; // 是否为管理员 - var timeLimitBeginTime = DateTool().dateToYMDHNString(DateTime.now().millisecondsSinceEpoch.toString()).obs;// 限时开始时间 - var timeLimitEndTime = DateTool().dateToYMDHNString(DateTime.now().millisecondsSinceEpoch.toString()).obs;// 限时结束时间 + var timeLimitBeginTime = DateTool() + .dateToYMDHNString(DateTime.now().millisecondsSinceEpoch.toString()) + .obs; // 限时开始时间 + var timeLimitEndTime = DateTool() + .dateToYMDHNString(DateTime.now().millisecondsSinceEpoch.toString()) + .obs; // 限时结束时间 - var cycleBeginTime = "".obs;// 循环开始时间 - var cycleEndTime = "".obs;// 循环结束时间 - var effectiveDateTime = "".obs;// 生效时间 - var failureDateTime = "".obs;// 失效时间 + var cycleBeginTime = "".obs; // 循环开始时间 + var cycleEndTime = "".obs; // 循环结束时间 + var effectiveDateTime = "".obs; // 生效时间 + var failureDateTime = "".obs; // 失效时间 var weekdaysList = [].obs; var fromTypeTwoStaffName = "".obs; // 从添加员工进入 传入员工名字 @@ -27,8 +31,9 @@ class AddFaceTypeState { lockId.value = map["lockId"]; fromType.value = map["fromType"]; // 1从添加钥匙列表进入 2从考勤添加员工入口进入 - if(fromType.value == 2){ - fromTypeTwoStaffName.value = map["fromTypeTwoStaffName"]; // 从添加员工进入 传入员工名字 + if (fromType.value == 2) { + fromTypeTwoStaffName.value = + map["fromTypeTwoStaffName"]; // 从添加员工进入 传入员工名字 } } } diff --git a/star_lock/lib/main/lockDetail/face/faceDetail/faceDetail_page.dart b/star_lock/lib/main/lockDetail/face/faceDetail/faceDetail_page.dart index 0616b16e..fdf2389b 100644 --- a/star_lock/lib/main/lockDetail/face/faceDetail/faceDetail_page.dart +++ b/star_lock/lib/main/lockDetail/face/faceDetail/faceDetail_page.dart @@ -52,8 +52,8 @@ class _FaceDetailPageState extends State with RouteAware { ShowTipView().showTFViewAlertDialog( state.changeNameController, "${TranslationLoader.lanKeys!.amend!.tr}${TranslationLoader.lanKeys!.name!.tr}", - "", (){ - if(state.changeNameController.text.isEmpty){ + "", () { + if (state.changeNameController.text.isEmpty) { logic.showToast("请输入姓名".tr); return; } @@ -177,12 +177,12 @@ class _FaceDetailPageState extends State with RouteAware { // isHaveLine: true, // rightWidget: SizedBox(width: 60.w, height: 50.h, child: _isStressFace()))), Obx(() => CommonItem( - leftTitel: "是否是管理员".tr, + leftTitel: "是否为管理员".tr, rightTitle: "", isTipsImg: false, isHaveRightWidget: true, - rightWidget: SizedBox( - width: 60.w, height: 50.h, child: _isAdmin()))), + rightWidget: + SizedBox(width: 60.w, height: 50.h, child: _isAdmin()))), Container(height: 10.h), CommonItem( leftTitel: TranslationLoader.lanKeys!.operatingRecord!.tr, @@ -205,7 +205,8 @@ class _FaceDetailPageState extends State with RouteAware { left: 30.w, right: 30.w, top: 30.w, bottom: 30.w), padding: EdgeInsets.only(top: 25.w, bottom: 25.w), onClick: () { - ShowTipView().showIosTipWithContentDialog("确定要删除吗?".tr, () async { + ShowTipView().showIosTipWithContentDialog("确定要删除吗?".tr, + () async { state.isDeletFace.value = true; logic.senderAddFace(); }); @@ -231,7 +232,7 @@ class _FaceDetailPageState extends State with RouteAware { ); } - // 是否是管理员 + // 是否为管理员 CupertinoSwitch _isAdmin() { return CupertinoSwitch( activeColor: CupertinoColors.activeBlue, @@ -239,9 +240,9 @@ class _FaceDetailPageState extends State with RouteAware { thumbColor: CupertinoColors.white, value: state.isAdministrator.value, onChanged: (value) { - state.isAdministrator.value = value; - state.isDeletFace.value = false; - logic.senderAddFace(); + // state.isAdministrator.value = value; + // state.isDeletFace.value = false; + // logic.senderAddFace(); }, ); } diff --git a/star_lock/lib/main/lockDetail/face/faceDetail/faceDetail_state.dart b/star_lock/lib/main/lockDetail/face/faceDetail/faceDetail_state.dart index bb414b8e..75af93b1 100644 --- a/star_lock/lib/main/lockDetail/face/faceDetail/faceDetail_state.dart +++ b/star_lock/lib/main/lockDetail/face/faceDetail/faceDetail_state.dart @@ -21,9 +21,9 @@ class FaceDetailState { var ifCurrentScreen = true.obs; // 是否是当前界面,用于判断是否需要针对当前界面进行展示 var sureBtnState = 0.obs; // 0普通状态(可用) 1连接中(不可用) - var isDeletFace = true.obs;// 是否删除卡 - var isStressFace = false.obs;// 是否胁迫 - var isAdministrator = false.obs;// 是否是管理员 + var isDeletFace = true.obs; // 是否删除卡 + var isStressFace = false.obs; // 是否胁迫 + var isAdministrator = false.obs; // 是否为管理员 FaceDetailState() { Map map = Get.arguments; diff --git a/star_lock/lib/main/lockDetail/fingerprint/addFingerprintSelectType/addFingerprintType_page.dart b/star_lock/lib/main/lockDetail/fingerprint/addFingerprintSelectType/addFingerprintType_page.dart index a5a2754a..6f6ea3b8 100644 --- a/star_lock/lib/main/lockDetail/fingerprint/addFingerprintSelectType/addFingerprintType_page.dart +++ b/star_lock/lib/main/lockDetail/fingerprint/addFingerprintSelectType/addFingerprintType_page.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; +import 'package:star_lock/tools/commonDataManage.dart'; import 'package:star_lock/tools/pickers/pickers.dart'; import 'package:star_lock/tools/pickers/time_picker/model/date_mode.dart'; import 'package:star_lock/tools/pickers/time_picker/model/pduration.dart'; @@ -249,13 +250,17 @@ class _AddFingerprintTypePageState extends State with Si Widget keyBottomWidget() { return Column( children: [ - Obx(() => CommonItem( - leftTitel: "是否是管理员".tr, - rightTitle: "", - isTipsImg: false, - isHaveRightWidget: true, - rightWidget: SizedBox( - width: 60.w, height: 50.h, child: _isAdmin()))), + Obx(() => Visibility( + visible: CommonDataManage().currentKeyInfo.isLockOwner == 1 + ? true + : false, + child: CommonItem( + leftTitel: "是否为管理员".tr, + rightTitle: "", + isTipsImg: false, + isHaveRightWidget: true, + rightWidget: + SizedBox(width: 60.w, height: 50.h, child: _isAdmin())))), SizedBox(height: 10.h), Obx(() => CommonItem( leftTitel: TranslationLoader.lanKeys!.stressFingerprint!.tr, @@ -424,7 +429,7 @@ class _AddFingerprintTypePageState extends State with Si ); } - // 是否是管理员 + // 是否为管理员 CupertinoSwitch _isAdmin() { return CupertinoSwitch( activeColor: CupertinoColors.activeBlue, diff --git a/star_lock/lib/main/lockDetail/fingerprint/addFingerprintSelectType/addFingerprintType_state.dart b/star_lock/lib/main/lockDetail/fingerprint/addFingerprintSelectType/addFingerprintType_state.dart index e4c498d4..57c83404 100644 --- a/star_lock/lib/main/lockDetail/fingerprint/addFingerprintSelectType/addFingerprintType_state.dart +++ b/star_lock/lib/main/lockDetail/fingerprint/addFingerprintSelectType/addFingerprintType_state.dart @@ -1,22 +1,25 @@ - import 'package:flutter/material.dart'; import 'package:get/get.dart'; import '../../../../tools/dateTool.dart'; -class AddFingerprintState{ +class AddFingerprintState { final lockId = 0.obs; - final selectType = "0".obs;// 0永久 1显示 2循环 + final selectType = "0".obs; // 0永久 1显示 2循环 final fromType = 1.obs; // // 1从添加钥匙列表进入 2从考勤添加员工入口进入 final isStressFingerprint = false.obs; - final isAdministrator = false.obs;// 是否是管理员 + final isAdministrator = false.obs; // 是否为管理员 - var timeLimitBeginTime = DateTool().dateToYMDHNString(DateTime.now().millisecondsSinceEpoch.toString()).obs;// 限时开始时间 - var timeLimitEndTime = DateTool().dateToYMDHNString(DateTime.now().millisecondsSinceEpoch.toString()).obs;// 限时结束时间 - var cycleBeginTime = "".obs;// 循环开始时间 - var cycleEndTime = "".obs;// 循环结束时间 - var effectiveDateTime = "".obs;// 生效时间 - var failureDateTime = "".obs;// 失效时间 + var timeLimitBeginTime = DateTool() + .dateToYMDHNString(DateTime.now().millisecondsSinceEpoch.toString()) + .obs; // 限时开始时间 + var timeLimitEndTime = DateTool() + .dateToYMDHNString(DateTime.now().millisecondsSinceEpoch.toString()) + .obs; // 限时结束时间 + var cycleBeginTime = "".obs; // 循环开始时间 + var cycleEndTime = "".obs; // 循环结束时间 + var effectiveDateTime = "".obs; // 生效时间 + var failureDateTime = "".obs; // 失效时间 var weekdaysList = [].obs; var fromTypeTwoStaffName = "".obs; // 从添加员工进入 传入员工名字 @@ -27,8 +30,9 @@ class AddFingerprintState{ lockId.value = map["lockId"]; fromType.value = map["fromType"]; // 1从添加钥匙列表进入 2从考勤添加员工入口进入 - if(fromType.value == 2){ - fromTypeTwoStaffName.value = map["fromTypeTwoStaffName"]; // 从添加员工进入 传入员工名字 + if (fromType.value == 2) { + fromTypeTwoStaffName.value = + map["fromTypeTwoStaffName"]; // 从添加员工进入 传入员工名字 } } } diff --git a/star_lock/lib/main/lockDetail/fingerprint/fingerprintDetail/fingerprintDetail_page.dart b/star_lock/lib/main/lockDetail/fingerprint/fingerprintDetail/fingerprintDetail_page.dart index a903c368..1c5718ff 100644 --- a/star_lock/lib/main/lockDetail/fingerprint/fingerprintDetail/fingerprintDetail_page.dart +++ b/star_lock/lib/main/lockDetail/fingerprint/fingerprintDetail/fingerprintDetail_page.dart @@ -1,4 +1,3 @@ - import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart'; @@ -26,7 +25,8 @@ class FingerprintDetailPage extends StatefulWidget { State createState() => _FingerprintDetailPageState(); } -class _FingerprintDetailPageState extends State with RouteAware { +class _FingerprintDetailPageState extends State + with RouteAware { final logic = Get.put(FingerprintDetailLogic()); final state = Get.find().state; @@ -42,7 +42,8 @@ class _FingerprintDetailPageState extends State with Rout body: Column( children: [ Obx(() => CommonItem( - leftTitel: "${TranslationLoader.lanKeys!.fingerprint!.tr}${TranslationLoader.lanKeys!.number!.tr}", + leftTitel: + "${TranslationLoader.lanKeys!.fingerprint!.tr}${TranslationLoader.lanKeys!.number!.tr}", rightTitle: state.typeNumber.value, isHaveDirection: false, isHaveLine: true)), @@ -55,8 +56,8 @@ class _FingerprintDetailPageState extends State with Rout ShowTipView().showTFViewAlertDialog( state.changeNameController, "${TranslationLoader.lanKeys!.amend!.tr}${TranslationLoader.lanKeys!.name!.tr}", - "", (){ - if(state.changeNameController.text.isEmpty){ + "", () { + if (state.changeNameController.text.isEmpty) { logic.showToast("请输入姓名".tr); return; } @@ -64,10 +65,13 @@ class _FingerprintDetailPageState extends State with Rout state.typeName.value = state.changeNameController.text; logic.editFingerprintsData(); }); - })), Obx(() => Visibility( - visible: (state.keyType.value == 4 || state.keyType.value == 2 || state.keyType.value == 1) ? true : false, + visible: (state.keyType.value == 4 || + state.keyType.value == 2 || + state.keyType.value == 1) + ? true + : false, child: CommonItem( leftTitel: TranslationLoader.lanKeys!.periodValidity!.tr, allHeight: 70.h, @@ -76,26 +80,32 @@ class _FingerprintDetailPageState extends State with Rout isHaveDirection: true, isHaveLine: true, action: () async { - if(state.keyType.value == 2 || state.keyType.value == 1){ + if (state.keyType.value == 2 || state.keyType.value == 1) { // 限时 - var data = await Get.toNamed(Routers.otherTypeKeyChangeDatePage, arguments: { - "pushType": 1, - "fingerprintItemData": state.fingerprintItemData.value, - }); - if(data != null) { + var data = await Get.toNamed( + Routers.otherTypeKeyChangeDatePage, + arguments: { + "pushType": 1, + "fingerprintItemData": + state.fingerprintItemData.value, + }); + if (data != null) { setState(() { state.starDate.value = data["beginTimeTimestamp"]; state.endDate.value = data["endTimeTimestamp"]; state.keyType.value = 2; }); } - }else if(state.keyType.value == 4){ + } else if (state.keyType.value == 4) { // 循环 - var data = await Get.toNamed(Routers.otherTypeKeyChangeValidityDatePage, arguments: { - "pushType": 1, - "fingerprintItemData": state.fingerprintItemData.value, - }); - if(data != null) { + var data = await Get.toNamed( + Routers.otherTypeKeyChangeValidityDatePage, + arguments: { + "pushType": 1, + "fingerprintItemData": + state.fingerprintItemData.value, + }); + if (data != null) { setState(() { state.starDate.value = data["starDate"]; state.endDate.value = data["endDate"]; @@ -114,11 +124,14 @@ class _FingerprintDetailPageState extends State with Rout isHaveDirection: true, isHaveLine: true, action: () async { - var data = await Get.toNamed(Routers.otherTypeKeyChangeValidityDatePage, arguments: { - "pushType": 1, - "fingerprintItemData": state.fingerprintItemData.value, - }); - if(data != null) { + var data = await Get.toNamed( + Routers.otherTypeKeyChangeValidityDatePage, + arguments: { + "pushType": 1, + "fingerprintItemData": + state.fingerprintItemData.value, + }); + if (data != null) { setState(() { state.starDate.value = data["starDate"]; state.endDate.value = data["endDate"]; @@ -132,14 +145,18 @@ class _FingerprintDetailPageState extends State with Rout visible: state.keyType.value == 4 ? true : false, child: Obx(() => CommonItem( leftTitel: "有效时间".tr, - rightTitle: "${DateTool().dateToHNString(state.startDate.value)}-${DateTool().dateToHNString(state.endTime.value)}", + rightTitle: + "${DateTool().dateToHNString(state.startDate.value)}-${DateTool().dateToHNString(state.endTime.value)}", isHaveDirection: true, action: () async { - var data = await Get.toNamed(Routers.otherTypeKeyChangeValidityDatePage, arguments: { - "pushType": 1, - "fingerprintItemData": state.fingerprintItemData.value, - }); - if(data != null) { + var data = await Get.toNamed( + Routers.otherTypeKeyChangeValidityDatePage, + arguments: { + "pushType": 1, + "fingerprintItemData": + state.fingerprintItemData.value, + }); + if (data != null) { setState(() { state.starDate.value = data["starDate"]; state.endDate.value = data["endDate"]; @@ -154,12 +171,11 @@ class _FingerprintDetailPageState extends State with Rout leftTitel: TranslationLoader.lanKeys!.additive!.tr, rightTitle: state.adder.value, isHaveLine: true, - action: () { - - })), + action: () {})), Obx(() => CommonItem( - leftTitel: TranslationLoader.lanKeys!.addTime!.tr, - rightTitle: DateTool().dateToYMDHNString(state.addTime.value.toString()), + leftTitel: TranslationLoader.lanKeys!.addTime!.tr, + rightTitle: DateTool() + .dateToYMDHNString(state.addTime.value.toString()), )), SizedBox(height: 10.h), Obx(() => CommonItem( @@ -171,11 +187,12 @@ class _FingerprintDetailPageState extends State with Rout rightWidget: SizedBox( width: 60.w, height: 50.h, child: _isStressFingerprint()))), Obx(() => CommonItem( - leftTitel: "是否是管理员".tr, + leftTitel: "是否为管理员".tr, rightTitle: "", isTipsImg: false, isHaveRightWidget: true, - rightWidget: SizedBox(width: 60.w, height: 50.h, child: _isAdmin()))), + rightWidget: + SizedBox(width: 60.w, height: 50.h, child: _isAdmin()))), Container(height: 10.h), CommonItem( leftTitel: TranslationLoader.lanKeys!.operatingRecord!.tr, @@ -195,10 +212,12 @@ class _FingerprintDetailPageState extends State with Rout btnName: TranslationLoader.lanKeys!.delete!.tr, isDelete: true, borderRadius: 20.w, - margin: EdgeInsets.only(left: 30.w, right: 30.w, top: 30.w, bottom: 30.w), + margin: EdgeInsets.only( + left: 30.w, right: 30.w, top: 30.w, bottom: 30.w), padding: EdgeInsets.only(top: 25.w, bottom: 25.w), onClick: () { - ShowTipView().showIosTipWithContentDialog("确定要删除吗?".tr, () async { + ShowTipView().showIosTipWithContentDialog("确定要删除吗?".tr, + () async { state.isDeletFingerprint.value = true; logic.senderAddFingerprint(); }); @@ -225,7 +244,7 @@ class _FingerprintDetailPageState extends State with Rout ); } - // 是否是管理员 + // 是否为管理员 CupertinoSwitch _isAdmin() { return CupertinoSwitch( activeColor: CupertinoColors.activeBlue, @@ -233,9 +252,9 @@ class _FingerprintDetailPageState extends State with Rout thumbColor: CupertinoColors.white, value: state.isAdministrator.value, onChanged: (value) { - state.isAdministrator.value = value; - state.isDeletFingerprint.value = false; - logic.senderAddFingerprint(); + // state.isAdministrator.value = value; + // state.isDeletFingerprint.value = false; + // logic.senderAddFingerprint(); }, ); } @@ -290,5 +309,4 @@ class _FingerprintDetailPageState extends State with Rout state.ifCurrentScreen.value = false; state.sureBtnState.value = 0; } - } diff --git a/star_lock/lib/main/lockDetail/fingerprint/fingerprintDetail/fingerprintDetail_state.dart b/star_lock/lib/main/lockDetail/fingerprint/fingerprintDetail/fingerprintDetail_state.dart index 746c93b2..cae20610 100644 --- a/star_lock/lib/main/lockDetail/fingerprint/fingerprintDetail/fingerprintDetail_state.dart +++ b/star_lock/lib/main/lockDetail/fingerprint/fingerprintDetail/fingerprintDetail_state.dart @@ -1,31 +1,30 @@ - import 'package:flutter/material.dart'; import 'package:get/get.dart'; import '../fingerprintList/fingerprintListData_entity.dart'; -class FingerprintDetailState{ +class FingerprintDetailState { final fingerprintItemData = FingerprintItemData().obs; final TextEditingController changeNameController = TextEditingController(); - final typeNumber = "".obs;// 指纹号 - final typeName = "".obs;// 指纹名字 - var starDate = "".obs;// 开始时间 - var endDate = "".obs;// 结束时间 - var startDate = "".obs;// 生效时间 - var endTime = "".obs;// 失效时间 - final keyType = 0.obs;// 永久:1;限时2,单次3,循环:4 - var weekDay = [].obs;// 有效日 - var adder = "".obs;// 添加者 - var addTime = 0.obs;// 添加时间 + final typeNumber = "".obs; // 指纹号 + final typeName = "".obs; // 指纹名字 + var starDate = "".obs; // 开始时间 + var endDate = "".obs; // 结束时间 + var startDate = "".obs; // 生效时间 + var endTime = "".obs; // 失效时间 + final keyType = 0.obs; // 永久:1;限时2,单次3,循环:4 + var weekDay = [].obs; // 有效日 + var adder = "".obs; // 添加者 + var addTime = 0.obs; // 添加时间 var keyId = 0.obs; var ifCurrentScreen = true.obs; // 是否是当前界面,用于判断是否需要针对当前界面进行展示 - var sureBtnState = 0.obs;// 0普通状态(可用) 1连接中(不可用) - var isDeletFingerprint = true.obs;// 是否删除卡 + var sureBtnState = 0.obs; // 0普通状态(可用) 1连接中(不可用) + var isDeletFingerprint = true.obs; // 是否删除卡 final isStressFingerprint = false.obs; - var isAdministrator = false.obs;// 是否是管理员 + var isAdministrator = false.obs; // 是否为管理员 FingerprintDetailState() { Map map = Get.arguments; @@ -42,9 +41,11 @@ class FingerprintDetailState{ keyType.value = fingerprintItemData.value.fingerprintType!; adder.value = fingerprintItemData.value.senderUsername!; addTime.value = fingerprintItemData.value.createDate!; - isStressFingerprint.value = fingerprintItemData.value.isCoerced! == 2 ? true : false; + isStressFingerprint.value = + fingerprintItemData.value.isCoerced! == 2 ? true : false; weekDay.value = fingerprintItemData.value.weekDay!; - isAdministrator.value = fingerprintItemData.value.fingerRight! == 1 ? true : false; + isAdministrator.value = + fingerprintItemData.value.fingerRight! == 1 ? true : false; } } -} \ No newline at end of file +} diff --git a/star_lock/lib/main/lockDetail/iris/addIrisType/addIrisType_page.dart b/star_lock/lib/main/lockDetail/iris/addIrisType/addIrisType_page.dart index 0c9ab97e..582b126a 100644 --- a/star_lock/lib/main/lockDetail/iris/addIrisType/addIrisType_page.dart +++ b/star_lock/lib/main/lockDetail/iris/addIrisType/addIrisType_page.dart @@ -4,6 +4,7 @@ import 'package:flutter/services.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:star_lock/main/lockDetail/iris/addIrisType/addIrisType_logic.dart'; +import 'package:star_lock/tools/commonDataManage.dart'; import 'package:star_lock/tools/dateTool.dart'; import 'package:star_lock/tools/pickers/pickers.dart'; import 'package:star_lock/tools/pickers/time_picker/model/date_mode.dart'; @@ -249,13 +250,17 @@ class _AddIrisTypePageState extends State { Widget keyBottomWidget() { return Column( children: [ - CommonItem( - leftTitel: "是否是管理员".tr, - rightTitle: "", - isTipsImg: false, - isHaveRightWidget: true, - rightWidget: SizedBox( - width: 60.w, height: 50.h, child: Obx(() => _isAdmin()))), + Obx(() => Visibility( + visible: CommonDataManage().currentKeyInfo.isLockOwner == 1 + ? true + : false, + child: CommonItem( + leftTitel: "是否为管理员".tr, + rightTitle: "", + isTipsImg: false, + isHaveRightWidget: true, + rightWidget: SizedBox( + width: 60.w, height: 50.h, child: Obx(() => _isAdmin()))))), SizedBox(height: 30.h), SubmitBtn( btnName: TranslationLoader.lanKeys!.next!.tr, @@ -329,7 +334,7 @@ class _AddIrisTypePageState extends State { ); } - // 是否是管理员 + // 是否为管理员 CupertinoSwitch _isAdmin() { return CupertinoSwitch( activeColor: CupertinoColors.activeBlue, diff --git a/star_lock/lib/main/lockDetail/iris/addIrisType/addIrisType_state.dart b/star_lock/lib/main/lockDetail/iris/addIrisType/addIrisType_state.dart index 1a931268..a2fb8c31 100644 --- a/star_lock/lib/main/lockDetail/iris/addIrisType/addIrisType_state.dart +++ b/star_lock/lib/main/lockDetail/iris/addIrisType/addIrisType_state.dart @@ -7,7 +7,7 @@ class AddIrisTypeState { final fromType = 1.obs; // // 1从添加钥匙列表进入 2从考勤添加员工入口进入 var fromTypeTwoStaffName = "".obs; // 考勤添加人脸员工名字 final isStressFingerprint = false.obs; - final isAdministrator = false.obs; // 是否是管理员 + final isAdministrator = false.obs; // 是否为管理员 var beginTime = "".obs; // 开始时间 var endTime = "".obs; // 结束时间 @@ -24,6 +24,5 @@ class AddIrisTypeState { // fromTypeTwoStaffName = map["fromTypeTwoStaffName"]; // 从添加员工进入 传入员工名字 // // nameController.text = fromTypeTwoStaffName.value; // } - } } diff --git a/star_lock/lib/main/lockDetail/lockDetail/lockDetail_logic.dart b/star_lock/lib/main/lockDetail/lockDetail/lockDetail_logic.dart index 4193133d..cff7ebb3 100644 --- a/star_lock/lib/main/lockDetail/lockDetail/lockDetail_logic.dart +++ b/star_lock/lib/main/lockDetail/lockDetail/lockDetail_logic.dart @@ -7,6 +7,8 @@ import 'package:intl/intl.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart'; +import 'package:star_lock/widget/permission/permission_dialog.dart'; + import '../../../app_settings/app_settings.dart'; import '../../../blue/blue_manage.dart'; import '../../../blue/io_protocol/io_openLock.dart'; @@ -16,7 +18,6 @@ import '../../../blue/io_tool/io_tool.dart'; import '../../../blue/io_tool/manager_event_bus.dart'; import '../../../blue/sender_manage.dart'; import '../../../network/api_repository.dart'; -import '../../../permission/permission_dialog.dart'; import '../../../tools/baseGetXController.dart'; import '../../../tools/commonDataManage.dart'; import '../../../tools/eventBusEventManage.dart'; @@ -32,7 +33,8 @@ class LockDetailLogic extends BaseGetXController { // 监听设备返回的数据 void initReplySubscription() { - state.replySubscription = EventBusManager().eventBus!.on().listen((reply) async { + state.replySubscription = + EventBusManager().eventBus!.on().listen((reply) async { // 开门 if (reply is OpenDoorReply && state.ifCurrentScreen.value == true) { _replyOpenLock(reply); @@ -88,7 +90,7 @@ class LockDetailLogic extends BaseGetXController { state.electricQuantity.value = power; // 备用电量 - if(state.keyInfos.value.lockFeature!.isSupportBackupBattery == 1){ + if (state.keyInfos.value.lockFeature!.isSupportBackupBattery == 1) { int powerStandby = reply.data[9]; state.electricQuantityStandby.value = powerStandby; } @@ -123,10 +125,6 @@ class LockDetailLogic extends BaseGetXController { signKey: signKeyDataList, privateKey: getPrivateKeyList, ); - break; - case 0x07: - //无权限 - break; case 0x16: // 正在开锁中... @@ -136,8 +134,20 @@ class LockDetailLogic extends BaseGetXController { cancelBlueConnetctToastTimer(); }); break; + case 0x0d: + // 正在开锁中... + showToast('钥匙无效'.tr); + state.openLockBtnState.value = 0; + state.openDoorBtnisUneable.value = false; + state.animationController!.stop(); + cancelBlueConnetctToastTimer(); + break; default: //失败 + state.openLockBtnState.value = 0; + state.openDoorBtnisUneable.value = false; + state.animationController!.stop(); + cancelBlueConnetctToastTimer(); break; } } @@ -173,7 +183,7 @@ class LockDetailLogic extends BaseGetXController { if (dataLength > 0) { reply.data.removeRange(0, 7); // 把得到的数据按8位分割成数组 然后塞进一个新的数组里面 - if(reply.data.length < 17){ + if (reply.data.length < 17) { return; } var getList = splitList(reply.data, 17); @@ -185,29 +195,29 @@ class LockDetailLogic extends BaseGetXController { var indexMap = {}; indexMap["type"] = indexList[0].toString(); - if(indexList[0] == 2){ + if (indexList[0] == 2) { var passwordData = reply.data.sublist(7, 17); var password = utf8String(passwordData); indexMap["user"] = password.toString(); - }else{ - int userNo = (indexList[1]*255) + indexList[2]; + } else { + int userNo = (indexList[1] * 255) + indexList[2]; indexMap["user"] = userNo.toString(); } indexMap["success"] = "1"; int time = ((0xff & indexList[(3)]) << 24 | - (0xff & indexList[4]) << 16 | - (0xff & indexList[5]) << 8 | - (0xFF & indexList[6])); + (0xff & indexList[4]) << 16 | + (0xff & indexList[5]) << 8 | + (0xFF & indexList[6])); indexMap["date"] = "${time * 1000}"; uploadList.add(indexMap); } lockRecordUploadData(uploadList); - if(dataLength == state.logCountPage){ + if (dataLength == state.logCountPage) { senderReferEventRecordTime(); - }else{ + } else { await BlueManage().disconnect(); } } @@ -351,7 +361,9 @@ class LockDetailLogic extends BaseGetXController { var token = await Storage.getStringList(saveBlueToken); List getTokenList = changeStringListToIntList(token!); - BlueManage().bludSendData(state.keyInfos.value.bluetooth!.bluetoothDeviceName!, (BluetoothConnectionState deviceConnectionState) async { + BlueManage() + .bludSendData(state.keyInfos.value.bluetooth!.bluetoothDeviceName!, + (BluetoothConnectionState deviceConnectionState) async { if (deviceConnectionState == BluetoothConnectionState.connected) { IoSenderManage.senderOpenLock( keyID: BlueManage().connectDeviceName, @@ -377,13 +389,15 @@ class LockDetailLogic extends BaseGetXController { }); } - // 查询事件记录(时间查询) Future senderReferEventRecordTime() async { - showBlueConnetctToastTimer(isShowBlueConnetctToast: false, action: () { - BlueManage().disconnect(); - }); - BlueManage().bludSendData(BlueManage().connectDeviceName, (BluetoothConnectionState connectionState) async { + showBlueConnetctToastTimer( + isShowBlueConnetctToast: false, + action: () { + BlueManage().disconnect(); + }); + BlueManage().bludSendData(BlueManage().connectDeviceName, + (BluetoothConnectionState connectionState) async { if (connectionState == BluetoothConnectionState.connected) { var privateKey = await Storage.getStringList(saveBluePrivateKey); List getPrivateKeyList = changeStringListToIntList(privateKey!); @@ -410,27 +424,30 @@ class LockDetailLogic extends BaseGetXController { } // 从服务器获取锁的时间 开锁时传入 - void getServerDatetime() async{ + void getServerDatetime() async { var entity = await ApiRepository.to.getServerDatetimeData(); - if(entity.errorCode!.codeIsSuccessful){ - state.differentialTime = entity.data!.date! ~/ 1000 - DateTime.now().millisecondsSinceEpoch ~/ 1000; + if (entity.errorCode!.codeIsSuccessful) { + state.differentialTime = entity.data!.date! ~/ 1000 - + DateTime.now().millisecondsSinceEpoch ~/ 1000; // AppLog.log("entity.data!.date! ~/ 1000:${entity.data!.date! ~/ 1000} DateTime.now().millisecondsSinceEpoch ~/ 1000:${DateTime.now().millisecondsSinceEpoch ~/ 1000} 服务器时间差:${state.differentialTime}"); } } - int getUTCNetTime(){ - return DateTime.now().millisecondsSinceEpoch ~/ 1000 + state.differentialTime; + int getUTCNetTime() { + return DateTime.now().millisecondsSinceEpoch ~/ 1000 + + state.differentialTime; } // 获取手机联网token,根据锁设置里面获取的开锁时是否联网来判断是否调用这个接口 void getLockNetToken() async { - LockNetTokenEntity entity = await ApiRepository.to.getLockNetToken(lockId: state.keyInfos.value.lockId.toString()); + LockNetTokenEntity entity = await ApiRepository.to + .getLockNetToken(lockId: state.keyInfos.value.lockId.toString()); if (entity.errorCode!.codeIsSuccessful) { state.lockNetToken = entity.data!.token!.toString(); AppLog.log("从服务器获取联网token:${state.lockNetToken}"); openDoorAction(); - }else{ - showToast("网络访问失败,请检查网络是否正常".tr, something: (){ + } else { + showToast("网络访问失败,请检查网络是否正常".tr, something: () { state.openLockBtnState.value = 0; state.animationController!.forward(); cancelBlueConnetctToastTimer(); @@ -442,12 +459,13 @@ class LockDetailLogic extends BaseGetXController { //电量更新请求 Future uploadElectricQuantityRequest() async { - KeyOperationRecordEntity entity = await ApiRepository.to.uploadElectricQuantity( - electricQuantity:state.electricQuantity.value.toString(), - electricQuantityStandby: state.electricQuantityStandby.value.toString(), - lockId: state.keyInfos.value.lockId.toString(), - isUnShowLoading: true - ); + KeyOperationRecordEntity entity = await ApiRepository.to + .uploadElectricQuantity( + electricQuantity: state.electricQuantity.value.toString(), + electricQuantityStandby: + state.electricQuantityStandby.value.toString(), + lockId: state.keyInfos.value.lockId.toString(), + isUnShowLoading: true); if (entity.errorCode!.codeIsSuccessful) { SchedulerBinding.instance.addPostFrameCallback((_) { eventBus.fire(RefreshLockListInfoDataEvent()); @@ -476,9 +494,9 @@ class LockDetailLogic extends BaseGetXController { // 查询锁记录最后时间 void getLockRecordLastUploadDataTime() async { - LockOperatingRecordGetLastRecordTimeEntity entity = await ApiRepository.to.getLockRecordLastUploadDataTime( - lockId: state.keyInfos.value.lockId.toString() - ); + LockOperatingRecordGetLastRecordTimeEntity entity = await ApiRepository.to + .getLockRecordLastUploadDataTime( + lockId: state.keyInfos.value.lockId.toString()); if (entity.errorCode!.codeIsSuccessful) { state.operateDate = entity.data!.operateDate! ~/ 1000; senderReferEventRecordTime(); @@ -487,14 +505,14 @@ class LockDetailLogic extends BaseGetXController { // 操作记录上传 void lockRecordUploadData(List list) async { - KeyOperationRecordEntity entity = await ApiRepository.to.lockRecordUploadData( - lockId: state.keyInfos.value.lockId.toString(), - records: list - ); + KeyOperationRecordEntity entity = await ApiRepository.to + .lockRecordUploadData( + lockId: state.keyInfos.value.lockId.toString(), records: list); if (entity.errorCode!.codeIsSuccessful) { // mockNetworkDataRequest(); - AppLog.log("state.keyInfos.value.keyType:${state.keyInfos.value.keyType}"); - if(state.keyInfos.value.keyType == XSConstantMacro.keyTypeOnce){ + AppLog.log( + "state.keyInfos.value.keyType:${state.keyInfos.value.keyType}"); + if (state.keyInfos.value.keyType == XSConstantMacro.keyTypeOnce) { // 单次删除 deletKeyData(); } @@ -504,9 +522,7 @@ class LockDetailLogic extends BaseGetXController { // 普通用户或者授权管理员删除钥匙 void deletKeyData() async { var entity = await ApiRepository.to.deleteElectronicKey( - keyId:state.keyInfos.value.keyId.toString(), - includeUnderlings: 0 - ); + keyId: state.keyInfos.value.keyId.toString(), includeUnderlings: 0); if (entity.errorCode!.codeIsSuccessful) { BlueManage().connectDeviceMacAddress = ""; SchedulerBinding.instance.addPostFrameCallback((_) { @@ -516,21 +532,24 @@ class LockDetailLogic extends BaseGetXController { } } - /// 锁设置里面开启关闭考勤刷新锁详情 void initLockSetOpenOrCloseCheckInRefreshLockDetailWithAttendanceAction() { // 蓝牙协议通知传输跟蓝牙之外的数据传输类不一样 eventBus state.lockSetOpenOrCloseCheckInRefreshLockDetailWithAttendanceEvent = - eventBus.on().listen((event) { + eventBus + .on() + .listen((event) { if (event.type == 0) { // 0考勤 state.isAttendance.value = int.parse(event.setResult); - state.keyInfos.value.lockSetting!.attendance = int.parse(event.setResult); + state.keyInfos.value.lockSetting!.attendance = + int.parse(event.setResult); } else if (event.type == 1) { // 1 开锁时是否需联网 state.isOpenLockNeedOnline.value = int.parse(event.setResult); - state.keyInfos.value.lockSetting!.appUnlockOnline = int.parse(event.setResult); - state.lockNetToken = "";// 改变开锁时是否联网状态的时候清空token + state.keyInfos.value.lockSetting!.appUnlockOnline = + int.parse(event.setResult); + state.lockNetToken = ""; // 改变开锁时是否联网状态的时候清空token } else if (event.type == 2) { // 2 常开模式 state.isOpenPassageMode.value = int.parse(event.setResult); @@ -562,7 +581,8 @@ class LockDetailLogic extends BaseGetXController { state.keyInfos.value.keyStatus == XSConstantMacro.keyStatusExpired || state.keyInfos.value.keyStatus == XSConstantMacro.keyStatusDeleted || state.keyInfos.value.keyStatus == XSConstantMacro.keyStatusReset) { - text = "${"你的钥匙".tr}${XSConstantMacro.getKeyStatusStr(state.keyInfos.value.keyStatus!)}"; + text = + "${"你的钥匙".tr}${XSConstantMacro.getKeyStatusStr(state.keyInfos.value.keyStatus!)}"; } else { text = state.isOpenPassageMode.value == 1 ? "常开模式启动!长按闭锁".tr @@ -587,5 +607,4 @@ class LockDetailLogic extends BaseGetXController { await PermissionDialog.request(Permission.location); await PermissionDialog.requestBluetooth(); } - } diff --git a/star_lock/lib/main/lockDetail/lockDetail/lockDetail_page.dart b/star_lock/lib/main/lockDetail/lockDetail/lockDetail_page.dart index b633c0f7..e6c404a9 100644 --- a/star_lock/lib/main/lockDetail/lockDetail/lockDetail_page.dart +++ b/star_lock/lib/main/lockDetail/lockDetail/lockDetail_page.dart @@ -1,15 +1,14 @@ import 'dart:async'; -import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; -import 'package:get_storage/get_storage.dart'; import 'package:intl/intl.dart'; import 'package:star_lock/app_settings/app_colors.dart'; import 'package:star_lock/flavors.dart'; import 'package:star_lock/main/lockDetail/lockDetail/lockDetail_list_page.dart'; import 'package:star_lock/tools/aliyunRealNameAuth/aliyunRealNameAuthHandle.dart'; +import 'package:star_lock/tools/showCupertinoAlertView.dart'; import 'package:star_lock/tools/showTipView.dart'; import 'package:star_lock/widget/flavors_img.dart'; @@ -147,23 +146,35 @@ class _LockDetailPageState extends State return Scaffold( backgroundColor: Colors.white, body: Obx(() { - return Column( + return Stack( children: [ - SizedBox( - height: 35.h, + Column( + children: [ + SizedBox( + height: 35.h, + ), + xhjInfoView(), + SizedBox( + height: 35.h, + ), + labelText('images/icon_slider_horizontal.png', '功能'.tr, () { + Get.to(LockDetailListPage( + title: '功能'.tr, items: getBottomWidget())); + }), + labelText('images/icon_puzzlepiece_extension.png', '配件'.tr, () { + Get.to(LockDetailListPage( + title: '配件'.tr, items: getAttachmentWidget())); + }), + ], ), - xhjInfoView(), - SizedBox( - height: 35.h, - ), - labelText('images/icon_slider_horizontal.png', '功能'.tr, () { - Get.to( - LockDetailListPage(title: '功能'.tr, items: getBottomWidget())); - }), - labelText('images/icon_puzzlepiece_extension.png', '配件'.tr, () { - Get.to(LockDetailListPage( - title: '配件'.tr, items: getAttachmentWidget())); - }), + Visibility( + visible: state.iSClosedUnlockSuccessfulPopup.value, + child: Container( + width: 1.sw, + height: 1.sh - ScreenUtil().statusBarHeight * 2, + color: Colors.black.withOpacity(0.3), + child: _unlockSuccessWidget()), + ) ], ); }), @@ -182,7 +193,7 @@ class _LockDetailPageState extends State boxShadow: [ BoxShadow( color: Colors.black.withOpacity(0.15), - offset: Offset(0, 0), + offset: const Offset(0, 0), blurRadius: 10.r, spreadRadius: 0, ), @@ -257,7 +268,7 @@ class _LockDetailPageState extends State boxShadow: [ BoxShadow( color: Colors.black.withOpacity(0.3), - offset: Offset(0, 0), + offset: const Offset(0, 0), blurRadius: 10.r, spreadRadius: 0, ), @@ -449,19 +460,11 @@ class _LockDetailPageState extends State ), Visibility( visible: state.iSClosedUnlockSuccessfulPopup.value, - // visible: true, - child: GestureDetector( - onTap: () { - setState(() { - state.iSClosedUnlockSuccessfulPopup.value = false; - }); - }, - child: Container( - width: 1.sw, - height: 1.sh - ScreenUtil().statusBarHeight * 2, - color: Colors.black.withOpacity(0.3), - child: _unlockSuccessWidget()), - ), + child: Container( + width: 1.sw, + height: 1.sh - ScreenUtil().statusBarHeight * 2, + color: Colors.black.withOpacity(0.3), + child: _unlockSuccessWidget()), ) ]), ], @@ -631,6 +634,33 @@ class _LockDetailPageState extends State ], ), )), + Positioned( + right: 90.w, + bottom: 1, + child: Obx(() => Visibility( + visible: state.keyInfos.value.lockSetting!.remoteUnlock == 1 + ? true + : false, + child: GestureDetector( + onTap: () { + ShowCupertinoAlertView() + .isToRemoteUnLockAlert((idCard, name) { + if (state.keyInfos.value.hasGateway != 1) { + logic.showToast('附近没有可用网关'); + } + }); + }, + child: Align( + alignment: const Alignment(0.6, 1), + child: FlavorsImg( + child: Image.asset( + 'images/main/icon_main_remoteUnlocking.png', + width: 50.w, + height: 52.w, + ), + )), + ))), + ) ], ), ), @@ -652,7 +682,9 @@ class _LockDetailPageState extends State SizedBox( height: 30.h, ), - F.sw(defaultCall: () => adminInfoView(), xhjCall: () => SizedBox()), + F.sw( + defaultCall: () => adminInfoView(), + xhjCall: () => const SizedBox()), SizedBox( height: 20.h, ), @@ -691,7 +723,7 @@ class _LockDetailPageState extends State if (add) SizedBox(width: 20.w) else SizedBox(width: 40.w), FlavorsImg( child: Image.asset( - state.keyInfos.value.remoteEnable == 1 + state.keyInfos.value.hasGateway == 1 ? 'images/main/icon_main_remoteUnlocking.png' : 'images/main/icon_main_remoteUnlocking_grey.png', width: 24.w, @@ -703,7 +735,7 @@ class _LockDetailPageState extends State TranslationLoader.lanKeys!.gatewayDevice!.tr, style: TextStyle( fontSize: 20.sp, - color: state.keyInfos.value.remoteEnable == 1 + color: state.keyInfos.value.hasGateway == 1 ? AppColors.mainColor : AppColors.btnDisableColor), ), @@ -1222,36 +1254,54 @@ class _LockDetailPageState extends State } Widget _unlockSuccessWidget() { - return Stack( - alignment: Alignment.center, - children: [ - Image.asset( - state.iSOpenLock.value == true - ? 'images/main/unlocked_bg.png' - : 'images/main/locked_bg.png', - width: 358.w, - height: 348.h, - ), - Positioned( - top: (1.sh - ScreenUtil().statusBarHeight * 2) / 2, - child: Column( - children: [ - Text( - state.keyInfos.value.lockAlias!, - style: TextStyle( - color: AppColors.placeholderTextColor, fontSize: 24.sp), - ), - SizedBox( - height: 10.h, - ), - Text( - getCurrentFormattedTime(), - style: TextStyle( - color: AppColors.darkGrayTextColor, fontSize: 24.sp), - ) - ], - )) - ], + return Center( + child: Stack( + children: [ + Image.asset( + state.iSOpenLock.value == true + ? 'images/main/unlocked_bg.png' + : 'images/main/locked_bg.png', + width: 358.w, + height: 348.h, + ), + Positioned( + top: 180.h, + left: 55.w, + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + state.keyInfos.value.lockAlias!, + style: TextStyle( + color: AppColors.placeholderTextColor, fontSize: 24.sp), + ), + SizedBox( + height: 10.h, + ), + Text( + getCurrentFormattedTime(), + style: TextStyle( + color: AppColors.darkGrayTextColor, fontSize: 24.sp), + ) + ], + )), + Positioned( + top: 288.h, + left: 155.w, + child: GestureDetector( + onTap: () { + setState(() { + state.iSClosedUnlockSuccessfulPopup.value = false; + }); + }, + child: Container( + width: 60.r, + height: 60.r, + color: Colors.transparent, + )), + ), + ], + ), ); } diff --git a/star_lock/lib/main/lockDetail/lockSet/lockEscalation/lockEscalation_logic.dart b/star_lock/lib/main/lockDetail/lockSet/lockEscalation/lockEscalation_logic.dart index 960a11e1..09766bcd 100644 --- a/star_lock/lib/main/lockDetail/lockSet/lockEscalation/lockEscalation_logic.dart +++ b/star_lock/lib/main/lockDetail/lockSet/lockEscalation/lockEscalation_logic.dart @@ -6,6 +6,7 @@ import 'dart:typed_data'; import 'package:crypto/crypto.dart'; import 'package:file_picker/file_picker.dart'; import 'package:flutter_blue_plus/flutter_blue_plus.dart'; +import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:get/get.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:star_lock/blue/blue_manage.dart'; @@ -16,10 +17,11 @@ import 'package:star_lock/blue/io_tool/io_tool.dart'; import 'package:star_lock/blue/io_tool/manager_event_bus.dart'; import 'package:star_lock/blue/sender_manage.dart'; import 'package:star_lock/main/lockDetail/lockSet/lockSet/lockSet_logic.dart'; -import 'package:star_lock/permission/permission_dialog.dart'; import 'package:star_lock/tools/baseGetXController.dart'; import 'package:star_lock/tools/commonDataManage.dart'; +import 'package:star_lock/tools/showTipView.dart'; import 'package:star_lock/tools/storage.dart'; +import 'package:star_lock/widget/permission/permission_dialog.dart'; import '../../../../app_settings/app_settings.dart'; import 'lockEscalation_state.dart'; @@ -67,7 +69,15 @@ class LockEscalationLogic extends BaseGetXController { } String md5Str = md5.convert(otaBin!).toString(); headJson!['fwMd5'] = md5Str; - blueOTAUpgrade(headJson!, [0, 0, 0, 0]); + ShowTipView().showIosTipWithContentDialog("升级过程中无法开锁,请先开锁后再升级".tr, + () async { + blueOTAUpgrade(headJson!, [0, 0, 0, 0]); + EasyLoading.show( + status: '设备连接中...'.tr, maskType: EasyLoadingMaskType.black); + Future.delayed(const Duration(seconds: 4), () { + EasyLoading.dismiss(); + }); + }); } //蓝牙操作 ota 升级 @@ -217,7 +227,7 @@ class LockEscalationLogic extends BaseGetXController { Uint8List bin = data.sublist(binOffset.toInt(), data.length); //md5 校验有问题,暂时不解析 String md5Str = md5.convert(bin).toString().toUpperCase(); - AppLog.log('---> $md5Str ${meta['fwMd5']}'); + AppLog.log('固件 md5 检验md5:$md5Str 固件信息 md5:${meta['fwMd5']}'); if (md5Str != meta['fwMd5']) { showToast('文件校验失败 0x02'.tr); return null; diff --git a/star_lock/lib/main/lockDetail/lockSet/lockEscalation/lockEscalation_page.dart b/star_lock/lib/main/lockDetail/lockSet/lockEscalation/lockEscalation_page.dart index 65a81e09..e2dc59d7 100644 --- a/star_lock/lib/main/lockDetail/lockSet/lockEscalation/lockEscalation_page.dart +++ b/star_lock/lib/main/lockDetail/lockSet/lockEscalation/lockEscalation_page.dart @@ -31,136 +31,161 @@ class _LockEscalationPageState extends State { ), body: Container( padding: EdgeInsets.all(30.w), - child: Column( - children: [ - Obx(() { - return logic.state.otaUpdateIng.value - ? PopScope( - canPop: false, - onPopInvoked: (didPop) async { - if (logic.state.otaUpdateIng.value) { - logic.closeOTADAta(); - } - }, - child: const SizedBox(), - ) - : const SizedBox(); - }), - SizedBox( - height: 60.h, - ), - Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Image.asset( - 'images/main/icon_main_lockSet_lockEscalation.png', - width: 36.w, - height: 36.w, - ), - SizedBox( - width: 10.w, - ), - Text( - // TranslationLoader.lanKeys!.haveNewVersion!.tr, - "未发现新版本", - style: TextStyle( - fontSize: 24.sp, fontWeight: FontWeight.w600), - ) - ], - ), - SizedBox( - height: 30.h, - ), - Text( - "${TranslationLoader.lanKeys!.currentVersion!.tr}:1.0.0", - style: TextStyle( - fontSize: 18.sp, color: AppColors.darkGrayTextColor), - ), - SizedBox( - height: 40.h, - ), - Obx(() { - return !logic.state.otaUpdateIng.value - ? SubmitBtn( - btnName: TranslationLoader.lanKeys!.upgrade!.tr, - onClick: () {}) - : SizedBox(); - }), - SizedBox( - height: 10.h, - ), - Obx(() { - return !logic.state.otaUpdateIng.value - ? Row( - mainAxisAlignment: MainAxisAlignment.end, - children: [ - // Container( - // margin: EdgeInsets.only(top: 8, bottom: 8), - // width: Get.width, - // child: Center( - // child: Text( - // // "${TranslationLoader.lanKeys!.newVersion!.tr}:1.0.1", - // "未发现新版本", - // style: TextStyle( - // color: AppColors.mainColor, - // fontSize: 18.sp), - // ), - // ), - // ), - GestureDetector( - onTap: () { - logic.otaUpdate(); - }, - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Text( - '手动升级', - style: TextStyle( - color: AppColors.mainColor, - fontSize: 18.sp, - fontWeight: FontWeight.w400), - ), - ), - ) - ], - ) - : Padding( - padding: EdgeInsets.symmetric( - horizontal: 50.w, vertical: 15.h), - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - Text( - '固件传输中', - style: TextStyle( - color: AppColors.mainColor, - fontSize: 18.sp, - fontWeight: FontWeight.w400), - ), - SizedBox( - width: 10.w, - ), - Expanded( - child: ClipRRect( - borderRadius: BorderRadius.all( - Radius.circular(10.r)), - child: LinearProgressIndicator( - value: logic - .state.otaProgress.value, // 50% 进度 - backgroundColor: Colors.grey[200], - valueColor: - AlwaysStoppedAnimation( - AppColors.mainColor), - ), - ), - ), - ], - ), - ); - }), - ], - ), + child: Obx(() { + return updateView(logic); + }), )); }); } + + Widget updateView(LockEscalationLogic logic) { + if (logic.state.otaUpdateIng.value) { + return otaUpdate(logic); + } + return defaultUpdate(logic); + } + + //升级 + Widget defaultUpdate(LockEscalationLogic logic) { + return Column( + children: [ + SizedBox( + height: 60.h, + ), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Image.asset( + 'images/main/icon_main_lockSet_lockEscalation.png', + width: 36.w, + height: 36.w, + ), + SizedBox( + width: 10.w, + ), + Text( + // TranslationLoader.lanKeys!.haveNewVersion!.tr, + "未发现新版本", + style: TextStyle(fontSize: 24.sp, fontWeight: FontWeight.w600), + ) + ], + ), + SizedBox( + height: 30.h, + ), + Text( + "${TranslationLoader.lanKeys!.currentVersion!.tr}:1.0.0", + style: TextStyle(fontSize: 18.sp, color: AppColors.darkGrayTextColor), + ), + SizedBox( + height: 40.h, + ), + Obx(() { + return !logic.state.otaUpdateIng.value + ? SubmitBtn( + btnName: TranslationLoader.lanKeys!.upgrade!.tr, + onClick: () {}) + : SizedBox(); + }), + SizedBox( + height: 10.h, + ), + Align( + alignment: Alignment.topRight, + child: GestureDetector( + onTap: () { + logic.otaUpdate(); + }, + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Text( + '手动升级'.tr, + style: TextStyle( + color: AppColors.mainColor, + fontSize: 18.sp, + fontWeight: FontWeight.w400), + ), + ), + ), + ), + ], + ); + } + + //ota升级 + Widget otaUpdate(LockEscalationLogic logic) { + return Column( + children: [ + SizedBox( + height: 20.h, + ), + Text( + '${'机型'.tr}:${logic.headJson?['platform']}-${logic.headJson?['product']}', + style: TextStyle( + color: AppColors.blackColor, + fontSize: 22.sp, + fontWeight: FontWeight.w600), + ), + SizedBox( + height: 10.h, + ), + Text( + '${'硬件版本'.tr}:${logic.headJson?['hwVersion']}', + style: TextStyle( + color: AppColors.blackColor, + fontSize: 22.sp, + fontWeight: FontWeight.w600), + ), + SizedBox( + height: 10.h, + ), + Text( + '${'固件版本'.tr}:${logic.headJson?['fwVersion']}', + style: TextStyle( + color: AppColors.blackColor, + fontSize: 22.sp, + fontWeight: FontWeight.w600), + ), + SizedBox( + height: 20.h, + ), + Text( + '传输期间请勿离开当前页面'.tr, + style: TextStyle( + color: AppColors.blackColor, + fontSize: 20.sp, + fontWeight: FontWeight.w400), + ), + Padding( + padding: EdgeInsets.symmetric(horizontal: 50.w, vertical: 15.h), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + '固件传输中', + style: TextStyle( + color: AppColors.mainColor, + fontSize: 18.sp, + fontWeight: FontWeight.w400), + ), + SizedBox( + width: 10.w, + ), + Expanded( + child: ClipRRect( + borderRadius: BorderRadius.all(Radius.circular(10.r)), + child: LinearProgressIndicator( + value: logic.state.otaProgress.value, // 50% 进度 + backgroundColor: Colors.grey[200], + valueColor: + AlwaysStoppedAnimation(AppColors.mainColor), + ), + ), + ), + ], + ), + ), + ], + ); + } } diff --git a/star_lock/lib/main/lockDetail/palm/addPalmType/addPalmType_page.dart b/star_lock/lib/main/lockDetail/palm/addPalmType/addPalmType_page.dart index 1816a18c..9fa34e10 100644 --- a/star_lock/lib/main/lockDetail/palm/addPalmType/addPalmType_page.dart +++ b/star_lock/lib/main/lockDetail/palm/addPalmType/addPalmType_page.dart @@ -4,6 +4,7 @@ import 'package:flutter/services.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:star_lock/main/lockDetail/palm/addPalmType/addPalmType_logic.dart'; +import 'package:star_lock/tools/commonDataManage.dart'; import 'package:star_lock/tools/dateTool.dart'; import 'package:star_lock/tools/pickers/pickers.dart'; import 'package:star_lock/tools/pickers/time_picker/model/date_mode.dart'; @@ -249,13 +250,17 @@ class _AddPalmTypePageState extends State { Widget keyBottomWidget() { return Column( children: [ - CommonItem( - leftTitel: "是否是管理员".tr, - rightTitle: "", - isTipsImg: false, - isHaveRightWidget: true, - rightWidget: SizedBox( - width: 60.w, height: 50.h, child: Obx(() => _isAdmin()))), + Obx(() => Visibility( + visible: CommonDataManage().currentKeyInfo.isLockOwner == 1 + ? true + : false, + child: CommonItem( + leftTitel: "是否为管理员".tr, + rightTitle: "", + isTipsImg: false, + isHaveRightWidget: true, + rightWidget: SizedBox( + width: 60.w, height: 50.h, child: Obx(() => _isAdmin()))))), SizedBox(height: 30.h), SubmitBtn( btnName: TranslationLoader.lanKeys!.next!.tr, @@ -329,7 +334,7 @@ class _AddPalmTypePageState extends State { ); } - // 是否是管理员 + // 是否为管理员 CupertinoSwitch _isAdmin() { return CupertinoSwitch( activeColor: CupertinoColors.activeBlue, diff --git a/star_lock/lib/main/lockDetail/palm/addPalmType/addPalmType_state.dart b/star_lock/lib/main/lockDetail/palm/addPalmType/addPalmType_state.dart index f54b67c3..d5538791 100644 --- a/star_lock/lib/main/lockDetail/palm/addPalmType/addPalmType_state.dart +++ b/star_lock/lib/main/lockDetail/palm/addPalmType/addPalmType_state.dart @@ -7,7 +7,7 @@ class AddPalmTypeState { final fromType = 1.obs; // // 1从添加钥匙列表进入 2从考勤添加员工入口进入 var fromTypeTwoStaffName = "".obs; // 考勤添加人脸员工名字 final isStressFingerprint = false.obs; - final isAdministrator = false.obs; // 是否是管理员 + final isAdministrator = false.obs; // 是否为管理员 var beginTime = "".obs; // 开始时间 var endTime = "".obs; // 结束时间 diff --git a/star_lock/lib/main/lockDetail/passwordKey/passwordKeyDetail/passwordKeyDetail_page.dart b/star_lock/lib/main/lockDetail/passwordKey/passwordKeyDetail/passwordKeyDetail_page.dart index d7561109..81b243ae 100644 --- a/star_lock/lib/main/lockDetail/passwordKey/passwordKeyDetail/passwordKeyDetail_page.dart +++ b/star_lock/lib/main/lockDetail/passwordKey/passwordKeyDetail/passwordKeyDetail_page.dart @@ -25,7 +25,8 @@ class PasswordKeyDetailPage extends StatefulWidget { State createState() => _PasswordKeyDetailPageState(); } -class _PasswordKeyDetailPageState extends State with RouteAware { +class _PasswordKeyDetailPageState extends State + with RouteAware { final logic = Get.put(PasswordKeyDetailLogic()); final state = Get.find().state; @@ -64,13 +65,15 @@ class _PasswordKeyDetailPageState extends State with Rout Obx(() => CommonItem( leftTitel: TranslationLoader.lanKeys!.password!.tr, rightTitle: state.keyboardPwd.value, - isHaveDirection: state.itemData.value.isCustom! == 1 ? true : false, + isHaveDirection: + state.itemData.value.isCustom! == 1 ? true : false, isHaveLine: true, action: () { if (state.itemData.value.isCustom! != 1) { return; } else { - showCupertinoAlertDialog(context, state.inputPwdController); + showCupertinoAlertDialog( + context, state.inputPwdController); } })), Obx(() => CommonItem( @@ -86,31 +89,37 @@ class _PasswordKeyDetailPageState extends State with Rout leftTitel: "有效期", rightTitle: logic.getUseDateStr(), isHaveLine: state.isCirculation.value, - isHaveDirection: state.itemData.value.isCustom! == 1 ? true : false, + isHaveDirection: + state.itemData.value.isCustom! == 1 ? true : false, allHeight: - state.itemData.value.keyboardPwdType == 3 ? 90.h : 65.h, + state.itemData.value.keyboardPwdType == 3 ? 90.h : 65.h, action: () async { if (state.itemData.value.isCustom! != 1) { return; } - var backData = await Get.toNamed(Routers.passwordKeyDetailChangeDatePage, arguments: { - 'itemData': state.itemData.value, - }); + var backData = await Get.toNamed( + Routers.passwordKeyDetailChangeDatePage, + arguments: { + 'itemData': state.itemData.value, + }); if (backData != null) { - state.itemData.value.startDate = int.parse(backData["beginTimeTimestamp"])*1000; - state.itemData.value.endDate = int.parse(backData["endTimeTimestamp"])*1000; + state.itemData.value.startDate = + int.parse(backData["beginTimeTimestamp"]) * 1000; + state.itemData.value.endDate = + int.parse(backData["endTimeTimestamp"]) * 1000; // 改了日期之后,永久只能改限时的 state.itemData.value.keyboardPwdType = 3; setState(() {}); } })), Obx(() => Visibility( - visible: state.isCirculation.value, - child: CommonItem( - leftTitel: "结束时间", - rightTitle: DateTool().dateToYMDHNString(state.itemData.value.endDate.toString()), - isHaveLine: true), - )), + visible: state.isCirculation.value, + child: CommonItem( + leftTitel: "结束时间", + rightTitle: DateTool().dateToYMDHNString( + state.itemData.value.endDate.toString()), + isHaveLine: true), + )), Container(height: 10.h), CommonItem( leftTitel: TranslationLoader.lanKeys!.sender!.tr, @@ -123,19 +132,20 @@ class _PasswordKeyDetailPageState extends State with Rout action: () {}), Container(height: 10.h), Obx(() => Visibility( - visible: state.itemData.value.isCustom! == 1, - child: Column( - children: [ - CommonItem( - leftTitel: "管理员".tr, - rightTitle: "", - isTipsImg: false, - isHaveRightWidget: true, - rightWidget: SizedBox(width: 60.w, height: 50.h, child: _isAdmin())), - Container(height: 10.h), - ], - ), - )), + visible: state.itemData.value.isCustom! == 1, + child: Column( + children: [ + CommonItem( + leftTitel: "是否为管理员".tr, + rightTitle: "", + isTipsImg: false, + isHaveRightWidget: true, + rightWidget: SizedBox( + width: 60.w, height: 50.h, child: _isAdmin())), + Container(height: 10.h), + ], + ), + )), CommonItem( leftTitel: TranslationLoader.lanKeys!.operatingRecord!.tr, rightTitle: "", @@ -223,7 +233,7 @@ class _PasswordKeyDetailPageState extends State with Rout left: 30.w, right: 30.w, top: 30.w, bottom: 30.w), padding: EdgeInsets.only(top: 25.w, bottom: 25.w), onClick: () { - ShowTipView().showIosTipWithContentDialog("确定要删除吗?".tr, (){ + ShowTipView().showIosTipWithContentDialog("确定要删除吗?".tr, () { state.isDeletPasswordKey.value = true; logic.senderCustomPasswords(); }); @@ -233,7 +243,7 @@ class _PasswordKeyDetailPageState extends State with Rout )); } - // 是否是管理员 + // 是否为管理员 CupertinoSwitch _isAdmin() { return CupertinoSwitch( activeColor: CupertinoColors.activeBlue, @@ -241,9 +251,9 @@ class _PasswordKeyDetailPageState extends State with Rout thumbColor: CupertinoColors.white, value: state.isAdministrator.value, onChanged: (value) { - state.isAdministrator.value = value; - state.isDeletPasswordKey.value = false; - logic.senderCustomPasswords(); + // state.isAdministrator.value = value; + // state.isDeletPasswordKey.value = false; + // logic.senderCustomPasswords(); }, ); } @@ -251,7 +261,8 @@ class _PasswordKeyDetailPageState extends State with Rout //发送时间 String getSenderDate(PasswordKeyListItem indexEntity) { String senderDate = ''; - DateTime dateStr = DateTime.fromMillisecondsSinceEpoch(indexEntity.sendDate!); + DateTime dateStr = + DateTime.fromMillisecondsSinceEpoch(indexEntity.sendDate!); senderDate = dateStr.toLocal().toString().substring(0, 16); return senderDate; } @@ -265,28 +276,33 @@ class _PasswordKeyDetailPageState extends State with Rout title: inputController == state.inputNameController ? "${TranslationLoader.lanKeys!.amend!.tr}${TranslationLoader.lanKeys!.name!.tr}" : "${TranslationLoader.lanKeys!.amend!.tr}${TranslationLoader.lanKeys!.password!.tr}", - tipTitle: inputController.text.isNotEmpty ? inputController.text : "请输入6-9位密码", + tipTitle: inputController.text.isNotEmpty + ? inputController.text + : "请输入6-9位密码", controller: inputController, keyboardType: inputController == state.inputNameController ? TextInputType.text : TextInputType.number, - inputFormatters: [ - FilteringTextInputFormatter.deny('\n'), - LengthLimitingTextInputFormatter(inputController == state.inputNameController ? 50 : 9), - ], + inputFormatters: [ + FilteringTextInputFormatter.deny('\n'), + LengthLimitingTextInputFormatter( + inputController == state.inputNameController ? 50 : 9), + ], sureClick: () { //发送编辑钥匙名称请求 - if(inputController == state.inputPwdController){ - if (inputController.text.isEmpty || inputController.text.length < 6 || inputController.text.length > 9) { + if (inputController == state.inputPwdController) { + if (inputController.text.isEmpty || + inputController.text.length < 6 || + inputController.text.length > 9) { logic.showToast("请输入6-9位密码"); return; } } state.isDeletPasswordKey.value = false; - if(inputController == state.inputNameController){ + if (inputController == state.inputNameController) { // 修改密码名称 logic.updatePwdRequest(1); - }else{ + } else { // 修改密码 logic.senderCustomPasswords(); } @@ -386,13 +402,13 @@ class _PasswordKeyDetailPageState extends State with Rout case 0: //微信好友 { - NativeInteractionTool().loadNativeShare(shareText:pwdShareStr); + NativeInteractionTool().loadNativeShare(shareText: pwdShareStr); } break; case 1: //短信 { - NativeInteractionTool().loadNativeShare(shareText:pwdShareStr); + NativeInteractionTool().loadNativeShare(shareText: pwdShareStr); } break; case 2: @@ -404,7 +420,7 @@ class _PasswordKeyDetailPageState extends State with Rout case 3: //更多 { - NativeInteractionTool().loadNativeShare(shareText:pwdShareStr); + NativeInteractionTool().loadNativeShare(shareText: pwdShareStr); } break; default: diff --git a/star_lock/lib/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKey_perpetual_page.dart b/star_lock/lib/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKey_perpetual_page.dart index 34a60c17..8760d93c 100644 --- a/star_lock/lib/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKey_perpetual_page.dart +++ b/star_lock/lib/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKey_perpetual_page.dart @@ -335,18 +335,22 @@ class _PasswordKeyPerpetualPageState extends State // 自定义是管理员密码 Widget keyIfAdministratorWidget() { - return Column( - children: [ - // SizedBox(height: 10.h), - Obx(() => CommonItem( - leftTitel: "是否是管理员".tr, - rightTitle: "", - isTipsImg: false, - isHaveRightWidget: true, - rightWidget: SizedBox( - width: 60.w, height: 50.h, child: _isAdministrator()))), - SizedBox(height: 10.h), - ], + return Visibility( + visible: + CommonDataManage().currentKeyInfo.isLockOwner == 1 ? true : false, + child: Column( + children: [ + // SizedBox(height: 10.h), + Obx(() => CommonItem( + leftTitel: "是否为管理员".tr, + rightTitle: "", + isTipsImg: false, + isHaveRightWidget: true, + rightWidget: SizedBox( + width: 60.w, height: 50.h, child: _isAdministrator()))), + SizedBox(height: 10.h), + ], + ), ); } @@ -629,7 +633,7 @@ class _PasswordKeyPerpetualPageState extends State ); } - // 是否是管理员 + // 是否为管理员 CupertinoSwitch _isAdministrator() { return CupertinoSwitch( activeColor: CupertinoColors.activeBlue, diff --git a/star_lock/lib/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKey_perpetual_state.dart b/star_lock/lib/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKey_perpetual_state.dart index bee68904..9b5b51d9 100644 --- a/star_lock/lib/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKey_perpetual_state.dart +++ b/star_lock/lib/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKey_perpetual_state.dart @@ -12,7 +12,7 @@ class PasswordKeyPerpetualState { final isPermanent = true.obs; //是否永久 var getPwdStr = ''.obs; var pwdNameStr = ''; - final isAdministrator = false.obs; // 是否是管理员 + final isAdministrator = false.obs; // 是否为管理员 var beginTime = DateTool().getNowDateWithType(3).obs; //默认为当前时间 开始时间 var endTime = DateTool().getNowDateWithType(3).obs; //默认为当前时间 结束时间 diff --git a/star_lock/lib/main/lockMian/entity/lockListInfo_entity.dart b/star_lock/lib/main/lockMian/entity/lockListInfo_entity.dart index 48e524eb..950d7639 100644 --- a/star_lock/lib/main/lockMian/entity/lockListInfo_entity.dart +++ b/star_lock/lib/main/lockMian/entity/lockListInfo_entity.dart @@ -130,6 +130,7 @@ class LockListInfoItemEntity { Bluetooth? bluetooth; LockFeature? lockFeature; LockSetting? lockSetting; + int? hasGateway; LockListInfoItemEntity( {this.keyId, @@ -163,7 +164,8 @@ class LockListInfoItemEntity { this.isOnlyManageSelf, this.restoreCount, this.model, - this.vendor}); + this.vendor, + this.hasGateway}); LockListInfoItemEntity.fromJson(Map json) { keyId = json['keyId']; @@ -204,6 +206,7 @@ class LockListInfoItemEntity { lockSetting = json['lockSetting'] != null ? LockSetting.fromJson(json['lockSetting']) : null; + hasGateway = json['hasGateway']; } Map toJson() { @@ -246,6 +249,7 @@ class LockListInfoItemEntity { if (lockSetting != null) { data['lockSetting'] = lockSetting!.toJson(); } + data['hasGateway'] = hasGateway; return data; } } diff --git a/star_lock/lib/mine/about/about_console.dart b/star_lock/lib/mine/about/about_console.dart index 1ba49b66..1673d87c 100644 --- a/star_lock/lib/mine/about/about_console.dart +++ b/star_lock/lib/mine/about/about_console.dart @@ -1,7 +1,7 @@ import 'dart:async'; import 'package:get/get.dart'; -import 'package:star_lock/debug/debug_tool.dart'; +import 'package:star_lock/mine/about/debug/debug_tool.dart'; import 'package:star_lock/tools/storage.dart'; class AboutConsole extends GetxController { diff --git a/star_lock/lib/debug/controller.dart b/star_lock/lib/mine/about/debug/controller.dart similarity index 95% rename from star_lock/lib/debug/controller.dart rename to star_lock/lib/mine/about/debug/controller.dart index 5e6ac502..04b324b0 100644 --- a/star_lock/lib/debug/controller.dart +++ b/star_lock/lib/mine/about/debug/controller.dart @@ -1,7 +1,6 @@ import 'dart:async'; import 'dart:math'; -import 'package:date_format/date_format.dart'; import 'package:flutter/material.dart'; import 'package:flutter_blue_plus/flutter_blue_plus.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart'; @@ -11,14 +10,10 @@ import 'package:rxdart/rxdart.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/io_protocol/io_cleanUpUsers.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/debug/log.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/mine/about/debug/log.dart'; import 'package:star_lock/tools/commonDataManage.dart'; import 'package:star_lock/tools/dateTool.dart'; import 'package:star_lock/tools/storage.dart'; diff --git a/star_lock/lib/debug/debug_console.dart b/star_lock/lib/mine/about/debug/debug_console.dart similarity index 98% rename from star_lock/lib/debug/debug_console.dart rename to star_lock/lib/mine/about/debug/debug_console.dart index aec4e20d..b7a96d22 100644 --- a/star_lock/lib/debug/debug_console.dart +++ b/star_lock/lib/mine/about/debug/debug_console.dart @@ -4,11 +4,10 @@ import 'dart:async'; import 'dart:io'; import 'package:flutter/material.dart'; +import 'package:star_lock/mine/about/debug/controller.dart'; +import 'package:star_lock/mine/about/debug/log.dart'; +import 'package:star_lock/mine/about/debug/tile.dart'; -import 'package:star_lock/debug/controller.dart'; -import 'package:star_lock/debug/log.dart'; -import 'package:star_lock/debug/tile.dart'; -import 'package:star_lock/debug/utils/scrollable.dart'; /// # Debug Console /// diff --git a/star_lock/lib/debug/debug_tool.dart b/star_lock/lib/mine/about/debug/debug_tool.dart similarity index 74% rename from star_lock/lib/debug/debug_tool.dart rename to star_lock/lib/mine/about/debug/debug_tool.dart index 2a8e74d9..20e1d58e 100644 --- a/star_lock/lib/debug/debug_tool.dart +++ b/star_lock/lib/mine/about/debug/debug_tool.dart @@ -1,7 +1,8 @@ import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; -import 'package:star_lock/debug/controller.dart'; -import 'package:star_lock/debug/debug_console.dart'; +import 'package:star_lock/app_settings/app_colors.dart'; +import 'package:star_lock/mine/about/debug/debug_console.dart'; class DeBug { static void log(String message, {String? tag}) { @@ -24,7 +25,15 @@ class DeBug { offset.value += details.delta; }, child: FloatingActionButton( - child: Icon(Icons.bug_report), + backgroundColor: AppColors.mainColor, + shape: ContinuousRectangleBorder( + borderRadius: BorderRadius.all(Radius.circular(20.r)), + side: BorderSide(color: Colors.white, width: 2.w), + ), + child: const Icon( + Icons.bug_report, + color: Colors.white, + ), onPressed: () { if (openInfo) { Get.back(); diff --git a/star_lock/lib/debug/log.dart b/star_lock/lib/mine/about/debug/log.dart similarity index 100% rename from star_lock/lib/debug/log.dart rename to star_lock/lib/mine/about/debug/log.dart diff --git a/star_lock/lib/debug/popup.dart b/star_lock/lib/mine/about/debug/popup.dart similarity index 93% rename from star_lock/lib/debug/popup.dart rename to star_lock/lib/mine/about/debug/popup.dart index a50f1f9a..f2e1b035 100644 --- a/star_lock/lib/debug/popup.dart +++ b/star_lock/lib/mine/about/debug/popup.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; -import 'package:star_lock/debug/controller.dart'; -import 'package:star_lock/debug/debug_console.dart'; +import 'package:star_lock/mine/about/debug/controller.dart'; +import 'package:star_lock/mine/about/debug/debug_console.dart'; /// A widget that adds a floating button for debugging purposes. class DebugConsolePopup extends StatefulWidget { diff --git a/star_lock/lib/debug/tile.dart b/star_lock/lib/mine/about/debug/tile.dart similarity index 97% rename from star_lock/lib/debug/tile.dart rename to star_lock/lib/mine/about/debug/tile.dart index a23cd98a..1a1a6b4e 100644 --- a/star_lock/lib/debug/tile.dart +++ b/star_lock/lib/mine/about/debug/tile.dart @@ -4,8 +4,8 @@ import 'package:flutter/services.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; -import 'package:star_lock/debug/debug_tool.dart'; -import 'package:star_lock/debug/log.dart'; +import 'package:star_lock/mine/about/debug/debug_tool.dart'; +import 'package:star_lock/mine/about/debug/log.dart'; class DebugConsoleTile extends StatefulWidget { final DebugConsoleLog log; diff --git a/star_lock/lib/debug/utils/scrollable.dart b/star_lock/lib/mine/about/debug/utils/scrollable.dart similarity index 100% rename from star_lock/lib/debug/utils/scrollable.dart rename to star_lock/lib/mine/about/debug/utils/scrollable.dart diff --git a/star_lock/lib/mine/addLock/addLock/addLock_logic.dart b/star_lock/lib/mine/addLock/addLock/addLock_logic.dart index c7193c39..e14199c5 100644 --- a/star_lock/lib/mine/addLock/addLock/addLock_logic.dart +++ b/star_lock/lib/mine/addLock/addLock/addLock_logic.dart @@ -4,8 +4,8 @@ import 'package:get/get.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:star_lock/appRouters.dart'; import 'package:star_lock/mine/addLock/addLock/addLock_state.dart'; -import 'package:star_lock/permission/permission_dialog.dart'; import 'package:star_lock/tools/baseGetXController.dart'; +import 'package:star_lock/widget/permission/permission_dialog.dart'; class AddLockLogic extends BaseGetXController { diff --git a/star_lock/lib/mine/addLock/lockAddress/gaode/lockAddressGaoDe_page.dart b/star_lock/lib/mine/addLock/lockAddress/gaode/lockAddressGaoDe_page.dart index 7cccf522..a1c783ae 100644 --- a/star_lock/lib/mine/addLock/lockAddress/gaode/lockAddressGaoDe_page.dart +++ b/star_lock/lib/mine/addLock/lockAddress/gaode/lockAddressGaoDe_page.dart @@ -10,7 +10,7 @@ import 'package:get/get.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:amap_flutter_map/amap_flutter_map.dart'; import 'package:amap_flutter_base/amap_flutter_base.dart'; -import 'package:star_lock/permission/permission_dialog.dart'; +import 'package:star_lock/widget/permission/permission_dialog.dart'; import '../../../../appRouters.dart'; import '../../../../app_settings/app_colors.dart'; diff --git a/star_lock/lib/mine/addLock/nearbyLock/nearbyLock_logic.dart b/star_lock/lib/mine/addLock/nearbyLock/nearbyLock_logic.dart index 75c57c81..abdc428b 100644 --- a/star_lock/lib/mine/addLock/nearbyLock/nearbyLock_logic.dart +++ b/star_lock/lib/mine/addLock/nearbyLock/nearbyLock_logic.dart @@ -14,8 +14,8 @@ import 'package:star_lock/blue/io_protocol/io_getPublicKey.dart'; import 'package:star_lock/blue/io_protocol/io_otaUpgrade.dart'; import 'package:star_lock/blue/io_protocol/io_processOtaUpgrade.dart'; import 'package:star_lock/mine/addLock/nearbyLock/nearbyLock_page.dart'; -import 'package:star_lock/permission/permission_dialog.dart'; import 'package:star_lock/tools/baseGetXController.dart'; +import 'package:star_lock/widget/permission/permission_dialog.dart'; import '../../../appRouters.dart'; import '../../../app_settings/app_settings.dart'; diff --git a/star_lock/lib/mine/addLock/saveLock/saveLock_page.dart b/star_lock/lib/mine/addLock/saveLock/saveLock_page.dart index 4db7b1d6..6e53c6da 100644 --- a/star_lock/lib/mine/addLock/saveLock/saveLock_page.dart +++ b/star_lock/lib/mine/addLock/saveLock/saveLock_page.dart @@ -1,4 +1,3 @@ - import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; @@ -27,12 +26,17 @@ class _SaveLockPageState extends State with RouteAware { Widget build(BuildContext context) { return Scaffold( backgroundColor: AppColors.mainBackgroundColor, - appBar: TitleAppBar(barTitle: TranslationLoader.lanKeys!.addLock!.tr, haveBack:true, backgroundColor: AppColors.mainColor), + appBar: TitleAppBar( + barTitle: TranslationLoader.lanKeys!.addLock!.tr, + haveBack: true, + backgroundColor: AppColors.mainColor), body: Column( // mainAxisAlignment: MainAxisAlignment.center, // crossAxisAlignment: CrossAxisAlignment.center, children: [ - SizedBox(height: 80.h,), + SizedBox( + height: 80.h, + ), Container( margin: EdgeInsets.only(left: 50.w, right: 50.w), width: 1.sw, @@ -40,22 +44,29 @@ class _SaveLockPageState extends State with RouteAware { mainAxisAlignment: MainAxisAlignment.center, children: [ Flexible( - child: Text(TranslationLoader.lanKeys!.addSuccessfullyPleaseRename!.tr, style: TextStyle(fontSize: 24.sp, fontWeight: FontWeight.w500)) - ), + child: Text( + TranslationLoader + .lanKeys!.addSuccessfullyPleaseRename!.tr, + style: TextStyle( + fontSize: 24.sp, fontWeight: FontWeight.w500))), ], ), ), - SizedBox(height: 80.h,), + SizedBox( + height: 80.h, + ), Container( height: 80.h, // color: Colors.red, padding: EdgeInsets.only(left: 50.w, right: 50.w), child: TextField( - controller: state.aliNameController, - onChanged: (v){ + focusNode: state.focusNode, + autofocus: true, + controller: state.aliNameController, + onChanged: (v) { state.aliName.value = v; }, - textAlign:TextAlign.center, + textAlign: TextAlign.center, inputFormatters: [ LengthLimitingTextInputFormatter(32), ], @@ -63,58 +74,44 @@ class _SaveLockPageState extends State with RouteAware { decoration: InputDecoration( hintText: '请填写信息'.tr, hintStyle: TextStyle( - // height: 1.1, + // height: 1.1, fontSize: 24.sp, fontWeight: FontWeight.w400, - color: const Color(0xFF999999) - ), + color: const Color(0xFF999999)), border: OutlineInputBorder( - ///设置边框四个角的弧度 borderRadius: BorderRadius.all(Radius.circular(50.h)), - ///用来配置边框的样式 borderSide: BorderSide( - ///设置边框的颜色 color: AppColors.mainColor, - ///设置边框的粗细 width: 1, ), ), - ///用来配置输入框获取焦点时的颜色 focusedBorder: OutlineInputBorder( - ///设置边框四个角的弧度 borderRadius: BorderRadius.all(Radius.circular(50.h)), - ///用来配置边框的样式 borderSide: BorderSide( - ///设置边框的颜色 color: AppColors.mainColor, - ///设置边框的粗细 width: 1, ), ), - ) - ), + )), + ), + SizedBox( + height: 120.h, ), - SizedBox(height: 120.h,), SubmitBtn( btnName: TranslationLoader.lanKeys!.sure!.tr, borderRadius: 20.w, margin: EdgeInsets.only( - left: 50.w, - right: 50.w, - // top: 30.w, - // bottom: 30.w + left: 50.w, + right: 50.w, + // top: 30.w, + // bottom: 30.w ), - padding: EdgeInsets.only( - top: 25.w, - bottom: 25.w - ), - onClick: (){ + padding: EdgeInsets.only(top: 25.w, bottom: 25.w), + onClick: () { logic.addUserConnectBlue(); - } - ), + }), ], - ) - ); + )); } @override @@ -130,6 +127,7 @@ class _SaveLockPageState extends State with RouteAware { void dispose() { // TODO: implement dispose /// 取消路由订阅 + state.focusNode.unfocus(); AppRouteObserver().routeObserver.unsubscribe(this); super.dispose(); BlueManage().stopScan(); diff --git a/star_lock/lib/mine/addLock/saveLock/saveLock_state.dart b/star_lock/lib/mine/addLock/saveLock/saveLock_state.dart index a15d6438..469f1b26 100644 --- a/star_lock/lib/mine/addLock/saveLock/saveLock_state.dart +++ b/star_lock/lib/mine/addLock/saveLock/saveLock_state.dart @@ -7,12 +7,12 @@ import 'package:get/get.dart'; import '../../../blue/blue_manage.dart'; class SaveLockState { - var aliName = ''.obs; - var pwdTimestamp= 0.obs; + var pwdTimestamp = 0.obs; var addressInfo = {}.obs; TextEditingController aliNameController = TextEditingController(); + FocusNode focusNode = FocusNode(); var lockUserNo = 0; var lockInfo = {}; @@ -22,15 +22,16 @@ class SaveLockState { var isFromMap = 0; // 0:不是从地图界面进入 1:从地图界面进入 var ifCurrentScreen = true.obs; // 是否是当前界面,用于判断是否需要针对当前界面进行展示 - var sureBtnState = 0.obs;// 0可点击 1 不可点击 + var sureBtnState = 0.obs; // 0可点击 1 不可点击 // 管理员密码 - // var adminPasswordTF = TextEditingController(); + var adminPasswordTF = TextEditingController(); + var adminPassword = ''; var lockId = 0; SaveLockState() { - aliName.value = BlueManage().connectDeviceName; + aliName.value = BlueManage().connectDeviceName; aliNameController.text = aliName.value; adminPassword = getAdminPassword(); @@ -53,4 +54,5 @@ class SaveLockState { var number = rng.nextInt(900000) + 100000; // 生成 100000 到 999999 之间的随机整数 return number.toString(); } -} \ No newline at end of file +} + diff --git a/star_lock/lib/mine/mall/lockMall_logic.dart b/star_lock/lib/mine/mall/lockMall_logic.dart index 5f7741e3..9ff79012 100644 --- a/star_lock/lib/mine/mall/lockMall_logic.dart +++ b/star_lock/lib/mine/mall/lockMall_logic.dart @@ -1,17 +1,15 @@ import 'dart:convert'; -import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:fluttertoast/fluttertoast.dart'; import 'package:fluwx/fluwx.dart'; import 'package:get/get.dart'; import 'package:star_lock/flavors.dart'; import 'package:star_lock/main/lockMian/lockMain/xhj/lockMain_xhj_logic.dart'; import 'package:star_lock/mine/mall/lockMall_entity.dart'; import 'package:star_lock/mine/mall/lockMall_state.dart'; +import 'package:star_lock/mine/mall/webview/webview_logic.dart'; import 'package:star_lock/network/api_repository.dart'; import 'package:star_lock/tools/pay/wx_pay_tool.dart'; -import 'package:star_lock/webview/webview_logic.dart'; import 'package:webview_flutter/webview_flutter.dart'; import '../../app_settings/app_settings.dart'; diff --git a/star_lock/lib/mine/mall/lockMall_state.dart b/star_lock/lib/mine/mall/lockMall_state.dart index 9864ccc7..2f7e687c 100644 --- a/star_lock/lib/mine/mall/lockMall_state.dart +++ b/star_lock/lib/mine/mall/lockMall_state.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; -import 'package:star_lock/webview/webview_logic.dart'; +import 'package:star_lock/mine/mall/webview/webview_logic.dart'; import 'package:webview_flutter/webview_flutter.dart'; class LockMallState { diff --git a/star_lock/lib/webview/webview_logic.dart b/star_lock/lib/mine/mall/webview/webview_logic.dart similarity index 100% rename from star_lock/lib/webview/webview_logic.dart rename to star_lock/lib/mine/mall/webview/webview_logic.dart diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_logic.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_logic.dart index ad9426e1..35f7645e 100644 --- a/star_lock/lib/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_logic.dart +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_logic.dart @@ -6,7 +6,7 @@ import 'package:permission_handler/permission_handler.dart'; import 'package:star_lock/app_settings/app_settings.dart'; import 'package:star_lock/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_entity.dart'; import 'package:star_lock/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_state.dart'; -import 'package:star_lock/permission/permission_dialog.dart'; +import 'package:star_lock/widget/permission/permission_dialog.dart'; import '../../../../network/api_repository.dart'; import '../../../../tools/baseGetXController.dart'; import '../../../tools/eventBusEventManage.dart'; diff --git a/star_lock/lib/mine/mineSet/authorizedAdministrator/authorizedAdministrator/authorizedAdministratorList_page.dart b/star_lock/lib/mine/mineSet/authorizedAdministrator/authorizedAdministrator/authorizedAdministratorList_page.dart index f1b54bf9..6b94317e 100644 --- a/star_lock/lib/mine/mineSet/authorizedAdministrator/authorizedAdministrator/authorizedAdministratorList_page.dart +++ b/star_lock/lib/mine/mineSet/authorizedAdministrator/authorizedAdministrator/authorizedAdministratorList_page.dart @@ -4,6 +4,7 @@ import 'package:flutter_slidable/flutter_slidable.dart'; import 'package:get/get.dart'; import 'package:star_lock/mine/mineSet/authorizedAdministrator/authorizedAdministrator/authorizedAdminListEntity.dart'; import 'package:star_lock/tools/noData.dart'; +import 'package:star_lock/tools/showCupertinoAlertView.dart'; import '../../../../../appRouters.dart'; import '../../../../../app_settings/app_colors.dart'; @@ -23,14 +24,15 @@ class AuthorizedAdministratorListPage extends StatefulWidget { _AuthorizedAdministratorListPageState(); } -class _AuthorizedAdministratorListPageState extends State { +class _AuthorizedAdministratorListPageState + extends State { final logic = Get.put(AuthorizedAdministratorListLogic()); final state = Get.find().state; Future getHttpData() async { var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot); if (isDemoMode == false) { - logic.mockNetworkDataRequest().then((AuthorizedAdminListEntity value){ + logic.mockNetworkDataRequest().then((AuthorizedAdminListEntity value) { setState(() {}); }); } @@ -60,7 +62,9 @@ class _AuthorizedAdministratorListPageState extends State state.itemDataList.value.isEmpty - ? NoData(noDataHeight: 1.sh - ScreenUtil().statusBarHeight - ScreenUtil().bottomBarHeight - 190.h - 64.h) + ? NoData( + noDataHeight: 1.sh - + ScreenUtil().statusBarHeight - + ScreenUtil().bottomBarHeight - + 190.h - + 64.h) : SlidableAutoCloseBehavior( - child: ListView.separated( - itemCount: state.itemDataList.value.length, - itemBuilder: (c, index) { - AuthorizedAdminListItem authorizedAdminListItem = state.itemDataList.value[index]; + child: ListView.separated( + itemCount: state.itemDataList.value.length, + itemBuilder: (c, index) { + AuthorizedAdminListItem authorizedAdminListItem = + state.itemDataList.value[index]; - return Slidable( - key:ValueKey(authorizedAdminListItem.uid), - endActionPane: ActionPane( - extentRatio: 0.2, - motion: const ScrollMotion(), - children: [ - SlidableAction( - onPressed: (BuildContext context){ - ShowTipView().showDeleteAdministratorIsHaveAllDataDialog('同时删除其发送的所有钥匙,钥匙删除后不能恢复', (isAllData) { - logic.deleteAdministratorRequest(authorizedAdminListItem.uid.toString(), isAllData ? 1 : 0); - }); - }, - backgroundColor: Colors.red, - foregroundColor: Colors.white, - label: '删除', - padding: EdgeInsets.only(left: 5.w, right: 5.w), - ), - ], + return Slidable( + key: ValueKey(authorizedAdminListItem.uid), + endActionPane: ActionPane( + extentRatio: 0.2, + motion: const ScrollMotion(), + children: [ + SlidableAction( + onPressed: (BuildContext context) { + ShowTipView() + .showDeleteAdministratorIsHaveAllDataDialog( + '同时删除其发送的所有钥匙,钥匙删除后不能恢复', (isAllData) { + logic.deleteAdministratorRequest( + authorizedAdminListItem.uid.toString(), + isAllData ? 1 : 0); + }); + }, + backgroundColor: Colors.red, + foregroundColor: Colors.white, + label: '删除', + padding: EdgeInsets.only(left: 5.w, right: 5.w), + ), + ], + ), + child: _electronicKeyItem(authorizedAdminListItem), + ); + }, + separatorBuilder: (BuildContext context, int index) { + return const Divider( + height: 1, + color: AppColors.greyLineColor, + ); + }, ), - child: _electronicKeyItem(authorizedAdminListItem), - ); - }, - separatorBuilder: (BuildContext context, int index) { - return const Divider( - height: 1, - color: AppColors.greyLineColor, - ); - }, - ), - )); + )); } Widget _electronicKeyItem(AuthorizedAdminListItem itemData) { return GestureDetector( - onTap: () { - Navigator.pushNamed(context, Routers.administratorDetailsPage, arguments: {'itemData': itemData}).then((value) { - setState(() { - logic.pageNo = 1; - getHttpData(); + onTap: () async { + //高级功能 + var isVip = await Storage.getBool(saveIsVip); + if (isVip == true) { + Get.toNamed(Routers.administratorDetailsPage, + arguments: {'itemData': itemData})?.then((value) { + setState(() { + logic.pageNo = 1; + getHttpData(); + }); }); - }); + } else { + ShowCupertinoAlertView().advancedFeatureAlert(); + } }, child: Container( height: 100.h, color: Colors.white, - // margin: EdgeInsets.only(left: 20.w, right: 20.w, top: 20.w), - // decoration: const BoxDecoration( - // color: Colors.white, - // borderRadius: BorderRadius.circular(10.w), - // ), child: Row( children: [ - SizedBox(width: 30.w,), + SizedBox( + width: 30.w, + ), Image.asset('images/controls_user.png', width: 60.w, height: 60.w), SizedBox(width: 20.w), Expanded( @@ -193,24 +176,18 @@ class _AuthorizedAdministratorListPageState extends State { resizeToAvoidBottomInset: false, backgroundColor: const Color(0xFFFFFFFF), appBar: TitleAppBar( - barTitle: - logic.state.isShop.value == true ? '高级功能'.tr : '实名认证'.tr, + barTitle: logic.state.isVipShop.value == true + ? '高级功能'.tr + : '实名认证'.tr, haveBack: true, backgroundColor: AppColors.mainColor, backAction: () => logic.canGoBack(false), diff --git a/star_lock/lib/mine/valueAddedServices/advancedFeaturesWeb/advancedFeaturesWeb_state.dart b/star_lock/lib/mine/valueAddedServices/advancedFeaturesWeb/advancedFeaturesWeb_state.dart index 75c9b027..cc6a4a76 100644 --- a/star_lock/lib/mine/valueAddedServices/advancedFeaturesWeb/advancedFeaturesWeb_state.dart +++ b/star_lock/lib/mine/valueAddedServices/advancedFeaturesWeb/advancedFeaturesWeb_state.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; -import 'package:star_lock/webview/webview_logic.dart'; +import 'package:star_lock/mine/mall/webview/webview_logic.dart'; import 'package:webview_flutter/webview_flutter.dart'; class AdvancedFeaturesWebState { @@ -8,7 +8,7 @@ class AdvancedFeaturesWebState { var webProgress = 0.0.obs; bool allowReturn = true; late WebViewController vipBuyWebView = initWebViewController(); - var isShop = true.obs; //是否为高级功能购买页面 + var isVipShop = true.obs; //是否为高级功能购买页面 bool canGoBack = false; //初始化webView控制器 @@ -23,7 +23,7 @@ class AdvancedFeaturesWebState { AdvancedFeaturesWebState() { Map map = Get.arguments; if (map['isShop'] != null) { - isShop.value = map['isShop']; + isVipShop.value = map['isShop']; } } } diff --git a/star_lock/lib/starLockApplication/starLockApplication.dart b/star_lock/lib/starLockApplication/starLockApplication.dart index d4a7d389..9892fc65 100644 --- a/star_lock/lib/starLockApplication/starLockApplication.dart +++ b/star_lock/lib/starLockApplication/starLockApplication.dart @@ -1,11 +1,10 @@ import 'package:flutter/material.dart'; -import 'package:get/get.dart'; import 'package:star_lock/flavors.dart'; import 'package:star_lock/login/login/starLock_login_page.dart'; import 'package:star_lock/login/login/starLock_login_xhj_page.dart'; import 'package:star_lock/main/lockMian/lockMain/xhj/lockMain_xhj_page.dart'; +import 'package:star_lock/mine/about/debug/debug_tool.dart'; import 'package:star_lock/tools/appFirstEnterHandle.dart'; -import 'package:star_lock/debug/debug_tool.dart'; import 'package:star_lock/tools/storage.dart'; import '../main/lockMian/lockMain/lockMain_page.dart'; @@ -31,7 +30,6 @@ class _StarLockApplicationState extends State { @override Widget build(BuildContext context) { - AppFirstEnterHandle().getAppFirstEnter(context, isAgreePrivacy); getAgreePrivacyShowUpdate(); return FutureBuilder( @@ -48,6 +46,8 @@ class _StarLockApplicationState extends State { xhjCall: () => const StarLockMainXHJPage()); } else { // 如果用户未登录,返回登录页面 + AppFirstEnterHandle().getAppFirstEnter(isAgreePrivacy); + return F.sw( defaultCall: () => const StarLockLoginPage(), xhjCall: () => const StarLockLoginXHJPage()); @@ -73,7 +73,7 @@ class _StarLockApplicationState extends State { Future getAgreePrivacyShowUpdate() async { final data = await Storage.getString(isAgreePrivacy); if (data == isAgreePrivacy) { - AppFirstEnterHandle().getAppFirstEnter(context, isShowUpdateVersion); + AppFirstEnterHandle().getAppFirstEnter(isShowUpdateVersion); } } } diff --git a/star_lock/lib/tools/appFirstEnterHandle.dart b/star_lock/lib/tools/appFirstEnterHandle.dart index 815df5c6..7df8acf6 100644 --- a/star_lock/lib/tools/appFirstEnterHandle.dart +++ b/star_lock/lib/tools/appFirstEnterHandle.dart @@ -3,7 +3,6 @@ import 'dart:io'; import 'package:flutter/cupertino.dart'; import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:star_lock/appRouters.dart'; import 'package:star_lock/app_settings/app_colors.dart'; @@ -14,24 +13,24 @@ import 'package:star_lock/tools/storage.dart'; import '../versionUndate/versionUndateTool.dart'; class AppFirstEnterHandle { - Future getAppFirstEnter(BuildContext widgetContext, String flagStr) async { + Future getAppFirstEnter(String flagStr) async { var getFlag = await Storage.getString(flagStr); switch (flagStr) { case isAgreePrivacy: // 隐私协议 { if (getFlag != isAgreePrivacy) { - showPrivacyAgreementAlert(widgetContext); + showPrivacyAgreementAlert(); } } break; case isAgreePosition: // 位置权限 { - if (getFlag != isAgreePosition) showPositionAlert(widgetContext); + if (getFlag != isAgreePosition) showPositionAlert(); } break; case isAgreeCamera: // 相机权限 { - if (getFlag != isAgreeCamera) showCameraAlert(widgetContext); + if (getFlag != isAgreeCamera) showCameraAlert(); } break; case isShowUpdateVersion: // 版本更新 @@ -45,9 +44,9 @@ class AppFirstEnterHandle { } //隐私协议弹窗 - void showPrivacyAgreementAlert(BuildContext widgetContext) { + void showPrivacyAgreementAlert() { showCupertinoDialog( - context: widgetContext, + context: Get.context!, builder: (context) { return PopScope( canPop: false, @@ -118,7 +117,7 @@ class AppFirstEnterHandle { onPressed: () { Storage.setString(isAgreePrivacy, isAgreePrivacy); Navigator.of(context).pop(); - getAppFirstEnter(context, isShowUpdateVersion); + getAppFirstEnter(isShowUpdateVersion); }, ), ], @@ -188,7 +187,7 @@ class AppFirstEnterHandle { onPressed: () { Storage.setString(isAgreePrivacy, isAgreePrivacy); Navigator.of(context).pop(); - getAppFirstEnter(context, isShowUpdateVersion); + getAppFirstEnter(isShowUpdateVersion); }, ), ], @@ -196,9 +195,9 @@ class AppFirstEnterHandle { } //位置权限弹窗 - void showPositionAlert(BuildContext widgetContext) { + void showPositionAlert() { showCupertinoDialog( - context: widgetContext, + context: Get.context!, builder: (context) { return PopScope( canPop: false, @@ -226,9 +225,9 @@ class AppFirstEnterHandle { } //相机权限弹窗 - void showCameraAlert(BuildContext widgetContext) { + void showCameraAlert() { showCupertinoDialog( - context: widgetContext, + context: Get.context!, builder: (context) { return PopScope( canPop: false, @@ -255,55 +254,6 @@ class AppFirstEnterHandle { ); } - //微信公众号二维码弹窗 - void showQRImageAlert(BuildContext widgetContext, String qrCodeUrl) { - showCupertinoModalPopup( - context: widgetContext, - builder: (context) { - return CupertinoActionSheet( - actions: [ - Container( - color: Colors.white, // 设置底色为白色 - child: CupertinoActionSheetAction( - child: Container( - margin: const EdgeInsets.all(0), - child: Column( - children: [ - SizedBox( - height: 60.h, - ), - Image.network( - qrCodeUrl, - width: 400.w, - height: 400.w, - ), - SizedBox( - height: 20.h, - ), - Padding( - padding: EdgeInsets.only(left: 60.w, right: 60.w), - child: Text( - '开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置'.tr, - style: - TextStyle(fontSize: 24.sp, color: Colors.black), - )), - SizedBox( - height: 60.h, - ) - ], - ), - ), - onPressed: () { - Navigator.of(context).pop(); - }, - ), - ), - ], - ); - }, - ); - } - // _launchURL(String url) async { // if (await canLaunchUrl(Uri.parse(url))) { // await launchUrl(Uri.parse(url)); diff --git a/star_lock/lib/tools/showCupertinoAlertView.dart b/star_lock/lib/tools/showCupertinoAlertView.dart index 76c2a799..ddca72fd 100644 --- a/star_lock/lib/tools/showCupertinoAlertView.dart +++ b/star_lock/lib/tools/showCupertinoAlertView.dart @@ -1,13 +1,63 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:star_lock/appRouters.dart'; import 'package:star_lock/app_settings/app_colors.dart'; -typedef AuthInfoCallback = void Function(String idCard, String name); +typedef AuthInfoCallback = void Function(String? idCard, String? name); class ShowCupertinoAlertView { + //微信公众号二维码弹窗 + void showQRImageAlert(BuildContext widgetContext, String qrCodeUrl) { + showCupertinoModalPopup( + context: widgetContext, + builder: (context) { + return CupertinoActionSheet( + actions: [ + Container( + color: Colors.white, // 设置底色为白色 + child: CupertinoActionSheetAction( + child: Container( + margin: const EdgeInsets.all(0), + child: Column( + children: [ + SizedBox( + height: 60.h, + ), + Image.network( + qrCodeUrl, + width: 400.w, + height: 400.w, + ), + SizedBox( + height: 20.h, + ), + Padding( + padding: EdgeInsets.only(left: 60.w, right: 60.w), + child: Text( + '开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置'.tr, + style: + TextStyle(fontSize: 24.sp, color: Colors.black), + )), + SizedBox( + height: 60.h, + ) + ], + ), + ), + onPressed: () { + Navigator.of(context).pop(); + }, + ), + ), + ], + ); + }, + ); + } + //高级功能弹窗 void advancedFeatureAlert() { showCupertinoDialog( @@ -207,6 +257,10 @@ class ShowCupertinoAlertView { CupertinoDialogAction( onPressed: () { // 在这里处理确认按钮的逻辑 + if (idCard.isEmpty || name.isEmpty) { + EasyLoading.showToast('请输入身份证号和真实姓名'.tr); + return; + } callback(idCard, name); Get.back(); }, @@ -220,4 +274,39 @@ class ShowCupertinoAlertView { }, ); } + + //是否要远程开锁弹窗 + void isToRemoteUnLockAlert(AuthInfoCallback callback) { + showCupertinoDialog( + context: Get.context!, + builder: (BuildContext context) { + return CupertinoAlertDialog( + title: Container(), + content: Text('是否要远程开锁?'.tr), + actions: [ + CupertinoDialogAction( + onPressed: () { + Get.back(); + }, + child: Text( + '取消'.tr, + style: TextStyle(color: AppColors.mainColor), + ), + ), + CupertinoDialogAction( + onPressed: () { + // 在这里处理确认按钮的逻辑 + callback(null, null); + Get.back(); + }, + child: Text( + '远程开锁'.tr, + style: TextStyle(color: AppColors.mainColor), + ), + ), + ], + ); + }, + ); + } } diff --git a/star_lock/lib/tools/storage.dart b/star_lock/lib/tools/storage.dart index 82e44149..fdfb542d 100644 --- a/star_lock/lib/tools/storage.dart +++ b/star_lock/lib/tools/storage.dart @@ -26,7 +26,7 @@ const saveIsVip = "saveIsVip"; //是否是VIP const saveUserLoginData = "userLoginData"; const saveLockMainListData = "lockMainListData"; -const isOpenDeBug = "isOpenDeBug";//是否打开 debug +const isOpenDeBug = "isOpenDeBug"; //是否打开 debug class Storage { Storage._internal(); @@ -145,6 +145,12 @@ class Storage { static Future clearAll() async { SharedPreferences sp = await SharedPreferences.getInstance(); sp.clear(); + + // 重新设置需要保留的数据 + if (isAgreePrivacy != null) { + //退出登录不清除隐私协议同意状态 + await setString(isAgreePrivacy, isAgreePrivacy); + } } static Future getUid() async { diff --git a/star_lock/lib/permission/README.md b/star_lock/lib/widget/permission/README.md similarity index 100% rename from star_lock/lib/permission/README.md rename to star_lock/lib/widget/permission/README.md diff --git a/star_lock/lib/permission/permission_dialog.dart b/star_lock/lib/widget/permission/permission_dialog.dart similarity index 100% rename from star_lock/lib/permission/permission_dialog.dart rename to star_lock/lib/widget/permission/permission_dialog.dart diff --git a/star_lock/lib/widget/star_input_formatter.dart b/star_lock/lib/widget/star_input_formatter.dart deleted file mode 100644 index 181404ca..00000000 --- a/star_lock/lib/widget/star_input_formatter.dart +++ /dev/null @@ -1,13 +0,0 @@ -import 'package:flutter/services.dart'; - -class StarInputFormatter extends TextInputFormatter { - @override - TextEditingValue formatEditUpdate( - TextEditingValue oldValue, TextEditingValue newValue) { - // 将新输入的文本转换为星号 - return TextEditingValue( - text: '*' * newValue.text.length, - selection: TextSelection.collapsed(offset: newValue.text.length), - ); - } -}