From e491cdb48129752324c4e3764f99bd9203c56dec Mon Sep 17 00:00:00 2001
From: lgq <1015864684@qq.com>
Date: 星期二, 31 三月 2026 09:48:44 +0800
Subject: [PATCH] 1.新增VF205门禁机代码
---
vf205_access/src/screen.js | 1470 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 1,470 insertions(+), 0 deletions(-)
diff --git a/vf205_access/src/screen.js b/vf205_access/src/screen.js
new file mode 100644
index 0000000..1227934
--- /dev/null
+++ b/vf205_access/src/screen.js
@@ -0,0 +1,1470 @@
+/**
+ * 灞忓箷绠$悊妯″潡
+ * 璐熻矗灞忓箷鏄剧ず銆乁I鎺у埗銆佺敤鎴风晫闈㈢鐞嗙瓑鍔熻兘
+ */
+import dxui from '../dxmodules/dxUi.js'
+import dxMap from '../dxmodules/dxMap.js'
+import log from '../dxmodules/dxLogger.js'
+import net from '../dxmodules/dxNet.js'
+import viewUtils from './view/viewUtils.js'
+import i18n from './view/i18n.js'
+import grainService from './service/grainService.js'
+import sqliteService from './service/sqliteService.js'
+import pinyin from './view/pinyin/pinyin.js'
+import mainView from './view/mainView.js'
+import idleView from './view/idleView.js'
+import topView from './view/topView.js'
+import appView from './view/appView.js'
+import pwdView from './view/pwdView.js'
+import emergencyPwdView from './view/emergencyPwdView.js'
+import newPwdView from './view/config/newPwdView.js'
+import identityVerificationView from './view/config/identityVerificationView.js'
+import configView from './view/config/configView.js'
+import cloudCertView from './view/config/menu/cloudCertView.js'
+import doorControlView from './view/config/menu/doorControlView.js'
+import helpView from './view/config/menu/helpView.js'
+import networkSettingView from './view/config/menu/networkSettingView.js'
+import systemSettingView from './view/config/menu/systemSettingView.js'
+import deviceInfoView from './view/config/menu/deviceInfoView.js'
+import factoryTestView from './view/config/menu/factoryTestView.js'
+import localUserView from './view/config/menu/localUserView.js'
+import recordQueryView from './view/config/menu/recordQueryView.js'
+import voiceBroadcastView from './view/config/menu/voiceBroadcastView.js'
+import dockingSettingView from './view/config/menu/dockingSetting.js'
+import localUserAddView from './view/config/menu/localUser/localUserAddView.js'
+import faceEnterView from './view/config/menu/localUser/faceEnterView.js'
+import displaySettingView from './view/config/menu/systemSetting/displaySettingView.js'
+import faceRecognitionSettingView from './view/config/menu/systemSetting/faceRecognitionSettingView.js'
+import swipeCardRecognitionSettingView from './view/config/menu/systemSetting/swipeCardRecognitionSettingView.js'
+import passLogSettingView from './view/config/menu/systemSetting/passLogSettingView.js'
+import passwordOpenDoorSettingView from './view/config/menu/systemSetting/passwordOpenDoorSettingView.js'
+import passwordManagementView from './view/config/menu/systemSetting/passwordManagementView.js'
+import timeSettingView from './view/config/menu/systemSetting/timeSettingView.js'
+import systemInfoView from './view/config/menu/deviceInfo/systemInfoView.js'
+import dataCapacityInfoView from './view/config/menu/deviceInfo/dataCapacityInfoView.js'
+import recordQueryDetailView from './view/config/menu/recordQuery/recordQueryDetailView.js'
+import std from '../dxmodules/dxStd.js'
+import bus from '../dxmodules/dxEventBus.js'
+import driver from './driver.js'
+import config from '../dxmodules/dxConfig.js'
+import common from '../dxmodules/dxCommon.js'
+import configService from './service/configService.js'
+import codeService from './service/codeService.js'
+import face from '../dxmodules/dxFace.js'
+import faceService from './service/faceService.js'
+
+/**
+ * 灞忓箷绠$悊瀵硅薄
+ */
+const screen = {}
+
+/**
+ * 灞忓箷灏哄閰嶇疆
+ */
+screen.screenSize = {
+ width: 800,
+ height: 1280
+}
+
+/**
+ * UI涓婁笅鏂�
+ */
+const context = {}
+
+/**
+ * 鍒濆鍖栧睆骞曠鐞嗘ā鍧�
+ * 鍒濆鍖栨墍鏈塙I缁勪欢銆佽缃瑷�銆佸惎鍔ㄥ睆淇濊鏃跺櫒绛�
+ * 娉ㄦ剰锛氬湪main.js涓皟鐢紝鍙厑璁歌皟鐢ㄤ竴娆�
+ */
+screen.init = function () {
+ const loadMethod = dxui.loadMain
+ dxui.loadMain = function (view) {
+ if (screen.screenNow && screen.screenNow.id == view.id) {
+ return
+ }
+ screen.screenNow = view
+ pinyin.hide(true)
+ loadMethod.call(dxui, view)
+ }
+
+ dxui.init({ orientation: 0 }, context);
+ // 鍒濆鍖栨墍鏈夌粍浠�
+ pinyin.init(800, 400)
+
+ viewUtils.confirmInit()
+
+ mainView.init()
+ idleView.init()
+ topView.init()
+ appView.init()
+ pwdView.init()
+ emergencyPwdView.init()
+ newPwdView.init()
+ identityVerificationView.init()
+ configView.init()
+
+ cloudCertView.init()
+ doorControlView.init()
+ helpView.init()
+ networkSettingView.init()
+ systemSettingView.init()
+ deviceInfoView.init()
+ factoryTestView.init()
+ localUserView.init()
+ recordQueryView.init()
+ voiceBroadcastView.init()
+ dockingSettingView.init()
+
+ localUserAddView.init()
+ faceEnterView.init()
+
+ displaySettingView.init()
+ faceRecognitionSettingView.init()
+ swipeCardRecognitionSettingView.init()
+ passLogSettingView.init()
+
+
+ passwordOpenDoorSettingView.init()
+ passwordManagementView.init()
+ timeSettingView.init()
+
+ systemInfoView.init()
+ dataCapacityInfoView.init()
+ recordQueryDetailView.init()
+
+ // 璁剧疆璇█
+ // i18n.setLanguage("en-US")
+ i18n.setLanguage(config.get("base.language"))
+
+ dxui.loadMain(mainView.screenMain)
+ // dxui.loadMain(networkSettingView.screenMain)
+
+ // 鍚姩灞忎繚璁℃椂鍣�
+ idleTimerStart()
+
+ // bus浜嬩欢
+ busEvents()
+
+ // 瀹炴椂鑾峰彇鐐瑰嚮鍧愭爣
+ getClickPoint()
+
+ // 闅愯棌閿洏
+ hidePinyin()
+
+ // 浜鸿劯璺熻釜妗�
+ faceTrackingBox()
+}
+
+/**
+ * 浜鸿劯璺熻釜妗嗗鐞�
+ * 瀹氭湡鑾峰彇浜鸿劯璺熻釜鏁版嵁骞舵洿鏂拌窡韪鏄剧ず
+ */
+function faceTrackingBox() {
+ std.setInterval(() => {
+ let data = driver.face.getTrackingBox()
+ try {
+ if (data && typeof data === 'string') {
+ // 妫�鏌ユ暟鎹槸鍚︽槸鏈夋晥鐨凧SON瀛楃涓�
+ try {
+ data = JSON.parse(data)
+ // 鏈�澶�10涓汉
+ if (data.type == "track" && data.faces && data.faces.length <= 10) {
+ for (let i = 0; i < data.faces.length; i++) {
+ let item = data.faces[i]
+ if (item && item.rect_render && item.rect_render.length === 4) {
+ screen.trackUpdate({ w: item.rect_render[2] - item.rect_render[0], h: item.rect_render[3] - item.rect_render[1], x: item.rect_render[0], y: item.rect_render[1] }, item.id, item.is_living)
+ }
+ }
+ }
+ } catch (parseError) {
+ log.info('screen.faceTrackingBox: 鏃犳晥鐨凧SON鏁版嵁:', data);
+ log.error("screen.faceTrackingBox: JSON瑙f瀽閿欒:", parseError)
+ }
+ }
+ } catch (error) {
+ log.info('screen.faceTrackingBox:', data);
+ log.error("screen.faceTrackingBox:", error)
+ }
+ }, 110)
+}
+
+/**
+ * 鐐瑰嚮鍧愭爣鍙樺寲鏍囪
+ */
+let changedClickPoint
+
+/**
+ * 涓婃鐐瑰嚮鍧愭爣
+ */
+let lastClickPoint = { x: 0, y: 0 }
+
+/**
+ * 褰撳墠鐐瑰嚮鍧愭爣
+ */
+let clickPoint
+
+/**
+ * 瀹炴椂鑾峰彇鐐瑰嚮鍧愭爣
+ * 瀹氭湡鑾峰彇鐢ㄦ埛瑙︽懜灞忓箷鐨勫潗鏍囦綅缃�
+ */
+function getClickPoint() {
+ const indev = NativeObject.APP.NativeComponents.NativeIndev
+ std.setInterval(() => {
+ clickPoint = {
+ x: Math.abs(800 - indev.lvIndevGetPointVg().x),
+ y: indev.lvIndevGetPointVg().y
+ }
+
+ if (lastClickPoint.x != clickPoint.x || lastClickPoint.y != clickPoint.y) {
+ changedClickPoint = clickPoint
+ } else {
+ changedClickPoint = null
+ }
+
+ lastClickPoint = clickPoint
+ }, 5)
+}
+
+/**
+ * 闅愯棌鎷奸煶閿洏
+ * 澶勭悊鎷奸煶閿洏鐨勬樉绀哄拰闅愯棌閫昏緫锛屽綋鐢ㄦ埛鐐瑰嚮灞忓箷鍏朵粬鍖哄煙鏃惰嚜鍔ㄩ殣钘忛敭鐩�
+ */
+function hidePinyin() {
+ /**
+ * 閿洏鏄剧ず鏃剁殑鐐瑰嚮鍧愭爣
+ */
+ let showPoint
+
+ /**
+ * 鍘熷鐨勯殣钘忔柟娉�
+ */
+ const hideMethod = pinyin.hide
+
+ /**
+ * 鍘熷鐨勬樉绀烘柟娉�
+ */
+ const showMethod = pinyin.show
+
+ /**
+ * 閿佸畾鏍囧織锛岄槻姝㈤噸澶嶆搷浣�
+ */
+ let lock = false
+
+ // 閲嶅啓闅愯棌鏂规硶
+ pinyin.hide = function (isForce) {
+ if (isForce) {
+ hideMethod.call(pinyin)
+ lock = false
+ return
+ }
+ if (lock) {
+ return
+ }
+ lock = true
+ hideMethod.call(pinyin)
+ lock = false
+ }
+
+ // 閲嶅啓鏄剧ず鏂规硶
+ pinyin.show = function (...args) {
+ if (lock) {
+ return
+ }
+ lock = true
+ showMethod.call(pinyin, ...args)
+ showPoint = clickPoint
+ lock = false
+ }
+
+ // 瀹氭湡妫�鏌ユ槸鍚﹂渶瑕侀殣钘忛敭鐩�
+ std.setInterval(() => {
+ if (showPoint && (Math.abs(showPoint.x - clickPoint.x) > 5 && Math.abs(showPoint.y - clickPoint.y) > 5)) {
+ if (clickPoint.y < (1280 - (pinyin.getMode() == 1 ? 400 + 70 : 400))) {
+ let defocus = dxMap.get("INPUT_KEYBOARD").get("defocus")
+ if (defocus == "defocus") {
+ dxMap.get("INPUT_KEYBOARD").del("defocus")
+ showPoint = null
+ pinyin.hide()
+ }
+ }
+ }
+ }, 5)
+}
+
+/**
+ * 灞忓箷绠$悊鍣ㄧ被
+ * 璐熻矗灞忓箷鐘舵�佺鐞嗭紝鍖呮嫭灞忎繚鍜岀唲灞忓姛鑳�
+ */
+class ScreenManager {
+ /**
+ * 鏋勯�犲嚱鏁�
+ * @param {object} callbacks - 鍥炶皟鍑芥暟瀵硅薄
+ */
+ constructor(callbacks = {}) {
+ /**
+ * 瀹氭椂鍣ㄥ璞�
+ */
+ this.timers = {
+ screenSaver: null, // 灞忎繚瀹氭椂鍣�
+ screenOff: null // 鐔勫睆瀹氭椂鍣�
+ };
+
+ /**
+ * 閰嶇疆瀵硅薄
+ */
+ this.config = {
+ screenSaverDelay: 0, // 灞忎繚寤惰繜锛堟绉掞級
+ screenOffDelay: 0 // 鐔勫睆寤惰繜锛堟绉掞級
+ };
+
+ /**
+ * 鍥炶皟鍑芥暟
+ */
+ this.callbacks = {
+ onScreenSaverStart: callbacks.onScreenSaverStart || (() => { }),
+ onScreenSaverEnd: callbacks.onScreenSaverEnd || (() => { }),
+ onScreenOff: callbacks.onScreenOff || (() => { }),
+ onScreenOn: callbacks.onScreenOn || (() => { })
+ };
+
+ this.resetTimers = this.resetTimers.bind(this);
+ }
+
+ /**
+ * 閰嶇疆鏃堕棿
+ * @param {number} screenSaverDelay - 灞忎繚寤惰繜锛堟绉掞級
+ * @param {number} screenOffDelay - 鐔勫睆寤惰繜锛堟绉掞級
+ */
+ configure({ screenSaverDelay = 0, screenOffDelay = 0 }) {
+ this.config.screenSaverDelay = screenSaverDelay;
+ this.config.screenOffDelay = screenOffDelay;
+ this.resetTimers();
+ }
+
+ /**
+ * 閲嶇疆瀹氭椂鍣�
+ * 娓呴櫎鐜版湁瀹氭椂鍣ㄥ苟璁剧疆鏂扮殑瀹氭椂鍣�
+ */
+ resetTimers() {
+ // 娓呴櫎鐜版湁瀹氭椂鍣�
+ if (this.timers.screenSaver) {
+ std.clearTimeout(this.timers.screenSaver);
+ }
+ if (this.timers.screenOff) {
+ std.clearTimeout(this.timers.screenOff);
+ }
+
+ // 閫�鍑哄綋鍓嶇姸鎬�
+ this.exitScreenStates();
+
+ // 璁剧疆鏂扮殑瀹氭椂鍣�
+ if (this.config.screenOffDelay > 0) {
+ this.timers.screenOff = std.setTimeout(() => {
+ this.enterScreenOff();
+ }, this.config.screenOffDelay);
+ }
+
+ // 鍙湁褰撶唲灞忔椂闂村ぇ浜庡睆淇濇椂闂存椂鎵嶈缃睆淇濆畾鏃跺櫒
+ if (this.config.screenSaverDelay > 0 &&
+ (this.config.screenSaverDelay < this.config.screenOffDelay || this.config.screenOffDelay == 0)) {
+ this.timers.screenSaver = std.setTimeout(() => {
+ this.enterScreenSaver();
+ }, this.config.screenSaverDelay);
+ }
+ }
+
+ /**
+ * 杩涘叆灞忎繚鐘舵��
+ */
+ enterScreenSaver() {
+ const mapUI = dxMap.get("UI")
+ if (!mapUI.get("isScreenOff")) {
+ mapUI.put("isScreenSaver", true)
+ this.callbacks.onScreenSaverStart();
+ }
+ }
+
+ /**
+ * 杩涘叆鐔勫睆鐘舵��
+ */
+ enterScreenOff() {
+ const mapUI = dxMap.get("UI")
+ mapUI.put("isScreenOff", true)
+ mapUI.put("isScreenSaver", false)
+ this.callbacks.onScreenOff();
+ }
+
+ /**
+ * 閫�鍑烘墍鏈夊睆骞曠姸鎬�
+ */
+ exitScreenStates() {
+ const mapUI = dxMap.get("UI")
+ const previousState = { isScreenOff: mapUI.get("isScreenOff"), isScreenSaver: mapUI.get("isScreenSaver") };
+ mapUI.put("isScreenOff", false)
+ mapUI.put("isScreenSaver", false)
+ // 濡傛灉鐘舵�佸彂鐢熸敼鍙橈紝瑙﹀彂鐩稿簲鍥炶皟
+ if (previousState.isScreenSaver) {
+ this.callbacks.onScreenSaverEnd();
+ }
+ if (previousState.isScreenOff) {
+ this.callbacks.onScreenOn();
+ }
+ }
+
+ /**
+ * 鑾峰彇褰撳墠鐘舵��
+ * @returns {object} 褰撳墠灞忓箷鐘舵��
+ */
+ getState() {
+ const mapUI = dxMap.get("UI")
+ return { isScreenOff: mapUI.get("isScreenOff"), isScreenSaver: mapUI.get("isScreenSaver") };
+ }
+
+ /**
+ * 娓呯悊璧勬簮
+ * 娓呴櫎鎵�鏈夊畾鏃跺櫒
+ */
+ destroy() {
+ if (this.timers.screenSaver) {
+ std.clearTimeout(this.timers.screenSaver);
+ }
+ if (this.timers.screenOff) {
+ std.clearTimeout(this.timers.screenOff);
+ }
+ }
+}
+
+/**
+ * 灞忓箷绠$悊鍣ㄥ疄渚�
+ */
+let screenManager
+
+/**
+ * 鍚姩灞忎繚璁℃椂鍣�
+ * 鍒濆鍖栧睆骞曠鐞嗗櫒锛岃缃睆淇濆拰鐔勫睆鏃堕棿锛屾娴嬬敤鎴疯Е鎽�
+ */
+function idleTimerStart() {
+ // 鍒涘缓瀹炰緥锛屼紶鍏ュ洖璋冨嚱鏁�
+ screenManager = new ScreenManager({
+ /**
+ * 灞忎繚寮�濮嬪洖璋�
+ */
+ onScreenSaverStart: () => {
+ screen.enterIdle()
+ },
+
+ /**
+ * 灞忎繚缁撴潫鍥炶皟
+ */
+ onScreenSaverEnd: () => {
+ screen.exitIdle(true)
+ },
+
+ /**
+ * 鐔勫睆鍥炶皟
+ */
+ onScreenOff: () => {
+ dxMap.get("screenOff").put("status", 1)
+ // 鍋滄浜鸿劯璇嗗埆
+ driver.face.status(false)
+ screen.screenNow.hide()
+ topView.screenMain.hide()
+ },
+
+ /**
+ * 浜睆鍥炶皟
+ */
+ onScreenOn: () => {
+ screen.exitIdle(true)
+ dxMap.get("screenOff").put("status", 0)
+ // 鎭㈠浜鸿劯璇嗗埆
+ driver.face.status(true)
+ screen.screenNow.show()
+ topView.screenMain.show()
+
+ // 閫�鍑虹唲灞忔椂鑾峰彇骞舵洿鏂版皵浣撴祿搴﹀拰鐘舵�佷俊鎭�
+ try {
+ log.info('[screen]: 閫�鍑虹唲灞忥紝鑾峰彇姘斾綋娴撳害鍜岀姸鎬佷俊鎭�')
+ grainService.checkGasConcentration()
+ grainService.checkDevConcentration()
+ } catch (error) {
+ log.error(`[screen]: 鑾峰彇姘斾綋娴撳害鍜岀姸鎬佷俊鎭敊璇�: ${error.message}`)
+ }
+ }
+ });
+
+ // 閰嶇疆鏃堕棿锛堟绉掞級
+ screenManager.configure({
+ // screenSaverDelay: 10000, // 灞忎繚
+ // screenOffDelay: 5000 // 鐔勫睆
+ screenSaverDelay: config.get("base.screensaver") * 60 * 1000, // 灞忎繚
+ screenOffDelay: config.get("base.screenOff") * 60 * 1000 // 鐔勫睆
+ });
+
+ // 妫�娴嬬敤鎴疯Е鎽�
+ let touchCount = 0
+ std.setInterval(() => {
+ let count = dxui.Utils.GG.NativeDisp.lvDispGetInactiveTime()
+ if (count < touchCount) {
+ screenManager.resetTimers();
+ }
+ touchCount = count
+ }, 100);
+}
+
+/**
+ * 鍒锋柊灞忓箷绠$悊鍣ㄩ厤缃�
+ * 鏇存柊灞忎繚鍜岀唲灞忔椂闂撮厤缃�
+ */
+screen.screenManagerRefresh = function () {
+ screenManager.configure({
+ screenSaverDelay: config.get("base.screensaver") * 60 * 1000, // 灞忎繚
+ screenOffDelay: config.get("base.screenOff") * 60 * 1000 // 鐔勫睆
+ });
+ screenManager.resetTimers();
+}
+
+/**
+ * 杩涘叆灞忎繚瀹氭椂鍣�
+ */
+let enterIdleTimer
+
+/**
+ * 杩涘叆灞忎繚
+ * 鏄剧ず灞忎繚鐣岄潰
+ */
+screen.enterIdle = function () {
+ // 寤惰繜1绉掞紝闃叉杩涘叆灞忎繚鍜岄��鍑哄睆淇濆悓鏃惰Е鍙戯紝1绉掑唴娌℃湁瑙﹀彂閫�鍑哄睆淇濓紝鍒欒涓鸿繘鍏ュ睆淇�
+ enterIdleTimer = std.setTimeout(() => {
+ if (idleView.screenMain.isHide()) {
+ viewUtils.confirmClose()
+ dxui.loadMain(mainView.screenMain)
+ idleView.screenMain.show()
+ topView.changeTheme(false)
+ }
+ }, 1000)
+}
+
+/**
+ * 閫�鍑哄睆淇�
+ * 闅愯棌灞忎繚鐣岄潰
+ * @param {boolean} isSelf - 鏄惁鐢辩郴缁熻嚜韬Е鍙�
+ */
+screen.exitIdle = function (isSelf) {
+ if (enterIdleTimer) {
+ std.clearTimeout(enterIdleTimer)
+ enterIdleTimer = null
+ }
+ if (!isSelf) {
+ screenManager.resetTimers();
+ }
+ if (!idleView.screenMain.isHide()) {
+ idleView.screenMain.hide()
+ }
+}
+
+/**
+ * 灞忓箷寰幆澶勭悊
+ * 澶勭悊UI浜嬩欢
+ * @returns {boolean} 澶勭悊缁撴灉
+ */
+screen.loop = function () {
+ return dxui.handler()
+}
+
+/**
+ * 浜戣瘉婵�娲�
+ * 婵�娲荤數瀛愯韩浠借瘉
+ * @param {string} code - 婵�娲荤爜
+ * @returns {number} 婵�娲荤粨鏋滐紝0琛ㄧず鎴愬姛锛岄潪0琛ㄧず澶辫触
+ */
+screen.nfcIdentityCardActivation = function (code) {
+ return driver.eid.active(config.get("sys.sn"), config.get("sys.appVersion"), config.get("sys.mac"), code);
+
+}
+
+/**
+ * 鍒犻櫎浜哄憳
+ * 鍒犻櫎鐢ㄦ埛淇℃伅銆佹潈闄愩�佸嚟璇佸拰浜鸿劯鏁版嵁
+ * @param {object} user - 鐢ㄦ埛瀵硅薄
+ * @returns {boolean} 鍒犻櫎缁撴灉
+ */
+screen.deleteUser = function (user) {
+ // 鍒犻櫎浜哄憳淇℃伅
+ sqliteService.d1_person.deleteByUserId(user.userId)
+ // 鍒犻櫎鏉冮檺淇℃伅
+ sqliteService.d1_permission.deleteByUserId(user.userId)
+ // 鍒犻櫎鍑瘉淇℃伅
+ sqliteService.d1_voucher.deleteByUserId(user.userId)
+ // 鍒犻櫎浜鸿劯鏁版嵁
+ let res = driver.face.delete(user.userId)
+
+ return true
+}
+
+/**
+ * 鏇存柊浜哄憳淇℃伅
+ * 鏇存柊鐢ㄦ埛淇℃伅銆佸瘑鐮併�佸崱鐗囧拰浜鸿劯鏁版嵁
+ * @param {object} user - 鐢ㄦ埛瀵硅薄
+ * @returns {boolean|string} 鏇存柊缁撴灉锛屾垚鍔熻繑鍥瀟rue锛屽け璐ヨ繑鍥為敊璇俊鎭�
+ */
+screen.updateUser = function (user) {
+ //淇敼浜哄憳淇℃伅
+ let res = sqliteService.d1_person.updatenameAndExtraByUserId(user.userId, user.name, JSON.stringify({ type: user.type, idCard: user.idCard }))
+ if (res != 0) {
+ return false
+ }
+
+ //澶勭悊鍑瘉
+ let ret
+
+ //澶勭悊瀵嗙爜鍑瘉
+ if (user.pwd) {
+ //鍒ゆ柇搴撹〃鏄惁瀛樺湪杩欎釜鍑瘉
+ let pwdData = sqliteService.d1_voucher.findByCodeAndType(user.pwd, "400");
+ if (pwdData.length > 0 && pwdData[0].userId != user.userId) {
+ //瀛樺湪涓嶈兘娣诲姞杩斿洖澶辫触
+ log.info("瀵嗙爜閲嶅");
+ return "localUserAddView.failPwdRepeat"
+ }
+ //鏌ヨ鏄惁鏈夊瘑鐮佸嚟璇佹湁鏇存柊娌℃湁鏂板
+ let countByuserIdAndType = sqliteService.d1_voucher.findByuserIdAndType(user.userId, "400");
+ if (countByuserIdAndType.length > 0) {
+ ret = sqliteService.d1_voucher.updatecodeByuserIdAndtype(user.userId, "400", user.pwd)
+ if (ret != 0) {
+ return false
+ }
+ } else {
+ //鏂板涓�涓�
+ ret = sqliteService.d1_voucher.save({ keyId: std.genRandomStr(32), type: "400", code: user.pwd, userId: user.userId })
+ if (ret != 0) {
+ return false
+ }
+ }
+ } else {
+ //娌℃湁鍐呭鍘绘暟鎹簱琛ㄥ垹闄や竴涓�
+ sqliteService.d1_voucher.deleteByuserIdAndtype(user.userId, "400")
+ }
+
+ //澶勭悊鍗$墖鍑瘉
+ if (user.card) {
+ //鍒ゆ柇搴撹〃鏄惁瀛樺湪杩欎釜鍑瘉
+ let cardData = sqliteService.d1_voucher.findByCodeAndType(user.card, "200");
+ if (cardData.length > 0 && cardData[0].userId != user.userId) {
+ //瀛樺湪涓嶈兘娣诲姞杩斿洖澶辫触
+ log.info("鍗¢噸澶�");
+ return "localUserAddView.failCardRepeat"
+ }
+ //鏌ヨ鏄惁鏈夊瘑鐮佸嚟璇佹湁鏇存柊娌℃湁鏂板
+ let countByuserIdAndType = sqliteService.d1_voucher.countByuserIdAndType(user.userId, "200");
+ if (countByuserIdAndType > 0) {
+ ret = sqliteService.d1_voucher.updatecodeByuserIdAndtype(user.userId, "200", user.card)
+ if (ret != 0) {
+ return false
+ }
+ } else {
+ //鏂板涓�涓�
+ ret = sqliteService.d1_voucher.save({ keyId: std.genRandomStr(32), type: "200", code: user.card, userId: user.userId })
+
+ if (ret != 0) {
+ return false
+ }
+ }
+ } else {
+ //娌℃湁鍐呭鍘绘暟鎹簱琛ㄥ垹闄や竴涓�
+ sqliteService.d1_voucher.deleteByuserIdAndtype(user.userId, "200")
+ }
+
+ //澶勭悊浜鸿劯鍑瘉
+ if (user.face) {
+ let findByuserIdAndType = sqliteService.d1_voucher.findByuserIdAndType(user.userId, "300");
+ if (findByuserIdAndType.length <= 0) {
+ let ret = driver.face.registerFaceByPicFile(user.userId, user.face)
+ log.info("2娉ㄥ唽浜鸿劯,ret:", ret)
+ if (ret != 0) {
+ return faceService.regErrorEnum.picture[ret + '']
+ }
+ //娉ㄥ唽鎴愬姛鍚庨渶瑕佸惂鍘熸潵鍥剧墖绉诲姩鍒� user 瀵瑰簲鐩綍涓�
+ let src = "/app/data/user/" + user.userId + "/register.jpg"
+ std.ensurePathExists(src)
+ common.systemBrief('mv ' + user.face + " " + src)
+
+ //鏂板涓�涓�
+ ret = sqliteService.d1_voucher.save({ keyId: std.genRandomStr(32), type: "300", code: src, userId: user.userId })
+ if (ret != 0) {
+ return false
+ }
+ } else {
+ //鍘熸潵鏈夊張浼犲叆 鍏堝垹闄ゅ悗鏂板
+ if (findByuserIdAndType[0].code != user.face) {
+ //鍒犻櫎鑰佷汉鑴�
+ driver.face.delete(user.userId)
+ //娉ㄥ唽鏂颁汉鑴�
+ let res = driver.face.registerFaceByPicFile(user.userId, user.face)
+ log.info("3娉ㄥ唽浜鸿劯,res:", res)
+ if (res != 0) {
+ return faceService.regErrorEnum.picture[res + '']
+ }
+ let src = "/app/data/user/" + user.userId + "/register.jpg"
+ std.ensurePathExists(src)
+ //鎶婁复鏃剁洰褰曚汉鑴哥Щ鍔ㄥ埌 user 瀵瑰簲鐨勬枃浠跺す涓�
+ common.systemBrief('mv ' + user.face + " " + src)
+ ret = sqliteService.d1_voucher.updatecodeAndExtraByuserIdAndtype(user.userId, "300", src, JSON.stringify({ faceType: 0 }))
+
+ }
+ }
+ } else {
+ //娌℃湁鍐呭鍘绘暟鎹簱琛ㄥ垹闄や竴涓�
+ sqliteService.d1_voucher.deleteByuserIdAndtype(user.userId, "300")
+ driver.face.delete(user.userId)
+ common.systemBrief("rm -rf /app/data/user/" + user.userId)
+ }
+
+ return true
+}
+
+/**
+ * 鏂板浜哄憳
+ * 娣诲姞鏂扮敤鎴蜂俊鎭�佸瘑鐮併�佸崱鐗囧拰浜鸿劯鏁版嵁
+ * @param {object} user - 鐢ㄦ埛瀵硅薄
+ * @returns {boolean|string} 娣诲姞缁撴灉锛屾垚鍔熻繑鍥瀟rue锛屽け璐ヨ繑鍥為敊璇俊鎭�
+ */
+screen.insertUser = async function (user) {
+ /**
+ * 淇濆瓨鍑瘉
+ * @param {string} type - 鍑瘉绫诲瀷
+ * @param {string} code - 鍑瘉浠g爜
+ * @returns {boolean|string} 淇濆瓨缁撴灉
+ */
+ const saveVoucher = async (type, code) => {
+ // 妫�鏌ュ崱鐗囧嚟璇佹槸鍚﹂噸澶�
+ if (type == "200") {
+ let cardData = sqliteService.d1_voucher.findByCodeAndType(code, "200");
+ if (cardData.length > 0 && cardData[0].userId != user.userId) {
+ //瀛樺湪涓嶈兘娣诲姞杩斿洖澶辫触
+ log.info("鍗¢噸澶�");
+ return "localUserAddView.failCardRepeat"
+ }
+ }
+
+ // 褰� type 涓� "300" 鏃讹紝棣栧厛璋冪敤鐗瑰畾鏂规硶妫�鏌ユ槸鍚﹀彲浠ョ户缁繚瀛樺嚟璇�
+ if (type === "300") {
+ let preCheckResult = await preSaveCheck(code); // 鍋囪杩欐槸鎮ㄦ彁鍒扮殑闇�瑕佽皟鐢ㄧ殑鏂规硶
+ if (preCheckResult !== true) { // 濡傛灉棰勬鏌ヤ笉閫氳繃锛屽垯鐩存帴杩斿洖 false
+ return preCheckResult;
+ }
+ code = "/app/data/user/" + user.userId + "/register.jpg"
+ }
+
+ // 妫�鏌ュ瘑鐮佸嚟璇佹槸鍚﹂噸澶�
+ if (type == "400") {
+ let pwdData = sqliteService.d1_voucher.findByCodeAndType(code, "400");
+ if (pwdData.length > 0 && pwdData[0].userId != user.userId) {
+ //瀛樺湪涓嶈兘娣诲姞杩斿洖澶辫触
+ log.info("瀵嗙爜閲嶅");
+ return "localUserAddView.failPwdRepeat"
+ }
+ }
+
+ let keyId = std.genRandomStr(32);
+
+ let extra = type == 300 ? JSON.stringify({ faceType: 0 }) : JSON.stringify({})
+ let voucherRet = await sqliteService.d1_voucher.save({
+ keyId: keyId,
+ type: type,
+ code: code,
+ userId: user.userId,
+ extra: extra
+ });
+
+ if (voucherRet != 0) {
+ // 濡傛灉鍑瘉淇濆瓨澶辫触锛屽垯鍒犻櫎宸蹭繚瀛樼殑鐢ㄦ埛淇℃伅鍙婂彲鑳藉凡淇濆瓨鐨勫叾浠栧嚟璇�
+ await sqliteService.d1_person.deleteByUserId(user.userId);
+ await sqliteService.d1_voucher.deleteByUserId(user.userId);
+ return false;
+ }
+ return true;
+ };
+
+ /**
+ * 淇濆瓨鍓嶆鏌�
+ * @param {string} code - 浜鸿劯鍥剧墖璺緞
+ * @returns {boolean|string} 妫�鏌ョ粨鏋�
+ */
+ async function preSaveCheck(code) {
+ let ret = driver.face.registerFaceByPicFile(user.userId, code)
+ log.info("1娉ㄥ唽浜鸿劯,ret:", ret)
+ if (ret != 0) {
+ return faceService.regErrorEnum.picture[ret + '']
+ }
+ //娉ㄥ唽鎴愬姛鍚庨渶瑕佸惂鍘熸潵鍥剧墖绉诲姩鍒� user 瀵瑰簲鐩綍涓�
+ let src = "/app/data/user/" + user.userId + "/register.jpg"
+ std.ensurePathExists(src)
+ common.systemBrief('mv ' + code + " " + src)
+ return true;
+ }
+
+ let success = true;
+ // 淇濆瓨浜鸿劯鍑瘉
+ if (success === true && user.face && !(success = await saveVoucher("300", user.face)));
+ // 淇濆瓨瀵嗙爜鍑瘉
+ if (success === true && user.pwd && !(success = await saveVoucher("400", user.pwd)));
+ // 淇濆瓨鍗$墖鍑瘉
+ if (success === true && user.card && !(success = await saveVoucher("200", user.card)));
+
+ if (success === true) {
+ //{"id":"423","userId":"423","name":"寰厜浜掕仈","idCard":"123","pwd":"251574","card":"123"}
+ //淇濆瓨浜哄憳淇℃伅
+ let personRet = await sqliteService.d1_person.save({
+ userId: user.userId,
+ name: user.name,
+ extra: JSON.stringify({ type: user.type == 1 ? 1 : 0, idCard: user.idCard })
+ });
+ if (personRet != 0) {
+ sqliteService.d1_voucher.deleteByUserId(user.userId);
+ return "localUserAddView.failRepeat"
+ }
+ //鏂板涓�鏉℃案涔呮潈闄�
+ sqliteService.d1_permission.save({ permissionId: user.userId, userId: user.userId, timeType: 0 })
+ } else {
+ await sqliteService.d1_voucher.deleteByUserId(user.userId);
+ }
+
+ return success;
+
+}
+
+/**
+ * 鑾峰彇鏈湴浜哄憳淇℃伅
+ * 鑾峰彇鐢ㄦ埛鐨勫嚟璇佷俊鎭紝鍖呮嫭韬唤璇併�佸崱鐗囥�佸瘑鐮佸拰浜鸿劯鏁版嵁
+ * @param {string} userId - 鐢ㄦ埛ID
+ * @returns {object} 鐢ㄦ埛鍑瘉淇℃伅
+ */
+screen.getVoucher = function (userId) {
+ // 鑾峰彇鐢ㄦ埛淇℃伅
+ let person = sqliteService.d1_person.find({ userId: userId });
+
+ if (person.length < 0) {
+ return
+ }
+
+ // 鑾峰彇瀵嗙爜鍑瘉
+ let pwd_voucher = sqliteService.d1_voucher.find({ userId: userId, type: "400" })[0] || undefined
+
+ // 鑾峰彇鍗$墖鍑瘉
+ let card_voucher = sqliteService.d1_voucher.find({ userId: userId, type: "200" })[0] || undefined
+
+ // 鑾峰彇浜鸿劯鍑瘉
+ let face_voucher = sqliteService.d1_voucher.find({ userId: userId, type: "300" })[0] || undefined
+
+ // 鑾峰彇韬唤璇佷俊鎭�
+ let idCard_voucher
+ try {
+ idCard_voucher = JSON.parse(person[0].extra).idCard
+ } catch (error) {
+ }
+
+ return {
+ id: userId,
+ idCard: idCard_voucher ? idCard_voucher : undefined,
+ card: card_voucher ? card_voucher.code : undefined,
+ pwd: pwd_voucher ? pwd_voucher.code : undefined,
+ face: face_voucher ? face_voucher.code : undefined,
+ type: JSON.parse(person[0].extra).type || 0
+ }
+
+}
+
+/**
+ * 鑾峰彇鐢ㄦ埛鍒楄〃
+ * 鏍规嵁鏉′欢鏌ヨ鐢ㄦ埛鍒楄〃锛屾敮鎸佸垎椤靛拰鎼滅储
+ * @param {number} page - 椤电爜锛岄粯璁�0
+ * @param {number} size - 姣忛〉澶у皬锛岄粯璁�6
+ * @param {string} userId - 鐢ㄦ埛ID锛岀敤浜庣簿纭悳绱�
+ * @param {string} name - 鐢ㄦ埛濮撳悕锛岀敤浜庢ā绯婃悳绱�
+ * @returns {object} 鐢ㄦ埛鍒楄〃鏁版嵁锛屽寘鍚垎椤典俊鎭�
+ */
+screen.getUsers = function (page = 0, size = 6, userId, name) {
+ // 鎸夌敤鎴稩D鎴栧鍚嶆悳绱�
+ if (userId || name) {
+ // 鎸夌敤鎴稩D鎼滅储
+ let user = sqliteService.d1_person.findByUserId(userId)[0]
+ if (user) {
+ user.id = user.userId
+ return { data: [user], totalPage: 1, totalSize: 1, currentPage: 1 }
+ }
+ // 鎸夌敤鎴峰鍚嶆悳绱�
+ let users = sqliteService.d1_person.findByName(name)
+ if (users && users.length > 0) {
+ users.map(v => {
+ v.id = v.userId
+ })
+
+ /**
+ * 鏁扮粍鍒嗗潡
+ * @param {array} arr - 婧愭暟缁�
+ * @param {number} size - 鍧楀ぇ灏�
+ * @returns {array} 鍒嗗潡鍚庣殑鏁扮粍
+ */
+ function chunkArray(arr, size) {
+ // 濡傛灉鏁扮粍涓虹┖鎴栬�呭ぇ灏忎负闆讹紝杩斿洖绌烘暟缁�
+ if (arr.length === 0 || size <= 0) {
+ return [];
+ }
+ const result = [];
+ // 浣跨敤寰幆閬嶅巻鏁扮粍锛屽苟鎸夌収澶у皬鍒囧壊
+ for (let i = 0; i < arr.length; i += size) {
+ result.push(arr.slice(i, i + size)); // slice 鎴彇鎸囧畾鑼冨洿鐨勫厓绱�
+ }
+ return result;
+ }
+
+ const chunkedArray = chunkArray(users, size);
+ return { data: chunkedArray[page], totalPage: Math.ceil(users.length / size), totalSize: users.length, currentPage: page + 1 }
+ }
+ return { data: [], totalPage: 0, totalSize: 0, currentPage: 1 }
+ }
+
+ // 鑾峰彇鎵�鏈夌敤鎴�
+ let userCount = sqliteService.d1_person.count()
+ let users = sqliteService.d1_person.findOrderByUserIdAsc({ page, size })
+ if (users.length > 0) {
+ users.forEach(element => { element.id = element.userId });
+ }
+ // 鎬婚〉鏁�
+ let totalPage = Math.ceil(userCount / size)
+ return { data: users, totalPage: totalPage, totalSize: userCount, currentPage: page + 1 }
+}
+
+/**
+ * 鑾峰彇閫氳璁板綍
+ * 鑾峰彇鐢ㄦ埛閫氳璁板綍锛屾敮鎸佸垎椤�
+ * @param {number} page - 椤电爜锛岄粯璁�0
+ * @param {number} size - 姣忛〉澶у皬锛岄粯璁�6
+ * @returns {object} 閫氳璁板綍鏁版嵁锛屽寘鍚垎椤典俊鎭�
+ */
+screen.getPassRecord = function (page = 0, size = 6) {
+ let passCount = sqliteService.d1_pass_record.count()
+ let datas = sqliteService.d1_pass_record.findOrderByTimeDesc({ page, size })
+ // 鎬婚〉鏁�
+ let totalPage = Math.ceil(passCount / size)
+ return { data: datas, totalPage: totalPage, totalSize: passCount, currentPage: page + 1 }
+}
+
+/**
+ * 浜鸿劯褰曞叆寮�濮�
+ * 寮�濮嬩汉鑴稿綍鍏ワ紝UI鎺у埗
+ * @param {string} userId - 鐢ㄦ埛ID
+ */
+screen.faceEnterStart = function (userId) {
+ dxMap.get("UI").put("faceEnterStart", userId)
+ driver.face.status(1)
+ driver.face.mode(1)
+}
+
+/**
+ * 浜鸿劯褰曞叆缁撴潫
+ * 缁撴潫浜鸿劯褰曞叆锛孶I鎺у埗
+ */
+screen.faceEnterEnd = function () {
+ dxMap.get("UI").del("faceEnterStart")
+ driver.face.status(0)
+ // driver.face.mode(0)
+}
+
+/**
+ * 鑾峰彇鍗″彿寮�濮�
+ * 寮�濮嬭幏鍙栧崱鍙凤紝UI鎺у埗
+ */
+screen.getCardStart = function () {
+ dxMap.get("UI").put("getCardStart", true)
+}
+
+/**
+ * 鑾峰彇鍗″彿缁撴潫
+ * 缁撴潫鑾峰彇鍗″彿锛孶I鎺у埗
+ */
+screen.endCardEnd = function () {
+ dxMap.get("UI").del("getCardStart")
+}
+
+/**
+ * 寮�鍚汉鑴歌瘑鍒�
+ * 寮�濮嬩汉鑴歌瘑鍒姛鑳�
+ */
+screen.faceRecgStart = function () {
+ driver.face.status(1)
+ driver.face.mode(0)
+}
+
+/**
+ * 浜鸿劯璇嗗埆鏆傚仠
+ * 鏆傚仠浜鸿劯璇嗗埆鍔熻兘
+ */
+screen.faceRecgPause = function () {
+ driver.face.status(0)
+}
+
+/**
+ * 浜鸿劯褰曞叆缁撴灉
+ * 澶勭悊浜鸿劯褰曞叆缁撴灉
+ * @param {string} facePic - 浜鸿劯鍥剧墖璺緞
+ */
+screen.faceEnterResult = function (facePic) {
+ if (facePic) {
+ faceEnterView.successFlag = true
+ // 鎴愬姛锛屾樉绀轰汉鑴哥収鐗�
+ localUserAddView.addFace(facePic)
+ dxui.loadMain(localUserAddView.screenMain)
+ faceEnterView.backCb()
+ } else {
+ // 澶辫触锛屾姤閿�
+ faceEnterView.timeout()
+ }
+}
+
+/**
+ * 闈炶瘑鍒〉闈汉鑴歌璇佸紑濮�
+ * 寮�濮嬩汉鑴歌璇侊紝UI鎺у埗
+ */
+screen.faceAuthStart = function () {
+ dxMap.get("UI").put("faceAuthStart", "Y")
+ driver.face.status(1)
+ driver.face.mode(0)
+}
+
+/**
+ * 闈炶瘑鍒〉闈汉鑴歌璇佺粨鏉�
+ * 缁撴潫浜鸿劯璁よ瘉锛孶I鎺у埗
+ */
+screen.faceAuthEnd = function () {
+ dxMap.get("UI").del("faceAuthStart")
+ driver.face.status(0)
+}
+
+/**
+ * 闈炶瘑鍒〉闈汉鑴歌璇佺粨鏋�
+ * 澶勭悊浜鸿劯璁よ瘉缁撴灉
+ * @param {boolean} bool - 璁よ瘉缁撴灉锛宼rue琛ㄧず鎴愬姛锛宖alse琛ㄧず澶辫触
+ */
+screen.faceAuthResult = function (bool) {
+ if (bool) {
+ // 鎴愬姛锛岃繘鍏ヨ缃彍鍗�
+ driver.alsa.play(`/app/code/resource/${config.get("base.language") == "CN" ? "CN" : "EN"}/wav/recg_s.wav`)
+ dxui.loadMain(configView.screenMain)
+ } else {
+ // 澶辫触锛屾姤閿�
+ driver.alsa.play(`/app/code/resource/${config.get("base.language") == "CN" ? "CN" : "EN"}/wav/recg_f.wav`)
+ identityVerificationView.statusPanel.fail()
+ }
+}
+
+/**
+ * 淇濆瓨閰嶇疆
+ * 淇濆瓨绯荤粺閰嶇疆
+ * @param {object} configAll - 閰嶇疆瀵硅薄
+ * @returns {boolean} 淇濆瓨缁撴灉
+ */
+screen.saveConfig = function (configAll) {
+ // 鐩存帴璋冪敤閰嶇疆楠岃瘉鍜屼繚瀛樺嚱鏁�
+ return configService.configVerifyAndSave(configAll)
+}
+
+/**
+ * 鑾峰彇閰嶇疆
+ * 鑾峰彇绯荤粺閰嶇疆
+ * @returns {object} 閰嶇疆瀵硅薄
+ */
+screen.getConfig = function () {
+ let config1 = config.getAll()
+ return config1
+}
+
+/**
+ * 瀵嗙爜閫氳
+ * 浣跨敤瀵嗙爜杩涜閫氳楠岃瘉
+ * @param {string} pwd - 瀵嗙爜
+ * @returns {boolean} 楠岃瘉缁撴灉锛宼rue琛ㄧず鎴愬姛锛宖alse琛ㄧず澶辫触
+ */
+screen.pwdAccess = function (pwd) {
+ // 妫�鏌ユ暟鎹簱涓殑搴旀�ュ紑浠撳瘑鐮�
+ try {
+ const passwords = sqliteService.d1_emergency_password.findAll({ status: 1 })
+ for (let i = 0; i < passwords.length; i++) {
+ if (passwords[i].password === pwd) {
+ return true
+ }
+ }
+ } catch (error) {
+ logger.error('妫�鏌ュ簲鎬ュ紑浠撳瘑鐮佸け璐�:', error)
+ }
+
+ // 鍏朵粬瀵嗙爜楠岃瘉閫昏緫
+ bus.fire("access", { data: { type: "400", code: pwd } })
+ return false
+}
+
+/**
+ * 鍒囨崲缃戠粶绫诲瀷
+ * 鍒囨崲缃戠粶杩炴帴绫诲瀷
+ * @param {object} data - 缃戠粶绫诲瀷鏁版嵁
+ */
+screen.switchNetworkType = function (data) {
+ bus.fire("switchNetworkType", data)
+}
+
+/**
+ * 鑾峰彇WiFi鍒楄〃
+ * 鑾峰彇鍙敤鐨刉iFi缃戠粶鍒楄〃
+ */
+screen.netGetWifiSsidList = function () {
+ bus.fire("netGetWifiSsidList")
+}
+
+/**
+ * WiFi鍒楄〃鏁版嵁
+ * 澶勭悊WiFi鍒楄〃鏁版嵁
+ * @param {array} data - WiFi鍒楄〃鏁版嵁
+ */
+screen.netWifiSsidList = function (data) {
+ if (data.length == 0 && config.get("net.type") == 2) {
+ //鏃犵嚎缃�
+ std.setTimeout(() => {
+ screen.netGetWifiSsidList()
+ }, 1000)
+ return
+ }
+ networkSettingView.wifiListData = data
+ networkSettingView.wifiList.refresh()
+}
+
+/**
+ * 杩炴帴WiFi
+ * 杩炴帴鍒版寚瀹氱殑WiFi缃戠粶
+ * @param {string} ssid - WiFi鍚嶇О
+ * @param {string} psk - WiFi瀵嗙爜
+ * @returns {boolean} 杩炴帴缁撴灉
+ */
+screen.netConnectWifiSsid = function (ssid, psk) {
+ return driver.net.netConnectWifiSsid(ssid, psk)
+}
+
+/**
+ * 鑾峰彇鍗″彿
+ * 澶勭悊鑾峰彇鍒扮殑鍗″彿
+ * @param {string} card - 鍗″彿
+ */
+screen.getCard = function (card) {
+ localUserAddView.cardBoxInput.text(card)
+}
+
+/**
+ * 浜嬩欢鎬荤嚎浜嬩欢澶勭悊
+ * 娉ㄥ唽鍜屽鐞嗙郴缁熶簨浠�
+ */
+function busEvents() {
+ // 缃戠粶鐘舵��
+ bus.on('netStatus', (data) => {
+ console.log(JSON.stringify(data));
+ let type = config.get("net.type")
+ if (data.connected) {
+ let ip = net.getModeByCard(type).param.ip
+ mainView.overlayIpLbl.text("IP:" + ip)
+ config.setAndSave("net.ip", ip)
+ config.setAndSave("net.mac", net.getMacaddr(type))
+ topView.ethConnectState(true, type)
+ networkSettingView.netInfo[10].label.dataI18n = "networkSettingView.networkConnected"
+ } else {
+ topView.ethConnectState(false, type)
+ networkSettingView.netInfo[10].label.dataI18n = "networkSettingView.networkUnconnected"
+ }
+ i18n.refreshObj(networkSettingView.netInfo[10].label)
+ })
+
+ // mqtt杩炴帴鐘舵��
+ bus.on('mqttStatus', (data) => {
+ if (data == "connected") {
+ topView.mqttConnectState(true)
+ } else {
+ topView.mqttConnectState(false)
+ }
+ })
+
+ // 浜鸿劯褰曞叆寮�濮�
+ bus.on("beginAddFace", screen.beginAddFace)
+
+ // 浜鸿劯褰曞叆缁撴灉
+ bus.on("faceEnterResult", screen.faceEnterResult)
+
+ // 閫�鍑哄睆淇�
+ bus.on("exitIdle", screen.exitIdle)
+
+ // 鑾峰彇WiFi鍒楄〃 - 绉婚櫎浜嬩欢鐩戝惉鍣紝閬垮厤鏃犻檺寰幆
+
+ // 鑾峰彇鍗″彿
+ bus.on("getCard", screen.getCard)
+
+ // 浜鸿劯璁よ瘉缁撴灉
+ bus.on("faceAuthResult", screen.faceAuthResult)
+
+ // 閫氳缁撴灉
+ bus.on("accessRes", screen.accessRes)
+
+ // 璺熻釜鏇存柊
+ // bus.on("trackUpdate", screen.trackUpdate)
+
+ // 闅愯棌SN
+ bus.on("hideSn", screen.hideSn)
+
+ // 鍒囨崲璇█
+ bus.on("changeLanguage", screen.changeLanguage)
+
+ // 闅愯棌IP
+ bus.on("hideIp", screen.hideIp)
+
+ // 鍒锋柊灞忓箷绠$悊鍣�
+ bus.on("screenManagerRefresh", screen.screenManagerRefresh)
+
+ // WiFi鍒楄〃鏁版嵁
+ bus.on("netWifiSsidList", screen.netWifiSsidList)
+
+ // APP妯″紡
+ bus.on("appMode", screen.appMode)
+
+ // 鍗囩骇
+ bus.on("upgrade", screen.upgrade)
+
+ // 鍗$墖閲嶇疆
+ // bus.on("cardReset", screen.cardReset)
+
+ // 璺熻釜缁撴灉
+ bus.on("trackResult", screen.trackResult)
+ bus.on("showAccessResult", screen.showAccessResult)
+}
+
+/**
+ * 鍗$墖閲嶇疆瀹氭椂鍣�
+ */
+let setTimeout
+
+/**
+ * 鍗$墖閲嶇疆
+ * 澶勭悊鍗$墖閲嶇疆閫昏緫
+ * @param {object} msg - 娑堟伅瀵硅薄
+ */
+screen.cardReset = function (msg) {
+ if (msg.type == 2 && msg.status == 3) {
+ setTimeout = std.setTimeout(() => {
+ driver.net.cardReset()
+ }, 30 * 1000);
+ } else {
+ if (setTimeout) {
+ std.clearTimeout(setTimeout)
+ }
+ }
+}
+
+/**
+ * 寮�濮嬫敞鍐屼汉鑴�
+ * 澶勭悊浜鸿劯娉ㄥ唽寮�濮嬮�昏緫
+ * @param {object} data - 浜鸿劯鏁版嵁瀵硅薄
+ */
+screen.beginAddFace = function (data) {
+ log.info('screen.beginAddFace', JSON.stringify(data));
+
+ if (!data.fileName) {
+ return screen.faceEnterResult()
+ }
+
+ driver.alsa.play(`/app/code/resource/${config.get("base.language") == "CN" ? "CN" : "EN"}/wav/recognition_s.wav`)
+ faceEnterView.statusPanel.success("faceEnterView.recogSuccess")
+ // 淇濆瓨鍥剧墖鍒版湰鍦�
+ let src = `/app/data/user/register.jpg`
+ common.systemBrief(`mv ${data.fileName} ${src}`)
+ common.systemBrief(`rm -rf /app/data/user/temp/*`)
+
+ screen.faceEnterResult(src)
+}
+
+/**
+ * 閫氳缁撴灉
+ * 澶勭悊閫氳鎴愬姛鎴栧け璐ョ殑缁撴灉
+ * @param {boolean} bool - 閫氳缁撴灉锛宼rue琛ㄧず鎴愬姛锛宖alse琛ㄧず澶辫触
+ */
+screen.accessRes = function (bool) {
+ if (bool) {
+ if (mainView.smallStatusPanel && mainView.smallStatusPanel.success) {
+ mainView.smallStatusPanel.success()
+ }
+ } else {
+ if (mainView.smallStatusPanel && mainView.smallStatusPanel.fail) {
+ mainView.smallStatusPanel.fail()
+ }
+ }
+}
+
+/**
+ * 鍒囨崲APP妯″紡
+ * 鍒囨崲搴旂敤绋嬪簭鏄剧ず妯″紡锛堟爣鍑嗘ā寮忔垨绠�娲佹ā寮忥級
+ * @param {number} mode - 妯″紡鍊硷紝0琛ㄧず鏍囧噯妯″紡锛�1琛ㄧず绠�娲佹ā寮�
+ */
+screen.appMode = function (mode) {
+ if (mode == 0) {
+ // 鍒囨崲鍒版爣鍑嗘ā寮�
+ } else if (mode == 1) {
+ // 鍒囨崲鍒扮畝娲佹ā寮�
+ }
+}
+
+/**
+ * 鏇存柊浜鸿劯璺熻釜妗�
+ * 鏇存柊浜鸿劯璺熻釜妗嗙殑浣嶇疆鍜岀姸鎬�
+ * @param {object} data - 鍧愭爣淇℃伅
+ * @param {number} id - face_id锛岀敤浜庡叧鑱旇瘑鍒鍚嶇敤
+ * @param {boolean} isLiving - 鏄惁娲讳綋
+ */
+screen.trackUpdate = function (data, id, isLiving) {
+ let item = mainView.trackFaces[0]
+ for (let i = 0; i < 10; i++) {
+ let ele = mainView.trackFaces[i]
+ if (ele.face_id == id) {
+ item = ele
+ break
+ }
+ }
+ item.face_id = id
+
+ if (item && item.timer) {
+ std.clearTimeout(item.timer)
+ item.timer = null
+ }
+
+ item.timer = std.setTimeout(() => {
+ item.trackFace.hide()
+ // item.trackFaceName.hide()
+ if (item.timer) {
+ std.clearTimeout(item.timer)
+ item.timer = null
+ }
+ }, 300)
+
+ let edge = data.w > data.h ? data.w : data.h
+ let offset = Math.abs(data.w - data.h) / 2
+ item.trackFace.show()
+ item.trackFace.setSize(edge, edge)
+ item.trackFace.radius(edge / 2)
+ if (data.w > data.h) {
+ item.trackFace.setPos(data.x, data.y - offset)
+ } else {
+ item.trackFace.setPos(data.x - offset, data.y)
+ }
+
+ item.trackFaceName.text(" ")
+
+ if (item.result && item.result.result === true && item.result.id == id) {
+ item.trackFace.setBorderColor(viewUtils.color.success)
+ let user = sqliteService.d1_person.findByUserId(item.result.userId)[0]
+ item.trackFaceName.text(user ? user.name : "")
+ } else if (item.result && item.result.result === false && item.result.id == id) {
+ item.trackFace.setBorderColor(viewUtils.color.fail)
+ } else if (isLiving) {
+ item.trackFace.setBorderColor(0xf3e139)
+ } else {
+ item.trackFace.setBorderColor(0xffffff)
+ }
+}
+
+/**
+ * 璁よ瘉缁撴灉
+ * 澶勭悊浜鸿劯璇嗗埆璁よ瘉缁撴灉
+ * @param {object} data - 璁よ瘉缁撴灉鏁版嵁
+ */
+screen.trackResult = function (data) {
+ for (let i = 0; i < 10; i++) {
+ let ele = mainView.trackFaces[i]
+ if (ele.face_id == data.id) {
+ ele.result = data
+ return
+ }
+ }
+}
+
+/**
+ * 闅愯棌SN鎸夐挳
+ * 鎺у埗SN鎸夐挳鐨勬樉绀哄拰闅愯棌
+ * @param {boolean} bool - 鏄惁鏄剧ず锛宼rue琛ㄧず鏄剧ず锛宖alse琛ㄧず闅愯棌
+ */
+screen.hideSn = function (bool) {
+ if (bool) {
+ mainView.bottomSnBtn.show()
+ } else {
+ mainView.bottomSnBtn.hide()
+ }
+}
+
+/**
+ * 闅愯棌IP鏍囩
+ * 鎺у埗IP鏍囩鐨勬樉绀哄拰闅愯棌
+ * @param {boolean} bool - 鏄惁鏄剧ず锛宼rue琛ㄧず鏄剧ず锛宖alse琛ㄧず闅愯棌
+ */
+screen.hideIp = function (bool) {
+ // 涓嶅啀闇�瑕佹鍑芥暟锛屽洜涓篒P淇℃伅鐜板湪鏄剧ず鍦ㄥ崐閫忔槑瑕嗙洊鍥惧眰涓�
+}
+
+/**
+ * 闅愯棌搴曢儴妗�
+ * 鎺у埗搴曢儴妗嗙殑鏄剧ず鍜岄殣钘�
+ * @param {boolean} bool - 鏄惁鏄剧ず锛宼rue琛ㄧず鏄剧ず锛宖alse琛ㄧず闅愯棌
+ */
+screen.hideBottomBox = function (bool) {
+ if (bool) {
+ mainView.bottomBox.hide()
+ } else {
+ mainView.bottomBox.show()
+ }
+}
+
+/**
+ * 鍒囨崲璇█
+ * 鍒囨崲绯荤粺璇█璁剧疆
+ */
+screen.changeLanguage = function () {
+ i18n.setLanguage(screen.getConfig()['base.language'])
+}
+
+/**
+ * 鍗囩骇鎻愮ず
+ * 鏄剧ず绯荤粺鍗囩骇鎻愮ず淇℃伅
+ * @param {object} data - 鍗囩骇淇℃伅瀵硅薄锛屽寘鍚玹itle鍜宑ontent
+ */
+screen.upgrade = function (data) {
+ const { title, content } = data
+ viewUtils.confirmOpen(title, content)
+}
+
+/**
+ * 鏄剧ず閫氳缁撴灉寮圭獥
+ * @param {object} data - 閫氳缁撴灉鏁版嵁
+ * @param {boolean} data.faceAuth - 浜鸿劯璇嗗埆鏄惁閫氳繃
+ * @param {boolean} data.gasConcentration - 姘斾綋娴撳害鏄惁鍚堟牸
+ * @param {boolean} data.accessAllowed - 鏄惁鍏佽閫氳
+ * @param {string} data.message - 寮圭獥娑堟伅
+ */
+screen.showAccessResult = function (data) {
+ // // 鏄剧ず鐘舵�侀潰鏉匡紝3绉掑悗鑷姩鍏抽棴
+ // if (data.accessAllowed) {
+ // mainView.statusPanel.success(data.message)
+ // } else {
+ // mainView.statusPanel.fail(data.message)
+ // }
+
+
+ // 鏄剧ず灏忓瀷鐘舵�侀潰鏉匡紝3绉掑悗鑷姩鍏抽棴
+ if (data.accessAllowed) {
+ mainView.smallStatusPanel.success(data.message)
+ } else {
+ mainView.smallStatusPanel.fail(data.message)
+ }
+}
+
+export default screen
--
Gitblit v1.9.3