测试 用electron + springboot 构建桌面应用
he wei
2022-03-22 5d912947c883b162026939a367bfe81cc35d2bbc
UA 整理提交
1 文件已重命名
8个文件已修改
17个文件已添加
1685 ■■■■■ 已修改文件
out/production/classes/testElectronJ/App.class 补丁 | 查看 | 原始文档 | blame | 历史
out/production/classes/testElectronJ/Com.class 补丁 | 查看 | 原始文档 | blame | 历史
out/production/classes/testElectronJ/ComBase.class 补丁 | 查看 | 原始文档 | blame | 历史
out/production/classes/testElectronJ/FboData$DataType.class 补丁 | 查看 | 原始文档 | blame | 历史
out/production/classes/testElectronJ/FboData$TestTime.class 补丁 | 查看 | 原始文档 | blame | 历史
out/production/classes/testElectronJ/FboData.class 补丁 | 查看 | 原始文档 | blame | 历史
out/production/classes/testElectronJ/FboDataHeadStart$DateTime.class 补丁 | 查看 | 原始文档 | blame | 历史
out/production/classes/testElectronJ/FboDataHeadStart.class 补丁 | 查看 | 原始文档 | blame | 历史
out/production/classes/testElectronJ/FboDataHeadStop.class 补丁 | 查看 | 原始文档 | blame | 历史
out/production/classes/testElectronJ/FboDataInf.class 补丁 | 查看 | 原始文档 | blame | 历史
out/production/classes/testElectronJ/Response.class 补丁 | 查看 | 原始文档 | blame | 历史
out/production/classes/testElectronJ/TestController.class 补丁 | 查看 | 原始文档 | blame | 历史
out/production/classes/testElectronJ/filter/CrossDomainFilter.class 补丁 | 查看 | 原始文档 | blame | 历史
out/production/classes/testElectronJ/util/ServletUtils.class 补丁 | 查看 | 原始文档 | blame | 历史
out/production/resources/config/application.yml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
out/production/resources/logback-spring.xml 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/demo/package-lock.json 1282 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/demo/package.json 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/demo/public/app_x64.exe 补丁 | 查看 | 原始文档 | blame | 历史
src/main/demo/public/icon/icon.png 补丁 | 查看 | 原始文档 | blame | 历史
src/main/demo/public/lib/app.jar 补丁 | 查看 | 原始文档 | blame | 历史
src/main/demo/src/App.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/demo/src/background.js 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/demo/src/components/myCharts/BaseChart.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/demo/src/views/result.vue 249 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/demo/src/views/selectFile.vue 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
out/production/classes/testElectronJ/App.class
Binary files differ
out/production/classes/testElectronJ/Com.class
Binary files differ
out/production/classes/testElectronJ/ComBase.class
Binary files differ
out/production/classes/testElectronJ/FboData$DataType.class
Binary files differ
out/production/classes/testElectronJ/FboData$TestTime.class
Binary files differ
out/production/classes/testElectronJ/FboData.class
Binary files differ
out/production/classes/testElectronJ/FboDataHeadStart$DateTime.class
Binary files differ
out/production/classes/testElectronJ/FboDataHeadStart.class
Binary files differ
out/production/classes/testElectronJ/FboDataHeadStop.class
Binary files differ
out/production/classes/testElectronJ/FboDataInf.class
Binary files differ
out/production/classes/testElectronJ/Response.class
Binary files differ
out/production/classes/testElectronJ/TestController.class
Binary files differ
out/production/classes/testElectronJ/filter/CrossDomainFilter.class
Binary files differ
out/production/classes/testElectronJ/util/ServletUtils.class
Binary files differ
out/production/resources/config/application.yml
New file
@@ -0,0 +1,5 @@
#服务端口号
server:
  port: 8099
#  servlet:
#    context-path: /ele
out/production/resources/logback-spring.xml
New file
@@ -0,0 +1,57 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration  scan="true" scanPeriod="10 seconds">
    <contextName>logback</contextName>
    <!-- 格式化输出:%date表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符-->
    <property name="LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" />
    <!-- 定义日志存储的路径,不要配置相对路径 -->
    <property name="FILE_PATH" value="/log/spring-log.%d{yyyy-MM-dd}.%i.log" />
    <!-- 控制台输出日志 -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <!-- 日志级别过滤INFO以下 -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <encoder>
            <!-- 按照上面配置的LOG_PATTERN来打印日志 -->
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
    </appender>
    <!--每天生成一个日志文件,保存30天的日志文件。rollingFile用来切分文件的 -->
    <appender name="rollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${FILE_PATH}</fileNamePattern>
            <!-- keep 15 days' worth of history -->
            <maxHistory>30</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- 日志文件的最大大小 -->
                <maxFileSize>2MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!-- 超出删除老文件 -->
            <totalSizeCap>1GB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
    </appender>
    <!-- project default level -->
    <logger name="net.sh.rgface.serive" level="ERROR" />
    <!-- 日志输出级别 -->
    <root level="INFO">
        <appender-ref ref="console" />
        <appender-ref ref="rollingFile" />
    </root>
</configuration>
src/main/demo/package-lock.json
@@ -1,5 +1,5 @@
{
  "name": "demo",
  "name": "fbx",
  "version": "0.1.0",
  "lockfileVersion": 1,
  "requires": true,
@@ -1284,6 +1284,378 @@
        "postcss": "^7.0.0"
      }
    },
    "@jimp/bmp": {
      "version": "0.16.1",
      "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.16.1.tgz",
      "integrity": "sha512-iwyNYQeBawrdg/f24x3pQ5rEx+/GwjZcCXd3Kgc+ZUd+Ivia7sIqBsOnDaMZdKCBPlfW364ekexnlOqyVa0NWg==",
      "dev": true,
      "requires": {
        "@babel/runtime": "^7.7.2",
        "@jimp/utils": "^0.16.1",
        "bmp-js": "^0.1.0"
      }
    },
    "@jimp/core": {
      "version": "0.16.1",
      "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.16.1.tgz",
      "integrity": "sha512-la7kQia31V6kQ4q1kI/uLimu8FXx7imWVajDGtwUG8fzePLWDFJyZl0fdIXVCL1JW2nBcRHidUot6jvlRDi2+g==",
      "dev": true,
      "requires": {
        "@babel/runtime": "^7.7.2",
        "@jimp/utils": "^0.16.1",
        "any-base": "^1.1.0",
        "buffer": "^5.2.0",
        "exif-parser": "^0.1.12",
        "file-type": "^9.0.0",
        "load-bmfont": "^1.3.1",
        "mkdirp": "^0.5.1",
        "phin": "^2.9.1",
        "pixelmatch": "^4.0.2",
        "tinycolor2": "^1.4.1"
      },
      "dependencies": {
        "buffer": {
          "version": "5.7.1",
          "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
          "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
          "dev": true,
          "requires": {
            "base64-js": "^1.3.1",
            "ieee754": "^1.1.13"
          }
        }
      }
    },
    "@jimp/custom": {
      "version": "0.16.1",
      "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.16.1.tgz",
      "integrity": "sha512-DNUAHNSiUI/j9hmbatD6WN/EBIyeq4AO0frl5ETtt51VN1SvE4t4v83ZA/V6ikxEf3hxLju4tQ5Pc3zmZkN/3A==",
      "dev": true,
      "requires": {
        "@babel/runtime": "^7.7.2",
        "@jimp/core": "^0.16.1"
      }
    },
    "@jimp/gif": {
      "version": "0.16.1",
      "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.16.1.tgz",
      "integrity": "sha512-r/1+GzIW1D5zrP4tNrfW+3y4vqD935WBXSc8X/wm23QTY9aJO9Lw6PEdzpYCEY+SOklIFKaJYUAq/Nvgm/9ryw==",
      "dev": true,
      "requires": {
        "@babel/runtime": "^7.7.2",
        "@jimp/utils": "^0.16.1",
        "gifwrap": "^0.9.2",
        "omggif": "^1.0.9"
      }
    },
    "@jimp/jpeg": {
      "version": "0.16.1",
      "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.16.1.tgz",
      "integrity": "sha512-8352zrdlCCLFdZ/J+JjBslDvml+fS3Z8gttdml0We759PnnZGqrnPRhkOEOJbNUlE+dD4ckLeIe6NPxlS/7U+w==",
      "dev": true,
      "requires": {
        "@babel/runtime": "^7.7.2",
        "@jimp/utils": "^0.16.1",
        "jpeg-js": "0.4.2"
      }
    },
    "@jimp/plugin-blit": {
      "version": "0.16.1",
      "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.16.1.tgz",
      "integrity": "sha512-fKFNARm32RoLSokJ8WZXHHH2CGzz6ire2n1Jh6u+XQLhk9TweT1DcLHIXwQMh8oR12KgjbgsMGvrMVlVknmOAg==",
      "dev": true,
      "requires": {
        "@babel/runtime": "^7.7.2",
        "@jimp/utils": "^0.16.1"
      }
    },
    "@jimp/plugin-blur": {
      "version": "0.16.1",
      "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.16.1.tgz",
      "integrity": "sha512-1WhuLGGj9MypFKRcPvmW45ht7nXkOKu+lg3n2VBzIB7r4kKNVchuI59bXaCYQumOLEqVK7JdB4glaDAbCQCLyw==",
      "dev": true,
      "requires": {
        "@babel/runtime": "^7.7.2",
        "@jimp/utils": "^0.16.1"
      }
    },
    "@jimp/plugin-circle": {
      "version": "0.16.1",
      "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.16.1.tgz",
      "integrity": "sha512-JK7yi1CIU7/XL8hdahjcbGA3V7c+F+Iw+mhMQhLEi7Q0tCnZ69YJBTamMiNg3fWPVfMuvWJJKOBRVpwNTuaZRg==",
      "dev": true,
      "requires": {
        "@babel/runtime": "^7.7.2",
        "@jimp/utils": "^0.16.1"
      }
    },
    "@jimp/plugin-color": {
      "version": "0.16.1",
      "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.16.1.tgz",
      "integrity": "sha512-9yQttBAO5SEFj7S6nJK54f+1BnuBG4c28q+iyzm1JjtnehjqMg6Ljw4gCSDCvoCQ3jBSYHN66pmwTV74SU1B7A==",
      "dev": true,
      "requires": {
        "@babel/runtime": "^7.7.2",
        "@jimp/utils": "^0.16.1",
        "tinycolor2": "^1.4.1"
      }
    },
    "@jimp/plugin-contain": {
      "version": "0.16.1",
      "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.16.1.tgz",
      "integrity": "sha512-44F3dUIjBDHN+Ym/vEfg+jtjMjAqd2uw9nssN67/n4FdpuZUVs7E7wadKY1RRNuJO+WgcD5aDQcsvurXMETQTg==",
      "dev": true,
      "requires": {
        "@babel/runtime": "^7.7.2",
        "@jimp/utils": "^0.16.1"
      }
    },
    "@jimp/plugin-cover": {
      "version": "0.16.1",
      "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.16.1.tgz",
      "integrity": "sha512-YztWCIldBAVo0zxcQXR+a/uk3/TtYnpKU2CanOPJ7baIuDlWPsG+YE4xTsswZZc12H9Kl7CiziEbDtvF9kwA/Q==",
      "dev": true,
      "requires": {
        "@babel/runtime": "^7.7.2",
        "@jimp/utils": "^0.16.1"
      }
    },
    "@jimp/plugin-crop": {
      "version": "0.16.1",
      "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.16.1.tgz",
      "integrity": "sha512-UQdva9oQzCVadkyo3T5Tv2CUZbf0klm2cD4cWMlASuTOYgaGaFHhT9st+kmfvXjKL8q3STkBu/zUPV6PbuV3ew==",
      "dev": true,
      "requires": {
        "@babel/runtime": "^7.7.2",
        "@jimp/utils": "^0.16.1"
      }
    },
    "@jimp/plugin-displace": {
      "version": "0.16.1",
      "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.16.1.tgz",
      "integrity": "sha512-iVAWuz2+G6Heu8gVZksUz+4hQYpR4R0R/RtBzpWEl8ItBe7O6QjORAkhxzg+WdYLL2A/Yd4ekTpvK0/qW8hTVw==",
      "dev": true,
      "requires": {
        "@babel/runtime": "^7.7.2",
        "@jimp/utils": "^0.16.1"
      }
    },
    "@jimp/plugin-dither": {
      "version": "0.16.1",
      "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.16.1.tgz",
      "integrity": "sha512-tADKVd+HDC9EhJRUDwMvzBXPz4GLoU6s5P7xkVq46tskExYSptgj5713J5Thj3NMgH9Rsqu22jNg1H/7tr3V9Q==",
      "dev": true,
      "requires": {
        "@babel/runtime": "^7.7.2",
        "@jimp/utils": "^0.16.1"
      }
    },
    "@jimp/plugin-fisheye": {
      "version": "0.16.1",
      "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.16.1.tgz",
      "integrity": "sha512-BWHnc5hVobviTyIRHhIy9VxI1ACf4CeSuCfURB6JZm87YuyvgQh5aX5UDKtOz/3haMHXBLP61ZBxlNpMD8CG4A==",
      "dev": true,
      "requires": {
        "@babel/runtime": "^7.7.2",
        "@jimp/utils": "^0.16.1"
      }
    },
    "@jimp/plugin-flip": {
      "version": "0.16.1",
      "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.16.1.tgz",
      "integrity": "sha512-KdxTf0zErfZ8DyHkImDTnQBuHby+a5YFdoKI/G3GpBl3qxLBvC+PWkS2F/iN3H7wszP7/TKxTEvWL927pypT0w==",
      "dev": true,
      "requires": {
        "@babel/runtime": "^7.7.2",
        "@jimp/utils": "^0.16.1"
      }
    },
    "@jimp/plugin-gaussian": {
      "version": "0.16.1",
      "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.16.1.tgz",
      "integrity": "sha512-u9n4wjskh3N1mSqketbL6tVcLU2S5TEaFPR40K6TDv4phPLZALi1Of7reUmYpVm8mBDHt1I6kGhuCJiWvzfGyg==",
      "dev": true,
      "requires": {
        "@babel/runtime": "^7.7.2",
        "@jimp/utils": "^0.16.1"
      }
    },
    "@jimp/plugin-invert": {
      "version": "0.16.1",
      "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.16.1.tgz",
      "integrity": "sha512-2DKuyVXANH8WDpW9NG+PYFbehzJfweZszFYyxcaewaPLN0GxvxVLOGOPP1NuUTcHkOdMFbE0nHDuB7f+sYF/2w==",
      "dev": true,
      "requires": {
        "@babel/runtime": "^7.7.2",
        "@jimp/utils": "^0.16.1"
      }
    },
    "@jimp/plugin-mask": {
      "version": "0.16.1",
      "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.16.1.tgz",
      "integrity": "sha512-snfiqHlVuj4bSFS0v96vo2PpqCDMe4JB+O++sMo5jF5mvGcGL6AIeLo8cYqPNpdO6BZpBJ8MY5El0Veckhr39Q==",
      "dev": true,
      "requires": {
        "@babel/runtime": "^7.7.2",
        "@jimp/utils": "^0.16.1"
      }
    },
    "@jimp/plugin-normalize": {
      "version": "0.16.1",
      "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.16.1.tgz",
      "integrity": "sha512-dOQfIOvGLKDKXPU8xXWzaUeB0nvkosHw6Xg1WhS1Z5Q0PazByhaxOQkSKgUryNN/H+X7UdbDvlyh/yHf3ITRaw==",
      "dev": true,
      "requires": {
        "@babel/runtime": "^7.7.2",
        "@jimp/utils": "^0.16.1"
      }
    },
    "@jimp/plugin-print": {
      "version": "0.16.1",
      "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.16.1.tgz",
      "integrity": "sha512-ceWgYN40jbN4cWRxixym+csyVymvrryuKBQ+zoIvN5iE6OyS+2d7Mn4zlNgumSczb9GGyZZESIgVcBDA1ezq0Q==",
      "dev": true,
      "requires": {
        "@babel/runtime": "^7.7.2",
        "@jimp/utils": "^0.16.1",
        "load-bmfont": "^1.4.0"
      }
    },
    "@jimp/plugin-resize": {
      "version": "0.16.1",
      "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.16.1.tgz",
      "integrity": "sha512-u4JBLdRI7dargC04p2Ha24kofQBk3vhaf0q8FwSYgnCRwxfvh2RxvhJZk9H7Q91JZp6wgjz/SjvEAYjGCEgAwQ==",
      "dev": true,
      "requires": {
        "@babel/runtime": "^7.7.2",
        "@jimp/utils": "^0.16.1"
      }
    },
    "@jimp/plugin-rotate": {
      "version": "0.16.1",
      "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.16.1.tgz",
      "integrity": "sha512-ZUU415gDQ0VjYutmVgAYYxC9Og9ixu2jAGMCU54mSMfuIlmohYfwARQmI7h4QB84M76c9hVLdONWjuo+rip/zg==",
      "dev": true,
      "requires": {
        "@babel/runtime": "^7.7.2",
        "@jimp/utils": "^0.16.1"
      }
    },
    "@jimp/plugin-scale": {
      "version": "0.16.1",
      "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.16.1.tgz",
      "integrity": "sha512-jM2QlgThIDIc4rcyughD5O7sOYezxdafg/2Xtd1csfK3z6fba3asxDwthqPZAgitrLgiKBDp6XfzC07Y/CefUw==",
      "dev": true,
      "requires": {
        "@babel/runtime": "^7.7.2",
        "@jimp/utils": "^0.16.1"
      }
    },
    "@jimp/plugin-shadow": {
      "version": "0.16.1",
      "resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.16.1.tgz",
      "integrity": "sha512-MeD2Is17oKzXLnsphAa1sDstTu6nxscugxAEk3ji0GV1FohCvpHBcec0nAq6/czg4WzqfDts+fcPfC79qWmqrA==",
      "dev": true,
      "requires": {
        "@babel/runtime": "^7.7.2",
        "@jimp/utils": "^0.16.1"
      }
    },
    "@jimp/plugin-threshold": {
      "version": "0.16.1",
      "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.16.1.tgz",
      "integrity": "sha512-iGW8U/wiCSR0+6syrPioVGoSzQFt4Z91SsCRbgNKTAk7D+XQv6OI78jvvYg4o0c2FOlwGhqz147HZV5utoSLxA==",
      "dev": true,
      "requires": {
        "@babel/runtime": "^7.7.2",
        "@jimp/utils": "^0.16.1"
      }
    },
    "@jimp/plugins": {
      "version": "0.16.1",
      "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.16.1.tgz",
      "integrity": "sha512-c+lCqa25b+4q6mJZSetlxhMoYuiltyS+ValLzdwK/47+aYsq+kcJNl+TuxIEKf59yr9+5rkbpsPkZHLF/V7FFA==",
      "dev": true,
      "requires": {
        "@babel/runtime": "^7.7.2",
        "@jimp/plugin-blit": "^0.16.1",
        "@jimp/plugin-blur": "^0.16.1",
        "@jimp/plugin-circle": "^0.16.1",
        "@jimp/plugin-color": "^0.16.1",
        "@jimp/plugin-contain": "^0.16.1",
        "@jimp/plugin-cover": "^0.16.1",
        "@jimp/plugin-crop": "^0.16.1",
        "@jimp/plugin-displace": "^0.16.1",
        "@jimp/plugin-dither": "^0.16.1",
        "@jimp/plugin-fisheye": "^0.16.1",
        "@jimp/plugin-flip": "^0.16.1",
        "@jimp/plugin-gaussian": "^0.16.1",
        "@jimp/plugin-invert": "^0.16.1",
        "@jimp/plugin-mask": "^0.16.1",
        "@jimp/plugin-normalize": "^0.16.1",
        "@jimp/plugin-print": "^0.16.1",
        "@jimp/plugin-resize": "^0.16.1",
        "@jimp/plugin-rotate": "^0.16.1",
        "@jimp/plugin-scale": "^0.16.1",
        "@jimp/plugin-shadow": "^0.16.1",
        "@jimp/plugin-threshold": "^0.16.1",
        "timm": "^1.6.1"
      }
    },
    "@jimp/png": {
      "version": "0.16.1",
      "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.16.1.tgz",
      "integrity": "sha512-iyWoCxEBTW0OUWWn6SveD4LePW89kO7ZOy5sCfYeDM/oTPLpR8iMIGvZpZUz1b8kvzFr27vPst4E5rJhGjwsdw==",
      "dev": true,
      "requires": {
        "@babel/runtime": "^7.7.2",
        "@jimp/utils": "^0.16.1",
        "pngjs": "^3.3.3"
      },
      "dependencies": {
        "pngjs": {
          "version": "3.4.0",
          "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz",
          "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==",
          "dev": true
        }
      }
    },
    "@jimp/tiff": {
      "version": "0.16.1",
      "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.16.1.tgz",
      "integrity": "sha512-3K3+xpJS79RmSkAvFMgqY5dhSB+/sxhwTFA9f4AVHUK0oKW+u6r52Z1L0tMXHnpbAdR9EJ+xaAl2D4x19XShkQ==",
      "dev": true,
      "requires": {
        "@babel/runtime": "^7.7.2",
        "utif": "^2.0.1"
      }
    },
    "@jimp/types": {
      "version": "0.16.1",
      "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.16.1.tgz",
      "integrity": "sha512-g1w/+NfWqiVW4CaXSJyD28JQqZtm2eyKMWPhBBDCJN9nLCN12/Az0WFF3JUAktzdsEC2KRN2AqB1a2oMZBNgSQ==",
      "dev": true,
      "requires": {
        "@babel/runtime": "^7.7.2",
        "@jimp/bmp": "^0.16.1",
        "@jimp/gif": "^0.16.1",
        "@jimp/jpeg": "^0.16.1",
        "@jimp/png": "^0.16.1",
        "@jimp/tiff": "^0.16.1",
        "timm": "^1.6.1"
      }
    },
    "@jimp/utils": {
      "version": "0.16.1",
      "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.16.1.tgz",
      "integrity": "sha512-8fULQjB0x4LzUSiSYG6ZtQl355sZjxbv8r9PPAuYHzS9sGiSHJQavNqK/nKnpDsVkU88/vRGcE7t3nMU0dEnVw==",
      "dev": true,
      "requires": {
        "@babel/runtime": "^7.7.2",
        "regenerator-runtime": "^0.13.3"
      }
    },
    "@jridgewell/resolve-uri": {
      "version": "3.0.5",
      "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz",
@@ -1410,11 +1782,39 @@
        "glob-to-regexp": "^0.3.0"
      }
    },
    "@nodelib/fs.scandir": {
      "version": "2.1.5",
      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
      "dev": true,
      "requires": {
        "@nodelib/fs.stat": "2.0.5",
        "run-parallel": "^1.1.9"
      },
      "dependencies": {
        "@nodelib/fs.stat": {
          "version": "2.0.5",
          "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
          "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
          "dev": true
        }
      }
    },
    "@nodelib/fs.stat": {
      "version": "1.1.3",
      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz",
      "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==",
      "dev": true
    },
    "@nodelib/fs.walk": {
      "version": "1.2.8",
      "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
      "dev": true,
      "requires": {
        "@nodelib/fs.scandir": "2.1.5",
        "fastq": "^1.6.0"
      }
    },
    "@npmcli/fs": {
      "version": "1.1.1",
@@ -2735,6 +3135,12 @@
        "color-convert": "^1.9.0"
      }
    },
    "any-base": {
      "version": "1.1.0",
      "resolved": "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz",
      "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==",
      "dev": true
    },
    "any-promise": {
      "version": "1.3.0",
      "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
@@ -2921,6 +3327,26 @@
      "dev": true,
      "requires": {
        "sprintf-js": "~1.0.2"
      }
    },
    "args": {
      "version": "5.0.1",
      "resolved": "https://registry.npmjs.org/args/-/args-5.0.1.tgz",
      "integrity": "sha512-1kqmFCFsPffavQFGt8OxJdIcETti99kySRUPMpOhaGjL6mRJn8HFU1OxKY5bMqfZKUwTQc1mZkAjmGYaVOHFtQ==",
      "dev": true,
      "requires": {
        "camelcase": "5.0.0",
        "chalk": "2.4.2",
        "leven": "2.1.0",
        "mri": "1.1.4"
      },
      "dependencies": {
        "camelcase": {
          "version": "5.0.0",
          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz",
          "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==",
          "dev": true
        }
      }
    },
    "arr-diff": {
@@ -3404,6 +3830,12 @@
      "requires": {
        "bluebird": "^3.5.5"
      }
    },
    "bmp-js": {
      "version": "0.1.0",
      "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz",
      "integrity": "sha1-4Fpj95amwf8l9Hcex62twUjAcjM=",
      "dev": true
    },
    "bn.js": {
      "version": "5.2.0",
@@ -4511,6 +4943,12 @@
        "chalk": "^2.4.1",
        "q": "^1.1.2"
      }
    },
    "code-point-at": {
      "version": "1.1.0",
      "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
      "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
      "dev": true
    },
    "collection-visit": {
      "version": "1.0.0",
@@ -5869,6 +6307,12 @@
        }
      }
    },
    "dom-walk": {
      "version": "0.1.2",
      "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz",
      "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==",
      "dev": true
    },
    "domain-browser": {
      "version": "1.2.0",
      "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
@@ -6217,6 +6661,17 @@
        }
      }
    },
    "electron-icon-builder": {
      "version": "2.0.1",
      "resolved": "https://registry.npmjs.org/electron-icon-builder/-/electron-icon-builder-2.0.1.tgz",
      "integrity": "sha512-rg9BxW2kJi3TXsMFFNXWXrwQEd5dzXmeD+w7Pj3k3z7aYRePLxE89qU4lvL/rK1X/NTY5KDn3+Dbgm1TU2dGXQ==",
      "dev": true,
      "requires": {
        "args": "^5.0.1",
        "icon-gen": "^2.0.0",
        "jimp": "^0.16.1"
      }
    },
    "electron-osx-sign": {
      "version": "0.5.0",
      "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.5.0.tgz",
@@ -6527,6 +6982,12 @@
      "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==",
      "dev": true,
      "optional": true
    },
    "es6-promise": {
      "version": "4.2.8",
      "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz",
      "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==",
      "dev": true
    },
    "escalade": {
      "version": "3.1.1",
@@ -6845,6 +7306,12 @@
        "strip-eof": "^1.0.0"
      }
    },
    "exif-parser": {
      "version": "0.1.12",
      "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz",
      "integrity": "sha1-WKnS1ywCwfbwKg70qRZicrd2CSI=",
      "dev": true
    },
    "expand-brackets": {
      "version": "2.1.4",
      "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
@@ -7155,6 +7622,15 @@
      "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
      "dev": true
    },
    "fastq": {
      "version": "1.13.0",
      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
      "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
      "dev": true,
      "requires": {
        "reusify": "^1.0.4"
      }
    },
    "faye-websocket": {
      "version": "0.11.4",
      "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz",
@@ -7206,6 +7682,18 @@
        "loader-utils": "^1.2.3",
        "schema-utils": "^2.5.0"
      }
    },
    "file-type": {
      "version": "9.0.0",
      "resolved": "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz",
      "integrity": "sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==",
      "dev": true
    },
    "file-url": {
      "version": "2.0.2",
      "resolved": "https://registry.npmjs.org/file-url/-/file-url-2.0.2.tgz",
      "integrity": "sha1-6VF4TXkJUSfTcTApqwY/QIGMoq4=",
      "dev": true
    },
    "filelist": {
      "version": "1.0.2",
@@ -7596,6 +8084,16 @@
        "assert-plus": "^1.0.0"
      }
    },
    "gifwrap": {
      "version": "0.9.4",
      "resolved": "https://registry.npmjs.org/gifwrap/-/gifwrap-0.9.4.tgz",
      "integrity": "sha512-MDMwbhASQuVeD4JKd1fKgNgCRL3fGqMM4WaqpNhWO0JiMOAjbQdumbs4BbBZEy9/M00EHEjKN3HieVhCUlwjeQ==",
      "dev": true,
      "requires": {
        "image-q": "^4.0.0",
        "omggif": "^1.0.10"
      }
    },
    "glob": {
      "version": "7.2.0",
      "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
@@ -7624,6 +8122,16 @@
      "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
      "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
      "dev": true
    },
    "global": {
      "version": "4.4.0",
      "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz",
      "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==",
      "dev": true,
      "requires": {
        "min-document": "^2.19.0",
        "process": "^0.11.10"
      }
    },
    "global-agent": {
      "version": "3.0.0",
@@ -7921,6 +8429,16 @@
      "requires": {
        "inherits": "^2.0.3",
        "minimalistic-assert": "^1.0.1"
      }
    },
    "hasha": {
      "version": "2.2.0",
      "resolved": "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz",
      "integrity": "sha1-eNfL/B5tZjA/55g3NlmEUXsvbuE=",
      "dev": true,
      "requires": {
        "is-stream": "^1.0.1",
        "pinkie-promise": "^2.0.0"
      }
    },
    "he": {
@@ -8265,6 +8783,189 @@
      "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
      "dev": true
    },
    "icon-gen": {
      "version": "2.1.0",
      "resolved": "https://registry.npmjs.org/icon-gen/-/icon-gen-2.1.0.tgz",
      "integrity": "sha512-rqIVvq9MJ8X7wnJW0NO8Eau/+5RWV7AH6L5vEt/U5Ajv5WefdDNDxGwJhGokyHuyBWeX7JqRMQ03tG0gAco4Eg==",
      "dev": true,
      "requires": {
        "commander": "^6.2.0",
        "del": "^6.0.0",
        "mkdirp": "^1.0.4",
        "pngjs": "^6.0.0",
        "svg2png": "4.1.1",
        "uuid": "^8.3.1"
      },
      "dependencies": {
        "@nodelib/fs.stat": {
          "version": "2.0.5",
          "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
          "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
          "dev": true
        },
        "array-union": {
          "version": "2.1.0",
          "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
          "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
          "dev": true
        },
        "braces": {
          "version": "3.0.2",
          "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
          "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
          "dev": true,
          "requires": {
            "fill-range": "^7.0.1"
          }
        },
        "commander": {
          "version": "6.2.1",
          "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
          "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==",
          "dev": true
        },
        "del": {
          "version": "6.0.0",
          "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz",
          "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==",
          "dev": true,
          "requires": {
            "globby": "^11.0.1",
            "graceful-fs": "^4.2.4",
            "is-glob": "^4.0.1",
            "is-path-cwd": "^2.2.0",
            "is-path-inside": "^3.0.2",
            "p-map": "^4.0.0",
            "rimraf": "^3.0.2",
            "slash": "^3.0.0"
          }
        },
        "dir-glob": {
          "version": "3.0.1",
          "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
          "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
          "dev": true,
          "requires": {
            "path-type": "^4.0.0"
          }
        },
        "fast-glob": {
          "version": "3.2.11",
          "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
          "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
          "dev": true,
          "requires": {
            "@nodelib/fs.stat": "^2.0.2",
            "@nodelib/fs.walk": "^1.2.3",
            "glob-parent": "^5.1.2",
            "merge2": "^1.3.0",
            "micromatch": "^4.0.4"
          }
        },
        "fill-range": {
          "version": "7.0.1",
          "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
          "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
          "dev": true,
          "requires": {
            "to-regex-range": "^5.0.1"
          }
        },
        "globby": {
          "version": "11.1.0",
          "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
          "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
          "dev": true,
          "requires": {
            "array-union": "^2.1.0",
            "dir-glob": "^3.0.1",
            "fast-glob": "^3.2.9",
            "ignore": "^5.2.0",
            "merge2": "^1.4.1",
            "slash": "^3.0.0"
          }
        },
        "ignore": {
          "version": "5.2.0",
          "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
          "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
          "dev": true
        },
        "is-number": {
          "version": "7.0.0",
          "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
          "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
          "dev": true
        },
        "is-path-inside": {
          "version": "3.0.3",
          "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
          "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
          "dev": true
        },
        "micromatch": {
          "version": "4.0.4",
          "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
          "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
          "dev": true,
          "requires": {
            "braces": "^3.0.1",
            "picomatch": "^2.2.3"
          }
        },
        "mkdirp": {
          "version": "1.0.4",
          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
          "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
          "dev": true
        },
        "p-map": {
          "version": "4.0.0",
          "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
          "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
          "dev": true,
          "requires": {
            "aggregate-error": "^3.0.0"
          }
        },
        "path-type": {
          "version": "4.0.0",
          "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
          "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
          "dev": true
        },
        "rimraf": {
          "version": "3.0.2",
          "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
          "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
          "dev": true,
          "requires": {
            "glob": "^7.1.3"
          }
        },
        "slash": {
          "version": "3.0.0",
          "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
          "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
          "dev": true
        },
        "to-regex-range": {
          "version": "5.0.1",
          "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
          "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
          "dev": true,
          "requires": {
            "is-number": "^7.0.0"
          }
        },
        "uuid": {
          "version": "8.3.2",
          "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
          "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
          "dev": true
        }
      }
    },
    "iconv-corefoundation": {
      "version": "1.1.7",
      "resolved": "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz",
@@ -8307,6 +9008,23 @@
      "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
      "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
      "dev": true
    },
    "image-q": {
      "version": "4.0.0",
      "resolved": "https://registry.npmjs.org/image-q/-/image-q-4.0.0.tgz",
      "integrity": "sha512-PfJGVgIfKQJuq3s0tTDOKtztksibuUEbJQIYT3by6wctQo+Rdlh7ef4evJ5NCdxY4CfMbvFkocEwbl4BF8RlJw==",
      "dev": true,
      "requires": {
        "@types/node": "16.9.1"
      },
      "dependencies": {
        "@types/node": {
          "version": "16.9.1",
          "resolved": "https://registry.npmjs.org/@types/node/-/node-16.9.1.tgz",
          "integrity": "sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==",
          "dev": true
        }
      }
    },
    "image-size": {
      "version": "0.5.5",
@@ -8595,6 +9313,12 @@
        "side-channel": "^1.0.4"
      }
    },
    "invert-kv": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
      "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
      "dev": true
    },
    "ip": {
      "version": "1.1.5",
      "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
@@ -8805,6 +9529,12 @@
      "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
      "dev": true
    },
    "is-function": {
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz",
      "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==",
      "dev": true
    },
    "is-glob": {
      "version": "4.0.3",
      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
@@ -8970,6 +9700,12 @@
      "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
      "dev": true
    },
    "is-utf8": {
      "version": "0.2.1",
      "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
      "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
      "dev": true
    },
    "is-weakref": {
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
@@ -9086,6 +9822,25 @@
          }
        }
      }
    },
    "jimp": {
      "version": "0.16.1",
      "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.16.1.tgz",
      "integrity": "sha512-+EKVxbR36Td7Hfd23wKGIeEyHbxShZDX6L8uJkgVW3ESA9GiTEPK08tG1XI2r/0w5Ch0HyJF5kPqF9K7EmGjaw==",
      "dev": true,
      "requires": {
        "@babel/runtime": "^7.7.2",
        "@jimp/custom": "^0.16.1",
        "@jimp/plugins": "^0.16.1",
        "@jimp/types": "^0.16.1",
        "regenerator-runtime": "^0.13.3"
      }
    },
    "jpeg-js": {
      "version": "0.4.2",
      "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.2.tgz",
      "integrity": "sha512-+az2gi/hvex7eLTMTlbRLOhH6P6WFdk2ITI8HJsaH2VqYO0I594zXSYEP+tf4FW+8Cy68ScDXoAsQdyQanv3sw==",
      "dev": true
    },
    "js-message": {
      "version": "1.0.7",
@@ -9214,6 +9969,12 @@
        "set-immediate-shim": "~1.0.1"
      }
    },
    "kew": {
      "version": "0.7.0",
      "resolved": "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz",
      "integrity": "sha1-edk9LTM2PW/dKXCzNdkUGtWR15s=",
      "dev": true
    },
    "keyv": {
      "version": "3.1.0",
      "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz",
@@ -9234,6 +9995,15 @@
      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
      "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
      "dev": true
    },
    "klaw": {
      "version": "1.3.1",
      "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",
      "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=",
      "dev": true,
      "requires": {
        "graceful-fs": "^4.1.9"
      }
    },
    "latest-version": {
      "version": "5.1.0",
@@ -9268,6 +10038,15 @@
      "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz",
      "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==",
      "dev": true
    },
    "lcid": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
      "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
      "dev": true,
      "requires": {
        "invert-kv": "^1.0.0"
      }
    },
    "less": {
      "version": "3.13.1",
@@ -9351,6 +10130,12 @@
        }
      }
    },
    "leven": {
      "version": "2.1.0",
      "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz",
      "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=",
      "dev": true
    },
    "levn": {
      "version": "0.3.0",
      "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
@@ -9375,6 +10160,66 @@
      "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
      "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
      "dev": true
    },
    "load-bmfont": {
      "version": "1.4.1",
      "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.1.tgz",
      "integrity": "sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==",
      "dev": true,
      "requires": {
        "buffer-equal": "0.0.1",
        "mime": "^1.3.4",
        "parse-bmfont-ascii": "^1.0.3",
        "parse-bmfont-binary": "^1.0.5",
        "parse-bmfont-xml": "^1.1.4",
        "phin": "^2.9.1",
        "xhr": "^2.0.1",
        "xtend": "^4.0.0"
      },
      "dependencies": {
        "buffer-equal": {
          "version": "0.0.1",
          "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz",
          "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=",
          "dev": true
        },
        "mime": {
          "version": "1.6.0",
          "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
          "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
          "dev": true
        }
      }
    },
    "load-json-file": {
      "version": "1.1.0",
      "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
      "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
      "dev": true,
      "requires": {
        "graceful-fs": "^4.1.2",
        "parse-json": "^2.2.0",
        "pify": "^2.0.0",
        "pinkie-promise": "^2.0.0",
        "strip-bom": "^2.0.0"
      },
      "dependencies": {
        "parse-json": {
          "version": "2.2.0",
          "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
          "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
          "dev": true,
          "requires": {
            "error-ex": "^1.2.0"
          }
        },
        "pify": {
          "version": "2.3.0",
          "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
          "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
          "dev": true
        }
      }
    },
    "loader-fs-cache": {
      "version": "1.0.3",
@@ -9752,6 +10597,15 @@
      "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
      "dev": true
    },
    "min-document": {
      "version": "2.19.0",
      "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz",
      "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=",
      "dev": true,
      "requires": {
        "dom-walk": "^0.1.0"
      }
    },
    "mini-css-extract-plugin": {
      "version": "0.9.0",
      "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz",
@@ -9944,6 +10798,12 @@
        "rimraf": "^2.5.4",
        "run-queue": "^1.0.3"
      }
    },
    "mri": {
      "version": "1.1.4",
      "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.4.tgz",
      "integrity": "sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w==",
      "dev": true
    },
    "ms": {
      "version": "2.1.2",
@@ -10201,6 +11061,12 @@
      "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=",
      "dev": true
    },
    "number-is-nan": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
      "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
      "dev": true
    },
    "oauth-sign": {
      "version": "0.9.0",
      "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
@@ -10330,6 +11196,12 @@
      "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==",
      "dev": true
    },
    "omggif": {
      "version": "1.0.10",
      "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz",
      "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==",
      "dev": true
    },
    "on-finished": {
      "version": "2.3.0",
      "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
@@ -10440,6 +11312,15 @@
      "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
      "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
      "dev": true
    },
    "os-locale": {
      "version": "1.4.0",
      "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
      "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
      "dev": true,
      "requires": {
        "lcid": "^1.0.0"
      }
    },
    "os-tmpdir": {
      "version": "1.0.2",
@@ -10565,6 +11446,34 @@
        "pbkdf2": "^3.0.3",
        "safe-buffer": "^5.1.1"
      }
    },
    "parse-bmfont-ascii": {
      "version": "1.0.6",
      "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz",
      "integrity": "sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU=",
      "dev": true
    },
    "parse-bmfont-binary": {
      "version": "1.0.6",
      "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz",
      "integrity": "sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY=",
      "dev": true
    },
    "parse-bmfont-xml": {
      "version": "1.1.4",
      "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz",
      "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==",
      "dev": true,
      "requires": {
        "xml-parse-from-string": "^1.0.0",
        "xml2js": "^0.4.5"
      }
    },
    "parse-headers": {
      "version": "2.0.5",
      "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz",
      "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==",
      "dev": true
    },
    "parse-json": {
      "version": "5.2.0",
@@ -10709,6 +11618,57 @@
      "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
      "dev": true
    },
    "phantomjs-prebuilt": {
      "version": "2.1.16",
      "resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz",
      "integrity": "sha1-79ISpKOWbTZHaE6ouniFSb4q7+8=",
      "dev": true,
      "requires": {
        "es6-promise": "^4.0.3",
        "extract-zip": "^1.6.5",
        "fs-extra": "^1.0.0",
        "hasha": "^2.2.0",
        "kew": "^0.7.0",
        "progress": "^1.1.8",
        "request": "^2.81.0",
        "request-progress": "^2.0.1",
        "which": "^1.2.10"
      },
      "dependencies": {
        "fs-extra": {
          "version": "1.0.0",
          "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz",
          "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=",
          "dev": true,
          "requires": {
            "graceful-fs": "^4.1.2",
            "jsonfile": "^2.1.0",
            "klaw": "^1.0.0"
          }
        },
        "jsonfile": {
          "version": "2.4.0",
          "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
          "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
          "dev": true,
          "requires": {
            "graceful-fs": "^4.1.6"
          }
        },
        "progress": {
          "version": "1.1.8",
          "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz",
          "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=",
          "dev": true
        }
      }
    },
    "phin": {
      "version": "2.9.3",
      "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz",
      "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==",
      "dev": true
    },
    "picocolors": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
@@ -10742,6 +11702,23 @@
        "pinkie": "^2.0.0"
      }
    },
    "pixelmatch": {
      "version": "4.0.2",
      "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz",
      "integrity": "sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=",
      "dev": true,
      "requires": {
        "pngjs": "^3.0.0"
      },
      "dependencies": {
        "pngjs": {
          "version": "3.4.0",
          "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz",
          "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==",
          "dev": true
        }
      }
    },
    "pkg-dir": {
      "version": "4.2.0",
      "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
@@ -10760,6 +11737,18 @@
        "base64-js": "^1.5.1",
        "xmlbuilder": "^9.0.7"
      }
    },
    "pn": {
      "version": "1.1.0",
      "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz",
      "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==",
      "dev": true
    },
    "pngjs": {
      "version": "6.0.0",
      "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-6.0.0.tgz",
      "integrity": "sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==",
      "dev": true
    },
    "pnp-webpack-plugin": {
      "version": "1.7.0",
@@ -11574,6 +12563,12 @@
      "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
      "dev": true
    },
    "queue-microtask": {
      "version": "1.2.3",
      "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
      "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
      "dev": true
    },
    "randombytes": {
      "version": "2.1.0",
      "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
@@ -11683,6 +12678,65 @@
        "normalize-package-data": "^2.5.0",
        "parse-json": "^5.0.0",
        "type-fest": "^0.6.0"
      }
    },
    "read-pkg-up": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
      "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
      "dev": true,
      "requires": {
        "find-up": "^1.0.0",
        "read-pkg": "^1.0.0"
      },
      "dependencies": {
        "find-up": {
          "version": "1.1.2",
          "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
          "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
          "dev": true,
          "requires": {
            "path-exists": "^2.0.0",
            "pinkie-promise": "^2.0.0"
          }
        },
        "path-exists": {
          "version": "2.1.0",
          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
          "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
          "dev": true,
          "requires": {
            "pinkie-promise": "^2.0.0"
          }
        },
        "path-type": {
          "version": "1.1.0",
          "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
          "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
          "dev": true,
          "requires": {
            "graceful-fs": "^4.1.2",
            "pify": "^2.0.0",
            "pinkie-promise": "^2.0.0"
          }
        },
        "pify": {
          "version": "2.3.0",
          "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
          "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
          "dev": true
        },
        "read-pkg": {
          "version": "1.1.0",
          "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
          "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
          "dev": true,
          "requires": {
            "load-json-file": "^1.0.0",
            "normalize-package-data": "^2.3.2",
            "path-type": "^1.0.0"
          }
        }
      }
    },
    "readable-stream": {
@@ -11958,6 +13012,15 @@
        "uuid": "^3.3.2"
      }
    },
    "request-progress": {
      "version": "2.0.1",
      "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-2.0.1.tgz",
      "integrity": "sha1-XTa7V5YcZzqlt4jbyBQf3yO0Tgg=",
      "dev": true,
      "requires": {
        "throttleit": "^1.0.0"
      }
    },
    "require-directory": {
      "version": "2.1.1",
      "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@@ -12045,6 +13108,12 @@
      "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=",
      "dev": true
    },
    "reusify": {
      "version": "1.0.4",
      "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
      "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
      "dev": true
    },
    "rgb-regex": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz",
@@ -12105,6 +13174,15 @@
      "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
      "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==",
      "dev": true
    },
    "run-parallel": {
      "version": "1.2.0",
      "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
      "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
      "dev": true,
      "requires": {
        "queue-microtask": "^1.2.2"
      }
    },
    "run-queue": {
      "version": "1.0.3",
@@ -13062,6 +14140,15 @@
        }
      }
    },
    "strip-bom": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
      "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
      "dev": true,
      "requires": {
        "is-utf8": "^0.2.0"
      }
    },
    "strip-eof": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
@@ -13139,6 +14226,136 @@
      "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz",
      "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=",
      "dev": true
    },
    "svg2png": {
      "version": "4.1.1",
      "resolved": "https://registry.npmjs.org/svg2png/-/svg2png-4.1.1.tgz",
      "integrity": "sha1-a54DmKpBh3i2Q24Sei+38A1JnCg=",
      "dev": true,
      "requires": {
        "file-url": "^2.0.0",
        "phantomjs-prebuilt": "^2.1.14",
        "pn": "^1.0.0",
        "yargs": "^6.5.0"
      },
      "dependencies": {
        "ansi-regex": {
          "version": "2.1.1",
          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
          "dev": true
        },
        "camelcase": {
          "version": "3.0.0",
          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
          "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
          "dev": true
        },
        "cliui": {
          "version": "3.2.0",
          "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
          "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
          "dev": true,
          "requires": {
            "string-width": "^1.0.1",
            "strip-ansi": "^3.0.1",
            "wrap-ansi": "^2.0.0"
          }
        },
        "get-caller-file": {
          "version": "1.0.3",
          "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
          "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
          "dev": true
        },
        "is-fullwidth-code-point": {
          "version": "1.0.0",
          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
          "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
          "dev": true,
          "requires": {
            "number-is-nan": "^1.0.0"
          }
        },
        "require-main-filename": {
          "version": "1.0.1",
          "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
          "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
          "dev": true
        },
        "string-width": {
          "version": "1.0.2",
          "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
          "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
          "dev": true,
          "requires": {
            "code-point-at": "^1.0.0",
            "is-fullwidth-code-point": "^1.0.0",
            "strip-ansi": "^3.0.0"
          }
        },
        "strip-ansi": {
          "version": "3.0.1",
          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
          "dev": true,
          "requires": {
            "ansi-regex": "^2.0.0"
          }
        },
        "which-module": {
          "version": "1.0.0",
          "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
          "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=",
          "dev": true
        },
        "wrap-ansi": {
          "version": "2.1.0",
          "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
          "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
          "dev": true,
          "requires": {
            "string-width": "^1.0.1",
            "strip-ansi": "^3.0.1"
          }
        },
        "y18n": {
          "version": "3.2.2",
          "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz",
          "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==",
          "dev": true
        },
        "yargs": {
          "version": "6.6.0",
          "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz",
          "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=",
          "dev": true,
          "requires": {
            "camelcase": "^3.0.0",
            "cliui": "^3.2.0",
            "decamelize": "^1.1.1",
            "get-caller-file": "^1.0.1",
            "os-locale": "^1.4.0",
            "read-pkg-up": "^1.0.1",
            "require-directory": "^2.1.1",
            "require-main-filename": "^1.0.1",
            "set-blocking": "^2.0.0",
            "string-width": "^1.0.2",
            "which-module": "^1.0.0",
            "y18n": "^3.2.1",
            "yargs-parser": "^4.2.0"
          }
        },
        "yargs-parser": {
          "version": "4.2.1",
          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz",
          "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=",
          "dev": true,
          "requires": {
            "camelcase": "^3.0.0"
          }
        }
      }
    },
    "svgo": {
      "version": "1.3.2",
@@ -13452,6 +14669,12 @@
      "integrity": "sha512-XH8UiPCQcWNuk2LYePibW/4qL97+ZQ1AN3FNXwZRBNPPowo/NRU5fAlDCSNBJIYCKbioZfuYtMhG4quqoJhVzg==",
      "dev": true
    },
    "throttleit": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz",
      "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=",
      "dev": true
    },
    "through": {
      "version": "2.3.8",
      "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
@@ -13503,10 +14726,22 @@
        "setimmediate": "^1.0.4"
      }
    },
    "timm": {
      "version": "1.7.1",
      "resolved": "https://registry.npmjs.org/timm/-/timm-1.7.1.tgz",
      "integrity": "sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==",
      "dev": true
    },
    "timsort": {
      "version": "0.3.0",
      "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz",
      "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=",
      "dev": true
    },
    "tinycolor2": {
      "version": "1.4.2",
      "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz",
      "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==",
      "dev": true
    },
    "tmp": {
@@ -14130,6 +15365,15 @@
      "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz",
      "integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=",
      "dev": true
    },
    "utif": {
      "version": "2.0.1",
      "resolved": "https://registry.npmjs.org/utif/-/utif-2.0.1.tgz",
      "integrity": "sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==",
      "dev": true,
      "requires": {
        "pako": "^1.0.5"
      }
    },
    "util": {
      "version": "0.11.1",
@@ -15460,6 +16704,42 @@
      "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==",
      "dev": true
    },
    "xhr": {
      "version": "2.6.0",
      "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz",
      "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==",
      "dev": true,
      "requires": {
        "global": "~4.4.0",
        "is-function": "^1.0.1",
        "parse-headers": "^2.0.0",
        "xtend": "^4.0.0"
      }
    },
    "xml-parse-from-string": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz",
      "integrity": "sha1-qQKekp09vN7RafPG4oI42VpdWig=",
      "dev": true
    },
    "xml2js": {
      "version": "0.4.23",
      "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz",
      "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==",
      "dev": true,
      "requires": {
        "sax": ">=0.6.0",
        "xmlbuilder": "~11.0.0"
      },
      "dependencies": {
        "xmlbuilder": {
          "version": "11.0.1",
          "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
          "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==",
          "dev": true
        }
      }
    },
    "xmlbuilder": {
      "version": "9.0.7",
      "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
src/main/demo/package.json
@@ -11,7 +11,8 @@
    "electron:build": "vue-cli-service electron:build",
    "electron:serve": "vue-cli-service electron:serve",
    "postinstall": "electron-builder install-app-deps",
    "postuninstall": "electron-builder install-app-deps"
    "postuninstall": "electron-builder install-app-deps",
    "electron:generate-icons": "electron-icon-builder --input=./public/icon/icon.png --output=build --flatten"
  },
  "main": "background.js",
  "dependencies": {
@@ -34,13 +35,14 @@
    "babel-eslint": "^10.1.0",
    "electron": "^13.0.0",
    "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",
    "sass": "1.26.8",
    "sass-loader": "8.0.2",
    "less": "^3.12.2",
    "less-loader": "^6.2.0",
    "sass": "1.26.8",
    "sass-loader": "8.0.2",
    "vue-cli-plugin-electron-builder": "~2.1.1"
  },
  "eslintConfig": {
src/main/demo/public/app_x64.exe
Binary files differ
src/main/demo/public/icon/icon.png

src/main/demo/public/lib/app.jar
Binary files differ
src/main/demo/src/App.vue
@@ -16,7 +16,7 @@
  box-sizing: border-box;
  height: 100%;
  background: url('~@/assets/img/dw_bg.jpg') no-repeat;
  min-width: 600px;
  min-height: 400px;
  /* min-width: 1000px;
  min-height: 600px; */
}
</style>
src/main/demo/src/background.js
@@ -3,12 +3,31 @@
import { app, protocol, BrowserWindow, Menu } from 'electron'
import { createProtocol } from 'vue-cli-plugin-electron-builder/lib'
const isDevelopment = process.env.NODE_ENV !== 'production'
let win = null;
// 单例锁
const gotTheLock = app.requestSingleInstanceLock()
if (!gotTheLock) {
  app.quit()
} else {
  app.on('second-instance', (event, commandLine, workingDirectory) => {
    // 当运行第二个实例时,将会聚焦到myWindow这个窗口
    if (win) {
      if (win.isMinimized()) win.restore()
      win.focus()
    }
  })
}
// Scheme must be registered before the app is ready
protocol.registerSchemesAsPrivileged([
  { scheme: 'app', privileges: { secure: true, standard: true } }
])
let appUrl = 'http://localhost:8099/test/hello';
const platform = process.platform
let appStarted = false
let serverProcess
@@ -16,25 +35,19 @@
  serverProcess = true
} else {
  if (platform === 'win32') {
    let pathArr = app.getPath('exe').split('\\');
    pathArr.length = pathArr.length - 1;
    let path = pathArr.join('\\');
    // require('child_process').spawn('cmd.exe', ['/c', 'echo '+path+' > 123.txt']);
    // let pathArr = app.getPath('exe').split('\\');
    // pathArr.length = pathArr.length - 1;
    // let path = pathArr.join('\\');
    // require('child_process').spawn('cmd.exe', ['/c', 'echo '+app.getAppPath()+ '===========' + __dirname +'===========' +   __filename +'===========' +  __static + ' >> 123.txt']);
    // serverProcess = require('child_process').spawn('cmd.exe', ['/c', 'testElectronJ.bat'], {
    //   cwd: path + '/bundled/bin'
    // })
    serverProcess = require('child_process').spawn('app_x64.exe', {
      cwd: path + '/bundled'
    })
  } else {
    const chmod = require('child_process').spawn('chmod', ['+x', app.getAppPath() + "/bin/testElectronJ"]);
    chmod.on('close', (code => {
      const chmod2 = require('child_process').spawn('chmod', ['+x', app.getAppPath() + "/runtime/bin/java"]);
      chmod2.on('close', () => {
        serverProcess = require('child_process').spawn(app.getAppPath() + "/bin/testElectronJ")
      })
    }))
    serverProcess = require('child_process').execFile(__dirname + '/app_x64.exe');
    // serverProcess = require('child_process').spawn('cmd.exe', ['/c', 'testElectronJ.bat'], {
    //   cwd: __dirname + '/bin'
    //   // cwd: app.getAppPath() + '/bin'
    // });
  }
}
if (!isDevelopment) {
@@ -42,10 +55,10 @@
}
async function createWindow() {
  // Create the browser window.
  const win = new BrowserWindow({
    width: 800,
    height: 600,
    icon: `${__static}/icon/1.png`,
  win = new BrowserWindow({
    width: 1200,
    height: 800,
    icon: `${__static}/icon/icon.png`,
    webPreferences: {
      webSecurity: false,
      // Use pluginOptions.nodeIntegration, leave this alone
@@ -107,7 +120,6 @@
// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
let appUrl = 'http://localhost:8099/test/hello';
const startUp = function () {
  const requestPromise = require('minimal-request-promise')
src/main/demo/src/components/myCharts/BaseChart.vue
@@ -100,6 +100,7 @@
     * 对echarts进行缩放
     */
    resize() {
      console.log('resize event');
      let chart = this.$options.chart;
      if (chart) {
        chart.resize();
src/main/demo/src/views/result.vue
@@ -3,42 +3,55 @@
    <div class="content_header" slot="header">
      <three-btn @click="goSelect">重选文件</three-btn>
      <three-btn @click="exportExcel">导出</three-btn>
      <div class="">
        记录开始时间:2021-03-21 17:52:05
        测试类型:充电
        绝缘
      <div class="summary">
        <div class="summary-item">记录开始时间:<span>{{ summary.testStartTime }}</span></div>
        <div class="summary-item">测试类型:<span>{{ summary.testType }}</span></div>
        <div class="summary-item">正极绝缘电阻:<span>{{ summary.PosInsRes }}KΩ</span></div>
        <div class="summary-item">负极绝缘电阻:<span>{{ summary.NegInsRes }}KΩ</span></div>
      </div>
    </div>
    <div class="main">
      <div class="flex-row contain-flex-column">
        <flex-box class="item" size="mini" title="组端电压折线图">
          <normal-lines id="groupVol" ref="groupVol" unit="V"></normal-lines>
        </flex-box>
        <flex-box class="item" size="mini" title="电池电流折线图">
          <normal-lines id="groupCurr" ref="groupCurr" unit="A"></normal-lines>
        </flex-box>
      </div>
      <div class="flex-row contain-flex-column">
        <flex-box class="item" size="mini" title="单体电压折线图">
          <normal-lines id="vol" ref="vol" unit="V"></normal-lines>
        </flex-box>
        <flex-box class="item" size="mini" title="容量折线图">
          <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 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>
          <normal-lines id="cap" ref="cap" unit="AH"></normal-lines>
        </flex-box>
          <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 id="vol" 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>
    <!-- 导出用的图表 可变的那组图 -->
@@ -54,9 +67,9 @@
import ThreeBtn from "@/components/ThreeBtn";
import axios from "@/assets/js/axios";
const dataType = {
  0xFD: '放电',
  0xFC: '充电',
  0xFB: '普通数据'
  0xfd: "放电",
  0xfc: "充电",
  0xfb: "普通数据",
};
export default {
@@ -68,40 +81,40 @@
  },
  data() {
    let info = this.$route.query.data;
    let { fboData, fboDataStart } = info;
    let lastRecord = fboData[fboData.length - 1];
    let chartTypes = [
      {
        label: "环境温度",
        value: "tempEnvi",
      },
      {
        label: "环境湿度",
        value: "humiEnvi",
      }
    ];
    let capTest = fboDataStart.DataType == 0xfd || fboDataStart.DataType == 0xfc;
    return {
      info,
      chartType: "testCap",
      chartTypes: [
      capTest,
      chartType: capTest ? "testCap" : "tempEnvi",
      chartTypes: capTest ? [
        {
          label: "测试容量",
          value: "testCap",
          unit: "AH",
          fixed: 0,
        },
        {
          label: "实际容量(预估)",
          value: "actualCap",
          unit: "AH",
          fixed: 0,
        },
        // {
        //   label: "剩余容量",
        //   value: "residualCap",
        //   unit: "AH",
        //   fixed: 0,
        // },
        // {
        //   label: "剩余时间",
        //   value: "residualTime",
        //   unit: "",
        //   fixed: 0,
        // },
      ],
        ...chartTypes
      ] : [...chartTypes],
      testCapOption: null,
      actualCapOption: null,
      residualCapOption: null,
      residualTimeOption: null,
      unit: ''
      tempEnviOption: null,
      humiEnviOption: null,
      summary: {
        testStartTime: fboDataStart.testStartTime,
        testType: dataType[fboDataStart.DataType],
        PosInsRes: lastRecord.PosInsRes,
        NegInsRes: lastRecord.NegInsRes,
      },
      optsTitle: capTest ? '测试容量拆线图' : '环境温度折线图'
    };
  },
  methods: {
@@ -113,11 +126,13 @@
        groupVol = [],
        groupCurr = [],
        testCap = [],
        actualCap = [],
        residualCap = [],
        residualTime = [],
        PosInsRes = [],
        NegInsRes = [],
        // actualCap = [],
        // residualCap = [],
        // residualTime = [],
        // PosInsRes = [],
        // NegInsRes = [],
        tempEnvi = [],
        humiEnvi = [],
        SingleVol = [];
      for (let i = 0, j = monCount; i < j; i++) {
        SingleVol[i] = {
@@ -147,15 +162,19 @@
        // 测试容量
        testCap.push(item.testCap);
        // 实际容量
        actualCap.push(item.actualCap);
        // actualCap.push(item.actualCap);
        // 剩余容量
        residualCap.push(item.residualCap);
        // residualCap.push(item.residualCap);
        // 剩余时间
        residualTime.push(item.residualTime);
        // residualTime.push(item.residualTime);
        // 正极绝缘电阻
        PosInsRes.push(item.PosInsRes);
        // PosInsRes.push(item.PosInsRes);
        // 负极绝缘电阻
        NegInsRes.push(item.NegInsRes);
        // NegInsRes.push(item.NegInsRes);
        // 环境温度
        tempEnvi.push(item.Temp_Envi);
        // 环境湿度
        humiEnvi.push(item.Humi_Envi);
        // 单体电压
        for (let m = 0, n = monCount; m < n; m++) {
          SingleVol[m].data.push(item.SingleVol[m]);
@@ -190,7 +209,7 @@
        series: SingleVol,
      };
      let testCapOption = {
          unit: 'AH',
          unit: "AH",
          xData: times,
          series: [
            {
@@ -202,71 +221,57 @@
            },
          ],
        },
        actualCapOption = {
          unit: 'AH',
        tempEnviOption = {
          unit: "℃",
          xData: times,
          series: [
            {
              name: "实际容量",
              name: "环境温度",
              type: "line",
              symbolSize: 0,
              sampling: "lttb",
              data: actualCap,
              data: tempEnvi,
            },
          ],
        },
        residualCapOption = {
          unit: 'AH',
        humiEnviOption = {
          unit: "%",
          xData: times,
          series: [
            {
              name: "剩余容量",
              name: "环境湿度",
              type: "line",
              symbolSize: 0,
              sampling: "average",
              data: residualCap,
            },
          ],
        },
        residualTimeOption = {
          unit: '',
          xData: times,
          series: [
            {
              name: "剩余时间",
              type: "line",
              symbolSize: 0,
              sampling: "average",
              data: residualTime,
              data: humiEnvi,
            },
          ],
        };
      this.testCapOption = testCapOption;
      this.actualCapOption = actualCapOption;
      this.residualCapOption = residualCapOption;
      this.residualTimeOption = residualTimeOption;
      this.tempEnviOption = tempEnviOption;
      this.humiEnviOption = humiEnviOption;
      this.$refs.groupVol.setData(groupVolOption);
      this.$refs.groupCurr.setData(currOption);
      this.$refs.vol.setData(volOption);
      this.$refs.cap.setData(testCapOption);
      this.$refs.other.setData(this.capTest ? testCapOption : tempEnviOption);
      // 建立联动
      this.$G.chartManage.connect(["groupVol", "groupCurr", "vol", "cap"]);
      this.$G.chartManage.connect(["groupVol", "groupCurr", "vol", "other"]);
    },
    changeChartType(v) {
      this.$refs.cap.setData(this[v + "Option"]);
      this.optsTitle = v.label + '折线图';
      this.$refs.other.setData(this[v + "Option"]);
    },
    goSelect() {
      this.$router.push("/selectFile");
      this.$router.push({path: "/selectFile", query: {reselect: 1}});
    },
    // 导出报表
    exportExcel() {
      // 容量折线图
      let arr = ['testCap', 'actualCap'];
      let arr = ["testCap", "tempEnvi", "humiEnvi"];
      let o_pic = {};
      arr.forEach((v) => {
        let option = this[v + 'Option'];
        this.unit = option.unit;
        let option = this[v + "Option"];
        this.$refs.hideChart.setData(option);
        o_pic[v] = this.$refs.hideChart.getDataURL();
      });
@@ -275,9 +280,13 @@
        groupVol_echart: this.$refs.groupVol.getDataURL(),
        curr_echart: this.$refs.groupCurr.getDataURL(),
        vol_echart: this.$refs.vol.getDataURL(),
        cap_echart: o_pic.testCap,
        actualCap_echart: o_pic.actualCap
        tempEnvi_echart: o_pic.tempEnvi,
        humiEnvi_echart: o_pic.humiEnvi,
      };
      if (this.capTest) {
        params.cap_echart = o_pic.testCap;
      }
      let baseURL = axios.defaults.baseURL;
      baseURL = baseURL ? baseURL : "";
      var actionUrl = baseURL + "export";
@@ -324,6 +333,15 @@
}
.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;
@@ -332,9 +350,26 @@
.item {
  background: #0d43a7;
  flex: 1;
  position: relative;
}
.content_header {
  padding: 8px;
  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;
src/main/demo/src/views/selectFile.vue
@@ -7,11 +7,13 @@
      :auto-upload="false"
      :on-change="change"
      @drop.native="drop"
      accept=".fbx"
      accept=".fbx,.fbxc"
    >
      <!-- <i class="icon el-icon-plus"></i> -->
      <div class="el-upload__text">将.fbx文件拖到此处,或点击此处选择文件</div>
      <div class="el-upload__tip" slot="tip">只能解析.fbx文件</div>
      <div ref="tt" class="el-upload__text">
        将.fbx或.fbxc文件拖到此处,或点击此处选择文件
      </div>
      <div class="el-upload__tip" slot="tip">只能解析.fbx和.fbxc文件</div>
    </el-upload>
  </div>
</template>
@@ -23,8 +25,10 @@
  name: "",
  data() {
    let reselect = !!this.$route.query.reselect;
    return {
      URL: "",
      reselect,
    };
  },
  components: {},
@@ -39,10 +43,11 @@
      this.loadFile(file.raw);
    },
    loadFile(file) {
      if (!/\.fbx$/.test(file.name.toLowerCase().trim())) {
        this.$layer.msg("类型错误");
      if (!/\.fbxc?$/.test(file.name.toLowerCase().trim())) {
        this.$layer.msg("文件类型错误");
        return false;
      }
      let loading = this.$layer.loading(1);
      axios({
        url: "readFboFile",
        method: "POST",
@@ -51,7 +56,8 @@
        },
      }).then((res) => {
        res = res.data;
        console.log(res, res.code, "=========res");
        // console.log(res, res.code, "=========res");
        this.$layer.close(loading);
        if (res.code) {
          let data = res.data;
          data.filePath = file.path;
@@ -81,7 +87,11 @@
    },
  },
  mounted() {},
  mounted() {
    if (this.reselect) {
      this.$refs.tt.click();
    }
  },
};
</script>
@@ -114,4 +124,7 @@
>>> .el-upload-list {
  display: none;
}
>>> .el-upload__tip {
  color: #fff;
}
</style>