import SoftKey3W from "@/utils/Syunew3"; import { defineStore } from 'pinia'; export default defineStore({ id: 'ukey', state() { return { connect: 0, // 判断是否安装了客户端服务,0未安装,1已安装 isIn: 0, // uKey的插拔状态 id: "", // uKey的唯一编号 } }, getters: { getId(state) { if (state.isIn) { return state.id; } else { return ""; } } }, actions: { changeIsIn(isIn) { this.isIn = isIn; }, changeConnect(isConnect) { this.connect = isConnect; }, changeUKeyId(id) { this.id = id; }, /** * 监控uKey的插拔事件 * @param context * @returns {boolean} */ load(isLoad) { //如果是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); //客户端服务安装状态 this.changeConnect(0); s_pnp.Socket_UK.onopen = () => { // context.commit('changeConnect', 1);//代表已经连接,用于判断是否安装了客户端服务 this.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 this.changeIsIn(1); } else { // context.commit('changeIsIn', 0); // 未插入uKey this.changeIsIn(0); // context.commit('changeId', ""); // 初始化uKeyId为空 this.changeUKeyId(""); } } } s_pnp.Socket_UK.onclose = () => { console.log('关闭监控插拔监控'); } } catch (error) { console.log(error.name + ": " + error.message); return false; } }, /** * 检测是否插入uKey * @param context * @param isConnent 客户端服务安装状态 */ 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); // 未插入 this.changeIsIn(0); // context.commit('changeId', ""); // 初始化uKeyId为空 this.changeUKeyId(""); s_simnew1.Socket_UK.close(); return false; } // context.commit('changeIsIn', 1); // 已插入 this.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); this.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); this.changeIsIn(0); } }, changeId(isIn) { if (isIn) { 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为空 this.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); this.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", ""); this.changeUKeyId(""); } } } });