Merge branch 'develop_liyi' into canary_release

This commit is contained in:
Liuyf 2025-03-25 09:14:43 +08:00
commit 2f6efb09d5
50 changed files with 438 additions and 213 deletions

View File

@ -1078,6 +1078,8 @@
"印度尼西亚语": "Bahasa Indonesia", "印度尼西亚语": "Bahasa Indonesia",
"芬兰语": "Suomi", "芬兰语": "Suomi",
"丹麦语": "Dansk", "丹麦语": "Dansk",
"印地语": "हिंदीName",
"乌尔都语": "اوردو",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "بعد إعادة الضبط ، سيتم حذف الأوردة المشطية للقفل. هل أنت متأكد أنك تريد إعادة الضبط ؟", "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "بعد إعادة الضبط ، سيتم حذف الأوردة المشطية للقفل. هل أنت متأكد أنك تريد إعادة الضبط ؟",
"在线": "الإنترنت", "在线": "الإنترنت",
"离线": "غير متصل", "离线": "غير متصل",

View File

@ -1078,6 +1078,8 @@
"印度尼西亚语": "Bahasa Indonesia", "印度尼西亚语": "Bahasa Indonesia",
"芬兰语": "Suomi", "芬兰语": "Suomi",
"丹麦语": "Dansk", "丹麦语": "Dansk",
"印地语": "हिंदीName",
"乌尔都语": "اوردو",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "След нулиране, метакарпалните вени на ключалката ще бъдат изтрити. Сигурен ли сте, че искате да се възстанови?", "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "След нулиране, метакарпалните вени на ключалката ще бъдат изтрити. Сигурен ли сте, че искате да се възстанови?",
"在线": "Онлайн", "在线": "Онлайн",
"离线": "Офлайн", "离线": "Офлайн",

View File

@ -1078,6 +1078,8 @@
"印度尼西亚语": "Bahasa Indonesia", "印度尼西亚语": "Bahasa Indonesia",
"芬兰语": "Suomi", "芬兰语": "Suomi",
"丹麦语": "Dansk", "丹麦语": "Dansk",
"印地语": "हिंदीName",
"乌尔都语": "اوردو",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "ব্যান্ডোটারআইসেট, হাসিপাল রিরিইনস্ফথেলকবইল্ডজেডড।?", "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "ব্যান্ডোটারআইসেট, হাসিপাল রিরিইনস্ফথেলকবইল্ডজেডড।?",
"在线": "কনলাইন", "在线": "কনলাইন",
"离线": "দেউন্টলাইনCity in Ontario Canada", "离线": "দেউন্টলাইনCity in Ontario Canada",

View File

@ -1078,6 +1078,8 @@
"印度尼西亚语": "Bahasa Indonesia", "印度尼西亚语": "Bahasa Indonesia",
"芬兰语": "Suomi", "芬兰语": "Suomi",
"丹麦语": "Dansk", "丹麦语": "Dansk",
"印地语": "हिंदीName",
"乌尔都语": "اوردو",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Po resetování budou metakarpální žíly zámku odstraněny. Jste si jistý, že chcete resetovat?", "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Po resetování budou metakarpální žíly zámku odstraněny. Jste si jistý, že chcete resetovat?",
"在线": "Online", "在线": "Online",
"离线": "Offline", "离线": "Offline",

View File

@ -1078,6 +1078,8 @@
"印度尼西亚语": "Bahasa Indonesia", "印度尼西亚语": "Bahasa Indonesia",
"芬兰语": "Suomi", "芬兰语": "Suomi",
"丹麦语": "Dansk", "丹麦语": "Dansk",
"印地语": "हिंदीName",
"乌尔都语": "اوردو",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Efter nulstilling, de metacarpal vener i låsen vil blive slettet. Er du sikker på at du vil nulstille?", "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Efter nulstilling, de metacarpal vener i låsen vil blive slettet. Er du sikker på at du vil nulstille?",
"在线": "OnlineComment", "在线": "OnlineComment",
"离线": "OfflineComment", "离线": "OfflineComment",

View File

@ -1078,6 +1078,8 @@
"印度尼西亚语": "Bahasa Indonesia", "印度尼西亚语": "Bahasa Indonesia",
"芬兰语": "Suomi", "芬兰语": "Suomi",
"丹麦语": "Dansk", "丹麦语": "Dansk",
"印地语": "हिंदीName",
"乌尔都语": "اوردو",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Nach dem Zurücksetzen werden die Mittelhand adern des Schlosses gelöscht. Sind Sie sicher, dass Sie zurücksetzen wollen?", "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Nach dem Zurücksetzen werden die Mittelhand adern des Schlosses gelöscht. Sind Sie sicher, dass Sie zurücksetzen wollen?",
"在线": "Online", "在线": "Online",
"离线": "Offline", "离线": "Offline",

View File

@ -1078,6 +1078,8 @@
"印度尼西亚语": "Bahasa Indonesia", "印度尼西亚语": "Bahasa Indonesia",
"芬兰语": "Suomi", "芬兰语": "Suomi",
"丹麦语": "Dansk", "丹麦语": "Dansk",
"印地语": "हिंदीName",
"乌尔都语": "اوردو",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Μετά την επαναφορά, οι μετακάρπιες φλέβες της κλειδαριάς θα διαγραφούν. Είστε σίγουροι ότι θέλετε να επαναφέρετε;", "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Μετά την επαναφορά, οι μετακάρπιες φλέβες της κλειδαριάς θα διαγραφούν. Είστε σίγουροι ότι θέλετε να επαναφέρετε;",
"在线": "Σε απευθείας σύνδεση", "在线": "Σε απευθείας σύνδεση",
"离线": "Εκτός σύνδεσης:", "离线": "Εκτός σύνδεσης:",

View File

@ -1080,6 +1080,8 @@
"印度尼西亚语": "Bahasa Indonesia", "印度尼西亚语": "Bahasa Indonesia",
"芬兰语": "Suomi", "芬兰语": "Suomi",
"丹麦语": "Dansk", "丹麦语": "Dansk",
"印地语": "हिंदीName",
"乌尔都语": "اوردو",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "After reset, the metacarpal veins of the lock will be deleted. Are you sure you want to reset?", "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "After reset, the metacarpal veins of the lock will be deleted. Are you sure you want to reset?",
"在线": "Online", "在线": "Online",
"离线": "Offline", "离线": "Offline",
@ -1148,5 +1150,6 @@
"暂无最新记录": "There are currently no latest records available", "暂无最新记录": "There are currently no latest records available",
"请将手机切换至2.4G WiFi进行手动连接": "Please switch your phone to 2.4G WiFi for manual connection", "请将手机切换至2.4G WiFi进行手动连接": "Please switch your phone to 2.4G WiFi for manual connection",
"请确保网络是2.4GHz Wi-Fi": "Please ensure that the network is 2.4GHz Wi Fi", "请确保网络是2.4GHz Wi-Fi": "Please ensure that the network is 2.4GHz Wi Fi",
"是否要远程开锁": "Do you want to unlock remotely",
"网关添加成功": "Gateway added successfully" "网关添加成功": "Gateway added successfully"
} }

View File

@ -1078,6 +1078,8 @@
"印度尼西亚语": "Bahasa Indonesia", "印度尼西亚语": "Bahasa Indonesia",
"芬兰语": "Suomi", "芬兰语": "Suomi",
"丹麦语": "Dansk", "丹麦语": "Dansk",
"印地语": "हिंदीName",
"乌尔都语": "اوردو",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Después del reinicio, se eliminarán las venas metacarpiales de la cerradura. ¿Está seguro de que desea restablecer?", "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Después del reinicio, se eliminarán las venas metacarpiales de la cerradura. ¿Está seguro de que desea restablecer?",
"在线": "En línea", "在线": "En línea",
"离线": "Offline", "离线": "Offline",

View File

@ -1078,6 +1078,8 @@
"印度尼西亚语": "Bahasa Indonesia", "印度尼西亚语": "Bahasa Indonesia",
"芬兰语": "Suomi", "芬兰语": "Suomi",
"丹麦语": "Dansk", "丹麦语": "Dansk",
"印地语": "हिंदीName",
"乌尔都语": "اوردو",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Pärast lähtestamist kustutatakse luku metakarpaalveenid. Kas tõesti soovid lähtestada?", "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Pärast lähtestamist kustutatakse luku metakarpaalveenid. Kas tõesti soovid lähtestada?",
"在线": "Võrgus", "在线": "Võrgus",
"离线": "Mitte ühendust", "离线": "Mitte ühendust",

View File

@ -1078,6 +1078,8 @@
"印度尼西亚语": "Bahasa Indonesia", "印度尼西亚语": "Bahasa Indonesia",
"芬兰语": "Suomi", "芬兰语": "Suomi",
"丹麦语": "Dansk", "丹麦语": "Dansk",
"印地语": "हिंदीName",
"乌尔都语": "اوردو",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Kun lukko on nollattu, metakarppinen suoneet poistetaan. Haluatko varmasti palauttaa?", "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Kun lukko on nollattu, metakarppinen suoneet poistetaan. Haluatko varmasti palauttaa?",
"在线": "Verkossa", "在线": "Verkossa",
"离线": "Offline-verkosto", "离线": "Offline-verkosto",

View File

@ -1078,6 +1078,8 @@
"印度尼西亚语": "Bahasa Indonesia", "印度尼西亚语": "Bahasa Indonesia",
"芬兰语": "Suomi", "芬兰语": "Suomi",
"丹麦语": "Dansk", "丹麦语": "Dansk",
"印地语": "हिंदीName",
"乌尔都语": "اوردو",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Après réinitialisation, les veines métacarpiennes de la serrure seront supprimées. Êtes-vous sûr de vouloir réinitialiser?", "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Après réinitialisation, les veines métacarpiennes de la serrure seront supprimées. Êtes-vous sûr de vouloir réinitialiser?",
"在线": "En ligne", "在线": "En ligne",
"离线": "Hors ligne", "离线": "Hors ligne",

View File

@ -1078,6 +1078,8 @@
"印度尼西亚语": "Bahasa Indonesia", "印度尼西亚语": "Bahasa Indonesia",
"芬兰语": "Suomi", "芬兰语": "Suomi",
"丹麦语": "Dansk", "丹麦语": "Dansk",
"印地语": "हिंदीName",
"乌尔都语": "اوردو",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "לאחר איפוס, הורידים של המנעול יימחקו. אתה בטוח שברצונך לאפס?", "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "לאחר איפוס, הורידים של המנעול יימחקו. אתה בטוח שברצונך לאפס?",
"在线": "באינטרנט", "在线": "באינטרנט",
"离线": "מנותק", "离线": "מנותק",

View File

@ -1080,6 +1080,8 @@
"印度尼西亚语": "बाहसा इंडोनेशिया", "印度尼西亚语": "बाहसा इंडोनेशिया",
"芬兰语": "सूमी", "芬兰语": "सूमी",
"丹麦语": "मूर्ख व्यक्ति", "丹麦语": "मूर्ख व्यक्ति",
"印地语": "हिंदीName",
"乌尔都语": "اوردو",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "रीसेट के बाद, लॉक के मेटाकार्पल नसों को हटा दिया जाएगा। क्या आप निश्चित रूप से रीसेट करना चाहते हैं?", "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "रीसेट के बाद, लॉक के मेटाकार्पल नसों को हटा दिया जाएगा। क्या आप निश्चित रूप से रीसेट करना चाहते हैं?",
"在线": "ऑनलाइन", "在线": "ऑनलाइन",
"离线": "ऑफ़लाइन", "离线": "ऑफ़लाइन",

View File

@ -1078,6 +1078,8 @@
"印度尼西亚语": "Bahasa Indonesia", "印度尼西亚语": "Bahasa Indonesia",
"芬兰语": "索米", "芬兰语": "索米",
"丹麦语": "丹斯克", "丹麦语": "丹斯克",
"印地语": "हिंदीName",
"乌尔都语": "اوردو",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "重置後,鎖的掌靜脈將被刪除。 你確定要重置啊?", "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "重置後,鎖的掌靜脈將被刪除。 你確定要重置啊?",
"在线": "在線", "在线": "在線",
"离线": "離線", "离线": "離線",

View File

@ -1078,6 +1078,8 @@
"印度尼西亚语": "Bahasa Indonesia", "印度尼西亚语": "Bahasa Indonesia",
"芬兰语": "Suomi", "芬兰语": "Suomi",
"丹麦语": "Dansk", "丹麦语": "Dansk",
"印地语": "हिंदीName",
"乌尔都语": "اوردو",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Nakon resetiranja, metakarpalne vene brave će biti izbrisane. Jeste li sigurni da želite resetiranje?", "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Nakon resetiranja, metakarpalne vene brave će biti izbrisane. Jeste li sigurni da želite resetiranje?",
"在线": "Na internetu", "在线": "Na internetu",
"离线": "Odspojeno", "离线": "Odspojeno",

View File

@ -1078,6 +1078,8 @@
"印度尼西亚语": "Bahasa Indonesia", "印度尼西亚语": "Bahasa Indonesia",
"芬兰语": "Suomi", "芬兰语": "Suomi",
"丹麦语": "Dansk", "丹麦语": "Dansk",
"印地语": "हिंदीName",
"乌尔都语": "اوردو",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "A reset után a zár metakarpális erei törlődnek. Biztos vagy benne, hogy vissza akarsz állítani?", "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "A reset után a zár metakarpális erei törlődnek. Biztos vagy benne, hogy vissza akarsz állítani?",
"在线": "Online", "在线": "Online",
"离线": "Offline", "离线": "Offline",

View File

@ -1078,6 +1078,8 @@
"印度尼西亚语": "Bahasa Indonesia", "印度尼西亚语": "Bahasa Indonesia",
"芬兰语": "Suomi", "芬兰语": "Suomi",
"丹麦语": "Dansk", "丹麦语": "Dansk",
"印地语": "हिंदीName",
"乌尔都语": "اوردو",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Setelah mengulang, pembuluh darah metakarpal dari kunci akan dihapus. Yakin ingin mengatur ulang?", "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Setelah mengulang, pembuluh darah metakarpal dari kunci akan dihapus. Yakin ingin mengatur ulang?",
"在线": "Online", "在线": "Online",
"离线": "Offline", "离线": "Offline",

View File

@ -1078,6 +1078,8 @@
"印度尼西亚语": "Bahasa Indonesia", "印度尼西亚语": "Bahasa Indonesia",
"芬兰语": "Suomi", "芬兰语": "Suomi",
"丹麦语": "Dansk", "丹麦语": "Dansk",
"印地语": "हिंदीName",
"乌尔都语": "اوردو",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Dopo il reset, le vene metacarpali della serratura verranno cancellate. Sei sicuro di voler reimpostare?", "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Dopo il reset, le vene metacarpali della serratura verranno cancellate. Sei sicuro di voler reimpostare?",
"在线": "Online", "在线": "Online",
"离线": "Offline", "离线": "Offline",

View File

@ -1078,6 +1078,8 @@
"印度尼西亚语": "Bahasa Indonesia", "印度尼西亚语": "Bahasa Indonesia",
"芬兰语": "Suomi", "芬兰语": "Suomi",
"丹麦语": "Dansk", "丹麦语": "Dansk",
"印地语": "हिंदीName",
"乌尔都语": "اوردو",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "リセット後、ロックの中手骨静脈が削除されます。リセットしてもよろしいですか。", "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "リセット後、ロックの中手骨静脈が削除されます。リセットしてもよろしいですか。",
"在线": "オンライン", "在线": "オンライン",
"离线": "オフライン", "离线": "オフライン",

View File

@ -1081,6 +1081,8 @@
"印度尼西亚语": "印度尼西亚语", "印度尼西亚语": "印度尼西亚语",
"芬兰语": "芬兰语", "芬兰语": "芬兰语",
"丹麦语": "丹麦语", "丹麦语": "丹麦语",
"印地语": "印地语",
"乌尔都语": "乌尔都语",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?", "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?",
"在线": "在线", "在线": "在线",
"离线": "离线", "离线": "离线",
@ -1153,5 +1155,6 @@
"请扫描可视门铃码二维码": "请扫描可视门铃码二维码", "请扫描可视门铃码二维码": "请扫描可视门铃码二维码",
"请确保网络是2.4GHz Wi-Fi": "请确保网络是2.4GHz Wi-Fi", "请确保网络是2.4GHz Wi-Fi": "请确保网络是2.4GHz Wi-Fi",
"已选": "已选", "已选": "已选",
"是否要远程开锁": "是否要远程开锁",
"网关添加成功": "网关添加成功" "网关添加成功": "网关添加成功"
} }

View File

@ -1078,6 +1078,8 @@
"印度尼西亚语": "Bahasa Indonesia", "印度尼西亚语": "Bahasa Indonesia",
"芬兰语": "Suomi", "芬兰语": "Suomi",
"丹麦语": "Dansk", "丹麦语": "Dansk",
"印地语": "हिंदीName",
"乌尔都语": "اوردو",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Қайта ысырып тастағаннан соң бұғаттағы метакарпалар өшіріледі. Шынымен ысырып тастауды қалайсыз ба?", "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Қайта ысырып тастағаннан соң бұғаттағы метакарпалар өшіріледі. Шынымен ысырып тастауды қалайсыз ба?",
"在线": "Онлайн", "在线": "Онлайн",
"离线": "Желіде емес", "离线": "Желіде емес",

View File

@ -1078,6 +1078,8 @@
"印度尼西亚语": "Bahasa Indonesia", "印度尼西亚语": "Bahasa Indonesia",
"芬兰语": "Suomi", "芬兰语": "Suomi",
"丹麦语": "Dansk", "丹麦语": "Dansk",
"印地语": "हिंदीName",
"乌尔都语": "اوردو",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "재설정 후 잠금 장치의 중수골 정맥이 삭제됩니다. 당신은 당신이 재설정 하시겠습니까?", "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "재설정 후 잠금 장치의 중수골 정맥이 삭제됩니다. 당신은 당신이 재설정 하시겠습니까?",
"在线": "온라인", "在线": "온라인",
"离线": "오프라인", "离线": "오프라인",

View File

@ -1078,6 +1078,8 @@
"印度尼西亚语": "Bahasa Indonesia", "印度尼西亚语": "Bahasa Indonesia",
"芬兰语": "Suomi", "芬兰语": "Suomi",
"丹麦语": "Dansk", "丹麦语": "Dansk",
"印地语": "हिंदीName",
"乌尔都语": "اوردو",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Po reset užrakto metakarpinės venos bus ištrintos. Ar tikrai norite atstatyti?", "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Po reset užrakto metakarpinės venos bus ištrintos. Ar tikrai norite atstatyti?",
"在线": "Online", "在线": "Online",
"离线": "Neprisijungęs", "离线": "Neprisijungęs",

View File

@ -1078,6 +1078,8 @@
"印度尼西亚语": "Bahasa Indonesia", "印度尼西亚语": "Bahasa Indonesia",
"芬兰语": "Suomi", "芬兰语": "Suomi",
"丹麦语": "Dansk", "丹麦语": "Dansk",
"印地语": "हिंदीName",
"乌尔都语": "اوردو",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Selepas menetapkan semula, urat metacarpal kunci akan dipadamkan. Adakah anda pasti anda mahu menetapkan semula?", "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Selepas menetapkan semula, urat metacarpal kunci akan dipadamkan. Adakah anda pasti anda mahu menetapkan semula?",
"在线": "Dalam talian", "在线": "Dalam talian",
"离线": "Luar talian", "离线": "Luar talian",

View File

@ -1078,6 +1078,8 @@
"印度尼西亚语": "Bahasa Indonesia", "印度尼西亚语": "Bahasa Indonesia",
"芬兰语": "Suomi", "芬兰语": "Suomi",
"丹麦语": "Dansk", "丹麦语": "Dansk",
"印地语": "हिंदीName",
"乌尔都语": "اوردو",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Na reset worden de middenhandsbeenaders van het slot verwijderd. Weet je zeker dat je wilt resetten?", "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Na reset worden de middenhandsbeenaders van het slot verwijderd. Weet je zeker dat je wilt resetten?",
"在线": "Online", "在线": "Online",
"离线": "Offline", "离线": "Offline",

View File

@ -1078,6 +1078,8 @@
"印度尼西亚语": "Bahasa Indonesia", "印度尼西亚语": "Bahasa Indonesia",
"芬兰语": "Suomi", "芬兰语": "Suomi",
"丹麦语": "Dansk", "丹麦语": "Dansk",
"印地语": "हिंदीName",
"乌尔都语": "اوردو",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Po zresetowaniu żyły śródręcza zamka zostaną usunięte. Czy na pewno chcesz zresetować?", "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Po zresetowaniu żyły śródręcza zamka zostaną usunięte. Czy na pewno chcesz zresetować?",
"在线": "Online", "在线": "Online",
"离线": "Offline", "离线": "Offline",

View File

@ -1078,6 +1078,8 @@
"印度尼西亚语": "Bahasa Indonesia", "印度尼西亚语": "Bahasa Indonesia",
"芬兰语": "Suomi", "芬兰语": "Suomi",
"丹麦语": "Dansk", "丹麦语": "Dansk",
"印地语": "हिंदीName",
"乌尔都语": "اوردو",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Após a reinicialização, as veias do metacarpo do bloqueio serão excluídas. Tens a certeza que queres reiniciar?", "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Após a reinicialização, as veias do metacarpo do bloqueio serão excluídas. Tens a certeza que queres reiniciar?",
"在线": "Online", "在线": "Online",
"离线": "Offline", "离线": "Offline",

View File

@ -1078,6 +1078,8 @@
"印度尼西亚语": "Bahasa Indonesia", "印度尼西亚语": "Bahasa Indonesia",
"芬兰语": "Suomi", "芬兰语": "Suomi",
"丹麦语": "Dansk", "丹麦语": "Dansk",
"印地语": "हिंदीName",
"乌尔都语": "اوردو",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "După resetare, venele metacarpale ale încuietorii vor fi şterse. Sigur doriți să resetați?", "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "După resetare, venele metacarpale ale încuietorii vor fi şterse. Sigur doriți să resetați?",
"在线": "Online", "在线": "Online",
"离线": "Deconectat", "离线": "Deconectat",

View File

@ -1078,6 +1078,8 @@
"印度尼西亚语": "Bahasa Indonesia", "印度尼西亚语": "Bahasa Indonesia",
"芬兰语": "Suomi", "芬兰语": "Suomi",
"丹麦语": "Dansk", "丹麦语": "Dansk",
"印地语": "हिंदीName",
"乌尔都语": "اوردو",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "После сброса пястные вены замка будут удалены. Вы уверены, что хотите сбросить?", "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "После сброса пястные вены замка будут удалены. Вы уверены, что хотите сбросить?",
"在线": "Онлайн", "在线": "Онлайн",
"离线": "Оффлайн", "离线": "Оффлайн",
@ -1150,5 +1152,6 @@
"请扫描可视门铃码二维码": "Сканируйте код вызова", "请扫描可视门铃码二维码": "Сканируйте код вызова",
"请确保网络是2.4GHz Wi-Fi": "Убедитесь, что сеть имеет 2,4 ГГц Wi - Fi", "请确保网络是2.4GHz Wi-Fi": "Убедитесь, что сеть имеет 2,4 ГГц Wi - Fi",
"已选": "Выбранные", "已选": "Выбранные",
"是否要远程开锁": "Нужно ли удалённо открывать замок",
"请将手机切换至2.4G WiFi进行手动连接": "Пожалуйста, переключите телефон на 2.4G WiFi для ручного подключения" "请将手机切换至2.4G WiFi进行手动连接": "Пожалуйста, переключите телефон на 2.4G WiFi для ручного подключения"
} }

View File

@ -1078,6 +1078,8 @@
"印度尼西亚语": "Bahasa Indonesia", "印度尼西亚语": "Bahasa Indonesia",
"芬兰语": "Suomi", "芬兰语": "Suomi",
"丹麦语": "Dansk", "丹麦语": "Dansk",
"印地语": "हिंदीName",
"乌尔都语": "اوردو",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Po resetovaní budú metakarpálne žily zámku vymazané. Ste si istí, že chcete obnoviť?", "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Po resetovaní budú metakarpálne žily zámku vymazané. Ste si istí, že chcete obnoviť?",
"在线": "Online", "在线": "Online",
"离线": "Offline", "离线": "Offline",

View File

@ -1078,6 +1078,8 @@
"印度尼西亚语": "Bahasa Indonesia", "印度尼西亚语": "Bahasa Indonesia",
"芬兰语": "Suomi", "芬兰语": "Suomi",
"丹麦语": "Dansk", "丹麦语": "Dansk",
"印地语": "हिंदीName",
"乌尔都语": "اوردو",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Након ресетовања, метакарпалне вене браве ће бити избрисане. Да ли сте сигурни да желите да ресетујете?", "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Након ресетовања, метакарпалне вене браве ће бити избрисане. Да ли сте сигурни да желите да ресетујете?",
"在线": "Онлине", "在线": "Онлине",
"离线": "Ванмрежне", "离线": "Ванмрежне",

View File

@ -1078,6 +1078,8 @@
"印度尼西亚语": "Bahasa Indonesia", "印度尼西亚语": "Bahasa Indonesia",
"芬兰语": "Suomi", "芬兰语": "Suomi",
"丹麦语": "Dansk", "丹麦语": "Dansk",
"印地语": "हिंदीName",
"乌尔都语": "اوردو",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Efter återställd, de metakarpal venerna i låset tas bort. Är du säker på att du vill återställa?", "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Efter återställd, de metakarpal venerna i låset tas bort. Är du säker på att du vill återställa?",
"在线": "Online:", "在线": "Online:",
"离线": "Frånkoppling", "离线": "Frånkoppling",

View File

@ -1078,6 +1078,8 @@
"印度尼西亚语": "Bahasa Indonesia", "印度尼西亚语": "Bahasa Indonesia",
"芬兰语": "Suomi", "芬兰语": "Suomi",
"丹麦语": "Dansk", "丹麦语": "Dansk",
"印地语": "हिंदीName",
"乌尔都语": "اوردو",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "หลังจากรีเซ็ตแล้วหลอดเลือดดำ metacarpal ของล็อคจะถูกลบออกคุณแน่ใจว่าอยากจะรีเซ็ต?", "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "หลังจากรีเซ็ตแล้วหลอดเลือดดำ metacarpal ของล็อคจะถูกลบออกคุณแน่ใจว่าอยากจะรีเซ็ต?",
"在线": "ออนไลน์ผ่าน", "在线": "ออนไลน์ผ่าน",
"离线": "ออฟไลน์", "离线": "ออฟไลน์",

View File

@ -1078,6 +1078,8 @@
"印度尼西亚语": "Bahasa Indonesia", "印度尼西亚语": "Bahasa Indonesia",
"芬兰语": "Suomi", "芬兰语": "Suomi",
"丹麦语": "Dansk", "丹麦语": "Dansk",
"印地语": "हिंदीName",
"乌尔都语": "اوردو",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Sıfırlamadan sonra, kilidin metacarpal damarları silinecektir. Sıfırlamak istediğine emin misin?", "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Sıfırlamadan sonra, kilidin metacarpal damarları silinecektir. Sıfırlamak istediğine emin misin?",
"在线": "Çevrimiçi", "在线": "Çevrimiçi",
"离线": "Çevrimdışı", "离线": "Çevrimdışı",

View File

@ -1078,6 +1078,8 @@
"印度尼西亚语": "Bahasa Indonesia", "印度尼西亚语": "Bahasa Indonesia",
"芬兰语": "Suomi", "芬兰语": "Suomi",
"丹麦语": "Dansk", "丹麦语": "Dansk",
"印地语": "हिंदीName",
"乌尔都语": "اوردو",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "重置後,鎖的掌靜脈將被刪除。 是否確實要重置?", "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "重置後,鎖的掌靜脈將被刪除。 是否確實要重置?",
"在线": "在線", "在线": "在線",
"离线": "離線", "离线": "離線",

View File

@ -1078,6 +1078,8 @@
"印度尼西亚语": "Bahasa Indonesia", "印度尼西亚语": "Bahasa Indonesia",
"芬兰语": "Suomi", "芬兰语": "Suomi",
"丹麦语": "Dansk", "丹麦语": "Dansk",
"印地语": "हिंदीName",
"乌尔都语": "اوردو",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Після скидання п'ясткові вени замку будуть видалені. Ви впевнені, що хочете скинути налаштування?", "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Після скидання п'ясткові вени замку будуть видалені. Ви впевнені, що хочете скинути налаштування?",
"在线": "Онлайн", "在线": "Онлайн",
"离线": "Автономних", "离线": "Автономних",

View File

@ -1080,6 +1080,8 @@
"印度尼西亚语": "Bahasa Indonesia", "印度尼西亚语": "Bahasa Indonesia",
"芬兰语": "Suomi", "芬兰语": "Suomi",
"丹麦语": "Dansk", "丹麦语": "Dansk",
"印地语": "हिंदीName",
"乌尔都语": "اوردو",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "ری سیٹ کرنے کے بعد ، لاک کی میٹاکارپل رگیں حذف کردی جائیں گی۔ کیا آپ واقعی دوبارہ ترتیب دینا چاہتے ہیں؟", "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "ری سیٹ کرنے کے بعد ، لاک کی میٹاکارپل رگیں حذف کردی جائیں گی۔ کیا آپ واقعی دوبارہ ترتیب دینا چاہتے ہیں؟",
"在线": "آن لائن", "在线": "آن لائن",
"离线": "آف لائن", "离线": "آف لائن",

View File

@ -1078,6 +1078,8 @@
"印度尼西亚语": "Bahasa Indonesia", "印度尼西亚语": "Bahasa Indonesia",
"芬兰语": "Suomi", "芬兰语": "Suomi",
"丹麦语": "Dansk", "丹麦语": "Dansk",
"印地语": "हिंदीName",
"乌尔都语": "اوردو",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Sau khi đặt lại, các tĩnh mạch metacarpal của khóa sẽ bị xóa. Bạn có chắc muốn thiết lập lại không?", "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Sau khi đặt lại, các tĩnh mạch metacarpal của khóa sẽ bị xóa. Bạn có chắc muốn thiết lập lại không?",
"在线": "Trực tuyến", "在线": "Trực tuyến",
"离线": "Ngoại tuyến", "离线": "Ngoại tuyến",

View File

@ -1081,6 +1081,8 @@
"印度尼西亚语": "Bahasa Indonesia", "印度尼西亚语": "Bahasa Indonesia",
"芬兰语": "Suomi", "芬兰语": "Suomi",
"丹麦语": "Dansk", "丹麦语": "Dansk",
"印地语": "हिंदीName",
"乌尔都语": "اوردو",
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?", "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?",
"在线": "在线", "在线": "在线",
"离线": "离线", "离线": "离线",
@ -1153,5 +1155,6 @@
"请扫描可视门铃码二维码": "请扫描可视门铃码二维码", "请扫描可视门铃码二维码": "请扫描可视门铃码二维码",
"请确保网络是2.4GHz Wi-Fi": "请确保网络是2.4GHz Wi-Fi", "请确保网络是2.4GHz Wi-Fi": "请确保网络是2.4GHz Wi-Fi",
"已选": "已选", "已选": "已选",
"是否要远程开锁": "是否要远程开锁",
"网关添加成功": "网关添加成功" "网关添加成功": "网关添加成功"
} }

View File

@ -1,4 +1,3 @@
import 'dart:async'; import 'dart:async';
import 'package:flutter_blue_plus/flutter_blue_plus.dart'; import 'package:flutter_blue_plus/flutter_blue_plus.dart';
@ -26,20 +25,23 @@ class AddFingerprintLogic extends BaseGetXController {
// //
late StreamSubscription<Reply> _replySubscription; late StreamSubscription<Reply> _replySubscription;
void _initReplySubscription() { void _initReplySubscription() {
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((Reply reply) async { _replySubscription =
EventBusManager().eventBus!.on<Reply>().listen((Reply reply) async {
// //
if((reply is SenderAddFingerprintWithTimeCycleCoercionReply) && (state.ifCurrentScreen.value == true)) { if ((reply is SenderAddFingerprintWithTimeCycleCoercionReply) &&
(state.ifCurrentScreen.value == true)) {
_replyAddFingerprintBegin(reply); _replyAddFingerprintBegin(reply);
} }
// //
if(reply is SenderAddFingerprintProcessReply) { if (reply is SenderAddFingerprintProcessReply) {
_replyAddFingerprintProcess(reply); _replyAddFingerprintProcess(reply);
} }
// //
if(reply is SenderAddFingerprintConfirmationReply) { if (reply is SenderAddFingerprintConfirmationReply) {
_replyAddFingerprintConfirmation(reply); _replyAddFingerprintConfirmation(reply);
} }
}); });
@ -49,11 +51,10 @@ class AddFingerprintLogic extends BaseGetXController {
BuglyTool.uploadException( BuglyTool.uploadException(
message: '添加指纹开始,解析数据', message: '添加指纹开始,解析数据',
detail: '添加指纹开始,解析数据 _replyAddFingerprintBegin:${reply.data}', detail: '添加指纹开始,解析数据 _replyAddFingerprintBegin:${reply.data}',
upload: false upload: false);
);
final int status = reply.data[2]; final int status = reply.data[2];
switch(status){ switch (status) {
case 0x00: case 0x00:
// //
state.ifConnectScuess.value = true; state.ifConnectScuess.value = true;
@ -67,10 +68,13 @@ class AddFingerprintLogic extends BaseGetXController {
break; break;
case 0x06: case 0x06:
// //
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey); final List<String>? privateKey =
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!); await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList =
changeStringListToIntList(privateKey!);
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey); final List<String>? signKey =
await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!); final List<int> signKeyDataList = changeStringListToIntList(signKey!);
final List<int> token = reply.data.sublist(5, 9); final List<int> token = reply.data.sublist(5, 9);
@ -78,30 +82,33 @@ class AddFingerprintLogic extends BaseGetXController {
Storage.setStringList(saveBlueToken, saveStrList); Storage.setStringList(saveBlueToken, saveStrList);
IoSenderManage.senderAddFingerprintWithTimeCycleCoercionCommand( IoSenderManage.senderAddFingerprintWithTimeCycleCoercionCommand(
keyID:'1', keyID: '1',
userID:await Storage.getUid(), userID: await Storage.getUid(),
fingerNo:0, fingerNo: 0,
useCountLimit:0xffff, useCountLimit: 0xffff,
isForce:state.isCoerced.value == '1' ? 1 : 0, // isForce: state.isCoerced.value == '1' ? 1 : 0,
isAdmin: state.isAdministrator.value == '2' ? 1 : 0, //
operate: 0, isAdmin: state.isAdministrator.value == '2' ? 1 : 0,
isRound:state.selectType.value == '2' ? 1: 0, // operate: 0,
weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), // isRound: state.selectType.value == '2' ? 1 : 0,
startDate: int.parse(state.startDate.value)~/1000, //
endDate: int.parse(state.endDate.value)~/1000, weekRound: DateTool().accordingTheCycleIntoTheCorrespondingNumber(
startTime:DateTool().dateToHNString(state.effectiveDateTime.value), state.weekDay.value),
endTime:DateTool().dateToHNString(state.failureDateTime.value), //
needAuthor:1, startDate: int.parse(state.startDate.value) ~/ 1000,
signKey:signKeyDataList, endDate: int.parse(state.endDate.value) ~/ 1000,
privateKey:getPrivateKeyList, startTime: DateTool().dateToHNString(state.effectiveDateTime.value),
token: token, endTime: DateTool().dateToHNString(state.failureDateTime.value),
isBeforeAddUser: false needAuthor: 1,
); signKey: signKeyDataList,
privateKey: getPrivateKeyList,
token: token,
isBeforeAddUser: false);
break; break;
default: default:
// //
state.ifAddState.value = false; state.ifAddState.value = false;
showToast('添加指纹失败'.tr, something: (){ showToast('添加指纹失败'.tr, something: () {
Get.back(); Get.back();
}); });
break; break;
@ -112,13 +119,12 @@ class AddFingerprintLogic extends BaseGetXController {
BuglyTool.uploadException( BuglyTool.uploadException(
message: '添加指纹过程,解析数据', message: '添加指纹过程,解析数据',
detail: '添加指纹过程,解析数据 _replyAddFingerprintProcess:${reply.data}', detail: '添加指纹过程,解析数据 _replyAddFingerprintProcess:${reply.data}',
upload: false upload: false);
);
final int status = reply.data[2]; final int status = reply.data[2];
switch(status){ switch (status) {
case 0x00: case 0x00:
// //
switch(reply.data[5]){ switch (reply.data[5]) {
case 0xff: case 0xff:
// //
showToast('退出添加'.tr); showToast('退出添加'.tr);
@ -166,35 +172,37 @@ class AddFingerprintLogic extends BaseGetXController {
Future<void> _replyAddFingerprintConfirmation(Reply reply) async { Future<void> _replyAddFingerprintConfirmation(Reply reply) async {
final int status = reply.data[2]; final int status = reply.data[2];
final String getMobile = (await Storage.getMobile())!; final String getMobile = (await Storage.getMobile())!;
switch(status){ switch (status) {
case 0x00: case 0x00:
// //
// var fingerprintNum = listChangInt(reply.data.sublist(9, 11)).toString(); // var fingerprintNum = listChangInt(reply.data.sublist(9, 11)).toString();
ApmHelper.instance.trackEvent('add_fingerprint', { ApmHelper.instance.trackEvent('add_fingerprint', {
'lock_name':BlueManage().connectDeviceName, 'lock_name': BlueManage().connectDeviceName,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!, 'account':
'date':DateTool().getNowDateWithType(1), getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'add_fingerprint_result':'成功', 'date': DateTool().getNowDateWithType(1),
'add_fingerprint_result': '成功',
}); });
BuglyTool.uploadException( BuglyTool.uploadException(
message: '添加指纹确认结果,解析数据', message: '添加指纹确认结果,解析数据',
detail: '添加指纹确认结果,解析数据 _replyAddFingerprintConfirmation:${reply.data}', detail:
upload: false '添加指纹确认结果,解析数据 _replyAddFingerprintConfirmation:${reply.data}',
); upload: false);
final List<int> fingerprintList = reply.data.sublist(reply.data.length - 2); final List<int> fingerprintList =
reply.data.sublist(reply.data.length - 2);
final String fingerprintNum = listChangInt(fingerprintList).toString(); final String fingerprintNum = listChangInt(fingerprintList).toString();
state.regIndex.value++; state.regIndex.value++;
if(state.fingerprintNumber.value == fingerprintNum){ if (state.fingerprintNumber.value == fingerprintNum) {
return; return;
}else{ } else {
state.fingerprintNumber.value = fingerprintNum; state.fingerprintNumber.value = fingerprintNum;
} }
// if(state.isCoerced.value == "1"){ // if(state.isCoerced.value == "1"){
// //
state.ifAddState.value = false; state.ifAddState.value = false;
addFingerprintsData(); await addFingerprintsData();
// }else{ // }else{
// // // //
// senderAddStressFingerprint(); // senderAddStressFingerprint();
@ -203,18 +211,19 @@ class AddFingerprintLogic extends BaseGetXController {
default: default:
// //
ApmHelper.instance.trackEvent('add_fingerprint', { ApmHelper.instance.trackEvent('add_fingerprint', {
'lock_name':BlueManage().connectDeviceName, 'lock_name': BlueManage().connectDeviceName,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!, 'account':
'date':DateTool().getNowDateWithType(1), getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'add_fingerprint_result':'失败-${reply.data}', 'date': DateTool().getNowDateWithType(1),
'add_fingerprint_result': '失败-${reply.data}',
}); });
BuglyTool.uploadException( BuglyTool.uploadException(
message: '添加指纹确认结果,解析数据', message: '添加指纹确认结果,解析数据',
detail: '添加指纹确认结果蓝牙返回失败结果,解析数据 _replyAddFingerprintConfirmation:${reply.data}', detail:
'添加指纹确认结果蓝牙返回失败结果,解析数据 _replyAddFingerprintConfirmation:${reply.data}',
eventStr: '添加指纹事件蓝牙返回失败结果', eventStr: '添加指纹事件蓝牙返回失败结果',
upload: true upload: true);
);
state.ifAddState.value = false; state.ifAddState.value = false;
break; break;
} }
@ -222,7 +231,8 @@ class AddFingerprintLogic extends BaseGetXController {
// //
Future<void> senderAddFingerprint() async { Future<void> senderAddFingerprint() async {
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey); final List<String>? privateKey =
await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!); final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey); final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
@ -232,90 +242,104 @@ class AddFingerprintLogic extends BaseGetXController {
final List<int> getTokenList = changeStringListToIntList(token!); final List<int> getTokenList = changeStringListToIntList(token!);
final String command = SenderAddFingerprintWithTimeCycleCoercionCommand( final String command = SenderAddFingerprintWithTimeCycleCoercionCommand(
keyID:'1', keyID: '1',
userID:await Storage.getUid(), userID: await Storage.getUid(),
fingerNo:0, fingerNo: 0,
useCountLimit:0xffff, useCountLimit: 0xffff,
isForce:state.isCoerced.value == '1' ? 1 : 0, // isForce: state.isCoerced.value == '1' ? 1 : 0,
//
isAdmin: state.isAdministrator.value == '2' ? 1 : 0, isAdmin: state.isAdministrator.value == '2' ? 1 : 0,
operate: 0, operate: 0,
isRound:state.selectType.value == '2' ? 1: 0, // isRound: state.selectType.value == '2' ? 1 : 0,
weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), // //
startDate: int.parse(state.startDate.value)~/1000, weekRound: DateTool()
endDate: int.parse(state.endDate.value)~/1000, .accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value),
startTime:DateTool().dateToHNString(state.effectiveDateTime.value), //
endTime:DateTool().dateToHNString(state.failureDateTime.value), startDate: int.parse(state.startDate.value) ~/ 1000,
needAuthor:1, endDate: int.parse(state.endDate.value) ~/ 1000,
signKey:signKeyDataList, startTime: DateTool().dateToHNString(state.effectiveDateTime.value),
privateKey:getPrivateKeyList, endTime: DateTool().dateToHNString(state.failureDateTime.value),
needAuthor: 1,
signKey: signKeyDataList,
privateKey: getPrivateKeyList,
token: getTokenList, token: getTokenList,
).toString(); ).toString();
showBlueConnetctToastTimer(action: () async { showBlueConnetctToastTimer(action: () async {
final String getMobile = (await Storage.getMobile())!; final String getMobile = (await Storage.getMobile())!;
ApmHelper.instance.trackEvent('add_fingerprint', { ApmHelper.instance.trackEvent('add_fingerprint', {
'lock_name':BlueManage().connectDeviceName, 'lock_name': BlueManage().connectDeviceName,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!, 'account':
'date':DateTool().getNowDateWithType(1), getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'add_fingerprint_result':'超时', 'date': DateTool().getNowDateWithType(1),
'add_fingerprint_result': '超时',
}); });
BuglyTool.uploadException( BuglyTool.uploadException(
message: '添加指纹超时处理-添加指纹失败', message: '添加指纹超时处理-添加指纹失败',
detail: '添加指纹超时处理,断开连接,添加指纹失败--SenderAddFingerprintWithTimeCycleCoercionCommand:$command', detail:
'添加指纹超时处理,断开连接,添加指纹失败--SenderAddFingerprintWithTimeCycleCoercionCommand:$command',
eventStr: '添加指纹事件超时', eventStr: '添加指纹事件超时',
upload: true upload: true);
);
Get.close(1); Get.close(1);
}); });
BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async { BlueManage().blueSendData(BlueManage().connectDeviceName,
if (deviceConnectionState == BluetoothConnectionState.connected){ (BluetoothConnectionState deviceConnectionState) async {
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey); if (deviceConnectionState == BluetoothConnectionState.connected) {
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!); final List<String>? privateKey =
await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList =
changeStringListToIntList(privateKey!);
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey); final List<String>? signKey =
await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!); final List<int> signKeyDataList = changeStringListToIntList(signKey!);
final List<String>? token = await Storage.getStringList(saveBlueToken); final List<String>? token = await Storage.getStringList(saveBlueToken);
final List<int> getTokenList = changeStringListToIntList(token!); final List<int> getTokenList = changeStringListToIntList(token!);
IoSenderManage.senderAddFingerprintWithTimeCycleCoercionCommand( IoSenderManage.senderAddFingerprintWithTimeCycleCoercionCommand(
keyID:'1', keyID: '1',
userID:await Storage.getUid(), userID: await Storage.getUid(),
fingerNo:0, fingerNo: 0,
useCountLimit:0xffff, useCountLimit: 0xffff,
isForce:state.isCoerced.value == '1' ? 1 : 0, // isForce: state.isCoerced.value == '1' ? 1 : 0,
isAdmin: state.isAdministrator.value == '2' ? 1 : 0, //
operate: 0, isAdmin: state.isAdministrator.value == '2' ? 1 : 0,
isRound:state.selectType.value == '2' ? 1: 0, // operate: 0,
weekRound:DateTool().accordingTheCycleIntoTheCorrespondingNumber(state.weekDay.value), // isRound: state.selectType.value == '2' ? 1 : 0,
startDate: int.parse(state.startDate.value)~/1000, //
endDate: int.parse(state.endDate.value)~/1000, weekRound: DateTool().accordingTheCycleIntoTheCorrespondingNumber(
startTime:DateTool().dateToHNString(state.effectiveDateTime.value), state.weekDay.value),
endTime:DateTool().dateToHNString(state.failureDateTime.value), //
needAuthor:1, startDate: int.parse(state.startDate.value) ~/ 1000,
signKey:signKeyDataList, endDate: int.parse(state.endDate.value) ~/ 1000,
privateKey:getPrivateKeyList, startTime: DateTool().dateToHNString(state.effectiveDateTime.value),
token: getTokenList, endTime: DateTool().dateToHNString(state.failureDateTime.value),
isBeforeAddUser: false needAuthor: 1,
); signKey: signKeyDataList,
}else if (deviceConnectionState == BluetoothConnectionState.disconnected){ privateKey: getPrivateKeyList,
token: getTokenList,
isBeforeAddUser: false);
} else if (deviceConnectionState ==
BluetoothConnectionState.disconnected) {
final String getMobile = (await Storage.getMobile())!; final String getMobile = (await Storage.getMobile())!;
ApmHelper.instance.trackEvent('add_fingerprint', { ApmHelper.instance.trackEvent('add_fingerprint', {
'lock_name':BlueManage().connectDeviceName, 'lock_name': BlueManage().connectDeviceName,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!, 'account':
'date':DateTool().getNowDateWithType(1), getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'add_fingerprint_result':'断开', 'date': DateTool().getNowDateWithType(1),
'add_fingerprint_result': '断开',
}); });
BuglyTool.uploadException( BuglyTool.uploadException(
message: '添加指纹断开连接-添加指纹失败', message: '添加指纹断开连接-添加指纹失败',
detail: '添加指纹断开连接-添加指纹失败--SenderAddFingerprintWithTimeCycleCoercionCommand:$command', detail:
'添加指纹断开连接-添加指纹失败--SenderAddFingerprintWithTimeCycleCoercionCommand:$command',
eventStr: '添加指纹事件断开连接', eventStr: '添加指纹事件断开连接',
upload: true upload: true);
);
if(state.ifCurrentScreen.value == true){ if (state.ifCurrentScreen.value == true) {
showBlueConnetctToast(); showBlueConnetctToast();
} }
cancelBlueConnetctToastTimer(); cancelBlueConnetctToastTimer();
@ -326,27 +350,32 @@ class AddFingerprintLogic extends BaseGetXController {
// //
Future<void> senderCancelAddFingerprintCommand() async { Future<void> senderCancelAddFingerprintCommand() async {
BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async { BlueManage().blueSendData(BlueManage().connectDeviceName,
if (deviceConnectionState == BluetoothConnectionState.connected){ (BluetoothConnectionState deviceConnectionState) async {
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey); if (deviceConnectionState == BluetoothConnectionState.connected) {
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!); final List<String>? privateKey =
await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList =
changeStringListToIntList(privateKey!);
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey); final List<String>? signKey =
await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!); final List<int> signKeyDataList = changeStringListToIntList(signKey!);
final List<String>? token = await Storage.getStringList(saveBlueToken); final List<String>? token = await Storage.getStringList(saveBlueToken);
final List<int> getTokenList = changeStringListToIntList(token!); final List<int> getTokenList = changeStringListToIntList(token!);
IoSenderManage.senderCancelAddFingerprintCommand( IoSenderManage.senderCancelAddFingerprintCommand(
keyID:'1', keyID: '1',
userID:await Storage.getUid(), userID: await Storage.getUid(),
needAuthor:1, needAuthor: 1,
signKey:signKeyDataList, signKey: signKeyDataList,
privateKey:getPrivateKeyList, privateKey: getPrivateKeyList,
token: getTokenList, token: getTokenList,
); );
}else if (deviceConnectionState == BluetoothConnectionState.disconnected){ } else if (deviceConnectionState ==
if(state.ifCurrentScreen.value == true){ BluetoothConnectionState.disconnected) {
if (state.ifCurrentScreen.value == true) {
showBlueConnetctToast(); showBlueConnetctToast();
} }
cancelBlueConnetctToastTimer(); cancelBlueConnetctToastTimer();
@ -356,53 +385,54 @@ class AddFingerprintLogic extends BaseGetXController {
} }
// //
Future<void> addFingerprintsData() async{ Future<void> addFingerprintsData() async {
final AddFingerprintEntity entity = await ApiRepository.to.addFingerprintsData( final AddFingerprintEntity entity =
await ApiRepository.to.addFingerprintsData(
lockId: state.lockId.value.toString(), lockId: state.lockId.value.toString(),
endDate: state.endDate.value, endDate: state.endDate.value,
addType:state.addType.value, addType: state.addType.value,
fingerprintName: state.fingerprintName.value, fingerprintName: state.fingerprintName.value,
fingerprintNumber: state.fingerprintNumber.value, fingerprintNumber: state.fingerprintNumber.value,
fingerprintType: state.fingerprintType.value, fingerprintType: state.fingerprintType.value,
isCoerced: state.isCoerced.value, isCoerced: state.isCoerced.value,
startDate: state.startDate.value, startDate: state.startDate.value,
weekDay: state.weekDay.value, weekDay: state.weekDay.value,
fingerRight:state.isAdministrator.value == '2' ? 1 : 0, fingerRight: state.isAdministrator.value == '2' ? 1 : 0,
startTime: int.parse(state.effectiveDateTime.value), startTime: int.parse(state.effectiveDateTime.value),
endTime: int.parse(state.failureDateTime.value), endTime: int.parse(state.failureDateTime.value),
); );
if(entity.errorCode!.codeIsSuccessful){ if (entity.errorCode!.codeIsSuccessful) {
updateFingerprintUserNoLoadData(entity.data!.fingerprintId.toString()); updateFingerprintUserNoLoadData(entity.data!.fingerprintId.toString());
BuglyTool.uploadException( BuglyTool.uploadException(
message: '添加指纹调用接口成功', message: '添加指纹调用接口成功',
detail: '添加指纹调用接口成功', detail: '添加指纹调用接口成功',
eventStr: '添加指纹事件用接口成功', eventStr: '添加指纹事件用接口成功',
upload: true upload: true);
); } else {
}else{
updateFingerprintUserNoLoadData(entity.data!.fingerprintId.toString()); updateFingerprintUserNoLoadData(entity.data!.fingerprintId.toString());
BuglyTool.uploadException( BuglyTool.uploadException(
message: '添加指纹调用接口失败', message: '添加指纹调用接口失败',
detail: '添加指纹调用接口添加指纹调用接口失败 - ${entity.errorMsg}', detail: '添加指纹调用接口添加指纹调用接口失败 - ${entity.errorMsg}',
eventStr: '添加指纹事件接口失败', eventStr: '添加指纹事件接口失败',
upload: true upload: true);
);
} }
} }
// //
Future<void> updateFingerprintUserNoLoadData(String fingerprintId) async{ Future<void> updateFingerprintUserNoLoadData(String fingerprintId) async {
final LoginEntity entity = await ApiRepository.to.updateFingerprintUserNoLoadData( final LoginEntity entity =
fingerprintId: fingerprintId, await ApiRepository.to.updateFingerprintUserNoLoadData(
lockId: state.lockId.value.toString(), fingerprintId: fingerprintId,
fingerprintUserNo: state.fingerprintNumber.value, lockId: state.lockId.value.toString(),
fingerprintUserNo: state.fingerprintNumber.value,
); );
if(entity.errorCode!.codeIsSuccessful){ if (entity.errorCode!.codeIsSuccessful) {
showToast('添加成功'.tr, something: (){ showToast('添加成功'.tr, something: () {
if(state.fromType.value == 2){ if (state.fromType.value == 2) {
// //
eventBus.fire(ChickInAddStaffCardAndFingerprintBlockNumberEvent(state.fingerprintNumber.value)); eventBus.fire(ChickInAddStaffCardAndFingerprintBlockNumberEvent(
}else if(state.fromType.value == 1){ state.fingerprintNumber.value));
} else if (state.fromType.value == 1) {
eventBus.fire(OtherTypeRefreshListEvent()); eventBus.fire(OtherTypeRefreshListEvent());
} }
Get.close(2); Get.close(2);
@ -430,5 +460,4 @@ class AddFingerprintLogic extends BaseGetXController {
_replySubscription.cancel(); _replySubscription.cancel();
} }
} }

View File

@ -23,6 +23,7 @@ class FingerprintListLogic extends BaseGetXController {
// //
late StreamSubscription<Reply> _replySubscription; late StreamSubscription<Reply> _replySubscription;
void _initReplySubscription() { void _initReplySubscription() {
_replySubscription = _replySubscription =
EventBusManager().eventBus!.on<Reply>().listen((Reply reply) { EventBusManager().eventBus!.on<Reply>().listen((Reply reply) {
@ -74,11 +75,15 @@ class FingerprintListLogic extends BaseGetXController {
userID: (await Storage.getUid())!, userID: (await Storage.getUid())!,
fingerNo: state.deletFingerNo, fingerNo: state.deletFingerNo,
useCountLimit: 0xffff, useCountLimit: 0xffff,
operate: state.isDeletAll == true ? 3 : 2, // 0: 1 2: 3 operate: state.isDeletAll == true ? 3 : 2,
// 0: 1 2: 3
isAdmin: 0, isAdmin: 0,
isForce: 0, // isForce: 0,
isRound: 0, // //
weekRound: 0, // isRound: 0,
//
weekRound: 0,
//
startDate: 0x11223344, startDate: 0x11223344,
endDate: 0x11223344, endDate: 0x11223344,
startTime: '0', startTime: '0',
@ -275,11 +280,15 @@ class FingerprintListLogic extends BaseGetXController {
userID: (await Storage.getUid())!, userID: (await Storage.getUid())!,
fingerNo: state.deletFingerNo, fingerNo: state.deletFingerNo,
useCountLimit: 0xffff, useCountLimit: 0xffff,
operate: state.isDeletAll == true ? 3 : 2, // 0: 1 2: 3 operate: state.isDeletAll == true ? 3 : 2,
// 0: 1 2: 3
isAdmin: 0, isAdmin: 0,
isForce: 0, // isForce: 0,
isRound: 0, // //
weekRound: 0, // isRound: 0,
//
weekRound: 0,
//
startDate: 0x11223344, startDate: 0x11223344,
endDate: 0x11223344, endDate: 0x11223344,
startTime: '0', startTime: '0',
@ -299,30 +308,31 @@ class FingerprintListLogic extends BaseGetXController {
} }
}); });
} }
/** /**
* // * //
Future<PasswordKeyListEntity> mockNetworkDataRequest( Future<PasswordKeyListEntity> mockNetworkDataRequest(
{required bool isRefresh}) async { {required bool isRefresh}) async {
// //
if (isRefresh) { if (isRefresh) {
state.itemDataList.clear(); state.itemDataList.clear();
pageNo = 1; pageNo = 1;
} }
final PasswordKeyListEntity entity = await ApiRepository.to.passwordKeyList( final PasswordKeyListEntity entity = await ApiRepository.to.passwordKeyList(
state.keyInfo.value.keyStatus.toString(), state.keyInfo.value.keyStatus.toString(),
state.keyInfo.value.lockId.toString(), state.keyInfo.value.lockId.toString(),
pageNo.toString(), pageNo.toString(),
pageSize.toString(), pageSize.toString(),
state.searchController.text); state.searchController.text);
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
// //
state.itemDataList.addAll(entity.data!.itemList!); state.itemDataList.addAll(entity.data!.itemList!);
// //
pageNo++; pageNo++;
} }
return entity; return entity;
} }
*/ */
@ -390,6 +400,7 @@ class FingerprintListLogic extends BaseGetXController {
// //
late StreamSubscription _teamEvent; late StreamSubscription _teamEvent;
void _initRefreshAction() { void _initRefreshAction() {
_teamEvent = eventBus _teamEvent = eventBus
.on<OtherTypeRefreshListEvent>() .on<OtherTypeRefreshListEvent>()
@ -450,6 +461,7 @@ class FingerprintListLogic extends BaseGetXController {
_initReplySubscription(); _initReplySubscription();
_initRefreshAction(); _initRefreshAction();
getFingerprintsListData(isRefresh: true);
} }
} }

View File

@ -31,24 +31,9 @@ class _FingerprintListPageState extends State<FingerprintListPage>
final FingerprintListLogic logic = Get.put(FingerprintListLogic()); final FingerprintListLogic logic = Get.put(FingerprintListLogic());
final FingerprintListState state = Get.find<FingerprintListLogic>().state; final FingerprintListState state = Get.find<FingerprintListLogic>().state;
Future<void> getHttpData({required bool isRefresh}) async {
final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
if (isDemoMode == false) {
logic
.getFingerprintsListData(isRefresh: isRefresh)
.then((FingerprintListDataEntity value) {
if (mounted) {
setState(() {});
}
});
}
}
@override @override
void initState() { void initState() {
super.initState(); super.initState();
getHttpData(isRefresh: true);
} }
@override @override
@ -91,17 +76,17 @@ class _FingerprintListPageState extends State<FingerprintListPage>
), ),
body: EasyRefreshTool( body: EasyRefreshTool(
onRefresh: () { onRefresh: () {
getHttpData(isRefresh: true); logic.getFingerprintsListData(isRefresh: true);
}, },
onLoad: () { onLoad: () {
getHttpData(isRefresh: false); logic.getFingerprintsListData(isRefresh: false);
}, },
child: Column( child: Column(
children: <Widget>[ children: <Widget>[
KeySearchWidget( KeySearchWidget(
editingController: state.searchController, editingController: state.searchController,
onSubmittedAction: () { onSubmittedAction: () async {
getHttpData(isRefresh: true); await logic.getFingerprintsListData(isRefresh: true);
}, },
), ),
SizedBox( SizedBox(
@ -116,7 +101,8 @@ class _FingerprintListPageState extends State<FingerprintListPage>
'lockId': state.lockId.value, 'lockId': state.lockId.value,
'fromType': 1 // 1 2 'fromType': 1 // 1 2
})! })!
.then((value) => getHttpData(isRefresh: true)); .then((value) =>
logic.getFingerprintsListData(isRefresh: true));
// if (data != null) { // if (data != null) {
// getHttpData(isRefresh: true); // getHttpData(isRefresh: true);
// } // }
@ -179,7 +165,7 @@ class _FingerprintListPageState extends State<FingerprintListPage>
'fingerprintItemData': fingerprintItemData, 'fingerprintItemData': fingerprintItemData,
})! })!
.then((value) { .then((value) {
getHttpData(isRefresh: true); logic.getFingerprintsListData(isRefresh: true);
}); });
// if (data == 'deletScuess') { // if (data == 'deletScuess') {
// // state.fingerprintItemListData.removeWhere((FingerprintItemData item) => item.fingerprintId == fingerprintItemData.fingerprintId!); // // state.fingerprintItemListData.removeWhere((FingerprintItemData item) => item.fingerprintId == fingerprintItemData.fingerprintId!);

View File

@ -55,7 +55,19 @@ class _LockDetailPageState extends State<LockDetailPage>
void initState() { void initState() {
super.initState(); super.initState();
listeningAnimations(); state.animationController =
AnimationController(duration: const Duration(seconds: 1), vsync: this);
state.animationController!.repeat();
//StatusListener
state.animationController!.addStatusListener((AnimationStatus status) {
if (status == AnimationStatus.completed) {
state.animationController!.reset();
state.animationController!.forward();
} else if (status == AnimationStatus.dismissed) {
state.animationController!.reset();
state.animationController!.forward();
}
});
state.pageController.addListener(() { state.pageController.addListener(() {
state.currentPage.value = state.pageController.page!.round(); state.currentPage.value = state.pageController.page!.round();
@ -1321,24 +1333,6 @@ class _LockDetailPageState extends State<LockDetailPage>
); );
} }
Future<void> listeningAnimations() async {
await Future<void>.delayed(Duration.zero, () {
state.animationController = AnimationController(
duration: const Duration(seconds: 1), vsync: this);
state.animationController!.repeat();
//StatusListener
state.animationController!.addStatusListener((AnimationStatus status) {
if (status == AnimationStatus.completed) {
state.animationController!.reset();
state.animationController!.forward();
} else if (status == AnimationStatus.dismissed) {
state.animationController!.reset();
state.animationController!.forward();
}
});
});
}
String showElectricIcon(int electricnumber) { String showElectricIcon(int electricnumber) {
if (electricnumber >= 100) { if (electricnumber >= 100) {
return 'images/main/icon_lockElectricLevel_5.png'; return 'images/main/icon_lockElectricLevel_5.png';

View File

@ -12,6 +12,7 @@ import 'package:star_lock/appRouters.dart';
import 'package:star_lock/app_settings/app_settings.dart'; import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/blue/io_gateway/io_gateway_configuringWifi.dart'; import 'package:star_lock/blue/io_gateway/io_gateway_configuringWifi.dart';
import 'package:star_lock/blue/io_gateway/io_gateway_getStatus.dart'; import 'package:star_lock/blue/io_gateway/io_gateway_getStatus.dart';
import 'package:star_lock/blue/io_protocol/io_updataLockSet.dart';
import 'package:star_lock/login/login/entity/LoginEntity.dart'; import 'package:star_lock/login/login/entity/LoginEntity.dart';
import 'package:star_lock/main/lockDetail/lockDetail/device_network_info.dart'; import 'package:star_lock/main/lockDetail/lockDetail/device_network_info.dart';
import 'package:star_lock/main/lockDetail/lockSet/configuringWifi/configuringWifi/configuringWifiEntity.dart'; import 'package:star_lock/main/lockDetail/lockSet/configuringWifi/configuringWifi/configuringWifiEntity.dart';
@ -20,6 +21,7 @@ import 'package:star_lock/mine/gateway/addGateway/selectGateway/getGatewayInfo_m
import 'package:star_lock/talk/starChart/entity/star_chart_register_node_entity.dart'; import 'package:star_lock/talk/starChart/entity/star_chart_register_node_entity.dart';
import 'package:star_lock/talk/starChart/star_chart_manage.dart'; import 'package:star_lock/talk/starChart/star_chart_manage.dart';
import 'package:star_lock/tools/baseGetXController.dart'; import 'package:star_lock/tools/baseGetXController.dart';
import 'package:star_lock/tools/commonDataManage.dart';
import '../../../../../blue/blue_manage.dart'; import '../../../../../blue/blue_manage.dart';
import '../../../../../blue/io_protocol/io_configuringWifi.dart'; import '../../../../../blue/io_protocol/io_configuringWifi.dart';
@ -59,7 +61,8 @@ class ConfiguringWifiLogic extends BaseGetXController {
peerId: peerId, peerId: peerId,
); );
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
showToast('配网成功'.tr, something: () { await _getUploadLockSet();
showToast('配网成功'.tr, something: () async {
eventBus eventBus
.fire(PassCurrentLockInformationEvent(state.lockSetInfoData.value)); .fire(PassCurrentLockInformationEvent(state.lockSetInfoData.value));
// peerID // peerID
@ -101,6 +104,10 @@ class ConfiguringWifiLogic extends BaseGetXController {
if (reply is GatewayGetStatusReply) { if (reply is GatewayGetStatusReply) {
_replyStatusInfo(reply); _replyStatusInfo(reply);
} }
//
if (reply is UpdataLockSetReply) {
_replyUpdataLockSetReply(reply);
}
AppLog.log('蓝牙回调处理完毕${EasyLoading.isShow}'); AppLog.log('蓝牙回调处理完毕${EasyLoading.isShow}');
}); });
} }
@ -389,6 +396,88 @@ class ConfiguringWifiLogic extends BaseGetXController {
void _replyStatusInfo(reply) {} void _replyStatusInfo(reply) {}
//
Future<void> _getUploadLockSet() async {
// showBlueConnetctToastTimer(action: (){
// });
BlueManage().blueSendData(BlueManage().connectDeviceName,
(BluetoothConnectionState connectionState) async {
if (connectionState == BluetoothConnectionState.connected) {
final List<String>? token = await Storage.getStringList(saveBlueToken);
final List<int> getTokenList = changeStringListToIntList(token!);
_uploadLockSet(getTokenList);
} else if (connectionState == BluetoothConnectionState.disconnected) {
// cancelBlueConnetctToastTimer();
// if(state.ifCurrentScreen.value == true){
// showBlueConnetctToast();
// }
}
});
}
//
Future<void> _uploadLockSet(List<int> token) async {
final List<String>? privateKey =
await Storage.getStringList(saveBluePrivateKey);
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
IoSenderManage.updataLockSetCommand(
lockID: BlueManage().connectDeviceName,
userID: await Storage.getUid(),
token: token,
needAuthor: 1,
signKey: signKeyDataList,
privateKey: getPrivateKeyList);
}
//
Future<void> _replyUpdataLockSetReply(Reply reply) async {
final int status = reply.data[2];
switch (status) {
case 0x00:
//
dismissEasyLoading();
cancelBlueConnetctToastTimer();
_lockDataUpload(
uploadType: 1,
recordType: 0,
records: reply.data.sublist(7, reply.data.length));
break;
case 0x06:
//
final List<int> token = reply.data.sublist(3, 7);
final List<String> saveStrList = changeIntListToStringList(token);
Storage.setStringList(saveBlueToken, saveStrList);
_uploadLockSet(token);
break;
default:
dismissEasyLoading();
cancelBlueConnetctToastTimer();
break;
}
}
//
Future<void> _lockDataUpload(
{required int uploadType,
required int recordType,
required List records}) async {
final LoginEntity entity = await ApiRepository.to.lockDataUpload(
lockId: CommonDataManage().currentKeyInfo.lockId!,
uploadType: uploadType,
recordType: recordType,
records: records,
isUnShowLoading: true);
if (entity.errorCode!.codeIsSuccessful) {
update();
}
}
@override @override
void dispose() { void dispose() {
// TODO: implement dispose // TODO: implement dispose

View File

@ -202,7 +202,7 @@ class PasswordKeyDetailLogic extends BaseGetXController {
break; break;
case 2: case 2:
// 2 24使 // 2 24使
useDateStr = '永久'; useDateStr = '永久'.tr;
state.isCirculation.value = false; state.isCirculation.value = false;
break; break;
case 3: case 3:

View File

@ -205,7 +205,7 @@ class _PasswordKeyDetailPageState extends State<PasswordKeyDetailPage>
children: <Widget>[ children: <Widget>[
Expanded( Expanded(
child: Text( child: Text(
'密码生成后请在当日2359前使用一次进行激活否则过0点后未激活则失效。'.tr, '密码生成后请在当日2359前使用一次进行激活否则过0点后未激活则失效。密码激活后,有效期内不限次数使用。'.tr,
textAlign: TextAlign.start, textAlign: TextAlign.start,
style: TextStyle(fontSize: 20.sp), style: TextStyle(fontSize: 20.sp),
)), )),

View File

@ -487,7 +487,7 @@ class SaveLockLogic extends BaseGetXController {
void backAction() async { void backAction() async {
eventBus.fire(RefreshLockListInfoDataEvent(clearScanDevices: true)); eventBus.fire(RefreshLockListInfoDataEvent(clearScanDevices: true));
BlueManage().disconnect(); // BlueManage().disconnect();
// //
final LockSetInfoEntity entity = final LockSetInfoEntity entity =

View File

@ -297,7 +297,7 @@ class ShowCupertinoAlertView {
builder: (BuildContext context) { builder: (BuildContext context) {
return CupertinoAlertDialog( return CupertinoAlertDialog(
title: Container(), title: Container(),
content: Text('是否要远程开锁'.tr), content: Text('是否要远程开锁'.tr),
actions: <Widget>[ actions: <Widget>[
CupertinoDialogAction( CupertinoDialogAction(
onPressed: Get.back, onPressed: Get.back,

View File

@ -54,6 +54,8 @@ extension ExtensionAppDept on AppDept {
const Locale fiL = Locale('fi', 'FI'); const Locale fiL = Locale('fi', 'FI');
const Locale daL = Locale('da', 'DK'); const Locale daL = Locale('da', 'DK');
const Locale ukL = Locale('uk', 'UA'); const Locale ukL = Locale('uk', 'UA');
const Locale hiL = Locale('hi', 'HI');
const Locale urL = Locale('ur', 'UR');
const Locale srCyrillic = Locale('sr', 'RS'); const Locale srCyrillic = Locale('sr', 'RS');
return [ return [
@ -93,6 +95,8 @@ extension ExtensionAppDept on AppDept {
fiL, fiL,
daL, daL,
ukL, ukL,
hiL,
urL,
srCyrillic srCyrillic
]; ];
} }
@ -177,7 +181,12 @@ enum LanguageType {
// //
danish, danish,
// //
ukrainian ukrainian,
//
hindi,
//
urdu,
} }
extension ExtensionLanguageType on LanguageType { extension ExtensionLanguageType on LanguageType {
@ -295,6 +304,12 @@ extension ExtensionLanguageType on LanguageType {
case LanguageType.ukrainian: case LanguageType.ukrainian:
str = '乌克兰语'.tr; str = '乌克兰语'.tr;
break; break;
case LanguageType.hindi:
str = '印地语'.tr;
break;
case LanguageType.urdu:
str = '乌尔都语'.tr;
break;
} }
return str; return str;
} }
@ -415,6 +430,12 @@ extension ExtensionLanguageType on LanguageType {
case 'uk': case 'uk':
languageType = LanguageType.ukrainian; languageType = LanguageType.ukrainian;
break; break;
case 'hi':
languageType = LanguageType.hindi;
break;
case 'ur':
languageType = LanguageType.urdu;
break;
default: default:
languageType = LanguageType.english; languageType = LanguageType.english;
break; break;
@ -610,6 +631,16 @@ extension ExtensionLanguageType on LanguageType {
return locale; return locale;
} }
break; break;
case LanguageType.hindi:
if (locale.languageCode == 'hi' && locale.countryCode == 'HI') {
return locale;
}
break;
case LanguageType.urdu:
if (locale.languageCode == 'ur' && locale.countryCode == 'UR') {
return locale;
}
break;
case LanguageType.system: case LanguageType.system:
// TODO: Handle this case. // TODO: Handle this case.
break; break;