import SoftKey3W from "@/utils/Syunew3"; import { defineStore } from 'pinia'; import { ref } from 'vue'; export const useUKeyStore = defineStore('ukey', () => { // 判断是否安装了客户端服务,0未安装,1已安装 const connect = ref(0); // uKey的插拔状态 const isIn = ref(0); // uKey的唯一编号 const id = ref(""); function getId() { if (isIn.value) { return id.value; } else { return ""; } } function changeIsIn(val) { isIn.value = val; } function changeConnect(val) { connect.value = val; } function changeUKeyId(val) { id.value = val; } /** * 监控uKey的插拔事件 * @param context * @returns {boolean} */ function load() { //如果是IE10及以下浏览器,则跳过不处理, if (navigator.userAgent.indexOf("MSIE") > 0 && !navigator.userAgent.indexOf("opera") > -1) { //该例子只支持HTM5的浏览器 return; } try { let s_pnp = new SoftKey3W();//创建UK类 // context.commit('changeConnect', 0); //客户端服务安装状态 changeConnect(0); s_pnp.Socket_UK.onopen = () => { changeConnect(1);//代表已经连接,用于判断是否安装了客户端服务 } // uKey插拔事件监听 s_pnp.Socket_UK.onmessage = (Msg) => { let PnpData = JSON.parse(Msg.data); console.log('PnpData', PnpData) if (PnpData.type == "PnpEvent")//如果是插拨事件处理消息 { if (PnpData.IsIn) { // context.commit('changeIsIn', 1); // 已插入uKey changeIsIn(1); } else { // context.commit('changeIsIn', 0); // 未插入uKey changeIsIn(0); // context.commit('changeId', ""); // 初始化uKeyId为空 changeUKeyId(""); } } } s_pnp.Socket_UK.onclose = () => { console.log('关闭监控插拔监控'); } } catch (error) { console.log(error.name + ": " + error.message); return false; } } /** * 检测是否插入uKey * @param context * @param isConnent 客户端服务安装状态 */ function checkIsIn(isConnent) { if (isConnent) { try { let s_simnew1 = new SoftKey3W(); //创建UK类 let DevicePath, version; s_simnew1.Socket_UK.onopen = () => { s_simnew1.ResetOrder();//这里调用ResetOrder将计数清零,这样,消息处理处就会收到0序号的消息,通过计数及序号的方式,从而生产流程 } s_simnew1.Socket_UK.onmessage = (Msg) => { let UK_Data = JSON.parse(Msg.data); if (UK_Data.type != "Process") return;//如果不是流程处理消息,则跳过 switch (UK_Data.order) { case 0: { s_simnew1.FindPort(0); //发送命令取UK的路径 } break; case 1: { if (UK_Data.LastError != 0) { // context.commit('changeIsIn', 0); // 未插入 changeIsIn(0); // context.commit('changeId', ""); // 初始化uKeyId为空 changeUKeyId(""); s_simnew1.Socket_UK.close(); return false; } // context.commit('changeIsIn', 1); // 已插入 changeIsIn(1); DevicePath = UK_Data.return_value;//获得返回的UK的路径 s_simnew1.GetVersion(DevicePath); //发送命令取UK的版本 } break; case 2: { if (UK_Data.LastError != 0) { console.log("返回版本号错误,错误码为:" + UK_Data.LastError.toString()); s_simnew1.Socket_UK.close(); return false; } version = UK_Data.return_value;//获得返回的UK的版本 if (version > 10) { //取得锁的出厂编码 s_simnew1.GetProduceDate(DevicePath);//发送命令取UK的出厂编码 } else { console.log("锁的版本少于11,不支持返回锁的出厂编码功能\n2013年9月15号以后出厂的锁都支持这个功能。"); } } break; case 3: { if (UK_Data.LastError != 0) { console.log("取得锁的出厂编码错误,错误码为:" + UK_Data.LastError.toString()); s_simnew1.Socket_UK.close(); return false; } let _id = UK_Data.return_value;//获得返回的UK的出厂编码 // context.commit('changeId', id); changeUKeyId(_id); //所有工作处理完成后,关掉Socket s_simnew1.Socket_UK.close(); } break; default: { //所有工作处理完成后,关掉Socket s_simnew1.Socket_UK.close(); } break; } } s_simnew1.Socket_UK.onclose = () => { console.log('初始化设置uKey插拔状态和uKey唯一编号监控程序关闭'); } return true; } catch (e) { console.log('设置uKey插拔状态和uKey唯一编号监控程序报错'); console.log(error.name + ": " + error.message); return false; } } else { // context.commit('changeIsIn', 0); changeIsIn(0); } } function changeId(val) { if (val) { try { let s_simnew1 = new SoftKey3W(); //创建UK类 let DevicePath, version; s_simnew1.Socket_UK.onopen = () => { s_simnew1.ResetOrder();//这里调用ResetOrder将计数清零,这样,消息处理处就会收到0序号的消息,通过计数及序号的方式,从而生产流程 } s_simnew1.Socket_UK.onmessage = (Msg) => { let UK_Data = JSON.parse(Msg.data); if (UK_Data.type != "Process") return;//如果不是流程处理消息,则跳过 switch (UK_Data.order) { case 0: { s_simnew1.FindPort(0); //发送命令取UK的路径 } break; case 1: { if (UK_Data.LastError != 0) { // context.commit('changeId', ""); // 初始化uKeyId为空 changeUKeyId(""); s_simnew1.Socket_UK.close(); return false; } DevicePath = UK_Data.return_value;//获得返回的UK的路径 s_simnew1.GetVersion(DevicePath); //发送命令取UK的版本 } break; case 2: { if (UK_Data.LastError != 0) { console.log("返回版本号错误,错误码为:" + UK_Data.LastError.toString()); s_simnew1.Socket_UK.close(); return false; } version = UK_Data.return_value;//获得返回的UK的版本 if (version > 10) { //取得锁的出厂编码 s_simnew1.GetProduceDate(DevicePath);//发送命令取UK的出厂编码 } else { console.log("锁的版本少于11,不支持返回锁的出厂编码功能\n2013年9月15号以后出厂的锁都支持这个功能。"); } } break; case 3: { if (UK_Data.LastError != 0) { console.log("取得锁的出厂编码错误,错误码为:" + UK_Data.LastError.toString()); s_simnew1.Socket_UK.close(); return false; } let _id = UK_Data.return_value;//获得返回的UK的出厂编码 // context.commit('changeId', id); changeUKeyId(_id); //所有工作处理完成后,关掉Socket s_simnew1.Socket_UK.close(); } break; default: { //所有工作处理完成后,关掉Socket s_simnew1.Socket_UK.close(); } break; } } s_simnew1.Socket_UK.onclose = () => { console.log('设置uKey唯一编号监控程序关闭'); } return true; } catch (e) { console.log('设置uKey唯一编号监控程序报错'); console.log(error.name + ": " + error.message); return false; } } else { // context.commit("changeId", ""); changeUKeyId(""); } } return { connect, isIn, id, getId, load, changeConnect, changeIsIn, changeUKeyId, changeId, changeConnect, checkIsIn }; });