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/dxmodules/uiUtils.js |  292 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 292 insertions(+), 0 deletions(-)

diff --git a/vf205_access/dxmodules/uiUtils.js b/vf205_access/dxmodules/uiUtils.js
new file mode 100644
index 0000000..eae2a07
--- /dev/null
+++ b/vf205_access/dxmodules/uiUtils.js
@@ -0,0 +1,292 @@
+//build锛�20240315
+//鍏敤鐨勪竴浜涘嚱鏁般�佸父閲忋�佹灇涓剧瓑
+import { uiClass } from '../dxmodules/libvbar-m-dxui.so'
+import logger from './dxLogger.js'
+const ui = new uiClass();
+// 鍒濆鍖杣i缁勪欢
+ui.init()
+
+let utils = {}
+utils.GG = NativeObject.APP.NativeComponents
+utils.ENUM = utils.GG.NativeEnum
+utils.LAYER = {
+    "MAIN": 0,
+    "SYS": 1,
+    "TOP": 2
+}
+utils.EVENT = {
+    "CLICK": 7,
+    "LONG_PRESSED": 5,
+    "SHORT_PRESSED": 4,
+    "PRESSING": utils.ENUM.LV_EVENT_PRESSING,
+    "FOCUSED": utils.ENUM.LV_EVENT_FOCUSED,
+    "DEFOCUSED": utils.ENUM.LV_EVENT_DEFOCUSED,
+    "VALUE_CHANGED": utils.ENUM.LV_EVENT_VALUE_CHANGED,
+    "INSERT": utils.ENUM.LV_EVENT_INSERT,
+    "REFRESH": utils.ENUM.LV_EVENT_REFRESH,
+    "READY": utils.ENUM.LV_EVENT_READY,
+    "CANCEL": utils.ENUM.LV_EVENT_CANCEL,
+}
+utils.TEXT_ALIGN = {
+    "AUTO": 0,
+    "LEFT": 1,
+    "CENTER": 2,
+    "RIGHT": 3
+}
+utils.STATE = {
+    "DEFAULT": utils.ENUM.LV_STATE_DEFAULT,
+    "CHECKED": utils.ENUM.LV_STATE_CHECKED,
+    "FOCUSED": utils.ENUM.LV_STATE_FOCUSED,
+    "FOCUS_KEY": utils.ENUM.LV_STATE_FOCUS_KEY,
+    "EDITED": utils.ENUM.LV_STATE_EDITED,
+    "HOVERED": utils.ENUM.LV_STATE_HOVERED,
+    "PRESSED": utils.ENUM.LV_STATE_PRESSED,
+    "SCROLLED": utils.ENUM.LV_STATE_SCROLLED,
+    "DISABLED": utils.ENUM.LV_STATE_DISABLED,
+}
+utils.OBJ_FLAG = {
+    "CLICKABLE": utils.ENUM.LV_OBJ_FLAG_CLICKABLE,
+}
+utils.ALIGN = {//鐩稿鍙傜収瀵硅薄鐨勪綅缃紝甯� OUT 鐨勫湪鍙傜収瀵硅薄鐨勮竟鐣屽
+    "OUT_TOP_LEFT": utils.ENUM.LV_ALIGN_OUT_TOP_LEFT,
+    "OUT_TOP_MID": utils.ENUM.LV_ALIGN_OUT_TOP_MID,
+    "OUT_TOP_RIGHT": utils.ENUM.LV_ALIGN_OUT_TOP_RIGHT,
+    "OUT_BOTTOM_LEFT": utils.ENUM.LV_ALIGN_OUT_BOTTOM_LEFT,
+    "OUT_BOTTOM_MID": utils.ENUM.LV_ALIGN_OUT_BOTTOM_MID,
+    "OUT_BOTTOM_RIGHT": utils.ENUM.LV_ALIGN_OUT_BOTTOM_RIGHT,
+    "OUT_LEFT_TOP": utils.ENUM.LV_ALIGN_OUT_LEFT_TOP,
+    "OUT_LEFT_MID": utils.ENUM.LV_ALIGN_OUT_LEFT_MID,
+    "OUT_LEFT_BOTTOM": utils.ENUM.LV_ALIGN_OUT_LEFT_BOTTOM,
+    "OUT_RIGHT_TOP": utils.ENUM.LV_ALIGN_OUT_RIGHT_TOP,
+    "OUT_RIGHT_MID": utils.ENUM.LV_ALIGN_OUT_RIGHT_MID,
+    "OUT_RIGHT_BOTTOM": utils.ENUM.LV_ALIGN_OUT_RIGHT_BOTTOM,
+    "TOP_LEFT": utils.ENUM.LV_ALIGN_TOP_LEFT,
+    "TOP_MID": utils.ENUM.LV_ALIGN_TOP_MID,
+    "TOP_RIGHT": utils.ENUM.LV_ALIGN_TOP_RIGHT,
+    "BOTTOM_LEFT": utils.ENUM.LV_ALIGN_BOTTOM_LEFT,
+    "BOTTOM_MID": utils.ENUM.LV_ALIGN_BOTTOM_MID,
+    "BOTTOM_RIGHT": utils.ENUM.LV_ALIGN_BOTTOM_RIGHT,
+    "LEFT_MID": utils.ENUM.LV_ALIGN_LEFT_MID,
+    "RIGHT_MID": utils.ENUM.LV_ALIGN_RIGHT_MID,
+    "CENTER": utils.ENUM.LV_ALIGN_CENTER,
+    "DEFAULT": utils.ENUM.LV_ALIGN_DEFAULT
+}
+utils.FLEX_ALIGN = {//flex甯冨眬锛屽榻愭柟寮�
+    "START": utils.ENUM.LV_FLEX_ALIGN_START,
+    "END": utils.ENUM.LV_FLEX_ALIGN_END,
+    "CENTER": utils.ENUM.LV_FLEX_ALIGN_CENTER,
+    "SPACE_EVENLY": utils.ENUM.LV_FLEX_ALIGN_SPACE_EVENLY,
+    "SPACE_AROUND": utils.ENUM.LV_FLEX_ALIGN_SPACE_AROUND,
+    "SPACE_BETWEEN": utils.ENUM.LV_FLEX_ALIGN_SPACE_BETWEEN,
+}
+utils.FLEX_FLOW = {//flex甯冨眬锛屼富渚ц酱
+    "ROW": utils.ENUM.LV_FLEX_FLOW_ROW,
+    "COLUMN": utils.ENUM.LV_FLEX_FLOW_COLUMN,
+    "ROW_WRAP": utils.ENUM.LV_FLEX_FLOW_ROW_WRAP,
+    "ROW_REVERSE": utils.ENUM.LV_FLEX_FLOW_ROW_REVERSE,
+    "ROW_WRAP_REVERSE": utils.ENUM.LV_FLEX_FLOW_ROW_WRAP_REVERSE,
+    "COLUMN_WRAP": utils.ENUM.LV_FLEX_FLOW_COLUMN_WRAP,
+    "COLUMN_REVERSE": utils.ENUM.LV_FLEX_FLOW_COLUMN_REVERSE,
+    "COLUMN_WRAP_REVERSE": utils.ENUM.LV_FLEX_FLOW_COLUMN_WRAP_REVERSE,
+}
+utils.GRAD = {//娓愬彉鑹叉柟鍚�
+    "NONE": utils.ENUM.LV_GRAD_DIR_NONE,
+    "VER": utils.ENUM.LV_GRAD_DIR_VER,
+    "HOR": utils.ENUM.LV_GRAD_DIR_HOR,
+}
+utils.KEYBOARD = {//閿洏妯″紡
+    "TEXT_LOWER": utils.ENUM.LV_KEYBOARD_MODE_TEXT_LOWER,
+    "TEXT_UPPER": utils.ENUM.LV_KEYBOARD_MODE_TEXT_UPPER,
+    "SPECIAL": utils.ENUM.LV_KEYBOARD_MODE_SPECIAL,
+    "NUMBER": utils.ENUM.LV_KEYBOARD_MODE_NUMBER,
+    "K26": "K26",
+    "K9": "K9",
+}
+utils.FONT_STYLE = {
+    "NORMAL": utils.ENUM.FT_FONT_STYLE_NORMAL,
+    "ITALIC": utils.ENUM.FT_FONT_STYLE_ITALIC,
+    "BOLD": utils.ENUM.FT_FONT_STYLE_BOLD,
+}
+utils.BUTTONS_STATE = {
+    "HIDDEN": utils.ENUM.LV_BTNMATRIX_CTRL_HIDDEN,//鎸夐挳鐭╅樀涓殑鏌愪釜鎸夐挳鏄惁闅愯棌
+    "NO_REPEAT": utils.ENUM.LV_BTNMATRIX_CTRL_NO_REPEAT,//鎸夐挳鐭╅樀涓殑鎸夐挳鏄惁鍙互閲嶅鎸変笅,涓嶄細閲嶅瑙﹀彂鎸夐敭浜嬩欢
+    "DISABLED": utils.ENUM.LV_BTNMATRIX_CTRL_DISABLED,//鎸夐挳鐭╅樀涓殑鏌愪釜鎸夐挳鏄惁绂佺敤
+    "CHECKABLE": utils.ENUM.LV_BTNMATRIX_CTRL_CHECKABLE,//鎸夐挳鐭╅樀涓殑鎸夐挳鏄惁鍙�変腑
+    "CHECKED": utils.ENUM.LV_BTNMATRIX_CTRL_CHECKED,//鎸夐挳鐭╅樀涓殑鏌愪釜鎸夐挳鏄惁宸茶閫変腑,鍦ㄧ晫闈笂鍛堢幇涓鸿閫変腑鐘舵��
+    "CLICK_TRIG": utils.ENUM.LV_BTNMATRIX_CTRL_CLICK_TRIG,//鎸夐挳鐭╅樀涓殑鎸夐挳鏄惁鍙互閫氳繃鐐瑰嚮瑙﹀彂
+    "POPOVER": utils.ENUM.LV_BTNMATRIX_CTRL_POPOVER,//鐭╅樀涓殑鏌愪釜鎸夐挳鏄惁寮瑰嚭,琚偣鍑诲悗浼氭樉绀烘洿澶氱殑閫夐」鎴栧唴瀹�
+    "RECOLOR": utils.ENUM.LV_BTNMATRIX_CTRL_RECOLOR//鐭╅樀涓殑鎸夐挳鏄惁鍙噸鏂扮潃鑹�
+}
+//鏍峰紡璧蜂綔鐢ㄧ殑閮ㄥ垎
+utils.STYLE_PART = {
+    "MAIN": 0, //瀵硅薄褰撳墠鏍峰紡璧蜂綔鐢�
+    "ITEMS": 327680//瀵硅薄鍐呴儴瀛愰」璧蜂綔鐢紝姣斿buttonMatrix閲岀殑鎸夐挳缁�
+}
+//鏂囨湰瓒呭嚭鎺т欢鏄剧ず鐨勬ā寮�
+utils.LABEL_LONG_MODE = {
+    "WRAP": utils.ENUM.LV_LABEL_LONG_WRAP,//鏂囨湰闀跨殑鏃跺�欐崲琛�
+    "DOT": utils.ENUM.LV_LABEL_LONG_DOT,//鏂囨湰闀跨殑鏃跺�欑敤...鏇夸唬
+    "SCROLL": utils.ENUM.LV_LABEL_LONG_SCROLL,//鏂囨湰闀跨殑鏃跺�欒嚜鍔ㄦ粴鍔�
+    "SCROLL_CIRCULAR": utils.ENUM.LV_LABEL_LONG_SCROLL_CIRCULAR,//鏂囨湰闀跨殑鏃跺�欏惊鐜粴鍔�
+    "CLIP": utils.ENUM.LV_LABEL_LONG_CLIP,//鏂囨湰闀跨殑鏃跺�欒嚜鍔ㄦ埅鏂�
+}
+// 瀹炵幇0-100鏄犲皠涓�0-255
+utils.OPA_MAPPING = function (value) {
+    return Math.round((value / 100) * 255);
+}
+/**
+* 鏍¢獙鏁板瓧鏄惁涓虹┖锛屾槸鍚︿负number
+* @param {number} n 蹇呭~
+* @param {err} 閿欒淇℃伅锛岄潪蹇呭~锛屽~浜嗕細鎶涘嚭Error
+*/
+utils.validateNumber = function (n, err) {
+    return _valid(n, 'number', err)
+}
+/**
+* 鏍¢獙瀵硅薄鏄惁涓虹┖锛屾槸鍚︿负object
+* @param {object} o 蹇呭~
+* @param {err} 閿欒淇℃伅锛岄潪蹇呭~锛屽~浜嗕細鎶涘嚭Error
+*/
+utils.validateObject = function (o, err) {
+    return _valid(o, 'object', err)
+}
+/**
+ * 鏍¢獙ui瀵硅薄鐨勬瀯寤哄弬鏁�
+ * @param {array} all 蹇呭~,鎵�鏈夊璞″紩鐢�
+ * @param {string} id 涓嶈兘涓虹┖锛屽繀濉�
+ * @param {object} parent 闈炲繀濉紝缂虹渷鏄�0
+ */
+utils.validateBuild = function (all, id, parent, type) {
+    this.validateId(all, id)
+    if (parent === 0 || parent === 1 || parent === 2) {
+        return parent
+    }
+    if (!parent || !parent.obj) {
+        throw new Error(type + ".build: 'parent' paramter should not be null")
+    }
+    return parent.obj
+}
+/**
+ * 鏍¢獙鎵�鏈塽i鎺т欢鐨刬d锛屼笉鑳介噸澶�
+ * @param {array} all 
+ * @param {string} id 
+ */
+utils.validateId = function (all, id) {
+    this.validateString(id, "The 'id' parameter should not be null.")
+    if (all[id]) {
+        throw new Error("The id(" + id + ") already exists. Please set a different id value.")
+    }
+}
+/**
+* 鏍¢獙瀛楃涓叉槸鍚︿负绌�
+* @param {string} s 蹇呭~
+* @param {err} 閿欒淇℃伅锛岄潪蹇呭~锛屽~浜嗕細鎶涘嚭Error
+*/
+utils.validateString = function (s, err) {
+    let res = _valid(s, 'string', err)
+    if (!res) {
+        return false
+    }
+    if (s.length <= 0) {
+        if (err) {
+            throw new Error(err)
+        }
+        return false
+    }
+    return true
+}
+/**
+ * 瑙f瀽涓嶅悓绫诲瀷鐨勯鑹插��
+ * @param {any} value 鏀寔鏁板瓧绫诲瀷锛�0x34ffaa锛屽瓧绗︿覆绫诲瀷:'0x34ffaa',瀛楃涓茬被鍨�:'#34ffaa'
+ * @returns 
+ */
+utils.colorParse = function (value) {
+    if (typeof value == 'string') {
+        value = value.replace('#', '0x')
+        value = parseInt(value, 16)
+    }
+    return value
+}
+/**
+ * 鑾峰彇瑙︽懜鐐圭殑鍧愭爣
+ * @returns {x:妯潗鏍�,y:绾靛潗鏍噠
+ */
+utils.getTouchPoint = function () {
+    let point = NativeObject.APP.NativeComponents.NativeIndev.lvIndevGetPoint()
+    return point
+}
+/**
+ * 鎻愪緵鍔ㄧ敾
+ * @param {object} obj 鍔ㄧ敾鎿嶄綔瀵硅薄锛屽彲浠ユ槸浠绘剰瀵硅薄锛屽洖璋冨弬鏁拌幏鍙�
+ * @param {number} start 鍖洪棿寮�濮嬪�硷紝涓�鑸拰end鎼厤浣跨敤锛屽洖璋冨弬鏁拌幏鍙栵紝start鍦ㄥ姩鐢昏繃绋嬪彉鍖栧埌end
+ * @param {number} end 鍖洪棿缁撴潫鍊�
+ * @param {function} cb 鍥炶皟鍑芥暟(obj, v)=>{},obj鍗冲姩鐢绘搷浣滃璞★紝鍖洪棿鍊硷紙start-end锛�
+ * @param {number} duration 鍔ㄧ敾鎸佺画鏃堕棿锛屾绉�
+ * @param {number} backDuration 鍙�夛紝鍔ㄧ敾鍥炴斁鏃堕棿锛屾绉掞紝缂虹渷涓嶅洖鏀�
+ * @param {number} repeat 鍙�夛紝鍔ㄧ敾閲嶅娆℃暟锛岀己鐪�1娆�
+ * @param {string} mode 閫熺巼鏇茬嚎锛屽彲閫夛紝缂虹渷linear锛屽唴缃姛鑳斤細linear,ease_in,ease_out,ease_in_out,overshoot,bounce,step
+ *  linear 绾挎�у姩鐢�
+    step 鍦ㄦ渶鍚庝竴姝ユ洿鏀�
+    ease_in 寮�濮嬬紦鎱�
+    ease_out 鏈�鍚庣紦鎱�
+    ease_in_out 鍦ㄥ紑濮嬪拰缁撴潫鏃堕兘寰堢紦鎱�
+    overshoot 瓒呭嚭鏈�缁堝��
+    bounce 浠庢渶缁堝�煎弽寮逛竴鐐癸紙姣斿鎾炲埌澧欙級
+ * @returns 鍔ㄧ敾瀹炰緥锛屼竴瀹氬緱淇濆瓨鍒板叏灞�
+ */
+utils.anime = function (obj, start, end, cb, duration, backDuration, repeat, mode) {
+    // 1銆佸垵濮嬪寲鍔ㄧ敾
+    let anim = NativeObject.APP.NativeComponents.NativeAnim.lvAnimInit()
+    // 2銆佽缃姩鐢诲璞�
+    anim.lvAnimSetVar(obj)
+    // 3銆佽缃捣濮嬪拰缁撴潫鍊�
+    anim.lvAnimSetValues(start, end)
+    //4銆佽缃姩鐢诲洖璋冨嚱鏁�
+    anim.lvAnimSetExecCb(cb)
+    // 5銆佽缃姩鐢绘椂闂�
+    anim.lvAnimSetTime(duration)
+    // 鍙�夛紝璁剧疆鍔ㄧ敾鍥炴斁鏃堕棿锛屼笉璁剧疆灏变笉鍥炴斁
+    if (backDuration) {
+        anim.lvAnimSetPlaybackTime(backDuration)
+    }
+    // 鍙�夛紝璁剧疆鍔ㄧ敾閲嶅娆℃暟
+    if (repeat) {
+        anim.lvAnimSetRepeatCount(repeat)
+    }
+    // 鍙�夛紝璁剧疆鍔ㄧ敾閫熺巼鏇茬嚎
+    if (mode) {
+        anim.lvAnimSetPathCb(mode)
+    }
+    // 6銆佽繍琛屽姩鐢�
+    anim.lvAnimStart()
+    return anim
+}
+//姣忎釜瀵硅薄璁剧疆parent鍜宑hildren
+utils.setParent = function (all, child, parent) {
+    if (!all || parent == null || parent == undefined || !child) {
+        return
+    }
+    if((typeof parent)=='number'){
+
+    }
+    const parentId = ((typeof parent)=='number')?'' + parent:parent.id//鎶�0锛�1锛�2杞垚瀛楃涓�
+    if (!all[parentId]) {
+        all[parentId] = { id: parentId }//鏍硅妭鐐�0,1,2
+    }
+    if (!all[parentId].children) {
+        all[parentId].children = []
+    }
+    all[parentId].children.push(child.id)
+    child.parent = parentId
+    all[child.id] = child
+}
+function _valid(n, type, err) {
+    if (n === undefined || n === null || (typeof n) != type) {
+        if (err) {
+            throw new Error(err)
+        }
+        return false
+    }
+    return true
+}
+export default utils
\ No newline at end of file

--
Gitblit v1.9.3