当前位置: 首页 > news >正文

汉王、绘王签字版调用封装

说明

需要配合汉王或绘王签字版驱动以及对应的sdk服务使用

constants.js

//汉王、绘王sdk websocket连接地址
export const WS_URLS ={1:'ws://127.0.0.1:29999', //汉王2:'ws://127.0.0.1:7181',
}export const COMMAND1 = {1: {HWPenSign: "HWStartSign",nLogo: "签字",width: "1280",height: "800",key: "", //签字版signkey! 签字版signkey! 签字版signkey!fingerFap: "1",pencolor: "000000",//笔迹颜色,RGBbackcolor: "FFDDff",//背景颜色,RGBtopcolor: "FF0000",//顶部颜色logosize: "30",//左上角文字大小logocolor: "000000",//左上角文字颜色,BGR排序logotype: "黑体",//宋体、Arial、微软雅黑、黑体可以应用frameWidth: "3",//边框宽度framecolor: "adadad",//边框颜色,RGBokcolor: "FA8072",//确定按钮颜色resigncolor: "FFA500",//重签按钮颜色okTextColor: "B22222",//确定按钮文本颜色resignTextColor: "F5F5DC",//重签按钮文本颜色RGBokTextFont: "华文新魏",//确定按钮文本字体,C:/Winodws/fonts/ 下的字体文件,部分字体无法显示resignTextFont: "隶书",//重签按钮文本字体okTextSize: "20",resignTextSize: "20",//重签按钮文本内容OkButtonText: "确定",//确定按钮文本内容ResignButtonText: "重签",logoXAxis: "10",//左上角文字X坐标logoYAxis: "15",//左上角文字Y坐标okXAxis: "1150",//确定按钮X坐标okYAxis: "5",//确定按钮Y坐标resignXAxis: "1018",//重签按钮X坐标resignYAxis: "5",//重签按钮Y坐标topHeight: "30",//标题区高度roundValue: "30",//按钮圆角ButtonHeight: "60",ButtonWidth: "120",fingerTextColor: "000000",//指纹按钮文本颜色fingerTextFont: "Simsun",//指纹按钮文本字体fingercolor: "3ff3e4",//指纹按钮颜色 RGBfingerTextSize: "20",//指纹按钮文本大小FingerButtonText: "采集指纹",//指纹按钮文本内容fingerXAxis: "885",//指纹按钮X坐标fingerYAxis: "5",//指纹按钮Y坐标
},2:'begin'
}export const COMMAND2 ={1:{HWPenSign: "HWEndSign"},2:'end'
}export const toString = (val)=>{return typeof val==='string' ?  val: JSON.stringify(val)
}

signBoard.js

import {Alert} from "./alert"; //弹窗提示可去除
import {toString, COMMAND1, WS_URLS, COMMAND2} from './constants'export class SignBoard {constructor(type = 1) {this.type = typethis.socket = nullthis._debounce = nullthis._bus = {}this._isReady = falsethis.onMessage = null}_onHanWangResponse(res) {if (typeof res === "object" && res.msgID === 0 && res.HWPenSign === "HWGetSign") {Alert.success('已操作')//签字成功事件返回this._bus.message.forEach(item => {typeof item === "function" && item(res)})typeof this.onMessage === "function" && this.onMessage(res)}if (this._debounce) clearTimeout(this._debounce)this._debounce = setTimeout(() => {if (typeof res === 'object' && res.msgID === 0 && res.HWPenSign === 'HWGetStatus') {res.DeviceStatus === 1 ? Alert.success('设备正常') : Alert.error('设备不存在')}if (typeof res === 'object' && res.msgID !== 0) {Alert.error(res.message || '设备异常')}}, 200)}_onHuiWangResponse(data) {try {if (data.type == 1) {const base64Img = "data:image/jpg;base64," + data.data;//签字成功事件返回const response = {message: base64Img,msgID:0,HWPenSign:'HWGetSign'}this._bus.message.forEach(item => {typeof item === "function" && item(response)})typeof this.onMessage === "function" && this.onMessage(response)} else {Alert.error('绘王签字版异常')}} catch (e) {console.log('[绘王签字版错误]', e);}}connect() {if (this._isReady){return}this._isReady = truethis.socket = new WebSocket(WS_URLS[this.type])this.socket.onopen = () => {this.socket.send(toString({HWPenSign: "HWGetDeviceStatus"}))}this.socket.onmessage = ({data}) => {const res = data.indexOf('{') > -1 ? JSON.parse(data) : data;if (this.type === 1) {this._onHanWangResponse(res)} else {this._onHuiWangResponse(res)}}this.socket.onclose = () => {this._isReady = false}this.socket.onerror = () => {this._isReady = falsesetTimeout(()=>{this.connect()},5000)}}disconnect() {this.socket && this.socket.close()}on(name = '', fun) {(this._bus[name] || (this._bus[name] = [])).push(fun)}off(name = '', fun) {this._bus[name] && this._bus[name].forEach((item, i) => {if (fun === item) {this._bus[name].splice(i, 1)}})}startSign() {this.socket.send(toString(COMMAND1[this.type]))}closeSign() {this.socket.send(toString(COMMAND2[this.type]))}
}const signType = 1
export default new SignBoard(signType)

相关文章:

汉王、绘王签字版调用封装

说明 需要配合汉王或绘王签字版驱动以及对应的sdk服务使用 constants.js //汉王、绘王sdk websocket连接地址 export const WS_URLS {1:ws://127.0.0.1:29999, //汉王2:ws://127.0.0.1:7181, }export const COMMAND1 {1: {HWPenSign: "HWStartSign",nLogo: "…...

如何在TikTok上获得更多观看量:12个流量秘诀

TikTok作为热门海外社媒,在跨境出海行业中成为新兴的推广渠道,但你知道如何让你的TikTok赢得更多关注次数吗?如果您正在寻找增加 TikTok 观看次数的方法,接下来这12种策略,你需要一一做好! 1. 在内容中添加…...

vue模板语法v-html

模板语法v-html vue使用一种基于HTML的模板语法,使我们能够声明式的将其组件实例的数据绑定到呈现的DOM上,所有的vue模板都是语法层面的HTML,可以被符合规范的浏览器和HTML解释器解析。 一.文本插值 最基本的数据绑定形式是文本插值&#…...

13 Redis-- 数据一致性模型、MySQL 和 Redis 的数据一致性

数据一致性模型 根据一致性的强弱分类,可以将一致性模型按以下顺序排列: 强一致性 > 最终一致性 > 弱一致性 数据一致性模型一般用于分布式系统中,目的是定义多个节点间的同步规范。 在这里,我们将其引入数据库和缓存组…...

启动Nuxt-hub-starter: Failed to initialize wrangler bindings proxy write EOF

重新安装 node.js 这样做可以确保下载到了适合的 Windows 框架、Chocolatey(一款Windows包管理工具)、Python 等资源。 这个错误与Node版本、pnpm/yarn 的版本无关! Node.js — Download Node.js (nodejs.org)...

技术驱动旅游创新!深度解析景区导览小程序的地图渲染与AR导航技术

随着现代生活节奏的加快,人们在外出旅游时更倾向于轻便出行,携带导览地图已成为过去。然而,面对景区广阔的面积和众多景点,游客常常感到迷茫,难以快速定位到自己所需的地点。景区导览小程序让游客只需搜索景区名称&…...

二叉树之遍历

二叉树之遍历 二叉树遍历遍历分类前序遍历流程描述代码实现 中序遍历流程描述代码实现 后序遍历流程描述代码实现 层次遍历流程描述代码实现 总结 二叉树遍历 遍历分类 遍历二叉树的思路有 4 种,分别是: 前序遍历二叉树,有递归和非递归两种…...

【经验贴】如何做好自己的职业规划(技术转项目经理)

我有几个问题想问大家 第一,你了解自己吗?你知道自己想要是什么吗?你了解自己的优势劣势吗? 第二,你了解这个行业吗?你知道这个行业是如何发展起来的吗?你了解这个行业的背景吗?你…...

【笔记】字符串相似度代码分享

目录 一、算法介绍1、算法1)基于编辑距离2)基于标记3)基于序列4)基于压缩5)基于发音6)简单算法 2、安装 二、代码demo1、Hamming 距离2、Levenshtein 距离3、Damerau-Levenshtein距离4、Jaro 相似度5、Jaro…...

AI墓地:738个倒闭AI项目的启示

近年来,人工智能技术迅猛发展,然而,不少AI项目却在市场上悄然消失。根据AI工具聚合网站“DANG”的统计,截至2024年6月,共有738个AI项目停运或停止维护。本文将探讨这些AI项目失败的原因,并分析当前AI初创企…...

工程文件参考——CubeMX+LL库+SPI主机 阻塞式通用库

文章目录 前言CubeMX配置SPI驱动实现spi_driver.hspi_driver.c 额外的接口补充 前言 SPI,想了很久没想明白其DMA或者IT比较好用的方法,可能之后也会写一个 我个人使用场景大数据流不多,如果是大批量数据交互自然是DMA更好用,但考…...

LLM - 模型历史

...

Go语言中的时间与日期处理:time包详解

在Go语言中,time包提供了丰富而强大的功能来处理时间和日期,这对于构建精确计时、定时任务、日期格式化等应用场景至关重要。本文将深入浅出地探讨time包的核心概念、常见问题、易错点及其规避策略,并通过实用代码示例加深理解。 一、时间与…...

Java实现单点登录(SSO)详解:从理论到实践

✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心哦!✨✨ 🎈🎈作者主页: 喔的嘛呀🎈🎈 ✨✨ 帅哥美女们,我们共同加油!一起进步&am…...

【leetcode82-91动态规划,91-95多维动态规划】

动态规划【82-91】 多维动态规划【91-95】...

Django学习第四天

启动项目命令 python manage.py runserver 分页功能封装到类中去 封装的类的代码 """ 自定义的分页组件,以后如果想要使用这个分页组件,你需要做: def pretty_list(request):# 靓号列表data_dict {}search_data request.GET.get(q, &…...

redis-benchmark 使用

Redis 自带了一个叫 redis-benchmark 的工具来模拟 N 个客户端同时发出 M 个请求。 Usage: redis-benchmark [-h <host>] [-p <port>] [-c <clients>] [-n <requests>] [-k <boolean>]-h <hostname> Server hostname (default 127.0…...

什么是 qobject_cast?

前言 在 C++ 中,类型转换是一项常见的操作,比如将 int 转换为 char 或将 QString 用于 QMessageBox。但是,为什么我们需要将一个类转换为另一个类呢?本文将解释 qobject_cast 是什么,它的作用以及为什么需要类型转换。 dynamic_cast 和 qobject_cast 的概述 什么是 dyn…...

Python酷库之旅-第三方库Pandas(001)

目录 一、Pandas库的由来 1、背景与起源 1-1、开发背景 1-2、起源时间 2、名称由来 3、发展历程 4、功能与特点 4-1、数据结构 4-2、数据处理能力 5、影响与地位 5-1、数据分析“三剑客”之一 5-2、社区支持 二、Pandas库的应用场景 1、数据分析 2、数据清洗 3…...

Firefox 编译指南2024 Windows10篇- 编译Firefox(三)

1.引言 在成功获取了Firefox源码之后&#xff0c;下一步就是将这些源码编译成一个可执行的浏览器。编译是开发流程中的关键环节&#xff0c;通过编译&#xff0c;我们可以将源代码转换为可执行的程序&#xff0c;测试其功能&#xff0c;并进行必要的优化和调试。 对于像Firef…...

如何快速掌握ncmdumpGUI:Windows平台网易云音乐NCM文件转换完整教程

如何快速掌握ncmdumpGUI&#xff1a;Windows平台网易云音乐NCM文件转换完整教程 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换&#xff0c;Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾经下载了网易云音乐的…...

VisualCppRedist AIO:Windows系统依赖问题终极解决方案,一键修复所有VC++运行库

VisualCppRedist AIO&#xff1a;Windows系统依赖问题终极解决方案&#xff0c;一键修复所有VC运行库 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经…...

SuperCom串口调试工具终极指南:快速解决嵌入式开发中的通信难题

SuperCom串口调试工具终极指南&#xff1a;快速解决嵌入式开发中的通信难题 【免费下载链接】SuperCom SuperCom 是一款串口调试工具 项目地址: https://gitcode.com/gh_mirrors/su/SuperCom 想象一下这样的场景&#xff1a;你正在调试一个嵌入式设备&#xff0c;需要同…...

如何快速上手SoundMind:10分钟完成音频逻辑推理模型训练

如何快速上手SoundMind&#xff1a;10分钟完成音频逻辑推理模型训练 【免费下载链接】SoundMind We introduce the Audio Logical Reasoning (ALR) dataset, consisting of 6,446 text-audio annotated samples specifically designed for complex reasoning tasks. Building o…...

压测不只是加并发:我们模拟真实用户行为后,发现了隐藏瓶颈

在性能测试领域&#xff0c;一个根深蒂固的误解是&#xff1a;压测就是使劲加线程数&#xff0c;看系统什么时候崩。很多团队用 JMeter 起 500 个并发&#xff0c;照着接口列表跑一圈&#xff0c;看到 TPS 平稳、响应时间没超过 300ms&#xff0c;就觉得万事大吉。可一旦上线&a…...

【仅限首批200家认证用户】DeepSeek v3.2.1重复检测私有化部署补丁包(含GPU内存泄漏热修复+增量扫描加速模块)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;DeepSeek代码重复检测 DeepSeek-R1 模型在训练过程中引入了严格的代码去重机制&#xff0c;其核心目标是消除训练语料中语义等价或高度相似的代码片段&#xff0c;从而提升模型对真实编程模式的学习能力…...

初创团队如何借助Taotoken以低成本快速验证AI产品创意

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 初创团队如何借助Taotoken以低成本快速验证AI产品创意 对于资源有限的初创团队而言&#xff0c;验证一个AI产品创意的核心挑战往往…...

Keil uVision调试器变量监视问题解析与解决方案

1. Keil uVision调试器变量监视问题解析在嵌入式开发领域&#xff0c;Keil uVision作为经典的集成开发环境(IDE)&#xff0c;其调试功能是开发者排查问题的重要工具。但许多初次接触8051或C251架构的工程师都会遇到一个看似简单却令人困惑的问题——为什么在Watch窗口无法正确显…...

IDE 重构(Refactoring)详解 + 实例代码

IDE 重构&#xff08;Refactoring&#xff09;详解 实例代码 重构是指在不改变代码外部行为的前提下&#xff0c;对代码内部结构进行调整、优化&#xff0c;使代码更易读、易维护、易扩展的过程。IDE&#xff08;集成开发环境&#xff09;是重构的最强助手&#xff0c;它能自动…...

Frida-Agent-Example实战指南:Native层动态插桩核心原理与工程落地

1. 这不是“又一个 Frida 教程”&#xff0c;而是一份能直接进项目、改代码、抓数据的实战手记你有没有遇到过这样的场景&#xff1a;App 里某个关键接口返回的数据结构藏在层层混淆的 Java/Kotlin 方法里&#xff0c;反编译出来的 smali 逻辑像天书&#xff1b;或者某个加密参…...