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/view/viewUtils.js | 475 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 475 insertions(+), 0 deletions(-)
diff --git a/vf205_access/src/view/viewUtils.js b/vf205_access/src/view/viewUtils.js
new file mode 100644
index 0000000..9d3c90d
--- /dev/null
+++ b/vf205_access/src/view/viewUtils.js
@@ -0,0 +1,475 @@
+import * as os from "os"
+import dxui from '../../dxmodules/dxUi.js'
+import dxMap from '../../dxmodules/dxMap.js'
+import screen from '../screen.js'
+import pinyin from './pinyin/pinyin.js'
+// import utils from "../common/utils/utils.js"
+import i18n from "./i18n.js"
+import std from '../../dxmodules/dxStd.js'
+
+const viewUtils = {}
+
+viewUtils.font = function (size, style) {
+ return dxui.Font.build('/app/code/resource/font/AlibabaPuHuiTi-2-65-Medium.ttf', size || 14, style || dxui.Utils.FONT_STYLE.NORMAL)
+}
+
+// 璇箟鍖栭鑹�
+viewUtils.color = {
+ // 鎴愬姛锛岀豢鑹�
+ success: 0x00BF8A,
+ // 澶辫触锛岀孩鑹�
+ fail: 0xFF0000,
+ // 璀﹀憡锛岄粍鑹�
+ warning: 0xFFA800,
+ // 榛樿锛氳摑鑹�
+ default: 0x00a8ff
+}
+
+// 娓呴櫎鏍峰紡
+viewUtils._clearStyle = function (obj) {
+ obj.radius(0)
+ obj.borderWidth(0)
+ obj.padAll(0)
+}
+
+// 鍥剧墖鎸夐挳灏佽锛屾寜閽牴鎹浘鐗囧ぇ灏忚缃紝鐭╁舰
+viewUtils.imageBtn = function (parent, id, src, dataI18n, textColor) {
+ const zoom = 1.02
+
+ const imageBox = dxui.View.build(id, parent)
+ viewUtils._clearStyle(imageBox)
+ imageBox.bgOpa(0)
+
+ const image = dxui.Image.build(id + 'image', imageBox)
+ image.source(src)
+ image.update()
+ const width = image.width()
+ const height = image.height()
+ imageBox.setSize(width * zoom + 5, height * zoom + 5)
+ imageBox.scroll(false)
+ image.align(dxui.Utils.ALIGN.CENTER, 0, 0)
+
+ if (dataI18n) {
+ const textLbl = dxui.Label.build(id + 'text', image)
+ textLbl.textFont(viewUtils.font(Math.round(height / 3)))
+ if (textColor !== undefined && textColor !== null) {
+ textLbl.textColor(textColor)
+ } else {
+ textLbl.textColor(0xffffff)
+ }
+ textLbl.align(dxui.Utils.ALIGN.CENTER, 0, 0)
+ textLbl.dataI18n = dataI18n
+ }
+
+ imageBox.on(dxui.Utils.ENUM.LV_EVENT_PRESSED, () => {
+ image.obj.lvImgSetZoom(256 * zoom)
+ })
+
+ imageBox.on(dxui.Utils.ENUM.LV_EVENT_RELEASED, () => {
+ image.obj.lvImgSetZoom(256)
+ })
+
+ return imageBox
+}
+
+// 鍒涘缓鏍囬鏍�
+viewUtils.title = function (parent, backScreen, id, dataI18n, backCb) {
+ const titleBox = dxui.View.build(id, parent)
+ viewUtils._clearStyle(titleBox)
+ titleBox.setSize(800, 70)
+ titleBox.bgColor(0xffffff)
+
+ if (dataI18n) {
+ const titleLbl = dxui.Label.build(id + 'title', titleBox)
+ titleLbl.textFont(viewUtils.font(32))
+ titleLbl.align(dxui.Utils.ALIGN.CENTER, 0, 0)
+ titleLbl.dataI18n = dataI18n
+ }
+
+ const back = viewUtils.imageBtn(titleBox, id + 'back', '/app/code/resource/image/back.png')
+ back.setSize(80, 70)
+ back.align(dxui.Utils.ALIGN.LEFT_MID, 0, 0)
+
+ back.on(dxui.Utils.EVENT.CLICK, () => {
+ if (backScreen) {
+ dxui.loadMain(backScreen)
+ }
+ if (backCb) {
+ backCb()
+ }
+ })
+
+ return titleBox
+}
+
+// 杈撳叆妗�
+viewUtils.input = function (parent, id, mode, enter = () => { }, dataI18n) {
+ const input = dxui.Textarea.build(id + 'input', parent)
+ viewUtils._clearStyle(input)
+ input.align(dxui.Utils.ALIGN.TOP_MID, 0, 100)
+ input.textAlign(dxui.Utils.TEXT_ALIGN.LEFT_MID)
+ input.setOneLine(true)
+ input.borderWidth(2)
+ input.setBorderColor(0xE7E7E7)
+ const font = viewUtils.font(26)
+ const superSetSize = input.setSize
+ input.setSize = (width, height) => {
+ superSetSize.call(input, width, height)
+ input.padAll((height - 4 - font.obj.lvFontGetLineHeight()) / 2)
+ input.padLeft(30)
+ input.padRight(30)
+ }
+ input.setSize(650, 100)
+ input.radius(13)
+ input.textFont(font)
+ if (dataI18n) {
+ // 鍙湁鍦╠xui.all涓紝鎵嶈兘浣跨敤dataI18n
+ dxui.all[id + 'input' + 'obj'] = input.obj
+ input.obj.dataI18n = dataI18n
+ input.obj.text = (text) => {
+ input.obj.lvTextareaSetPlaceholderText(text)
+ }
+ }
+
+ input.on(dxui.Utils.EVENT.CLICK, () => {
+ input.setBorderColor(0x3670f7)
+ pinyin.show(mode || pinyin.getMode(), (data) => {
+ if (typeof data == 'string') {
+ input.lvTextareaAddText(data)
+ } else if (typeof data == 'object') {
+ switch (data.cmd) {
+ case 'enter':
+ enter()
+ pinyin.hide()
+ break
+ case 'backspace':
+ input.lvTextareaDelChar()
+ break
+ }
+ }
+ })
+ if (mode) {
+ pinyin.lock()
+ }
+ })
+ input.on(dxui.Utils.EVENT.DEFOCUSED, () => {
+ dxMap.get("INPUT_KEYBOARD").put("defocus", "defocus")
+ })
+
+ let root = parent
+ let rootId = parent.id
+ while ((rootId = dxui.all[rootId].parent) != "0") {
+ root = dxui.all[rootId]
+ }
+
+ root.on(dxui.Utils.EVENT.CLICK, () => {
+ input.setBorderColor(0xE7E7E7)
+ // pinyin.hide()
+ })
+
+ root.on(dxui.Utils.ENUM.LV_EVENT_SCREEN_UNLOADED, () => {
+ input.setBorderColor(0xE7E7E7)
+ // pinyin.hide()
+ input.text('')
+ })
+ return input
+}
+
+// 纭寮圭獥
+viewUtils.confirmInit = function () {
+ const confirm = dxui.View.build('confirm', dxui.Utils.LAYER.TOP)
+ viewUtils._clearStyle(confirm)
+ confirm.setSize(screen.screenSize.width, screen.screenSize.height)
+ confirm.bgColor(0x0)
+ confirm.bgOpa(50)
+ confirm.hide()
+
+ const box = dxui.View.build('confirmBox', confirm)
+ viewUtils._clearStyle(box)
+ box.setSize(500, 300)
+ box.radius(20)
+ box.align(dxui.Utils.ALIGN.CENTER, 0, 0)
+ box.bgColor(0xffffff)
+
+ const title = dxui.Label.build('confirmTitle', box)
+ title.align(dxui.Utils.ALIGN.TOP_MID, 0, 22)
+ title.textFont(viewUtils.font(30))
+ title.text("Confirm")
+
+ const close = viewUtils.imageBtn(box, 'confirmClose', '/app/code/resource/image/close_small.png')
+ close.align(dxui.Utils.ALIGN.TOP_RIGHT, -28, 18)
+
+ const content = dxui.Label.build('confirmContent', box)
+ content.align(dxui.Utils.ALIGN.TOP_MID, 0, 114)
+ content.textFont(viewUtils.font(24))
+ content.textColor(0x767676)
+ content.text("Are you sure you want to exit?")
+ content.textAlign(dxui.Utils.TEXT_ALIGN.CENTER)
+
+ const ok = dxui.Button.build('okBtn', box)
+ ok.align(dxui.Utils.ALIGN.BOTTOM_LEFT, 69, -31)
+ ok.bgColor(0x0)
+ ok.radius(10)
+ ok.setSize(150, 50)
+ const okLbl = dxui.Label.build('okLbl', ok)
+ okLbl.textFont(viewUtils.font(26))
+ okLbl.dataI18n = 'confirm.ok'
+ okLbl.textColor(0xffffff)
+ okLbl.align(dxui.Utils.ALIGN.CENTER, 0, 0)
+ ok.on(dxui.Utils.EVENT.CLICK, () => {
+ confirm.hide()
+ if (typeof viewUtils.confirm.okFunc == 'function') {
+ viewUtils.confirm.okFunc()
+ }
+ })
+
+ const no = dxui.Button.build('noBtn', box)
+ no.align(dxui.Utils.ALIGN.BOTTOM_RIGHT, -69, -31)
+ no.bgColor(0xF3F3F3)
+ no.radius(10)
+ no.setSize(150, 50)
+ const noLbl = dxui.Label.build('noLbl', no)
+ noLbl.textFont(viewUtils.font(26))
+ noLbl.dataI18n = 'confirm.no'
+ noLbl.align(dxui.Utils.ALIGN.CENTER, 0, 0)
+ noLbl.textColor(0x0)
+ no.on(dxui.Utils.EVENT.CLICK, () => {
+ confirm.hide()
+ })
+
+ close.on(dxui.Utils.EVENT.CLICK, () => {
+ confirm.hide()
+ if (typeof viewUtils.confirm.noFunc == 'function') {
+ viewUtils.confirm.noFunc()
+ }
+ })
+ viewUtils.confirm = { confirm, box, title, close, content, ok, no, okLbl, noLbl }
+}
+
+viewUtils.confirmClose = function () {
+ viewUtils.confirm.confirm.hide()
+}
+
+viewUtils.confirmOpen = function (title, content, ok, no) {
+ viewUtils.confirm.confirm.moveForeground()
+ viewUtils.confirm.title.dataI18n = title
+ viewUtils.confirm.content.dataI18n = content
+ if (ok) {
+ viewUtils.confirm.ok.show()
+ viewUtils.confirm.okFunc = ok
+ } else {
+ viewUtils.confirm.ok.hide()
+ }
+ if (no) {
+ viewUtils.confirm.no.show()
+ viewUtils.confirm.noFunc = no
+ } else {
+ viewUtils.confirm.no.hide()
+ }
+ viewUtils.confirm.confirm.show()
+ i18n.refreshObj(viewUtils.confirm.title)
+ i18n.refreshObj(viewUtils.confirm.content)
+ viewUtils.confirm.content.update()
+ viewUtils.confirm.box.height(viewUtils.confirm.content.height() + 257)
+}
+
+
+viewUtils.bottomBtn = function (parent, id, dataI18n, click, btnColor = 0x000000, textColor = 0xffffff, fontSize = 28) {
+ const btn = dxui.Button.build(id, parent)
+ btn.align(dxui.Utils.ALIGN.BOTTOM_MID, 0, -124)
+ btn.bgColor(btnColor)
+ btn.setSize(620, 100)
+ btn.radius(60)
+ const btnLbl = dxui.Label.build(id + 'lbl', btn)
+ btnLbl.dataI18n = dataI18n
+ btnLbl.textFont(viewUtils.font(fontSize))
+ btnLbl.textColor(textColor)
+ btnLbl.align(dxui.Utils.ALIGN.CENTER, 0, 0)
+ btn.on(dxui.Utils.EVENT.CLICK, click)
+ return btn
+}
+
+// 寰幆婊氬姩
+viewUtils.cycleList = function (parent, id, size, maxNum, template = () => { }, update = () => { }) {
+ const cycleList = dxui.View.build(id, parent)
+ viewUtils._clearStyle(cycleList)
+ cycleList.setSize(size[0], size[1])
+ cycleList.cycleList = []
+ cycleList.cycleIndex = 0
+ for (let i = -1; i < (maxNum + 1); i++) {
+ const cycleItem = dxui.View.build(id + 'item' + i, cycleList)
+ viewUtils._clearStyle(cycleItem)
+ cycleItem.setSize(size[0], size[1] / maxNum)
+ cycleItem.bgOpa(0)
+ cycleItem.borderWidth(1)
+ cycleItem.setBorderColor(0xDEDEDE)
+ cycleItem.obj.setStyleBorderSide(dxui.Utils.ENUM.LV_BORDER_SIDE_BOTTOM, 0)
+ cycleItem.userdata = template(cycleItem)
+ cycleList.cycleIndex = i
+ update(cycleItem.userdata, i)
+ if (cycleList.cycleList.length > 0) {
+ cycleItem.alignTo(cycleList.cycleList[cycleList.cycleList.length - 1], dxui.Utils.ALIGN.OUT_BOTTOM_MID, 0, 0)
+ } else {
+ cycleItem.align(dxui.Utils.ALIGN.TOP_MID, 0, 0)
+ }
+ cycleList.cycleList.push(cycleItem)
+ }
+ cycleList.scrollToY(size[1] / maxNum, false)
+
+ cycleList.on(dxui.Utils.ENUM.LV_EVENT_SCROLL, () => {
+ if (cycleList.scrollTop() >= size[1] / maxNum * 2) {
+ const cycleItem = cycleList.cycleList.shift()
+ cycleList.cycleList.push(cycleItem)
+ for (let i = 0; i < cycleList.cycleList.length; i++) {
+ const item = cycleList.cycleList[i]
+ if (i == 0) {
+ item.align(dxui.Utils.ALIGN.TOP_MID, 0, 0)
+ } else {
+ item.alignTo(cycleList.cycleList[i - 1], dxui.Utils.ALIGN.OUT_BOTTOM_MID, 0, 0)
+ }
+ }
+ cycleList.cycleIndex += 1
+ update(cycleItem.userdata, cycleList.cycleIndex)
+ cycleList.scrollToY(size[1] / maxNum, false)
+ } else if (cycleList.scrollTop() <= 0) {
+ const cycleItem = cycleList.cycleList.pop()
+ cycleList.cycleList.unshift(cycleItem)
+ for (let i = 0; i < cycleList.cycleList.length; i++) {
+ const item = cycleList.cycleList[i]
+ if (i == 0) {
+ item.align(dxui.Utils.ALIGN.TOP_MID, 0, 0)
+ } else {
+ item.alignTo(cycleList.cycleList[i - 1], dxui.Utils.ALIGN.OUT_BOTTOM_MID, 0, 0)
+ }
+ }
+ cycleList.cycleIndex -= 1
+ update(cycleItem.userdata, cycleList.cycleIndex)
+ cycleList.scrollToY(size[1] / maxNum, false)
+ }
+ })
+ cycleList.refresh = () => {
+ cycleList.cycleList.forEach((item, index) => {
+ update(item.userdata, index)
+ })
+ }
+ return cycleList
+}
+
+viewUtils.statusPanel = function (parent, successI18n, failI18n) {
+ const successBg = dxui.Image.build(parent.id + 'successBg', parent)
+ successBg.source('/app/code/resource/image/successBg.png')
+ successBg.align(dxui.Utils.ALIGN.BOTTOM_MID, 0, 0)
+ successBg.hide()
+
+ const successIcon = dxui.Image.build(parent.id + 'successIcon', successBg)
+ successIcon.source('/app/code/resource/image/success_fill.png')
+ successIcon.align(dxui.Utils.ALIGN.CENTER, 0, 0)
+
+ const successLbl = dxui.Label.build(parent.id + 'successLbl', successBg)
+ successLbl.textFont(viewUtils.font(38))
+ successLbl.textColor(0xffffff)
+ successLbl.dataI18n = successI18n
+ successLbl.textAlign(dxui.Utils.TEXT_ALIGN.CENTER)
+ successLbl.align(dxui.Utils.ALIGN.TOP_MID, 0, 244)
+
+ const failBg = dxui.Image.build(parent.id + 'failBg', parent)
+ failBg.source('/app/code/resource/image/failBg.png')
+ failBg.align(dxui.Utils.ALIGN.BOTTOM_MID, 0, 0)
+ failBg.hide()
+
+ const failIcon = dxui.Image.build(parent.id + 'failIcon', failBg)
+ failIcon.source('/app/code/resource/image/delete_fill.png')
+ failIcon.align(dxui.Utils.ALIGN.CENTER, 0, 0)
+
+ const failLbl = dxui.Label.build(parent.id + 'failLbl', failBg)
+ failLbl.textFont(viewUtils.font(38))
+ failLbl.textColor(0xffffff)
+ failLbl.dataI18n = failI18n
+ failLbl.textAlign(dxui.Utils.TEXT_ALIGN.CENTER)
+ failLbl.align(dxui.Utils.ALIGN.TOP_MID, 0, 244)
+
+ return {
+ success: (dataI18n) => {
+ if (dataI18n) {
+ successLbl.dataI18n = dataI18n
+ i18n.refreshObj(successLbl)
+ }
+ successBg.show()
+ failBg.hide()
+ std.setTimeout(() => {
+ successBg.hide()
+ }, 3000)
+ },
+ fail: (dataI18n) => {
+ if (dataI18n) {
+ failLbl.dataI18n = dataI18n
+ i18n.refreshObj(failLbl)
+ }
+ failBg.show()
+ successBg.hide()
+ std.setTimeout(() => {
+ failBg.hide()
+ }, 3000)
+ },
+ successBg: successBg,
+ failBg: failBg
+ }
+}
+
+// 鏂板寮圭獥甯冨眬 - 灏忓瀷鐘舵�侀潰鏉�
+viewUtils.smallStatusPanel = function (parent, successI18n, failI18n) {
+ const successBg = dxui.Image.build(parent.id + 'smallSuccessBg', parent)
+ successBg.source('/app/code/resource/image/view_s.png') // 鎴愬姛鑳屾櫙鍥�
+ successBg.setSize(499, 97) // 璁剧疆灏哄
+ successBg.align(dxui.Utils.ALIGN.BOTTOM_MID, 0, 0)
+ successBg.hide()
+
+ const successLbl = dxui.Label.build(parent.id + 'smallSuccessLbl', successBg)
+ successLbl.textFont(viewUtils.font(24, dxui.Utils.FONT_STYLE.BOLD))
+ successLbl.textColor(0xffffff)
+ successLbl.dataI18n = successI18n
+ successLbl.textAlign(dxui.Utils.TEXT_ALIGN.CENTER)
+ successLbl.align(dxui.Utils.ALIGN.CENTER, 0, 0)
+
+ const failBg = dxui.Image.build(parent.id + 'smallFailBg', parent)
+ failBg.source('/app/code/resource/image/view_f.png') // 澶辫触鑳屾櫙鍥�
+ failBg.setSize(499, 97) // 璁剧疆灏哄
+ failBg.align(dxui.Utils.ALIGN.BOTTOM_MID, 0, 0)
+ failBg.hide()
+
+ const failLbl = dxui.Label.build(parent.id + 'smallFailLbl', failBg)
+ failLbl.textFont(viewUtils.font(24, dxui.Utils.FONT_STYLE.BOLD))
+ failLbl.textColor(0xffffff)
+ failLbl.dataI18n = failI18n
+ failLbl.textAlign(dxui.Utils.TEXT_ALIGN.CENTER)
+ failLbl.align(dxui.Utils.ALIGN.CENTER, 0, 0)
+
+ return {
+ success: (dataI18n) => {
+ if (dataI18n) {
+ successLbl.dataI18n = dataI18n
+ i18n.refreshObj(successLbl)
+ }
+ successBg.show()
+ failBg.hide()
+ std.setTimeout(() => {
+ successBg.hide()
+ }, 3000)
+ },
+ fail: (dataI18n) => {
+ if (dataI18n) {
+ failLbl.dataI18n = dataI18n
+ i18n.refreshObj(failLbl)
+ }
+ failBg.show()
+ successBg.hide()
+ std.setTimeout(() => {
+ failBg.hide()
+ }, 3000)
+ },
+ successBg: successBg,
+ failBg: failBg
+ }
+}
+
+export default viewUtils
\ No newline at end of file
--
Gitblit v1.9.3