he wei
2025-04-03 c6a2d2debf161b987ff91c6ac9560d10fc98c54b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
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 };
});