feat:核销放大

feat:锁屏页面
feat:饭卡自动查询预约
This commit is contained in:
dzc committed 2026-08-04 19:35:06 +08:00
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;
}
}
}
+1
View File
@@ -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';