he wei
2024-12-23 6a4a27022809f9647c781d8135ac8afc3fb7c393
UA 添加 chr dcp 两种文件解析
14个文件已修改
2个文件已删除
14个文件已添加
33579 ■■■■ 已修改文件
README.md 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dependent/FbxAnalysis.jar 补丁 | 查看 | 原始文档 | blame | 历史
dependent/remove_service.bat 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dependent/setup_service.bat 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dependent/stop.bat 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fbx-0.1.0-Setup.exe 补丁 | 查看 | 原始文档 | blame | 历史
fbx-0.1.2-Setup.exe 补丁 | 查看 | 原始文档 | blame | 历史
fbx-0.1.3-Setup.exe 补丁 | 查看 | 原始文档 | blame | 历史
npminstall-debug.log 197 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
package-lock.json 17003 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
package.json 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
package_.json 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pnpm-lock.yaml 13350 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
setup.nsi 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
setup_new.nsi 822 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/background.js 422 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/battInfo.vue 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/chargeParams.vue 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/myCharts/BaseChart.vue 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/myCharts/NormalLines.vue 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/testInfo.vue 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/testParams.vue 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/routes.js 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/result-alm.vue 230 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/result-bcp.vue 415 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/result-chr.vue 413 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/result.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/selectFile.vue 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
version.nsh 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
vue.config.js 52 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
README.md
@@ -22,3 +22,10 @@
### Customize configuration
See [Configuration Reference](https://cli.vuejs.org/config/).
### 打包项目要 nvm 切换到nodejs 16
```
nvm ls
nmv use 16***
```
dependent/FbxAnalysis.jar
Binary files differ
dependent/remove_service.bat
@@ -1,13 +1,22 @@
@echo off
::echo ��ǰ�̷���%~d0
%~d0
::echo %cd%
cd %~dp0
echo %cd%
set java_path=%cd%\runtime\bin\java.exe
set port=8099
set process_name=fbx.exe
wmic process where "ExecutablePath='%java_path:\=\\%'" call terminate
for /f "tokens=2,5" %%a in ('netstat -ano ^| findstr :%port% ^| sort /unique') do (
  setlocal enabledelayedexpansion
  if not %%b == 0 (
    set "pids=!pids! %%b"
    for %%i in (!pids!) do (
      if not "%%i"==" " (
        taskkill /f /im %%i 2>nul
      )
    )
  )
  endlocal
)
taskkill /im %process_name% /f >nul 2>&1
FbxAnalysis.exe stop
FbxAnalysis.exe uninstall
exit
exit /b 0
dependent/setup_service.bat
@@ -1,12 +1,18 @@
@echo off
::echo ��ǰ�̷���%~d0
%~d0
::echo %cd%
cd %~dp0
echo %cd%
FbxAnalysis.exe stop
FbxAnalysis.exe start 2>nul
if %errorlevel% ==0 (
  exit
) else (
  goto install
)
:install
FbxAnalysis.exe uninstall
FbxAnalysis.exe install
FbxAnalysis.exe start
FbxAnalysis.exe start 2>nul
exit
dependent/stop.bat
@@ -1,12 +1,17 @@
@echo off
::echo 当前盘符:%~d0
%~d0
::echo %cd%
cd %~dp0
echo %cd%
set port=8099
set java_path=%cd%\runtime\bin\java.exe
wmic process where "ExecutablePath='%java_path:\=\\%'" call terminate
for /f "tokens=2,5" %%a in ('netstat -ano ^| findstr :%port% ^| sort /unique') do (
  setlocal enabledelayedexpansion
  if not %%b == 0 (
    set "pids=!pids! %%b"
    for %%i in (!pids!) do (
      if not "%%i"==" " (
        taskkill /f /im %%i 2>nul
      )
    )
  )
  endlocal
)
exit
fbx-0.1.0-Setup.exe
Binary files differ
fbx-0.1.2-Setup.exe
Binary files differ
fbx-0.1.3-Setup.exe
Binary files differ
npminstall-debug.log
New file
@@ -0,0 +1,197 @@
{
  root: 'D:\\GitWorkSpace\\fbxParser',
  registry: 'http://registry.npm.taobao.org',
  pkgs: [],
  production: false,
  cacheStrict: false,
  cacheDir: 'C:\\Users\\Administrator\\.npminstall_tarball',
  env: {
    npm_config_registry: 'http://registry.npm.taobao.org',
    npm_config_argv: '{"remain":[],"cooked":["--fix-bug-versions","--china","--userconfig=C:\\\\Users\\\\Administrator\\\\.cnpmrc","--disturl=https://cdn.npmmirror.com/binaries/node","--registry=http://registry.npm.taobao.org"],"original":["--fix-bug-versions","--china","--userconfig=C:\\\\Users\\\\Administrator\\\\.cnpmrc","--disturl=https://cdn.npmmirror.com/binaries/node","--registry=http://registry.npm.taobao.org"]}',
    npm_config_user_agent: 'npminstall/7.12.0 npm/? node/v18.18.2 win32 x64',
    npm_config_cache: 'C:\\Users\\Administrator\\.npminstall_tarball',
    NODE: 'D:\\soft\\nodejs\\node.exe',
    npm_node_execpath: 'D:\\soft\\nodejs\\node.exe',
    npm_execpath: 'D:\\tools\\nvm\\v18.18.2\\node_modules\\node_global\\node_modules\\cnpm\\node_modules\\npminstall\\bin\\install.js',
    npm_config_userconfig: 'C:\\Users\\Administrator\\.cnpmrc',
    npm_config_disturl: 'https://cdn.npmmirror.com/binaries/node',
    npm_config_r: 'http://registry.npm.taobao.org',
    COREPACK_NPM_REGISTRY: 'https://registry.npmmirror.com',
    EDGEDRIVER_CDNURL: 'https://npmmirror.com/mirrors/edgedriver',
    NODEJS_ORG_MIRROR: 'https://cdn.npmmirror.com/binaries/node',
    NVM_NODEJS_ORG_MIRROR: 'https://cdn.npmmirror.com/binaries/node',
    PHANTOMJS_CDNURL: 'https://cdn.npmmirror.com/binaries/phantomjs',
    CHROMEDRIVER_CDNURL: 'https://cdn.npmmirror.com/binaries/chromedriver',
    OPERADRIVER_CDNURL: 'https://cdn.npmmirror.com/binaries/operadriver',
    CYPRESS_DOWNLOAD_PATH_TEMPLATE: 'https://cdn.npmmirror.com/binaries/cypress/${version}/${platform}-${arch}/cypress.zip',
    ELECTRON_MIRROR: 'https://cdn.npmmirror.com/binaries/electron/',
    ELECTRON_BUILDER_BINARIES_MIRROR: 'https://cdn.npmmirror.com/binaries/electron-builder-binaries/',
    SASS_BINARY_SITE: 'https://cdn.npmmirror.com/binaries/node-sass',
    SWC_BINARY_SITE: 'https://cdn.npmmirror.com/binaries/node-swc',
    NWJS_URLBASE: 'https://cdn.npmmirror.com/binaries/nwjs/v',
    PUPPETEER_DOWNLOAD_HOST: 'https://cdn.npmmirror.com/binaries/chrome-for-testing',
    PUPPETEER_DOWNLOAD_BASE_URL: 'https://cdn.npmmirror.com/binaries/chrome-for-testing',
    PLAYWRIGHT_DOWNLOAD_HOST: 'https://cdn.npmmirror.com/binaries/playwright',
    SENTRYCLI_CDNURL: 'https://cdn.npmmirror.com/binaries/sentry-cli',
    SAUCECTL_INSTALL_BINARY_MIRROR: 'https://cdn.npmmirror.com/binaries/saucectl',
    RE2_DOWNLOAD_MIRROR: 'https://cdn.npmmirror.com/binaries/node-re2',
    RE2_DOWNLOAD_SKIP_PATH: 'true',
    PRISMA_ENGINES_MIRROR: 'https://cdn.npmmirror.com/binaries/prisma',
    npm_config_better_sqlite3_binary_host: 'https://cdn.npmmirror.com/binaries/better-sqlite3',
    npm_config_keytar_binary_host: 'https://cdn.npmmirror.com/binaries/keytar',
    npm_config_sharp_binary_host: 'https://cdn.npmmirror.com/binaries/sharp',
    npm_config_sharp_libvips_binary_host: 'https://cdn.npmmirror.com/binaries/sharp-libvips',
    npm_config_robotjs_binary_host: 'https://cdn.npmmirror.com/binaries/robotjs',
    npm_rootpath: 'D:\\GitWorkSpace\\fbxParser',
    INIT_CWD: 'D:\\GitWorkSpace\\fbxParser'
  },
  binaryMirrors: {
    ENVS: {
      COREPACK_NPM_REGISTRY: 'https://registry.npmmirror.com',
      EDGEDRIVER_CDNURL: 'https://npmmirror.com/mirrors/edgedriver',
      NODEJS_ORG_MIRROR: 'https://cdn.npmmirror.com/binaries/node',
      NVM_NODEJS_ORG_MIRROR: 'https://cdn.npmmirror.com/binaries/node',
      PHANTOMJS_CDNURL: 'https://cdn.npmmirror.com/binaries/phantomjs',
      CHROMEDRIVER_CDNURL: 'https://cdn.npmmirror.com/binaries/chromedriver',
      OPERADRIVER_CDNURL: 'https://cdn.npmmirror.com/binaries/operadriver',
      CYPRESS_DOWNLOAD_PATH_TEMPLATE: 'https://cdn.npmmirror.com/binaries/cypress/${version}/${platform}-${arch}/cypress.zip',
      ELECTRON_MIRROR: 'https://cdn.npmmirror.com/binaries/electron/',
      ELECTRON_BUILDER_BINARIES_MIRROR: 'https://cdn.npmmirror.com/binaries/electron-builder-binaries/',
      SASS_BINARY_SITE: 'https://cdn.npmmirror.com/binaries/node-sass',
      SWC_BINARY_SITE: 'https://cdn.npmmirror.com/binaries/node-swc',
      NWJS_URLBASE: 'https://cdn.npmmirror.com/binaries/nwjs/v',
      PUPPETEER_DOWNLOAD_HOST: 'https://cdn.npmmirror.com/binaries/chrome-for-testing',
      PUPPETEER_DOWNLOAD_BASE_URL: 'https://cdn.npmmirror.com/binaries/chrome-for-testing',
      PLAYWRIGHT_DOWNLOAD_HOST: 'https://cdn.npmmirror.com/binaries/playwright',
      SENTRYCLI_CDNURL: 'https://cdn.npmmirror.com/binaries/sentry-cli',
      SAUCECTL_INSTALL_BINARY_MIRROR: 'https://cdn.npmmirror.com/binaries/saucectl',
      RE2_DOWNLOAD_MIRROR: 'https://cdn.npmmirror.com/binaries/node-re2',
      RE2_DOWNLOAD_SKIP_PATH: 'true',
      PRISMA_ENGINES_MIRROR: 'https://cdn.npmmirror.com/binaries/prisma',
      npm_config_better_sqlite3_binary_host: 'https://cdn.npmmirror.com/binaries/better-sqlite3',
      npm_config_keytar_binary_host: 'https://cdn.npmmirror.com/binaries/keytar',
      npm_config_sharp_binary_host: 'https://cdn.npmmirror.com/binaries/sharp',
      npm_config_sharp_libvips_binary_host: 'https://cdn.npmmirror.com/binaries/sharp-libvips',
      npm_config_robotjs_binary_host: 'https://cdn.npmmirror.com/binaries/robotjs'
    },
    '@ali/s2': { host: 'https://cdn.npmmirror.com/binaries/looksgood-s2' },
    sharp: { replaceHostFiles: [Array], replaceHostMap: [Object] },
    '@tensorflow/tfjs-node': {
      replaceHostFiles: [Array],
      replaceHostRegExpMap: [Object],
      replaceHostMap: [Object]
    },
    cypress: {
      host: 'https://cdn.npmmirror.com/binaries/cypress',
      newPlatforms: [Object]
    },
    'utf-8-validate': {
      host: 'https://cdn.npmmirror.com/binaries/utf-8-validate/v{version}'
    },
    xprofiler: {
      remote_path: './xprofiler/v{version}/',
      host: 'https://cdn.npmmirror.com/binaries'
    },
    leveldown: { host: 'https://cdn.npmmirror.com/binaries/leveldown/v{version}' },
    couchbase: { host: 'https://cdn.npmmirror.com/binaries/couchbase/v{version}' },
    gl: { host: 'https://cdn.npmmirror.com/binaries/gl/v{version}' },
    sqlite3: {
      host: 'https://cdn.npmmirror.com/binaries/sqlite3',
      remote_path: 'v{version}'
    },
    '@journeyapps/sqlcipher': { host: 'https://cdn.npmmirror.com/binaries' },
    grpc: {
      host: 'https://cdn.npmmirror.com/binaries',
      remote_path: '{name}/v{version}'
    },
    'grpc-tools': { host: 'https://cdn.npmmirror.com/binaries' },
    wrtc: {
      host: 'https://cdn.npmmirror.com/binaries',
      remote_path: '{name}/v{version}'
    },
    fsevents: { host: 'https://cdn.npmmirror.com/binaries/fsevents' },
    nodejieba: { host: 'https://cdn.npmmirror.com/binaries/nodejieba' },
    canvas: { host: 'https://cdn.npmmirror.com/binaries/canvas' },
    'skia-canvas': { host: 'https://cdn.npmmirror.com/binaries/skia-canvas' },
    'flow-bin': {
      replaceHost: 'https://github.com/facebook/flow/releases/download/v',
      host: 'https://cdn.npmmirror.com/binaries/flow/v'
    },
    'jpegtran-bin': {
      replaceHost: [Array],
      host: 'https://cdn.npmmirror.com/binaries/jpegtran-bin'
    },
    'cwebp-bin': {
      replaceHost: [Array],
      host: 'https://cdn.npmmirror.com/binaries/cwebp-bin'
    },
    'zopflipng-bin': {
      replaceHost: [Array],
      host: 'https://cdn.npmmirror.com/binaries/zopflipng-bin'
    },
    'optipng-bin': {
      replaceHost: [Array],
      host: 'https://cdn.npmmirror.com/binaries/optipng-bin'
    },
    mozjpeg: {
      replaceHost: [Array],
      host: 'https://cdn.npmmirror.com/binaries/mozjpeg-bin'
    },
    gifsicle: {
      replaceHost: [Array],
      host: 'https://cdn.npmmirror.com/binaries/gifsicle-bin'
    },
    'pngquant-bin': {
      replaceHost: [Array],
      host: 'https://cdn.npmmirror.com/binaries/pngquant-bin',
      replaceHostMap: [Object]
    },
    'pngcrush-bin': {
      replaceHost: [Array],
      host: 'https://cdn.npmmirror.com/binaries/pngcrush-bin'
    },
    'jpeg-recompress-bin': {
      replaceHost: [Array],
      host: 'https://cdn.npmmirror.com/binaries/jpeg-recompress-bin'
    },
    'advpng-bin': {
      replaceHost: [Array],
      host: 'https://cdn.npmmirror.com/binaries/advpng-bin'
    },
    'pngout-bin': {
      replaceHost: [Array],
      host: 'https://cdn.npmmirror.com/binaries/pngout-bin'
    },
    'jpegoptim-bin': {
      replaceHost: [Array],
      host: 'https://cdn.npmmirror.com/binaries/jpegoptim-bin'
    },
    argon2: { host: 'https://cdn.npmmirror.com/binaries/argon2' },
    'ali-zeromq': { host: 'https://cdn.npmmirror.com/binaries/ali-zeromq' },
    'ali-usb_ctl': { host: 'https://cdn.npmmirror.com/binaries/ali-usb_ctl' },
    'gdal-async': { host: 'https://cdn.npmmirror.com/binaries/node-gdal-async' },
    'libpg-query': { host: 'https://cdn.npmmirror.com/binaries' }
  },
  forbiddenLicenses: null,
  flatten: false,
  proxy: undefined,
  prune: false,
  disableFallbackStore: false,
  workspacesMap: Map(0) {},
  enableWorkspace: false,
  workspaceRoot: 'D:\\GitWorkSpace\\fbxParser',
  isWorkspaceRoot: true,
  isWorkspacePackage: false,
  offline: false,
  strictSSL: false,
  ignoreScripts: false,
  foregroundScripts: false,
  ignoreOptionalDependencies: false,
  detail: false,
  forceLinkLatest: false,
  trace: false,
  engineStrict: false,
  registryOnly: false,
  client: false,
  autoFixVersion: [Function: autoFixVersion]
}
package-lock.json
File was deleted
package.json
@@ -1,6 +1,6 @@
{
  "name": "fbx",
  "version": "0.1.1",
  "version": "0.1.3",
  "author": "whychw",
  "description": "解析本地fbx文件 支持导出excel",
  "private": true,
@@ -8,7 +8,8 @@
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "lint": "vue-cli-service lint",
    "electron:build": "vue-cli-service electron:build",
    "electron:build": "vue-cli-service electron:build --win --ia32",
    "electron:build32": "set NODE_OPTIONS=--openssl-legacy-provider & vue-cli-service electron:build --win --ia32",
    "electron:serve": "vue-cli-service electron:serve",
    "postinstall": "electron-builder install-app-deps",
    "postuninstall": "electron-builder install-app-deps",
@@ -18,24 +19,24 @@
  "main": "background.js",
  "dependencies": {
    "@electron/remote": "^2.0.8",
    "@vue/cli-plugin-babel": "^5.0.8",
    "axios": "0.18.1",
    "core-js": "^3.6.5",
    "electron-log": "^4.4.8",
    "tree-kill": "^1.2.2",
    "vue": "2.6.10",
    "vue-router": "3.0.6",
    "axios": "0.18.1",
    "vue-layer": "^1.2.0",
    "electron-log": "^4.4.8",
    "vue-router": "3.0.6",
    "vue-template-compiler": "2.6.10"
  },
  "devDependencies": {
    "@vue/cli-plugin-babel": "~4.5.13",
    "@vue/cli-plugin-eslint": "~4.5.13",
    "@vue/cli-service": "~4.5.13",
    "@vue/compiler-sfc": "^3.0.0",
    "babel-eslint": "^10.1.0",
    "electron": "^13.0.0",
    "echarts": "^4.8.0",
    "echarts-liquidfill": "^2.0.6",
    "electron": "^13.0.0",
    "electron-builder": "^25.1.8",
    "electron-devtools-installer": "^3.1.0",
    "electron-icon-builder": "^2.0.1",
    "element-ui": "^2.15.6",
@@ -43,10 +44,11 @@
    "eslint-plugin-vue": "^7.0.0",
    "less": "^3.12.2",
    "less-loader": "^6.2.0",
    "minimal-request-promise": "^1.5.0",
    "sass": "1.26.8",
    "sass-loader": "8.0.2",
    "minimal-request-promise": "^1.5.0",
    "vue-cli-plugin-electron-builder": "~2.1.1"
    "vue-cli-plugin-electron-builder": "~2.1.1",
    "webpack-cli": "^3.3.12"
  },
  "eslintConfig": {
    "root": true,
@@ -68,5 +70,6 @@
    "> 1%",
    "last 2 versions",
    "not dead"
  ]
  ],
  "__npminstall_done": false
}
package_.json
New file
@@ -0,0 +1,76 @@
{
  "name": "fbx",
  "version": "0.1.2",
  "author": "whychw",
  "description": "解析本地fbx文件 支持导出excel",
  "private": true,
  "scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "lint": "vue-cli-service lint",
    "electron:build": "vue-cli-service electron:build",
    "electron:build32": "set NODE_OPTIONS=--openssl-legacy-provider & vue-cli-service electron:build --win --ia32",
    "electron:serve": "SET \"NODE_OPTIONS=--openssl-legacy-provider\" &&  vue-cli-service electron:serve",
    "electron:serve1": "vue-cli-service electron:serve",
    "postinstall": "electron-builder install-app-deps",
    "postuninstall": "electron-builder install-app-deps",
    "debug:main": "electron --inspect=5858 ./src/background.js",
    "electron:generate-icons": "electron-icon-builder --input=./public/icon/1.png --output=build --flatten"
  },
  "main": "background.js",
  "dependencies": {
    "@electron/remote": "^2.0.8",
    "@vue/cli-plugin-babel": "^5.0.8",
    "axios": "0.18.1",
    "core-js": "^3.6.5",
    "electron-log": "^4.4.8",
    "tree-kill": "^1.2.2",
    "vue": "2.6.10",
    "vue-layer": "^1.2.0",
    "vue-router": "3.0.6",
    "vue-template-compiler": "2.6.10"
  },
  "devDependencies": {
    "@vue/cli-plugin-eslint": "~4.5.13",
    "@vue/cli-service": "~4.5.13",
    "@vue/compiler-sfc": "^3.0.0",
    "babel-eslint": "^10.1.0",
    "echarts": "^4.8.0",
    "echarts-liquidfill": "^2.0.6",
    "electron": "^13.0.0",
    "electron-builder": "^25.1.8",
    "electron-devtools-installer": "^3.1.0",
    "electron-icon-builder": "^2.0.1",
    "element-ui": "^2.15.6",
    "eslint": "^6.7.2",
    "eslint-plugin-vue": "^7.0.0",
    "less": "^3.12.2",
    "less-loader": "^6.2.0",
    "minimal-request-promise": "^1.5.0",
    "sass": "1.26.8",
    "sass-loader": "8.0.2",
    "vue-cli-plugin-electron-builder": "~2.1.1"
  },
  "eslintConfig": {
    "root": true,
    "env": {
      "node": true
    },
    "extends": [
      "plugin:vue/essential"
    ],
    "parserOptions": {
      "parser": "babel-eslint"
    },
    "rules": {
      "no-unused-vars": "off",
      "vue/no-unused-components": "off"
    }
  },
  "browserslist": [
    "> 1%",
    "last 2 versions",
    "not dead"
  ],
  "__npminstall_done": false
}
pnpm-lock.yaml
New file
Diff too large
setup.nsi
@@ -1,8 +1,9 @@
; Script generated by the HM NIS Edit Script Wizard.
!include "version.nsh"
; HM NIS Edit Wizard helper defines
!define PRODUCT_NAME "fbx"
!define PRODUCT_VERSION "0.1.0"
!define PRODUCT_VERSION "${VERSION}"
!define PRODUCT_PUBLISHER "whyc"
!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\${PRODUCT_NAME}"
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
setup_new.nsi
New file
@@ -0,0 +1,822 @@
; Script generated by the HM NIS Edit Script Wizard.
!include "version.nsh"
; HM NIS Edit Wizard helper defines
!define PRODUCT_NAME "fbx"
!define PRODUCT_VERSION "${VERSION}"
!define PRODUCT_PUBLISHER "whyc"
!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\${PRODUCT_NAME}"
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
!define PRODUCT_RUN_LEVEL "Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers"
!define PRODUCT_UNINST_ROOT_KEY "HKLM"
SetCompressor /SOLID lzma
SetCompressorDictSize 32
; MUI 1.67 compatible ------
!include "MUI.nsh"
; MUI Settings
!define MUI_ABORTWARNING
!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"
!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"
; Language Selection Dialog Settings
!define MUI_LANGDLL_REGISTRY_ROOT "${PRODUCT_UNINST_ROOT_KEY}"
!define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_UNINST_KEY}"
!define MUI_LANGDLL_REGISTRY_VALUENAME "NSIS:Language"
; Welcome page
!insertmacro MUI_PAGE_WELCOME
; License page
!insertmacro MUI_PAGE_LICENSE "dependent\licence.txt"
; Directory page
!insertmacro MUI_PAGE_DIRECTORY
; Instfiles page
!insertmacro MUI_PAGE_INSTFILES
; Finish page
!define MUI_FINISHPAGE_RUN "$INSTDIR\fbx.exe"
!insertmacro MUI_PAGE_FINISH
; Uninstaller pages
!insertmacro MUI_UNPAGE_INSTFILES
; Language files
;!insertmacro MUI_LANGUAGE "English"
!insertmacro MUI_LANGUAGE "SimpChinese"
; Reserve files
!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
; MUI end ------
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "${PRODUCT_NAME}-${PRODUCT_VERSION}-Setup.exe"
InstallDir "$PROGRAMFILES\${PRODUCT_NAME}"
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
ShowInstDetails show
ShowUnInstDetails show
;BrandingText "福光 - 武汉源畅"
BrandingText " "
Function .onInit
  !insertmacro MUI_LANGDLL_DISPLAY
FunctionEnd
Function .onInstSuccess
nsExec::Exec "$INSTDIR\setup_service.bat"
Exec $INSTDIR\${PRODUCT_NAME}.exe
FunctionEnd
Section "MainSection" SEC01
  SetOutPath "$INSTDIR"
  SetOverwrite try
  File "dist_electron\win-ia32-unpacked\chrome_100_percent.pak"
  File "dist_electron\win-ia32-unpacked\chrome_200_percent.pak"
  File "dist_electron\win-ia32-unpacked\d3dcompiler_47.dll"
  File "dist_electron\win-ia32-unpacked\fbx.exe"
  CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}"
  CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk" "$INSTDIR\${PRODUCT_NAME}.exe"
  CreateShortCut "$DESKTOP\${PRODUCT_NAME}.lnk" "$INSTDIR\fbx.exe"
  File "dist_electron\win-ia32-unpacked\ffmpeg.dll"
  File "dist_electron\win-ia32-unpacked\icudtl.dat"
  File "dist_electron\win-ia32-unpacked\libEGL.dll"
  File "dist_electron\win-ia32-unpacked\libGLESv2.dll"
  File "dist_electron\win-ia32-unpacked\LICENSE.electron.txt"
  File "dist_electron\win-ia32-unpacked\LICENSES.chromium.html"
  SetOutPath "$INSTDIR\locales"
  File "dist_electron\win-ia32-unpacked\locales\am.pak"
  File "dist_electron\win-ia32-unpacked\locales\ar.pak"
  File "dist_electron\win-ia32-unpacked\locales\bg.pak"
  File "dist_electron\win-ia32-unpacked\locales\bn.pak"
  File "dist_electron\win-ia32-unpacked\locales\ca.pak"
  File "dist_electron\win-ia32-unpacked\locales\cs.pak"
  File "dist_electron\win-ia32-unpacked\locales\da.pak"
  File "dist_electron\win-ia32-unpacked\locales\de.pak"
  File "dist_electron\win-ia32-unpacked\locales\el.pak"
  File "dist_electron\win-ia32-unpacked\locales\en-GB.pak"
  File "dist_electron\win-ia32-unpacked\locales\en-US.pak"
  File "dist_electron\win-ia32-unpacked\locales\es-419.pak"
  File "dist_electron\win-ia32-unpacked\locales\es.pak"
  File "dist_electron\win-ia32-unpacked\locales\et.pak"
  File "dist_electron\win-ia32-unpacked\locales\fa.pak"
  File "dist_electron\win-ia32-unpacked\locales\fi.pak"
  File "dist_electron\win-ia32-unpacked\locales\fil.pak"
  File "dist_electron\win-ia32-unpacked\locales\fr.pak"
  File "dist_electron\win-ia32-unpacked\locales\gu.pak"
  File "dist_electron\win-ia32-unpacked\locales\he.pak"
  File "dist_electron\win-ia32-unpacked\locales\hi.pak"
  File "dist_electron\win-ia32-unpacked\locales\hr.pak"
  File "dist_electron\win-ia32-unpacked\locales\hu.pak"
  File "dist_electron\win-ia32-unpacked\locales\id.pak"
  File "dist_electron\win-ia32-unpacked\locales\it.pak"
  File "dist_electron\win-ia32-unpacked\locales\ja.pak"
  File "dist_electron\win-ia32-unpacked\locales\kn.pak"
  File "dist_electron\win-ia32-unpacked\locales\ko.pak"
  File "dist_electron\win-ia32-unpacked\locales\lt.pak"
  File "dist_electron\win-ia32-unpacked\locales\lv.pak"
  File "dist_electron\win-ia32-unpacked\locales\ml.pak"
  File "dist_electron\win-ia32-unpacked\locales\mr.pak"
  File "dist_electron\win-ia32-unpacked\locales\ms.pak"
  File "dist_electron\win-ia32-unpacked\locales\nb.pak"
  File "dist_electron\win-ia32-unpacked\locales\nl.pak"
  File "dist_electron\win-ia32-unpacked\locales\pl.pak"
  File "dist_electron\win-ia32-unpacked\locales\pt-BR.pak"
  File "dist_electron\win-ia32-unpacked\locales\pt-PT.pak"
  File "dist_electron\win-ia32-unpacked\locales\ro.pak"
  File "dist_electron\win-ia32-unpacked\locales\ru.pak"
  File "dist_electron\win-ia32-unpacked\locales\sk.pak"
  File "dist_electron\win-ia32-unpacked\locales\sl.pak"
  File "dist_electron\win-ia32-unpacked\locales\sr.pak"
  File "dist_electron\win-ia32-unpacked\locales\sv.pak"
  File "dist_electron\win-ia32-unpacked\locales\sw.pak"
  File "dist_electron\win-ia32-unpacked\locales\ta.pak"
  File "dist_electron\win-ia32-unpacked\locales\te.pak"
  File "dist_electron\win-ia32-unpacked\locales\th.pak"
  File "dist_electron\win-ia32-unpacked\locales\tr.pak"
  File "dist_electron\win-ia32-unpacked\locales\uk.pak"
  File "dist_electron\win-ia32-unpacked\locales\vi.pak"
  File "dist_electron\win-ia32-unpacked\locales\zh-CN.pak"
  File "dist_electron\win-ia32-unpacked\locales\zh-TW.pak"
  SetOutPath "$INSTDIR\resources"
  File "dist_electron\win-ia32-unpacked\resources\app.asar"
  File "dist_electron\win-ia32-unpacked\resources\elevate.exe"
  SetOutPath "$INSTDIR"
  File "dist_electron\win-ia32-unpacked\resources.pak"
  File "dist_electron\win-ia32-unpacked\snapshot_blob.bin"
  SetOutPath "$INSTDIR\swiftshader"
  File "dist_electron\win-ia32-unpacked\swiftshader\libEGL.dll"
  File "dist_electron\win-ia32-unpacked\swiftshader\libGLESv2.dll"
  SetOutPath "$INSTDIR"
  File "dist_electron\win-ia32-unpacked\v8_context_snapshot.bin"
  File "dist_electron\win-ia32-unpacked\vk_swiftshader.dll"
  File "dist_electron\win-ia32-unpacked\vk_swiftshader_icd.json"
  File "dist_electron\win-ia32-unpacked\vulkan-1.dll"
  File "dependent\FbxAnalysis.exe"
  File "dependent\FbxAnalysis.jar"
  File "dependent\FbxAnalysis.xml"
  File "dependent\licence.txt"
  File "dependent\remove_service.bat"
  SetOutPath "$INSTDIR\runtime\bin"
  File "dependent\runtime\bin\api-ms-win-core-console-l1-1-0.dll"
  File "dependent\runtime\bin\api-ms-win-core-datetime-l1-1-0.dll"
  File "dependent\runtime\bin\api-ms-win-core-debug-l1-1-0.dll"
  File "dependent\runtime\bin\api-ms-win-core-errorhandling-l1-1-0.dll"
  File "dependent\runtime\bin\api-ms-win-core-file-l1-1-0.dll"
  File "dependent\runtime\bin\api-ms-win-core-file-l1-2-0.dll"
  File "dependent\runtime\bin\api-ms-win-core-file-l2-1-0.dll"
  File "dependent\runtime\bin\api-ms-win-core-handle-l1-1-0.dll"
  File "dependent\runtime\bin\api-ms-win-core-heap-l1-1-0.dll"
  File "dependent\runtime\bin\api-ms-win-core-interlocked-l1-1-0.dll"
  File "dependent\runtime\bin\api-ms-win-core-libraryloader-l1-1-0.dll"
  File "dependent\runtime\bin\api-ms-win-core-localization-l1-2-0.dll"
  File "dependent\runtime\bin\api-ms-win-core-memory-l1-1-0.dll"
  File "dependent\runtime\bin\api-ms-win-core-namedpipe-l1-1-0.dll"
  File "dependent\runtime\bin\api-ms-win-core-processenvironment-l1-1-0.dll"
  File "dependent\runtime\bin\api-ms-win-core-processthreads-l1-1-0.dll"
  File "dependent\runtime\bin\api-ms-win-core-processthreads-l1-1-1.dll"
  File "dependent\runtime\bin\api-ms-win-core-profile-l1-1-0.dll"
  File "dependent\runtime\bin\api-ms-win-core-rtlsupport-l1-1-0.dll"
  File "dependent\runtime\bin\api-ms-win-core-string-l1-1-0.dll"
  File "dependent\runtime\bin\api-ms-win-core-synch-l1-1-0.dll"
  File "dependent\runtime\bin\api-ms-win-core-synch-l1-2-0.dll"
  File "dependent\runtime\bin\api-ms-win-core-sysinfo-l1-1-0.dll"
  File "dependent\runtime\bin\api-ms-win-core-timezone-l1-1-0.dll"
  File "dependent\runtime\bin\api-ms-win-core-util-l1-1-0.dll"
  File "dependent\runtime\bin\api-ms-win-crt-conio-l1-1-0.dll"
  File "dependent\runtime\bin\api-ms-win-crt-convert-l1-1-0.dll"
  File "dependent\runtime\bin\api-ms-win-crt-environment-l1-1-0.dll"
  File "dependent\runtime\bin\api-ms-win-crt-filesystem-l1-1-0.dll"
  File "dependent\runtime\bin\api-ms-win-crt-heap-l1-1-0.dll"
  File "dependent\runtime\bin\api-ms-win-crt-locale-l1-1-0.dll"
  File "dependent\runtime\bin\api-ms-win-crt-math-l1-1-0.dll"
  File "dependent\runtime\bin\api-ms-win-crt-multibyte-l1-1-0.dll"
  File "dependent\runtime\bin\api-ms-win-crt-private-l1-1-0.dll"
  File "dependent\runtime\bin\api-ms-win-crt-process-l1-1-0.dll"
  File "dependent\runtime\bin\api-ms-win-crt-runtime-l1-1-0.dll"
  File "dependent\runtime\bin\api-ms-win-crt-stdio-l1-1-0.dll"
  File "dependent\runtime\bin\api-ms-win-crt-string-l1-1-0.dll"
  File "dependent\runtime\bin\api-ms-win-crt-time-l1-1-0.dll"
  File "dependent\runtime\bin\api-ms-win-crt-utility-l1-1-0.dll"
  File "dependent\runtime\bin\attach.dll"
  File "dependent\runtime\bin\awt.dll"
  File "dependent\runtime\bin\bci.dll"
  File "dependent\runtime\bin\concrt140.dll"
  File "dependent\runtime\bin\dcpr.dll"
  File "dependent\runtime\bin\decora_sse.dll"
  File "dependent\runtime\bin\deploy.dll"
  SetOutPath "$INSTDIR\runtime\bin\dtplugin"
  File "dependent\runtime\bin\dtplugin\deployJava1.dll"
  File "dependent\runtime\bin\dtplugin\npdeployJava1.dll"
  SetOutPath "$INSTDIR\runtime\bin"
  File "dependent\runtime\bin\dt_shmem.dll"
  File "dependent\runtime\bin\dt_socket.dll"
  File "dependent\runtime\bin\eula.dll"
  File "dependent\runtime\bin\fontmanager.dll"
  File "dependent\runtime\bin\fxplugins.dll"
  File "dependent\runtime\bin\glass.dll"
  File "dependent\runtime\bin\glib-lite.dll"
  File "dependent\runtime\bin\gstreamer-lite.dll"
  File "dependent\runtime\bin\hprof.dll"
  File "dependent\runtime\bin\instrument.dll"
  File "dependent\runtime\bin\j2pcsc.dll"
  File "dependent\runtime\bin\j2pkcs11.dll"
  File "dependent\runtime\bin\jaas_nt.dll"
  File "dependent\runtime\bin\jabswitch.exe"
  File "dependent\runtime\bin\java-rmi.exe"
  File "dependent\runtime\bin\java.dll"
  File "dependent\runtime\bin\java.exe"
  File "dependent\runtime\bin\JavaAccessBridge-64.dll"
  File "dependent\runtime\bin\javacpl.cpl"
  File "dependent\runtime\bin\javacpl.exe"
  File "dependent\runtime\bin\javafx_font.dll"
  File "dependent\runtime\bin\javafx_font_t2k.dll"
  File "dependent\runtime\bin\javafx_iio.dll"
  File "dependent\runtime\bin\javaw.exe"
  File "dependent\runtime\bin\javaws.exe"
  File "dependent\runtime\bin\java_crw_demo.dll"
  File "dependent\runtime\bin\jawt.dll"
  File "dependent\runtime\bin\JAWTAccessBridge-64.dll"
  File "dependent\runtime\bin\jdwp.dll"
  File "dependent\runtime\bin\jfr.dll"
  File "dependent\runtime\bin\jfxmedia.dll"
  File "dependent\runtime\bin\jfxwebkit.dll"
  File "dependent\runtime\bin\jjs.exe"
  File "dependent\runtime\bin\jli.dll"
  File "dependent\runtime\bin\jp2iexp.dll"
  File "dependent\runtime\bin\jp2launcher.exe"
  File "dependent\runtime\bin\jp2native.dll"
  File "dependent\runtime\bin\jp2ssv.dll"
  File "dependent\runtime\bin\jpeg.dll"
  File "dependent\runtime\bin\jsdt.dll"
  File "dependent\runtime\bin\jsound.dll"
  File "dependent\runtime\bin\jsoundds.dll"
  File "dependent\runtime\bin\keytool.exe"
  File "dependent\runtime\bin\kinit.exe"
  File "dependent\runtime\bin\klist.exe"
  File "dependent\runtime\bin\ktab.exe"
  File "dependent\runtime\bin\lcms.dll"
  File "dependent\runtime\bin\management.dll"
  File "dependent\runtime\bin\mlib_image.dll"
  File "dependent\runtime\bin\msvcp140.dll"
  File "dependent\runtime\bin\msvcr100.dll"
  File "dependent\runtime\bin\net.dll"
  File "dependent\runtime\bin\nio.dll"
  File "dependent\runtime\bin\npt.dll"
  File "dependent\runtime\bin\orbd.exe"
  File "dependent\runtime\bin\pack200.exe"
  SetOutPath "$INSTDIR\runtime\bin\plugin2"
  File "dependent\runtime\bin\plugin2\msvcr100.dll"
  File "dependent\runtime\bin\plugin2\npjp2.dll"
  SetOutPath "$INSTDIR\runtime\bin"
  File "dependent\runtime\bin\policytool.exe"
  File "dependent\runtime\bin\prism_common.dll"
  File "dependent\runtime\bin\prism_d3d.dll"
  File "dependent\runtime\bin\prism_sw.dll"
  File "dependent\runtime\bin\resource.dll"
  File "dependent\runtime\bin\rmid.exe"
  File "dependent\runtime\bin\rmiregistry.exe"
  File "dependent\runtime\bin\sawindbg.dll"
  SetOutPath "$INSTDIR\runtime\bin\server"
  File "dependent\runtime\bin\server\classes.jsa"
  File "dependent\runtime\bin\server\jvm.dll"
  File "dependent\runtime\bin\server\Xusage.txt"
  SetOutPath "$INSTDIR\runtime\bin"
  File "dependent\runtime\bin\servertool.exe"
  File "dependent\runtime\bin\splashscreen.dll"
  File "dependent\runtime\bin\ssv.dll"
  File "dependent\runtime\bin\ssvagent.exe"
  File "dependent\runtime\bin\sunec.dll"
  File "dependent\runtime\bin\sunmscapi.dll"
  File "dependent\runtime\bin\t2k.dll"
  File "dependent\runtime\bin\tnameserv.exe"
  File "dependent\runtime\bin\ucrtbase.dll"
  File "dependent\runtime\bin\unpack.dll"
  File "dependent\runtime\bin\unpack200.exe"
  File "dependent\runtime\bin\vcruntime140.dll"
  File "dependent\runtime\bin\verify.dll"
  File "dependent\runtime\bin\w2k_lsa_auth.dll"
  File "dependent\runtime\bin\WindowsAccessBridge-64.dll"
  File "dependent\runtime\bin\wsdetect.dll"
  File "dependent\runtime\bin\zip.dll"
  SetOutPath "$INSTDIR\runtime"
  File "dependent\runtime\COPYRIGHT"
  SetOutPath "$INSTDIR\runtime\lib"
  File "dependent\runtime\lib\accessibility.properties"
  SetOutPath "$INSTDIR\runtime\lib\amd64"
  File "dependent\runtime\lib\amd64\jvm.cfg"
  SetOutPath "$INSTDIR\runtime\lib"
  File "dependent\runtime\lib\calendars.properties"
  File "dependent\runtime\lib\charsets.jar"
  File "dependent\runtime\lib\classlist"
  SetOutPath "$INSTDIR\runtime\lib\cmm"
  File "dependent\runtime\lib\cmm\CIEXYZ.pf"
  File "dependent\runtime\lib\cmm\GRAY.pf"
  File "dependent\runtime\lib\cmm\LINEAR_RGB.pf"
  File "dependent\runtime\lib\cmm\PYCC.pf"
  File "dependent\runtime\lib\cmm\sRGB.pf"
  SetOutPath "$INSTDIR\runtime\lib"
  File "dependent\runtime\lib\content-types.properties"
  File "dependent\runtime\lib\currency.data"
  SetOutPath "$INSTDIR\runtime\lib\deploy"
  File "dependent\runtime\lib\deploy\ffjcext.zip"
  File "dependent\runtime\lib\deploy\messages.properties"
  File "dependent\runtime\lib\deploy\messages_de.properties"
  File "dependent\runtime\lib\deploy\messages_es.properties"
  File "dependent\runtime\lib\deploy\messages_fr.properties"
  File "dependent\runtime\lib\deploy\messages_it.properties"
  File "dependent\runtime\lib\deploy\messages_ja.properties"
  File "dependent\runtime\lib\deploy\messages_ko.properties"
  File "dependent\runtime\lib\deploy\messages_pt_BR.properties"
  File "dependent\runtime\lib\deploy\messages_sv.properties"
  File "dependent\runtime\lib\deploy\messages_zh_CN.properties"
  File "dependent\runtime\lib\deploy\messages_zh_HK.properties"
  File "dependent\runtime\lib\deploy\messages_zh_TW.properties"
  File "dependent\runtime\lib\deploy\splash.gif"
  File "dependent\runtime\lib\deploy\splash@2x.gif"
  File "dependent\runtime\lib\deploy\splash_11-lic.gif"
  File "dependent\runtime\lib\deploy\splash_11@2x-lic.gif"
  SetOutPath "$INSTDIR\runtime\lib"
  File "dependent\runtime\lib\deploy.jar"
  SetOutPath "$INSTDIR\runtime\lib\ext"
  File "dependent\runtime\lib\ext\access-bridge-64.jar"
  File "dependent\runtime\lib\ext\cldrdata.jar"
  File "dependent\runtime\lib\ext\dnsns.jar"
  File "dependent\runtime\lib\ext\jaccess.jar"
  File "dependent\runtime\lib\ext\jfxrt.jar"
  File "dependent\runtime\lib\ext\localedata.jar"
  File "dependent\runtime\lib\ext\meta-index"
  File "dependent\runtime\lib\ext\nashorn.jar"
  File "dependent\runtime\lib\ext\sunec.jar"
  File "dependent\runtime\lib\ext\sunjce_provider.jar"
  File "dependent\runtime\lib\ext\sunmscapi.jar"
  File "dependent\runtime\lib\ext\sunpkcs11.jar"
  File "dependent\runtime\lib\ext\zipfs.jar"
  SetOutPath "$INSTDIR\runtime\lib"
  File "dependent\runtime\lib\flavormap.properties"
  File "dependent\runtime\lib\fontconfig.bfc"
  File "dependent\runtime\lib\fontconfig.properties.src"
  SetOutPath "$INSTDIR\runtime\lib\fonts"
  File "dependent\runtime\lib\fonts\LucidaBrightDemiBold.ttf"
  File "dependent\runtime\lib\fonts\LucidaBrightDemiItalic.ttf"
  File "dependent\runtime\lib\fonts\LucidaBrightItalic.ttf"
  File "dependent\runtime\lib\fonts\LucidaBrightRegular.ttf"
  File "dependent\runtime\lib\fonts\LucidaSansDemiBold.ttf"
  File "dependent\runtime\lib\fonts\LucidaSansRegular.ttf"
  File "dependent\runtime\lib\fonts\LucidaTypewriterBold.ttf"
  File "dependent\runtime\lib\fonts\LucidaTypewriterRegular.ttf"
  SetOutPath "$INSTDIR\runtime\lib"
  File "dependent\runtime\lib\hijrah-config-umalqura.properties"
  SetOutPath "$INSTDIR\runtime\lib\images\cursors"
  File "dependent\runtime\lib\images\cursors\cursors.properties"
  File "dependent\runtime\lib\images\cursors\invalid32x32.gif"
  File "dependent\runtime\lib\images\cursors\win32_CopyDrop32x32.gif"
  File "dependent\runtime\lib\images\cursors\win32_CopyNoDrop32x32.gif"
  File "dependent\runtime\lib\images\cursors\win32_LinkDrop32x32.gif"
  File "dependent\runtime\lib\images\cursors\win32_LinkNoDrop32x32.gif"
  File "dependent\runtime\lib\images\cursors\win32_MoveDrop32x32.gif"
  File "dependent\runtime\lib\images\cursors\win32_MoveNoDrop32x32.gif"
  SetOutPath "$INSTDIR\runtime\lib"
  File "dependent\runtime\lib\javafx.properties"
  File "dependent\runtime\lib\javaws.jar"
  File "dependent\runtime\lib\jce.jar"
  SetOutPath "$INSTDIR\runtime\lib\jfr"
  File "dependent\runtime\lib\jfr\default.jfc"
  File "dependent\runtime\lib\jfr\profile.jfc"
  SetOutPath "$INSTDIR\runtime\lib"
  File "dependent\runtime\lib\jfr.jar"
  File "dependent\runtime\lib\jfxswt.jar"
  File "dependent\runtime\lib\jsse.jar"
  File "dependent\runtime\lib\jvm.hprof.txt"
  File "dependent\runtime\lib\logging.properties"
  SetOutPath "$INSTDIR\runtime\lib\management"
  File "dependent\runtime\lib\management\jmxremote.access"
  File "dependent\runtime\lib\management\jmxremote.password.template"
  File "dependent\runtime\lib\management\management.properties"
  File "dependent\runtime\lib\management\snmp.acl.template"
  SetOutPath "$INSTDIR\runtime\lib"
  File "dependent\runtime\lib\management-agent.jar"
  File "dependent\runtime\lib\meta-index"
  File "dependent\runtime\lib\net.properties"
  File "dependent\runtime\lib\plugin.jar"
  File "dependent\runtime\lib\psfont.properties.ja"
  File "dependent\runtime\lib\psfontj2d.properties"
  File "dependent\runtime\lib\resources.jar"
  File "dependent\runtime\lib\rt.jar"
  SetOutPath "$INSTDIR\runtime\lib\security"
  File "dependent\runtime\lib\security\blacklist"
  File "dependent\runtime\lib\security\blacklisted.certs"
  File "dependent\runtime\lib\security\cacerts"
  File "dependent\runtime\lib\security\java.policy"
  File "dependent\runtime\lib\security\java.security"
  File "dependent\runtime\lib\security\javaws.policy"
  SetOutPath "$INSTDIR\runtime\lib\security\policy\limited"
  File "dependent\runtime\lib\security\policy\limited\local_policy.jar"
  File "dependent\runtime\lib\security\policy\limited\US_export_policy.jar"
  SetOutPath "$INSTDIR\runtime\lib\security\policy\unlimited"
  File "dependent\runtime\lib\security\policy\unlimited\local_policy.jar"
  File "dependent\runtime\lib\security\policy\unlimited\US_export_policy.jar"
  SetOutPath "$INSTDIR\runtime\lib\security"
  File "dependent\runtime\lib\security\trusted.libraries"
  SetOutPath "$INSTDIR\runtime\lib"
  File "dependent\runtime\lib\sound.properties"
  File "dependent\runtime\lib\tzdb.dat"
  File "dependent\runtime\lib\tzmappings"
  SetOutPath "$INSTDIR\runtime"
  File "dependent\runtime\LICENSE"
  File "dependent\runtime\README.txt"
  File "dependent\runtime\THIRDPARTYLICENSEREADME-JAVAFX.txt"
  File "dependent\runtime\THIRDPARTYLICENSEREADME.txt"
  File "dependent\runtime\Welcome.html"
  SetOutPath "$INSTDIR"
  File "dependent\setup_service.bat"
  File "dependent\stop.bat"
SectionEnd
Section -AdditionalIcons
  CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Uninstall.lnk" "$INSTDIR\uninst.exe"
SectionEnd
Section -Post
  WriteUninstaller "$INSTDIR\uninst.exe"
  WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR"
  ;针对所有用户有效 添加程序以管理员权限运行
  ;SetRegView 64
  WriteRegStr HKLM "${PRODUCT_RUN_LEVEL}" "$INSTDIR\${PRODUCT_NAME}.exe" "RUNASADMIN"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\${PRODUCT_NAME}.exe"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
SectionEnd
Function un.onUninstSuccess
  HideWindow
  MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) 已成功地从你的计算机移除。"
FunctionEnd
Function un.onInit
!insertmacro MUI_UNGETLANGUAGE
  MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "你确实要完全移除 $(^Name) ,其及所有的组件?" IDYES +2
  Abort
FunctionEnd
Section Uninstall
  nsExec::Exec "$INSTDIR\remove_service.bat"
  Delete "$INSTDIR\uninst.exe"
  Delete "$INSTDIR\stop.bat"
  Delete "$INSTDIR\setup_service.bat"
  Delete "$INSTDIR\runtime\Welcome.html"
  Delete "$INSTDIR\runtime\THIRDPARTYLICENSEREADME.txt"
  Delete "$INSTDIR\runtime\THIRDPARTYLICENSEREADME-JAVAFX.txt"
  Delete "$INSTDIR\runtime\README.txt"
  Delete "$INSTDIR\runtime\LICENSE"
  Delete "$INSTDIR\runtime\lib\tzmappings"
  Delete "$INSTDIR\runtime\lib\tzdb.dat"
  Delete "$INSTDIR\runtime\lib\sound.properties"
  Delete "$INSTDIR\runtime\lib\security\trusted.libraries"
  Delete "$INSTDIR\runtime\lib\security\policy\unlimited\US_export_policy.jar"
  Delete "$INSTDIR\runtime\lib\security\policy\unlimited\local_policy.jar"
  Delete "$INSTDIR\runtime\lib\security\policy\limited\US_export_policy.jar"
  Delete "$INSTDIR\runtime\lib\security\policy\limited\local_policy.jar"
  Delete "$INSTDIR\runtime\lib\security\javaws.policy"
  Delete "$INSTDIR\runtime\lib\security\java.security"
  Delete "$INSTDIR\runtime\lib\security\java.policy"
  Delete "$INSTDIR\runtime\lib\security\cacerts"
  Delete "$INSTDIR\runtime\lib\security\blacklisted.certs"
  Delete "$INSTDIR\runtime\lib\security\blacklist"
  Delete "$INSTDIR\runtime\lib\rt.jar"
  Delete "$INSTDIR\runtime\lib\resources.jar"
  Delete "$INSTDIR\runtime\lib\psfontj2d.properties"
  Delete "$INSTDIR\runtime\lib\psfont.properties.ja"
  Delete "$INSTDIR\runtime\lib\plugin.jar"
  Delete "$INSTDIR\runtime\lib\net.properties"
  Delete "$INSTDIR\runtime\lib\meta-index"
  Delete "$INSTDIR\runtime\lib\management-agent.jar"
  Delete "$INSTDIR\runtime\lib\management\snmp.acl.template"
  Delete "$INSTDIR\runtime\lib\management\management.properties"
  Delete "$INSTDIR\runtime\lib\management\jmxremote.password.template"
  Delete "$INSTDIR\runtime\lib\management\jmxremote.access"
  Delete "$INSTDIR\runtime\lib\logging.properties"
  Delete "$INSTDIR\runtime\lib\jvm.hprof.txt"
  Delete "$INSTDIR\runtime\lib\jsse.jar"
  Delete "$INSTDIR\runtime\lib\jfxswt.jar"
  Delete "$INSTDIR\runtime\lib\jfr.jar"
  Delete "$INSTDIR\runtime\lib\jfr\profile.jfc"
  Delete "$INSTDIR\runtime\lib\jfr\default.jfc"
  Delete "$INSTDIR\runtime\lib\jce.jar"
  Delete "$INSTDIR\runtime\lib\javaws.jar"
  Delete "$INSTDIR\runtime\lib\javafx.properties"
  Delete "$INSTDIR\runtime\lib\images\cursors\win32_MoveNoDrop32x32.gif"
  Delete "$INSTDIR\runtime\lib\images\cursors\win32_MoveDrop32x32.gif"
  Delete "$INSTDIR\runtime\lib\images\cursors\win32_LinkNoDrop32x32.gif"
  Delete "$INSTDIR\runtime\lib\images\cursors\win32_LinkDrop32x32.gif"
  Delete "$INSTDIR\runtime\lib\images\cursors\win32_CopyNoDrop32x32.gif"
  Delete "$INSTDIR\runtime\lib\images\cursors\win32_CopyDrop32x32.gif"
  Delete "$INSTDIR\runtime\lib\images\cursors\invalid32x32.gif"
  Delete "$INSTDIR\runtime\lib\images\cursors\cursors.properties"
  Delete "$INSTDIR\runtime\lib\hijrah-config-umalqura.properties"
  Delete "$INSTDIR\runtime\lib\fonts\LucidaTypewriterRegular.ttf"
  Delete "$INSTDIR\runtime\lib\fonts\LucidaTypewriterBold.ttf"
  Delete "$INSTDIR\runtime\lib\fonts\LucidaSansRegular.ttf"
  Delete "$INSTDIR\runtime\lib\fonts\LucidaSansDemiBold.ttf"
  Delete "$INSTDIR\runtime\lib\fonts\LucidaBrightRegular.ttf"
  Delete "$INSTDIR\runtime\lib\fonts\LucidaBrightItalic.ttf"
  Delete "$INSTDIR\runtime\lib\fonts\LucidaBrightDemiItalic.ttf"
  Delete "$INSTDIR\runtime\lib\fonts\LucidaBrightDemiBold.ttf"
  Delete "$INSTDIR\runtime\lib\fontconfig.properties.src"
  Delete "$INSTDIR\runtime\lib\fontconfig.bfc"
  Delete "$INSTDIR\runtime\lib\flavormap.properties"
  Delete "$INSTDIR\runtime\lib\ext\zipfs.jar"
  Delete "$INSTDIR\runtime\lib\ext\sunpkcs11.jar"
  Delete "$INSTDIR\runtime\lib\ext\sunmscapi.jar"
  Delete "$INSTDIR\runtime\lib\ext\sunjce_provider.jar"
  Delete "$INSTDIR\runtime\lib\ext\sunec.jar"
  Delete "$INSTDIR\runtime\lib\ext\nashorn.jar"
  Delete "$INSTDIR\runtime\lib\ext\meta-index"
  Delete "$INSTDIR\runtime\lib\ext\localedata.jar"
  Delete "$INSTDIR\runtime\lib\ext\jfxrt.jar"
  Delete "$INSTDIR\runtime\lib\ext\jaccess.jar"
  Delete "$INSTDIR\runtime\lib\ext\dnsns.jar"
  Delete "$INSTDIR\runtime\lib\ext\cldrdata.jar"
  Delete "$INSTDIR\runtime\lib\ext\access-bridge-64.jar"
  Delete "$INSTDIR\runtime\lib\deploy.jar"
  Delete "$INSTDIR\runtime\lib\deploy\splash_11@2x-lic.gif"
  Delete "$INSTDIR\runtime\lib\deploy\splash_11-lic.gif"
  Delete "$INSTDIR\runtime\lib\deploy\splash@2x.gif"
  Delete "$INSTDIR\runtime\lib\deploy\splash.gif"
  Delete "$INSTDIR\runtime\lib\deploy\messages_zh_TW.properties"
  Delete "$INSTDIR\runtime\lib\deploy\messages_zh_HK.properties"
  Delete "$INSTDIR\runtime\lib\deploy\messages_zh_CN.properties"
  Delete "$INSTDIR\runtime\lib\deploy\messages_sv.properties"
  Delete "$INSTDIR\runtime\lib\deploy\messages_pt_BR.properties"
  Delete "$INSTDIR\runtime\lib\deploy\messages_ko.properties"
  Delete "$INSTDIR\runtime\lib\deploy\messages_ja.properties"
  Delete "$INSTDIR\runtime\lib\deploy\messages_it.properties"
  Delete "$INSTDIR\runtime\lib\deploy\messages_fr.properties"
  Delete "$INSTDIR\runtime\lib\deploy\messages_es.properties"
  Delete "$INSTDIR\runtime\lib\deploy\messages_de.properties"
  Delete "$INSTDIR\runtime\lib\deploy\messages.properties"
  Delete "$INSTDIR\runtime\lib\deploy\ffjcext.zip"
  Delete "$INSTDIR\runtime\lib\currency.data"
  Delete "$INSTDIR\runtime\lib\content-types.properties"
  Delete "$INSTDIR\runtime\lib\cmm\sRGB.pf"
  Delete "$INSTDIR\runtime\lib\cmm\PYCC.pf"
  Delete "$INSTDIR\runtime\lib\cmm\LINEAR_RGB.pf"
  Delete "$INSTDIR\runtime\lib\cmm\GRAY.pf"
  Delete "$INSTDIR\runtime\lib\cmm\CIEXYZ.pf"
  Delete "$INSTDIR\runtime\lib\classlist"
  Delete "$INSTDIR\runtime\lib\charsets.jar"
  Delete "$INSTDIR\runtime\lib\calendars.properties"
  Delete "$INSTDIR\runtime\lib\amd64\jvm.cfg"
  Delete "$INSTDIR\runtime\lib\accessibility.properties"
  Delete "$INSTDIR\runtime\COPYRIGHT"
  Delete "$INSTDIR\runtime\bin\zip.dll"
  Delete "$INSTDIR\runtime\bin\wsdetect.dll"
  Delete "$INSTDIR\runtime\bin\WindowsAccessBridge-64.dll"
  Delete "$INSTDIR\runtime\bin\w2k_lsa_auth.dll"
  Delete "$INSTDIR\runtime\bin\verify.dll"
  Delete "$INSTDIR\runtime\bin\vcruntime140.dll"
  Delete "$INSTDIR\runtime\bin\unpack200.exe"
  Delete "$INSTDIR\runtime\bin\unpack.dll"
  Delete "$INSTDIR\runtime\bin\ucrtbase.dll"
  Delete "$INSTDIR\runtime\bin\tnameserv.exe"
  Delete "$INSTDIR\runtime\bin\t2k.dll"
  Delete "$INSTDIR\runtime\bin\sunmscapi.dll"
  Delete "$INSTDIR\runtime\bin\sunec.dll"
  Delete "$INSTDIR\runtime\bin\ssvagent.exe"
  Delete "$INSTDIR\runtime\bin\ssv.dll"
  Delete "$INSTDIR\runtime\bin\splashscreen.dll"
  Delete "$INSTDIR\runtime\bin\servertool.exe"
  Delete "$INSTDIR\runtime\bin\server\Xusage.txt"
  Delete "$INSTDIR\runtime\bin\server\jvm.dll"
  Delete "$INSTDIR\runtime\bin\server\classes.jsa"
  Delete "$INSTDIR\runtime\bin\sawindbg.dll"
  Delete "$INSTDIR\runtime\bin\rmiregistry.exe"
  Delete "$INSTDIR\runtime\bin\rmid.exe"
  Delete "$INSTDIR\runtime\bin\resource.dll"
  Delete "$INSTDIR\runtime\bin\prism_sw.dll"
  Delete "$INSTDIR\runtime\bin\prism_d3d.dll"
  Delete "$INSTDIR\runtime\bin\prism_common.dll"
  Delete "$INSTDIR\runtime\bin\policytool.exe"
  Delete "$INSTDIR\runtime\bin\plugin2\npjp2.dll"
  Delete "$INSTDIR\runtime\bin\plugin2\msvcr100.dll"
  Delete "$INSTDIR\runtime\bin\pack200.exe"
  Delete "$INSTDIR\runtime\bin\orbd.exe"
  Delete "$INSTDIR\runtime\bin\npt.dll"
  Delete "$INSTDIR\runtime\bin\nio.dll"
  Delete "$INSTDIR\runtime\bin\net.dll"
  Delete "$INSTDIR\runtime\bin\msvcr100.dll"
  Delete "$INSTDIR\runtime\bin\msvcp140.dll"
  Delete "$INSTDIR\runtime\bin\mlib_image.dll"
  Delete "$INSTDIR\runtime\bin\management.dll"
  Delete "$INSTDIR\runtime\bin\lcms.dll"
  Delete "$INSTDIR\runtime\bin\ktab.exe"
  Delete "$INSTDIR\runtime\bin\klist.exe"
  Delete "$INSTDIR\runtime\bin\kinit.exe"
  Delete "$INSTDIR\runtime\bin\keytool.exe"
  Delete "$INSTDIR\runtime\bin\jsoundds.dll"
  Delete "$INSTDIR\runtime\bin\jsound.dll"
  Delete "$INSTDIR\runtime\bin\jsdt.dll"
  Delete "$INSTDIR\runtime\bin\jpeg.dll"
  Delete "$INSTDIR\runtime\bin\jp2ssv.dll"
  Delete "$INSTDIR\runtime\bin\jp2native.dll"
  Delete "$INSTDIR\runtime\bin\jp2launcher.exe"
  Delete "$INSTDIR\runtime\bin\jp2iexp.dll"
  Delete "$INSTDIR\runtime\bin\jli.dll"
  Delete "$INSTDIR\runtime\bin\jjs.exe"
  Delete "$INSTDIR\runtime\bin\jfxwebkit.dll"
  Delete "$INSTDIR\runtime\bin\jfxmedia.dll"
  Delete "$INSTDIR\runtime\bin\jfr.dll"
  Delete "$INSTDIR\runtime\bin\jdwp.dll"
  Delete "$INSTDIR\runtime\bin\JAWTAccessBridge-64.dll"
  Delete "$INSTDIR\runtime\bin\jawt.dll"
  Delete "$INSTDIR\runtime\bin\java_crw_demo.dll"
  Delete "$INSTDIR\runtime\bin\javaws.exe"
  Delete "$INSTDIR\runtime\bin\javaw.exe"
  Delete "$INSTDIR\runtime\bin\javafx_iio.dll"
  Delete "$INSTDIR\runtime\bin\javafx_font_t2k.dll"
  Delete "$INSTDIR\runtime\bin\javafx_font.dll"
  Delete "$INSTDIR\runtime\bin\javacpl.exe"
  Delete "$INSTDIR\runtime\bin\javacpl.cpl"
  Delete "$INSTDIR\runtime\bin\JavaAccessBridge-64.dll"
  Delete "$INSTDIR\runtime\bin\java.exe"
  Delete "$INSTDIR\runtime\bin\java.dll"
  Delete "$INSTDIR\runtime\bin\java-rmi.exe"
  Delete "$INSTDIR\runtime\bin\jabswitch.exe"
  Delete "$INSTDIR\runtime\bin\jaas_nt.dll"
  Delete "$INSTDIR\runtime\bin\j2pkcs11.dll"
  Delete "$INSTDIR\runtime\bin\j2pcsc.dll"
  Delete "$INSTDIR\runtime\bin\instrument.dll"
  Delete "$INSTDIR\runtime\bin\hprof.dll"
  Delete "$INSTDIR\runtime\bin\gstreamer-lite.dll"
  Delete "$INSTDIR\runtime\bin\glib-lite.dll"
  Delete "$INSTDIR\runtime\bin\glass.dll"
  Delete "$INSTDIR\runtime\bin\fxplugins.dll"
  Delete "$INSTDIR\runtime\bin\fontmanager.dll"
  Delete "$INSTDIR\runtime\bin\eula.dll"
  Delete "$INSTDIR\runtime\bin\dt_socket.dll"
  Delete "$INSTDIR\runtime\bin\dt_shmem.dll"
  Delete "$INSTDIR\runtime\bin\dtplugin\npdeployJava1.dll"
  Delete "$INSTDIR\runtime\bin\dtplugin\deployJava1.dll"
  Delete "$INSTDIR\runtime\bin\deploy.dll"
  Delete "$INSTDIR\runtime\bin\decora_sse.dll"
  Delete "$INSTDIR\runtime\bin\dcpr.dll"
  Delete "$INSTDIR\runtime\bin\concrt140.dll"
  Delete "$INSTDIR\runtime\bin\bci.dll"
  Delete "$INSTDIR\runtime\bin\awt.dll"
  Delete "$INSTDIR\runtime\bin\attach.dll"
  Delete "$INSTDIR\runtime\bin\api-ms-win-crt-utility-l1-1-0.dll"
  Delete "$INSTDIR\runtime\bin\api-ms-win-crt-time-l1-1-0.dll"
  Delete "$INSTDIR\runtime\bin\api-ms-win-crt-string-l1-1-0.dll"
  Delete "$INSTDIR\runtime\bin\api-ms-win-crt-stdio-l1-1-0.dll"
  Delete "$INSTDIR\runtime\bin\api-ms-win-crt-runtime-l1-1-0.dll"
  Delete "$INSTDIR\runtime\bin\api-ms-win-crt-process-l1-1-0.dll"
  Delete "$INSTDIR\runtime\bin\api-ms-win-crt-private-l1-1-0.dll"
  Delete "$INSTDIR\runtime\bin\api-ms-win-crt-multibyte-l1-1-0.dll"
  Delete "$INSTDIR\runtime\bin\api-ms-win-crt-math-l1-1-0.dll"
  Delete "$INSTDIR\runtime\bin\api-ms-win-crt-locale-l1-1-0.dll"
  Delete "$INSTDIR\runtime\bin\api-ms-win-crt-heap-l1-1-0.dll"
  Delete "$INSTDIR\runtime\bin\api-ms-win-crt-filesystem-l1-1-0.dll"
  Delete "$INSTDIR\runtime\bin\api-ms-win-crt-environment-l1-1-0.dll"
  Delete "$INSTDIR\runtime\bin\api-ms-win-crt-convert-l1-1-0.dll"
  Delete "$INSTDIR\runtime\bin\api-ms-win-crt-conio-l1-1-0.dll"
  Delete "$INSTDIR\runtime\bin\api-ms-win-core-util-l1-1-0.dll"
  Delete "$INSTDIR\runtime\bin\api-ms-win-core-timezone-l1-1-0.dll"
  Delete "$INSTDIR\runtime\bin\api-ms-win-core-sysinfo-l1-1-0.dll"
  Delete "$INSTDIR\runtime\bin\api-ms-win-core-synch-l1-2-0.dll"
  Delete "$INSTDIR\runtime\bin\api-ms-win-core-synch-l1-1-0.dll"
  Delete "$INSTDIR\runtime\bin\api-ms-win-core-string-l1-1-0.dll"
  Delete "$INSTDIR\runtime\bin\api-ms-win-core-rtlsupport-l1-1-0.dll"
  Delete "$INSTDIR\runtime\bin\api-ms-win-core-profile-l1-1-0.dll"
  Delete "$INSTDIR\runtime\bin\api-ms-win-core-processthreads-l1-1-1.dll"
  Delete "$INSTDIR\runtime\bin\api-ms-win-core-processthreads-l1-1-0.dll"
  Delete "$INSTDIR\runtime\bin\api-ms-win-core-processenvironment-l1-1-0.dll"
  Delete "$INSTDIR\runtime\bin\api-ms-win-core-namedpipe-l1-1-0.dll"
  Delete "$INSTDIR\runtime\bin\api-ms-win-core-memory-l1-1-0.dll"
  Delete "$INSTDIR\runtime\bin\api-ms-win-core-localization-l1-2-0.dll"
  Delete "$INSTDIR\runtime\bin\api-ms-win-core-libraryloader-l1-1-0.dll"
  Delete "$INSTDIR\runtime\bin\api-ms-win-core-interlocked-l1-1-0.dll"
  Delete "$INSTDIR\runtime\bin\api-ms-win-core-heap-l1-1-0.dll"
  Delete "$INSTDIR\runtime\bin\api-ms-win-core-handle-l1-1-0.dll"
  Delete "$INSTDIR\runtime\bin\api-ms-win-core-file-l2-1-0.dll"
  Delete "$INSTDIR\runtime\bin\api-ms-win-core-file-l1-2-0.dll"
  Delete "$INSTDIR\runtime\bin\api-ms-win-core-file-l1-1-0.dll"
  Delete "$INSTDIR\runtime\bin\api-ms-win-core-errorhandling-l1-1-0.dll"
  Delete "$INSTDIR\runtime\bin\api-ms-win-core-debug-l1-1-0.dll"
  Delete "$INSTDIR\runtime\bin\api-ms-win-core-datetime-l1-1-0.dll"
  Delete "$INSTDIR\runtime\bin\api-ms-win-core-console-l1-1-0.dll"
  Delete "$INSTDIR\remove_service.bat"
  Delete "$INSTDIR\licence.txt"
  Delete "$INSTDIR\FbxAnalysis.xml"
  Delete "$INSTDIR\FbxAnalysis.jar"
  Delete "$INSTDIR\FbxAnalysis.exe"
  Delete "$INSTDIR\vulkan-1.dll"
  Delete "$INSTDIR\vk_swiftshader_icd.json"
  Delete "$INSTDIR\vk_swiftshader.dll"
  Delete "$INSTDIR\v8_context_snapshot.bin"
  Delete "$INSTDIR\swiftshader\libGLESv2.dll"
  Delete "$INSTDIR\swiftshader\libEGL.dll"
  Delete "$INSTDIR\snapshot_blob.bin"
  Delete "$INSTDIR\resources.pak"
  Delete "$INSTDIR\resources\elevate.exe"
  Delete "$INSTDIR\resources\app.asar"
  Delete "$INSTDIR\locales\zh-TW.pak"
  Delete "$INSTDIR\locales\zh-CN.pak"
  Delete "$INSTDIR\locales\vi.pak"
  Delete "$INSTDIR\locales\uk.pak"
  Delete "$INSTDIR\locales\tr.pak"
  Delete "$INSTDIR\locales\th.pak"
  Delete "$INSTDIR\locales\te.pak"
  Delete "$INSTDIR\locales\ta.pak"
  Delete "$INSTDIR\locales\sw.pak"
  Delete "$INSTDIR\locales\sv.pak"
  Delete "$INSTDIR\locales\sr.pak"
  Delete "$INSTDIR\locales\sl.pak"
  Delete "$INSTDIR\locales\sk.pak"
  Delete "$INSTDIR\locales\ru.pak"
  Delete "$INSTDIR\locales\ro.pak"
  Delete "$INSTDIR\locales\pt-PT.pak"
  Delete "$INSTDIR\locales\pt-BR.pak"
  Delete "$INSTDIR\locales\pl.pak"
  Delete "$INSTDIR\locales\nl.pak"
  Delete "$INSTDIR\locales\nb.pak"
  Delete "$INSTDIR\locales\ms.pak"
  Delete "$INSTDIR\locales\mr.pak"
  Delete "$INSTDIR\locales\ml.pak"
  Delete "$INSTDIR\locales\lv.pak"
  Delete "$INSTDIR\locales\lt.pak"
  Delete "$INSTDIR\locales\ko.pak"
  Delete "$INSTDIR\locales\kn.pak"
  Delete "$INSTDIR\locales\ja.pak"
  Delete "$INSTDIR\locales\it.pak"
  Delete "$INSTDIR\locales\id.pak"
  Delete "$INSTDIR\locales\hu.pak"
  Delete "$INSTDIR\locales\hr.pak"
  Delete "$INSTDIR\locales\hi.pak"
  Delete "$INSTDIR\locales\he.pak"
  Delete "$INSTDIR\locales\gu.pak"
  Delete "$INSTDIR\locales\fr.pak"
  Delete "$INSTDIR\locales\fil.pak"
  Delete "$INSTDIR\locales\fi.pak"
  Delete "$INSTDIR\locales\fa.pak"
  Delete "$INSTDIR\locales\et.pak"
  Delete "$INSTDIR\locales\es.pak"
  Delete "$INSTDIR\locales\es-419.pak"
  Delete "$INSTDIR\locales\en-US.pak"
  Delete "$INSTDIR\locales\en-GB.pak"
  Delete "$INSTDIR\locales\el.pak"
  Delete "$INSTDIR\locales\de.pak"
  Delete "$INSTDIR\locales\da.pak"
  Delete "$INSTDIR\locales\cs.pak"
  Delete "$INSTDIR\locales\ca.pak"
  Delete "$INSTDIR\locales\bn.pak"
  Delete "$INSTDIR\locales\bg.pak"
  Delete "$INSTDIR\locales\ar.pak"
  Delete "$INSTDIR\locales\am.pak"
  Delete "$INSTDIR\LICENSES.chromium.html"
  Delete "$INSTDIR\LICENSE.electron.txt"
  Delete "$INSTDIR\libGLESv2.dll"
  Delete "$INSTDIR\libEGL.dll"
  Delete "$INSTDIR\icudtl.dat"
  Delete "$INSTDIR\ffmpeg.dll"
  Delete "$INSTDIR\fbx.exe"
  Delete "$INSTDIR\d3dcompiler_47.dll"
  Delete "$INSTDIR\chrome_200_percent.pak"
  Delete "$INSTDIR\chrome_100_percent.pak"
  Delete "$SMPROGRAMS\${PRODUCT_NAME}\Uninstall.lnk"
  Delete "$DESKTOP\${PRODUCT_NAME}.lnk"
  Delete "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk"
  RMDir "$SMPROGRAMS\${PRODUCT_NAME}"
  RMDir "$INSTDIR\swiftshader"
  RMDir "$INSTDIR\runtime\lib\security\policy\unlimited"
  RMDir "$INSTDIR\runtime\lib\security\policy\limited"
  RMDir "$INSTDIR\runtime\lib\security"
  RMDir "$INSTDIR\runtime\lib\management"
  RMDir "$INSTDIR\runtime\lib\jfr"
  RMDir "$INSTDIR\runtime\lib\images\cursors"
  RMDir "$INSTDIR\runtime\lib\fonts"
  RMDir "$INSTDIR\runtime\lib\ext"
  RMDir "$INSTDIR\runtime\lib\deploy"
  RMDir "$INSTDIR\runtime\lib\cmm"
  RMDir "$INSTDIR\runtime\lib\amd64"
  RMDir "$INSTDIR\runtime\lib"
  RMDir "$INSTDIR\runtime\bin\server"
  RMDir "$INSTDIR\runtime\bin\plugin2"
  RMDir "$INSTDIR\runtime\bin\dtplugin"
  RMDir "$INSTDIR\runtime\bin"
  RMDir "$INSTDIR\runtime"
  RMDir "$INSTDIR\resources"
  RMDir "$INSTDIR\locales"
  RMDir "$INSTDIR"
  DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
  DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
  SetAutoClose true
SectionEnd
src/background.js
@@ -1,47 +1,60 @@
'use strict'
"use strict";
const { app, protocol, BrowserWindow, Menu, ipcMain, dialog, shell } = require('electron');
const { createProtocol } = require('vue-cli-plugin-electron-builder/lib');
const path = require('path');
const child_process = require('child_process');
const log = require('electron-log');
const appUrl = 'http://localhost:8099/fbx/test/hello';
const requestPromise = require('minimal-request-promise');
const remote = require('@electron/remote/main');
const {
  app,
  protocol,
  BrowserWindow,
  Menu,
  ipcMain,
  dialog,
  shell,
} = require("electron");
const { createProtocol } = require("vue-cli-plugin-electron-builder/lib");
const path = require("path");
const child_process = require("child_process");
const log = require("electron-log");
// const appUrl = "http://localhost:8099/fbx/test/hello";
const appUrl = "http://localhost:8099/fbx/testParam/callService?seconds=3";
const requestPromise = require("minimal-request-promise");
const remote = require("@electron/remote/main");
remote.initialize();
const isDevelopment = process.env.NODE_ENV !== 'production'
const isDevelopment = process.env.NODE_ENV !== "production";
let win = null;
let loadingWin = null;
// 单例锁
const gotTheLock = app.requestSingleInstanceLock()
const gotTheLock = app.requestSingleInstanceLock();
if (!gotTheLock) {
  app.quit()
  app.quit();
} else {
  app.on('second-instance', (event, commandLine, workingDirectory) => {
  app.on("second-instance", (event, commandLine, workingDirectory) => {
    // 当运行第二个实例时,将会聚焦到myWindow这个窗口
    if (win) {
      if (win.isMinimized()) win.restore()
      win.focus()
      if (win.isMinimized()) win.restore();
      win.focus();
      // TODO 双击文件 打开程序时 发送的事件
      if (commandLine[2]) {
        win.webContents.send('selected-file', { filePaths: [commandLine[2]] }, 'MenuList');
        win.webContents.send(
          "selected-file",
          { filePaths: [commandLine[2]] },
          "MenuList"
        );
      }
    }
  })
  });
}
// Scheme must be registered before the app is ready
protocol.registerSchemesAsPrivileged([
  { scheme: 'app', privileges: { secure: true, standard: true } }
])
  { scheme: "app", privileges: { secure: true, standard: true } },
]);
// loading 窗口
const loadingURL = isDevelopment ? path.join(__dirname, './loading.html') : `file://${__dirname}/loading.html`;
const loadingURL = isDevelopment
  ? path.join(__dirname, "./loading.html")
  : `file://${__dirname}/loading.html`;
const showLoading = (cb, argFn) => {
  loadingWin = new BrowserWindow({
    // show: false,
@@ -51,8 +64,8 @@
    resizable: false,
    transparent: true,
    webPreferences: {
      preload: path.join(__dirname, './preload.js')
    }
      preload: path.join(__dirname, "./preload.js"),
    },
  });
  // loadingWin.once('show', () => {
  //   cb(true);
@@ -69,62 +82,207 @@
  //     serverProcess = require('child_process').execFile(dir + '/app_x64.exe');
  //   });
  // }
  requestPromise.get(appUrl).then(function () {
    log.info('窗口初始化 服务正常');
    // ipcRenderer.send('java-ready');
    loadingWin.webContents.send('java-ready');
  }, function () {
    log.info('窗口初始化 接口不通');
    log.info('正在终止java进程,然后重启服务');
    let stop = child_process.spawn('cmd.exe', ['/c', 'stop.bat']);
    stop.on('exit', function (code) {
      if (code > 0) {
        return false;
      }
      log.info('java进程被终止,准备重启服务');
      child_process.exec(`"${process.cwd()}\\FbxAnalysis.exe" restart`, (err) => {
  requestPromise.get(appUrl).then(
    function () {
      log.info("窗口初始化 服务正常");
      // ipcRenderer.send('java-ready');
      loadingWin.webContents.send("java-ready");
    },
    function () {
      log.info("窗口初始化 接口不通");
      log.info("正在终止java进程,然后重启服务");
      // let stop = child_process.spawn("cmd.exe", ["/c", "stop.bat"]);
      // let stop;
      // try {
      //   stop = child_process.spawn("cmd.exe", ["/c", "stop.bat"]);
      //   stop.on("close", function (code) {
      //     log.info("子进程关闭,代码: " + code);
      //   });
      //   stop.on("disconnect", function () {
      //     log.info("子进程断开连接");
      //   });
      //   stop.on("error", function (err) {
      //     log.info("子进程发生错误: " + err);
      //   });
      //   stop.on("exit", function (code) {
      //     log.info("子进程退出,代码: " + code);
      //   });
      //   stop.on("message", function (message) {
      //     log.info("子进程发送消息: " + message);
      //   });
      //   stop.on("spawn", function () {
      //     log.info("子进程被创建");
      //   });
      //   stop.on("stdio", function (stdio) {
      //     log.info("子进程的标准输入、输出或错误流发生变化: " + stdio);
      //   });
      //   stop.stdout.on("data", function (data) {
      //     log.info("子进程的标准输出: " + data.toString());
      //   });
      //   stop.stderr.on("data", function (data) {
      //     log.info("子进程的标准错误输出: " + data.toString());
      //   });
      //   // ...
      // } catch (err) {
      //   log.info("catch stop.bat 执行失败, " + err);
      // }
      // stop.on("error", function (err) {
      //   log.info("error:  ====");
      //   log.info("error:  " + err.toString());
      //   log.info("on error   stop.bat 执行失败, " + err);
      // });
      // stop.on("exit", function (code) {
      //   if (code > 0) {
      //     log.info("stop.bat 执行失败, " + stop.stderr);
      //     log.info("stop.bat 失败日志:" + stop.stderr.toString());
      //     return false;
      //   }
      //   log.info("java进程被终止,准备重启服务");
      //   child_process.exec(
      //     `"${process.cwd()}\\FbxAnalysis.exe" restart`,
      //     (err) => {
      //       if (err) {
      //         log.info("重启服务出错了stderr: " + JSON.stringify(err));
      //         // 重新运行setup批处理 尝试重新注册服务
      //         child_process.spawn("cmd.exe", ["/c", "setup_service.bat"]);
      //         log.info("服务异常 正在尝试重新注册服务");
      //       } else {
      //         log.info("服务重启成功,连接中");
      //       }
      //       // 等到服务就绪再重启
      //       checkService(() => {
      //         loadingWin.webContents.send("java-ready");
      //       });
      //     }
      //   );
      // });
      // TODO
      // stop.stderr.on("data", (data) => {
      //   log.info("stop.bat 执行失败:  " + data.toString());
      //   child_process.exec(
      //     `"${process.cwd()}\\FbxAnalysis.exe" restart`,
      //     (err) => {
      //       if (err) {
      //         log.info("重启服务出错了stderr: " + JSON.stringify(err));
      //         // 重新运行setup批处理 尝试重新注册服务
      //         child_process.spawn("cmd.exe", ["/c", "setup_service.bat"]);
      //         log.info("服务异常 正在尝试重新注册服务");
      //       } else {
      //         log.info("服务重启成功,连接中");
      //       }
      //       // 等到服务就绪再重启
      //       checkService(() => {
      //         loadingWin.webContents.send("java-ready");
      //       });
      //     }
      //   );
      // });
      // TODO
      child_process.exec("cmd.exe /c stop.bat", (err, stdout, stderr) => {
        if (err) {
          log.info('重启服务出错了stderr: ' + JSON.stringify(err));
          return
          log.info("stop.bat 执行失败, " + err);
          log.info("stop.bat 失败日志:" + err.toString());
          return false;
        } else {
          log.info("stdout: " + stdout.toString());
          log.info("java进程被终止,准备重启服务");
          child_process.exec(
            `"${process.cwd()}\\FbxAnalysis.exe" restart`,
            (err) => {
              if (err) {
                log.info("重启服务出错了stderr: " + JSON.stringify(err));
                // 重新运行setup批处理 尝试重新注册服务
                // child_process.spawn("cmd.exe", ["/c", "setup_service.bat"]);
                // try {
                //   child_process.exec(
                //     `${process.cwd()}\\setup_service.bat`,
                //     (err2, stdout2, stderr) => {
                //       log.info("服务异常 正在尝试重新注册服务");
                //       if (err2) {
                //         log.info("setup_service.bat 执行失败, " + err2);
                //         log.info(
                //           "setup_service.bat 失败日志:" + err2.toString()
                //         );
                //       } else {
                //         log.info("setup  stdout: " + stdout2.toString());
                //       }
                //     }
                //   );
                // } catch (error) {
                //   log.info("setup_service.bat 执行失败,  catch " + error);
                // }
                child_process.exec("cmd.exe /c setup_service.bat", (err2, stdout2, stderr) => {
                  log.info("服务异常 正在尝试重新注册服务");
                  if (err2) {
                    log.info("setup_service.bat 执行失败, " + err2);
                    log.info("setup_service.bat 失败日志:" + err2.toString());
                  } else {
                    log.info("setup  stdout: " + stdout2.toString());
                  }
                });
              } else {
                log.info("服务重启成功,连接中");
              }
              // 等到服务就绪再重启
              checkService(() => {
                loadingWin.webContents.send("java-ready");
              });
            }
          );
        }
        log.info('服务重启成功,连接中');
        // 等到服务就绪再重启
        checkService(() => {
          loadingWin.webContents.send('java-ready');
        });
      });
    });
    // log.info('窗口初始化 接口不通 重启服务');
    // child_process.exec(`"${process.cwd()}\\FbxAnalysis.exe" restart`, (err) => {
    //   if (err) {
    //     log.info('重启服务出错了stderr: ' + JSON.stringify(err));
    //     return
    //   }
    //   log.info('服务重启成功,连接中');
    //   // 等到服务就绪再重启
    //   checkService(() => {
    //     loadingWin.webContents.send('java-ready');
    //   });
    // });
  });
}
      // log.info('窗口初始化 接口不通 重启服务');
      // child_process.exec(`"${process.cwd()}\\FbxAnalysis.exe" restart`, (err) => {
      //   if (err) {
      //     log.info('重启服务出错了stderr: ' + JSON.stringify(err));
      //     return
      //   }
      //   log.info('服务重启成功,连接中');
      //   // 等到服务就绪再重启
      //   checkService(() => {
      //     loadingWin.webContents.send('java-ready');
      //   });
      // });
    }
  );
};
const checkService = function (cb) {
  requestPromise.get(appUrl).then(function (response) {
    log.info(response);
    log.info('Server started!');
    cb();
  }, function (response) {
    log.warn(response);
    log.info('Waiting for the server start...');
    setTimeout(function () {
      checkService(cb);
    }, 500)
  })
}
  requestPromise.get(appUrl).then(
    function (response) {
      log.info(response);
      log.info("Server started!");
      cb();
    },
    function (response) {
      log.warn(response);
      log.info("Waiting for the server start...");
      setTimeout(function () {
        checkService(cb);
      }, 500);
    }
  );
};
// const platform = process.platform
let serverProcess
let serverProcess;
if (!isDevelopment) {
  Menu.setApplicationMenu(null);
@@ -146,34 +304,34 @@
      allowRunningInsecureContent: false,
      contextIsolation: true,
      enableRemoteModule: false,
      preload: path.join(__dirname, 'preload.js')
    }
  })
      preload: path.join(__dirname, "preload.js"),
    },
  });
  // remote.enable(win.webContents);
  if (process.env.WEBPACK_DEV_SERVER_URL) {
    // Load the url of the dev server if in development mode
    await win.loadURL(process.env.WEBPACK_DEV_SERVER_URL)
    if (!process.env.IS_TEST) win.webContents.openDevTools()
    await win.loadURL(process.env.WEBPACK_DEV_SERVER_URL);
    if (!process.env.IS_TEST) win.webContents.openDevTools();
  } else {
    createProtocol('app')
    createProtocol("app");
    // Load the index.html when not in development
    win.loadURL('app://./index.html')
    win.loadURL("app://./index.html");
  }
  if (wait) {
    ipcMain.on("java-ready", () => {
      log.info('java-ready!');
      log.info("java-ready!");
      loadingWin.hide();
      loadingWin.close();
      win.show();
    });
  }
  if (cb && 'function' == typeof cb) {
    win.once('ready-to-show', () => {
  if (cb && "function" == typeof cb) {
    win.once("ready-to-show", () => {
      cb(win.webContents);
    })
    });
  }
  // 自动检测更新 软件的第一个实例打开后 为了不影响加载速度 在指定时间后做一次自检
@@ -185,21 +343,24 @@
  //   }, 1000 * 30);
  // });
  win.webContents.session.on('will-download', (e, item) => {
  win.webContents.session.on("will-download", (e, item) => {
    //监听下载结束事件
    item.on('done', (e, state) => {
    item.on("done", (e, state) => {
      //如果窗口还在的话,去掉进度条
      // if (!win.isDestroyed()) {
      //   win.setProgressBar(-1);
      // }
      //下载被取消或中断了
      if (state === 'interrupted') {
        dialog.showErrorBox('下载失败', `文件 ${item.getFilename()} 因为某些原因被中断下载`);
      if (state === "interrupted") {
        dialog.showErrorBox(
          "下载失败",
          `文件 ${item.getFilename()} 因为某些原因被中断下载`
        );
      }
      // 下载成功后打开文件所在文件夹
      if (state === 'completed') {
      if (state === "completed") {
        setTimeout(() => {
          shell.showItemInFolder(item.getSavePath())
          shell.showItemInFolder(item.getSavePath());
        }, 1000);
      }
    });
@@ -207,50 +368,67 @@
}
// Quit when all windows are closed.
app.on('window-all-closed', () => {
app.on("window-all-closed", () => {
  // On macOS it is common for applications and their menu bar
  // to stay active until the user quits explicitly with Cmd + Q
  if (process.platform !== 'darwin') {
    app.quit()
  if (process.platform !== "darwin") {
    app.quit();
  }
})
});
app.on('activate', () => {
app.on("activate", () => {
  // On macOS it's common to re-create a window in the app when the
  // dock icon is clicked and there are no other windows open.
  if (BrowserWindow.getAllWindows().length === 0) createWindow()
})
  if (BrowserWindow.getAllWindows().length === 0) createWindow();
});
// 禁用本地缓存
// app.commandLine.appendSwitch("--disable-http-cache");
app.on('ready', async () => {
  log.info('app ready event');
app.on("ready", async () => {
  log.info("app ready event");
  let cb = undefined;
  if (process.argv[1]) {
    cb = (sender) => {
      log.info('call selected-file..' + process.argv[1]);
      sender.send('selected-file', { filePaths: [process.argv[1]] }, 'MenuList');
    }
      log.info("call selected-file.." + process.argv[1]);
      sender.send(
        "selected-file",
        { filePaths: [process.argv[1]] },
        "MenuList"
      );
    };
  }
  if (isDevelopment) {
    createWindow();
  } else {
    showLoading(createWindow, cb);
  }
})
});
ipcMain.on('open-file-dialog', (event, data) => {
  log.info('open file dialog')
  dialog.showOpenDialog({
    filters: [{ name: 'all', extensions: ['fbx', 'fbxc', 'mcp', 'mch', 'bres', 'alm'] }, { name: 'fbx', extensions: ['fbx', 'fbxc'] }, { name: 'fbs', extensions: ["mcp", "mch"] }, { name: 'res', extensions: ["bres"] }, { name: 'alm', extensions: ["alm"] }],
    properties: ['openFile']
  }).then((files) => {
    // console.log(files, '0000000')
    if (files) {
      event.sender.send('selected-file', files, data);
    }
  })
ipcMain.on("open-file-dialog", (event, data) => {
  log.info("open file dialog");
  dialog
    .showOpenDialog({
      filters: [
        {
          name: "all",
          extensions: ["fbx", "fbxc", "mcp", "mch", "bres", "alm", "bcp", "chr"],
        },
        { name: "fbx", extensions: ["fbx", "fbxc"] },
        { name: "fbs", extensions: ["mcp", "mch"] },
        { name: "res", extensions: ["bres"] },
        { name: "alm", extensions: ["alm"] },
        { name: "bcp", extensions: ["bcp"] },
        { name: "chr", extensions: ["chr"] },
      ],
      properties: ["openFile"],
    })
    .then((files) => {
      // console.log(files, '0000000')
      if (files) {
        event.sender.send("selected-file", files, data);
      }
    });
});
// app.on('will-quit', () => {
@@ -262,15 +440,15 @@
// })
// Exit cleanly on request from parent process in development mode.
if (isDevelopment) {
  if (process.platform === 'win32') {
    process.on('message', (data) => {
      if (data === 'graceful-exit') {
        app.quit()
  if (process.platform === "win32") {
    process.on("message", (data) => {
      if (data === "graceful-exit") {
        app.quit();
      }
    })
    });
  } else {
    process.on('SIGTERM', () => {
      app.quit()
    })
    process.on("SIGTERM", () => {
      app.quit();
    });
  }
}
src/components/battInfo.vue
New file
@@ -0,0 +1,94 @@
<template>
  <div class="container">
    <div class="row">
      <div class="label">标称容量</div>
      <div class="value">{{ info.STD_CAP }}Ah</div>
    </div>
    <div class="row">
      <div class="label">标称内阻</div>
      <div class="value">{{ info.STD_RES }}mΩ</div>
    </div>
    <div class="row">
      <div class="label">电池组数</div>
      <div class="value">{{ info.BattGroupCount }}</div>
    </div>
    <div class="row">
      <div class="label">每组单体数</div>
      <div class="value">{{ info.EachGroupBattCount }}</div>
    </div>
    <div class="row">
      <div class="label">单体标称电压</div>
      <div class="value">{{ info.MonomerVol }}V</div>
    </div>
    <div class="row">
      <div class="label">组端标称电压</div>
      <div class="value">{{ info.GroupVol }}V</div>
    </div>
    <div class="row">
      <div class="label">浮充电压</div>
      <div class="value">{{ info.FloatChargeVol }}V</div>
    </div>
    <div class="row">
      <div class="label">浮充电流阀值</div>
      <div class="value">{{ info.FloatChargeCurr }}A</div>
    </div>
    <div class="row">
      <div class="label">在线电压低阀值</div>
      <div class="value">{{ info.OnlineVolLow }}A</div>
    </div>
    <!-- <div class="row">
      <div class="label">均充电压</div>
      <div class="value">{{ info.JunChargeVol }}V</div>
    </div> -->
  </div>
</template>
<script>
export default {
  name: '',
  props: {
    info: {
      type: Object,
      required: true
    }
  },
  data () {
    return {
    }
  },
  components: {
  },
  methods: {
  },
  mounted () {
  }
}
</script>
<style scoped lang="less">
.row {
  margin-top: 6px;
  display: flex;
  align-items: center;
  font-size: 16px;
  color: #333;
  .label {
    width: 8em;
    text-align: right;
    &::after {
      content: ':',
    }
  }
  .value {
    margin-left: 0.6em;
    font-weight: bold;
    color: #090;
  }
}
</style>
src/components/chargeParams.vue
New file
@@ -0,0 +1,94 @@
<template>
  <div class="container">
    <div class="row">
      <div class="label">小时率</div>
      <div class="value">{{ info.HourRate }}</div>
    </div>
    <div class="row">
      <div class="label">充电电流</div>
      <div class="value">{{ info.ChargeCurr }}A</div>
    </div>
    <div class="row">
      <div class="label">测试容量</div>
      <div class="value">{{ info.ChargeCap }}Ah</div>
    </div>
    <div class="row">
      <div class="label">测试时长</div>
      <div class="value">{{ info.ChargeTime }}分钟</div>
    </div>
    <div class="row">
      <div class="label">组端电压上限</div>
      <div class="value">{{ info.GroupVol_High }}V</div>
    </div>
    <div class="row">
      <div class="label">单体电压上限</div>
      <div class="value">{{ info.MonomerVol_High }}V</div>
    </div>
    <div class="row">
      <div class="label">单体电压上限数量</div>
      <div class="value">{{ info.MonomerHighCount }}</div>
    </div>
    <div class="row">
      <div class="label">组号</div>
      <div class="value">{{ info.BattGroupNum ? info.BattGroupNum : '全组一起测试' }}</div>
    </div>
    <div class="row">
      <div class="label">静置时间</div>
      <div class="value">{{ info.StaticTime }}分钟</div>
    </div>
    <div class="row">
      <div class="label">充电测试次数</div>
      <div class="value">{{ info.ChargeTestCount }}</div>
    </div>
  </div>
</template>
<script>
export default {
  name: '',
  props: {
    info: {
      type: Object,
      required: true
    }
  },
  data () {
    return {
    }
  },
  components: {
  },
  methods: {
  },
  mounted () {
  }
}
</script>
<style scoped lang="less">
.row {
  margin-top: 6px;
  display: flex;
  align-items: center;
  font-size: 16px;
  color: #333;
  .label {
    width: 9em;
    text-align: right;
    &::after {
      content: ':',
    }
  }
  .value {
    margin-left: 0.6em;
    font-weight: bold;
    color: #090;
  }
}
</style>
src/components/myCharts/BaseChart.vue
@@ -5,7 +5,7 @@
    @dblclick="fullScreen"
  >
    <div class="e-chart-container">
      <div class="e-chart" :id="id" ref="chart"></div>
      <div class="e-chart"  ref="chart"></div>
    </div>
    <div class="export-chart-wrapper">
      <div class="export-chart" ref="exportChart"></div>
@@ -25,10 +25,10 @@
  chart: "",
  exportChart: "",
  props: {
    id: {
      type: String,
      required: true,
    },
    // id: {
    //   type: String,
    //   required: true,
    // },
  },
  data() {
    return {
@@ -132,8 +132,9 @@
  },
  mounted() {
    this.$options.chart = ECharts.init(this.$refs.chart, "transparent");
    // 将图表添加到图表管理
    this.$G.chartManage.set(this.id, this.$options.chart);
    this.$G.chartManage.set(this.$options.chart.id, this.$options.chart);
    this.$options.exportChart = ECharts.init(
      this.$refs.exportChart,
      "transparent"
src/components/myCharts/NormalLines.vue
@@ -9,10 +9,10 @@
    unit: {
      type: String,
      default: "",
    }
    },
  },
  data() {
    return {}
    return {};
  },
  methods: {
    setData(data) {
@@ -20,45 +20,51 @@
      this.setOption(option);
    },
    getOption(data) {
      let xData = data && data.xData?data.xData: [];
      let series = data && data.series?data.series:[{
        type: "line",
        data: []
      }];
      let unit = (data ? data.unit : '') || this.unit;
      let xData = data && data.xData ? data.xData : [];
      let series =
        data && data.series
          ? data.series
          : [
              {
                type: "line",
                data: [],
              },
            ];
      let unit = (data ? data.unit : "") || this.unit;
      return {
        animation: false,
        tooltip:{
          trigger: 'axis',
        tooltip: {
          // confine: true,
          trigger: "axis",
          appendToBody: true,
        },
        grid: {
          top: "28px",
          left: '1%',
          right: '32px',
          bottom: '8px',
          containLabel: true
          left: "1%",
          right: "32px",
          bottom: "8px",
          containLabel: true,
        },
        xAxis: {
          type: 'category',
          type: "category",
          boundaryGap: 0,
          axisLine: {
            onZero: false
            onZero: false,
          },
          data: xData
          data: xData,
        },
        yAxis: {
          type: 'value',
          name: unit?'Y('+unit+')':'Y',
          max: series[0].data.length == 0?1:getYMax,
          min: series[0].data.length == 0?0:getYMin,
          type: "value",
          name: unit ? "Y(" + unit + ")" : "Y",
          max: series[0].data.length == 0 ? 1 : getYMax,
          min: series[0].data.length == 0 ? 0 : getYMin,
        },
        series: series,
      }
    }
      };
    },
  },
  mounted() {
    this.setData();
  }
}
</script>
  },
};
</script>
src/components/testInfo.vue
New file
@@ -0,0 +1,68 @@
<template>
  <div class="container">
    <div class="row">
      <div class="label">测试开始时间</div>
      <div class="value">{{ info.StartDT.dateTime }}</div>
    </div>
    <div class="row">
      <div class="label">测试结束时间</div>
      <div class="value">{{ info.StopDT.dateTime }}</div>
    </div>
    <div class="row">
      <div class="label">测试时长</div>
      <div class="value">{{ testTimeLong }}</div>
    </div>
  </div>
</template>
<script>
export default {
  name: "",
  props: {
    info: {
      type: Object,
      required: true,
    },
  },
  data() {
    return {};
  },
  computed: {
    testTimeLong() {
      let testtime = this.info.Test_Time;
      let hour = testtime.hour > 9 ? testtime.hour : "0" + testtime.hour;
      let minute =
        testtime.minute > 9 ? testtime.minute : "0" + testtime.minute;
      let second =
        testtime.second > 9 ? testtime.second : "0" + testtime.second;
      return "" + hour + ":" + minute + ":" + second;
    },
  },
  components: {},
  methods: {},
  mounted() {},
};
</script>
<style scoped lang="less">
.row {
  margin-top: 6px;
  display: flex;
  align-items: center;
  font-size: 16px;
  color: #333;
  .label {
    width: 8em;
    text-align: right;
    &::after {
      content: ":";
    }
  }
  .value {
    margin-left: 0.6em;
    font-weight: bold;
    color: #090;
  }
}
</style>
src/components/testParams.vue
New file
@@ -0,0 +1,106 @@
<template>
  <div class="container">
    <div class="row">
      <div class="label">小时率</div>
      <div class="value">{{ info.HourRate }}</div>
    </div>
    <div class="row">
      <div class="label">放电电流</div>
      <div class="value">{{ info.DisCurr }}A</div>
    </div>
    <div class="row">
      <div class="label">测试容量</div>
      <div class="value">{{ info.DisCap }}Ah</div>
    </div>
    <div class="row">
      <div class="label">测试时长</div>
      <div class="value">{{ info.DisTime }}分钟</div>
    </div>
    <div class="row">
      <div class="label">组端下限</div>
      <div class="value">{{ info.GroupVol_LOW }}V</div>
    </div>
    <div class="row">
      <div class="label">单体电压下限</div>
      <div class="value">{{ info.MonomerVol_LOW }}V</div>
    </div>
    <div class="row">
      <div class="label">单体下限数量</div>
      <div class="value">{{ info.MonomerLowCount }}</div>
    </div>
    <div class="row">
      <div class="label">组号</div>
      <div class="value">{{ info.BattGroupNum ? info.BattGroupNum : '全组一起测试' }}</div>
    </div>
    <div class="row">
      <div class="label">静置时间</div>
      <div class="value">{{ info.StaticTime }}分钟</div>
    </div>
    <div class="row">
      <div class="label">放电测试试次数</div>
      <div class="value">{{ info.DisTestCount }}</div>
    </div>
    <div class="row">
      <div class="label">升压上限</div>
      <div class="value">{{ info.DCVolHighLimit }}V</div>
    </div>
    <div class="row">
      <div class="label">充电电流</div>
      <div class="value">{{ info.ChargeCurrSet }}A</div>
    </div>
    <div class="row">
      <div class="label">单体温度上限</div>
      <div class="value">{{ info.MonomerTmp_High }}℃</div>
    </div>
  </div>
</template>
<script>
export default {
  name: '',
  props: {
    info: {
      type: Object,
      required: true
    }
  },
  data () {
    return {
    }
  },
  components: {
  },
  methods: {
  },
  mounted () {
  }
}
</script>
<style scoped lang="less">
.row {
  margin-top: 6px;
  display: flex;
  align-items: center;
  font-size: 16px;
  color: #333;
  .label {
    width: 8em;
    text-align: right;
    &::after {
      content: ':',
    }
  }
  .value {
    margin-left: 0.6em;
    font-weight: bold;
    color: #090;
  }
}
</style>
src/router/routes.js
@@ -28,10 +28,22 @@
    meta: {},
    component: () => import('@/views/result-res')
  },
  // {
  //   path: '/result',
  //   name: 'result',
  //   meta: {},
  //   component: () => import('@/views/result')
  // }
  {
    path: '/result-alm',
    name: 'result-alm',
    meta: {},
    component: () => import('@/views/result-alm')
  },
  {
    path: '/result-bcp',
    name: 'result-bcp',
    meta: {},
    component: () => import('@/views/result-bcp')
  },
  {
    path: '/result-chr',
    name: 'result-chr',
    meta: {},
    component: () => import('@/views/result-chr')
  }
];
src/views/result-alm.vue
New file
@@ -0,0 +1,230 @@
<template>
  <flex-layout>
    <div class="content_header" slot="header">
      <three-btn @click="goSelect">选择文件</three-btn>
      <three-btn @click="exportExcel">导出</three-btn>
      <div class="summary">
        <div class="summary-item">
          测试类型:<span>内阻测试</span>
        </div>
      </div>
    </div>
    <div class="main">
      开发中。。。
    </div>
    <!-- 导出用的图表 可变的那组图 -->
    <div class="hideContain">
      <normal-lines id="hideChart" ref="hideChart"></normal-lines>
    </div>
  </flex-layout>
</template>
<script>
import NormalLines from "@/components/myCharts/NormalLines";
import FlexBox from "@/components/FlexBox";
import ThreeBtn from "@/components/ThreeBtn";
import axios from "@/assets/js/axios";
export default {
  name: "",
  components: {
    NormalLines,
    FlexBox,
    ThreeBtn,
  },
  data() {
    let info = this.$route.query.data;
    let { resDatas } = info;
    let lastRecord = resDatas[resDatas.length - 1];
    return {
      info,
      testCapOption: null,
      optsTitle: '测试容量折线图'
    };
  },
  methods: {
    formatData() {
      let { resDatas } = this.info;
      // console.log(resDatas, resDatasStart, resDatasStop, "=====data?");
      let monCount = resDatas[0] ? resDatas[0].battSum : 0;
      let times = [],
        vol = [],
        res = [],
        temp = [];
      for (let i = 0, j = monCount; i < j; i++) {
        vol[i] = {
          name: "#" + (i + 1) + "电压",
          type: "line",
          symbolSize: 0,
          sampling: "average",
          data: [],
        };
        res[i] = {
          name: "#" + (i + 1) + "内阻",
          type: "line",
          symbolSize: 0,
          sampling: "average",
          data: [],
        };
        temp[i] = {
          name: "#" + (i + 1) + "温度",
          type: "line",
          symbolSize: 0,
          sampling: "average",
          data: [],
        };
      }
      for (let i = 0, j = resDatas.length; i < j; i++) {
        let item = resDatas[i];
        let testtime = item.data_Time;
        // 时间
        times.push(testtime);
        for (let m = 0, n = monCount; m < n; m++) {
          vol[m].data.push(item.monomerVol[m]);
          res[m].data.push(item.monomerRes[m]);
          temp[m].data.push(item.monomerTemp[m]);
        }
      }
      let volOption = {
        xData: times,
        series: vol,
      };
      let resOption = {
        xData: times,
        series: res,
      };
      let tempOption = {
        xData: times,
        series: temp,
      };
      this.$refs.vol.setData(volOption);
      this.$refs.res.setData(resOption);
      this.$refs.temp.setData(tempOption);
      // 建立联动
      this.$G.chartManage.connect(["vol", "res", "temp"]);
    },
    // changeChartType(v) {
    //   let label = this.chartTypes.filter((val) => {
    //     return val.value == v;
    //   })[0].label;
    //   this.optsTitle = label + "折线图";
    //   this.$refs.other.setData(this[v + "Option"]);
    // },
    goSelect() {
      this.$router.push({ path: "/selectFile", query: { reselect: 1 } });
    },
    // 导出报表
    exportExcel() {
      let params = {
        filePath: this.info.filePath,
        vol_echart: this.$refs.vol.getDataURL(),
        res_echart: this.$refs.res.getDataURL(),
        tmp_echart: this.$refs.temp.getDataURL(),
      };
      // if (this.capTest) {
      //   params.cap_echart = o_pic.testCap;
      // }
      let baseURL = axios.defaults.baseURL;
      baseURL = baseURL ? baseURL : "";
      var actionUrl = baseURL + "export";
      this.construtFormSubmit(actionUrl, params);
    },
    construtFormSubmit(actionUrl, parms) {
      var form = document.createElement("form");
      form.id = "specialGraph";
      form.style.display = "none";
      form.action = actionUrl;
      form.enctype = "multipart/form-data";
      form.method = "post";
      document.body.appendChild(form);
      for (var key in parms) {
        var input = document.createElement("input");
        input.type = "hidden";
        input.name = key;
        input.value = parms[key];
        form.appendChild(input);
      }
      form.submit();
      document.body.removeChild(form);
    },
  },
  mounted() {
    console.log(this.info, this);
    if (!this.info || !this.info.resDatas) {
      this.$router.push("/selectFile");
    } else {
      this.formatData();
    }
  },
};
</script>
<style scoped>
.main {
  height: 100%;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
}
.flex-row {
  flex: 1;
  position: relative;
}
.item-inner,
.flex-row-inner {
  position: absolute;
  left: 0;
  top: 0;
  right: 0;
  bottom: 0;
}
.contain-flex-column {
  display: flex;
  flex-direction: row;
}
.item {
  background: #0d43a7;
  flex: 1;
  position: relative;
}
.content_header {
  padding: 8px 8px 12px;
  display: flex;
  color: #fff;
  align-items: center;
}
.summary {
  display: flex;
  flex-wrap: wrap;
}
.summary-item {
  margin-left: 1em;
}
.summary-item span {
  color: #ff0;
}
>>> .three-btn {
  flex-shrink: 0;
}
>>> .three-btn + .three-btn {
  margin-left: 8px;
}
.item + .item {
  margin-left: 8px;
}
.flex-row + .flex-row {
  margin-top: 8px;
}
.hideContain {
  position: absolute;
  width: 0;
  height: 0;
  display: none;
}
</style>
src/views/result-bcp.vue
New file
@@ -0,0 +1,415 @@
<template>
  <flex-layout>
    <div class="content_header" slot="header">
      <three-btn @click="goSelect">选择文件</three-btn>
      <three-btn @click="exportExcel">导出</three-btn>
      <three-btn @click="showBattInfo">电池组信息</three-btn>
      <three-btn @click="showTestParam">测试参数</three-btn>
      <three-btn @click="showTestInfo">测试信息</three-btn>
    </div>
    <div class="main">
      <div class="flex-row">
        <div class="flex-row-inner contain-flex-column">
          <div class="item">
            <flex-box
              class="item-inner"
              size="mini"
              title="组端/在线电压折线图"
            >
              <normal-lines
                id="groupVol"
                ref="groupVol"
                unit="V"
              ></normal-lines>
            </flex-box>
          </div>
          <div class="item">
            <flex-box class="item-inner" size="mini" title="电池电流折线图">
              <normal-lines
                id="groupCurr"
                ref="groupCurr"
                unit="A"
              ></normal-lines>
            </flex-box>
          </div>
        </div>
      </div>
      <div class="flex-row">
        <div class="flex-row-inner contain-flex-column">
          <div class="item">
            <flex-box class="item-inner" size="mini" title="单体电压折线图">
              <normal-lines ref="vol" unit="V"></normal-lines>
            </flex-box>
          </div>
          <div class="item">
            <flex-box class="item-inner" size="mini" :title="optsTitle">
              <div slot="tools" class="chart-tools-wrapper">
                <el-select
                  v-model="chartType"
                  size="mini"
                  @change="changeChartType"
                >
                  <el-option
                    v-for="item in chartTypes"
                    :key="item.value"
                    :label="item.label"
                    :value="item.value"
                  ></el-option>
                </el-select>
              </div>
              <normal-lines id="other" ref="other"></normal-lines>
            </flex-box>
          </div>
        </div>
      </div>
    </div>
    <!-- 导出用的图表 可变的那组图 -->
    <div class="hideContain">
      <normal-lines id="hideChart" ref="hideChart"></normal-lines>
    </div>
    <el-dialog
      title="电池组信息"
      :visible.sync="battInfoVisible"
      :close-on-click-modal="false"
      top="80px"
      width="400px"
      class="dialog-center dialog-result"
      :modal-append-to-body="false"
    >
      <batt-info v-if="battInfoVisible" :info="battParam"></batt-info>
    </el-dialog>
    <el-dialog
      title="测试参数"
      :visible.sync="testParamVisible"
      :close-on-click-modal="false"
      top="80px"
      width="400px"
      class="dialog-center dialog-result"
      :modal-append-to-body="false"
    >
      <test-params v-if="testParamVisible" :info="testParam"></test-params>
    </el-dialog>
    <el-dialog
      title="测试信息"
      :visible.sync="testInfoVisible"
      :close-on-click-modal="false"
      top="80px"
      width="400px"
      class="dialog-center dialog-result"
      :modal-append-to-body="false"
    >
      <test-info v-if="testInfoVisible" :info="capState"></test-info>
    </el-dialog>
  </flex-layout>
</template>
<script>
import FlexBox from "@/components/FlexBox";
import ThreeBtn from "@/components/ThreeBtn";
import NormalLines from "@/components/myCharts/NormalLines";
import ECharts from "echarts/lib/echarts";
import battInfo from "@/components/battInfo";
import TestParams from "@/components/testParams.vue";
import testInfo from "@/components/testInfo";
import axios from "@/assets/js/axios";
export default {
  name: "",
  components: {
    FlexBox,
    ThreeBtn,
    NormalLines,
    battInfo,
    TestParams,
    testInfo,
  },
  data() {
    let info = this.$route.query.data;
    let { battParam, dischargeParam: testParam, capState } = info;
    return {
      info,
      battInfoVisible: false,
      testParamVisible: false,
      testInfoVisible: false,
      testCapOption: null,
      tempOption: null,
      battParam,
      testParam,
      capState,
      optsTitle: "测试容量折线图",
      chartType: "testCap",
      chartTypes: [
        {
          label: "测试容量",
          value: "testCap",
        },
        {
          label: "电池温度",
          value: "temp",
        },
      ],
    };
  },
  methods: {
    showBattInfo() {
      this.battInfoVisible = true;
    },
    showTestParam() {
      this.testParamVisible = true;
    },
    showTestInfo() {
      this.testInfoVisible = true;
    },
    formatData() {
      let { battParam, fbsDatas } = this.info;
      let battGroupCount = battParam.BattGroupCount;
      let battMonCount = battParam.EachGroupBattCount;
      let times = [],
        groupVol = [],
        onlineVol = [],
        groupCurr = [],
        vol = [],
        cap = [],
        temp = [];
      let groupVolSeries = [
        {
          name: "在线电压",
          type: "line",
          symbolSize: 0,
          sampling: "average",
          data: onlineVol,
        },
        {
          name: "组端电压",
          type: "line",
          symbolSize: 0,
          sampling: "average",
          data: groupVol,
        },
      ];
      let currSeries = [];
      let tempSeries = [];
      let capSeries = [];
      // let volSeries = [];
      currSeries.push({
        name: `电流`,
        type: "line",
        symbolSize: 0,
        sampling: "average",
        data: groupCurr,
      });
      tempSeries.push({
        name: `温度`,
        type: "line",
        symbolSize: 0,
        sampling: "average",
        data: temp,
      });
      capSeries.push({
        name: `测试容量`,
        type: "line",
        symbolSize: 0,
        sampling: "average",
        data: cap,
      });
      // volSeries.push({
      //   name: `单体电压`,
      //   type: "line",
      //   symbolSize: 0,
      //   sampling: "average",
      //   data: vol,
      // });
      for (let i = 0, j = battMonCount; i < j; i++) {
        vol[i] = {
          name: "#" + (i + 1) + "电压",
          type: "line",
          symbolSize: 0,
          sampling: "average",
          data: [],
        };
      }
      for (let i = 0, j = fbsDatas.length; i < j; i++) {
        let item = fbsDatas[i];
        let testtime = item.testTime;
        let hour = testtime.hour > 9 ? testtime.hour : "0" + testtime.hour;
        let minute =
          testtime.minute > 9 ? testtime.minute : "0" + testtime.minute;
        let second =
          testtime.second > 9 ? testtime.second : "0" + testtime.second;
        let time = "" + hour + ":" + minute + ":" + second;
        // 时间
        times.push(time);
        for (let m = 0, n = battMonCount; m < n; m++) {
          vol[m].data.push(item.monVol[m]);
        }
        groupVol.push(item.groupVol);
        onlineVol.push(item.onlineVol);
        groupCurr.push(item.battCurr);
        cap.push(item.battCap);
        temp.push(item.battTemp);
      }
      let groupVolOption = {
        xData: times,
        series: groupVolSeries,
      };
      let currOption = {
        xData: times,
        series: currSeries,
      };
      let volOption = {
        xData: times,
        series: vol,
      };
      let tempOption = {
        unit: "℃",
        xData: times,
        series: tempSeries,
      };
      let capOption = {
        xData: times,
        series: capSeries,
      };
      this.testCapOption = capOption;
      this.tempOption = tempOption;
      // debugger;
      this.$refs.groupVol.setData(groupVolOption);
      this.$refs.groupCurr.setData(currOption);
      this.$refs.vol.setData(volOption);
      this.$refs.other.setData(capOption);
      // this.$refs.temp.setData(tempOption);
      // 建立联动
      this.$G.chartManage.connect(
        ["groupVol", "groupCurr", "vol", "other"].map(
          (v) => this.$refs[v].$options.chart.id
        )
      );
    },
    changeChartType(v) {
      let label = this.chartTypes.filter((val) => {
        return val.value == v;
      })[0].label;
      this.optsTitle = label + "折线图";
      this.$refs.other.setData(this[v + "Option"]);
    },
    goSelect() {
      this.$router.push({ path: "/selectFile", query: { reselect: 1 } });
    },
    // 导出报表
    exportExcel() {
      // 容量折线图
      let arr = ["temp"];
      let o_pic = {};
      arr.forEach((v) => {
        let option = this[v + "Option"];
        this.$refs.hideChart.setData(option);
        o_pic[v] = this.$refs.hideChart.getDataURL();
      });
      let params = {
        filePath: this.info.filePath,
        groupVol_echart: this.$refs.groupVol.getDataURL(),
        curr_echart: this.$refs.groupCurr.getDataURL(),
        vol_echart: this.$refs.vol.getDataURL(),
        cap_echart: this.$refs.other.getDataURL(),
        tmp_echart: o_pic.temp,
      };
      let baseURL = axios.defaults.baseURL;
      baseURL = baseURL ? baseURL : "";
      var actionUrl = baseURL + "export";
      this.construtFormSubmit(actionUrl, params);
    },
    construtFormSubmit(actionUrl, params) {
      var form = document.createElement("form");
      form.id = "specialGraph";
      form.style.display = "none";
      form.action = actionUrl;
      form.enctype = "multipart/form-data";
      form.method = "post";
      document.body.appendChild(form);
      for (var key in params) {
        var input = document.createElement("input");
        input.type = "hidden";
        input.name = key;
        input.value = params[key];
        form.appendChild(input);
      }
      form.submit();
      document.body.removeChild(form);
    },
  },
  mounted() {
    console.log(this.info, this);
    if (!this.info || !this.info.fbsDatas) {
      this.$router.push("/selectFile");
    } else {
      this.formatData();
    }
  },
};
</script>
<style scoped lang="less">
/deep/ .three-btn {
  flex-shrink: 0;
}
/deep/ .three-btn + .three-btn {
  margin-left: 8px;
}
.main {
  height: 100%;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
}
.content_header {
  padding: 8px 8px 12px;
  display: flex;
  color: #fff;
  align-items: center;
}
.flex-row {
  flex: 1;
  position: relative;
}
.item-inner,
.flex-row-inner {
  position: absolute;
  left: 0;
  top: 0;
  right: 0;
  bottom: 0;
}
.contain-flex-column {
  display: flex;
  flex-direction: row;
}
.item {
  background: #0d43a7;
  flex: 1;
  position: relative;
}
.item + .item {
  margin-left: 8px;
}
.flex-row + .flex-row {
  margin-top: 8px;
}
</style>
src/views/result-chr.vue
New file
@@ -0,0 +1,413 @@
<template>
  <flex-layout>
    <div class="content_header" slot="header">
      <three-btn @click="goSelect">选择文件</three-btn>
      <three-btn @click="exportExcel">导出</three-btn>
      <three-btn @click="showBattInfo">电池组信息</three-btn>
      <three-btn @click="showTestParam">测试参数</three-btn>
      <three-btn @click="showTestInfo">测试信息</three-btn>
    </div>
    <div class="main">
      <div class="flex-row">
        <div class="flex-row-inner contain-flex-column">
          <div class="item">
            <flex-box
              class="item-inner"
              size="mini"
              title="组端/在线电压折线图"
            >
              <normal-lines
                id="groupVol"
                ref="groupVol"
                unit="V"
              ></normal-lines>
            </flex-box>
          </div>
          <div class="item">
            <flex-box class="item-inner" size="mini" title="电池电流折线图">
              <normal-lines
                id="groupCurr"
                ref="groupCurr"
                unit="A"
              ></normal-lines>
            </flex-box>
          </div>
        </div>
      </div>
      <div class="flex-row">
        <div class="flex-row-inner contain-flex-column">
          <div class="item">
            <flex-box class="item-inner" size="mini" title="单体电压折线图">
              <normal-lines ref="vol" unit="V"></normal-lines>
            </flex-box>
          </div>
          <div class="item">
            <flex-box class="item-inner" size="mini" :title="optsTitle">
              <div slot="tools" class="chart-tools-wrapper">
                <el-select
                  v-model="chartType"
                  size="mini"
                  @change="changeChartType"
                >
                  <el-option
                    v-for="item in chartTypes"
                    :key="item.value"
                    :label="item.label"
                    :value="item.value"
                  ></el-option>
                </el-select>
              </div>
              <normal-lines id="other" ref="other"></normal-lines>
            </flex-box>
          </div>
        </div>
      </div>
    </div>
     <!-- 导出用的图表 可变的那组图 -->
    <div class="hideContain">
      <normal-lines id="hideChart" ref="hideChart"></normal-lines>
    </div>
    <el-dialog
      title="电池组信息"
      :visible.sync="battInfoVisible"
      :close-on-click-modal="false"
      top="80px"
      width="400px"
      class="dialog-center dialog-result"
      :modal-append-to-body="false"
    >
      <batt-info v-if="battInfoVisible" :info="battParam"></batt-info>
    </el-dialog>
    <el-dialog
      title="测试参数"
      :visible.sync="testParamVisible"
      :close-on-click-modal="false"
      top="80px"
      width="400px"
      class="dialog-center dialog-result"
      :modal-append-to-body="false"
    >
      <test-params v-if="testParamVisible" :info="chargeParam"></test-params>
    </el-dialog>
    <el-dialog
      title="测试信息"
      :visible.sync="testInfoVisible"
      :close-on-click-modal="false"
      top="80px"
      width="400px"
      class="dialog-center dialog-result"
      :modal-append-to-body="false"
    >
      <test-info v-if="testInfoVisible" :info="chargeState"></test-info>
    </el-dialog>
  </flex-layout>
</template>
<script>
import FlexBox from "@/components/FlexBox";
import ThreeBtn from "@/components/ThreeBtn";
import NormalLines from "@/components/myCharts/NormalLines";
import ECharts from "echarts/lib/echarts";
import battInfo from "@/components/battInfo";
import TestParams from "@/components/chargeParams.vue";
import testInfo from "@/components/testInfo";
import axios from "@/assets/js/axios";
export default {
  name: "",
  components: {
    FlexBox,
    ThreeBtn,
    NormalLines,
    battInfo,
    TestParams,
    testInfo,
  },
  data() {
    let info = this.$route.query.data;
    let { battParam, chargeParam, charState: chargeState } = info;
    return {
      info,
      battInfoVisible: false,
      testParamVisible: false,
      testInfoVisible: false,
      battParam,
      chargeParam,
      chargeState,
      optsTitle: "测试容量折线图",
      chartType: "testCap",
      chartTypes: [
        {
          label: "测试容量",
          value: "testCap",
        },
        {
          label: "电池温度",
          value: "temp",
        },
      ],
    };
  },
  methods: {
    showBattInfo() {
      this.battInfoVisible = true;
    },
    showTestParam() {
      this.testParamVisible = true;
    },
    showTestInfo() {
      this.testInfoVisible = true;
    },
    formatData() {
      let { battParam, fbsDatas } = this.info;
      let battGroupCount = battParam.BattGroupCount;
      let battMonCount = battParam.EachGroupBattCount;
      let times = [],
        groupVol = [],
        onlineVol = [],
        groupCurr = [],
        vol = [],
        cap = [],
        temp = [];
      let groupVolSeries = [
        {
          name: "在线电压",
          type: "line",
          symbolSize: 0,
          sampling: "average",
          data: onlineVol,
        },
        {
          name: "组端电压",
          type: "line",
          symbolSize: 0,
          sampling: "average",
          data: groupVol,
        },
      ];
      let currSeries = [];
      let tempSeries = [];
      let capSeries = [];
      // let volSeries = [];
      currSeries.push({
        name: `电流`,
        type: "line",
        symbolSize: 0,
        sampling: "average",
        data: groupCurr,
      });
      tempSeries.push({
        name: `温度`,
        type: "line",
        symbolSize: 0,
        sampling: "average",
        data: temp,
      });
      capSeries.push({
        name: `测试容量`,
        type: "line",
        symbolSize: 0,
        sampling: "average",
        data: cap,
      });
      // volSeries.push({
      //   name: `单体电压`,
      //   type: "line",
      //   symbolSize: 0,
      //   sampling: "average",
      //   data: vol,
      // });
      for (let i = 0, j = battMonCount; i < j; i++) {
        vol[i] = {
          name: "#" + (i + 1) + "电压",
          type: "line",
          symbolSize: 0,
          sampling: "average",
          data: [],
        };
      }
      for (let i = 0, j = fbsDatas.length; i < j; i++) {
        let item = fbsDatas[i];
        let testtime = item.testTime;
        let hour = testtime.hour > 9 ? testtime.hour : "0" + testtime.hour;
        let minute =
          testtime.minute > 9 ? testtime.minute : "0" + testtime.minute;
        let second =
          testtime.second > 9 ? testtime.second : "0" + testtime.second;
        let time = "" + hour + ":" + minute + ":" + second;
        // 时间
        times.push(time);
        for (let m = 0, n = battMonCount; m < n; m++) {
          vol[m].data.push(item.monVol[m]);
        }
        groupVol.push(item.groupVol);
        onlineVol.push(item.onlineVol);
        groupCurr.push(item.battCurr);
        cap.push(item.battCap);
        temp.push(item.battTemp);
      }
      let groupVolOption = {
        xData: times,
        series: groupVolSeries,
      };
      let currOption = {
        xData: times,
        series: currSeries,
      };
      let volOption = {
        xData: times,
        series: vol,
      };
      let tempOption = {
        unit: "℃",
        xData: times,
        series: tempSeries,
      };
      let capOption = {
        xData: times,
        series: capSeries,
      };
      this.testCapOption = capOption;
      this.tempOption = tempOption;
      // debugger;
      this.$refs.groupVol.setData(groupVolOption);
      this.$refs.groupCurr.setData(currOption);
      this.$refs.vol.setData(volOption);
      this.$refs.other.setData(capOption);
      // this.$refs.temp.setData(tempOption);
      // 建立联动
      this.$G.chartManage.connect(
        ["groupVol", "groupCurr", "vol", "other"].map(
          (v) => this.$refs[v].$options.chart.id
        )
      );
    },
    changeChartType(v) {
      let label = this.chartTypes.filter((val) => {
        return val.value == v;
      })[0].label;
      this.optsTitle = label + "折线图";
      this.$refs.other.setData(this[v + "Option"]);
    },
    goSelect() {
      this.$router.push({ path: "/selectFile", query: { reselect: 1 } });
    },
    // 导出报表
    exportExcel() {
      // 容量折线图
      let arr = ["temp"];
      let o_pic = {};
      arr.forEach((v) => {
        let option = this[v + "Option"];
        this.$refs.hideChart.setData(option);
        o_pic[v] = this.$refs.hideChart.getDataURL();
      });
      let params = {
        filePath: this.info.filePath,
        groupVol_echart: this.$refs.groupVol.getDataURL(),
        curr_echart: this.$refs.groupCurr.getDataURL(),
        vol_echart: this.$refs.vol.getDataURL(),
        cap_echart: this.$refs.other.getDataURL(),
        tmp_echart: o_pic.temp,
      };
      let baseURL = axios.defaults.baseURL;
      baseURL = baseURL ? baseURL : "";
      var actionUrl = baseURL + "export";
      this.construtFormSubmit(actionUrl, params);
    },
    construtFormSubmit(actionUrl, params) {
      var form = document.createElement("form");
      form.id = "specialGraph";
      form.style.display = "none";
      form.action = actionUrl;
      form.enctype = "multipart/form-data";
      form.method = "post";
      document.body.appendChild(form);
      for (var key in params) {
        var input = document.createElement("input");
        input.type = "hidden";
        input.name = key;
        input.value = params[key];
        form.appendChild(input);
      }
      form.submit();
      document.body.removeChild(form);
    },
  },
  mounted() {
    console.log(this.info, this);
    if (!this.info || !this.info.fbsDatas) {
      this.$router.push("/selectFile");
    } else {
      this.formatData();
    }
  },
};
</script>
<style scoped lang="less">
/deep/ .three-btn {
  flex-shrink: 0;
}
/deep/ .three-btn + .three-btn {
  margin-left: 8px;
}
.main {
  height: 100%;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
}
.content_header {
  padding: 8px 8px 12px;
  display: flex;
  color: #fff;
  align-items: center;
}
.flex-row {
  flex: 1;
  position: relative;
}
.item-inner,
.flex-row-inner {
  position: absolute;
  left: 0;
  top: 0;
  right: 0;
  bottom: 0;
}
.contain-flex-column {
  display: flex;
  flex-direction: row;
}
.item {
  background: #0d43a7;
  flex: 1;
  position: relative;
}
.item + .item {
  margin-left: 8px;
}
.flex-row + .flex-row {
  margin-top: 8px;
}
</style>
src/views/result.vue
@@ -297,7 +297,11 @@
      this.$refs.vol.setData(volOption);
      this.$refs.other.setData(this.capTest ? testCapOption : tempEnviOption);
      // 建立联动
      this.$G.chartManage.connect(["groupVol", "groupCurr", "vol", "other"]);
      this.$G.chartManage.connect(
        ["groupVol", "groupCurr", "vol", "other"].map(
          (v) => this.$refs[v].$options.chart.id
        )
      );
    },
    changeChartType(v) {
      let label = this.chartTypes.filter((val) => {
@@ -430,4 +434,4 @@
  height: 0;
  display: none;
}
</style>
</style>
src/views/selectFile.vue
@@ -5,7 +5,9 @@
        将文件拖到此处,或点击此处选择文件
      </div>
    </div>
    <div class="upload__tip" slot="tip">只能解析.fbx .fbxc .mcp .mch .bres .alm文件</div>
    <div class="upload__tip" slot="tip">
      只能解析.fbx .fbxc .mcp .mch .bres .alm .bcp .chr 文件
    </div>
  </div>
</template>
@@ -38,7 +40,7 @@
      let arr = url.split(".");
      let type = arr.length > 1 ? arr[arr.length - 1].toLowerCase() : "";
      // 支持的类型
      let allowList = ["fbx", "fbxc", "mcp", "mch", "bres", "alm"];
      let allowList = ["fbx", "fbxc", "mcp", "mch", "bres", "alm", "bcp", "chr"];
      if (!allowList.some((v) => v == type)) {
        this.$layer.msg("文件类型错误");
@@ -59,6 +61,14 @@
          break;
        case "alm":
          suffixes = "alm";
          break;
        // 放电
        case "bcp":
          suffixes = "bcp";
          break;
        // 充电
        case "chr":
          suffixes = "chr";
          break;
      }
      let loading = this.$layer.loading(1);
@@ -107,16 +117,20 @@
      }
    },
    initEvents() {
      console.log('initEvents')
      window.api.receive("selected-file", (path, data) => {
        console.log(path, data, "selected-file");
        if (data && data == "selectFile") {
          let url = path.filePaths[0];
          if (url) {
            this.loadFile(path.filePaths[0]);
      console.log("initEvents");
      window.api.receive(
        "selected-file",
        (path, data) => {
          console.log(path, data, "selected-file");
          if (data && data == "selectFile") {
            let url = path.filePaths[0];
            if (url) {
              this.loadFile(path.filePaths[0]);
            }
          }
        }
      }, true);
        },
        true
      );
    },
    selectFile() {
      // console.log("openfile");
@@ -173,4 +187,4 @@
// >>> .el-upload__tip {
//   color: #fff;
// }
</style>
</style>
version.nsh
New file
@@ -0,0 +1 @@
!define VERSION "0.1.3"
vue.config.js
@@ -1,48 +1,46 @@
const path = require('path');
const path = require("path");
const json = require('./package.json');
const { version } = json;
function resolve(dir) {
  return path.join(__dirname, dir);
}
module.exports = {
  publicPath: './',
  publicPath: "./",
  devServer: {
    // can be overwritten by process.env.HOST
    host: '0.0.0.0',
    port: 8081
    host: "0.0.0.0",
    port: 8081,
  },
  pluginOptions:{
    electronBuilder:{
      preload:'src/preload.js',
  pluginOptions: {
    electronBuilder: {
      preload: "src/preload.js",
      builderOptions: {
        extraResources: [
          {
            from: "./public/runtime",
            to: "./runtime"
            to: "./runtime",
          },
          {
            from: "./public/app_x64.exe",
            to: "./app_x64.exe"
          }
            to: "./app_x64.exe",
          },
        ],
        files: [
          '**/*',
          '!**/runtime',
          '!**/app_x64.exe'
        ],
      }
    }
        files: ["**/*", "!**/runtime", "!**/app_x64.exe"],
      },
    },
  },
  chainWebpack: config => {
  chainWebpack: (config) => {
    config.resolve.alias
      .set('@', resolve('src'))
      .set('src', resolve('src'))
      .set('common', resolve('src/common'))
      .set('components', resolve('src/components'));
      .set("@", resolve("src"))
      .set("src", resolve("src"))
      .set("common", resolve("src/common"))
      .set("components", resolve("src/components"));
    config.plugin('html').tap((args) => {
      args[0].title = 'fbx文件解析';
    config.plugin("html").tap((args) => {
      args[0].title = `fbx文件解析 V${version}`;
      return args;
    })
  }
};
    });
  },
};