skyffire 1 год назад
Родитель
Сommit
974856924c
5 измененных файлов с 300 добавлено и 19 удалено
  1. 42 2
      example/main.js
  2. 237 9
      example/package-lock.json
  3. 3 1
      example/package.json
  4. 10 7
      example/src/App.js
  5. 8 0
      example/src/preload.js

+ 42 - 2
example/main.js

@@ -1,4 +1,4 @@
-const { app, BrowserWindow, Menu, session } = require('electron');
+const { app, BrowserWindow, Menu, session,ipcMain  } = require('electron');
 const path = require('path');
 const fs = require('fs');
 const crypto = require('crypto');
@@ -9,6 +9,27 @@ const password = 'skyfffire-password';
 const key = crypto.createHash('sha256').update(password).digest();
 let memoryCache = {};
 
+const dataFilePath = path.join(app.getPath('userData'), 'shareSession.json');
+function readData() {
+  try {
+    if (fs.existsSync(dataFilePath)) {
+      const rawData = fs.readFileSync(dataFilePath);
+      return JSON.parse(rawData);
+    }
+  } catch (error) {
+    console.error('Error reading data:', error);
+  }
+  return {};
+}
+
+function writeData(data) {
+  try {
+    fs.writeFileSync(dataFilePath, JSON.stringify(data, null, 2));
+  } catch (error) {
+    console.error('Error writing data:', error);
+  }
+}
+
 // Function to decrypt a file and store its content in memory
 function decryptFile(filePath) {
   const fileContent = fs.readFileSync(filePath);
@@ -43,6 +64,7 @@ function createWindow() {
     height: 900,
     icon: path.join(__dirname, 'favicon.ico'), // 设置窗口图标
     webPreferences: {
+      preload: path.join(__dirname, 'src', 'preload.js'), // 确认预加载脚本路径正确
       nodeIntegration: false,
       contextIsolation: true,
     },
@@ -53,7 +75,7 @@ function createWindow() {
   win.loadFile(index); // 确保路径正确
 
   // 打开调试工具
-  if (isDev) win.webContents.openDevTools();
+  win.webContents.openDevTools();
 
   // 创建菜单模板,只包含一个刷新按钮
   const menuTemplate = [
@@ -79,6 +101,24 @@ function createWindow() {
   console.log(Object.keys(memoryCache))
 }
 
+app.whenReady().then(() => {
+  ipcMain.handle('get-login-info-data', () => {
+    return readData();
+  });
+
+  ipcMain.handle('set-login-info-data', (event, newData) => {
+    writeData(newData);
+  });
+
+  ipcMain.handle('get-symbol-data', () => {
+    return readData();
+  });
+
+  ipcMain.handle('set-symbol-data', (event, newData) => {
+    writeData(newData);
+  });
+});
+
 app.on('ready', () => {
   // Intercept file requests and serve from memory
   session.defaultSession.webRequest.onBeforeRequest((details, callback) => {

+ 237 - 9
example/package-lock.json

@@ -15,6 +15,7 @@
         "react-dom": "file:../node_modules/react-dom",
         "react-hot-toast": "^2.4.1",
         "react-scripts": "file:../node_modules/react-scripts",
+        "tdesign-react": "^1.7.5",
         "uuid": "^10.0.0"
       },
       "devDependencies": {
@@ -460,6 +461,17 @@
         "@babel/core": "^7.0.0-0"
       }
     },
+    "node_modules/@babel/runtime": {
+      "version": "7.17.9",
+      "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.17.9.tgz",
+      "integrity": "sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==",
+      "dependencies": {
+        "regenerator-runtime": "^0.13.4"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
     "node_modules/@babel/template": {
       "version": "7.24.6",
       "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.6.tgz",
@@ -1032,6 +1044,15 @@
         "node": ">=14"
       }
     },
+    "node_modules/@popperjs/core": {
+      "version": "2.11.8",
+      "resolved": "https://registry.npmmirror.com/@popperjs/core/-/core-2.11.8.tgz",
+      "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/popperjs"
+      }
+    },
     "node_modules/@rongmz/react-stock-heatmap": {
       "resolved": "..",
       "link": true
@@ -1155,11 +1176,20 @@
         "@types/node": "*"
       }
     },
+    "node_modules/@types/sortablejs": {
+      "version": "1.15.8",
+      "resolved": "https://registry.npmmirror.com/@types/sortablejs/-/sortablejs-1.15.8.tgz",
+      "integrity": "sha512-b79830lW+RZfwaztgs1aVPgbasJ8e7AXtZYHTELNXZPsERt4ymJdjV4OccDbHQAvHrCcFpbF78jkm0R6h/pZVg=="
+    },
+    "node_modules/@types/tinycolor2": {
+      "version": "1.4.6",
+      "resolved": "https://registry.npmmirror.com/@types/tinycolor2/-/tinycolor2-1.4.6.tgz",
+      "integrity": "sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw=="
+    },
     "node_modules/@types/validator": {
       "version": "13.12.0",
       "resolved": "https://registry.npmmirror.com/@types/validator/-/validator-13.12.0.tgz",
-      "integrity": "sha512-nH45Lk7oPIJ1RVOF6JgFI6Dy0QpHEzq4QecZhvguxYPDwT8c93prCMqAtiIttm39voZ+DDR+qkNnMpJmMBRqag==",
-      "dev": true
+      "integrity": "sha512-nH45Lk7oPIJ1RVOF6JgFI6Dy0QpHEzq4QecZhvguxYPDwT8c93prCMqAtiIttm39voZ+DDR+qkNnMpJmMBRqag=="
     },
     "node_modules/@types/verror": {
       "version": "1.10.10",
@@ -1991,6 +2021,11 @@
         "validator": "^13.9.0"
       }
     },
+    "node_modules/classnames": {
+      "version": "2.5.1",
+      "resolved": "https://registry.npmmirror.com/classnames/-/classnames-2.5.1.tgz",
+      "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow=="
+    },
     "node_modules/cli-truncate": {
       "version": "2.1.0",
       "resolved": "https://registry.npmmirror.com/cli-truncate/-/cli-truncate-2.1.0.tgz",
@@ -2252,8 +2287,12 @@
     "node_modules/csstype": {
       "version": "3.1.3",
       "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz",
-      "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
-      "peer": true
+      "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
+    },
+    "node_modules/dayjs": {
+      "version": "1.11.10",
+      "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.10.tgz",
+      "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ=="
     },
     "node_modules/debug": {
       "version": "4.3.4",
@@ -2473,6 +2512,15 @@
         "node": ">=8"
       }
     },
+    "node_modules/dom-helpers": {
+      "version": "5.2.1",
+      "resolved": "https://registry.npmmirror.com/dom-helpers/-/dom-helpers-5.2.1.tgz",
+      "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
+      "dependencies": {
+        "@babel/runtime": "^7.8.7",
+        "csstype": "^3.0.2"
+      }
+    },
     "node_modules/dotenv": {
       "version": "9.0.2",
       "resolved": "https://registry.npmmirror.com/dotenv/-/dotenv-9.0.2.tgz",
@@ -3463,6 +3511,19 @@
         "node": ">= 0.4"
       }
     },
+    "node_modules/hoist-non-react-statics": {
+      "version": "3.3.2",
+      "resolved": "https://registry.npmmirror.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
+      "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
+      "dependencies": {
+        "react-is": "^16.7.0"
+      }
+    },
+    "node_modules/hoist-non-react-statics/node_modules/react-is": {
+      "version": "16.13.1",
+      "resolved": "https://registry.npmmirror.com/react-is/-/react-is-16.13.1.tgz",
+      "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
+    },
     "node_modules/hosted-git-info": {
       "version": "4.1.0",
       "resolved": "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
@@ -4013,9 +4074,7 @@
     "node_modules/js-tokens": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
-      "dev": true,
-      "peer": true
+      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
     },
     "node_modules/js-yaml": {
       "version": "4.1.0",
@@ -4165,8 +4224,7 @@
     "node_modules/lodash": {
       "version": "4.17.21",
       "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz",
-      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
-      "dev": true
+      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
     },
     "node_modules/lodash.defaults": {
       "version": "4.2.0",
@@ -4203,6 +4261,17 @@
       "dev": true,
       "peer": true
     },
+    "node_modules/loose-envify": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmmirror.com/loose-envify/-/loose-envify-1.4.0.tgz",
+      "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+      "dependencies": {
+        "js-tokens": "^3.0.0 || ^4.0.0"
+      },
+      "bin": {
+        "loose-envify": "cli.js"
+      }
+    },
     "node_modules/lowercase-keys": {
       "version": "2.0.0",
       "resolved": "https://registry.npmmirror.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
@@ -4362,6 +4431,11 @@
       "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
       "dev": true
     },
+    "node_modules/mitt": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmmirror.com/mitt/-/mitt-3.0.1.tgz",
+      "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw=="
+    },
     "node_modules/mkdirp": {
       "version": "1.0.4",
       "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-1.0.4.tgz",
@@ -4457,6 +4531,14 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/object-assign": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz",
+      "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
     "node_modules/object-is": {
       "version": "1.1.6",
       "resolved": "https://registry.npmmirror.com/object-is/-/object-is-1.1.6.tgz",
@@ -4575,6 +4657,11 @@
       "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==",
       "dev": true
     },
+    "node_modules/performance-now": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/performance-now/-/performance-now-2.1.0.tgz",
+      "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow=="
+    },
     "node_modules/picocolors": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
@@ -4652,6 +4739,21 @@
         "node": ">=10"
       }
     },
+    "node_modules/prop-types": {
+      "version": "15.8.1",
+      "resolved": "https://registry.npmmirror.com/prop-types/-/prop-types-15.8.1.tgz",
+      "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
+      "dependencies": {
+        "loose-envify": "^1.4.0",
+        "object-assign": "^4.1.1",
+        "react-is": "^16.13.1"
+      }
+    },
+    "node_modules/prop-types/node_modules/react-is": {
+      "version": "16.13.1",
+      "resolved": "https://registry.npmmirror.com/react-is/-/react-is-16.13.1.tgz",
+      "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
+    },
     "node_modules/proxy-from-env": {
       "version": "1.1.0",
       "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
@@ -4688,6 +4790,14 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/raf": {
+      "version": "3.4.1",
+      "resolved": "https://registry.npmmirror.com/raf/-/raf-3.4.1.tgz",
+      "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==",
+      "dependencies": {
+        "performance-now": "^2.1.0"
+      }
+    },
     "node_modules/react": {
       "resolved": "../node_modules/react",
       "link": true
@@ -4696,6 +4806,11 @@
       "resolved": "../node_modules/react-dom",
       "link": true
     },
+    "node_modules/react-fast-compare": {
+      "version": "3.2.2",
+      "resolved": "https://registry.npmmirror.com/react-fast-compare/-/react-fast-compare-3.2.2.tgz",
+      "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ=="
+    },
     "node_modules/react-hot-toast": {
       "version": "2.4.1",
       "resolved": "https://registry.npmmirror.com/react-hot-toast/-/react-hot-toast-2.4.1.tgz",
@@ -4711,10 +4826,44 @@
         "react-dom": ">=16"
       }
     },
+    "node_modules/react-is": {
+      "version": "18.3.1",
+      "resolved": "https://registry.npmmirror.com/react-is/-/react-is-18.3.1.tgz",
+      "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg=="
+    },
+    "node_modules/react-popper": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmmirror.com/react-popper/-/react-popper-2.3.0.tgz",
+      "integrity": "sha512-e1hj8lL3uM+sgSR4Lxzn5h1GxBlpa4CQz0XLF8kx4MDrDRWY0Ena4c97PUeSX9i5W3UAfDP0z0FXCTQkoXUl3Q==",
+      "dependencies": {
+        "react-fast-compare": "^3.0.1",
+        "warning": "^4.0.2"
+      },
+      "peerDependencies": {
+        "@popperjs/core": "^2.0.0",
+        "react": "^16.8.0 || ^17 || ^18",
+        "react-dom": "^16.8.0 || ^17 || ^18"
+      }
+    },
     "node_modules/react-scripts": {
       "resolved": "../node_modules/react-scripts",
       "link": true
     },
+    "node_modules/react-transition-group": {
+      "version": "4.4.5",
+      "resolved": "https://registry.npmmirror.com/react-transition-group/-/react-transition-group-4.4.5.tgz",
+      "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==",
+      "dependencies": {
+        "@babel/runtime": "^7.5.5",
+        "dom-helpers": "^5.0.1",
+        "loose-envify": "^1.4.0",
+        "prop-types": "^15.6.2"
+      },
+      "peerDependencies": {
+        "react": ">=16.6.0",
+        "react-dom": ">=16.6.0"
+      }
+    },
     "node_modules/read-config-file": {
       "version": "6.3.2",
       "resolved": "https://registry.npmmirror.com/read-config-file/-/read-config-file-6.3.2.tgz",
@@ -4763,6 +4912,11 @@
       "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==",
       "dev": true
     },
+    "node_modules/regenerator-runtime": {
+      "version": "0.13.11",
+      "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
+      "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg=="
+    },
     "node_modules/require-directory": {
       "version": "2.1.1",
       "resolved": "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz",
@@ -5027,6 +5181,11 @@
         "npm": ">= 3.0.0"
       }
     },
+    "node_modules/sortablejs": {
+      "version": "1.15.2",
+      "resolved": "https://registry.npmmirror.com/sortablejs/-/sortablejs-1.15.2.tgz",
+      "integrity": "sha512-FJF5jgdfvoKn1MAKSdGs33bIqLi3LmsgVTliuX6iITj834F+JRQZN90Z93yql8h0K2t0RwDPBmxwlbZfDcxNZA=="
+    },
     "node_modules/source-map": {
       "version": "0.6.1",
       "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz",
@@ -5206,6 +5365,62 @@
       "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
       "dev": true
     },
+    "node_modules/tdesign-icons-react": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmmirror.com/tdesign-icons-react/-/tdesign-icons-react-0.3.2.tgz",
+      "integrity": "sha512-J/82bexm9hj8yTZ91rQjVLMNTU2D43to8xWz5PIxnZo3FDImPdhksAPNHSN/lBQjzsu8gLRyAKfdnYwHbe/SaQ==",
+      "dependencies": {
+        "@babel/runtime": "^7.16.5",
+        "classnames": "^2.2.6"
+      },
+      "peerDependencies": {
+        "react": ">=16.13.1",
+        "react-dom": ">=16.13.1"
+      }
+    },
+    "node_modules/tdesign-react": {
+      "version": "1.7.5",
+      "resolved": "https://registry.npmmirror.com/tdesign-react/-/tdesign-react-1.7.5.tgz",
+      "integrity": "sha512-Se+IICi/GVz4O3XtMnj44NvR9b7WdSuYNXKEjxUcMHdWUVYvzPeSg+u43s2tlXvan6FZPzwIvW9iYLaa8A9Rhg==",
+      "dependencies": {
+        "@babel/runtime": "~7.17.2",
+        "@popperjs/core": "~2.11.2",
+        "@types/sortablejs": "^1.10.7",
+        "@types/tinycolor2": "^1.4.3",
+        "@types/validator": "^13.1.3",
+        "classnames": "~2.5.1",
+        "dayjs": "1.11.10",
+        "hoist-non-react-statics": "~3.3.2",
+        "lodash": "~4.17.15",
+        "mitt": "^3.0.0",
+        "raf": "~3.4.1",
+        "react-is": "^18.2.0",
+        "react-popper": "~2.3.0",
+        "react-transition-group": "~4.4.1",
+        "sortablejs": "^1.15.0",
+        "tdesign-icons-react": "^0.3.0",
+        "tinycolor2": "^1.4.2",
+        "tslib": "~2.3.1",
+        "validator": "~13.7.0"
+      },
+      "peerDependencies": {
+        "react": ">=16.13.1",
+        "react-dom": ">=16.13.1"
+      }
+    },
+    "node_modules/tdesign-react/node_modules/tslib": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.1.tgz",
+      "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw=="
+    },
+    "node_modules/tdesign-react/node_modules/validator": {
+      "version": "13.7.0",
+      "resolved": "https://registry.npmmirror.com/validator/-/validator-13.7.0.tgz",
+      "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==",
+      "engines": {
+        "node": ">= 0.10"
+      }
+    },
     "node_modules/temp-file": {
       "version": "3.4.0",
       "resolved": "https://registry.npmmirror.com/temp-file/-/temp-file-3.4.0.tgz",
@@ -5251,6 +5466,11 @@
         "node": ">= 10.0.0"
       }
     },
+    "node_modules/tinycolor2": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmmirror.com/tinycolor2/-/tinycolor2-1.6.0.tgz",
+      "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw=="
+    },
     "node_modules/tmp": {
       "version": "0.2.3",
       "resolved": "https://registry.npmmirror.com/tmp/-/tmp-0.2.3.tgz",
@@ -5461,6 +5681,14 @@
         "node": ">=0.6.0"
       }
     },
+    "node_modules/warning": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmmirror.com/warning/-/warning-4.0.3.tgz",
+      "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==",
+      "dependencies": {
+        "loose-envify": "^1.0.0"
+      }
+    },
     "node_modules/which": {
       "version": "2.0.2",
       "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz",

+ 3 - 1
example/package.json

@@ -10,7 +10,7 @@
     "test": "node ../node_modules/react-scripts/bin/react-scripts.js test",
     "eject": "node ../node_modules/react-scripts/bin/react-scripts.js eject",
     "package": "node ../node_modules/react-scripts/bin/react-scripts.js build && node encrypt.js && node obfuscate-main.js && electron-builder",
-    "start": "cross-env NODE_ENV=development electron ."
+    "start": "npm run build-web && cross-env NODE_ENV=development electron ."
   },
   "dependencies": {
     "@rongmz/react-stock-heatmap": "file:..",
@@ -20,6 +20,7 @@
     "react-dom": "file:../node_modules/react-dom",
     "react-hot-toast": "^2.4.1",
     "react-scripts": "file:../node_modules/react-scripts",
+    "tdesign-react": "^1.7.5",
     "uuid": "^10.0.0"
   },
   "devDependencies": {
@@ -51,6 +52,7 @@
     "files": [
       "main.js",
       "package.json",
+      "src/preload.js",
       {
         "from": "build",
         "to": "./",

+ 10 - 7
example/src/App.js

@@ -5,6 +5,9 @@ import toast, { Toaster } from 'react-hot-toast';
 import { v4 as uuidv4 } from 'uuid';
 import axios from 'axios';
 
+const path = require('path');
+const fs = require('fs');
+
 function formatTimestamp(timestamp) {
   // 创建一个新的 Date 对象
   const date = new Date(timestamp);
@@ -121,7 +124,7 @@ export default () => {
   // ------------ Load data -------------
   const checkStatus = async ()=>{
     toast.remove();
-    const loginInfo = JSON.parse(window.localStorage.getItem("_HEATMAP_LOGIN_INFO") || "{}")
+    const loginInfo = await window.electronAPI.getLoginInfoData() || {}
     const params = {
       "code": loginInfo.code,
       "machine": loginInfo.machine
@@ -145,7 +148,7 @@ export default () => {
     }
     const response = await axios.post('http://139.159.224.218:38888/login', params)
     if(response.data.code === 200){
-      window.localStorage.setItem("_HEATMAP_LOGIN_INFO", JSON.stringify(params))
+      await window.electronAPI.setLoginInfoData(params)
       window.sessionStorage.setItem("_HEATMAP_IS_LOGIN", "1")
       toast.success(response.data.msg)
       setInterval(()=>{
@@ -158,16 +161,16 @@ export default () => {
   }
 
   // ---------- window update ------------
-  React.useEffect(() => {
+  React.useEffect(async () => {
     // 处理是否有登录信息
-    let loginInfo = window.localStorage.getItem("_HEATMAP_LOGIN_INFO");
-    if(loginInfo) {
+    let loginInfo = await window.electronAPI.getLoginInfoData();
+    if(loginInfo.loginInfo) {
       toast.remove();
       try {
-        const code = JSON.parse(loginInfo)?.code || ''
+        const code = loginInfo.code || ''
         setActivationCode(code || '')
       }catch (err){
-        window.localStorage.removeItem("_HEATMAP_LOGIN_INFO")
+        await window.electronAPI.setLoginInfoData({})
         window.sessionStorage.setItem("_HEATMAP_IS_LOGIN", "0")
         return
       }

+ 8 - 0
example/src/preload.js

@@ -0,0 +1,8 @@
+const { contextBridge, ipcRenderer } = require('electron');
+
+contextBridge.exposeInMainWorld('electronAPI', {
+  getLoginInfoData: () => ipcRenderer.invoke('get-login-info-data'),
+  setLoginInfoData: (data) => ipcRenderer.invoke('set-login-info-data', data),
+  getSymbolData: () => ipcRenderer.invoke('get-symbol-data'),
+  setSymbolData: (data) => ipcRenderer.invoke('set-symbol-data', data),
+});