DESKTOP-H1V7IUO\51019 před 4 roky
rodič
revize
c3bc575cdb
41 změnil soubory, kde provedl 1372 přidání a 772 odebrání
  1. 3 0
      debug.log
  2. binární
      dist/__pycache__/hello.cpython-39.pyc
  3. binární
      dist/__pycache__/reader.cpython-39.pyc
  4. 0 0
      dist/client/02f0ccf145e2da1bb858.worker.js
  5. binární
      dist/client/3abfd871d1932ba6139e552e26f55fc8.jpg
  6. 0 0
      dist/client/css/about.1a633a4f.css
  7. 0 0
      dist/client/css/about.40acff09.css
  8. 1 1
      dist/client/css/index.69a1ba66.css
  9. 1 1
      dist/client/css/subpage.69a1ba66.css
  10. binární
      dist/client/favicon.ico
  11. binární
      dist/client/img/wechart_img1.2efabecd.png
  12. binární
      dist/client/img/zy_icon1.42fffc0b.png
  13. 1 1
      dist/client/index.html
  14. 0 0
      dist/client/js/about.022fee76.js
  15. 0 0
      dist/client/js/about.b68feefd.js
  16. 0 0
      dist/client/js/chunk-vendors.bf1c293c.js
  17. 0 0
      dist/client/js/index.450fb1cf.js
  18. 0 0
      dist/client/js/index.dafd0d96.js
  19. 0 0
      dist/client/js/subpage.4b9ac134.js
  20. 0 0
      dist/client/js/subpage.a8f245d7.js
  21. 1 1
      dist/client/subpage.html
  22. 10 44
      dist/hello.py
  23. 922 0
      dist/logger.log
  24. 0 0
      dist/reader.py
  25. 0 554
      dist/securityReader.py
  26. binární
      hello.exe
  27. 5 0
      logger.log
  28. 0 16
      main.py
  29. 7 5
      package-lock.json
  30. binární
      public/favicon.ico
  31. 10 2
      src/api/api.js
  32. binární
      src/assets/wechart_img1.png
  33. binární
      src/assets/zy_icon1.png
  34. binární
      src/assets/zy_icon2.png
  35. binární
      src/assets/zy_icon3.png
  36. 383 130
      src/components/cardHome.vue
  37. 1 0
      src/components/debug.log
  38. 10 6
      src/components/signIn/SignIn.vue
  39. 11 1
      src/main.js
  40. 5 8
      src/utils/request.js
  41. 1 2
      vue.config.js

+ 3 - 0
debug.log

@@ -1,2 +1,5 @@
 [1206/095517.273:ERROR:registration_protocol_win.cc(102)] CreateFile: 系统找不到指定的文件。 (0x2)
 [1206/095517.311:ERROR:registration_protocol_win.cc(102)] CreateFile: 系统找不到指定的文件。 (0x2)
+[1208/152027.739:ERROR:registration_protocol_win.cc(102)] CreateFile: 系统找不到指定的文件。 (0x2)
+[1208/152027.772:ERROR:registration_protocol_win.cc(102)] CreateFile: 系统找不到指定的文件。 (0x2)
+[1208/152031.017:ERROR:registration_protocol_win.cc(102)] CreateFile: 系统找不到指定的文件。 (0x2)

binární
dist/__pycache__/hello.cpython-39.pyc


binární
dist/__pycache__/reader.cpython-39.pyc


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
dist/client/02f0ccf145e2da1bb858.worker.js


binární
dist/client/3abfd871d1932ba6139e552e26f55fc8.jpg


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
dist/client/css/about.1a633a4f.css


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
dist/client/css/about.40acff09.css


+ 1 - 1
dist/client/css/index.09346bb1.css → dist/client/css/index.69a1ba66.css

@@ -1 +1 @@
-a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,html,i,iframe,img,input,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font-size:100%;font-weight:400;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,menu,nav,section{display:block}body{line-height:1}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:none}table{border-collapse:collapse;border-spacing:0}a{color:#7e8c8d;text-decoration:none;-webkit-backface-visibility:hidden}li{list-style:none}::-webkit-scrollbar{width:5px;height:5px}::-webkit-scrollbar-track-piece{background-color:rgba(0,0,0,.2);-webkit-border-radius:6px}::-webkit-scrollbar-thumb:vertical{height:5px;background-color:hsla(0,0%,49%,.7);-webkit-border-radius:6px}::-webkit-scrollbar-thumb:horizontal{width:5px;background-color:hsla(0,0%,49%,.7);-webkit-border-radius:6px}body,html{width:100%}body{-webkit-text-size-adjust:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.bgStyle[data-v-2023a4d4]{background:#3b3b3b;position:fixed;width:100%;height:100%}.title[data-v-2023a4d4]{color:#fff;font-size:40px;margin:90px 0 60px 0;text-align:center}.title img[data-v-2023a4d4]{display:inline-block;vertical-align:middle;height:70px}.contentChild[data-v-2023a4d4]{background:#e6e6e6;border-radius:3px;padding:60px 50px}.contentChild h2[data-v-2023a4d4]{padding:10px 0}.btnSty[data-v-2023a4d4]{width:100%}.noMarginBottom[data-v-2023a4d4]{margin-bottom:0}.textLeft[data-v-2023a4d4]{text-align:left}.randFirst[data-v-2023a4d4]{float:left;width:70%}.rand[data-v-2023a4d4]{float:left;width:30%;border-radius:4px;border:1px solid #dcdfe6;line-height:40px;height:40px;background:#fff;letter-spacing:4px}
+a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,html,i,iframe,img,input,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font-size:100%;font-weight:400;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,menu,nav,section{display:block}body{line-height:1}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:none}table{border-collapse:collapse;border-spacing:0}a{color:#7e8c8d;text-decoration:none;-webkit-backface-visibility:hidden}li{list-style:none}::-webkit-scrollbar{width:5px;height:5px}::-webkit-scrollbar-track-piece{background-color:rgba(0,0,0,.2);-webkit-border-radius:6px}::-webkit-scrollbar-thumb:vertical{height:5px;background-color:hsla(0,0%,49%,.7);-webkit-border-radius:6px}::-webkit-scrollbar-thumb:horizontal{width:5px;background-color:hsla(0,0%,49%,.7);-webkit-border-radius:6px}body,html{width:100%}body{-webkit-text-size-adjust:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.bgStyle[data-v-138a8059]{background:#3b3b3b;position:fixed;width:100%;height:100%}.title[data-v-138a8059]{color:#fff;font-size:40px;margin:90px 0 60px 0;text-align:center}.title img[data-v-138a8059]{display:inline-block;vertical-align:middle;height:70px}.contentChild[data-v-138a8059]{background:#e6e6e6;border-radius:3px;padding:60px 50px}.contentChild h2[data-v-138a8059]{padding:10px 0}.btnSty[data-v-138a8059]{width:100%}.noMarginBottom[data-v-138a8059]{margin-bottom:0}.textLeft[data-v-138a8059]{text-align:left}.randFirst[data-v-138a8059]{float:left;width:70%}.rand[data-v-138a8059]{float:left;width:30%;border-radius:4px;border:1px solid #dcdfe6;line-height:40px;height:40px;background:#fff;letter-spacing:4px}

+ 1 - 1
dist/client/css/subpage.09346bb1.css → dist/client/css/subpage.69a1ba66.css

@@ -1 +1 @@
-a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,html,i,iframe,img,input,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font-size:100%;font-weight:400;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,menu,nav,section{display:block}body{line-height:1}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:none}table{border-collapse:collapse;border-spacing:0}a{color:#7e8c8d;text-decoration:none;-webkit-backface-visibility:hidden}li{list-style:none}::-webkit-scrollbar{width:5px;height:5px}::-webkit-scrollbar-track-piece{background-color:rgba(0,0,0,.2);-webkit-border-radius:6px}::-webkit-scrollbar-thumb:vertical{height:5px;background-color:hsla(0,0%,49%,.7);-webkit-border-radius:6px}::-webkit-scrollbar-thumb:horizontal{width:5px;background-color:hsla(0,0%,49%,.7);-webkit-border-radius:6px}body,html{width:100%}body{-webkit-text-size-adjust:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.bgStyle[data-v-2023a4d4]{background:#3b3b3b;position:fixed;width:100%;height:100%}.title[data-v-2023a4d4]{color:#fff;font-size:40px;margin:90px 0 60px 0;text-align:center}.title img[data-v-2023a4d4]{display:inline-block;vertical-align:middle;height:70px}.contentChild[data-v-2023a4d4]{background:#e6e6e6;border-radius:3px;padding:60px 50px}.contentChild h2[data-v-2023a4d4]{padding:10px 0}.btnSty[data-v-2023a4d4]{width:100%}.noMarginBottom[data-v-2023a4d4]{margin-bottom:0}.textLeft[data-v-2023a4d4]{text-align:left}.randFirst[data-v-2023a4d4]{float:left;width:70%}.rand[data-v-2023a4d4]{float:left;width:30%;border-radius:4px;border:1px solid #dcdfe6;line-height:40px;height:40px;background:#fff;letter-spacing:4px}
+a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,html,i,iframe,img,input,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font-size:100%;font-weight:400;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,menu,nav,section{display:block}body{line-height:1}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:none}table{border-collapse:collapse;border-spacing:0}a{color:#7e8c8d;text-decoration:none;-webkit-backface-visibility:hidden}li{list-style:none}::-webkit-scrollbar{width:5px;height:5px}::-webkit-scrollbar-track-piece{background-color:rgba(0,0,0,.2);-webkit-border-radius:6px}::-webkit-scrollbar-thumb:vertical{height:5px;background-color:hsla(0,0%,49%,.7);-webkit-border-radius:6px}::-webkit-scrollbar-thumb:horizontal{width:5px;background-color:hsla(0,0%,49%,.7);-webkit-border-radius:6px}body,html{width:100%}body{-webkit-text-size-adjust:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.bgStyle[data-v-138a8059]{background:#3b3b3b;position:fixed;width:100%;height:100%}.title[data-v-138a8059]{color:#fff;font-size:40px;margin:90px 0 60px 0;text-align:center}.title img[data-v-138a8059]{display:inline-block;vertical-align:middle;height:70px}.contentChild[data-v-138a8059]{background:#e6e6e6;border-radius:3px;padding:60px 50px}.contentChild h2[data-v-138a8059]{padding:10px 0}.btnSty[data-v-138a8059]{width:100%}.noMarginBottom[data-v-138a8059]{margin-bottom:0}.textLeft[data-v-138a8059]{text-align:left}.randFirst[data-v-138a8059]{float:left;width:70%}.rand[data-v-138a8059]{float:left;width:30%;border-radius:4px;border:1px solid #dcdfe6;line-height:40px;height:40px;background:#fff;letter-spacing:4px}

binární
dist/client/favicon.ico


binární
dist/client/img/wechart_img1.2efabecd.png


binární
dist/client/img/zy_icon1.42fffc0b.png


+ 1 - 1
dist/client/index.html

@@ -1 +1 @@
-<!DOCTYPE html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="favicon.ico"><title></title><link href="css/about.1a633a4f.css" rel="prefetch"><link href="js/about.022fee76.js" rel="prefetch"><link href="css/chunk-vendors.a16c4353.css" rel="preload" as="style"><link href="css/index.09346bb1.css" rel="preload" as="style"><link href="js/chunk-vendors.76086205.js" rel="preload" as="script"><link href="js/index.450fb1cf.js" rel="preload" as="script"><link href="css/chunk-vendors.a16c4353.css" rel="stylesheet"><link href="css/index.09346bb1.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="js/chunk-vendors.76086205.js"></script><script src="js/index.450fb1cf.js"></script></body></html>
+<!DOCTYPE html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="favicon.ico"><title></title><link href="css/about.40acff09.css" rel="prefetch"><link href="js/about.b68feefd.js" rel="prefetch"><link href="css/chunk-vendors.a16c4353.css" rel="preload" as="style"><link href="css/index.69a1ba66.css" rel="preload" as="style"><link href="js/chunk-vendors.bf1c293c.js" rel="preload" as="script"><link href="js/index.dafd0d96.js" rel="preload" as="script"><link href="css/chunk-vendors.a16c4353.css" rel="stylesheet"><link href="css/index.69a1ba66.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="js/chunk-vendors.bf1c293c.js"></script><script src="js/index.dafd0d96.js"></script></body></html>

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
dist/client/js/about.022fee76.js


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
dist/client/js/about.b68feefd.js


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
dist/client/js/chunk-vendors.bf1c293c.js


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
dist/client/js/index.450fb1cf.js


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
dist/client/js/index.dafd0d96.js


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
dist/client/js/subpage.4b9ac134.js


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
dist/client/js/subpage.a8f245d7.js


+ 1 - 1
dist/client/subpage.html

@@ -1 +1 @@
-<!DOCTYPE html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="favicon.ico"><title>zynfcreader</title><link href="css/about.1a633a4f.css" rel="prefetch"><link href="js/about.022fee76.js" rel="prefetch"><link href="css/chunk-vendors.a16c4353.css" rel="preload" as="style"><link href="css/subpage.09346bb1.css" rel="preload" as="style"><link href="js/chunk-vendors.76086205.js" rel="preload" as="script"><link href="js/subpage.a8f245d7.js" rel="preload" as="script"><link href="css/chunk-vendors.a16c4353.css" rel="stylesheet"><link href="css/subpage.09346bb1.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but zynfcreader doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="js/chunk-vendors.76086205.js"></script><script src="js/subpage.a8f245d7.js"></script></body></html>
+<!DOCTYPE html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="favicon.ico"><title>zynfcreader</title><link href="css/about.40acff09.css" rel="prefetch"><link href="js/about.b68feefd.js" rel="prefetch"><link href="css/chunk-vendors.a16c4353.css" rel="preload" as="style"><link href="css/subpage.69a1ba66.css" rel="preload" as="style"><link href="js/chunk-vendors.bf1c293c.js" rel="preload" as="script"><link href="js/subpage.4b9ac134.js" rel="preload" as="script"><link href="css/chunk-vendors.a16c4353.css" rel="stylesheet"><link href="css/subpage.69a1ba66.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but zynfcreader doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="js/chunk-vendors.bf1c293c.js"></script><script src="js/subpage.4b9ac134.js"></script></body></html>

+ 10 - 44
dist/hello.py

@@ -1,55 +1,21 @@
-import threading
-import time
-import sys
-import random
 import webview
-import securityReader as reader
+import reader
+
 
 class Api:
     def __init__(self):
         self.cancel_heavy_stuff_flag = False
-
-    def read_wy(self,keya,keyb):
-        card_service = reader.init()
-        Des3_Cipher = reader.COS_Access(card_service,keya,keyb)
-        info_json = reader.COS_Read_Tempture(card_service,Des3_Cipher)
-        result = {
-            "keya":keya,
-            "keyb":keyb,
-            "info" :info_json
-        }
-        return result
-
-    def read_yy(self,keya,keyb):
+    # 查询标签编号
+    def read_uid(self):
         card_service = reader.init()
-        Des3_Cipher = reader.COS_Access(card_service,keya,keyb)
-        info_json = reader.COS_Analysis(card_service,Des3_Cipher,60,False)
-        result = {
-            "keya":keya,
-            "keyb":keyb,
-            "info" :info_json
-        }
-        return result
+        uid = reader.read_uid(card_service)
+        # return '04ADB549100269'
+        return uid
 
-    def active_yy(self,keya,keyb):
-        card_service = reader.init()
-        Des3_Cipher = reader.COS_Access(card_service,keya,keyb)
-        result = reader.COS_Write_Config(card_service,Des3_Cipher,49162,8,[0xF0, 0x03, 0x00, 0x0F, 0x20, 0x00, 0xF6, 0x00],8)
-        if result:
-            return '芯片激活成功'
-        else:
-            return '芯片激活失败'
+    
 
-    def check_yy_status(self,keya,keyb):
-        card_service = reader.init()
-        Des3_Cipher = reader.COS_Access(card_service,keya,keyb)
-        result = reader.COS_Read_Config(card_service,Des3_Cipher,49162,8,8)
-        if result[0] == 240:
-            return'芯片已激活'
-        else:
-            return '芯片未激活'
 
 if __name__ == '__main__':
     api = Api()
-    window = webview.create_window('中义NFC读写器', url='./client/index.html', js_api=api)
-    webview.start(debug = True)
+    window = webview.create_window('邦德威桌面端', url='./client/index.html',width=1500,height=900, js_api=api)
+    webview.start(debug=True)

+ 922 - 0
dist/logger.log

@@ -48,3 +48,925 @@ DEBUG:pywebview:[WinError 2] 系统
 DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
 DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
 DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: A9 55 49 12 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: A9 04 49 58 status words: 90 0
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: A9 55 49 12 status words: 90 0
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: A9 55 49 12 status words: 90 0
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: A9 55 49 12 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: A9 04 49 58 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.:  status words: 63 0
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: A9 55 49 12 status words: 90 0
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: A9 55 49 12 status words: 90 0
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 E6 5A 49 10 02 69 status words: 90 0
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 E6 5A 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 E6 5A 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.:  status words: 63 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.:  status words: 63 0
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.:  status words: 63 0
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 E6 5A 49 10 02 69 status words: 90 0
+INFO:root:serial no.:  status words: 63 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 E6 5A 49 10 02 69 status words: 90 0
+INFO:root:serial no.:  status words: 63 0
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.:  status words: 63 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:sending: FF CA 00 00 00
+INFO:root:sending: FF CA 00 00 00
+INFO:root:sending: FF CA 00 00 00
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.:  status words: 63 0
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 E6 5A 49 10 02 69 status words: 90 0
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 E6 5A 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 E6 5A 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 E6 5A 49 10 02 69 status words: 90 0
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 E6 5A 49 10 02 69 status words: 90 0
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+INFO:root:sending: FF CA 00 00 00
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 E6 5A 49 10 02 69 status words: 90 0
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 E6 5A 49 10 02 69 status words: 90 0
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 E6 5A 49 10 02 69 status words: 90 0
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 94 95 49 10 02 69 status words: 90 0
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 E6 5A 49 10 02 69 status words: 90 0
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML
+INFO:root:sending: FF CA 00 00 00
+INFO:root:serial no.: 04 E6 5A 49 10 02 69 status words: 90 0
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML

+ 0 - 0
reader.py → dist/reader.py


+ 0 - 554
dist/securityReader.py

@@ -1,554 +0,0 @@
-#! /usr/bin/env python
-
-"""
-Smart Card Reader / Writer
-"""
-from smartcard.CardType import AnyCardType
-from smartcard.CardRequest import CardRequest
-from smartcard.util import toHexString
-from smartcard.ATR import ATR
-from Crypto.Cipher import DES3 as des3
-import random as rnd
-import time as tm
-import matplotlib.pyplot as plt
-import math
-import logging
-
-# 通过下面的方式进行简单配置输出方式与日志级别
-logging.basicConfig(filename='logger.log', level=logging.INFO)
-
-
-# 初始化读卡器
-def init():
-  print('初始化读卡器')
-  card_type = AnyCardType()
-  card_request = CardRequest(timeout=1, cardType=card_type)
-  card_service = card_request.waitforcard()
-  card_service.connection.connect()
-  # atr = ATR(card_service.connection.getATR())
-  return card_service
-
-def result_print(result_out_str):
-  print(result_out_str)
-  logging.info(result_out_str)
-
-def trace_command(apdu):
-    print('sending ', toHexString(apdu))
-    logging.info('sending: '+ toHexString(apdu))
-
-def trace_response(response, sw1, sw2):
-    if response is None:
-        response = []
-    print(
-        'serial no.: ',
-        toHexString(response),
-        ' status words: ',
-        "%x %x" % (sw1, sw2)
-    )
-    logging.info( 'serial no.: '+
-        toHexString(response)+
-        ' status words: '+
-        "%x %x" % (sw1, sw2))
-
-def bytes2int(data_bytes):
-  data_number = len(data_bytes)
-  data_int = 0
-  for i in range(0, data_number):
-    data_int = data_int + data_bytes[data_number-i-1]*math.pow(2, i*8)
-  return int(data_int)   
-
-def int2bytes(data_int):
-  return bytes([data_int])
-
-def bytes2int_list(data_bytes):
-  data_number = len(data_bytes)
-  data_int_list = list(range(data_number))
-  for i in range(0, data_number):
-    data_int_list[i] = int(str(data_bytes[i]))
-  return data_int_list
-
-def hexstr2bytes(hex_str):
-  hex_int_list = hexstr2int_list(hex_str)
-  hex_bytes = int_list2bytes(hex_int_list)
-  return hex_bytes
-
-def bytes2hexstr(data_bytes):
-  data_number = len(data_bytes)
-  data_hex_str = ''
-  for i in range(0, data_number):
-    data_int = int(str(data_bytes[i]))
-    data_hex_str += "{:02X} ".format(data_int)
-  return data_hex_str
-
-
-def hexstr2int_list(data_str):
-  data_str = data_str.replace('0x', '')
-  data_str = data_str.replace(' ', '')
-  data_str = data_str.replace('\r', '')
-  data_str = data_str.replace('\n', '')
-  data_str = data_str.replace(',', '')
-  data_number_int = int(len(data_str)/2)
-  data_bytes_list = list(range(data_number_int))
-  data_int_list = list(range(data_number_int))
-  for i in range(0, data_number_int):
-    data_bytes_list[i] = bytes.fromhex(data_str[i*2:i*2+2])
-    data_int_list[i] = int.from_bytes(data_bytes_list[i], 'big')
-  return data_int_list
-  
-def int_list2bytes(data_int_list):
-  data_bytes = b''.join(map(lambda d:int.to_bytes(d, 1, 'little'), data_int_list))
-  return data_bytes
-
-#发送指令 
-def sendCommand(card_service,command):
-    trace_command(command)
-    res, s1, s2 = card_service.connection.transmit(command)
-    trace_response(res, s1, s2)
-    return res,s1,s2
-
-# 权限验证
-def COS_Access(card_service,KEYA_str, KEYB_str):
-    print('开始ACCESS验证')
-    rf_command_bytes = [ 0xA2, 0xA4, 0x00, 0x0C, 0x02, 0xAC, 0x01]
-    data_byres,s1,s2 = sendCommand(card_service,rf_command_bytes)
-
-    if s1==99 and s2 == 192:
-      print('解锁标签')  
-      tm.sleep(15)
-      rf_command_bytes = [ 0xA2, 0xA4, 0x00, 0x0C, 0x02, 0xAC, 0x01]
-      data_byres,s1,s2 = sendCommand(card_service,rf_command_bytes)
-      return
-    rf_command_bytes = [0xA2, 0xB0, 0x00, 0x10, 0x10]
-    data_bytes,s1,s2 = sendCommand(card_service,rf_command_bytes)
-    trnd_bytes = data_bytes[0:8]
-    mid_bytes = data_bytes[8:17]
-
-    # 计算KEYA* KEYB*
-    random_int_list = bytes2int_list(trnd_bytes)
-    mid_int_list    = bytes2int_list(mid_bytes)
-    keya_int_list   = hexstr2int_list(KEYA_str)
-    keyb_int_list   = hexstr2int_list(KEYB_str)
-    des3_key_list = [0 for i in range(16)]
-    for i in range(0,8):
-        des3_key_list[i]   = random_int_list[i] ^ keya_int_list[i]
-        des3_key_list[i+8] = mid_int_list[i] ^ keyb_int_list[i]
-    des3_key_bytes = b''.join(map(lambda d:int.to_bytes(d, 1, 'little'), des3_key_list))
-    Des3_Cipher = des3.new(des3_key_bytes, des3.MODE_ECB)
-    # 加密随机数
-    random_key_bytes = b''.join(map(lambda d:int.to_bytes(d, 1, 'little'), random_int_list))
-    trnd_encrpyt_bytes = Des3_Cipher.encrypt(random_key_bytes)
-    # trnd_bytes= rnd.randbytes(8)
-
-    trnd_bytes = [0xA2,0xD6,0x00,0x10,0x10,0x00,0x10,0x10]
-
-    command_bytes = [0xA2,0xD6,0x00,0x10,0x10]
-    command_bytes.extend(trnd_encrpyt_bytes)
-    command_bytes.extend(trnd_bytes)
-
-    res,s1,s2 = sendCommand(card_service,command_bytes)
-
-    if s1 == 144 and s2 == 0:
-      res,s1,s2 = sendCommand(card_service,[0xA2,0xB0,0x00,0x10,0x10])
-      # sendCommand(res)
-      # trnd_encrpyt_bytes = Des3_Cipher.encrypt(trnd_bytes)
-
-    return Des3_Cipher
-
-# 读读取数据
-def COS_Read_Data(card_service,Des3_Cipher, address_int, length_int, package_size):
-  result_print("COS读取数据")
-  result = False
-  # 选中PL DATA
-  rf_command_bytes = [0xA2,0xA4,0x00,0x0C,0x02,0xDA,0x01]
-  data_bytes,s1,s2 = sendCommand(rf_command_bytes)
-  # 读数据
-  data_bytes = ISO14443_4A_ReadBinary(0xA2, address_int, length_int, package_size)
-  data_bytes = b''.join(map(lambda d:int.to_bytes(d, 1, 'little'), data_bytes))
-  data_bytes = Des3_Cipher.decrypt(data_bytes)
-  data_str = bytes2hexstr(data_bytes)
-  result = True
-  result_print("成功", result)
-  result_print(data_str, result)
-  return result, data_bytes
-
-# 读取温度
-def COS_Read_Tempture(card_service,Des3_Cipher):
-  result_print("COS读取温度")
-  result = False
-  tempture_int = 0
-  # 选中PL DATA
-  command_bytes = [0xA2,0xA4,0x00,0x0C,0x02,0xDA,0x01]
-  data_bytes,s1,s2 = sendCommand(card_service,command_bytes)
-
-  # 读取数据
-  data_bytes = ISO14443_4A_ReadBinary(card_service,0xA2, 0, 80, 60)
-  data_bytes = b''.join(map(lambda d:int.to_bytes(d, 1, 'little'), data_bytes))
-  data_bytes = Des3_Cipher.decrypt(data_bytes)
-  # 解析数据
-  data_bias = 12
-  CID_bytes  = data_bytes[data_bias+0: data_bias+2]
-  TID_bytes  = data_bytes[data_bias+2: data_bias+8]
-  GTIN_bytes = data_bytes[data_bias+8: data_bias+18]
-  VID_bytes  = data_bytes[data_bias+18:data_bias+26]
-  MID_bytes  = data_bytes[data_bias+26:data_bias+34]
-  MAC_bytes  = data_bytes[data_bias+34:data_bias+42]
-  TRNG_bytes = data_bytes[data_bias+42:data_bias+50]
-  PAGE_bytes = data_bytes[data_bias+50:data_bias+51]
-  RNUM_bytes = data_bytes[data_bias+51:data_bias+55]
-  Cal_Data = [[0 for i in range(2)] for j in range(3)]
-  Cal_Data[0][0] = (data_bytes[data_bias+55]*16 + (data_bytes[data_bias+56]>>4))/10
-  Cal_Data[0][1] = (data_bytes[data_bias+56]&0x0F)*256 + data_bytes[data_bias+57]
-  Cal_Data[1][0] = (data_bytes[data_bias+58]*16 + (data_bytes[data_bias+59]>>4))/10
-  Cal_Data[1][1] = (data_bytes[data_bias+59]&0x0F)*256 + data_bytes[data_bias+60]
-  Cal_Data[2][0] = (data_bytes[data_bias+61]*16 + (data_bytes[data_bias+62]>>4))/10
-  Cal_Data[2][1] = (data_bytes[data_bias+62]&0x0F)*256 + data_bytes[data_bias+63]
-  info_json = {
-      "CID":bytes2hexstr(CID_bytes),
-      "TID":bytes2hexstr(TID_bytes),
-      "GTIN":bytes2hexstr(GTIN_bytes),
-      "VID":bytes2hexstr(VID_bytes),
-      "MID":bytes2hexstr(MID_bytes),
-      "MAC":bytes2hexstr(MAC_bytes),
-      "TRNG":bytes2hexstr(TRNG_bytes),
-      "PAGE":bytes2hexstr(PAGE_bytes),
-      "RUNM":bytes2hexstr(RNUM_bytes),
-      "CAL1":{
-            "TEMP":str(Cal_Data[0][0]),
-            "ADC":str(Cal_Data[0][1])
-        },
-      "CAL2":{
-            "TEMP":str(Cal_Data[1][0]),
-            "ADC":str(Cal_Data[1][1])
-        },
-      "CAL3":{
-            "TEMP":str(Cal_Data[2][0]),
-            "ADC":str(Cal_Data[2][1])
-        }
-  }
-
-  command_bytes = [0xA2,0xB0,0x00,0x4E,0x08]
-  data_bytes,s1,s2 = sendCommand(card_service,command_bytes)
-  data_bytes = b''.join(map(lambda d:int.to_bytes(d, 1, 'little'), data_bytes))
-  data_bytes = Des3_Cipher.decrypt(data_bytes)
-  tempture_int = int(str(data_bytes[0]))*256 + int(str(data_bytes[1]))
-  adc_data_int = tempture_int >> 5
-  if(adc_data_int<Cal_Data[1][1]):
-    tempture1 = Cal_Data[0][0]
-    adc1 = Cal_Data[0][1]
-    tempture2 = Cal_Data[1][0]
-    adc2 = Cal_Data[1][1]
-  else:                         
-    tempture1 = Cal_Data[1][0]
-    adc1 = Cal_Data[1][1]
-    tempture2 = Cal_Data[2][0]
-    adc2 = Cal_Data[2][1]
-  k = (tempture1-tempture2)/(adc1-adc2)
-  b = tempture1 - (k*adc1)
-  tempture_float = k*adc_data_int + b
-  info_json['tempture_data'] = tempture_float
-  return info_json
-
-# 读数据
-def ISO14443_4A_ReadBinary(card_service,cla_bytes, address_start_int, length_int, RF_PACKAGE_SIZE):
-  data_read_bytes = []
-  des3_key_int_list = [0 for i in range(2)]
-  package_size_int = RF_PACKAGE_SIZE
-  package_number_int = int(length_int / package_size_int)
-  package_bytes_left_int = length_int % package_size_int
-  i = 0
-  # 读取整包数据
-  for i in range (0, package_number_int):
-    data_address_int = address_start_int + i * package_size_int
-    des3_key_int_list[0] = int(data_address_int/256)
-    des3_key_int_list[1] = int(data_address_int%256)
-    data_address_bytes = int_list2bytes(des3_key_int_list)
-    rf_command_bytes = [cla_bytes,0xB0]
-    rf_command_bytes.extend(data_address_bytes)
-    rf_command_bytes.extend(bytes([package_size_int]))
-    data_bytes, s1,s2 = sendCommand(card_service,rf_command_bytes)
-    if s1 == 144 and s2 == 0:
-      data_read_bytes.extend(data_bytes)
-  # 读取剩余数据
-  if package_bytes_left_int!=0:
-    if package_number_int!=0:
-        i = i+1
-    data_address_int = address_start_int + i * package_size_int
-    des3_key_int_list[0] = int(data_address_int/256)
-    des3_key_int_list[1] = int(data_address_int%256)
-    data_address_bytes = int_list2bytes(des3_key_int_list)
-    rf_command_bytes = [cla_bytes,0xB0]
-    rf_command_bytes.extend(data_address_bytes)
-    rf_command_bytes.extend(bytes([package_size_int]))
-    data_bytes, s1,s2 = sendCommand(card_service,rf_command_bytes)
-    if s1 == 144 and s2 == 0:
-      data_read_bytes.extend(data_bytes)
-  return data_read_bytes
-
-# ISO14443-4A更新数据
-def ISO14443_4A_UpdateBinary(card_service,cla_bytes, address_start_int, length_int, data_write_bytes, RF_PACKAGE_SIZE):
-  des3_key_int_list = [0 for i in range(2)]
-  package_size_int = RF_PACKAGE_SIZE
-  package_number_int = int(length_int / package_size_int)
-  package_bytes_left_int = length_int % package_size_int
-  i = 0
-  # 写整包数据
-  for i in range (0, package_number_int):
-    data_address_int = address_start_int + i * package_size_int
-    des3_key_int_list[0] = int(data_address_int/256)
-    des3_key_int_list[1] = int(data_address_int%256)
-    data_address_bytes = int_list2bytes(des3_key_int_list)
-    rf_command_bytes = [cla_bytes,0xD6]
-    rf_command_bytes.extend(data_address_bytes)
-    rf_command_bytes.extend(bytes([package_size_int]))
-    rf_command_bytes.extend(data_write_bytes[i*package_size_int : (i+1)*package_size_int])
-    data_bytes,s1,s2 = sendCommand(card_service,rf_command_bytes)
-  # 写剩余数据
-  if package_bytes_left_int!=0:
-    # tm.sleep(0.01)
-    if package_number_int!=0:
-        i = i+1
-    data_address_int = address_start_int + i * package_size_int
-    des3_key_int_list[0] = int(data_address_int/256)
-    des3_key_int_list[1] = int(data_address_int%256)
-    data_address_bytes = int_list2bytes(des3_key_int_list)
-    
-    rf_command_bytes = [cla_bytes,0xD6]
-    rf_command_bytes.extend(data_address_bytes)
-    rf_command_bytes.extend(bytes([package_bytes_left_int]))
-    rf_command_bytes.extend(data_write_bytes[i*package_size_int:i*package_size_int+package_bytes_left_int])
-    data_bytes, s1,s2 = sendCommand(card_service,command_bytes)
-  return data_bytes
-
-# 读取配置文件
-def COS_Read_Config(card_service,Des3_Cipher, address_int, length_int, package_size):
-  result_print("COS读取配置数据")
-  result = False
-  # 选中CONFIG
-  rf_command_bytes = [0xA2,0xA4,0x00,0x0C,0x02,0xCF,0x01]
-  data_bytes, s1,s2  = sendCommand(card_service,rf_command_bytes)
-  # 读数据
-  data_bytes = ISO14443_4A_ReadBinary(card_service,0xA2, address_int, length_int, package_size)
-  data_bytes = b''.join(map(lambda d:int.to_bytes(d, 1, 'little'), data_bytes))
-  data_bytes = Des3_Cipher.decrypt(data_bytes)
-  data_str = bytes2hexstr(data_bytes)
-  result = True
-  result_print('config file :'+ data_str)
-  return data_bytes
-
-# 修改配置文件
-def COS_Write_Config(card_service,Des3_Cipher, address_int, length_int, write_bytes, package_size):
-  result_print("COS写入配置数据")
-  result = False
-  # 选中CONFIG
-  rf_command_bytes = [0xA2,0xA4,0x00,0x0C,0x02,0xCF,0x01]
-  data_bytes, s1, s2 = sendCommand(card_service,rf_command_bytes)
-  write_bytes = b''.join(map(lambda d:int.to_bytes(d, 1, 'little'), write_bytes))
-  data_write_bytes = Des3_Cipher.encrypt(write_bytes)
-  data_bytes = ISO14443_4A_UpdateBinary(card_service,0xA2, address_int, length_int, data_write_bytes, package_size)
-  if data_bytes!=b'':
-    result = True
-    result_print("COS写入配置数据 成功")
-  if result == False:
-    result_print("COS写入配置数据 失败")
-  return result
-
-
-# 数据解析
-def COS_Analysis(card_service,Des3_Cipher, DATA_SIZE, show_picture_tag):
-  TEMPTURE_SHOW = True                                                                                    # 显示温度
-  # TEMPTURE_CAL_TYPE = "KB"                                                                              # KB校准
-  TEMPTURE_CAL_TYPE = "3POS"  
-  result_print("COS数据解析")
-  # 选中DATA
-  rf_command_bytes = [0xA2,0xA4,0x00,0x0C,0x02,0xDA,0x01]
-  data_bytes, s1,s2 = sendCommand(card_service,rf_command_bytes)
-  # 读取数据
-  data_bytes = ISO14443_4A_ReadBinary(card_service,0xA2, 0, 80, DATA_SIZE)
-  data_bytes = b''.join(map(lambda d:int.to_bytes(d, 1, 'little'), data_bytes))
-  data_bytes = Des3_Cipher.decrypt(data_bytes)
-  # 解析数据
-  data_bias = 12
-  CID_bytes  = data_bytes[data_bias+0: data_bias+2]
-  TID_bytes  = data_bytes[data_bias+2: data_bias+8]
-  GTIN_bytes = data_bytes[data_bias+8: data_bias+18]
-  VID_bytes  = data_bytes[data_bias+18:data_bias+26]
-  MID_bytes  = data_bytes[data_bias+26:data_bias+34]
-  MAC_bytes  = data_bytes[data_bias+34:data_bias+42]
-  TRNG_bytes = data_bytes[data_bias+42:data_bias+50]
-  PAGE_bytes = data_bytes[data_bias+50:data_bias+51]
-  RNUM_bytes = data_bytes[data_bias+51:data_bias+55]
-  if TEMPTURE_CAL_TYPE=="KB":
-    RES_bytes  = data_bytes[data_bias+55:data_bias+58]
-    K_bytes    = data_bytes[data_bias+58:data_bias+62]
-    B_bytes    = data_bytes[data_bias+62:data_bias+66]
-    info_str =  "CID: "  + bytes2hexstr(CID_bytes)  + "\n" + \
-                "TID: "  + bytes2hexstr(TID_bytes)  + "\n" + \
-                "GTIN: " + bytes2hexstr(GTIN_bytes) + "\n" + \
-                "VID: "  + bytes2hexstr(VID_bytes)  + "\n" + \
-                "MID: "  + bytes2hexstr(MID_bytes)  + "\n" + \
-                "MAC: "  + bytes2hexstr(MAC_bytes)  + "\n" + \
-                "TRNG: " + bytes2hexstr(TRNG_bytes) + "\n" + \
-                "PAGE: " + bytes2hexstr(PAGE_bytes) + "\n" + \
-                "RNUM: " + bytes2hexstr(RNUM_bytes) + "\n" + \
-                "RES: "  + bytes2hexstr(RES_bytes)  + "\n" + \
-                "K: "    + bytes2hexstr(K_bytes)    + "\n" + \
-                "B: "    + bytes2hexstr(B_bytes)
-    info_json = {
-          "CID":bytes2hexstr(CID_bytes),
-          "TID":bytes2hexstr(TID_bytes),
-          "GTIN":bytes2hexstr(GTIN_bytes),
-          "VID":bytes2hexstr(VID_bytes),
-          "MID":bytes2hexstr(MID_bytes),
-          "MAC":bytes2hexstr(MAC_bytes),
-          "TRNG":bytes2hexstr(TRNG_bytes),
-          "PAGE":bytes2hexstr(PAGE_bytes),
-          "RUNM":bytes2hexstr(RNUM_bytes),
-          "RES":bytes2hexstr(RES_bytes),
-          "K":bytes2hexstr(K_bytes),
-          "B":bytes2hexstr(B_bytes)
-      }
-  else:
-    Cal_Data = [[0 for i in range(2)] for j in range(3)]
-    Cal_Data[0][0] = (data_bytes[data_bias+55]*16 + (data_bytes[data_bias+56]>>4))/10
-    Cal_Data[0][1] = (data_bytes[data_bias+56]&0x0F)*256 + data_bytes[data_bias+57]
-    Cal_Data[1][0] = (data_bytes[data_bias+58]*16 + (data_bytes[data_bias+59]>>4))/10
-    Cal_Data[1][1] = (data_bytes[data_bias+59]&0x0F)*256 + data_bytes[data_bias+60]
-    Cal_Data[2][0] = (data_bytes[data_bias+61]*16 + (data_bytes[data_bias+62]>>4))/10
-    Cal_Data[2][1] = (data_bytes[data_bias+62]&0x0F)*256 + data_bytes[data_bias+63]
-    info_str =  "CID: "  + bytes2hexstr(CID_bytes)  + "\n" + \
-                "TID: "  + bytes2hexstr(TID_bytes)  + "\n" + \
-                "GTIN: " + bytes2hexstr(GTIN_bytes) + "\n" + \
-                "VID: "  + bytes2hexstr(VID_bytes)  + "\n" + \
-                "MID: "  + bytes2hexstr(MID_bytes)  + "\n" + \
-                "MAC: "  + bytes2hexstr(MAC_bytes)  + "\n" + \
-                "TRNG: " + bytes2hexstr(TRNG_bytes) + "\n" + \
-                "PAGE: " + bytes2hexstr(PAGE_bytes) + "\n" + \
-                "RNUM: " + bytes2hexstr(RNUM_bytes) + "\n" + \
-                "CAL1: " + str(Cal_Data[0][0])  + " " + str(Cal_Data[0][1]) + "\n" + \
-                "CAL2: " + str(Cal_Data[1][0])  + " " + str(Cal_Data[1][1]) + "\n" + \
-                "CAL3: " + str(Cal_Data[2][0])  + " " + str(Cal_Data[2][1])
-
-    info_json = {
-        "CID":bytes2hexstr(CID_bytes),
-        "TID":bytes2hexstr(TID_bytes),
-        "GTIN":bytes2hexstr(GTIN_bytes),
-        "VID":bytes2hexstr(VID_bytes),
-        "MID":bytes2hexstr(MID_bytes),
-        "MAC":bytes2hexstr(MAC_bytes),
-        "TRNG":bytes2hexstr(TRNG_bytes),
-        "PAGE":bytes2hexstr(PAGE_bytes),
-        "RUNM":bytes2hexstr(RNUM_bytes),
-        "CAL1":{
-              "TEMP":str(Cal_Data[0][0]),
-              "ADC":str(Cal_Data[0][1])
-          },
-        "CAL2":{
-              "TEMP":str(Cal_Data[1][0]),
-              "ADC":str(Cal_Data[1][1])
-          },
-        "CAL3":{
-              "TEMP":str(Cal_Data[2][0]),
-              "ADC":str(Cal_Data[2][1])
-          }
-    }
-  result_print(info_json)
-  record_number_int = bytes2int(RNUM_bytes)
-  record_data_size_int = int(record_number_int*11/8)
-  if(record_number_int*11%8):
-    record_data_size_int += 1
-  record_data_size_mod_int = record_data_size_int%8
-  if(record_data_size_mod_int):
-    record_data_size_int = record_data_size_int + (8-record_data_size_mod_int)
-  # 读取数据
-  NDEF_MAX_INT = 4032
-  start_address_int = 78
-  if (start_address_int+record_data_size_int)>NDEF_MAX_INT:
-    record_data_size_int = record_data_size_int - 8
-    record_number_int = int(record_data_size_int*8/11)
-  data_bytes = ISO14443_4A_ReadBinary(card_service,0xA2, 78, record_data_size_int, DATA_SIZE)
-  data_bytes = b''.join(map(lambda d:int.to_bytes(d, 1, 'little'), data_bytes))
-  data_bytes = Des3_Cipher.decrypt(data_bytes)
-  # 解析adc
-  tempture_data = [0 for i in range(record_number_int)]
-  repeat_cnt = int(record_number_int/8)
-  count_residue = record_number_int%8
-  if count_residue>0:
-    repeat_cnt += 1
-  decode_count = 0
-  for i in range(0, repeat_cnt):
-    for j in range(0, 8):
-      if decode_count>=record_number_int:
-        break
-      else:
-        decode_count += 1
-      if j==0:
-        adc_data_int = data_bytes[i*11]*256+data_bytes[i*11+1]
-        adc_data_int = (adc_data_int&0x0000FFE0)>>5
-      elif j==1:
-        adc_data_int = data_bytes[i*11+1]*256+data_bytes[i*11+2]
-        adc_data_int = (adc_data_int&0x00001FFC)>>2
-      elif j==2:
-        adc_data_int = data_bytes[i*11+2]*65536+data_bytes[i*11+3]*256+data_bytes[i*11+4]
-        adc_data_int = (adc_data_int&0x0003FF80)>>7
-      elif j==3:
-        adc_data_int = data_bytes[i*11+4]*256+data_bytes[i*11+5]
-        adc_data_int = (adc_data_int&0x00007FF0)>>4
-      elif j==4:
-        adc_data_int = data_bytes[i*11+5]*256+data_bytes[i*11+6]
-        adc_data_int = (adc_data_int&0x00000FFE)>>1
-      elif j==5:
-        adc_data_int = data_bytes[i*11+6]*65536+data_bytes[i*11+7]*256+data_bytes[i*11+8]
-        adc_data_int = (adc_data_int&0x0001FFC0)>>6
-      elif j==6:
-        adc_data_int = data_bytes[i*11+8]*256+data_bytes[i*11+9]
-        adc_data_int = (adc_data_int&0x000003FF8)>>3
-      elif j==7:
-        adc_data_int = data_bytes[i*11+9]*256+data_bytes[i*11+10]
-        adc_data_int = (adc_data_int&0x000007FF)>>0
-      adc_data_int = int(adc_data_int)
-      if TEMPTURE_SHOW==True:
-        if(adc_data_int<Cal_Data[1][1]):                            # 温度小于第二个校准点,使用第一个点和第二个点计算KB值
-          tempture1 = Cal_Data[0][0]
-          adc1 = Cal_Data[0][1]
-          tempture2 = Cal_Data[1][0]
-          adc2 = Cal_Data[1][1]
-        else:                         
-          tempture1 = Cal_Data[1][0]
-          adc1 = Cal_Data[1][1]
-          tempture2 = Cal_Data[2][0]
-          adc2 = Cal_Data[2][1]
-        k = (tempture1-tempture2)/(adc1-adc2)
-        b = tempture1 - (k*adc1)
-        tempture_float = k*adc_data_int + b
-        tempture_data[decode_count-1] = tempture_float
-      else:
-        tempture_data[decode_count-1] = adc_data_int
-  result_print(str(tempture_data))
-  info_json['tempture_data'] = tempture_data
-  # 波形显示
-  if show_picture_tag:
-    DATA_FILTER = 0
-    x = [0 for i in range(record_number_int)]
-    for i in range(0, record_number_int):
-      x[i] = i
-    plt.figure(figsize=(20.48, 10.24))
-    plt.title('Tempture Record')
-    lable_name = bytes2hexstr(VID_bytes)
-    plt.plot(x, tempture_data, label= lable_name)
-    plt.legend() # 显示图例
-    plt.ylim(0, 2048)
-    plt.ylabel('adc value')
-    plt.xlabel('time')
-    plt.show()
-  return info_json
-
-
-# def active():
-
-# card_service = init()
-# Des3_Cipher = COS_Access(card_service,'0xA0 0xA1 0xA2 0xA3 0xA4 0xA5 0xA6 0xA7','0xA8 0xA9 0xAA 0xAB 0xAC 0xAD 0xAE 0xAF')
-# COS_Analysis(card_service,Des3_Cipher,60,False)
-# COS_Write_Config(card_service,Des3_Cipher,49162,8,[0xF0, 0x03, 0x00, 0x0F, 0x20, 0x00, 0xF6, 0x00],8)
-# data_bytes = COS_Read_Config(card_service,Des3_Cipher,49162,8,8)
-# COS_Read_Tempture(Des3_Cipher)
-# a = rnd.randbytes(8)

binární
hello.exe


+ 5 - 0
logger.log

@@ -0,0 +1,5 @@
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:[WinError 2] 系统找不到指定的文件。
+DEBUG:pywebview:Using WinForms / EdgeHTML

+ 0 - 16
main.py

@@ -1,16 +0,0 @@
-import webview
-import reader
-
-
-class Api:
-    # 查询标签编号
-    def read_uid(self):
-        card_service = reader.init()
-        uid = reader.read_uid(card_service)
-        return uid
-
-
-if __name__ == '__main__':
-    api = Api()
-    window = webview.create_window('邦德威', url='helloworld.html', js_api=api)
-    webview.start(debug=True)

+ 7 - 5
package-lock.json

@@ -8363,11 +8363,6 @@
         "sha.js": "^2.4.8"
       }
     },
-    "pdfjs-dist": {
-      "version": "2.6.347",
-      "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-2.6.347.tgz",
-      "integrity": "sha512-QC+h7hG2su9v/nU1wEI3SnpPIrqJODL7GTDFvR74ANKGq1AFJW16PH8VWnhpiTi9YcLSFV9xLeWSgq+ckHLdVQ=="
-    },
     "performance-now": {
       "version": "2.1.0",
       "resolved": "https://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz",
@@ -11373,6 +11368,13 @@
         "raw-loader": "^4.0.2",
         "vue-resize-sensor": "^2.0.0",
         "worker-loader": "^2.0.0"
+      },
+      "dependencies": {
+        "pdfjs-dist": {
+          "version": "2.6.347",
+          "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-2.6.347.tgz",
+          "integrity": "sha512-QC+h7hG2su9v/nU1wEI3SnpPIrqJODL7GTDFvR74ANKGq1AFJW16PH8VWnhpiTi9YcLSFV9xLeWSgq+ckHLdVQ=="
+        }
       }
     },
     "vue-resize-sensor": {

binární
public/favicon.ico


+ 10 - 2
src/api/api.js

@@ -1,10 +1,18 @@
 import request from '../utils/request'
 export function login(data) {
   return request({
+    // url: 'login/username',
     url: 'auth/login1',
     method: 'post',
-    data: data,
+    data,
     headers: { 'Content-Type': 'application/x-www-form-urlencoded', }
   })
 }
-//'Authorization': 'Bearer ' + localStorage.getItem('token')
+export function chip(data){
+  return request({
+    url:'/chip/uploadChip',
+    method:'post',
+    data,
+    headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Authorization': 'Bearer ' + sessionStorage.getItem('token')}
+  })
+}

binární
src/assets/wechart_img1.png


binární
src/assets/zy_icon1.png


binární
src/assets/zy_icon2.png


binární
src/assets/zy_icon3.png


+ 383 - 130
src/components/cardHome.vue

@@ -1,89 +1,113 @@
 <template>
   <div>
-    <div class="homeview">
-      <h1>邦德威桌面端 {{ statusText }}</h1>
-      <el-row :gutter="20">
-        <el-form
-          label-position="left"
-          :model="ruleForm"
-          status-icon
-          :rules="rules"
-          ref="ruleForm"
-          label-width="80px"
-          class="demo-ruleForm"
-        >
-          <el-col :span="10" :offset="2">
-            <el-form-item prop="keyA" label="keyA:">
-              <el-input
-                type="text"
-                maxlength="16"
-                show-word-limit
-                v-model.trim="ruleForm.keyA"
-                placeholder="请输入KeyA"
-              ></el-input>
-            </el-form-item>
-          </el-col>
-          <el-col :span="10">
-            <el-form-item prop="keyB" label="keyB:">
-              <el-input
-                type="text"
-                maxlength="16"
-                show-word-limit
-                v-model.trim="ruleForm.keyB"
-                placeholder="请输入KeyB"
-              ></el-input>
-            </el-form-item>
-          </el-col>
-        </el-form>
-      </el-row>
-      <el-row :gutter="20" class="but">
-        <el-button type="primary">读取无缘</el-button>
-        <el-button type="primary">读取有缘</el-button>
-        <el-button type="primary">检查有缘标签状态</el-button>
-        <el-button type="primary">激活有源标签</el-button>
-      </el-row>
+    <div class="homeTop">
+      <span>hi! {{ telephone }},</span>
+      <i :class="status ? 'active' : ''"
+        >当前状态:{{ status ? "读写器已就绪" : "读写器未就绪" }},</i
+      >
+      <span @click="logout">退出</span>
+    </div>
+    <div class="homediv">
+      <h1>邦德威桌面端</h1>
     </div>
     <div class="result">
       <div>
         <!-- //src需要展示的PDF地址 -->
-        <pdf src="http://121.229.41.37:8091/file/pdf/04ADB549100269_.pdf"></pdf>
+        <!-- <pdf :src="pdfSrc"></pdf> -->
+        <div class="pdf_con" v-if="Object.keys(chipData).length!=0">
+        <!-- <div class="pdf_con"> -->
+          <div class="rp_con_1">
+            <div class="rp_top">
+              <div class="rp_top_tit">产品追溯报告</div>
+            </div>
+            <div class="rp_top_txt">
+              <div>报告编号 {{ chipData.code }}</div>
+              <div>报告日期 {{ chipData.datetime }}</div>
+            </div>
+            <div class="rp_mid">
+              <div class="rp_mid_tit">产品详情</div>
+              <div class="rp_mid_con">
+                <div class="rp_mid_lab1">药品商品名称:</div>
+                <div class="rp_mid_val1">
+                  {{ chipData.vaccineName || "N/A" }}
+                </div>
+                <div class="rp_mid_lab2">规格:</div>
+                <div class="rp_mid_val2">
+                  {{ chipData.vaccineCategory || "N/A" }}
+                </div>
+                <div class="rp_mid_lab1">药品通用名称:</div>
+                <div class="rp_mid_val1">
+                  {{ chipData.vaccineCommonName || "N/A" }}
+                </div>
+                <div class="rp_mid_lab2">药品本位码:</div>
+                <div class="rp_mid_val2">
+                  {{ chipData.standardCode || "N/A" }}
+                </div>
+                <div class="rp_mid_lab1">生产企业名称:</div>
+                <div class="rp_mid_val1">
+                  {{ chipData.factoryName || "N/A" }}
+                </div>
+                <div class="rp_mid_lab2">药品批准文号:</div>
+                <div class="rp_mid_val2">
+                  {{ chipData.approvalNumber || "N/A" }}
+                </div>
+                <div class="rp_mid_lab1">有效期:</div>
+                <div class="rp_mid_val1">
+                  {{chipData.vaccineExpiryDate ? chipData.vaccineExpiryDate + "个月" : "N/A"}}
+                </div>
+                <div class="rp_mid_lab2">国家药品标识码:</div>
+                <div class="rp_mid_val2">
+                  {{ chipData.identificationCode || "N/A" }}
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="pdf_res">
+            <div class="pdf_res_txt">
+              <div class="pdf_rt1">
+                追溯结果: <span class="pdf_rt1_g">未见异常</span>
+              </div>
+              <div class="pdf_rt2">发未发现异常, 请核对内外包装与本报告</div>
+              <div class="pdf_rt2">所载数据是否一致, 并按相关规定使用</div>
+            </div>
+            <div class="pdf_res_img">
+              <img src="../assets/zy_icon1.png" alt="" />
+            </div>
+          </div>
+          <div class="pdf_btm">
+            <img src="../assets/wechart_img1.png" />
+            <div class="pdf_btm_txt">
+              <div class="pdf_btm_tit">免责声明:</div>
+              <div>
+                本报告基于多重加密全程追溯数据得出。报告中所提供的信息仅供参考,可作为判定产品质量、产品真伪的佐证。本报告不是产品质量好坏或真伪的结论性报告,不能以此报告所载内容作为判定产品质量好坏或真伪的唯一依据。本报告最终解释权归产品生产企业所有,未经书面许可,任何机构和个人不得以任何形式翻版、复制或发布本报告,不得对本报告进行有悖原意的引用、删除和修改。发布者将通过法律途径维护其一切权利。
+              </div>
+            </div>
+          </div>
+        </div>
       </div>
       <div>
-        <el-table :data="tableData" height="250" border style="width: 100%">
-          <el-table-column prop="date" label="日期" width="180">
-          </el-table-column>
-          <el-table-column prop="name" label="姓名" width="180">
-          </el-table-column>
-          <el-table-column prop="address" label="地址"> </el-table-column>
+        <el-table :data="tableData" height="250" style="width: 100%">
+          <el-table-column prop="code" label="编号"></el-table-column>
+          <el-table-column prop="date" label="日期"></el-table-column>
+          <!-- <el-table-column prop="down" label="">
+              <template slot-scope="scope">
+                <a :href="scope.down">查看报告</a>
+              </template>
+          </el-table-column> -->
         </el-table>
       </div>
     </div>
   </div>
 </template>
 <script>
-import pdf from "vue-pdf";
+// import pdf from "vue-pdf";
+import { chip } from "../api/api";
+// import { Message } from "element-ui";
+import qs from "qs";
 export default {
   name: "Home",
-  components: { pdf },
+  // components: { pdf },
   data() {
-    const validateKeya = (rule, value, callback) => {
-      value = value.replace(/\s/g, "");
-      let patter = new RegExp("[a-zA-Z0-9]{16,16}$");
-      if (!patter.test(value)) {
-        return callback(new Error("keyA必须为16位数字和字母"));
-      } else {
-        callback();
-      }
-    };
-    const validateKeyB = (rule, value, callback) => {
-      value = value.replace(/\s/g, "");
-      let patter = new RegExp("[a-zA-Z0-9]{16,16}$");
-      if (!patter.test(value)) {
-        return callback(new Error("keyB必须为16位数字和字母"));
-      } else {
-        callback();
-      }
-    };
     return {
       ruleForm: {
         keyA: "",
@@ -91,88 +115,181 @@ export default {
       },
       statusText: "读写器未就绪",
       status: false,
-      rules: {
-        keyA: [
-          { required: true, message: "请输入KeyA", trigger: "blur" },
-          { validator: validateKeya, trigger: "blur" },
-        ],
-        keyB: [
-          { required: true, message: "请输入KeyB", trigger: "blur" },
-          { validator: validateKeyB, trigger: "blur" },
-        ],
-      },
-      tableData: [
-        {
-          date: "2016-05-03",
-          name: "王小虎",
-          address: "上海市普陀区金沙江路 1518 弄",
-        },
-        {
-          date: "2016-05-02",
-          name: "王小虎",
-          address: "上海市普陀区金沙江路 1518 弄",
-        },
-        {
-          date: "2016-05-04",
-          name: "王小虎",
-          address: "上海市普陀区金沙江路 1518 弄",
-        },
-        {
-          date: "2016-05-01",
-          name: "王小虎",
-          address: "上海市普陀区金沙江路 1518 弄",
-        },
-        {
-          date: "2016-05-08",
-          name: "王小虎",
-          address: "上海市普陀区金沙江路 1518 弄",
-        },
-        {
-          date: "2016-05-06",
-          name: "王小虎",
-          address: "上海市普陀区金沙江路 1518 弄",
-        },
-        {
-          date: "2016-05-07",
-          name: "王小虎",
-          address: "上海市普陀区金沙江路 1518 弄",
-        },
-      ],
+      chipData: {},
+      telephone: "",
+      code: "",
+      result: "",
+      // pdfSrc:'',
+      pdfSrc: "http://121.229.41.37:8091/file/pdf/04ADB549100269_.pdf",
+      rules: {},
+      tableData: [],
     };
   },
   created() {
-    this.statusText = "读写器未就绪";
+    const userinfo = JSON.parse(sessionStorage.getItem("userinfo"));
+    this.tableData = JSON.parse(localStorage.getItem('tableData')) || [];
+    this.telephone = userinfo.telephone;
+    this.recursiveFun();
+  },
+  methods: {
+    logout() {
+      localStorage.removeItem("token");
+      localStorage.removeItem("userinfo");
+      this.$router.push({ path: "/" });
+    },
+    recursiveFun(){
+      var that = this;
+      this.timeout = null;
+      this.timeout=setTimeout(() => {
+        this.getCodeInfo();
+        clearTimeout(that.timeout);
+      }, 500);
+    },
+    getCodeInfo() {
+      var that = this;
+      that.result = "";
+      that.pdfSrc = "";
+      // eslint-disable-next-line no-undef
+      pywebview.api.read_uid() //A9554912
+        .then(res => {
+          res = res.replace(/\s/g, "");
+          that.result = res;
+          chip(
+            qs.stringify({
+              chipNumber: res,
+              longitude: 0,
+              latitude: 0,
+              inoculators: "",
+              incs: "",
+              agin: true,
+              vaccinationCipher: "",
+            })
+          ).catch(err=>{
+            // alert('请求失败,请重试',err);
+            that.$message({
+              message: "请求失败,请重试!",
+              type: "success",
+            });
+            that.recursiveFun();
+          }).then(response => {
+            that.chipData = response.data;
+            that.$message({
+              message: "请求成功",
+              type: "success",
+            });
+            that.setTableData({code:response.data.chipNumber,date:new Date().toLocaleString(),down:'http://121.229.41.37:8091/file/pdf/'+response.data.chipNumber+'_.pdf'});
+            that.recursiveFun();
+          })
+        })
+        .catch(() => {
+          that.recursiveFun();
+        });
+    },
+    setTableData(params={}){
+      this.tableData.push(params);
+      localStorage.setItem('tableData',JSON.stringify(this.tableData));
+    }
   },
-  methods: {},
   mounted() {
-    window.addEventListener(
-      "pywebviewready",
-      () => {
-        this.statusText = "读写器已就绪";
-        this.status = true;
-      },
-      true
-    );
+    var that = this;
+    that.status = this.isStatus; //04ADB549100269
+    // that.chipData = {
+    //   approvalNumber: "202301017",
+    //   batch: "123321",
+    //   batchCertificate: null,
+    //   beginDate: "2021-07-28",
+    //   chatImageUrl: null,
+    //   chipNumber: "04ADB549100269",
+    //   code: "00860102021",
+    //   datetime: "2021-12-08 14:57:32",
+    //   doctorEmail: null,
+    //   doctorId: null,
+    //   doctorName: "医生(别改)",
+    //   doctorTelephone: "13000000002",
+    //   factoryEmail: null,
+    //   factoryId: 167,
+    //   factoryName: "中义商务展示",
+    //   gmpName: null,
+    //   gmpPath: null,
+    //   hospitalId: null,
+    //   hospitalName: "来广营社区卫生服务中心-预防接种门诊",
+    //   identificationCode: "国药10000011",
+    //   standardCode: "769000001112",
+    //   status: 6,
+    //   type: 0,
+    //   vaccinationCipher: null,
+    //   vaccinationSite: "推荐的接种途径是肌肉注射。最佳部位为上臂三角肌。",
+    //   vaccineCategory: "1",
+    //   vaccineCommonName: "中义科技守护健康",
+    //   vaccineExpiryDate: "123",
+    //   vaccineName: "中义科技疫苗展示",
+    //   vaccineNumber: null,
+    // };
+    // chip(
+    //   qs.stringify({
+    //     chipNumber: 'A9554912',
+    //     longitude: 0,
+    //     latitude: 0,
+    //     inoculators: "",
+    //     incs: "",
+    //     agin: true,
+    //     vaccinationCipher: "",
+    //   })
+    // ).then((res) => {
+    //   that.chipData = res.data;
+    //   that.setTableData({code:res.data.chipNumber,date:new Date().toLocaleString(),down:'http://121.229.41.37:8091/file/pdf/'+res.data.chipNumber+'_.pdf'});
+    //   // that.recursiveFun();
+    // }).catch(()=>{
+    //   // that.recursiveFun();
+    //   // alert('请求失败,请重试');
+    // })
+  },
+  beforeDestroy() {
+    this.removeEvent();
+    this.timeout = null;
+    this.status = false;
   },
 };
 </script>
-<style lang="less" scoped>
+<style lang="less">
 h1 {
   text-align: center;
-  padding-bottom: 25px;
+  font-size: 25px;
 }
-.homeview {
+.homediv {
   padding: 30px;
 }
+.homeTop {
+  text-align: right;
+  padding: 20px 20px 0 0;
+  span {
+    color: #606266;
+    cursor: pointer;
+  }
+  i {
+    font-style: normal;
+    color: red;
+  }
+  .active {
+    color: green !important;
+  }
+}
 .result {
   padding: 30px;
+  height: 950px;
   display: flex;
-  div {
+  & > div {
     width: 50%;
     border: 1px solid #e8e8e8;
     min-height: 400px;
     text-align: center;
   }
+  .el-table {
+    height: 100% !important;
+  }
+  .el-table::before {
+    display: none;
+  }
 }
 .but {
   text-align: center;
@@ -203,4 +320,140 @@ h1 {
   padding: 10px 0;
   background-color: #f9fafc;
 }
+.pdf_con {
+  background: #ffffff;
+  padding: 15px 30px 50px 30px;
+  border-top: 20px solid #f6f6f6;
+  border-bottom: 20px solid #f6f6f6;
+}
+.pdf_res {
+  padding: 34px 18px 50px;
+  border-bottom: 1px dashed #979797;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+.pdf_res_txt {
+  width: 354px;
+  flex: none;
+}
+.pdf_res_img {
+  width: 140px;
+  flex: none;
+}
+.pdf_res_img image {
+  width: 140px;
+  height: 140px;
+}
+.rp_top {
+  padding: 15px 0;
+  margin: auto;
+  border-bottom: 2px solid #0e7ff2;
+}
+.rp_top_tit {
+  text-align: center;
+  font-size: 30px;
+  color: #333333;
+}
+.rp_top_txt {
+  margin: 2px auto;
+  justify-content: space-between;
+  display: flex;
+  align-items: center;
+  font-size: 16px;
+  color: #333333;
+  padding: 15px 68px;
+  border-top: 1px solid #0e7ff2;
+}
+.rp_mid {
+  padding: 0 0 40px 0;
+  margin: 0 auto auto auto;
+  border-bottom: 1px dashed #979797;
+}
+.rp_mid_tit {
+  font-size: 24px;
+  color: #000000;
+  line-height: 40px;
+  text-align: left;
+}
+.rp_mid_con {
+  font-size: 16px;
+  display: flex;
+  justify-content: space-between;
+  flex-wrap: wrap;
+  align-items: center;
+  color: #666666;
+}
+.rp_mid_item {
+  display: flex;
+  width: 50%;
+  flex: auto;
+}
+.pdf_rt1 {
+  font-size: 28px;
+  color: #333333;
+  line-height: 50px;
+}
+.pdf_rt1_o {
+  font-size: 34px;
+  color: #ff702f;
+}
+.pdf_rt1_g {
+  font-size: 34px;
+  color: #2b9f2c;
+}
+.rp_mid_con > div {
+  text-align: left;
+  width: 25%;
+  line-height: 22px;
+  padding: 6px 0;
+}
+.pdf_rt2 {
+  font-size: 20px;
+  color: #666666;
+  line-height: 35px;
+}
+.rp_mid_lab1,
+.rp_mid_lab2 {
+  color: #222;
+}
+.rp_mid_lab1 {
+  width: 20% !important;
+}
+.rp_mid_val1 {
+  width: 30% !important;
+}
+div.rp_mid_val2 {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+.pdf_btm {
+  margin: 45px auto auto auto;
+  padding: 15px;
+  background: #f3f3f3;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  font-family: "Microsoft YaHei";
+}
+.pdf_btm image {
+  height: 172px;
+  width: 172px;
+  flex: none;
+  margin-right: 14px;
+}
+.pdf_btm_txt {
+  width: 100%;
+  flex: auto;
+  font-size: 14px;
+  color: #666666;
+  line-height: 26px;
+  text-align: left;
+  padding-left: 15px;
+}
+.pdf_btm_tit {
+  font-size: 20px;
+  color: #222222;
+}
 </style>

+ 1 - 0
src/components/debug.log

@@ -1,3 +1,4 @@
 [1206/095444.300:ERROR:registration_protocol_win.cc(102)] CreateFile: 系统找不到指定的文件。 (0x2)
 [1206/095446.331:ERROR:registration_protocol_win.cc(102)] CreateFile: 系统找不到指定的文件。 (0x2)
 [1206/095527.613:ERROR:registration_protocol_win.cc(102)] CreateFile: 系统找不到指定的文件。 (0x2)
+[1208/152029.059:ERROR:registration_protocol_win.cc(102)] CreateFile: 系统找不到指定的文件。 (0x2)

+ 10 - 6
src/components/signIn/SignIn.vue

@@ -27,7 +27,8 @@
                   <el-input
                     prefix-icon="el-icon-phone"
                     type="text"
-                    v-model="ruleForm.telephone"
+                    v-model.trim="ruleForm.telephone"
+                    maxlength="11"
                     placeholder="请输入手机号"
                   ></el-input>
                 </el-form-item>
@@ -102,8 +103,8 @@ export default {
     return {
       imgSrc: require("../../assets/logo.png"), // logo
       ruleForm: {
-        telephone: "", // 手机号
-        password: "", // 密码
+        telephone: '13000000002', // 手机号
+        password: '123456', // 密码
         randYZM: "", // 验证码
         // checked: false, // 下次自动登录
         imageCode: "", // 图片验证码
@@ -185,7 +186,7 @@ export default {
           login(qs.stringify(newsForm)).then(
             function (data) {
               if (data.code == 200) {
-                localStorage.setItem("token", data.data.token);
+                sessionStorage.setItem("token", data.data.token);
                 // 记住密码/不记住密码
                 // _this.$cookies.set("id", data.data.id);
                 // _this.$cookies.set("telephone", _this.ruleForm.telephone);
@@ -204,7 +205,8 @@ export default {
                 });
                 if (_this.id != null || _this.id != undefined) {
                   let token = data.data.token;
-                  localStorage.setItem("cardToken", token);
+                  sessionStorage.setItem("token", token);
+                  sessionStorage.setItem("userinfo", JSON.stringify(data.data));
                   // _this.$cookies.set("factoryList", data.data);
                   // localStorage.setItem("factoryId", data.data.factoryId);
                   // roleId 1:超级管理员 19:厂家管理员
@@ -310,7 +312,9 @@ export default {
       //this.ruleForm.password = '123456';
       this.ruleForm.checked = false;
     }
-    console.log(this.$cookies);
+    // window.addEventListener('pywebviewready',function(){
+      
+    // },)
   },
 };
 </script>

+ 11 - 1
src/main.js

@@ -6,7 +6,17 @@ import './assets/style/global.css';
 Vue.config.productionTip = false
 import router from "./router";
 import store from "./store";
-import VueCookies from 'vue-cookies'
+import VueCookies from 'vue-cookies';
+window.addEventListener('pywebviewready', function () {
+  Vue.prototype.isStatus = true;
+  alert('读写器已就绪')
+},true)
+Vue.prototype.removeEvent = function () {
+  window.removeEventListener("pywebviewready", function () {
+    Vue.prototype.isStatus = false;
+    alert('读写器已解除')
+  });
+}
 Vue.use(Element);
 Vue.use(VueCookies);
 new Vue({

+ 5 - 8
src/utils/request.js

@@ -7,7 +7,7 @@ import {
 // import store from '@/store'
 // import { getToken } from '@/utils/auth'
 import errorCode from '@/utils/errorCode'
-
+import router from '../router/index';
 axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
 axios.defaults.withCredentials = true;
 // 创建axios实例
@@ -20,9 +20,6 @@ const service = axios.create({
 })
 // request拦截器
 service.interceptors.request.use(config => {
-  if(process.env.NODE_ENV == 'production'){
-    config.baseURL = 'https://bdw.vandh.cn/api/'
-  }
   // 是否需要设置 token
   // const isToken = (config.headers || {}).isToken === false
   // if (getToken() && !isToken) {
@@ -59,7 +56,7 @@ service.interceptors.request.use(config => {
 // 响应拦截器
 service.interceptors.response.use(res => {
   // 未设置状态码则默认成功状态
-  const code = res.data.code || 200;
+  const code = res.data.code;
   // 获取错误信息
   const msg = errorCode[code] || res.data.msg || errorCode['default']
   // if (code === 401) {
@@ -84,8 +81,8 @@ service.interceptors.response.use(res => {
     Notification.error({
       title: msg
     })
-    if(code == 401){
-      this.$router.push({
+    if(code == 102 || code == 401){
+      router.push({
         path: "/",
       });
       localStorage.removeItem("token");
@@ -108,7 +105,7 @@ service.interceptors.response.use(res => {
       message = "系统接口" + message.substr(message.length - 3) + "异常";
     }
     Message({
-      message: message,
+      message: error,
       type: 'error',
       duration: 5 * 1000
     })

+ 1 - 2
vue.config.js

@@ -26,13 +26,12 @@ module.exports = {
   devServer: {// 环境配置
     host: '0.0.0.0',
     port: 8081,
-    https: false,
     hotOnly: false,
     open: true, //配置自动启动浏览器
     proxy: {// 配置多个代理(配置一个 proxy: 'http://localhost:4000' )
       '/api': {
         // target: `http://monitor.vandh.org:88`,
-        // target: `http://192.168.1.13:8080/`,
+        // target: `https://fxc.vandh.cn/prod-api/`,
         target: `https://bdw.vandh.cn/api/`,
         changeOrigin: true,
         pathRewrite: {

Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů