feat:核销放大
feat:锁屏页面 feat:饭卡自动查询预约
This commit is contained in:
1 parent
0b287b0364
commit
bdc33b822f
17 files changed
+1061
-89
No files matched your search
@@ -20,6 +20,10 @@ abstract class AppSettingTool {
|
||||
"reservationQueryMethodOrder";
|
||||
static const String _reservationQueryDefaultMethodKey =
|
||||
"reservationQueryDefaultMethod";
|
||||
|
||||
/// 查询菜单自动识别开关在现有 sysJson 中的稳定存储键,缺失时按关闭处理。
|
||||
static const String _reservationQueryAutoRecognitionEnabledKey =
|
||||
"reservationQueryAutoRecognitionEnabled";
|
||||
static const String _reservationQueryNameMaskEnabledKey =
|
||||
"reservationQueryNameMaskEnabled";
|
||||
static const String _reservationQueryVerificationEnabledKey =
|
||||
@@ -467,6 +471,9 @@ abstract class AppSettingTool {
|
||||
return ReservationQueryPagePreferences(
|
||||
methodOrder: List.unmodifiable(restored),
|
||||
defaultMethod: defaultMethod,
|
||||
// 旧设置没有该键时保持手动启动,避免升级后直接拉起读卡器或相机。
|
||||
autoRecognitionEnabled:
|
||||
sysJson[_reservationQueryAutoRecognitionEnabledKey] == true,
|
||||
// 旧设置没有该键时继续脱敏,避免升级后意外展示完整姓名。
|
||||
nameMaskEnabled: sysJson[_reservationQueryNameMaskEnabledKey] != false,
|
||||
verificationEnabled:
|
||||
@@ -479,6 +486,7 @@ abstract class AppSettingTool {
|
||||
static Future<void> setReservationQueryPagePreferences({
|
||||
required List<ReservationRecognitionMethod> order,
|
||||
required ReservationRecognitionMethod defaultMethod,
|
||||
required bool autoRecognitionEnabled,
|
||||
required bool nameMaskEnabled,
|
||||
required bool verificationEnabled,
|
||||
required ReservationVerificationDateScope verificationDateScope,
|
||||
@@ -496,6 +504,8 @@ abstract class AppSettingTool {
|
||||
sysJson[_reservationQueryMethodOrderKey] =
|
||||
normalized.map((method) => method.code).toList();
|
||||
sysJson[_reservationQueryDefaultMethodKey] = normalizedDefault.code;
|
||||
sysJson[_reservationQueryAutoRecognitionEnabledKey] =
|
||||
autoRecognitionEnabled;
|
||||
sysJson[_reservationQueryNameMaskEnabledKey] = nameMaskEnabled;
|
||||
sysJson[_reservationQueryVerificationEnabledKey] = verificationEnabled;
|
||||
sysJson[_reservationQueryVerificationDateScopeKey] =
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
import 'package:get/get.dart';
|
||||
|
||||
/// 执行一次终端唤醒身份校验,返回是否允许解除睡眠遮罩。
|
||||
typedef TerminalWakeVerifier = Future<bool> Function();
|
||||
|
||||
/// 管理主屏睡眠遮罩及唤醒验证的应用级状态。
|
||||
///
|
||||
/// 睡眠仅阻止主屏查看和触摸,不切换路由、不销毁页面 Controller,也不暂停串口、
|
||||
/// 人脸、网络请求或副屏通信。状态仅保存在当前进程,设备重新启动后不自动进入睡眠。
|
||||
class TerminalSleepControl extends GetxController {
|
||||
/// 创建一份默认处于唤醒状态的主屏睡眠控制器。
|
||||
TerminalSleepControl();
|
||||
|
||||
/// 主屏是否正在展示全屏睡眠遮罩。
|
||||
final isSleeping = false.obs;
|
||||
|
||||
/// 是否已有唤醒密码校验正在进行,防止快速点击叠加多个密码弹窗。
|
||||
bool _wakeVerificationInProgress = false;
|
||||
|
||||
/// 立即进入睡眠状态;重复调用保持幂等且不影响当前业务页面生命周期。
|
||||
void enterSleep() {
|
||||
if (!isSleeping.value) isSleeping.value = true;
|
||||
}
|
||||
|
||||
/// 通过调用方提供的密码校验请求唤醒主屏。
|
||||
///
|
||||
/// 校验取消、失败或重复提交时继续保持睡眠;校验过程抛出的异常会向上返回,
|
||||
/// 由界面层统一记录并提示,同时保证下一次唤醒仍可重新发起。
|
||||
Future<bool> requestWake(TerminalWakeVerifier verifier) async {
|
||||
if (!isSleeping.value) return true;
|
||||
if (_wakeVerificationInProgress) return false;
|
||||
|
||||
_wakeVerificationInProgress = true;
|
||||
try {
|
||||
final verified = await verifier();
|
||||
if (!verified) return false;
|
||||
isSleeping.value = false;
|
||||
return true;
|
||||
} finally {
|
||||
_wakeVerificationInProgress = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,7 @@ export './app/control/app_control.dart';
|
||||
export './app/control/app_theme_control.dart';
|
||||
export './app/control/terminal_admin_session_control.dart';
|
||||
export './app/control/terminal_menu_control.dart';
|
||||
export './app/control/terminal_sleep_control.dart';
|
||||
|
||||
export './app/app_face_tool.dart';
|
||||
export './app/app_device_status_tool.dart';
|
||||
|
||||
Reference in new issue
Block a user