other: merge develop
This commit is contained in:
commit
250624daef
@ -151,8 +151,8 @@ create-release:
|
||||
${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${StarLock_VERSION}/StarLock-${StarLock_VERSION}-*"
|
||||
- 'curl -i --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file build/app/outputs/flutter-apk/starlock-xhj-release-${CI_COMMIT_TAG}.apk
|
||||
"${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${StarLock_VERSION}/starlock-xhj-release-${CI_COMMIT_TAG}.apk"'
|
||||
- 'curl -i --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file build/app/outputs/flutter-apk/starlock-xhj-release-${CI_COMMIT_TAG}.aab
|
||||
"${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${StarLock_VERSION}/starlock-xhj-release-${CI_COMMIT_TAG}.aab"'
|
||||
- 'curl -i --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file build/app/outputs/flutter-apk/starlock-xhj_bundle-release-${CI_COMMIT_TAG}.aab
|
||||
"${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${StarLock_VERSION}/starlock-xhj_bundle-release-${CI_COMMIT_TAG}.aab"'
|
||||
- 'curl -i --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file build/app/outputs/flutter-apk/starlock-sky-release-${CI_COMMIT_TAG}.apk
|
||||
"${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${StarLock_VERSION}/starlock-sky-release-${CI_COMMIT_TAG}.apk"'
|
||||
- 'curl -i --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file build/app/outputs/flutter-apk/starlock-sky-release-${CI_COMMIT_TAG}.aab
|
||||
|
||||
@ -33,7 +33,7 @@
|
||||
<!--相机-->
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32"/>
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
|
||||
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
|
||||
|
||||
@ -74,8 +74,6 @@ PODS:
|
||||
- SDWebImage
|
||||
- SwiftyGif
|
||||
- EMASRest (11.1.1.2)
|
||||
- fast_rsa (0.6.0):
|
||||
- Flutter
|
||||
- file_picker (0.0.1):
|
||||
- DKImagePickerController/PhotoGallery
|
||||
- Flutter
|
||||
@ -215,6 +213,12 @@ PODS:
|
||||
- JPush (= 5.3.0)
|
||||
- just_audio (0.0.1):
|
||||
- Flutter
|
||||
- JVerification (3.2.4):
|
||||
- JCore (>= 2.1.6)
|
||||
- jverify (0.0.1):
|
||||
- Flutter
|
||||
- JCore (>= 4.6.2)
|
||||
- JVerification (= 3.2.4)
|
||||
- nanopb (3.30910.0):
|
||||
- nanopb/decode (= 3.30910.0)
|
||||
- nanopb/encode (= 3.30910.0)
|
||||
@ -274,7 +278,6 @@ DEPENDENCIES:
|
||||
- camera_avfoundation (from `.symlinks/plugins/camera_avfoundation/ios`)
|
||||
- connectivity_plus (from `.symlinks/plugins/connectivity_plus/darwin`)
|
||||
- device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
|
||||
- fast_rsa (from `.symlinks/plugins/fast_rsa/ios`)
|
||||
- file_picker (from `.symlinks/plugins/file_picker/ios`)
|
||||
- firebase_analytics (from `.symlinks/plugins/firebase_analytics/ios`)
|
||||
- firebase_core (from `.symlinks/plugins/firebase_core/ios`)
|
||||
@ -293,6 +296,7 @@ DEPENDENCIES:
|
||||
- JPush
|
||||
- jpush_flutter (from `.symlinks/plugins/jpush_flutter/ios`)
|
||||
- just_audio (from `.symlinks/plugins/just_audio/ios`)
|
||||
- jverify (from `.symlinks/plugins/jverify/ios`)
|
||||
- network_info_plus (from `.symlinks/plugins/network_info_plus/ios`)
|
||||
- open_filex (from `.symlinks/plugins/open_filex/ios`)
|
||||
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
|
||||
@ -334,6 +338,7 @@ SPEC REPOS:
|
||||
- ios-voice-processor
|
||||
- JCore
|
||||
- JPush
|
||||
- JVerification
|
||||
- nanopb
|
||||
- PromisesObjC
|
||||
- SDWebImage
|
||||
@ -366,8 +371,6 @@ EXTERNAL SOURCES:
|
||||
:path: ".symlinks/plugins/connectivity_plus/darwin"
|
||||
device_info_plus:
|
||||
:path: ".symlinks/plugins/device_info_plus/ios"
|
||||
fast_rsa:
|
||||
:path: ".symlinks/plugins/fast_rsa/ios"
|
||||
file_picker:
|
||||
:path: ".symlinks/plugins/file_picker/ios"
|
||||
firebase_analytics:
|
||||
@ -402,6 +405,8 @@ EXTERNAL SOURCES:
|
||||
:path: ".symlinks/plugins/jpush_flutter/ios"
|
||||
just_audio:
|
||||
:path: ".symlinks/plugins/just_audio/ios"
|
||||
jverify:
|
||||
:path: ".symlinks/plugins/jverify/ios"
|
||||
network_info_plus:
|
||||
:path: ".symlinks/plugins/network_info_plus/ios"
|
||||
open_filex:
|
||||
@ -451,7 +456,6 @@ SPEC CHECKSUMS:
|
||||
DKImagePickerController: 946cec48c7873164274ecc4624d19e3da4c1ef3c
|
||||
DKPhotoGallery: b3834fecb755ee09a593d7c9e389d8b5d6deed60
|
||||
EMASRest: 8df6f87836767a9415ad5cc4af739bc9d215b475
|
||||
fast_rsa: a1fed69b074093d2e2e3fefae6b821a071649d4c
|
||||
file_picker: ce3938a0df3cc1ef404671531facef740d03f920
|
||||
Firebase: 9f574c08c2396885b5e7e100ed4293d956218af9
|
||||
firebase_analytics: 1a66fe8d4375eccff44671ea37897683a78b2675
|
||||
@ -468,7 +472,7 @@ SPEC CHECKSUMS:
|
||||
flutter_pcm_sound: de0572ca4f99091cc2abfcc31601b8a4ddd33c0e
|
||||
flutter_voice_processor: 2b89b93d69b02227ae3fd58589ee0bcfa3ca2a82
|
||||
fluttertoast: e9a18c7be5413da53898f660530c56f35edfba9c
|
||||
fluwx: c18fd6c16b03a2187cd07d6e48e32a7801962849
|
||||
fluwx: daa284756ce53442b3d0417ceeda66e981906811
|
||||
google_maps_flutter_ios: f135b968a67c05679e0a53538e900b5c174b0d99
|
||||
GoogleAppMeasurement: 6e49ffac7d3f2c3ded9cc663f912a13b67bbd0de
|
||||
GoogleMaps: 20d7b12be49a14287f797e88e0e31bc4156aaeb4
|
||||
@ -480,6 +484,8 @@ SPEC CHECKSUMS:
|
||||
JPush: b71f497a3c1b825c7843fd97f290b05d5cd75f2e
|
||||
jpush_flutter: c87be254790933c0363684169ef9d3d279a5adc5
|
||||
just_audio: baa7252489dbcf47a4c7cc9ca663e9661c99aafa
|
||||
JVerification: 0774807f44dd788c78d50303a14e133735807856
|
||||
jverify: 337ea43ac1e16f9484f4195abe787d1b6241163c
|
||||
nanopb: fad817b59e0457d11a5dfbde799381cd727c1275
|
||||
network_info_plus: 6d0c3eb8367b8164fa3fb0c19875e3f59d49697f
|
||||
open_filex: 6e26e659846ec990262224a12ef1c528bb4edbe4
|
||||
@ -503,4 +509,4 @@ SPEC CHECKSUMS:
|
||||
|
||||
PODFILE CHECKSUM: 728f9c851a19709391c77c54ed3556e484b54db6
|
||||
|
||||
COCOAPODS: 1.16.2
|
||||
COCOAPODS: 1.14.3
|
||||
|
||||
@ -1121,6 +1121,5 @@
|
||||
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "بعد إعادة الضبط ، سيتم حذف بصمات القفل. هل أنت متأكد أنك تريد إعادة ضبطه ؟",
|
||||
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "بعد إعادة الضبط ، سيتم حذف جهاز التحكم عن بعد للقفل. هل تريد إعادة ضبطه ؟",
|
||||
"版本说明": "تعليمات الإصدار",
|
||||
"网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "بعد تشغيل البوابة ، اضغط مع الاستمرار على زر إعادة الضبط لمدة 5 ثوانٍ. انقر فوق التالي عندما يومض ضوء المؤشر الأزرق",
|
||||
"网关添加成功": "تم إضافة البوابة بنجاح"
|
||||
"一键登录": "تسجيل الدخول بنقرة واحدة"
|
||||
}
|
||||
@ -1121,6 +1121,5 @@
|
||||
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "След нулиране, пръстовите отпечатъци на заключването ще бъдат изтрити. Сигурен ли сте, че искате да го нулирате?",
|
||||
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "След нулиране, дистанционното управление на ключалката ще бъде изтрито. Искате ли да го нулирате?",
|
||||
"版本说明": "Обяснение на версията",
|
||||
"网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "След като шлюзът е включен, натиснете и задръжте бутона reset за 5 секунди. Щракнете върху следващия, когато синята индикаторна светлина мига",
|
||||
"网关添加成功": "Gateway added successfully"
|
||||
"一键登录": "Вход с едно кликване"
|
||||
}
|
||||
@ -1121,6 +1121,5 @@
|
||||
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "ব্যান্ডোটারট্রাসেট, thelock'sferprinতা?",
|
||||
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "ব্যান্ডোটারপ্রাসেট, নিয়ন্ত্রণের নিয়ন্ত্রণ। ডোডো ডাইভান্টটুরে?",
|
||||
"版本说明": "ভার্সনপরিচিতি",
|
||||
"网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "ব্যাস্টোকার্টারটিইসপোভেরোর্ডন, প্রেস এবং প্রেসিটিসেট গানটেটনফোর্র 5 সইভিক ds। বিকশিক",
|
||||
"网关添加成功": "রুপেডডড্রোজেন্টজেক্যালি"
|
||||
"一键登录": "এক-সিক্লিক্লোগিন"
|
||||
}
|
||||
@ -1121,6 +1121,5 @@
|
||||
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Po resetování budou otisky prstů zámku odstraněny. Opravdu ho chcete obnovit?",
|
||||
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Po resetu bude dálkové ovládání zámku odstraněno. Chcete ho obnovit?",
|
||||
"版本说明": "Verze",
|
||||
"网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "Po zapnutí brány stiskněte a podržte tlačítko reset po dobu 5 sekund. Klepněte na tlačítko další, když modré světlo ukazatele bliká",
|
||||
"网关添加成功": "Úspěšně přidaná brána"
|
||||
"一键登录": "Přihlášení s jedním kliknutím"
|
||||
}
|
||||
@ -1121,6 +1121,5 @@
|
||||
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Efter nulstilling vil låsens fingeraftryk blive slettet. Er du sikker på at du vil nulstille den?",
|
||||
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Efter nulstilling, fjernbetjeningen af låsen vil blive slettet. Vil du nulstille den?",
|
||||
"版本说明": "Versionsbeskrivelse",
|
||||
"网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "Når gateway er tændt, tryk på og hold nulstillingsknappen i 5 sekunder. Klik på Næste, når den blå indikator lys blinker",
|
||||
"网关添加成功": "Gateway tilføjet med succet"
|
||||
"一键登录": "Login med et enkelt klik"
|
||||
}
|
||||
@ -1121,6 +1121,5 @@
|
||||
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Nach dem Zurücksetzen werden die Finger abdrücke des Schlosses gelöscht. Sind Sie sicher, dass Sie es zurücksetzen wollen?",
|
||||
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Nach dem Zurücksetzen wird die Fernbedienung des Schlosses gelöscht. Willst du es zurücksetzen?",
|
||||
"版本说明": "Versionsbeschreibung",
|
||||
"网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "Nachdem das Gateway eingesc haltet ist, drücken und halten Sie die Reset-Taste für 5 Sekunden. Klicken Sie auf Weiter, wenn die blaue Anzeige leuchte blinkt",
|
||||
"网关添加成功": "Gateway erfolgreich hinzugefügt"
|
||||
"一键登录": "Ein-Klick-Login"
|
||||
}
|
||||
@ -1121,6 +1121,5 @@
|
||||
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Μετά την επαναφορά, τα αποτυπώματα της κλειδαριάς θα διαγραφούν. Είστε σίγουροι ότι θέλετε να το επαναφέρετε;",
|
||||
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Μετά την επαναφορά, το τηλεχειριστήριο της κλειδαριάς θα διαγραφεί. Θέλεις να το επαναφέρεις;",
|
||||
"版本说明": "Περιγραφή έκδοσης",
|
||||
"网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "Αφού ενεργοποιηθεί η πύλη, πιέστε και κρατήστε το κουμπί επαναφοράς για 5 δευτερόλεπτα. Κάντε κλικ Επόμενο όταν το μπλε φως δείκτη αναβοσβήνει",
|
||||
"网关添加成功": "Η πύλη προστέθηκε με επιτυχία"
|
||||
"一键登录": "Σύνδεση ενός κλικ"
|
||||
}
|
||||
@ -61,8 +61,7 @@
|
||||
"请输入员工账号": "Enter Employee's Account",
|
||||
"批量授权锁": "Grant multiple locks",
|
||||
"授权管理员拥有操作这把锁的重要权限,请确保只发给我你信任的人": "The authorized administrator will have majority permission to operate this lock.",
|
||||
"功能开启后,你将可以通过网关远程开锁。此功能的开启和关闭只能在锁附近通过手机蓝牙进行。": "This feature allows you to Unlock the Smart Lock Remotely via a Gateway.This Feature can ONLY be Turned ON or OFF via Bluetooth.",
|
||||
"功能开启后,你将可以通过网关远程开锁。": "After the function is enabled, you will be able to remotely unlock through the gateway。",
|
||||
"功能开启后,你将可以通过网关远程开锁。此功能的开启和关闭只能在锁附近通过手机蓝牙进行。":"This feature allows you to Unlock the Smart Lock Remotely via a Gateway.This Feature can ONLY be Turned ON or OFF via Bluetooth.",
|
||||
"排列方式": "List Type",
|
||||
"早到榜": "Early List",
|
||||
"迟到榜": "Late List",
|
||||
@ -732,18 +731,18 @@
|
||||
"请选择有效日": "Please select the effective day",
|
||||
"公司名字长度不能小于 6 ": "The length of the company name cannot be less than 6",
|
||||
"已是最新版本": "No updates",
|
||||
"一": "One",
|
||||
"二": "Two",
|
||||
"三": "Three",
|
||||
"四": "Four",
|
||||
"五": "Five",
|
||||
"六": "Six",
|
||||
"日": "Sun",
|
||||
"新建短信模版": "Creat SMS template",
|
||||
"新建邮件模版": "Creat email template",
|
||||
"自定义短信模版": "SMS template",
|
||||
"自定义邮件模版": "Email template",
|
||||
"名称": "Name",
|
||||
"一":"One",
|
||||
"二":"Two",
|
||||
"三":"Three",
|
||||
"四":"Four",
|
||||
"五":"Five",
|
||||
"六":"Six",
|
||||
"日":"Sun",
|
||||
"新建短信模版":"Creat SMS template",
|
||||
"新建邮件模版":"Creat email template",
|
||||
"自定义短信模版":"SMS template",
|
||||
"自定义邮件模版":"Email template",
|
||||
"名称":"Name",
|
||||
"星星锁": "Star lock",
|
||||
"无考勤记录": "No Records",
|
||||
"大家干劲十足": "Everyone comes in time",
|
||||
@ -780,20 +779,20 @@
|
||||
"该已锁被删除": "The locked is deleted",
|
||||
"授权管理员只能查看和管理自己下发的钥匙、密码等权限": "The authorized admin can only manage passcodes,ekeys and etccreated by himself.",
|
||||
"添加授权管理员": "Create Admin",
|
||||
"导出记录": "Export records",
|
||||
"选择时间段": "Select time period",
|
||||
"导出": "Export",
|
||||
"批量导出": "Batch export",
|
||||
"读取记录": "Refresh Records",
|
||||
"设备": "Device",
|
||||
"消息": "Messages",
|
||||
"智能分析": "Intelligent analytics",
|
||||
"精准识别设备事件,过滤无效信息": "Accurately identify device events and filter out invalid information",
|
||||
"系统设置": "System settings",
|
||||
"系统的全局配置在此项内进行设置": "The global configuration of the system is set in this item",
|
||||
"导出操作记录": "Export records",
|
||||
"立即查看": "View",
|
||||
"导出成功": "Exported successfully",
|
||||
"导出记录":"Export records",
|
||||
"选择时间段":"Select time period",
|
||||
"导出":"Export",
|
||||
"批量导出":"Batch export",
|
||||
"读取记录":"Refresh Records",
|
||||
"设备":"Device",
|
||||
"消息":"Messages",
|
||||
"智能分析":"Intelligent analytics",
|
||||
"精准识别设备事件,过滤无效信息":"Accurately identify device events and filter out invalid information",
|
||||
"系统设置":"System settings",
|
||||
"系统的全局配置在此项内进行设置":"The global configuration of the system is set in this item",
|
||||
"导出操作记录":"Export records",
|
||||
"立即查看":"View",
|
||||
"导出成功":"Exported successfully",
|
||||
"发送钥匙": "Send ekey",
|
||||
"进度": "Rate",
|
||||
"失败": "Failed",
|
||||
@ -926,7 +925,7 @@
|
||||
"或发生异常事件时": "or an abnormal event occurs",
|
||||
"逗留达到10秒": "Stay for 10 seconds",
|
||||
"约1.5米": "About 1.5 meters",
|
||||
"随时": "Anytime",
|
||||
"随时":"Anytime",
|
||||
"立即录像": "Record immediately",
|
||||
"录像时机": "Video timing",
|
||||
"有人出现时录像": "Record when someone appears",
|
||||
@ -1010,7 +1009,6 @@
|
||||
"请在锁设置中开启远程开锁": "Please enable remote unlocking in the lock settings",
|
||||
"接听": "Answer",
|
||||
"截图已保存到相册": "Screenshot saved to album",
|
||||
"录屏已保存到相册": "Screen recording file saved to album",
|
||||
"添加遥控": "Add remote control",
|
||||
"已连接到锁,请按遥控": "Connected to the lock, please press the remote control",
|
||||
"遥控号": "Remote control number",
|
||||
@ -1094,7 +1092,7 @@
|
||||
"支持的国家": "Supported countries",
|
||||
"支持的国家值": "USA, Canada, UK, Australia, India, Germany, France, Italy, Spain, Japan",
|
||||
"操作流程": "Operation process",
|
||||
"操作流程值": "1 Add a lock and gateway with the Smart lock APP \n\n2 Enable the remote unlocking function of the lock in the APP (this function is turned off by default). If you do not have this option, the lock does not support Alexa \n\n3 Add skills to Alexa and authorize them with the Smart lock APP's account and password. After the authorization is successful, you can discover devices under the account \n\n4 Locate the lock in the Alexa app, turn on the voice unlock function, and set the language password \n\n5 The lock can be operated through Alexa",
|
||||
"操作流程值":"1 Add a lock and gateway with the Smart lock APP \n\n2 Enable the remote unlocking function of the lock in the APP (this function is turned off by default). If you do not have this option, the lock does not support Alexa \n\n3 Add skills to Alexa and authorize them with the Smart lock APP's account and password. After the authorization is successful, you can discover devices under the account \n\n4 Locate the lock in the Alexa app, turn on the voice unlock function, and set the language password \n\n5 The lock can be operated through Alexa",
|
||||
"Google Home": "Google Home",
|
||||
"Action name": "Action name",
|
||||
"ScienerSmart": "ScienerSmart",
|
||||
@ -1121,20 +1119,8 @@
|
||||
"分简称": "M",
|
||||
"跟随系统": "Follow system",
|
||||
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "After reset, the lock's fingerprints will be deleted. Are you sure you want to reset it?",
|
||||
"通话未接通,已挂断": "Call not connected, hung up",
|
||||
"通话异常中断": "Abnormal call interruption",
|
||||
"通话连接失败": "Call connection failed",
|
||||
"已挂断": "Hanging up",
|
||||
"正在说话...": "Talking now...",
|
||||
"设备不在线": "The device is not online",
|
||||
"设备未配网": "The device is not connected to the network",
|
||||
"已静音": "The sound has been turned off",
|
||||
"该锁的远程开锁功能未启用": "The remote unlocking function of this lock is not enabled",
|
||||
"下载完成,请到相册查看": "Download completed, please go to the album to view",
|
||||
"猫眼设置为省电模式时无法进行监控,请在猫眼设置中切换为其他模式": "When Cat Eye is set to power-saving mode, monitoring cannot be performed. Please switch to other modes in Cat Eye settings",
|
||||
"猫眼设置为省电模式时无法进行远程开锁,请在猫眼设置中切换为其他模式": "Remote unlocking is not possible when Cat Eye is set to power-saving mode. Please switch to another mode in Cat Eye settings",
|
||||
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "After reset, the remote control of the lock will be deleted. Do you want to reset it?",
|
||||
"版本说明": "Version description",
|
||||
"网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "After the gateway is powered on, press and hold the reset button for 5 seconds. Click Next when the blue indicator light flashes",
|
||||
"网关添加成功": "Gateway added successfully"
|
||||
"一键登录": "One-click login"
|
||||
}
|
||||
|
||||
@ -1121,6 +1121,5 @@
|
||||
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Después de restablecer, se eliminarán las huellas dactilares del bloqueo. ¿Está seguro de que desea restablecerlo?",
|
||||
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Después del reinicio, se eliminará el control remoto de la cerradura. ¿Quieres resetearlo?",
|
||||
"版本说明": "Instrucciones de versión",
|
||||
"网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "Después de encender la puerta de enlace, mantenga presionado el botón de reinicio durante 5 segundos. Haga clic en Siguiente cuando la luz indicadora azul parpadee",
|
||||
"网关添加成功": "Gateway añadido con éxito"
|
||||
"一键登录": "Inicio de sesión con un solo clic"
|
||||
}
|
||||
@ -1121,6 +1121,5 @@
|
||||
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Pärast lähtestamist kustutatakse luku sõrmejäljed. Kas tõesti soovid see lähtestada?",
|
||||
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Pärast lähtestamist kustutatakse luku kaugjuhtimine. Kas sa tahad seda lähtestada?",
|
||||
"版本说明": "Versiooniteave",
|
||||
"网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "Kui värav on sisse lülitatud, vajutage nuppu ja hoidke nuppu 5 sekundit. Klõpsa Järgmine, kui sinine indikaator valgus vilgub",
|
||||
"网关添加成功": "Gateway lisati edukalt"
|
||||
"一键登录": "Üheklõpsu sisselogimine"
|
||||
}
|
||||
@ -1121,6 +1121,5 @@
|
||||
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Lukon sormenjäljet poistetaan. Haluatko varmasti nollataa sen?",
|
||||
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Nollauksen jälkeen lukon kaukosäädin poistetaan. Haluatko palauttaa sen?",
|
||||
"版本说明": "Versio",
|
||||
"网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "Kun portti on käytössä, paina ja pidä nollauspainiketta 5 sekunnin ajan. Napsauta Seuraava kun sininen ilmaisin valo vilkkuu",
|
||||
"网关添加成功": "Gateway lisättiin onnistuneesti"
|
||||
"一键登录": "Yhden napsautuksen kirjautuminen"
|
||||
}
|
||||
@ -1121,6 +1121,5 @@
|
||||
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Après réinitialisation, les empreintes digitales de la serrure seront supprimées. Êtes-vous sûr de vouloir le réinitialiser?",
|
||||
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Après réinitialisation, la télécommande du verrou sera supprimée. Voulez-vous le réinitialiser?",
|
||||
"版本说明": "Explication de la version",
|
||||
"网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "Après la mise sous tension de la passerelle, appuyez sur le bouton de réinitialisation et maintenez-le enfoncé pendant 5 secondes. Cliquez sur Suivant lorsque le voyant bleu clignote",
|
||||
"网关添加成功": "Gateway ajouté avec succès"
|
||||
"一键登录": "Connexion en un clic"
|
||||
}
|
||||
@ -1121,6 +1121,5 @@
|
||||
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "לאחר איפוס, טביעות האצבעות של המנעול יימחקו. אתה בטוח שברצונך לאפס את זה?",
|
||||
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "לאחר איפוס, השליטה מרחוק של המנעול יימחק. אתה רוצה לאפס את זה?",
|
||||
"版本说明": "המידע על גרסה",
|
||||
"网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "לאחר שהשער מופעל, לחץ והחזק את כפתור האיפוס למשך 5 שניות. לחץ על הבא כאשר האור מחוון כחול מהבהב",
|
||||
"网关添加成功": "שער הוסיף בהצלחה"
|
||||
"一键登录": "התחברות בלחיצה אחת"
|
||||
}
|
||||
@ -603,7 +603,7 @@
|
||||
"开门方式": "開門方法",
|
||||
"请选择": "請選擇",
|
||||
"家人": "家人",
|
||||
"保存": "保存",
|
||||
"保存": "救",
|
||||
"APP推送": "APP推送",
|
||||
"管理员": "管理",
|
||||
"未启用": "未啟用",
|
||||
@ -1121,6 +1121,5 @@
|
||||
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "重置之後,鎖嘅指紋將被刪除。 你確定要重置它啊?",
|
||||
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "重置之後,鎖嘅遙控器將被刪除。 是否要重置它?",
|
||||
"版本说明": "版本說明",
|
||||
"网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "網關上電之後,長按重置掣5秒鐘。 單擊藍色指示燈閃爍時嘅下一步",
|
||||
"网关添加成功": "已成功添加網關"
|
||||
"一键登录": "一键登录"
|
||||
}
|
||||
@ -1121,6 +1121,5 @@
|
||||
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Nakon resetovanja, otisci brave će biti izbrisani. Jeste li sigurni da ga želite resetirati?",
|
||||
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Nakon resetovanja, daljinski upravljač brave će biti izbrisan. Hoæeš da ga resetuješ?",
|
||||
"版本说明": "Informacije o verziji",
|
||||
"网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "Nakon što se uključi prolaz, pritisnite i zadržite dugme za reset 5 sekundi. Kliknite slijedeći kada svjetlo plavog indikatora bljeska",
|
||||
"网关添加成功": "Gateway je uspješno dodano"
|
||||
"一键登录": "Prijavljivanje jednog klika"
|
||||
}
|
||||
@ -1121,6 +1121,5 @@
|
||||
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "A reset után a zár ujjlenyomatai törlődnek. Biztos vagy benne, hogy vissza szeretné állítani?",
|
||||
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "A reset után a zár távirányítója törlődik. Szeretné visszaállítani?",
|
||||
"版本说明": "Versió leírás",
|
||||
"网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "Az átjáró bekapcsolása után 5 másodpercig nyomja meg a reset gombot. Kattintson a következő gombra, amikor a kék jelző fény villog",
|
||||
"网关添加成功": "Átjáró sikeresen hozzáadott"
|
||||
"一键登录": "Egykattintásos bejelentkezés"
|
||||
}
|
||||
@ -1121,6 +1121,5 @@
|
||||
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Setelah mengulang, sidik jari kunci akan dihapus. Yakin ingin meresetnya?",
|
||||
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Setelah reset, remote control kunci akan dihapus. Ingin mengatur ulang?",
|
||||
"版本说明": "Catatan versi",
|
||||
"网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "Setelah gateway dinyalakan, tekan dan tahan tombol Atur ulang selama 5 detik. Klik berikutnya ketika lampu indikator biru berkedip",
|
||||
"网关添加成功": "Gateway berhasil ditambahkan"
|
||||
"一键登录": "Masuk satu klik"
|
||||
}
|
||||
@ -1121,6 +1121,5 @@
|
||||
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Dopo il reset, le impronte digitali del lucchetto verranno cancellate. Sei sicuro di volerlo resettare?",
|
||||
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Dopo il reset, il telecomando del lucchetto verrà eliminato. Vuoi resettarlo?",
|
||||
"版本说明": "Versione",
|
||||
"网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "Dopo che il gateway è acceso, premere e tenere premuto il pulsante di reset per 5 secondi. Fai clic su Avanti quando la spia blu lampeggia",
|
||||
"网关添加成功": "Gateway aggiunto correttamente"
|
||||
"一键登录": "Accesso con un clic"
|
||||
}
|
||||
@ -1121,6 +1121,5 @@
|
||||
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "リセット後、ロックの指紋は削除されます。リセットしてもよろしいですか。",
|
||||
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "リセット後、ロックのリモコンが削除されます。リセットしますか?",
|
||||
"版本说明": "バージョン説明",
|
||||
"网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "ゲートウェイの電源がオンになった後、リセットボタンを5秒間押し続けます。青いインジケータライトが点滅したら、 [Next] をクリックします",
|
||||
"网关添加成功": "ゲートウェイの追加に成功"
|
||||
"一键登录": "ワンクリックログイン"
|
||||
}
|
||||
@ -62,7 +62,6 @@
|
||||
"批量授权锁": "批量授权锁",
|
||||
"授权管理员拥有操作这把锁的重要权限,请确保只发给我你信任的人": "授权管理员拥有操作这把锁的重要权限,请确保只发给我你信任的人",
|
||||
"功能开启后,你将可以通过网关远程开锁。此功能的开启和关闭只能在锁附近通过手机蓝牙进行。": "功能开启后,你将可以通过网关远程开锁。此功能的开启和关闭只能在锁附近通过手机蓝牙进行。",
|
||||
"功能开启后,你将可以通过网关远程开锁。": "功能开启后,你将可以通过网关远程开锁。",
|
||||
"排列方式": "排列方式",
|
||||
"早到榜": "早到榜",
|
||||
"迟到榜": "迟到榜",
|
||||
@ -1013,7 +1012,6 @@
|
||||
"请在锁设置中开启远程开锁": "请在锁设置中开启远程开锁",
|
||||
"接听": "接听",
|
||||
"截图已保存到相册": "截图已保存到相册",
|
||||
"录屏已保存到相册": "录屏已保存到相册",
|
||||
"添加遥控": "添加遥控",
|
||||
"已连接到锁,请按遥控": "已连接到锁,请按遥控",
|
||||
"遥控号": "遥控号",
|
||||
@ -1122,19 +1120,7 @@
|
||||
"分简称": "分简称",
|
||||
"跟随系统": "跟随系统",
|
||||
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "重置后,该锁的指纹都将被删除哦,确认要重置吗?",
|
||||
"通话未接通,已挂断": "通话未接通,已挂断",
|
||||
"通话异常中断": "通话异常中断",
|
||||
"通话连接失败": "通话连接失败",
|
||||
"已挂断": "已挂断",
|
||||
"正在说话...": "正在说话...",
|
||||
"设备不在线": "设备不在线",
|
||||
"设备未配网": "设备未配网",
|
||||
"已静音": "已静音",
|
||||
"该锁的远程开锁功能未启用": "该锁的远程开锁功能未启用",
|
||||
"下载完成,请到相册查看": "下载完成,请到相册查看",
|
||||
"猫眼设置为省电模式时无法进行监控,请在猫眼设置中切换为其他模式": "猫眼设置为省电模式时无法进行监控,请在猫眼设置中切换为其他模式",
|
||||
"猫眼设置为省电模式时无法进行远程开锁,请在猫眼设置中切换为其他模式": "猫眼设置为省电模式时无法进行远程开锁,请在猫眼设置中切换为其他模式",
|
||||
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "重置后,该锁的遥控都将被删除哦,确认要重置吗?",
|
||||
"版本说明": "版本说明",
|
||||
"网关添加成功": "网关添加成功"
|
||||
"一键登录": "一键登录"
|
||||
}
|
||||
|
||||
@ -1121,6 +1121,5 @@
|
||||
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Қайта ысырып тастау Шынымен ысырып тастауды қалайсыз ба?",
|
||||
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Қайта ысырып ысырып тасымалдауын өшіріледі. Оны ысырып тастауды қалайсыз ба?",
|
||||
"版本说明": "Версиятын көрсету",
|
||||
"网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "Шығыс жегілді соң, ысырып тасымалдау батырмасын басып 5 секунд басыңыз. Көк белгісін жарыялды, келесі басыңыз",
|
||||
"网关添加成功": "Шлюз сәтті қосылды"
|
||||
"一键登录": "Бір шертті кіру"
|
||||
}
|
||||
@ -1121,6 +1121,5 @@
|
||||
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "재설정 후 잠금 장치의 지문이 삭제됩니다. 당신은 그것을 재설정 하시겠습니까?",
|
||||
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "재설정 후 잠금 장치의 리모컨이 삭제됩니다. 당신은 그것을 재설정 하시겠습니까?",
|
||||
"版本说明": "버전 설명",
|
||||
"网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "게이트웨이의 전원이 켜지면 재설정 버튼을 5 초 동안 누르고 있습니다. 파란색 표시등이 깜박일 때 다음을 클릭하십시오.",
|
||||
"网关添加成功": "게이트웨이가 성공적으로 추가되었습니다."
|
||||
"一键登录": "원 클릭 로그인"
|
||||
}
|
||||
@ -1121,6 +1121,5 @@
|
||||
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Po reset užrakto pirštų atspaudai bus ištrinti. Ar tikrai norite jį atkurti?",
|
||||
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Po reset, nuotolinis valdymo pultas užraktas bus ištrintas. Ar norite jį atkurti?",
|
||||
"版本说明": "Versijos aprašymas",
|
||||
"网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "Įjungus vartus, 5 sekundes paspauskite ir palaikykite mygtuką \"reset\". Spustelėkite toliau, kai mėlyna indikatoriaus šviesa mirksi",
|
||||
"网关添加成功": "Vartai sėkmingai pridėta"
|
||||
"一键登录": "Vieno paspaudimo prisijungimas"
|
||||
}
|
||||
@ -1121,6 +1121,5 @@
|
||||
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Selepas menetapkan semula, cap jari kunci akan dipadamkan. Adakah anda pasti anda mahu menetapkan semula?",
|
||||
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Selepas menetapkan semula, kawalan jauh kunci akan dipadamkan. Adakah anda mahu menetapkan semula?",
|
||||
"版本说明": "Penerangan versi",
|
||||
"网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "Selepas pintu masuk dihidupkan, tekan dan tahan butang reset selama 5 saat. Klik seterusnya apabila lampu penunjuk biru berkelip",
|
||||
"网关添加成功": "Get laluan ditambah berjaya"
|
||||
"一键登录": "Log masuk satu klik"
|
||||
}
|
||||
@ -1121,6 +1121,5 @@
|
||||
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Na het resetten worden de vingerafdrukken van het slot verwijderd. Weet je zeker dat je het wilt resetten?",
|
||||
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Na het resetten wordt de afstandsbediening van het slot verwijderd. Wilt u het resetten?",
|
||||
"版本说明": "Versieomschrijving",
|
||||
"网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "Nadat de gateway is ingeschakeld, houdt u de resetknop 5 seconden ingedrukt. Klik op Volgende wanneer het blauwe lampje knippert",
|
||||
"网关添加成功": "Gateway met succes toegevoegd"
|
||||
"跟随系统": "Systeem volgen",
|
||||
}
|
||||
@ -1121,6 +1121,5 @@
|
||||
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Po zresetowaniu odciski palców zamka zostaną usunięte. Czy na pewno chcesz go zresetować?",
|
||||
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Po zresetowaniu zdalne sterowanie zamkiem zostanie usunięte. Czy chcesz go zresetować?",
|
||||
"版本说明": "Wersja",
|
||||
"网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "Po włączeniu bramy naciśnij i przytrzymaj przycisk resetowania przez 5 sekund. Kliknij przycisk Dalej, gdy miga niebieska lampka kontrolna",
|
||||
"网关添加成功": "Gateway dodany pomyślnie"
|
||||
"一键登录": "Login jednym kliknięciem"
|
||||
}
|
||||
@ -1121,6 +1121,5 @@
|
||||
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Após a redefinição, as impressões digitais do bloqueio serão apagadas. Tens a certeza que queres redefini-lo?",
|
||||
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Após a reinicialização, o controle remoto do bloqueio será excluído. Você quer redefini-lo?",
|
||||
"版本说明": "Descrição da versão",
|
||||
"网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "Depois que o gateway estiver ligado, pressione e segure o botão de reset por 5 segundos. Clique Próximo quando a luz indicadora azul pisca",
|
||||
"网关添加成功": "Gateway adicionado com sucesso"
|
||||
"一键登录": "Login com um clique"
|
||||
}
|
||||
@ -1121,6 +1121,5 @@
|
||||
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "După resetare, amprentele încuietorii vor fi şterse. Sigur doriți să-l resetați?",
|
||||
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "După resetare, telecomanda de blocare va fi ştersă. Vrei să-l resetezi?",
|
||||
"版本说明": "Descrierea versiunii",
|
||||
"网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "După pornirea poarta, apăsați și țineți butonul de resetare timp de 5 secunde. Click Next atunci când lumina indicator albastru lăturare",
|
||||
"网关添加成功": "Gateway adăugat cu succes"
|
||||
"一键登录": "Autentificare cu un singur clicName"
|
||||
}
|
||||
@ -1121,6 +1121,5 @@
|
||||
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "После сброса отпечатки пальцев замка будут удалены. Вы уверены, что хотите его перезагрузить?",
|
||||
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "После сброса пульт дистанционного управления замком будет удален. А вы хотите его сбросить?",
|
||||
"版本说明": "Объяснение версии",
|
||||
"网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "После включения шлюза нажмите и удерживайте кнопку сброса в течение 5 секунд. Нажмите Далее, когда синий индикатор мигает",
|
||||
"网关添加成功": "Шлюз успешно добавлен"
|
||||
"一键登录": "Вход в один клик"
|
||||
}
|
||||
@ -1121,6 +1121,5 @@
|
||||
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Po resetovaní budú prstové odtlačky zámku vymazané. Ste si istí, že chcete obnoviť?",
|
||||
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Po resetovaní bude diaľkové ovládanie zámku vymazané. Chcete ho obnoviť?",
|
||||
"版本说明": "Popis verzie",
|
||||
"网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "Po zapnutí brány stlačte a podržte tlačidlo reset 5 sekúnd. Kliknite na ďalšie, keď modrý indikátor svetlo bliká",
|
||||
"网关添加成功": "Brána úspešne pridaná"
|
||||
"一键登录": "Prihlásenie jedným kliknutím"
|
||||
}
|
||||
@ -1121,6 +1121,5 @@
|
||||
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Након ресетовања, отисци прстију браве ће бити избрисани. Да ли сте сигурни да желите да га ресетујете?",
|
||||
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Након ресетовања, даљински управљач браве ће бити избрисан. Да ли желите да га ресетујете?",
|
||||
"版本说明": "Опис верзије",
|
||||
"网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "Након што је гатеваи укључен, притисните и држите дугме за ресетовање за 5 секунди. Кликните Следећи када плава лампица трепери",
|
||||
"网关添加成功": "Гатеваи је успешно додао"
|
||||
"一键登录": "Пријава једним кликом"
|
||||
}
|
||||
@ -1121,6 +1121,5 @@
|
||||
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Efter återställd, kommer låsets fingeravtryck tas bort. Är du säker på att du vill återställa den?",
|
||||
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Efter återställd, fjärrkontrollen på låset tas bort. Vill du återställa den?",
|
||||
"版本说明": "Versionsbeskrivning",
|
||||
"网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "När gateway är aktiverad, tryck på och håll återställningsknappen i 5 sekunder. Klicka Nästa när den blå indikator ljus blinkar",
|
||||
"网关添加成功": "Gateway lagt till med lyckad"
|
||||
"一键登录": "Ett klick inloggning"
|
||||
}
|
||||
@ -1121,6 +1121,5 @@
|
||||
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "หลังจากรีเซ็ตแล้วลายนิ้วมือของล็อคจะถูกลบออกคุณแน่ใจว่าอยากจะรีเซ็ต?",
|
||||
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "หลังจากรีเซ็ตแล้วรีโมทคอนโทรลของล็อคจะถูกลบออกคุณต้องการรีเซ็ตไหม",
|
||||
"版本说明": "คำอธิบายรุ่น",
|
||||
"网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "หลังจากเปิดเกตเวย์แล้วให้กดปุ่มรีเซ็ตค้างไว้5วินาทีคลิกถัดไปเมื่อไฟแสดงสถานะสีน้ำเงินกะพริบ",
|
||||
"网关添加成功": "เพิ่มเกตเวย์เรียบร้อยแล้ว"
|
||||
"一键登录": "เข้าสู่ระบบด้วยคลิกเดียว"
|
||||
}
|
||||
@ -1121,6 +1121,5 @@
|
||||
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Sıfırlamadan sonra, kilidin parmak izleri silinecektir. Sıfırlamak istediğine emin misin?",
|
||||
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Sıfırladıktan sonra, kilidin uzaktan kumandası silinecektir. Sıfırlamak ister misin?",
|
||||
"版本说明": "Sürüm açıklaması",
|
||||
"网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "Ağ geçidi açıldıktan sonra sıfırlama düğmesine 5 saniye basılı tutun. Mavi gösterge ışığı yanıp söndüğünde İleri'ye tıklayın",
|
||||
"网关添加成功": "Ağ geçidi başarıyla eklendi"
|
||||
"一键登录": "Tek tıklama giriş"
|
||||
}
|
||||
@ -1121,6 +1121,5 @@
|
||||
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "重置後,鎖的指紋將被刪除。 是否確實要重置它?",
|
||||
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "重置後,鎖的遙控器將被刪除。 是否要重置它?",
|
||||
"版本说明": "版本說明",
|
||||
"网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "網關通電後,按住reset按鈕5秒鐘。 當藍色指示燈閃爍時,單擊 「下一步」",
|
||||
"网关添加成功": "已成功添加網關"
|
||||
"一键登录": "一鍵登錄"
|
||||
}
|
||||
@ -1121,6 +1121,5 @@
|
||||
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Після скидання відбитки пальців замка будуть видалені. Ви впевнені, що хочете скинути налаштування?",
|
||||
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Після скидання пульт дистанційного керування замком буде видалено. Хочете його скинути?",
|
||||
"版本说明": "Опис версії",
|
||||
"网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "Після ввімкнення шлюзу натисніть і утримуйте кнопку скидання протягом 5 секунд. Натисніть «Далі», коли синій індикатор почне блимати",
|
||||
"网关添加成功": "Шлюз успішно додано"
|
||||
"一键登录": "Вхід в один клік"
|
||||
}
|
||||
@ -1121,6 +1121,5 @@
|
||||
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "Sau khi đặt lại, dấu vân tay của khóa sẽ bị xóa. Bạn có chắc chắn muốn thiết lập lại nó?",
|
||||
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "Sau khi đặt lại, điều khiển từ xa của khóa sẽ bị xóa. Bạn có muốn đặt lại không?",
|
||||
"版本说明": "Thông tin phiên bản",
|
||||
"网关通电后,长按重置按钮5秒,蓝色指示灯闪烁时点击下一步": "Sau khi cổng được bật, Nhấn và giữ nút Reset trong 5 giây. Nhấp vào tiếp theo khi đèn báo màu xanh lam nhấp nháy",
|
||||
"网关添加成功": "Gateway đã thêm thành công"
|
||||
"一键登录": "Đăng nhập bằng một cú nhấp chuột"
|
||||
}
|
||||
@ -62,7 +62,6 @@
|
||||
"批量授权锁": "批量授权锁",
|
||||
"授权管理员拥有操作这把锁的重要权限,请确保只发给我你信任的人": "授权管理员拥有操作这把锁的重要权限,请确保只发给我你信任的人",
|
||||
"功能开启后,你将可以通过网关远程开锁。此功能的开启和关闭只能在锁附近通过手机蓝牙进行。": "功能开启后,你将可以通过网关远程开锁。此功能的开启和关闭只能在锁附近通过手机蓝牙进行。",
|
||||
"功能开启后,你将可以通过网关远程开锁。": "功能开启后,你将可以通过网关远程开锁。",
|
||||
"排列方式": "排列方式",
|
||||
"早到榜": "早到榜",
|
||||
"迟到榜": "迟到榜",
|
||||
@ -1011,7 +1010,6 @@
|
||||
"请在锁设置中开启远程开锁": "请在锁设置中开启远程开锁",
|
||||
"接听": "接听",
|
||||
"截图已保存到相册": "截图已保存到相册",
|
||||
"录屏已保存到相册": "录屏已保存到相册",
|
||||
"添加遥控": "添加遥控",
|
||||
"已连接到锁,请按遥控": "已连接到锁,请按遥控",
|
||||
"遥控号": "遥控号",
|
||||
@ -1122,19 +1120,7 @@
|
||||
"分简称": "分",
|
||||
"跟随系统": "跟随系统",
|
||||
"重置后,该锁的指纹都将被删除哦,确认要重置吗?": "重置后,该锁的指纹都将被删除哦,确认要重置吗?",
|
||||
"通话未接通,已挂断": "通话未接通,已挂断",
|
||||
"通话异常中断": "通话异常中断",
|
||||
"通话连接失败": "通话连接失败",
|
||||
"已挂断": "已挂断",
|
||||
"正在说话...": "正在说话...",
|
||||
"设备不在线": "设备不在线",
|
||||
"设备未配网": "设备未配网",
|
||||
"已静音": "已静音",
|
||||
"该锁的远程开锁功能未启用": "该锁的远程开锁功能未启用",
|
||||
"下载完成,请到相册查看": "下载完成,请到相册查看",
|
||||
"猫眼设置为省电模式时无法进行监控,请在猫眼设置中切换为其他模式": "猫眼设置为省电模式时无法进行监控,请在猫眼设置中切换为其他模式",
|
||||
"猫眼设置为省电模式时无法进行远程开锁,请在猫眼设置中切换为其他模式": "猫眼设置为省电模式时无法进行远程开锁,请在猫眼设置中切换为其他模式",
|
||||
"重置后,该锁的遥控都将被删除哦,确认要重置吗?": "重置后,该锁的遥控都将被删除哦,确认要重置吗?",
|
||||
"版本说明": "版本说明",
|
||||
"网关添加成功": "网关添加成功"
|
||||
"一键登录": "一键登录"
|
||||
}
|
||||
|
||||
@ -1,6 +1,9 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:star_lock/apm/apm_helper.dart';
|
||||
import 'package:jverify/jverify.dart';
|
||||
import 'package:star_lock/appRouters.dart';
|
||||
import 'package:star_lock/app_settings/app_settings.dart';
|
||||
import 'package:star_lock/blue/blue_manage.dart';
|
||||
@ -17,6 +20,7 @@ import '../../mine/mine/starLockMine_logic.dart';
|
||||
import '../../network/api_repository.dart';
|
||||
import '../../tools/dateTool.dart';
|
||||
import '../../tools/eventBusEventManage.dart';
|
||||
import '../../tools/jverify_one_click_login.dart';
|
||||
import '../../tools/showTipView.dart';
|
||||
import '../../tools/storage.dart';
|
||||
import '../register/entity/checkIP_entity.dart';
|
||||
@ -97,6 +101,43 @@ class StarLockLoginLogic extends BaseGetXController {
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> oneClickLoginAction() async {
|
||||
await JverifyOneClickLoginManage().loginAuth((e) async {
|
||||
final int? code = e.code;
|
||||
final String? content = e.message;
|
||||
// final String operator = map['operator'];
|
||||
AppLog.log('1111code:$code content:$content');
|
||||
if (code == 6000) {
|
||||
final LoginEntity entity = await ApiRepository.to.oneClickLogin(
|
||||
loginType: '3',
|
||||
loginToken: content ?? '',
|
||||
deviceInfo: state.deviceInfoMap);
|
||||
if (entity.errorCode!.codeIsSuccessful) {
|
||||
ApmHelper.instance.trackEvent('login_result', {
|
||||
'account': state.emailOrPhone.value,
|
||||
'date': DateTool().getNowDateWithType(1),
|
||||
'login_res': '成功',
|
||||
});
|
||||
|
||||
Storage.saveLoginData(entity.data);
|
||||
Storage.setBool(saveIsVip, entity.data!.isVip == 1);
|
||||
eventBus.fire(MineInfoChangeRefreshUI());
|
||||
if (Get.isRegistered<LockMainLogic>()) {
|
||||
Get.find<LockMainLogic>().getStarLockInfo(isUnShowLoading: true);
|
||||
}
|
||||
Get.offNamedUntil(Routers.starLockMain, (Route route) => false);
|
||||
BlueManage().scanDevices.clear(); //清除设备缓存
|
||||
} else {
|
||||
ApmHelper.instance.trackEvent('login_result', {
|
||||
'account': state.emailOrPhone.value,
|
||||
'date': DateTool().getNowDateWithType(1),
|
||||
'login_res': '${entity.errorCode}--${entity.errorMsg}',
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Future<void> checkIpAction() async {
|
||||
final CheckIPEntity entity = await ApiRepository.to.checkIpAction(ip: '');
|
||||
if (entity.errorCode!.codeIsSuccessful) {
|
||||
@ -134,6 +175,16 @@ class StarLockLoginLogic extends BaseGetXController {
|
||||
state.canNext.value = state.pwdIsOK && state.isEmailOrPhone;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> onInit() async {
|
||||
super.onInit();
|
||||
|
||||
JverifyOneClickLoginManage();
|
||||
oneClickLoginAction();
|
||||
state.isCheckVerifyEnable.value =
|
||||
await JverifyOneClickLoginManage().checkVerifyEnable();
|
||||
}
|
||||
|
||||
@override
|
||||
void onClose() {
|
||||
state.onClose();
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
@ -14,6 +15,7 @@ import '../../appRouters.dart';
|
||||
import '../../app_settings/app_colors.dart';
|
||||
import '../../common/XSConstantMacro/XSConstantMacro.dart';
|
||||
import '../../tools/commonItem.dart';
|
||||
import '../../tools/jverify_one_click_login.dart';
|
||||
import '../../tools/submitBtn.dart';
|
||||
import '../../tools/tf_loginInput.dart';
|
||||
import '../../tools/titleAppBar.dart';
|
||||
@ -237,6 +239,24 @@ class _StarLockLoginPageState extends State<StarLockLoginPage> {
|
||||
}
|
||||
}
|
||||
: null)),
|
||||
// SizedBox(height: 20.w),
|
||||
// Obx(() => Visibility(
|
||||
// visible: state.isCheckVerifyEnable.value,
|
||||
// child: SubmitBtn(
|
||||
// btnName: '一键登录',
|
||||
// fontSize: 28.sp,
|
||||
// borderRadius: 20.w,
|
||||
// padding: EdgeInsets.only(top: 25.w, bottom: 25.w),
|
||||
// // isDisabled: state.canNext.value,
|
||||
// onClick: () {
|
||||
// if (state.agree.value == false) {
|
||||
// logic.showToast('请先同意用户协议及隐私政策'.tr);
|
||||
// return;
|
||||
// } else {
|
||||
// logic.oneClickLoginAction();
|
||||
// }
|
||||
// }),
|
||||
// )),
|
||||
SizedBox(height: 50.w),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
@ -261,24 +281,23 @@ class _StarLockLoginPageState extends State<StarLockLoginPage> {
|
||||
child: SizedBox(
|
||||
width: 10.sp,
|
||||
)),
|
||||
if (F.isLite)
|
||||
Container()
|
||||
else
|
||||
GestureDetector(
|
||||
child: SizedBox(
|
||||
// width: 150.w,
|
||||
height: 50.h,
|
||||
// color: Colors.red,
|
||||
child: Center(
|
||||
child: Text('演示模式'.tr,
|
||||
style: TextStyle(
|
||||
fontSize: 22.sp, color: AppColors.mainColor)),
|
||||
Obx(() => Visibility(
|
||||
visible: state.isCheckVerifyEnable.value,
|
||||
child: GestureDetector(
|
||||
child: SizedBox(
|
||||
// width: 150.w,
|
||||
height: 50.h,
|
||||
// color: Colors.red,
|
||||
child: Center(
|
||||
child: Text('一键登录'.tr,
|
||||
style: TextStyle(
|
||||
fontSize: 22.sp,
|
||||
color: AppColors.mainColor)),
|
||||
),
|
||||
),
|
||||
onTap: logic.oneClickLoginAction,
|
||||
),
|
||||
),
|
||||
onTap: () {
|
||||
Get.toNamed(Routers.demoModeLockDetailPage);
|
||||
},
|
||||
)
|
||||
))
|
||||
],
|
||||
),
|
||||
],
|
||||
|
||||
@ -45,6 +45,8 @@ class StarLockLoginState {
|
||||
'deviceType': 0
|
||||
}.obs;
|
||||
|
||||
RxBool isCheckVerifyEnable = false.obs;
|
||||
|
||||
void onClose() {
|
||||
// emailOrPhoneController.dispose();
|
||||
// pwdController.dispose();
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
@ -186,14 +187,12 @@ class _StarLockLoginPageState extends State<StarLockLoginXHJPage> {
|
||||
onPressed: () async {
|
||||
final dynamic data =
|
||||
await Get.toNamed(Routers.starLockRegisterPage);
|
||||
if (data != null) {
|
||||
state.emailOrPhoneController.text =
|
||||
data['phoneOrEmailStr'];
|
||||
logic.checkNext(state.emailOrPhoneController);
|
||||
state.pwdController.text = data['pwd'];
|
||||
logic.checkNext(state.pwdController);
|
||||
setState(() {});
|
||||
}
|
||||
state.emailOrPhoneController.text =
|
||||
data['phoneOrEmailStr'];
|
||||
logic.checkNext(state.emailOrPhoneController);
|
||||
state.pwdController.text = data['pwd'];
|
||||
logic.checkNext(state.pwdController);
|
||||
setState(() {});
|
||||
},
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor: AppColors.mainColor),
|
||||
@ -229,25 +228,25 @@ class _StarLockLoginPageState extends State<StarLockLoginXHJPage> {
|
||||
child: SizedBox(
|
||||
width: 10.sp,
|
||||
)),
|
||||
if (F.isLite)
|
||||
Container()
|
||||
else
|
||||
GestureDetector(
|
||||
child: SizedBox(
|
||||
// width: 150.w,
|
||||
height: 50.h,
|
||||
// color: Colors.red,
|
||||
child: Center(
|
||||
child: Text('演示模式'.tr,
|
||||
style: TextStyle(
|
||||
fontSize: 22.sp,
|
||||
color: AppColors.mainColor)),
|
||||
Obx(() => Visibility(
|
||||
visible: state.isCheckVerifyEnable.value,
|
||||
child: GestureDetector(
|
||||
child: SizedBox(
|
||||
// width: 150.w,
|
||||
height: 50.h,
|
||||
// color: Colors.red,
|
||||
child: Center(
|
||||
child: Text('一键登录'.tr,
|
||||
style: TextStyle(
|
||||
fontSize: 22.sp,
|
||||
color: AppColors.mainColor)),
|
||||
),
|
||||
),
|
||||
onTap: () async {
|
||||
logic.oneClickLoginAction();
|
||||
},
|
||||
),
|
||||
),
|
||||
onTap: () {
|
||||
Get.toNamed(Routers.demoModeLockDetailPage);
|
||||
},
|
||||
)
|
||||
))
|
||||
],
|
||||
),
|
||||
],
|
||||
|
||||
@ -3,6 +3,7 @@ import 'dart:async';
|
||||
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:star_lock/apm/apm_helper.dart';
|
||||
import 'package:star_lock/app_settings/app_settings.dart';
|
||||
|
||||
import 'package:star_lock/main/lockDetail/doorLockLog/doorLockLog_entity.dart';
|
||||
import 'package:star_lock/main/lockDetail/doorLockLog/doorLockLog_state.dart';
|
||||
@ -68,34 +69,38 @@ class DoorLockLogLogic extends BaseGetXController {
|
||||
final List uploadList = [];
|
||||
for (int i = 0; i < getList.length; i++) {
|
||||
final List<int> indexList = getList[i];
|
||||
// AppLog.log("indexList:$indexList");
|
||||
final Map indexMap = {};
|
||||
indexMap['type'] = indexList[0].toString();
|
||||
try {
|
||||
// AppLog.log("indexList:$indexList");
|
||||
final Map indexMap = {};
|
||||
indexMap['type'] = indexList[0].toString();
|
||||
|
||||
final int userNo = (indexList[1] * 256) + indexList[2];
|
||||
indexMap['user'] = userNo.toString();
|
||||
// AppLog.log('userNouserNouserNouserNo:$userNo');
|
||||
final int userNo = (indexList[1] * 256) + indexList[2];
|
||||
indexMap['user'] = userNo.toString();
|
||||
// AppLog.log('userNouserNouserNouserNo:$userNo');
|
||||
|
||||
final List<int> passwordData = indexList.sublist(7, 17);
|
||||
final String password = utf8String(passwordData);
|
||||
indexMap['password'] = password.toString();
|
||||
// AppLog.log('passwordpasswordpassword:$password');
|
||||
final List<int> passwordData = indexList.sublist(7, 17);
|
||||
final String password = utf8String(passwordData);
|
||||
indexMap['password'] = password.toString();
|
||||
// AppLog.log('passwordpasswordpassword:$password');
|
||||
|
||||
indexMap['success'] = '1';
|
||||
indexMap['success'] = '1';
|
||||
|
||||
final int time = (0xff & indexList[3]) << 24 |
|
||||
(0xff & indexList[4]) << 16 |
|
||||
(0xff & indexList[5]) << 8 |
|
||||
(0xFF & indexList[6]);
|
||||
final int operateDate = time * 1000;
|
||||
final int serverTime = state.currentDate;
|
||||
if (DateTime.fromMillisecondsSinceEpoch(operateDate).isAfter(
|
||||
DateTime.fromMillisecondsSinceEpoch(serverTime * 1000))) {
|
||||
// AppLog.log('operateDate:$operateDate state.currentDate:${state.currentDate}');
|
||||
continue;
|
||||
final int time = (0xff & indexList[3]) << 24 |
|
||||
(0xff & indexList[4]) << 16 |
|
||||
(0xff & indexList[5]) << 8 |
|
||||
(0xFF & indexList[6]);
|
||||
final int operateDate = time * 1000;
|
||||
final int serverTime = state.currentDate;
|
||||
if (DateTime.fromMillisecondsSinceEpoch(operateDate).isAfter(
|
||||
DateTime.fromMillisecondsSinceEpoch(serverTime * 1000))) {
|
||||
// AppLog.log('operateDate:$operateDate state.currentDate:${state.currentDate}');
|
||||
continue;
|
||||
}
|
||||
indexMap['date'] = '$operateDate';
|
||||
uploadList.add(indexMap);
|
||||
} catch (e) {
|
||||
AppLog.log('操作记录:$indexList,解析失败,跳过该跳记录,进行下一条记录解析。');
|
||||
}
|
||||
indexMap['date'] = '$operateDate';
|
||||
uploadList.add(indexMap);
|
||||
}
|
||||
if (dataLength == state.logCountPage) {
|
||||
state.ifHaveNext = true;
|
||||
|
||||
@ -344,38 +344,43 @@ class LockDetailLogic extends BaseGetXController {
|
||||
final List uploadList = [];
|
||||
for (int i = 0; i < getList.length; i++) {
|
||||
final List<int> indexList = getList[i];
|
||||
AppLog.log('indexList:$indexList');
|
||||
final Map indexMap = {};
|
||||
indexMap['type'] = indexList[0].toString();
|
||||
try {
|
||||
AppLog.log('indexList:$indexList');
|
||||
final Map indexMap = {};
|
||||
indexMap['type'] = indexList[0].toString();
|
||||
|
||||
final int userNo = (indexList[1] * 256) + indexList[2];
|
||||
indexMap['user'] = userNo.toString();
|
||||
// AppLog.log('userNouserNouserNouserNo:$userNo');
|
||||
final int userNo = (indexList[1] * 256) + indexList[2];
|
||||
indexMap['user'] = userNo.toString();
|
||||
// AppLog.log('userNouserNouserNouserNo:$userNo');
|
||||
|
||||
final List<int> passwordData = indexList.sublist(7, 17);
|
||||
final String password = utf8String(passwordData);
|
||||
indexMap['password'] = password.toString();
|
||||
// AppLog.log('passwordpasswordpassword:$password');
|
||||
final List<int> passwordData = indexList.sublist(7, 17);
|
||||
final String password = utf8String(passwordData);
|
||||
indexMap['password'] = password.toString();
|
||||
// AppLog.log('passwordpasswordpassword:$password');
|
||||
|
||||
indexMap['success'] = '1';
|
||||
indexMap['success'] = '1';
|
||||
|
||||
final int time = (0xff & indexList[3]) << 24 |
|
||||
(0xff & indexList[4]) << 16 |
|
||||
(0xff & indexList[5]) << 8 |
|
||||
(0xFF & indexList[6]);
|
||||
int operateDate = time * 1000;
|
||||
if (DateTime.fromMillisecondsSinceEpoch(operateDate).isAfter(
|
||||
DateTime.fromMillisecondsSinceEpoch(getUTCNetTime() * 1000))) {
|
||||
continue;
|
||||
}
|
||||
final int time = (0xff & indexList[3]) << 24 |
|
||||
(0xff & indexList[4]) << 16 |
|
||||
(0xff & indexList[5]) << 8 |
|
||||
(0xFF & indexList[6]);
|
||||
int operateDate = time * 1000;
|
||||
if (DateTime.fromMillisecondsSinceEpoch(operateDate).isAfter(
|
||||
DateTime.fromMillisecondsSinceEpoch(
|
||||
getUTCNetTime() * 1000))) {
|
||||
continue;
|
||||
}
|
||||
|
||||
indexMap['date'] = '$operateDate';
|
||||
uploadList.add(indexMap);
|
||||
indexMap['date'] = '$operateDate';
|
||||
uploadList.add(indexMap);
|
||||
|
||||
if (i == getList.length - 1) {
|
||||
//设置最后的时间戳
|
||||
if (i == getList.length - 1) {
|
||||
//设置最后的时间戳
|
||||
|
||||
state.operateDate = operateDate;
|
||||
state.operateDate = operateDate;
|
||||
}
|
||||
} catch (e) {
|
||||
AppLog.log('操作记录:$indexList,解析失败,跳过该跳记录,进行下一条记录解析。');
|
||||
}
|
||||
}
|
||||
lockRecordUploadData(uploadList);
|
||||
|
||||
@ -4,7 +4,7 @@ import 'flavors.dart';
|
||||
import 'main.dart' as runner;
|
||||
|
||||
Future<void> main() async {
|
||||
F.appFlavor = Flavor.pre;
|
||||
F.appFlavor = Flavor.xhj;
|
||||
// AppLog.log('local调用了main函数');
|
||||
await runner.main();
|
||||
}
|
||||
|
||||
@ -5,6 +5,7 @@ abstract class Api {
|
||||
final String getSliderVerifyImgUrl = '/user/getSliderVerifyImg';
|
||||
final String checkImgUrl = '/user/isSliderValid';
|
||||
final String loginUrl = '/user/login';
|
||||
final String oneClickLoginUrl = '/user/quickLogin'; // 一键登录
|
||||
final String resetPasswordURL = '/user/resetPassword'; //重置密码
|
||||
final String getCountryRegionURL = '/system/listCountry'; //获取国家或地区
|
||||
final String electronicKeyListURL = '/key/listUser'; //电子钥匙列表
|
||||
|
||||
@ -80,6 +80,17 @@ class ApiProvider extends BaseProvider {
|
||||
'deviceInfo': deviceInfo,
|
||||
}));
|
||||
|
||||
Future<Response> oneClickLogin(
|
||||
String loginType, String loginToken, Map deviceInfo) =>
|
||||
post(
|
||||
oneClickLoginUrl.toUrl,
|
||||
jsonEncode({
|
||||
'loginType': loginType,
|
||||
'platId': '2',
|
||||
'loginToken': loginToken,
|
||||
'deviceInfo': deviceInfo,
|
||||
}));
|
||||
|
||||
Future<Response> resetPassword(
|
||||
String countryCode,
|
||||
String account,
|
||||
|
||||
@ -146,6 +146,16 @@ class ApiRepository {
|
||||
return LoginEntity.fromJson(res.body);
|
||||
}
|
||||
|
||||
//登录
|
||||
Future<LoginEntity> oneClickLogin(
|
||||
{required String loginType,
|
||||
required String loginToken,
|
||||
required Map deviceInfo}) async {
|
||||
final res =
|
||||
await apiProvider.oneClickLogin(loginType, loginToken, deviceInfo);
|
||||
return LoginEntity.fromJson(res.body);
|
||||
}
|
||||
|
||||
//重置密码
|
||||
Future<LoginEntity> resetPassword(
|
||||
String countryCode,
|
||||
|
||||
272
lib/tools/jverify_one_click_login.dart
Normal file
272
lib/tools/jverify_one_click_login.dart
Normal file
@ -0,0 +1,272 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:jverify/jverify.dart';
|
||||
import 'package:star_lock/app_settings/app_colors.dart';
|
||||
|
||||
import '../app_settings/app_settings.dart';
|
||||
import '../common/XSConstantMacro/XSConstantMacro.dart';
|
||||
import '../flavors.dart';
|
||||
|
||||
class JverifyOneClickLoginManage {
|
||||
factory JverifyOneClickLoginManage() => shareManager()!;
|
||||
|
||||
JverifyOneClickLoginManage._init() {
|
||||
_initSDK();
|
||||
}
|
||||
|
||||
static JverifyOneClickLoginManage? _manager;
|
||||
|
||||
static JverifyOneClickLoginManage? shareManager() {
|
||||
_manager ??= JverifyOneClickLoginManage._init();
|
||||
return _manager;
|
||||
}
|
||||
|
||||
JverifyOneClickLoginManage? get manager => shareManager();
|
||||
Jverify jverify = Jverify();
|
||||
|
||||
/// 统一 key
|
||||
String f_result_key = 'result';
|
||||
|
||||
/// 错误码
|
||||
String f_code_key = 'code';
|
||||
|
||||
/// 回调的提示信息,统一返回 flutter 为 message
|
||||
String f_msg_key = 'message';
|
||||
|
||||
/// 运营商信息
|
||||
String f_opr_key = 'operator';
|
||||
|
||||
Future<void> _initSDK() async {
|
||||
try {
|
||||
await initPlatformState();
|
||||
|
||||
isInitSuccess();
|
||||
|
||||
getToken();
|
||||
|
||||
preLogin();
|
||||
} catch (e) {
|
||||
AppLog.log('SDK 初始化错误: $e');
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> initPlatformState() async {
|
||||
// 初始化 SDK 之前添加监听
|
||||
jverify.addSDKSetupCallBackListener((JVSDKSetupEvent event) {
|
||||
print('receive sdk setup call back event :${event.toMap()}');
|
||||
});
|
||||
|
||||
jverify.setDebugMode(true); // 打开调试模式
|
||||
jverify.setCollectionAuth(true);
|
||||
String appKey;
|
||||
if (F.isSKY) {
|
||||
appKey = '7ff37d174c1a568a89e98dad';
|
||||
AppLog.log('appKey:7ff37d174c1a568a89e98dad');
|
||||
} else {
|
||||
appKey = '251fc8074820d122b6de58d2';
|
||||
AppLog.log('appKey:251fc8074820d122b6de58d2');
|
||||
}
|
||||
jverify.setup(
|
||||
appKey: appKey, //"你自己应用的 AppKey",
|
||||
channel: 'devloper');
|
||||
|
||||
/// 授权页面点击时间监听
|
||||
jverify.addAuthPageEventListener((JVAuthPageEvent event) {
|
||||
print('receive auth page event :${event.toMap()}');
|
||||
});
|
||||
}
|
||||
|
||||
/// sdk 初始化是否完成
|
||||
void isInitSuccess() {
|
||||
jverify.isInitSuccess().then((map) {
|
||||
final bool result = map[f_result_key];
|
||||
AppLog.log('sdk 初始化结果:$map');
|
||||
if (result) {
|
||||
AppLog.log('sdk 初始化成功');
|
||||
} else {
|
||||
AppLog.log('sdk 初始化失败');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/// 判断当前网络环境是否可以发起认证
|
||||
Future<bool> checkVerifyEnable() async {
|
||||
final Map map = await jverify.checkVerifyEnable();
|
||||
final bool result = map[f_result_key];
|
||||
return result;
|
||||
// state.jverify.checkVerifyEnable().then((map) {
|
||||
// final bool result = map[f_result_key];
|
||||
// if (result) {
|
||||
// AppLog.log('当前网络环境【支持认证】!');
|
||||
// } else {
|
||||
// AppLog.log('当前网络环境【不支持认证】!');
|
||||
// }
|
||||
// return result;
|
||||
// });
|
||||
}
|
||||
|
||||
void getToken() {
|
||||
jverify.checkVerifyEnable().then((map) {
|
||||
final bool result = map[f_result_key];
|
||||
if (result) {
|
||||
jverify.getToken().then((map) {
|
||||
final int code = map[f_code_key];
|
||||
final String token = map[f_msg_key];
|
||||
final String operator = map[f_opr_key];
|
||||
AppLog.log('getToken code:$code token:$token operator:$operator');
|
||||
});
|
||||
} else {
|
||||
AppLog.log('[2016],msg = 当前网络环境不支持认证');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/// 登录预取号
|
||||
void preLogin() {
|
||||
jverify.checkVerifyEnable().then((map) {
|
||||
final bool result = map[f_result_key];
|
||||
if (result) {
|
||||
jverify.preLogin().then((map) {
|
||||
AppLog.log('预取号接口回调:${map.toString()}');
|
||||
final int code = map[f_code_key];
|
||||
final String message = map[f_msg_key];
|
||||
});
|
||||
} else {
|
||||
AppLog.log('[2016],msg = 当前网络环境不支持认证');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/// SDK 请求授权一键登录
|
||||
Future<void> loginAuth(
|
||||
Function(JVListenerEvent jvListenerEvent) action) async {
|
||||
Map map = await jverify.checkVerifyEnable();
|
||||
final bool result = map[f_result_key];
|
||||
print('checkVerifyEnable $map');
|
||||
//需要使用sms的时候不检查result
|
||||
// if (result) {
|
||||
// return await jverify.loginAuth(true);
|
||||
// }
|
||||
// return null;
|
||||
|
||||
if (result) {
|
||||
bool isiOS = Platform.isIOS;
|
||||
|
||||
/// 自定义授权的 UI 界面,以下设置的图片必须添加到资源文件里,
|
||||
/// android项目将图片存放至drawable文件夹下,可使用图片选择器的文件名,例如:btn_login.xml,入参为"btn_login"。
|
||||
/// ios项目存放在 Assets.xcassets。
|
||||
JVUIConfig uiConfig = JVUIConfig();
|
||||
// uiConfig.authBGGifPath = "main_gif";
|
||||
// uiConfig.authBGVideoPath="main_vi";
|
||||
// uiConfig.authBGVideoPath = 'http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4';
|
||||
uiConfig.authBackgroundImage = 'images/icon_left_grey.png';
|
||||
|
||||
// uiConfig.navHidden = !isiOS;
|
||||
uiConfig.navColor = AppColors.mainColor.value;
|
||||
uiConfig.navText = '一键登录'.tr;
|
||||
uiConfig.navTextColor = Colors.white.value;
|
||||
uiConfig.navReturnImgPath = 'return_bg'; //图片必须存在
|
||||
|
||||
uiConfig.logoWidth = 100;
|
||||
uiConfig.logoHeight = 100;
|
||||
//uiConfig.logoOffsetX = isiOS ? 0 : null;//(screenWidth/2 - uiConfig.logoWidth/2).toInt();
|
||||
uiConfig.logoOffsetY = 100;
|
||||
uiConfig.logoVerticalLayoutItem = JVIOSLayoutItem.ItemSuper;
|
||||
uiConfig.logoHidden = false;
|
||||
uiConfig.logoImgPath = 'logo';
|
||||
|
||||
uiConfig.numberFieldWidth = 200;
|
||||
uiConfig.numberFieldHeight = 40;
|
||||
//uiConfig.numFieldOffsetX = isiOS ? 0 : null;//(screenWidth/2 - uiConfig.numberFieldWidth/2).toInt();
|
||||
uiConfig.numFieldOffsetY = isiOS ? 120 : 220;
|
||||
uiConfig.numberVerticalLayoutItem = JVIOSLayoutItem.ItemLogo;
|
||||
uiConfig.numberColor = AppColors.mainColor.value;
|
||||
uiConfig.numberSize = 18;
|
||||
|
||||
uiConfig.sloganOffsetY = isiOS ? 120 : 260;
|
||||
uiConfig.sloganVerticalLayoutItem = JVIOSLayoutItem.ItemNumber;
|
||||
uiConfig.sloganTextColor = Colors.black.value;
|
||||
uiConfig.sloganTextSize = 15;
|
||||
// uiConfig.slogan
|
||||
//uiConfig.sloganHidden = 0;
|
||||
|
||||
uiConfig.logBtnOffsetX = 20;
|
||||
uiConfig.logBtnWidth = double.parse('${1.sw - 20 * 2}').toInt();
|
||||
uiConfig.logBtnHeight = 50;
|
||||
//uiConfig.logBtnOffsetX = isiOS ? 0 : null;//(screenWidth/2 - uiConfig.logBtnWidth/2).toInt();
|
||||
uiConfig.logBtnOffsetY = isiOS ? 120 : 330;
|
||||
uiConfig.logBtnVerticalLayoutItem = JVIOSLayoutItem.ItemNumber;
|
||||
uiConfig.logBtnText = '一键登录'.tr;
|
||||
uiConfig.logBtnTextColor = Colors.white.value;
|
||||
uiConfig.logBtnTextSize = 16;
|
||||
uiConfig.logBtnBackgroundPath = '';
|
||||
// uiConfig.logBtnTextBold = true;
|
||||
// uiConfig.loginBtnNormalImage = 'login_btn_normal'; //图片必须存在
|
||||
// uiConfig.loginBtnPressedImage = 'login_btn_press'; //图片必须存在
|
||||
// uiConfig.loginBtnUnableImage = 'login_btn_unable'; //图片必须存在
|
||||
|
||||
uiConfig.privacyHintToast =
|
||||
true; //only android 设置隐私条款不选中时点击登录按钮默认显示toast。
|
||||
|
||||
uiConfig.privacyState = false; //设置默认勾选
|
||||
uiConfig.privacyCheckboxSize = 20;
|
||||
uiConfig.checkedImgPath = 'check_image'; //图片必须存在
|
||||
uiConfig.uncheckedImgPath = 'uncheck_image'; //图片必须存在
|
||||
uiConfig.privacyCheckboxInCenter = true;
|
||||
uiConfig.privacyCheckboxHidden = false;
|
||||
uiConfig.isAlertPrivacyVc = true;
|
||||
|
||||
//uiConfig.privacyOffsetX = isiOS ? (20 + uiConfig.privacyCheckboxSize) : null;
|
||||
uiConfig.privacyOffsetY = 30; // 距离底部距离
|
||||
uiConfig.privacyOffsetX = 15; // 距离底部距离
|
||||
uiConfig.privacyVerticalLayoutItem = JVIOSLayoutItem.ItemSuper;
|
||||
uiConfig.clauseName = '协议1';
|
||||
uiConfig.clauseUrl = 'http://www.baidu.com';
|
||||
uiConfig.clauseBaseColor = Colors.black.value;
|
||||
uiConfig.clauseNameTwo = '协议二';
|
||||
uiConfig.clauseUrlTwo = 'http://www.hao123.com';
|
||||
uiConfig.clauseColor = AppColors.mainColor.value;
|
||||
uiConfig.privacyText = ['我已阅读并同意'.tr];
|
||||
uiConfig.privacyTextSize = 13;
|
||||
uiConfig.privacyItem = [
|
||||
JVPrivacy('用户协议'.tr, XSConstantMacro.userAgreementURL,
|
||||
beforeName: '', afterName: '', separator: ''),
|
||||
JVPrivacy('隐私政策'.tr, XSConstantMacro.privacyPolicyURL, separator: '')
|
||||
];
|
||||
uiConfig.textVerAlignment = 1;
|
||||
//uiConfig.privacyWithBookTitleMark = true;
|
||||
//uiConfig.privacyTextCenterGravity = false;
|
||||
uiConfig.authStatusBarStyle = JVIOSBarStyle.StatusBarStyleDarkContent;
|
||||
uiConfig.privacyStatusBarStyle = JVIOSBarStyle.StatusBarStyleDefault;
|
||||
uiConfig.modelTransitionStyle = JVIOSUIModalTransitionStyle.CrossDissolve;
|
||||
|
||||
uiConfig.statusBarColorWithNav = true;
|
||||
// uiConfig.virtualButtonTransparent = true;
|
||||
|
||||
uiConfig.privacyStatusBarColorWithNav = true;
|
||||
uiConfig.privacyVirtualButtonTransparent = true;
|
||||
|
||||
uiConfig.needStartAnim = true;
|
||||
uiConfig.needCloseAnim = true;
|
||||
uiConfig.enterAnim = 'activity_slide_enter_bottom';
|
||||
uiConfig.exitAnim = 'activity_slide_exit_bottom';
|
||||
|
||||
uiConfig.privacyNavColor = AppColors.mainColor.value;
|
||||
uiConfig.privacyNavTitleTextColor = Colors.white.value;
|
||||
uiConfig.privacyNavTitleTextSize = 16;
|
||||
|
||||
/// 调用接口设置 UI
|
||||
jverify.setCustomAuthorizationView(true, uiConfig,
|
||||
landscapeConfig: uiConfig);
|
||||
jverify.loginAuthSyncApi2(
|
||||
autoDismiss: true,
|
||||
loginAuthcallback: (event) {
|
||||
action(event);
|
||||
// AppLog.log('获取到 loginAuthSyncApi 接口返回数据,code=${event.code},message = ${event.message},operator = ${event.operator}');
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,3 +1,4 @@
|
||||
import 'package:device_info_plus/device_info_plus.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:permission_handler/permission_handler.dart';
|
||||
@ -109,8 +110,9 @@ class PermissionDialog {
|
||||
if (Get.context == null) {
|
||||
return false;
|
||||
}
|
||||
final AndroidDeviceInfo androidInfo = await DeviceInfoPlugin().androidInfo;
|
||||
final bool isAndroid33 =
|
||||
AppPlatform.isAndroid && AppPlatform.getSdkIntValue() >= 33;
|
||||
AppPlatform.isAndroid && androidInfo.version.sdkInt >= 33;
|
||||
|
||||
//通用的局部函数
|
||||
List<Permission> requestPermission() {
|
||||
@ -197,8 +199,9 @@ class PermissionDialog {
|
||||
if (Get.context == null) {
|
||||
return false;
|
||||
}
|
||||
final AndroidDeviceInfo androidInfo = await DeviceInfoPlugin().androidInfo;
|
||||
final bool isAndroid33 =
|
||||
AppPlatform.isAndroid && AppPlatform.getSdkIntValue() >= 33;
|
||||
AppPlatform.isAndroid && androidInfo.version.sdkInt >= 33;
|
||||
|
||||
//通用的局部函数
|
||||
List<Permission> requestPermission() {
|
||||
|
||||
@ -1045,6 +1045,14 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.4.13"
|
||||
jverify:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: jverify
|
||||
sha256: "26d1667d8c71403b77a2620a8c618625f8b4bfc950dac285b8f35ebc5e60fa5a"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.0.0"
|
||||
leak_tracker:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
||||
@ -253,6 +253,7 @@ dependencies:
|
||||
flutter_bugly: ^1.0.2
|
||||
open_filex: ^4.4.0
|
||||
|
||||
jverify: 3.0.0
|
||||
#<cn>
|
||||
umeng_common_sdk: 1.2.8
|
||||
#</cn>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user