he wei
2023-12-06 74362878b01587845f6dadd9bdfda331848fed3e
UA 通信电源柜对接协议和控制接口
1 文件已重命名
27个文件已修改
6个文件已添加
6946 ■■■■ 已修改文件
index.html 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
package.json 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pnpm-lock.yaml 2574 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/css/base.less 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/bitArray2num.js 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/getBinaryDigits.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/websocket/getWsUrl.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/alarmCard.vue 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/alarmCardPop.vue 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/bar1.vue 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/bar2.vue 311 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/gradientBtn.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/listCard.vue 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/panel.vue 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/ycGrid.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/components/Sidebar/index.vue 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/routes.js 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/store/modules/globalData.js 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/home/components/protectorBox.vue 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/home/components/switchBox.vue 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/home/index.vue 321 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/home/js/props.js 274 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/powerCabinetControl/components/card.vue 92 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/powerCabinetControl/components/card2.vue 52 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/powerCabinetControl/components/ipCard.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/powerCabinetControl/index.vue 258 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/powerCabinetControl/js/apis.js 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/powerCabinetControl/js/const_props.js 1023 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/powerCabinetRtalarm/index.vue 377 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/realTime/index.vue 245 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/realTime/js/const_props.js 862 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/switchControl/index.vue 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/user/list.vue 180 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
index.html
@@ -4,12 +4,12 @@
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width,initial-scale=1.0" />
    <title>test标题</title>
    <title>通信电源监控主站测控系统</title>
  </head>
  <body>
    <noscript>
      <strong
        >We're sorry but test标题 doesn't work properly without JavaScript
        >We're sorry but 通信电源监控主站测控系统 doesn't work properly without JavaScript
        enabled. Please enable it to continue.</strong
      >
    </noscript>
package.json
@@ -12,6 +12,7 @@
    "@vitejs/plugin-vue2": "^2.3.0",
    "axios": "^0.21.4",
    "core-js": "^3.8.3",
    "echarts": "^4.8.0",
    "element-ui": "^2.15.14",
    "js-cookie": "^3.0.5",
    "js-md5": "^0.7.3",
@@ -24,7 +25,6 @@
    "vue": "^2.7.5",
    "vue-layer": "^1.2.0",
    "vue-router": "3.0.2",
    "echarts": "^4.8.0",
    "vuex": "3.1.0"
  },
  "devDependencies": {
@@ -45,6 +45,7 @@
    "vite-plugin-node-polyfills": "^0.16.0",
    "vite-plugin-svg-icons": "^2.0.1",
    "vite-plugin-vue2": "^2.0.3",
    "vue-clickaway": "^2.2.2",
    "vue-template-compiler": "^2.6.14"
  },
  "eslintConfig": {
pnpm-lock.yaml
@@ -109,11 +109,1530 @@
  vite-plugin-vue2:
    specifier: ^2.0.3
    version: registry.npmmirror.com/vite-plugin-vue2@2.0.3(vite@5.0.0)(vue-template-compiler@2.7.15)(vue@2.7.15)
  vue-clickaway:
    specifier: ^2.2.2
    version: 2.2.2(vue@2.7.15)
  vue-template-compiler:
    specifier: ^2.6.14
    version: registry.npmmirror.com/vue-template-compiler@2.7.15
packages:
  /@esbuild/android-arm64@0.19.6:
    resolution: {integrity: sha512-KQ/hbe9SJvIJ4sR+2PcZ41IBV+LPJyYp6V1K1P1xcMRup9iYsBoQn4MzE3mhMLOld27Au2eDcLlIREeKGUXpHQ==, tarball: https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.19.6.tgz}
    engines: {node: '>=12'}
    cpu: [arm64]
    os: [android]
    requiresBuild: true
    optional: true
  /@esbuild/android-arm@0.19.6:
    resolution: {integrity: sha512-muPzBqXJKCbMYoNbb1JpZh/ynl0xS6/+pLjrofcR3Nad82SbsCogYzUE6Aq9QT3cLP0jR/IVK/NHC9b90mSHtg==, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.19.6.tgz}
    engines: {node: '>=12'}
    cpu: [arm]
    os: [android]
    requiresBuild: true
    optional: true
  /@esbuild/android-x64@0.19.6:
    resolution: {integrity: sha512-VVJVZQ7p5BBOKoNxd0Ly3xUM78Y4DyOoFKdkdAe2m11jbh0LEU4bPles4e/72EMl4tapko8o915UalN/5zhspg==, tarball: https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.19.6.tgz}
    engines: {node: '>=12'}
    cpu: [x64]
    os: [android]
    requiresBuild: true
    optional: true
  /@esbuild/darwin-arm64@0.19.6:
    resolution: {integrity: sha512-91LoRp/uZAKx6ESNspL3I46ypwzdqyDLXZH7x2QYCLgtnaU08+AXEbabY2yExIz03/am0DivsTtbdxzGejfXpA==, tarball: https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.6.tgz}
    engines: {node: '>=12'}
    cpu: [arm64]
    os: [darwin]
    requiresBuild: true
    optional: true
  /@esbuild/darwin-x64@0.19.6:
    resolution: {integrity: sha512-QCGHw770ubjBU1J3ZkFJh671MFajGTYMZumPs9E/rqU52md6lIil97BR0CbPq6U+vTh3xnTNDHKRdR8ggHnmxQ==, tarball: https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.19.6.tgz}
    engines: {node: '>=12'}
    cpu: [x64]
    os: [darwin]
    requiresBuild: true
    optional: true
  /@esbuild/freebsd-arm64@0.19.6:
    resolution: {integrity: sha512-J53d0jGsDcLzWk9d9SPmlyF+wzVxjXpOH7jVW5ae7PvrDst4kiAz6sX+E8btz0GB6oH12zC+aHRD945jdjF2Vg==, tarball: https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.6.tgz}
    engines: {node: '>=12'}
    cpu: [arm64]
    os: [freebsd]
    requiresBuild: true
    optional: true
  /@esbuild/freebsd-x64@0.19.6:
    resolution: {integrity: sha512-hn9qvkjHSIB5Z9JgCCjED6YYVGCNpqB7dEGavBdG6EjBD8S/UcNUIlGcB35NCkMETkdYwfZSvD9VoDJX6VeUVA==, tarball: https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.6.tgz}
    engines: {node: '>=12'}
    cpu: [x64]
    os: [freebsd]
    requiresBuild: true
    optional: true
  /@esbuild/linux-arm64@0.19.6:
    resolution: {integrity: sha512-HQCOrk9XlH3KngASLaBfHpcoYEGUt829A9MyxaI8RMkfRA8SakG6YQEITAuwmtzFdEu5GU4eyhKcpv27dFaOBg==, tarball: https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.19.6.tgz}
    engines: {node: '>=12'}
    cpu: [arm64]
    os: [linux]
    requiresBuild: true
    optional: true
  /@esbuild/linux-arm@0.19.6:
    resolution: {integrity: sha512-G8IR5zFgpXad/Zp7gr7ZyTKyqZuThU6z1JjmRyN1vSF8j0bOlGzUwFSMTbctLAdd7QHpeyu0cRiuKrqK1ZTwvQ==, tarball: https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.19.6.tgz}
    engines: {node: '>=12'}
    cpu: [arm]
    os: [linux]
    requiresBuild: true
    optional: true
  /@esbuild/linux-ia32@0.19.6:
    resolution: {integrity: sha512-22eOR08zL/OXkmEhxOfshfOGo8P69k8oKHkwkDrUlcB12S/sw/+COM4PhAPT0cAYW/gpqY2uXp3TpjQVJitz7w==, tarball: https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.19.6.tgz}
    engines: {node: '>=12'}
    cpu: [ia32]
    os: [linux]
    requiresBuild: true
    optional: true
  /@esbuild/linux-loong64@0.14.54:
    resolution: {integrity: sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz}
    engines: {node: '>=12'}
    cpu: [loong64]
    os: [linux]
    requiresBuild: true
    dev: true
    optional: true
  /@esbuild/linux-loong64@0.19.6:
    resolution: {integrity: sha512-82RvaYAh/SUJyjWA8jDpyZCHQjmEggL//sC7F3VKYcBMumQjUL3C5WDl/tJpEiKtt7XrWmgjaLkrk205zfvwTA==, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.19.6.tgz}
    engines: {node: '>=12'}
    cpu: [loong64]
    os: [linux]
    requiresBuild: true
    optional: true
  /@esbuild/linux-mips64el@0.19.6:
    resolution: {integrity: sha512-8tvnwyYJpR618vboIv2l8tK2SuK/RqUIGMfMENkeDGo3hsEIrpGldMGYFcWxWeEILe5Fi72zoXLmhZ7PR23oQA==, tarball: https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.6.tgz}
    engines: {node: '>=12'}
    cpu: [mips64el]
    os: [linux]
    requiresBuild: true
    optional: true
  /@esbuild/linux-ppc64@0.19.6:
    resolution: {integrity: sha512-Qt+D7xiPajxVNk5tQiEJwhmarNnLPdjXAoA5uWMpbfStZB0+YU6a3CtbWYSy+sgAsnyx4IGZjWsTzBzrvg/fMA==, tarball: https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.6.tgz}
    engines: {node: '>=12'}
    cpu: [ppc64]
    os: [linux]
    requiresBuild: true
    optional: true
  /@esbuild/linux-riscv64@0.19.6:
    resolution: {integrity: sha512-lxRdk0iJ9CWYDH1Wpnnnc640ajF4RmQ+w6oHFZmAIYu577meE9Ka/DCtpOrwr9McMY11ocbp4jirgGgCi7Ls/g==, tarball: https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.6.tgz}
    engines: {node: '>=12'}
    cpu: [riscv64]
    os: [linux]
    requiresBuild: true
    optional: true
  /@esbuild/linux-s390x@0.19.6:
    resolution: {integrity: sha512-MopyYV39vnfuykHanRWHGRcRC3AwU7b0QY4TI8ISLfAGfK+tMkXyFuyT1epw/lM0pflQlS53JoD22yN83DHZgA==, tarball: https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.19.6.tgz}
    engines: {node: '>=12'}
    cpu: [s390x]
    os: [linux]
    requiresBuild: true
    optional: true
  /@esbuild/linux-x64@0.19.6:
    resolution: {integrity: sha512-UWcieaBzsN8WYbzFF5Jq7QULETPcQvlX7KL4xWGIB54OknXJjBO37sPqk7N82WU13JGWvmDzFBi1weVBajPovg==, tarball: https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.19.6.tgz}
    engines: {node: '>=12'}
    cpu: [x64]
    os: [linux]
    requiresBuild: true
    optional: true
  /@esbuild/netbsd-x64@0.19.6:
    resolution: {integrity: sha512-EpWiLX0fzvZn1wxtLxZrEW+oQED9Pwpnh+w4Ffv8ZLuMhUoqR9q9rL4+qHW8F4Mg5oQEKxAoT0G+8JYNqCiR6g==, tarball: https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.6.tgz}
    engines: {node: '>=12'}
    cpu: [x64]
    os: [netbsd]
    requiresBuild: true
    optional: true
  /@esbuild/openbsd-x64@0.19.6:
    resolution: {integrity: sha512-fFqTVEktM1PGs2sLKH4M5mhAVEzGpeZJuasAMRnvDZNCV0Cjvm1Hu35moL2vC0DOrAQjNTvj4zWrol/lwQ8Deg==, tarball: https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.6.tgz}
    engines: {node: '>=12'}
    cpu: [x64]
    os: [openbsd]
    requiresBuild: true
    optional: true
  /@esbuild/sunos-x64@0.19.6:
    resolution: {integrity: sha512-M+XIAnBpaNvaVAhbe3uBXtgWyWynSdlww/JNZws0FlMPSBy+EpatPXNIlKAdtbFVII9OpX91ZfMb17TU3JKTBA==, tarball: https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.19.6.tgz}
    engines: {node: '>=12'}
    cpu: [x64]
    os: [sunos]
    requiresBuild: true
    optional: true
  /@esbuild/win32-arm64@0.19.6:
    resolution: {integrity: sha512-2DchFXn7vp/B6Tc2eKdTsLzE0ygqKkNUhUBCNtMx2Llk4POIVMUq5rUYjdcedFlGLeRe1uLCpVvCmE+G8XYybA==, tarball: https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.19.6.tgz}
    engines: {node: '>=12'}
    cpu: [arm64]
    os: [win32]
    requiresBuild: true
    optional: true
  /@esbuild/win32-ia32@0.19.6:
    resolution: {integrity: sha512-PBo/HPDQllyWdjwAVX+Gl2hH0dfBydL97BAH/grHKC8fubqp02aL4S63otZ25q3sBdINtOBbz1qTZQfXbP4VBg==, tarball: https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.19.6.tgz}
    engines: {node: '>=12'}
    cpu: [ia32]
    os: [win32]
    requiresBuild: true
    optional: true
  /@esbuild/win32-x64@0.19.6:
    resolution: {integrity: sha512-OE7yIdbDif2kKfrGa+V0vx/B3FJv2L4KnIiLlvtibPyO9UkgO3rzYE0HhpREo2vmJ1Ixq1zwm9/0er+3VOSZJA==, tarball: https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.19.6.tgz}
    engines: {node: '>=12'}
    cpu: [x64]
    os: [win32]
    requiresBuild: true
    optional: true
  /@jridgewell/gen-mapping@0.3.3:
    resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==, tarball: https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz}
    engines: {node: '>=6.0.0'}
    dependencies:
      '@jridgewell/set-array': 1.1.2
      '@jridgewell/sourcemap-codec': 1.4.15
      '@jridgewell/trace-mapping': 0.3.20
    dev: true
  /@jridgewell/resolve-uri@3.1.1:
    resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==, tarball: https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz}
    engines: {node: '>=6.0.0'}
    dev: true
  /@jridgewell/set-array@1.1.2:
    resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==, tarball: https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.1.2.tgz}
    engines: {node: '>=6.0.0'}
    dev: true
  /@jridgewell/source-map@0.3.5:
    resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==, tarball: https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.5.tgz}
    dependencies:
      '@jridgewell/gen-mapping': 0.3.3
      '@jridgewell/trace-mapping': 0.3.20
    dev: true
  /@jridgewell/sourcemap-codec@1.4.15:
    resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==, tarball: https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz}
    dev: true
  /@jridgewell/trace-mapping@0.3.20:
    resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==, tarball: https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz}
    dependencies:
      '@jridgewell/resolve-uri': 3.1.1
      '@jridgewell/sourcemap-codec': 1.4.15
    dev: true
  /@rollup/rollup-android-arm-eabi@4.5.0:
    resolution: {integrity: sha512-OINaBGY+Wc++U0rdr7BLuFClxcoWaVW3vQYqmQq6B3bqQ/2olkaoz+K8+af/Mmka/C2yN5j+L9scBkv4BtKsDA==, tarball: https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.5.0.tgz}
    cpu: [arm]
    os: [android]
    requiresBuild: true
    optional: true
  /@rollup/rollup-android-arm64@4.5.0:
    resolution: {integrity: sha512-UdMf1pOQc4ZmUA/NTmKhgJTBimbSKnhPS2zJqucqFyBRFPnPDtwA8MzrGNTjDeQbIAWfpJVAlxejw+/lQyBK/w==, tarball: https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.5.0.tgz}
    cpu: [arm64]
    os: [android]
    requiresBuild: true
    optional: true
  /@rollup/rollup-darwin-arm64@4.5.0:
    resolution: {integrity: sha512-L0/CA5p/idVKI+c9PcAPGorH6CwXn6+J0Ys7Gg1axCbTPgI8MeMlhA6fLM9fK+ssFhqogMHFC8HDvZuetOii7w==, tarball: https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.5.0.tgz}
    cpu: [arm64]
    os: [darwin]
    requiresBuild: true
    optional: true
  /@rollup/rollup-darwin-x64@4.5.0:
    resolution: {integrity: sha512-QZCbVqU26mNlLn8zi/XDDquNmvcr4ON5FYAHQQsyhrHx8q+sQi/6xduoznYXwk/KmKIXG5dLfR0CvY+NAWpFYQ==, tarball: https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.5.0.tgz}
    cpu: [x64]
    os: [darwin]
    requiresBuild: true
    optional: true
  /@rollup/rollup-linux-arm-gnueabihf@4.5.0:
    resolution: {integrity: sha512-VpSQ+xm93AeV33QbYslgf44wc5eJGYfYitlQzAi3OObu9iwrGXEnmu5S3ilkqE3Pr/FkgOiJKV/2p0ewf4Hrtg==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.5.0.tgz}
    cpu: [arm]
    os: [linux]
    requiresBuild: true
    optional: true
  /@rollup/rollup-linux-arm64-gnu@4.5.0:
    resolution: {integrity: sha512-OrEyIfpxSsMal44JpEVx9AEcGpdBQG1ZuWISAanaQTSMeStBW+oHWwOkoqR54bw3x8heP8gBOyoJiGg+fLY8qQ==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.5.0.tgz}
    cpu: [arm64]
    os: [linux]
    libc: [glibc]
    requiresBuild: true
    optional: true
  /@rollup/rollup-linux-arm64-musl@4.5.0:
    resolution: {integrity: sha512-1H7wBbQuE6igQdxMSTjtFfD+DGAudcYWhp106z/9zBA8OQhsJRnemO4XGavdzHpGhRtRxbgmUGdO3YQgrWf2RA==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.5.0.tgz}
    cpu: [arm64]
    os: [linux]
    libc: [musl]
    requiresBuild: true
    optional: true
  /@rollup/rollup-linux-x64-gnu@4.5.0:
    resolution: {integrity: sha512-FVyFI13tXw5aE65sZdBpNjPVIi4Q5mARnL/39UIkxvSgRAIqCo5sCpCELk0JtXHGee2owZz5aNLbWNfBHzr71Q==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.5.0.tgz}
    cpu: [x64]
    os: [linux]
    libc: [glibc]
    requiresBuild: true
    optional: true
  /@rollup/rollup-linux-x64-musl@4.5.0:
    resolution: {integrity: sha512-eBPYl2sLpH/o8qbSz6vPwWlDyThnQjJfcDOGFbNjmjb44XKC1F5dQfakOsADRVrXCNzM6ZsSIPDG5dc6HHLNFg==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.5.0.tgz}
    cpu: [x64]
    os: [linux]
    libc: [musl]
    requiresBuild: true
    optional: true
  /@rollup/rollup-win32-arm64-msvc@4.5.0:
    resolution: {integrity: sha512-xaOHIfLOZypoQ5U2I6rEaugS4IYtTgP030xzvrBf5js7p9WI9wik07iHmsKaej8Z83ZDxN5GyypfoyKV5O5TJA==, tarball: https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.5.0.tgz}
    cpu: [arm64]
    os: [win32]
    requiresBuild: true
    optional: true
  /@rollup/rollup-win32-ia32-msvc@4.5.0:
    resolution: {integrity: sha512-Al6quztQUrHwcOoU2TuFblUQ5L+/AmPBXFR6dUvyo4nRj2yQRK0WIUaGMF/uwKulvRcXkpHe3k9A8Vf93VDktA==, tarball: https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.5.0.tgz}
    cpu: [ia32]
    os: [win32]
    requiresBuild: true
    optional: true
  /@rollup/rollup-win32-x64-msvc@4.5.0:
    resolution: {integrity: sha512-8kdW+brNhI/NzJ4fxDufuJUjepzINqJKLGHuxyAtpPG9bMbn8P5mtaCcbOm0EzLJ+atg+kF9dwg8jpclkVqx5w==, tarball: https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.5.0.tgz}
    cpu: [x64]
    os: [win32]
    requiresBuild: true
    optional: true
  /@types/eslint-scope@3.7.7:
    resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==, tarball: https://registry.npmmirror.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz}
    dependencies:
      '@types/eslint': 8.44.7
      '@types/estree': 1.0.5
    dev: true
  /@types/eslint@8.44.7:
    resolution: {integrity: sha512-f5ORu2hcBbKei97U73mf+l9t4zTGl74IqZ0GQk4oVea/VS8tQZYkUveSYojk+frraAVYId0V2WC9O4PTNru2FQ==, tarball: https://registry.npmmirror.com/@types/eslint/-/eslint-8.44.7.tgz}
    dependencies:
      '@types/estree': 1.0.5
      '@types/json-schema': 7.0.15
    dev: true
  /@types/estree@1.0.5:
    resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==, tarball: https://registry.npmmirror.com/@types/estree/-/estree-1.0.5.tgz}
    dev: true
  /@types/json-schema@7.0.15:
    resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==, tarball: https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.15.tgz}
    dev: true
  /@types/node@20.9.2:
    resolution: {integrity: sha512-WHZXKFCEyIUJzAwh3NyyTHYSR35SevJ6mZ1nWwJafKtiQbqRTIKSRcw3Ma3acqgsent3RRDqeVwpHntMk+9irg==, tarball: https://registry.npmmirror.com/@types/node/-/node-20.9.2.tgz}
    dependencies:
      undici-types: 5.26.5
    dev: true
  /@vue/component-compiler-utils@3.3.0:
    resolution: {integrity: sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ==, tarball: https://registry.npmmirror.com/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz}
    dependencies:
      consolidate: 0.15.1
      hash-sum: 1.0.2
      lru-cache: 4.1.5
      merge-source-map: 1.1.0
      postcss: 7.0.39
      postcss-selector-parser: 6.0.13
      source-map: 0.6.1
      vue-template-es2015-compiler: 1.9.1
    optionalDependencies:
      prettier: 2.8.8
    transitivePeerDependencies:
      - arc-templates
      - atpl
      - babel-core
      - bracket-template
      - coffee-script
      - dot
      - dust
      - dustjs-helpers
      - dustjs-linkedin
      - eco
      - ect
      - ejs
      - haml-coffee
      - hamlet
      - hamljs
      - handlebars
      - hogan.js
      - htmling
      - jade
      - jazz
      - jqtpl
      - just
      - liquid-node
      - liquor
      - lodash
      - marko
      - mote
      - mustache
      - nunjucks
      - plates
      - pug
      - qejs
      - ractive
      - razor-tmpl
      - react
      - react-dom
      - slm
      - squirrelly
      - swig
      - swig-templates
      - teacup
      - templayed
      - then-jade
      - then-pug
      - tinyliquid
      - toffee
      - twig
      - twing
      - underscore
      - vash
      - velocityjs
      - walrus
      - whiskers
    dev: true
  /@webassemblyjs/ast@1.11.6:
    resolution: {integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==, tarball: https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.11.6.tgz}
    dependencies:
      '@webassemblyjs/helper-numbers': 1.11.6
      '@webassemblyjs/helper-wasm-bytecode': 1.11.6
    dev: true
  /@webassemblyjs/floating-point-hex-parser@1.11.6:
    resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==, tarball: https://registry.npmmirror.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz}
    dev: true
  /@webassemblyjs/helper-api-error@1.11.6:
    resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==, tarball: https://registry.npmmirror.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz}
    dev: true
  /@webassemblyjs/helper-buffer@1.11.6:
    resolution: {integrity: sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==, tarball: https://registry.npmmirror.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz}
    dev: true
  /@webassemblyjs/helper-numbers@1.11.6:
    resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==, tarball: https://registry.npmmirror.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz}
    dependencies:
      '@webassemblyjs/floating-point-hex-parser': 1.11.6
      '@webassemblyjs/helper-api-error': 1.11.6
      '@xtuc/long': 4.2.2
    dev: true
  /@webassemblyjs/helper-wasm-bytecode@1.11.6:
    resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==, tarball: https://registry.npmmirror.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz}
    dev: true
  /@webassemblyjs/helper-wasm-section@1.11.6:
    resolution: {integrity: sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==, tarball: https://registry.npmmirror.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz}
    dependencies:
      '@webassemblyjs/ast': 1.11.6
      '@webassemblyjs/helper-buffer': 1.11.6
      '@webassemblyjs/helper-wasm-bytecode': 1.11.6
      '@webassemblyjs/wasm-gen': 1.11.6
    dev: true
  /@webassemblyjs/ieee754@1.11.6:
    resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==, tarball: https://registry.npmmirror.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz}
    dependencies:
      '@xtuc/ieee754': 1.2.0
    dev: true
  /@webassemblyjs/leb128@1.11.6:
    resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==, tarball: https://registry.npmmirror.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz}
    dependencies:
      '@xtuc/long': 4.2.2
    dev: true
  /@webassemblyjs/utf8@1.11.6:
    resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==, tarball: https://registry.npmmirror.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz}
    dev: true
  /@webassemblyjs/wasm-edit@1.11.6:
    resolution: {integrity: sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==, tarball: https://registry.npmmirror.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz}
    dependencies:
      '@webassemblyjs/ast': 1.11.6
      '@webassemblyjs/helper-buffer': 1.11.6
      '@webassemblyjs/helper-wasm-bytecode': 1.11.6
      '@webassemblyjs/helper-wasm-section': 1.11.6
      '@webassemblyjs/wasm-gen': 1.11.6
      '@webassemblyjs/wasm-opt': 1.11.6
      '@webassemblyjs/wasm-parser': 1.11.6
      '@webassemblyjs/wast-printer': 1.11.6
    dev: true
  /@webassemblyjs/wasm-gen@1.11.6:
    resolution: {integrity: sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==, tarball: https://registry.npmmirror.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz}
    dependencies:
      '@webassemblyjs/ast': 1.11.6
      '@webassemblyjs/helper-wasm-bytecode': 1.11.6
      '@webassemblyjs/ieee754': 1.11.6
      '@webassemblyjs/leb128': 1.11.6
      '@webassemblyjs/utf8': 1.11.6
    dev: true
  /@webassemblyjs/wasm-opt@1.11.6:
    resolution: {integrity: sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==, tarball: https://registry.npmmirror.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz}
    dependencies:
      '@webassemblyjs/ast': 1.11.6
      '@webassemblyjs/helper-buffer': 1.11.6
      '@webassemblyjs/wasm-gen': 1.11.6
      '@webassemblyjs/wasm-parser': 1.11.6
    dev: true
  /@webassemblyjs/wasm-parser@1.11.6:
    resolution: {integrity: sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==, tarball: https://registry.npmmirror.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz}
    dependencies:
      '@webassemblyjs/ast': 1.11.6
      '@webassemblyjs/helper-api-error': 1.11.6
      '@webassemblyjs/helper-wasm-bytecode': 1.11.6
      '@webassemblyjs/ieee754': 1.11.6
      '@webassemblyjs/leb128': 1.11.6
      '@webassemblyjs/utf8': 1.11.6
    dev: true
  /@webassemblyjs/wast-printer@1.11.6:
    resolution: {integrity: sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==, tarball: https://registry.npmmirror.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz}
    dependencies:
      '@webassemblyjs/ast': 1.11.6
      '@xtuc/long': 4.2.2
    dev: true
  /@xtuc/ieee754@1.2.0:
    resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==, tarball: https://registry.npmmirror.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz}
    dev: true
  /@xtuc/long@4.2.2:
    resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==, tarball: https://registry.npmmirror.com/@xtuc/long/-/long-4.2.2.tgz}
    dev: true
  /acorn-import-assertions@1.9.0(acorn@8.11.2):
    resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==, tarball: https://registry.npmmirror.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz}
    peerDependencies:
      acorn: ^8
    dependencies:
      acorn: 8.11.2
    dev: true
  /acorn@8.11.2:
    resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==, tarball: https://registry.npmmirror.com/acorn/-/acorn-8.11.2.tgz}
    engines: {node: '>=0.4.0'}
    hasBin: true
    dev: true
  /ajv-keywords@3.5.2(ajv@6.12.6):
    resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==, tarball: https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz}
    peerDependencies:
      ajv: ^6.9.1
    dependencies:
      ajv: 6.12.6
    dev: true
  /ajv@6.12.6:
    resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==, tarball: https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz}
    dependencies:
      fast-deep-equal: 3.1.3
      fast-json-stable-stringify: 2.1.0
      json-schema-traverse: 0.4.1
      uri-js: 4.4.1
    dev: true
  /base64-js@1.5.1:
    resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==, tarball: https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz}
    dev: true
  /big.js@5.2.2:
    resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==, tarball: https://registry.npmmirror.com/big.js/-/big.js-5.2.2.tgz}
  /bluebird@3.7.2:
    resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==, tarball: https://registry.npmmirror.com/bluebird/-/bluebird-3.7.2.tgz}
    dev: true
  /browserslist@4.22.1:
    resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==, tarball: https://registry.npmmirror.com/browserslist/-/browserslist-4.22.1.tgz}
    engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
    hasBin: true
    dependencies:
      caniuse-lite: 1.0.30001563
      electron-to-chromium: 1.4.589
      node-releases: 2.0.13
      update-browserslist-db: 1.0.13(browserslist@4.22.1)
    dev: true
  /buffer-from@1.1.2:
    resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==, tarball: https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz}
    dev: true
  /buffer@6.0.3:
    resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==, tarball: https://registry.npmmirror.com/buffer/-/buffer-6.0.3.tgz}
    dependencies:
      base64-js: 1.5.1
      ieee754: 1.2.1
    dev: true
  /caniuse-lite@1.0.30001563:
    resolution: {integrity: sha512-na2WUmOxnwIZtwnFI2CZ/3er0wdNzU7hN+cPYz/z2ajHThnkWjNBOpEPP4n+4r2WPM847JaMotaJE3bnfzjyKw==, tarball: https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001563.tgz}
    dev: true
  /chrome-trace-event@1.0.3:
    resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==, tarball: https://registry.npmmirror.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz}
    engines: {node: '>=6.0'}
    dev: true
  /commander@2.20.3:
    resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==, tarball: https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz}
    dev: true
  /consolidate@0.15.1:
    resolution: {integrity: sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==, tarball: https://registry.npmmirror.com/consolidate/-/consolidate-0.15.1.tgz}
    engines: {node: '>= 0.10.0'}
    deprecated: Please upgrade to consolidate v1.0.0+ as it has been modernized with several long-awaited fixes implemented. Maintenance is supported by Forward Email at https://forwardemail.net ; follow/watch https://github.com/ladjs/consolidate for updates and release changelog
    peerDependencies:
      arc-templates: ^0.5.3
      atpl: '>=0.7.6'
      babel-core: ^6.26.3
      bracket-template: ^1.1.5
      coffee-script: ^1.12.7
      dot: ^1.1.3
      dust: ^0.3.0
      dustjs-helpers: ^1.7.4
      dustjs-linkedin: ^2.7.5
      eco: ^1.1.0-rc-3
      ect: ^0.5.9
      ejs: ^3.1.5
      haml-coffee: ^1.14.1
      hamlet: ^0.3.3
      hamljs: ^0.6.2
      handlebars: ^4.7.6
      hogan.js: ^3.0.2
      htmling: ^0.0.8
      jade: ^1.11.0
      jazz: ^0.0.18
      jqtpl: ~1.1.0
      just: ^0.1.8
      liquid-node: ^3.0.1
      liquor: ^0.0.5
      lodash: ^4.17.20
      marko: ^3.14.4
      mote: ^0.2.0
      mustache: ^3.0.0
      nunjucks: ^3.2.2
      plates: ~0.4.11
      pug: ^3.0.0
      qejs: ^3.0.5
      ractive: ^1.3.12
      razor-tmpl: ^1.3.1
      react: ^16.13.1
      react-dom: ^16.13.1
      slm: ^2.0.0
      squirrelly: ^5.1.0
      swig: ^1.4.2
      swig-templates: ^2.0.3
      teacup: ^2.0.0
      templayed: '>=0.2.3'
      then-jade: '*'
      then-pug: '*'
      tinyliquid: ^0.2.34
      toffee: ^0.3.6
      twig: ^1.15.2
      twing: ^5.0.2
      underscore: ^1.11.0
      vash: ^0.13.0
      velocityjs: ^2.0.1
      walrus: ^0.10.1
      whiskers: ^0.4.0
    peerDependenciesMeta:
      arc-templates:
        optional: true
      atpl:
        optional: true
      babel-core:
        optional: true
      bracket-template:
        optional: true
      coffee-script:
        optional: true
      dot:
        optional: true
      dust:
        optional: true
      dustjs-helpers:
        optional: true
      dustjs-linkedin:
        optional: true
      eco:
        optional: true
      ect:
        optional: true
      ejs:
        optional: true
      haml-coffee:
        optional: true
      hamlet:
        optional: true
      hamljs:
        optional: true
      handlebars:
        optional: true
      hogan.js:
        optional: true
      htmling:
        optional: true
      jade:
        optional: true
      jazz:
        optional: true
      jqtpl:
        optional: true
      just:
        optional: true
      liquid-node:
        optional: true
      liquor:
        optional: true
      lodash:
        optional: true
      marko:
        optional: true
      mote:
        optional: true
      mustache:
        optional: true
      nunjucks:
        optional: true
      plates:
        optional: true
      pug:
        optional: true
      qejs:
        optional: true
      ractive:
        optional: true
      razor-tmpl:
        optional: true
      react:
        optional: true
      react-dom:
        optional: true
      slm:
        optional: true
      squirrelly:
        optional: true
      swig:
        optional: true
      swig-templates:
        optional: true
      teacup:
        optional: true
      templayed:
        optional: true
      then-jade:
        optional: true
      then-pug:
        optional: true
      tinyliquid:
        optional: true
      toffee:
        optional: true
      twig:
        optional: true
      twing:
        optional: true
      underscore:
        optional: true
      vash:
        optional: true
      velocityjs:
        optional: true
      walrus:
        optional: true
      whiskers:
        optional: true
    dependencies:
      bluebird: 3.7.2
    dev: true
  /cssesc@3.0.0:
    resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==, tarball: https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz}
    engines: {node: '>=4'}
    hasBin: true
    dev: true
  /electron-to-chromium@1.4.589:
    resolution: {integrity: sha512-zF6y5v/YfoFIgwf2dDfAqVlPPsyQeWNpEWXbAlDUS8Ax4Z2VoiiZpAPC0Jm9hXEkJm2vIZpwB6rc4KnLTQffbQ==, tarball: https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.589.tgz}
    dev: true
  /emojis-list@3.0.0:
    resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==, tarball: https://registry.npmmirror.com/emojis-list/-/emojis-list-3.0.0.tgz}
    engines: {node: '>= 4'}
  /enhanced-resolve@5.15.0:
    resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==, tarball: https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz}
    engines: {node: '>=10.13.0'}
    dependencies:
      graceful-fs: 4.2.11
      tapable: 2.2.1
    dev: true
  /errno@0.1.8:
    resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==, tarball: https://registry.npmmirror.com/errno/-/errno-0.1.8.tgz}
    hasBin: true
    requiresBuild: true
    dependencies:
      prr: registry.npmmirror.com/prr@1.0.1
    optional: true
  /es-module-lexer@1.4.1:
    resolution: {integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==, tarball: https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-1.4.1.tgz}
    dev: true
  /esbuild-android-64@0.14.54:
    resolution: {integrity: sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz}
    engines: {node: '>=12'}
    cpu: [x64]
    os: [android]
    requiresBuild: true
    dev: true
    optional: true
  /esbuild-android-arm64@0.14.54:
    resolution: {integrity: sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz}
    engines: {node: '>=12'}
    cpu: [arm64]
    os: [android]
    requiresBuild: true
    dev: true
    optional: true
  /esbuild-darwin-64@0.14.54:
    resolution: {integrity: sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz}
    engines: {node: '>=12'}
    cpu: [x64]
    os: [darwin]
    requiresBuild: true
    dev: true
    optional: true
  /esbuild-darwin-arm64@0.14.54:
    resolution: {integrity: sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz}
    engines: {node: '>=12'}
    cpu: [arm64]
    os: [darwin]
    requiresBuild: true
    dev: true
    optional: true
  /esbuild-freebsd-64@0.14.54:
    resolution: {integrity: sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz}
    engines: {node: '>=12'}
    cpu: [x64]
    os: [freebsd]
    requiresBuild: true
    dev: true
    optional: true
  /esbuild-freebsd-arm64@0.14.54:
    resolution: {integrity: sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz}
    engines: {node: '>=12'}
    cpu: [arm64]
    os: [freebsd]
    requiresBuild: true
    dev: true
    optional: true
  /esbuild-linux-32@0.14.54:
    resolution: {integrity: sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz}
    engines: {node: '>=12'}
    cpu: [ia32]
    os: [linux]
    requiresBuild: true
    dev: true
    optional: true
  /esbuild-linux-64@0.14.54:
    resolution: {integrity: sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz}
    engines: {node: '>=12'}
    cpu: [x64]
    os: [linux]
    requiresBuild: true
    dev: true
    optional: true
  /esbuild-linux-arm64@0.14.54:
    resolution: {integrity: sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz}
    engines: {node: '>=12'}
    cpu: [arm64]
    os: [linux]
    requiresBuild: true
    dev: true
    optional: true
  /esbuild-linux-arm@0.14.54:
    resolution: {integrity: sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz}
    engines: {node: '>=12'}
    cpu: [arm]
    os: [linux]
    requiresBuild: true
    dev: true
    optional: true
  /esbuild-linux-mips64le@0.14.54:
    resolution: {integrity: sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz}
    engines: {node: '>=12'}
    cpu: [mips64el]
    os: [linux]
    requiresBuild: true
    dev: true
    optional: true
  /esbuild-linux-ppc64le@0.14.54:
    resolution: {integrity: sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz}
    engines: {node: '>=12'}
    cpu: [ppc64]
    os: [linux]
    requiresBuild: true
    dev: true
    optional: true
  /esbuild-linux-riscv64@0.14.54:
    resolution: {integrity: sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz}
    engines: {node: '>=12'}
    cpu: [riscv64]
    os: [linux]
    requiresBuild: true
    dev: true
    optional: true
  /esbuild-linux-s390x@0.14.54:
    resolution: {integrity: sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz}
    engines: {node: '>=12'}
    cpu: [s390x]
    os: [linux]
    requiresBuild: true
    dev: true
    optional: true
  /esbuild-netbsd-64@0.14.54:
    resolution: {integrity: sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz}
    engines: {node: '>=12'}
    cpu: [x64]
    os: [netbsd]
    requiresBuild: true
    dev: true
    optional: true
  /esbuild-openbsd-64@0.14.54:
    resolution: {integrity: sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz}
    engines: {node: '>=12'}
    cpu: [x64]
    os: [openbsd]
    requiresBuild: true
    dev: true
    optional: true
  /esbuild-sunos-64@0.14.54:
    resolution: {integrity: sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz}
    engines: {node: '>=12'}
    cpu: [x64]
    os: [sunos]
    requiresBuild: true
    dev: true
    optional: true
  /esbuild-windows-32@0.14.54:
    resolution: {integrity: sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz}
    engines: {node: '>=12'}
    cpu: [ia32]
    os: [win32]
    requiresBuild: true
    dev: true
    optional: true
  /esbuild-windows-64@0.14.54:
    resolution: {integrity: sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz}
    engines: {node: '>=12'}
    cpu: [x64]
    os: [win32]
    requiresBuild: true
    dev: true
    optional: true
  /esbuild-windows-arm64@0.14.54:
    resolution: {integrity: sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz}
    engines: {node: '>=12'}
    cpu: [arm64]
    os: [win32]
    requiresBuild: true
    dev: true
    optional: true
  /escalade@3.1.1:
    resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==, tarball: https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz}
    engines: {node: '>=6'}
    dev: true
  /eslint-scope@5.1.1:
    resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==, tarball: https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz}
    engines: {node: '>=8.0.0'}
    dependencies:
      esrecurse: 4.3.0
      estraverse: 4.3.0
    dev: true
  /esrecurse@4.3.0:
    resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==, tarball: https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz}
    engines: {node: '>=4.0'}
    dependencies:
      estraverse: 5.3.0
    dev: true
  /estraverse@4.3.0:
    resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==, tarball: https://registry.npmmirror.com/estraverse/-/estraverse-4.3.0.tgz}
    engines: {node: '>=4.0'}
    dev: true
  /estraverse@5.3.0:
    resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==, tarball: https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz}
    engines: {node: '>=4.0'}
    dev: true
  /events@3.3.0:
    resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==, tarball: https://registry.npmmirror.com/events/-/events-3.3.0.tgz}
    engines: {node: '>=0.8.x'}
    dev: true
  /fast-deep-equal@3.1.3:
    resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, tarball: https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz}
    dev: true
  /fast-json-stable-stringify@2.1.0:
    resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==, tarball: https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz}
    dev: true
  /fsevents@2.3.3:
    resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==, tarball: https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz}
    engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
    os: [darwin]
    requiresBuild: true
    optional: true
  /glob-to-regexp@0.4.1:
    resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==, tarball: https://registry.npmmirror.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz}
    dev: true
  /graceful-fs@4.2.11:
    resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz}
  /has-flag@4.0.0:
    resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==, tarball: https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz}
    engines: {node: '>=8'}
    dev: true
  /hash-sum@1.0.2:
    resolution: {integrity: sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==, tarball: https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz}
    dev: true
  /ieee754@1.2.1:
    resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==, tarball: https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz}
    dev: true
  /image-size@0.5.5:
    resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==, tarball: https://registry.npmmirror.com/image-size/-/image-size-0.5.5.tgz}
    engines: {node: '>=0.10.0'}
    hasBin: true
  /indexof@0.0.1:
    resolution: {integrity: sha512-i0G7hLJ1z0DE8dsqJa2rycj9dBmNKgXBvotXtZYXakU9oivfB9Uj2ZBC27qqef2U58/ZLwalxa1X/RDCdkHtVg==, tarball: https://registry.npmmirror.com/indexof/-/indexof-0.0.1.tgz}
    dev: true
  /jest-worker@27.5.1:
    resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==, tarball: https://registry.npmmirror.com/jest-worker/-/jest-worker-27.5.1.tgz}
    engines: {node: '>= 10.13.0'}
    dependencies:
      '@types/node': 20.9.2
      merge-stream: 2.0.0
      supports-color: 8.1.1
    dev: true
  /js-tokens@4.0.0:
    resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, tarball: https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz}
    dev: true
  /json-parse-even-better-errors@2.3.1:
    resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==, tarball: https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz}
    dev: true
  /json-schema-traverse@0.4.1:
    resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==, tarball: https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz}
    dev: true
  /json5@1.0.2:
    resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==, tarball: https://registry.npmmirror.com/json5/-/json5-1.0.2.tgz}
    hasBin: true
    dependencies:
      minimist: 1.2.8
  /json5@2.2.3:
    resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==, tarball: https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz}
    engines: {node: '>=6'}
    hasBin: true
    dev: true
  /loader-runner@4.3.0:
    resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==, tarball: https://registry.npmmirror.com/loader-runner/-/loader-runner-4.3.0.tgz}
    engines: {node: '>=6.11.5'}
    dev: true
  /loader-utils@1.4.2:
    resolution: {integrity: sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==, tarball: https://registry.npmmirror.com/loader-utils/-/loader-utils-1.4.2.tgz}
    engines: {node: '>=4.0.0'}
    dependencies:
      big.js: 5.2.2
      emojis-list: 3.0.0
      json5: 1.0.2
    dev: true
  /loose-envify@1.4.0:
    resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==, tarball: https://registry.npmmirror.com/loose-envify/-/loose-envify-1.4.0.tgz}
    hasBin: true
    dependencies:
      js-tokens: 4.0.0
    dev: true
  /lru-cache@4.1.5:
    resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==, tarball: https://registry.npmmirror.com/lru-cache/-/lru-cache-4.1.5.tgz}
    dependencies:
      pseudomap: 1.0.2
      yallist: 2.1.2
    dev: true
  /make-dir@2.1.0:
    resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==, tarball: https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz}
    engines: {node: '>=6'}
    requiresBuild: true
    dependencies:
      pify: registry.npmmirror.com/pify@4.0.1
      semver: registry.npmmirror.com/semver@5.7.2
    optional: true
  /make-dir@3.1.0:
    resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==, tarball: https://registry.npmmirror.com/make-dir/-/make-dir-3.1.0.tgz}
    engines: {node: '>=8'}
    dependencies:
      semver: registry.npmmirror.com/semver@6.3.1
    dev: true
  /merge-source-map@1.1.0:
    resolution: {integrity: sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==, tarball: https://registry.npmmirror.com/merge-source-map/-/merge-source-map-1.1.0.tgz}
    dependencies:
      source-map: 0.6.1
    dev: true
  /merge-stream@2.0.0:
    resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==, tarball: https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz}
    dev: true
  /mime-db@1.52.0:
    resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==, tarball: https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz}
    engines: {node: '>= 0.6'}
    dev: true
  /mime-types@2.1.35:
    resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==, tarball: https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz}
    engines: {node: '>= 0.6'}
    dependencies:
      mime-db: 1.52.0
    dev: true
  /mime@1.2.11:
    resolution: {integrity: sha512-Ysa2F/nqTNGHhhm9MV8ure4+Hc+Y8AWiqUdHxsO7xu8zc92ND9f3kpALHjaP026Ft17UfxrMt95c50PLUeynBw==, tarball: https://registry.npmmirror.com/mime/-/mime-1.2.11.tgz}
    dev: true
  /mime@1.6.0:
    resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==, tarball: https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz}
    engines: {node: '>=4'}
    hasBin: true
  /minimist@1.2.8:
    resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==, tarball: https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz}
  /needle@3.2.0:
    resolution: {integrity: sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==, tarball: https://registry.npmmirror.com/needle/-/needle-3.2.0.tgz}
    engines: {node: '>= 4.4.x'}
    hasBin: true
    requiresBuild: true
    dependencies:
      debug: registry.npmmirror.com/debug@3.2.7
      iconv-lite: registry.npmmirror.com/iconv-lite@0.6.3
      sax: registry.npmmirror.com/sax@1.3.0
    transitivePeerDependencies:
      - supports-color
    optional: true
  /neo-async@2.6.2:
    resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==, tarball: https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz}
    dev: true
  /node-releases@2.0.13:
    resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==, tarball: https://registry.npmmirror.com/node-releases/-/node-releases-2.0.13.tgz}
    dev: true
  /picocolors@0.2.1:
    resolution: {integrity: sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==, tarball: https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz}
    dev: true
  /picocolors@1.0.0:
    resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==, tarball: https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz}
    dev: true
  /postcss-selector-parser@6.0.13:
    resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==, tarball: https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz}
    engines: {node: '>=4'}
    dependencies:
      cssesc: 3.0.0
      util-deprecate: 1.0.2
    dev: true
  /postcss@7.0.39:
    resolution: {integrity: sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==, tarball: https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz}
    engines: {node: '>=6.0.0'}
    dependencies:
      picocolors: 0.2.1
      source-map: 0.6.1
    dev: true
  /prettier@2.8.8:
    resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==, tarball: https://registry.npmmirror.com/prettier/-/prettier-2.8.8.tgz}
    engines: {node: '>=10.13.0'}
    hasBin: true
    requiresBuild: true
    dev: true
    optional: true
  /pseudomap@1.0.2:
    resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==, tarball: https://registry.npmmirror.com/pseudomap/-/pseudomap-1.0.2.tgz}
    dev: true
  /punycode@2.3.1:
    resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==, tarball: https://registry.npmmirror.com/punycode/-/punycode-2.3.1.tgz}
    engines: {node: '>=6'}
    dev: true
  /randombytes@2.1.0:
    resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==, tarball: https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz}
    dependencies:
      safe-buffer: 5.2.1
    dev: true
  /safe-buffer@5.2.1:
    resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==, tarball: https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz}
    dev: true
  /schema-utils@3.3.0:
    resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==, tarball: https://registry.npmmirror.com/schema-utils/-/schema-utils-3.3.0.tgz}
    engines: {node: '>= 10.13.0'}
    dependencies:
      '@types/json-schema': 7.0.15
      ajv: 6.12.6
      ajv-keywords: 3.5.2(ajv@6.12.6)
    dev: true
  /serialize-javascript@6.0.1:
    resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==, tarball: https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz}
    dependencies:
      randombytes: 2.1.0
    dev: true
  /source-map-support@0.5.21:
    resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==, tarball: https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz}
    dependencies:
      buffer-from: 1.1.2
      source-map: 0.6.1
    dev: true
  /source-map@0.5.7:
    resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==, tarball: https://registry.npmmirror.com/source-map/-/source-map-0.5.7.tgz}
    engines: {node: '>=0.10.0'}
  /source-map@0.6.1:
    resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, tarball: https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz}
    engines: {node: '>=0.10.0'}
  /supports-color@8.1.1:
    resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==, tarball: https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz}
    engines: {node: '>=10'}
    dependencies:
      has-flag: 4.0.0
    dev: true
  /tapable@2.2.1:
    resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==, tarball: https://registry.npmmirror.com/tapable/-/tapable-2.2.1.tgz}
    engines: {node: '>=6'}
    dev: true
  /terser-webpack-plugin@5.3.9(webpack@5.89.0):
    resolution: {integrity: sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==, tarball: https://registry.npmmirror.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz}
    engines: {node: '>= 10.13.0'}
    peerDependencies:
      '@swc/core': '*'
      esbuild: '*'
      uglify-js: '*'
      webpack: ^5.1.0
    peerDependenciesMeta:
      '@swc/core':
        optional: true
      esbuild:
        optional: true
      uglify-js:
        optional: true
    dependencies:
      '@jridgewell/trace-mapping': 0.3.20
      jest-worker: 27.5.1
      schema-utils: 3.3.0
      serialize-javascript: 6.0.1
      terser: 5.24.0
      webpack: 5.89.0
    dev: true
  /terser@5.24.0:
    resolution: {integrity: sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==, tarball: https://registry.npmmirror.com/terser/-/terser-5.24.0.tgz}
    engines: {node: '>=10'}
    hasBin: true
    dependencies:
      '@jridgewell/source-map': 0.3.5
      acorn: 8.11.2
      commander: 2.20.3
      source-map-support: 0.5.21
    dev: true
  /undici-types@5.26.5:
    resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==, tarball: https://registry.npmmirror.com/undici-types/-/undici-types-5.26.5.tgz}
    dev: true
  /update-browserslist-db@1.0.13(browserslist@4.22.1):
    resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==, tarball: https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz}
    hasBin: true
    peerDependencies:
      browserslist: '>= 4.21.0'
    dependencies:
      browserslist: 4.22.1
      escalade: 3.1.1
      picocolors: 1.0.0
    dev: true
  /uri-js@4.4.1:
    resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, tarball: https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz}
    dependencies:
      punycode: 2.3.1
    dev: true
  /util-deprecate@1.0.2:
    resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==, tarball: https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz}
  /vue-clickaway@2.2.2(vue@2.7.15):
    resolution: {integrity: sha512-25SpjXKetL06GLYoLoC8pqAV6Cur9cQ//2g35GRFBV4FgoljbZZjTINR8g2NuVXXDMLSUXaKx5dutgO4PaDE7A==, tarball: https://registry.npmmirror.com/vue-clickaway/-/vue-clickaway-2.2.2.tgz}
    peerDependencies:
      vue: ^2.0.0
    dependencies:
      loose-envify: 1.4.0
      vue: registry.npmmirror.com/vue@2.7.15
    dev: true
  /vue-hot-reload-api@2.3.4:
    resolution: {integrity: sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==, tarball: https://registry.npmmirror.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz}
    dev: true
  /vue-loader@15.11.1(css-loader@6.8.1)(vue-template-compiler@2.7.15)(webpack@5.89.0):
    resolution: {integrity: sha512-0iw4VchYLePqJfJu9s62ACWUXeSqM30SQqlIftbYWM3C+jpPcEHKSPUZBLjSF9au4HTHQ/naF6OGnO3Q/qGR3Q==, tarball: https://registry.npmmirror.com/vue-loader/-/vue-loader-15.11.1.tgz}
    peerDependencies:
      '@vue/compiler-sfc': ^3.0.8
      cache-loader: '*'
      css-loader: '*'
      prettier: '*'
      vue-template-compiler: '*'
      webpack: ^3.0.0 || ^4.1.0 || ^5.0.0-0
    peerDependenciesMeta:
      '@vue/compiler-sfc':
        optional: true
      cache-loader:
        optional: true
      prettier:
        optional: true
      vue-template-compiler:
        optional: true
    dependencies:
      '@vue/component-compiler-utils': 3.3.0
      css-loader: registry.npmmirror.com/css-loader@6.8.1(webpack@5.89.0)
      hash-sum: 1.0.2
      loader-utils: 1.4.2
      vue-hot-reload-api: 2.3.4
      vue-style-loader: 4.1.3
      vue-template-compiler: registry.npmmirror.com/vue-template-compiler@2.7.15
      webpack: registry.npmmirror.com/webpack@5.89.0
    transitivePeerDependencies:
      - arc-templates
      - atpl
      - babel-core
      - bracket-template
      - coffee-script
      - dot
      - dust
      - dustjs-helpers
      - dustjs-linkedin
      - eco
      - ect
      - ejs
      - haml-coffee
      - hamlet
      - hamljs
      - handlebars
      - hogan.js
      - htmling
      - jade
      - jazz
      - jqtpl
      - just
      - liquid-node
      - liquor
      - lodash
      - marko
      - mote
      - mustache
      - nunjucks
      - plates
      - pug
      - qejs
      - ractive
      - razor-tmpl
      - react
      - react-dom
      - slm
      - squirrelly
      - swig
      - swig-templates
      - teacup
      - templayed
      - then-jade
      - then-pug
      - tinyliquid
      - toffee
      - twig
      - twing
      - underscore
      - vash
      - velocityjs
      - walrus
      - whiskers
    dev: true
  /vue-style-loader@4.1.3:
    resolution: {integrity: sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==, tarball: https://registry.npmmirror.com/vue-style-loader/-/vue-style-loader-4.1.3.tgz}
    dependencies:
      hash-sum: 1.0.2
      loader-utils: 1.4.2
    dev: true
  /vue-template-es2015-compiler@1.9.1:
    resolution: {integrity: sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==, tarball: https://registry.npmmirror.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz}
    dev: true
  /watchpack@2.4.0:
    resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==, tarball: https://registry.npmmirror.com/watchpack/-/watchpack-2.4.0.tgz}
    engines: {node: '>=10.13.0'}
    dependencies:
      glob-to-regexp: 0.4.1
      graceful-fs: 4.2.11
    dev: true
  /webpack-sources@3.2.3:
    resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==, tarball: https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz}
    engines: {node: '>=10.13.0'}
    dev: true
  /webpack@5.89.0:
    resolution: {integrity: sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==, tarball: https://registry.npmmirror.com/webpack/-/webpack-5.89.0.tgz}
    engines: {node: '>=10.13.0'}
    hasBin: true
    peerDependencies:
      webpack-cli: '*'
    peerDependenciesMeta:
      webpack-cli:
        optional: true
    dependencies:
      '@types/eslint-scope': 3.7.7
      '@types/estree': 1.0.5
      '@webassemblyjs/ast': 1.11.6
      '@webassemblyjs/wasm-edit': 1.11.6
      '@webassemblyjs/wasm-parser': 1.11.6
      acorn: 8.11.2
      acorn-import-assertions: 1.9.0(acorn@8.11.2)
      browserslist: 4.22.1
      chrome-trace-event: 1.0.3
      enhanced-resolve: 5.15.0
      es-module-lexer: 1.4.1
      eslint-scope: 5.1.1
      events: 3.3.0
      glob-to-regexp: 0.4.1
      graceful-fs: 4.2.11
      json-parse-even-better-errors: 2.3.1
      loader-runner: 4.3.0
      mime-types: 2.1.35
      neo-async: 2.6.2
      schema-utils: 3.3.0
      tapable: 2.2.1
      terser-webpack-plugin: 5.3.9(webpack@5.89.0)
      watchpack: 2.4.0
      webpack-sources: 3.2.3
    transitivePeerDependencies:
      - '@swc/core'
      - esbuild
      - uglify-js
    dev: true
  /yallist@2.1.2:
    resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==, tarball: https://registry.npmmirror.com/yallist/-/yallist-2.1.2.tgz}
    dev: true
  /yallist@3.1.1:
    resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==, tarball: https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz}
    dev: true
  /yallist@4.0.0:
    resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==, tarball: https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz}
    dev: true
  '@github.com/LearnBoost/node-XMLHttpRequest/archive/0f36d0b5ebc03d85f860d42a64ae9791e1daa433.tar.gz':
    resolution: {tarball: https://github.com/LearnBoost/node-XMLHttpRequest/archive/0f36d0b5ebc03d85f860d42a64ae9791e1daa433.tar.gz}
@@ -127,7 +1646,7 @@
    name: emitter
    version: 1.0.1
    dependencies:
      indexof: registry.npmmirror.com/indexof@0.0.1
      indexof: 0.0.1
    dev: true
  '@github.com/component/global/archive/v2.0.1.tar.gz':
@@ -513,7 +2032,7 @@
    dependencies:
      '@babel/helper-validator-identifier': registry.npmmirror.com/@babel/helper-validator-identifier@7.22.20
      chalk: registry.npmmirror.com/chalk@2.4.2
      js-tokens: registry.npmmirror.com/js-tokens@4.0.0
      js-tokens: 4.0.0
    dev: true
  registry.npmmirror.com/@babel/parser@7.23.4:
@@ -1805,237 +3324,6 @@
    engines: {node: '>=10.0.0'}
    dev: true
  registry.npmmirror.com/@esbuild/android-arm64@0.19.6:
    resolution: {integrity: sha512-KQ/hbe9SJvIJ4sR+2PcZ41IBV+LPJyYp6V1K1P1xcMRup9iYsBoQn4MzE3mhMLOld27Au2eDcLlIREeKGUXpHQ==, tarball: https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.19.6.tgz}
    name: '@esbuild/android-arm64'
    version: 0.19.6
    engines: {node: '>=12'}
    cpu: [arm64]
    os: [android]
    requiresBuild: true
    optional: true
  registry.npmmirror.com/@esbuild/android-arm@0.19.6:
    resolution: {integrity: sha512-muPzBqXJKCbMYoNbb1JpZh/ynl0xS6/+pLjrofcR3Nad82SbsCogYzUE6Aq9QT3cLP0jR/IVK/NHC9b90mSHtg==, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.19.6.tgz}
    name: '@esbuild/android-arm'
    version: 0.19.6
    engines: {node: '>=12'}
    cpu: [arm]
    os: [android]
    requiresBuild: true
    optional: true
  registry.npmmirror.com/@esbuild/android-x64@0.19.6:
    resolution: {integrity: sha512-VVJVZQ7p5BBOKoNxd0Ly3xUM78Y4DyOoFKdkdAe2m11jbh0LEU4bPles4e/72EMl4tapko8o915UalN/5zhspg==, tarball: https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.19.6.tgz}
    name: '@esbuild/android-x64'
    version: 0.19.6
    engines: {node: '>=12'}
    cpu: [x64]
    os: [android]
    requiresBuild: true
    optional: true
  registry.npmmirror.com/@esbuild/darwin-arm64@0.19.6:
    resolution: {integrity: sha512-91LoRp/uZAKx6ESNspL3I46ypwzdqyDLXZH7x2QYCLgtnaU08+AXEbabY2yExIz03/am0DivsTtbdxzGejfXpA==, tarball: https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.6.tgz}
    name: '@esbuild/darwin-arm64'
    version: 0.19.6
    engines: {node: '>=12'}
    cpu: [arm64]
    os: [darwin]
    requiresBuild: true
    optional: true
  registry.npmmirror.com/@esbuild/darwin-x64@0.19.6:
    resolution: {integrity: sha512-QCGHw770ubjBU1J3ZkFJh671MFajGTYMZumPs9E/rqU52md6lIil97BR0CbPq6U+vTh3xnTNDHKRdR8ggHnmxQ==, tarball: https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.19.6.tgz}
    name: '@esbuild/darwin-x64'
    version: 0.19.6
    engines: {node: '>=12'}
    cpu: [x64]
    os: [darwin]
    requiresBuild: true
    optional: true
  registry.npmmirror.com/@esbuild/freebsd-arm64@0.19.6:
    resolution: {integrity: sha512-J53d0jGsDcLzWk9d9SPmlyF+wzVxjXpOH7jVW5ae7PvrDst4kiAz6sX+E8btz0GB6oH12zC+aHRD945jdjF2Vg==, tarball: https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.6.tgz}
    name: '@esbuild/freebsd-arm64'
    version: 0.19.6
    engines: {node: '>=12'}
    cpu: [arm64]
    os: [freebsd]
    requiresBuild: true
    optional: true
  registry.npmmirror.com/@esbuild/freebsd-x64@0.19.6:
    resolution: {integrity: sha512-hn9qvkjHSIB5Z9JgCCjED6YYVGCNpqB7dEGavBdG6EjBD8S/UcNUIlGcB35NCkMETkdYwfZSvD9VoDJX6VeUVA==, tarball: https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.6.tgz}
    name: '@esbuild/freebsd-x64'
    version: 0.19.6
    engines: {node: '>=12'}
    cpu: [x64]
    os: [freebsd]
    requiresBuild: true
    optional: true
  registry.npmmirror.com/@esbuild/linux-arm64@0.19.6:
    resolution: {integrity: sha512-HQCOrk9XlH3KngASLaBfHpcoYEGUt829A9MyxaI8RMkfRA8SakG6YQEITAuwmtzFdEu5GU4eyhKcpv27dFaOBg==, tarball: https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.19.6.tgz}
    name: '@esbuild/linux-arm64'
    version: 0.19.6
    engines: {node: '>=12'}
    cpu: [arm64]
    os: [linux]
    requiresBuild: true
    optional: true
  registry.npmmirror.com/@esbuild/linux-arm@0.19.6:
    resolution: {integrity: sha512-G8IR5zFgpXad/Zp7gr7ZyTKyqZuThU6z1JjmRyN1vSF8j0bOlGzUwFSMTbctLAdd7QHpeyu0cRiuKrqK1ZTwvQ==, tarball: https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.19.6.tgz}
    name: '@esbuild/linux-arm'
    version: 0.19.6
    engines: {node: '>=12'}
    cpu: [arm]
    os: [linux]
    requiresBuild: true
    optional: true
  registry.npmmirror.com/@esbuild/linux-ia32@0.19.6:
    resolution: {integrity: sha512-22eOR08zL/OXkmEhxOfshfOGo8P69k8oKHkwkDrUlcB12S/sw/+COM4PhAPT0cAYW/gpqY2uXp3TpjQVJitz7w==, tarball: https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.19.6.tgz}
    name: '@esbuild/linux-ia32'
    version: 0.19.6
    engines: {node: '>=12'}
    cpu: [ia32]
    os: [linux]
    requiresBuild: true
    optional: true
  registry.npmmirror.com/@esbuild/linux-loong64@0.14.54:
    resolution: {integrity: sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz}
    name: '@esbuild/linux-loong64'
    version: 0.14.54
    engines: {node: '>=12'}
    cpu: [loong64]
    os: [linux]
    requiresBuild: true
    dev: true
    optional: true
  registry.npmmirror.com/@esbuild/linux-loong64@0.19.6:
    resolution: {integrity: sha512-82RvaYAh/SUJyjWA8jDpyZCHQjmEggL//sC7F3VKYcBMumQjUL3C5WDl/tJpEiKtt7XrWmgjaLkrk205zfvwTA==, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.19.6.tgz}
    name: '@esbuild/linux-loong64'
    version: 0.19.6
    engines: {node: '>=12'}
    cpu: [loong64]
    os: [linux]
    requiresBuild: true
    optional: true
  registry.npmmirror.com/@esbuild/linux-mips64el@0.19.6:
    resolution: {integrity: sha512-8tvnwyYJpR618vboIv2l8tK2SuK/RqUIGMfMENkeDGo3hsEIrpGldMGYFcWxWeEILe5Fi72zoXLmhZ7PR23oQA==, tarball: https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.6.tgz}
    name: '@esbuild/linux-mips64el'
    version: 0.19.6
    engines: {node: '>=12'}
    cpu: [mips64el]
    os: [linux]
    requiresBuild: true
    optional: true
  registry.npmmirror.com/@esbuild/linux-ppc64@0.19.6:
    resolution: {integrity: sha512-Qt+D7xiPajxVNk5tQiEJwhmarNnLPdjXAoA5uWMpbfStZB0+YU6a3CtbWYSy+sgAsnyx4IGZjWsTzBzrvg/fMA==, tarball: https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.6.tgz}
    name: '@esbuild/linux-ppc64'
    version: 0.19.6
    engines: {node: '>=12'}
    cpu: [ppc64]
    os: [linux]
    requiresBuild: true
    optional: true
  registry.npmmirror.com/@esbuild/linux-riscv64@0.19.6:
    resolution: {integrity: sha512-lxRdk0iJ9CWYDH1Wpnnnc640ajF4RmQ+w6oHFZmAIYu577meE9Ka/DCtpOrwr9McMY11ocbp4jirgGgCi7Ls/g==, tarball: https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.6.tgz}
    name: '@esbuild/linux-riscv64'
    version: 0.19.6
    engines: {node: '>=12'}
    cpu: [riscv64]
    os: [linux]
    requiresBuild: true
    optional: true
  registry.npmmirror.com/@esbuild/linux-s390x@0.19.6:
    resolution: {integrity: sha512-MopyYV39vnfuykHanRWHGRcRC3AwU7b0QY4TI8ISLfAGfK+tMkXyFuyT1epw/lM0pflQlS53JoD22yN83DHZgA==, tarball: https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.19.6.tgz}
    name: '@esbuild/linux-s390x'
    version: 0.19.6
    engines: {node: '>=12'}
    cpu: [s390x]
    os: [linux]
    requiresBuild: true
    optional: true
  registry.npmmirror.com/@esbuild/linux-x64@0.19.6:
    resolution: {integrity: sha512-UWcieaBzsN8WYbzFF5Jq7QULETPcQvlX7KL4xWGIB54OknXJjBO37sPqk7N82WU13JGWvmDzFBi1weVBajPovg==, tarball: https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.19.6.tgz}
    name: '@esbuild/linux-x64'
    version: 0.19.6
    engines: {node: '>=12'}
    cpu: [x64]
    os: [linux]
    requiresBuild: true
    optional: true
  registry.npmmirror.com/@esbuild/netbsd-x64@0.19.6:
    resolution: {integrity: sha512-EpWiLX0fzvZn1wxtLxZrEW+oQED9Pwpnh+w4Ffv8ZLuMhUoqR9q9rL4+qHW8F4Mg5oQEKxAoT0G+8JYNqCiR6g==, tarball: https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.6.tgz}
    name: '@esbuild/netbsd-x64'
    version: 0.19.6
    engines: {node: '>=12'}
    cpu: [x64]
    os: [netbsd]
    requiresBuild: true
    optional: true
  registry.npmmirror.com/@esbuild/openbsd-x64@0.19.6:
    resolution: {integrity: sha512-fFqTVEktM1PGs2sLKH4M5mhAVEzGpeZJuasAMRnvDZNCV0Cjvm1Hu35moL2vC0DOrAQjNTvj4zWrol/lwQ8Deg==, tarball: https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.6.tgz}
    name: '@esbuild/openbsd-x64'
    version: 0.19.6
    engines: {node: '>=12'}
    cpu: [x64]
    os: [openbsd]
    requiresBuild: true
    optional: true
  registry.npmmirror.com/@esbuild/sunos-x64@0.19.6:
    resolution: {integrity: sha512-M+XIAnBpaNvaVAhbe3uBXtgWyWynSdlww/JNZws0FlMPSBy+EpatPXNIlKAdtbFVII9OpX91ZfMb17TU3JKTBA==, tarball: https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.19.6.tgz}
    name: '@esbuild/sunos-x64'
    version: 0.19.6
    engines: {node: '>=12'}
    cpu: [x64]
    os: [sunos]
    requiresBuild: true
    optional: true
  registry.npmmirror.com/@esbuild/win32-arm64@0.19.6:
    resolution: {integrity: sha512-2DchFXn7vp/B6Tc2eKdTsLzE0ygqKkNUhUBCNtMx2Llk4POIVMUq5rUYjdcedFlGLeRe1uLCpVvCmE+G8XYybA==, tarball: https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.19.6.tgz}
    name: '@esbuild/win32-arm64'
    version: 0.19.6
    engines: {node: '>=12'}
    cpu: [arm64]
    os: [win32]
    requiresBuild: true
    optional: true
  registry.npmmirror.com/@esbuild/win32-ia32@0.19.6:
    resolution: {integrity: sha512-PBo/HPDQllyWdjwAVX+Gl2hH0dfBydL97BAH/grHKC8fubqp02aL4S63otZ25q3sBdINtOBbz1qTZQfXbP4VBg==, tarball: https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.19.6.tgz}
    name: '@esbuild/win32-ia32'
    version: 0.19.6
    engines: {node: '>=12'}
    cpu: [ia32]
    os: [win32]
    requiresBuild: true
    optional: true
  registry.npmmirror.com/@esbuild/win32-x64@0.19.6:
    resolution: {integrity: sha512-OE7yIdbDif2kKfrGa+V0vx/B3FJv2L4KnIiLlvtibPyO9UkgO3rzYE0HhpREo2vmJ1Ixq1zwm9/0er+3VOSZJA==, tarball: https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.19.6.tgz}
    name: '@esbuild/win32-x64'
    version: 0.19.6
    engines: {node: '>=12'}
    cpu: [x64]
    os: [win32]
    requiresBuild: true
    optional: true
  registry.npmmirror.com/@eslint/eslintrc@0.4.3:
    resolution: {integrity: sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==, tarball: https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz}
    name: '@eslint/eslintrc'
@@ -2235,118 +3523,6 @@
      estree-walker: registry.npmmirror.com/estree-walker@2.0.2
      picomatch: registry.npmmirror.com/picomatch@2.3.1
    dev: true
  registry.npmmirror.com/@rollup/rollup-android-arm-eabi@4.5.0:
    resolution: {integrity: sha512-OINaBGY+Wc++U0rdr7BLuFClxcoWaVW3vQYqmQq6B3bqQ/2olkaoz+K8+af/Mmka/C2yN5j+L9scBkv4BtKsDA==, tarball: https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.5.0.tgz}
    name: '@rollup/rollup-android-arm-eabi'
    version: 4.5.0
    cpu: [arm]
    os: [android]
    requiresBuild: true
    optional: true
  registry.npmmirror.com/@rollup/rollup-android-arm64@4.5.0:
    resolution: {integrity: sha512-UdMf1pOQc4ZmUA/NTmKhgJTBimbSKnhPS2zJqucqFyBRFPnPDtwA8MzrGNTjDeQbIAWfpJVAlxejw+/lQyBK/w==, tarball: https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.5.0.tgz}
    name: '@rollup/rollup-android-arm64'
    version: 4.5.0
    cpu: [arm64]
    os: [android]
    requiresBuild: true
    optional: true
  registry.npmmirror.com/@rollup/rollup-darwin-arm64@4.5.0:
    resolution: {integrity: sha512-L0/CA5p/idVKI+c9PcAPGorH6CwXn6+J0Ys7Gg1axCbTPgI8MeMlhA6fLM9fK+ssFhqogMHFC8HDvZuetOii7w==, tarball: https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.5.0.tgz}
    name: '@rollup/rollup-darwin-arm64'
    version: 4.5.0
    cpu: [arm64]
    os: [darwin]
    requiresBuild: true
    optional: true
  registry.npmmirror.com/@rollup/rollup-darwin-x64@4.5.0:
    resolution: {integrity: sha512-QZCbVqU26mNlLn8zi/XDDquNmvcr4ON5FYAHQQsyhrHx8q+sQi/6xduoznYXwk/KmKIXG5dLfR0CvY+NAWpFYQ==, tarball: https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.5.0.tgz}
    name: '@rollup/rollup-darwin-x64'
    version: 4.5.0
    cpu: [x64]
    os: [darwin]
    requiresBuild: true
    optional: true
  registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf@4.5.0:
    resolution: {integrity: sha512-VpSQ+xm93AeV33QbYslgf44wc5eJGYfYitlQzAi3OObu9iwrGXEnmu5S3ilkqE3Pr/FkgOiJKV/2p0ewf4Hrtg==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.5.0.tgz}
    name: '@rollup/rollup-linux-arm-gnueabihf'
    version: 4.5.0
    cpu: [arm]
    os: [linux]
    requiresBuild: true
    optional: true
  registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu@4.5.0:
    resolution: {integrity: sha512-OrEyIfpxSsMal44JpEVx9AEcGpdBQG1ZuWISAanaQTSMeStBW+oHWwOkoqR54bw3x8heP8gBOyoJiGg+fLY8qQ==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.5.0.tgz}
    name: '@rollup/rollup-linux-arm64-gnu'
    version: 4.5.0
    cpu: [arm64]
    os: [linux]
    libc: [glibc]
    requiresBuild: true
    optional: true
  registry.npmmirror.com/@rollup/rollup-linux-arm64-musl@4.5.0:
    resolution: {integrity: sha512-1H7wBbQuE6igQdxMSTjtFfD+DGAudcYWhp106z/9zBA8OQhsJRnemO4XGavdzHpGhRtRxbgmUGdO3YQgrWf2RA==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.5.0.tgz}
    name: '@rollup/rollup-linux-arm64-musl'
    version: 4.5.0
    cpu: [arm64]
    os: [linux]
    libc: [musl]
    requiresBuild: true
    optional: true
  registry.npmmirror.com/@rollup/rollup-linux-x64-gnu@4.5.0:
    resolution: {integrity: sha512-FVyFI13tXw5aE65sZdBpNjPVIi4Q5mARnL/39UIkxvSgRAIqCo5sCpCELk0JtXHGee2owZz5aNLbWNfBHzr71Q==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.5.0.tgz}
    name: '@rollup/rollup-linux-x64-gnu'
    version: 4.5.0
    cpu: [x64]
    os: [linux]
    libc: [glibc]
    requiresBuild: true
    optional: true
  registry.npmmirror.com/@rollup/rollup-linux-x64-musl@4.5.0:
    resolution: {integrity: sha512-eBPYl2sLpH/o8qbSz6vPwWlDyThnQjJfcDOGFbNjmjb44XKC1F5dQfakOsADRVrXCNzM6ZsSIPDG5dc6HHLNFg==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.5.0.tgz}
    name: '@rollup/rollup-linux-x64-musl'
    version: 4.5.0
    cpu: [x64]
    os: [linux]
    libc: [musl]
    requiresBuild: true
    optional: true
  registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc@4.5.0:
    resolution: {integrity: sha512-xaOHIfLOZypoQ5U2I6rEaugS4IYtTgP030xzvrBf5js7p9WI9wik07iHmsKaej8Z83ZDxN5GyypfoyKV5O5TJA==, tarball: https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.5.0.tgz}
    name: '@rollup/rollup-win32-arm64-msvc'
    version: 4.5.0
    cpu: [arm64]
    os: [win32]
    requiresBuild: true
    optional: true
  registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc@4.5.0:
    resolution: {integrity: sha512-Al6quztQUrHwcOoU2TuFblUQ5L+/AmPBXFR6dUvyo4nRj2yQRK0WIUaGMF/uwKulvRcXkpHe3k9A8Vf93VDktA==, tarball: https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.5.0.tgz}
    name: '@rollup/rollup-win32-ia32-msvc'
    version: 4.5.0
    cpu: [ia32]
    os: [win32]
    requiresBuild: true
    optional: true
  registry.npmmirror.com/@rollup/rollup-win32-x64-msvc@4.5.0:
    resolution: {integrity: sha512-8kdW+brNhI/NzJ4fxDufuJUjepzINqJKLGHuxyAtpPG9bMbn8P5mtaCcbOm0EzLJ+atg+kF9dwg8jpclkVqx5w==, tarball: https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.5.0.tgz}
    name: '@rollup/rollup-win32-x64-msvc'
    version: 4.5.0
    cpu: [x64]
    os: [win32]
    requiresBuild: true
    optional: true
  registry.npmmirror.com/@sideway/address@4.1.4:
    resolution: {integrity: sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==, tarball: https://registry.npmmirror.com/@sideway/address/-/address-4.1.4.tgz}
@@ -2968,7 +4144,7 @@
      '@vue/cli-plugin-vuex': registry.npmmirror.com/@vue/cli-plugin-vuex@5.0.8(@vue/cli-service@5.0.8)
      '@vue/cli-shared-utils': registry.npmmirror.com/@vue/cli-shared-utils@5.0.8
      '@vue/component-compiler-utils': registry.npmmirror.com/@vue/component-compiler-utils@3.3.0
      '@vue/vue-loader-v15': registry.npmmirror.com/vue-loader@15.11.1(css-loader@6.8.1)(vue-template-compiler@2.7.15)(webpack@5.89.0)
      '@vue/vue-loader-v15': /vue-loader@15.11.1(css-loader@6.8.1)(vue-template-compiler@2.7.15)(webpack@5.89.0)
      '@vue/web-component-wrapper': registry.npmmirror.com/@vue/web-component-wrapper@1.3.0
      acorn: registry.npmmirror.com/acorn@8.11.2
      acorn-walk: registry.npmmirror.com/acorn-walk@8.3.0
@@ -3114,7 +4290,7 @@
    dependencies:
      '@babel/parser': registry.npmmirror.com/@babel/parser@7.23.4
      postcss: registry.npmmirror.com/postcss@8.4.31
      source-map: registry.npmmirror.com/source-map@0.6.1
      source-map: 0.6.1
  registry.npmmirror.com/@vue/component-compiler-utils@3.3.0:
    resolution: {integrity: sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ==, tarball: https://registry.npmmirror.com/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz}
@@ -3127,10 +4303,10 @@
      merge-source-map: registry.npmmirror.com/merge-source-map@1.1.0
      postcss: registry.npmmirror.com/postcss@7.0.39
      postcss-selector-parser: registry.npmmirror.com/postcss-selector-parser@6.0.13
      source-map: registry.npmmirror.com/source-map@0.6.1
      source-map: 0.6.1
      vue-template-es2015-compiler: registry.npmmirror.com/vue-template-es2015-compiler@1.9.1
    optionalDependencies:
      prettier: registry.npmmirror.com/prettier@2.8.8
      prettier: 2.8.8
    transitivePeerDependencies:
      - arc-templates
      - atpl
@@ -3857,12 +5033,6 @@
    engines: {node: '>= 0.6.0'}
    dev: true
  registry.npmmirror.com/base64-js@1.5.1:
    resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==, tarball: https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz}
    name: base64-js
    version: 1.5.1
    dev: true
  registry.npmmirror.com/base64id@0.1.0:
    resolution: {integrity: sha512-DSjtfjhAsHl9J4OJj7e4+toV2zqxJrGwVd3CLlsCp8QmicvOn7irG0Mb8brOc/nur3SdO8lIbNlY1s1ZDJdUKQ==, tarball: https://registry.npmmirror.com/base64id/-/base64id-0.1.0.tgz}
    name: base64id
@@ -3903,11 +5073,6 @@
    dependencies:
      callsite: registry.npmmirror.com/callsite@1.0.0
    dev: true
  registry.npmmirror.com/big.js@5.2.2:
    resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==, tarball: https://registry.npmmirror.com/big.js/-/big.js-5.2.2.tgz}
    name: big.js
    version: 5.2.2
  registry.npmmirror.com/binary-extensions@2.2.0:
    resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==, tarball: https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz}
@@ -4181,17 +5346,8 @@
    name: buffer
    version: 5.7.1
    dependencies:
      base64-js: registry.npmmirror.com/base64-js@1.5.1
      ieee754: registry.npmmirror.com/ieee754@1.2.1
    dev: true
  registry.npmmirror.com/buffer@6.0.3:
    resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==, tarball: https://registry.npmmirror.com/buffer/-/buffer-6.0.3.tgz}
    name: buffer
    version: 6.0.3
    dependencies:
      base64-js: registry.npmmirror.com/base64-js@1.5.1
      ieee754: registry.npmmirror.com/ieee754@1.2.1
      base64-js: 1.5.1
      ieee754: 1.2.1
    dev: true
  registry.npmmirror.com/buffercursor@0.0.12:
@@ -4370,7 +5526,7 @@
      normalize-path: registry.npmmirror.com/normalize-path@3.0.0
      readdirp: registry.npmmirror.com/readdirp@3.6.0
    optionalDependencies:
      fsevents: registry.npmmirror.com/fsevents@2.3.3
      fsevents: 2.3.3
    dev: true
  registry.npmmirror.com/chrome-trace-event@1.0.3:
@@ -4412,7 +5568,7 @@
    version: 5.3.2
    engines: {node: '>= 10.0'}
    dependencies:
      source-map: registry.npmmirror.com/source-map@0.6.1
      source-map: 0.6.1
  registry.npmmirror.com/cli-cursor@2.1.0:
    resolution: {integrity: sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==, tarball: https://registry.npmmirror.com/cli-cursor/-/cli-cursor-2.1.0.tgz}
@@ -4843,7 +5999,7 @@
      whiskers:
        optional: true
    dependencies:
      bluebird: registry.npmmirror.com/bluebird@3.7.2
      bluebird: 3.7.2
    dev: true
  registry.npmmirror.com/consolidate@0.16.0:
@@ -5209,7 +6365,7 @@
    name: cross-spawn
    version: 5.1.0
    dependencies:
      lru-cache: registry.npmmirror.com/lru-cache@4.1.5
      lru-cache: 4.1.5
      shebang-command: registry.npmmirror.com/shebang-command@1.2.0
      which: registry.npmmirror.com/which@1.3.1
    dev: true
@@ -5325,7 +6481,7 @@
      postcss: registry.npmmirror.com/postcss@8.4.31
      schema-utils: registry.npmmirror.com/schema-utils@4.2.0
      serialize-javascript: registry.npmmirror.com/serialize-javascript@6.0.1
      source-map: registry.npmmirror.com/source-map@0.6.1
      source-map: 0.6.1
      webpack: registry.npmmirror.com/webpack@5.89.0
    dev: true
@@ -5348,7 +6504,7 @@
    engines: {node: '>=8.0.0'}
    dependencies:
      mdn-data: registry.npmmirror.com/mdn-data@2.0.14
      source-map: registry.npmmirror.com/source-map@0.6.1
      source-map: 0.6.1
    dev: true
  registry.npmmirror.com/css-what@6.1.0:
@@ -5969,12 +7125,6 @@
    version: 8.0.0
    dev: true
  registry.npmmirror.com/emojis-list@3.0.0:
    resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==, tarball: https://registry.npmmirror.com/emojis-list/-/emojis-list-3.0.0.tgz}
    name: emojis-list
    version: 3.0.0
    engines: {node: '>= 4'}
  registry.npmmirror.com/encodeurl@1.0.2:
    resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==, tarball: https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz}
    name: encodeurl
@@ -6045,7 +7195,7 @@
    version: 5.15.0
    engines: {node: '>=10.13.0'}
    dependencies:
      graceful-fs: registry.npmmirror.com/graceful-fs@4.2.11
      graceful-fs: 4.2.11
      tapable: registry.npmmirror.com/tapable@2.2.1
    dev: true
@@ -6068,16 +7218,6 @@
    resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==, tarball: https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz}
    name: entities
    version: 2.2.0
  registry.npmmirror.com/errno@0.1.8:
    resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==, tarball: https://registry.npmmirror.com/errno/-/errno-0.1.8.tgz}
    name: errno
    version: 0.1.8
    hasBin: true
    requiresBuild: true
    dependencies:
      prr: registry.npmmirror.com/prr@1.0.1
    optional: true
  registry.npmmirror.com/error-ex@1.3.2:
    resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==, tarball: https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz}
@@ -6111,226 +7251,6 @@
    version: 1.4.1
    dev: true
  registry.npmmirror.com/esbuild-android-64@0.14.54:
    resolution: {integrity: sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz}
    name: esbuild-android-64
    version: 0.14.54
    engines: {node: '>=12'}
    cpu: [x64]
    os: [android]
    requiresBuild: true
    dev: true
    optional: true
  registry.npmmirror.com/esbuild-android-arm64@0.14.54:
    resolution: {integrity: sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz}
    name: esbuild-android-arm64
    version: 0.14.54
    engines: {node: '>=12'}
    cpu: [arm64]
    os: [android]
    requiresBuild: true
    dev: true
    optional: true
  registry.npmmirror.com/esbuild-darwin-64@0.14.54:
    resolution: {integrity: sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz}
    name: esbuild-darwin-64
    version: 0.14.54
    engines: {node: '>=12'}
    cpu: [x64]
    os: [darwin]
    requiresBuild: true
    dev: true
    optional: true
  registry.npmmirror.com/esbuild-darwin-arm64@0.14.54:
    resolution: {integrity: sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz}
    name: esbuild-darwin-arm64
    version: 0.14.54
    engines: {node: '>=12'}
    cpu: [arm64]
    os: [darwin]
    requiresBuild: true
    dev: true
    optional: true
  registry.npmmirror.com/esbuild-freebsd-64@0.14.54:
    resolution: {integrity: sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz}
    name: esbuild-freebsd-64
    version: 0.14.54
    engines: {node: '>=12'}
    cpu: [x64]
    os: [freebsd]
    requiresBuild: true
    dev: true
    optional: true
  registry.npmmirror.com/esbuild-freebsd-arm64@0.14.54:
    resolution: {integrity: sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz}
    name: esbuild-freebsd-arm64
    version: 0.14.54
    engines: {node: '>=12'}
    cpu: [arm64]
    os: [freebsd]
    requiresBuild: true
    dev: true
    optional: true
  registry.npmmirror.com/esbuild-linux-32@0.14.54:
    resolution: {integrity: sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz}
    name: esbuild-linux-32
    version: 0.14.54
    engines: {node: '>=12'}
    cpu: [ia32]
    os: [linux]
    requiresBuild: true
    dev: true
    optional: true
  registry.npmmirror.com/esbuild-linux-64@0.14.54:
    resolution: {integrity: sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz}
    name: esbuild-linux-64
    version: 0.14.54
    engines: {node: '>=12'}
    cpu: [x64]
    os: [linux]
    requiresBuild: true
    dev: true
    optional: true
  registry.npmmirror.com/esbuild-linux-arm64@0.14.54:
    resolution: {integrity: sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz}
    name: esbuild-linux-arm64
    version: 0.14.54
    engines: {node: '>=12'}
    cpu: [arm64]
    os: [linux]
    requiresBuild: true
    dev: true
    optional: true
  registry.npmmirror.com/esbuild-linux-arm@0.14.54:
    resolution: {integrity: sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz}
    name: esbuild-linux-arm
    version: 0.14.54
    engines: {node: '>=12'}
    cpu: [arm]
    os: [linux]
    requiresBuild: true
    dev: true
    optional: true
  registry.npmmirror.com/esbuild-linux-mips64le@0.14.54:
    resolution: {integrity: sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz}
    name: esbuild-linux-mips64le
    version: 0.14.54
    engines: {node: '>=12'}
    cpu: [mips64el]
    os: [linux]
    requiresBuild: true
    dev: true
    optional: true
  registry.npmmirror.com/esbuild-linux-ppc64le@0.14.54:
    resolution: {integrity: sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz}
    name: esbuild-linux-ppc64le
    version: 0.14.54
    engines: {node: '>=12'}
    cpu: [ppc64]
    os: [linux]
    requiresBuild: true
    dev: true
    optional: true
  registry.npmmirror.com/esbuild-linux-riscv64@0.14.54:
    resolution: {integrity: sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz}
    name: esbuild-linux-riscv64
    version: 0.14.54
    engines: {node: '>=12'}
    cpu: [riscv64]
    os: [linux]
    requiresBuild: true
    dev: true
    optional: true
  registry.npmmirror.com/esbuild-linux-s390x@0.14.54:
    resolution: {integrity: sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz}
    name: esbuild-linux-s390x
    version: 0.14.54
    engines: {node: '>=12'}
    cpu: [s390x]
    os: [linux]
    requiresBuild: true
    dev: true
    optional: true
  registry.npmmirror.com/esbuild-netbsd-64@0.14.54:
    resolution: {integrity: sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz}
    name: esbuild-netbsd-64
    version: 0.14.54
    engines: {node: '>=12'}
    cpu: [x64]
    os: [netbsd]
    requiresBuild: true
    dev: true
    optional: true
  registry.npmmirror.com/esbuild-openbsd-64@0.14.54:
    resolution: {integrity: sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz}
    name: esbuild-openbsd-64
    version: 0.14.54
    engines: {node: '>=12'}
    cpu: [x64]
    os: [openbsd]
    requiresBuild: true
    dev: true
    optional: true
  registry.npmmirror.com/esbuild-sunos-64@0.14.54:
    resolution: {integrity: sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz}
    name: esbuild-sunos-64
    version: 0.14.54
    engines: {node: '>=12'}
    cpu: [x64]
    os: [sunos]
    requiresBuild: true
    dev: true
    optional: true
  registry.npmmirror.com/esbuild-windows-32@0.14.54:
    resolution: {integrity: sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz}
    name: esbuild-windows-32
    version: 0.14.54
    engines: {node: '>=12'}
    cpu: [ia32]
    os: [win32]
    requiresBuild: true
    dev: true
    optional: true
  registry.npmmirror.com/esbuild-windows-64@0.14.54:
    resolution: {integrity: sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz}
    name: esbuild-windows-64
    version: 0.14.54
    engines: {node: '>=12'}
    cpu: [x64]
    os: [win32]
    requiresBuild: true
    dev: true
    optional: true
  registry.npmmirror.com/esbuild-windows-arm64@0.14.54:
    resolution: {integrity: sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz}
    name: esbuild-windows-arm64
    version: 0.14.54
    engines: {node: '>=12'}
    cpu: [arm64]
    os: [win32]
    requiresBuild: true
    dev: true
    optional: true
  registry.npmmirror.com/esbuild@0.14.54:
    resolution: {integrity: sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==, tarball: https://registry.npmmirror.com/esbuild/-/esbuild-0.14.54.tgz}
    name: esbuild
@@ -6339,27 +7259,27 @@
    hasBin: true
    requiresBuild: true
    optionalDependencies:
      '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64@0.14.54
      esbuild-android-64: registry.npmmirror.com/esbuild-android-64@0.14.54
      esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64@0.14.54
      esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64@0.14.54
      esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64@0.14.54
      esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64@0.14.54
      esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64@0.14.54
      esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32@0.14.54
      esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64@0.14.54
      esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm@0.14.54
      esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64@0.14.54
      esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le@0.14.54
      esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le@0.14.54
      esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64@0.14.54
      esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x@0.14.54
      esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64@0.14.54
      esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64@0.14.54
      esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64@0.14.54
      esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32@0.14.54
      esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64@0.14.54
      esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64@0.14.54
      '@esbuild/linux-loong64': 0.14.54
      esbuild-android-64: 0.14.54
      esbuild-android-arm64: 0.14.54
      esbuild-darwin-64: 0.14.54
      esbuild-darwin-arm64: 0.14.54
      esbuild-freebsd-64: 0.14.54
      esbuild-freebsd-arm64: 0.14.54
      esbuild-linux-32: 0.14.54
      esbuild-linux-64: 0.14.54
      esbuild-linux-arm: 0.14.54
      esbuild-linux-arm64: 0.14.54
      esbuild-linux-mips64le: 0.14.54
      esbuild-linux-ppc64le: 0.14.54
      esbuild-linux-riscv64: 0.14.54
      esbuild-linux-s390x: 0.14.54
      esbuild-netbsd-64: 0.14.54
      esbuild-openbsd-64: 0.14.54
      esbuild-sunos-64: 0.14.54
      esbuild-windows-32: 0.14.54
      esbuild-windows-64: 0.14.54
      esbuild-windows-arm64: 0.14.54
    dev: true
  registry.npmmirror.com/esbuild@0.19.6:
@@ -6370,28 +7290,28 @@
    hasBin: true
    requiresBuild: true
    optionalDependencies:
      '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm@0.19.6
      '@esbuild/android-arm64': registry.npmmirror.com/@esbuild/android-arm64@0.19.6
      '@esbuild/android-x64': registry.npmmirror.com/@esbuild/android-x64@0.19.6
      '@esbuild/darwin-arm64': registry.npmmirror.com/@esbuild/darwin-arm64@0.19.6
      '@esbuild/darwin-x64': registry.npmmirror.com/@esbuild/darwin-x64@0.19.6
      '@esbuild/freebsd-arm64': registry.npmmirror.com/@esbuild/freebsd-arm64@0.19.6
      '@esbuild/freebsd-x64': registry.npmmirror.com/@esbuild/freebsd-x64@0.19.6
      '@esbuild/linux-arm': registry.npmmirror.com/@esbuild/linux-arm@0.19.6
      '@esbuild/linux-arm64': registry.npmmirror.com/@esbuild/linux-arm64@0.19.6
      '@esbuild/linux-ia32': registry.npmmirror.com/@esbuild/linux-ia32@0.19.6
      '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64@0.19.6
      '@esbuild/linux-mips64el': registry.npmmirror.com/@esbuild/linux-mips64el@0.19.6
      '@esbuild/linux-ppc64': registry.npmmirror.com/@esbuild/linux-ppc64@0.19.6
      '@esbuild/linux-riscv64': registry.npmmirror.com/@esbuild/linux-riscv64@0.19.6
      '@esbuild/linux-s390x': registry.npmmirror.com/@esbuild/linux-s390x@0.19.6
      '@esbuild/linux-x64': registry.npmmirror.com/@esbuild/linux-x64@0.19.6
      '@esbuild/netbsd-x64': registry.npmmirror.com/@esbuild/netbsd-x64@0.19.6
      '@esbuild/openbsd-x64': registry.npmmirror.com/@esbuild/openbsd-x64@0.19.6
      '@esbuild/sunos-x64': registry.npmmirror.com/@esbuild/sunos-x64@0.19.6
      '@esbuild/win32-arm64': registry.npmmirror.com/@esbuild/win32-arm64@0.19.6
      '@esbuild/win32-ia32': registry.npmmirror.com/@esbuild/win32-ia32@0.19.6
      '@esbuild/win32-x64': registry.npmmirror.com/@esbuild/win32-x64@0.19.6
      '@esbuild/android-arm': 0.19.6
      '@esbuild/android-arm64': 0.19.6
      '@esbuild/android-x64': 0.19.6
      '@esbuild/darwin-arm64': 0.19.6
      '@esbuild/darwin-x64': 0.19.6
      '@esbuild/freebsd-arm64': 0.19.6
      '@esbuild/freebsd-x64': 0.19.6
      '@esbuild/linux-arm': 0.19.6
      '@esbuild/linux-arm64': 0.19.6
      '@esbuild/linux-ia32': 0.19.6
      '@esbuild/linux-loong64': 0.19.6
      '@esbuild/linux-mips64el': 0.19.6
      '@esbuild/linux-ppc64': 0.19.6
      '@esbuild/linux-riscv64': 0.19.6
      '@esbuild/linux-s390x': 0.19.6
      '@esbuild/linux-x64': 0.19.6
      '@esbuild/netbsd-x64': 0.19.6
      '@esbuild/openbsd-x64': 0.19.6
      '@esbuild/sunos-x64': 0.19.6
      '@esbuild/win32-arm64': 0.19.6
      '@esbuild/win32-ia32': 0.19.6
      '@esbuild/win32-x64': 0.19.6
  registry.npmmirror.com/escalade@3.1.1:
    resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==, tarball: https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz}
@@ -7014,7 +7934,7 @@
    engines: {node: '>=8'}
    dependencies:
      commondir: registry.npmmirror.com/commondir@1.0.1
      make-dir: registry.npmmirror.com/make-dir@3.1.0
      make-dir: 3.1.0
      pkg-dir: registry.npmmirror.com/pkg-dir@4.2.0
    dev: true
@@ -7112,7 +8032,7 @@
    dependencies:
      async: registry.npmmirror.com/async@0.2.10
      combined-stream: registry.npmmirror.com/combined-stream@0.0.7
      mime: registry.npmmirror.com/mime@1.2.11
      mime: 1.2.11
    dev: true
  registry.npmmirror.com/forwarded@0.2.0:
@@ -7155,7 +8075,7 @@
    version: 10.1.0
    engines: {node: '>=12'}
    dependencies:
      graceful-fs: registry.npmmirror.com/graceful-fs@4.2.11
      graceful-fs: 4.2.11
      jsonfile: registry.npmmirror.com/jsonfile@6.1.0
      universalify: registry.npmmirror.com/universalify@2.0.1
@@ -7166,7 +8086,7 @@
    engines: {node: '>=10'}
    dependencies:
      at-least-node: registry.npmmirror.com/at-least-node@1.0.0
      graceful-fs: registry.npmmirror.com/graceful-fs@4.2.11
      graceful-fs: 4.2.11
      jsonfile: registry.npmmirror.com/jsonfile@6.1.0
      universalify: registry.npmmirror.com/universalify@2.0.1
    dev: true
@@ -7182,15 +8102,6 @@
    name: fs.realpath
    version: 1.0.0
    dev: true
  registry.npmmirror.com/fsevents@2.3.3:
    resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==, tarball: https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz}
    name: fsevents
    version: 2.3.3
    engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
    os: [darwin]
    requiresBuild: true
    optional: true
  registry.npmmirror.com/function-bind@1.1.2:
    resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==, tarball: https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz}
@@ -7336,6 +8247,7 @@
    resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz}
    name: graceful-fs
    version: 4.2.11
    dev: true
  registry.npmmirror.com/gzip-size@6.0.0:
    resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==, tarball: https://registry.npmmirror.com/gzip-size/-/gzip-size-6.0.0.tgz}
@@ -7776,12 +8688,6 @@
      postcss: registry.npmmirror.com/postcss@8.4.31
    dev: true
  registry.npmmirror.com/ieee754@1.2.1:
    resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==, tarball: https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz}
    name: ieee754
    version: 1.2.1
    dev: true
  registry.npmmirror.com/ignore@4.0.6:
    resolution: {integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==, tarball: https://registry.npmmirror.com/ignore/-/ignore-4.0.6.tgz}
    name: ignore
@@ -7795,13 +8701,6 @@
    version: 5.3.0
    engines: {node: '>= 4'}
    dev: true
  registry.npmmirror.com/image-size@0.5.5:
    resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==, tarball: https://registry.npmmirror.com/image-size/-/image-size-0.5.5.tgz}
    name: image-size
    version: 0.5.5
    engines: {node: '>=0.10.0'}
    hasBin: true
  registry.npmmirror.com/import-fresh@3.3.0:
    resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==, tarball: https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz}
@@ -8250,12 +9149,6 @@
    engines: {node: '>=0.6.0'}
    dev: true
  registry.npmmirror.com/js-tokens@4.0.0:
    resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, tarball: https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz}
    name: js-tokens
    version: 4.0.0
    dev: true
  registry.npmmirror.com/js-yaml@3.14.1:
    resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==, tarball: https://registry.npmmirror.com/js-yaml/-/js-yaml-3.14.1.tgz}
    name: js-yaml
@@ -8336,14 +9229,6 @@
    deprecated: Please use the native JSON object instead of JSON 3
    dev: true
  registry.npmmirror.com/json5@1.0.2:
    resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==, tarball: https://registry.npmmirror.com/json5/-/json5-1.0.2.tgz}
    name: json5
    version: 1.0.2
    hasBin: true
    dependencies:
      minimist: registry.npmmirror.com/minimist@1.2.8
  registry.npmmirror.com/json5@2.2.3:
    resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==, tarball: https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz}
    name: json5
@@ -8359,7 +9244,7 @@
    dependencies:
      universalify: registry.npmmirror.com/universalify@2.0.1
    optionalDependencies:
      graceful-fs: registry.npmmirror.com/graceful-fs@4.2.11
      graceful-fs: 4.2.11
  registry.npmmirror.com/keyv@4.5.4:
    resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==, tarball: https://registry.npmmirror.com/keyv/-/keyv-4.5.4.tgz}
@@ -8417,7 +9302,7 @@
    name: launch-editor
    version: 2.6.1
    dependencies:
      picocolors: registry.npmmirror.com/picocolors@1.0.0
      picocolors: 1.0.0
      shell-quote: registry.npmmirror.com/shell-quote@1.8.1
    dev: true
@@ -8432,7 +9317,7 @@
      webpack: ^5.0.0
    dependencies:
      less: registry.npmmirror.com/less@4.2.0
      webpack: registry.npmmirror.com/webpack@5.89.0
      webpack: 5.89.0
    dev: true
  registry.npmmirror.com/less@4.2.0:
@@ -8446,13 +9331,13 @@
      parse-node-version: registry.npmmirror.com/parse-node-version@1.0.1
      tslib: registry.npmmirror.com/tslib@2.6.2
    optionalDependencies:
      errno: registry.npmmirror.com/errno@0.1.8
      graceful-fs: registry.npmmirror.com/graceful-fs@4.2.11
      image-size: registry.npmmirror.com/image-size@0.5.5
      make-dir: registry.npmmirror.com/make-dir@2.1.0
      mime: registry.npmmirror.com/mime@1.6.0
      needle: registry.npmmirror.com/needle@3.2.0
      source-map: registry.npmmirror.com/source-map@0.6.1
      errno: 0.1.8
      graceful-fs: 4.2.11
      image-size: 0.5.5
      make-dir: 2.1.0
      mime: 1.6.0
      needle: 3.2.0
      source-map: 0.6.1
    transitivePeerDependencies:
      - supports-color
@@ -8492,9 +9377,9 @@
    version: 1.4.2
    engines: {node: '>=4.0.0'}
    dependencies:
      big.js: registry.npmmirror.com/big.js@5.2.2
      emojis-list: registry.npmmirror.com/emojis-list@3.0.0
      json5: registry.npmmirror.com/json5@1.0.2
      big.js: 5.2.2
      emojis-list: 3.0.0
      json5: 1.0.2
  registry.npmmirror.com/loader-utils@2.0.4:
    resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==, tarball: https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz}
@@ -8502,9 +9387,9 @@
    version: 2.0.4
    engines: {node: '>=8.9.0'}
    dependencies:
      big.js: registry.npmmirror.com/big.js@5.2.2
      emojis-list: registry.npmmirror.com/emojis-list@3.0.0
      json5: registry.npmmirror.com/json5@2.2.3
      big.js: 5.2.2
      emojis-list: 3.0.0
      json5: 2.2.3
    dev: true
  registry.npmmirror.com/locate-path@5.0.0:
@@ -8612,8 +9497,8 @@
    name: lru-cache
    version: 4.1.5
    dependencies:
      pseudomap: registry.npmmirror.com/pseudomap@1.0.2
      yallist: registry.npmmirror.com/yallist@2.1.2
      pseudomap: 1.0.2
      yallist: 2.1.2
    dev: true
  registry.npmmirror.com/lru-cache@5.1.1:
@@ -8621,7 +9506,7 @@
    name: lru-cache
    version: 5.1.1
    dependencies:
      yallist: registry.npmmirror.com/yallist@3.1.1
      yallist: 3.1.1
    dev: true
  registry.npmmirror.com/lru-cache@6.0.0:
@@ -8630,7 +9515,7 @@
    version: 6.0.0
    engines: {node: '>=10'}
    dependencies:
      yallist: registry.npmmirror.com/yallist@4.0.0
      yallist: 4.0.0
    dev: true
  registry.npmmirror.com/magic-string@0.26.7:
@@ -8650,17 +9535,6 @@
    dependencies:
      '@jridgewell/sourcemap-codec': registry.npmmirror.com/@jridgewell/sourcemap-codec@1.4.15
    dev: true
  registry.npmmirror.com/make-dir@2.1.0:
    resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==, tarball: https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz}
    name: make-dir
    version: 2.1.0
    engines: {node: '>=6'}
    requiresBuild: true
    dependencies:
      pify: registry.npmmirror.com/pify@4.0.1
      semver: registry.npmmirror.com/semver@5.7.2
    optional: true
  registry.npmmirror.com/make-dir@3.1.0:
    resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==, tarball: https://registry.npmmirror.com/make-dir/-/make-dir-3.1.0.tgz}
@@ -8749,7 +9623,7 @@
    name: merge-source-map
    version: 1.1.0
    dependencies:
      source-map: registry.npmmirror.com/source-map@0.6.1
      source-map: 0.6.1
    dev: true
  registry.npmmirror.com/merge-stream@2.0.0:
@@ -8843,19 +9717,6 @@
      mime-db: registry.npmmirror.com/mime-db@1.52.0
    dev: true
  registry.npmmirror.com/mime@1.2.11:
    resolution: {integrity: sha512-Ysa2F/nqTNGHhhm9MV8ure4+Hc+Y8AWiqUdHxsO7xu8zc92ND9f3kpALHjaP026Ft17UfxrMt95c50PLUeynBw==, tarball: https://registry.npmmirror.com/mime/-/mime-1.2.11.tgz}
    name: mime
    version: 1.2.11
    dev: true
  registry.npmmirror.com/mime@1.6.0:
    resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==, tarball: https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz}
    name: mime
    version: 1.6.0
    engines: {node: '>=4'}
    hasBin: true
  registry.npmmirror.com/mimic-fn@1.2.0:
    resolution: {integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==, tarball: https://registry.npmmirror.com/mimic-fn/-/mimic-fn-1.2.0.tgz}
    name: mimic-fn
@@ -8915,6 +9776,7 @@
    resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==, tarball: https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz}
    name: minimist
    version: 1.2.8
    dev: true
  registry.npmmirror.com/minipass@3.3.6:
    resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==, tarball: https://registry.npmmirror.com/minipass/-/minipass-3.3.6.tgz}
@@ -8922,7 +9784,7 @@
    version: 3.3.6
    engines: {node: '>=8'}
    dependencies:
      yallist: registry.npmmirror.com/yallist@4.0.0
      yallist: 4.0.0
    dev: true
  registry.npmmirror.com/mitt@1.1.2:
@@ -8946,7 +9808,7 @@
    version: 0.5.6
    hasBin: true
    dependencies:
      minimist: registry.npmmirror.com/minimist@1.2.8
      minimist: 1.2.8
    dev: true
  registry.npmmirror.com/module-alias@2.2.3:
@@ -9084,21 +9946,6 @@
    name: natural-compare
    version: 1.4.0
    dev: true
  registry.npmmirror.com/needle@3.2.0:
    resolution: {integrity: sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==, tarball: https://registry.npmmirror.com/needle/-/needle-3.2.0.tgz}
    name: needle
    version: 3.2.0
    engines: {node: '>= 4.4.x'}
    hasBin: true
    requiresBuild: true
    dependencies:
      debug: registry.npmmirror.com/debug@3.2.7
      iconv-lite: registry.npmmirror.com/iconv-lite@0.6.3
      sax: registry.npmmirror.com/sax@1.3.0
    transitivePeerDependencies:
      - supports-color
    optional: true
  registry.npmmirror.com/negotiator@0.4.7:
    resolution: {integrity: sha512-ujxWwyRfZ6udAgHGECQC3JDO9e6UAsuItfUMcqA0Xf2OLNQTveFVFx+fHGIJ5p0MJaJrZyGQqPwzuN0NxJzEKA==, tarball: https://registry.npmmirror.com/negotiator/-/negotiator-0.4.7.tgz}
@@ -9745,12 +10592,6 @@
      sha.js: registry.npmmirror.com/sha.js@2.4.11
    dev: true
  registry.npmmirror.com/picocolors@0.2.1:
    resolution: {integrity: sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==, tarball: https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz}
    name: picocolors
    version: 0.2.1
    dev: true
  registry.npmmirror.com/picocolors@1.0.0:
    resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==, tarball: https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz}
    name: picocolors
@@ -9823,7 +10664,7 @@
      postcss: ^8.2.2
    dependencies:
      postcss: registry.npmmirror.com/postcss@8.4.31
      postcss-selector-parser: registry.npmmirror.com/postcss-selector-parser@6.0.13
      postcss-selector-parser: 6.0.13
      postcss-value-parser: registry.npmmirror.com/postcss-value-parser@4.2.0
    dev: true
@@ -9949,7 +10790,7 @@
      caniuse-api: registry.npmmirror.com/caniuse-api@3.0.0
      cssnano-utils: registry.npmmirror.com/cssnano-utils@3.1.0(postcss@8.4.31)
      postcss: registry.npmmirror.com/postcss@8.4.31
      postcss-selector-parser: registry.npmmirror.com/postcss-selector-parser@6.0.13
      postcss-selector-parser: 6.0.13
    dev: true
  registry.npmmirror.com/postcss-minify-font-values@5.1.0(postcss@8.4.31):
@@ -10005,7 +10846,7 @@
      postcss: ^8.2.15
    dependencies:
      postcss: registry.npmmirror.com/postcss@8.4.31
      postcss-selector-parser: registry.npmmirror.com/postcss-selector-parser@6.0.13
      postcss-selector-parser: 6.0.13
    dev: true
  registry.npmmirror.com/postcss-modules-extract-imports@3.0.0(postcss@8.4.31):
@@ -10031,7 +10872,7 @@
    dependencies:
      icss-utils: registry.npmmirror.com/icss-utils@5.1.0(postcss@8.4.31)
      postcss: registry.npmmirror.com/postcss@8.4.31
      postcss-selector-parser: registry.npmmirror.com/postcss-selector-parser@6.0.13
      postcss-selector-parser: 6.0.13
      postcss-value-parser: registry.npmmirror.com/postcss-value-parser@4.2.0
    dev: true
@@ -10045,7 +10886,7 @@
      postcss: ^8.1.0
    dependencies:
      postcss: registry.npmmirror.com/postcss@8.4.31
      postcss-selector-parser: registry.npmmirror.com/postcss-selector-parser@6.0.13
      postcss-selector-parser: 6.0.13
    dev: true
  registry.npmmirror.com/postcss-modules-values@4.0.0(postcss@8.4.31):
@@ -10264,7 +11105,7 @@
      postcss: ^8.2.15
    dependencies:
      postcss: registry.npmmirror.com/postcss@8.4.31
      postcss-selector-parser: registry.npmmirror.com/postcss-selector-parser@6.0.13
      postcss-selector-parser: 6.0.13
    dev: true
  registry.npmmirror.com/postcss-value-parser@4.2.0:
@@ -10281,7 +11122,7 @@
    dependencies:
      chalk: registry.npmmirror.com/chalk@1.1.3
      js-base64: registry.npmmirror.com/js-base64@2.6.4
      source-map: registry.npmmirror.com/source-map@0.5.7
      source-map: 0.5.7
      supports-color: registry.npmmirror.com/supports-color@3.2.3
  registry.npmmirror.com/postcss@7.0.39:
@@ -10290,8 +11131,8 @@
    version: 7.0.39
    engines: {node: '>=6.0.0'}
    dependencies:
      picocolors: registry.npmmirror.com/picocolors@0.2.1
      source-map: registry.npmmirror.com/source-map@0.6.1
      picocolors: 0.2.1
      source-map: 0.6.1
    dev: true
  registry.npmmirror.com/postcss@8.4.31:
@@ -10429,12 +11270,6 @@
    version: 1.0.1
    requiresBuild: true
    optional: true
  registry.npmmirror.com/pseudomap@1.0.2:
    resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==, tarball: https://registry.npmmirror.com/pseudomap/-/pseudomap-1.0.2.tgz}
    name: pseudomap
    version: 1.0.2
    dev: true
  registry.npmmirror.com/public-encrypt@4.0.3:
    resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==, tarball: https://registry.npmmirror.com/public-encrypt/-/public-encrypt-4.0.3.tgz}
@@ -10617,7 +11452,7 @@
      process-nextick-args: registry.npmmirror.com/process-nextick-args@2.0.1
      safe-buffer: registry.npmmirror.com/safe-buffer@5.1.2
      string_decoder: registry.npmmirror.com/string_decoder@1.1.1
      util-deprecate: registry.npmmirror.com/util-deprecate@1.0.2
      util-deprecate: 1.0.2
    dev: true
  registry.npmmirror.com/readable-stream@3.6.2:
@@ -10628,7 +11463,7 @@
    dependencies:
      inherits: registry.npmmirror.com/inherits@2.0.4
      string_decoder: registry.npmmirror.com/string_decoder@1.3.0
      util-deprecate: registry.npmmirror.com/util-deprecate@1.0.2
      util-deprecate: 1.0.2
  registry.npmmirror.com/readdirp@3.6.0:
    resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==, tarball: https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz}
@@ -10756,7 +11591,7 @@
      form-data: registry.npmmirror.com/form-data@0.0.10
      hawk: registry.npmmirror.com/hawk@0.10.2
      json-stringify-safe: registry.npmmirror.com/json-stringify-safe@3.0.0
      mime: registry.npmmirror.com/mime@1.2.11
      mime: 1.2.11
      node-uuid: registry.npmmirror.com/node-uuid@1.4.8
      oauth-sign: registry.npmmirror.com/oauth-sign@0.2.0
      qs: registry.npmmirror.com/qs@0.5.6
@@ -10878,7 +11713,7 @@
    engines: {node: '>=10.0.0'}
    hasBin: true
    optionalDependencies:
      fsevents: registry.npmmirror.com/fsevents@2.3.3
      fsevents: 2.3.3
    dev: true
  registry.npmmirror.com/rollup@4.5.0:
@@ -10888,19 +11723,19 @@
    engines: {node: '>=18.0.0', npm: '>=8.0.0'}
    hasBin: true
    optionalDependencies:
      '@rollup/rollup-android-arm-eabi': registry.npmmirror.com/@rollup/rollup-android-arm-eabi@4.5.0
      '@rollup/rollup-android-arm64': registry.npmmirror.com/@rollup/rollup-android-arm64@4.5.0
      '@rollup/rollup-darwin-arm64': registry.npmmirror.com/@rollup/rollup-darwin-arm64@4.5.0
      '@rollup/rollup-darwin-x64': registry.npmmirror.com/@rollup/rollup-darwin-x64@4.5.0
      '@rollup/rollup-linux-arm-gnueabihf': registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf@4.5.0
      '@rollup/rollup-linux-arm64-gnu': registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu@4.5.0
      '@rollup/rollup-linux-arm64-musl': registry.npmmirror.com/@rollup/rollup-linux-arm64-musl@4.5.0
      '@rollup/rollup-linux-x64-gnu': registry.npmmirror.com/@rollup/rollup-linux-x64-gnu@4.5.0
      '@rollup/rollup-linux-x64-musl': registry.npmmirror.com/@rollup/rollup-linux-x64-musl@4.5.0
      '@rollup/rollup-win32-arm64-msvc': registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc@4.5.0
      '@rollup/rollup-win32-ia32-msvc': registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc@4.5.0
      '@rollup/rollup-win32-x64-msvc': registry.npmmirror.com/@rollup/rollup-win32-x64-msvc@4.5.0
      fsevents: registry.npmmirror.com/fsevents@2.3.3
      '@rollup/rollup-android-arm-eabi': 4.5.0
      '@rollup/rollup-android-arm64': 4.5.0
      '@rollup/rollup-darwin-arm64': 4.5.0
      '@rollup/rollup-darwin-x64': 4.5.0
      '@rollup/rollup-linux-arm-gnueabihf': 4.5.0
      '@rollup/rollup-linux-arm64-gnu': 4.5.0
      '@rollup/rollup-linux-arm64-musl': 4.5.0
      '@rollup/rollup-linux-x64-gnu': 4.5.0
      '@rollup/rollup-linux-x64-musl': 4.5.0
      '@rollup/rollup-win32-arm64-msvc': 4.5.0
      '@rollup/rollup-win32-ia32-msvc': 4.5.0
      '@rollup/rollup-win32-x64-msvc': 4.5.0
      fsevents: 2.3.3
  registry.npmmirror.com/run-parallel@1.2.0:
    resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, tarball: https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz}
@@ -11027,7 +11862,7 @@
      etag: registry.npmmirror.com/etag@1.8.1
      fresh: registry.npmmirror.com/fresh@0.5.2
      http-errors: registry.npmmirror.com/http-errors@2.0.0
      mime: registry.npmmirror.com/mime@1.6.0
      mime: 1.6.0
      ms: registry.npmmirror.com/ms@2.1.3
      on-finished: registry.npmmirror.com/on-finished@2.4.1
      range-parser: registry.npmmirror.com/range-parser@1.2.1
@@ -11047,7 +11882,7 @@
      escape-html: registry.npmmirror.com/escape-html@1.0.1
      finished: registry.npmmirror.com/finished@1.2.2
      fresh: registry.npmmirror.com/fresh@0.2.2
      mime: registry.npmmirror.com/mime@1.2.11
      mime: 1.2.11
      ms: registry.npmmirror.com/ms@0.6.2
      range-parser: registry.npmmirror.com/range-parser@1.0.0
    transitivePeerDependencies:
@@ -11278,7 +12113,7 @@
      define-property: registry.npmmirror.com/define-property@0.2.5
      extend-shallow: registry.npmmirror.com/extend-shallow@2.0.1
      map-cache: registry.npmmirror.com/map-cache@0.2.2
      source-map: registry.npmmirror.com/source-map@0.5.7
      source-map: 0.5.7
      source-map-resolve: registry.npmmirror.com/source-map-resolve@0.5.3
      use: registry.npmmirror.com/use@3.1.1
    transitivePeerDependencies:
@@ -11403,25 +12238,13 @@
    version: 0.5.21
    dependencies:
      buffer-from: registry.npmmirror.com/buffer-from@1.1.2
      source-map: registry.npmmirror.com/source-map@0.6.1
      source-map: 0.6.1
  registry.npmmirror.com/source-map-url@0.4.1:
    resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==, tarball: https://registry.npmmirror.com/source-map-url/-/source-map-url-0.4.1.tgz}
    name: source-map-url
    version: 0.4.1
    deprecated: See https://github.com/lydell/source-map-url#deprecated
  registry.npmmirror.com/source-map@0.5.7:
    resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==, tarball: https://registry.npmmirror.com/source-map/-/source-map-0.5.7.tgz}
    name: source-map
    version: 0.5.7
    engines: {node: '>=0.10.0'}
  registry.npmmirror.com/source-map@0.6.1:
    resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, tarball: https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz}
    name: source-map
    version: 0.6.1
    engines: {node: '>=0.10.0'}
  registry.npmmirror.com/source-map@0.7.4:
    resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==, tarball: https://registry.npmmirror.com/source-map/-/source-map-0.7.4.tgz}
@@ -11689,7 +12512,7 @@
    dependencies:
      browserslist: registry.npmmirror.com/browserslist@4.22.1
      postcss: registry.npmmirror.com/postcss@8.4.31
      postcss-selector-parser: registry.npmmirror.com/postcss-selector-parser@6.0.13
      postcss-selector-parser: 6.0.13
    dev: true
  registry.npmmirror.com/supports-color@2.0.0:
@@ -11759,7 +12582,7 @@
      bluebird: registry.npmmirror.com/bluebird@3.7.2
      clone: registry.npmmirror.com/clone@2.1.2
      he: registry.npmmirror.com/he@1.2.0
      image-size: registry.npmmirror.com/image-size@0.5.5
      image-size: 0.5.5
      loader-utils: registry.npmmirror.com/loader-utils@1.4.2
      merge-options: registry.npmmirror.com/merge-options@1.0.1
      micromatch: registry.npmmirror.com/micromatch@3.1.0
@@ -12196,7 +13019,7 @@
    dependencies:
      browserslist: registry.npmmirror.com/browserslist@4.22.1
      escalade: registry.npmmirror.com/escalade@3.1.1
      picocolors: registry.npmmirror.com/picocolors@1.0.0
      picocolors: 1.0.0
    dev: true
  registry.npmmirror.com/uri-js@4.4.1:
@@ -12246,6 +13069,7 @@
    resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==, tarball: https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz}
    name: util-deprecate
    version: 1.0.2
    dev: true
  registry.npmmirror.com/util@0.12.5:
    resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==, tarball: https://registry.npmmirror.com/util/-/util-0.12.5.tgz}
@@ -12374,7 +13198,7 @@
      vite: ^2.0.0 || ^3.0.0 || ^4.0.0
    dependencies:
      '@rollup/plugin-inject': registry.npmmirror.com/@rollup/plugin-inject@5.0.5
      buffer-polyfill: registry.npmmirror.com/buffer@6.0.3
      buffer-polyfill: /buffer@6.0.3
      node-stdlib-browser: registry.npmmirror.com/node-stdlib-browser@1.2.0
      process: registry.npmmirror.com/process@0.11.10
      vite: registry.npmmirror.com/vite@5.0.0(less@4.2.0)
@@ -12537,7 +13361,7 @@
      postcss: registry.npmmirror.com/postcss@8.4.31
      rollup: registry.npmmirror.com/rollup@4.5.0
    optionalDependencies:
      fsevents: registry.npmmirror.com/fsevents@2.3.3
      fsevents: 2.3.3
  registry.npmmirror.com/vm-browserify@1.1.2:
    resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==, tarball: https://registry.npmmirror.com/vm-browserify/-/vm-browserify-1.1.2.tgz}
@@ -12566,103 +13390,11 @@
      - supports-color
    dev: true
  registry.npmmirror.com/vue-hot-reload-api@2.3.4:
    resolution: {integrity: sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==, tarball: https://registry.npmmirror.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz}
    name: vue-hot-reload-api
    version: 2.3.4
    dev: true
  registry.npmmirror.com/vue-layer@1.2.5:
    resolution: {integrity: sha512-rwHFuOxvtuMCSZmWKvHeLF0VyVtzUvG248moXs/llECXXZ6vUvUBHW8REWhKL4Xje9TcyWzdUUBMF8c5BgSTag==, tarball: https://registry.npmmirror.com/vue-layer/-/vue-layer-1.2.5.tgz}
    name: vue-layer
    version: 1.2.5
    dev: false
  registry.npmmirror.com/vue-loader@15.11.1(css-loader@6.8.1)(vue-template-compiler@2.7.15)(webpack@5.89.0):
    resolution: {integrity: sha512-0iw4VchYLePqJfJu9s62ACWUXeSqM30SQqlIftbYWM3C+jpPcEHKSPUZBLjSF9au4HTHQ/naF6OGnO3Q/qGR3Q==, tarball: https://registry.npmmirror.com/vue-loader/-/vue-loader-15.11.1.tgz}
    id: registry.npmmirror.com/vue-loader/15.11.1
    name: vue-loader
    version: 15.11.1
    peerDependencies:
      '@vue/compiler-sfc': ^3.0.8
      cache-loader: '*'
      css-loader: '*'
      prettier: '*'
      vue-template-compiler: '*'
      webpack: ^3.0.0 || ^4.1.0 || ^5.0.0-0
    peerDependenciesMeta:
      '@vue/compiler-sfc':
        optional: true
      cache-loader:
        optional: true
      prettier:
        optional: true
      vue-template-compiler:
        optional: true
    dependencies:
      '@vue/component-compiler-utils': registry.npmmirror.com/@vue/component-compiler-utils@3.3.0
      css-loader: registry.npmmirror.com/css-loader@6.8.1(webpack@5.89.0)
      hash-sum: registry.npmmirror.com/hash-sum@1.0.2
      loader-utils: registry.npmmirror.com/loader-utils@1.4.2
      vue-hot-reload-api: registry.npmmirror.com/vue-hot-reload-api@2.3.4
      vue-style-loader: registry.npmmirror.com/vue-style-loader@4.1.3
      vue-template-compiler: registry.npmmirror.com/vue-template-compiler@2.7.15
      webpack: registry.npmmirror.com/webpack@5.89.0
    transitivePeerDependencies:
      - arc-templates
      - atpl
      - babel-core
      - bracket-template
      - coffee-script
      - dot
      - dust
      - dustjs-helpers
      - dustjs-linkedin
      - eco
      - ect
      - ejs
      - haml-coffee
      - hamlet
      - hamljs
      - handlebars
      - hogan.js
      - htmling
      - jade
      - jazz
      - jqtpl
      - just
      - liquid-node
      - liquor
      - lodash
      - marko
      - mote
      - mustache
      - nunjucks
      - plates
      - pug
      - qejs
      - ractive
      - razor-tmpl
      - react
      - react-dom
      - slm
      - squirrelly
      - swig
      - swig-templates
      - teacup
      - templayed
      - then-jade
      - then-pug
      - tinyliquid
      - toffee
      - twig
      - twing
      - underscore
      - vash
      - velocityjs
      - walrus
      - whiskers
    dev: true
  registry.npmmirror.com/vue-loader@17.3.1(vue@2.7.15)(webpack@5.89.0):
    resolution: {integrity: sha512-nmVu7KU8geOyzsStyyaxID/uBGDMS8BkPXb6Lu2SNkMawriIbb+hYrNtgftHMKxOSkjjjTF5OSSwPo3KP59egg==, tarball: https://registry.npmmirror.com/vue-loader/-/vue-loader-17.3.1.tgz}
@@ -12768,7 +13500,7 @@
    engines: {node: '>=10.13.0'}
    dependencies:
      glob-to-regexp: registry.npmmirror.com/glob-to-regexp@0.4.1
      graceful-fs: registry.npmmirror.com/graceful-fs@4.2.11
      graceful-fs: 4.2.11
    dev: true
  registry.npmmirror.com/wbuf@1.7.3:
@@ -12876,7 +13608,7 @@
      connect-history-api-fallback: registry.npmmirror.com/connect-history-api-fallback@2.0.0
      default-gateway: registry.npmmirror.com/default-gateway@6.0.3
      express: registry.npmmirror.com/express@4.18.2
      graceful-fs: registry.npmmirror.com/graceful-fs@4.2.11
      graceful-fs: 4.2.11
      html-entities: registry.npmmirror.com/html-entities@2.4.0
      http-proxy-middleware: registry.npmmirror.com/http-proxy-middleware@2.0.6(@types/express@4.17.21)(debug@4.3.4)
      ipaddr.js: registry.npmmirror.com/ipaddr.js@2.1.0
@@ -13149,24 +13881,6 @@
    name: y18n
    version: 5.0.8
    engines: {node: '>=10'}
    dev: true
  registry.npmmirror.com/yallist@2.1.2:
    resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==, tarball: https://registry.npmmirror.com/yallist/-/yallist-2.1.2.tgz}
    name: yallist
    version: 2.1.2
    dev: true
  registry.npmmirror.com/yallist@3.1.1:
    resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==, tarball: https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz}
    name: yallist
    version: 3.1.1
    dev: true
  registry.npmmirror.com/yallist@4.0.0:
    resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==, tarball: https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz}
    name: yallist
    version: 4.0.0
    dev: true
  registry.npmmirror.com/yaml@1.10.2:
src/assets/css/base.less
File was renamed from src/assets/css/base.css
@@ -164,11 +164,11 @@
}
::-webkit-scrollbar-track {
  background-color: #f5f5f5;
  background-color: #122C43;
}
::-webkit-scrollbar-track-piece {
  background-color: #f5f5f5;
  background-color: #3678DC;
  border-radius: 6px;
}
@@ -202,4 +202,115 @@
}
.vl-notify {
  z-index: 99999;
}
.flex-c {
  display: flex;
  flex-direction: column;
}
.flex-r {
  display: flex;
  flex-direction: row;
}
.table-dark {
  background: #00253f;
  color: #fff;
  &::before {
    height: 0;
  }
  th.el-table__cell {
    background: #0c4d77;
    font-size: 18px;
    color: #76EDF6;
  }
  th.el-table__cell.is-leaf,
  td.el-table__cell {
    border: 0 none;
  }
  tr {
    background: #153953;
  }
  .el-table__body
  tr.hover-row.hover-row.hover-row
  > td.el-table__cell {
    background: #4871e3;
  }
  .el-table__body tr.el-table__row--striped td.el-table__cell {
    background: #0d314b;
  }
}
.pages {
  &.dark {
    color: #fff;
    .el-pagination__total {
      color: inherit;
    }
    .el-pagination__jump {
      color: inherit;
    }
    .el-pagination__sizes {
      color: inherit;
    }
    .el-input__inner {
      background: #0C4D77;
      color: #4BA6B9;
      border-color: #4BA6B9;
    }
    .el-pager li  {
      background: inherit;
    }
    .btn-next,
    .btn-prev {
      background-color: inherit;
      color: inherit;
      &:disabled {
        color: #aaa;
      }
    }
  }
  &.center {
    text-align: center;
  }
}
.dark {
  .el-input__inner {
    background: #0C4D77;
    color: #4BA6B9;
    border-color: #4BA6B9;
  }
}
.el-button {
  &.yellow {
    color: #fff;
    background-color: #FB8D1A;
    border-color: #FB8D1A;
  }
  &.l-green {
    color: #011f39;
    background-color: #90EC7D;
    border-color: #90EC7D;
  }
  &:disabled {
    background-color: #ccc;
    border-color: #ccc;
    color: #fff;
  }
}
.flex-c {
  display: flex;
  flex-direction: column;
}
.flex-r {
  display: flex;
  flex-direction: row;
}
.pos-full {
  position: absolute;
  left: 0;
  top: 0;
  right: 0;
  bottom: 0;
}
src/assets/js/bitArray2num.js
New file
@@ -0,0 +1,9 @@
/**
 *  将二进制位 数组(下标0为二进制的最低位的值)  转化为数值
 */
export default function bitArray2num(array) {
  // 高位在前 需要反转
   let str = array.reverse().join('');
  return parseInt(str, 2);
}
src/assets/js/getBinaryDigits.js
@@ -1,7 +1,7 @@
/**
 *  将整数转为二进制数 并输出每一位的值到数组中 从高位到低位 二进制位数可指定 (多的裁切 不够的补0)
 */
export default function getBinaryDigits(num, bits) {
export default function getBinaryDigits(num = 0, bits = 25) {
  // 将数值转换为二进制字符串
  let binaryStr = num.toString(2);
  let len = binaryStr.length;
src/assets/js/websocket/getWsUrl.js
@@ -4,7 +4,7 @@
 * @returns {string}
 */
function getWsUrl(action, port) {
  let _port = port ? port : 8094;
  let _port = port ? port : 8095;
  let hostname = window.location.hostname;
  let wsProtocol = "ws://";
  if(window.location.protocol == "https:") {
@@ -17,7 +17,7 @@
  }
  // 处理端口为80
  _port = _port == 80?"":":"+_port;
  return wsProtocol + hostname + _port + '/fdk/' + action;
  return wsProtocol + hostname + _port + '/ms/' + action;
}
export default getWsUrl;
src/components/alarmCard.vue
@@ -4,8 +4,12 @@
    <div
      :class="[
        'state',
        { level1: 1 == level, level2: 2 == level, level3: 3 == level , 'alarm': flag },
        {
          level1: 1 == level,
          level2: 2 == level,
          level3: 3 == level,
          alarm: isAlarm,
        },
      ]"
    ></div>
  </div>
@@ -32,12 +36,12 @@
    },
    childrenVisible: {
      type: Boolean,
      default: false
      default: false,
    },
    flag: {
      type: Number,
      type: [Number, Array],
      default: 0,
    }
    },
  },
  computed: {
    cols() {
@@ -49,6 +53,14 @@
      }
      return Math.ceil(this.childrenCount / this.cols);
    },
    isAlarm() {
      const flag = this.flag;
      if (Array.isArray(flag)) {
        return flag.some((v) => v > 0);
      } else {
        return !!flag;
      }
    },
  },
  data() {
    return {};
@@ -56,13 +68,12 @@
  components: {},
  methods: {
    close() {
      console.log('close?');
      this.$emit('close');
    }
      console.log("close?");
      this.$emit("close");
    },
  },
  mounted() {
  },
  mounted() {},
};
</script>
@@ -116,12 +127,12 @@
    }
    .row {
      display: flex;
      &~.row {
      & ~ .row {
        margin-top: 8px;
      }
      .col {
        flex: 1;
        & ~.col {
        & ~ .col {
          margin-left: 8px;
        }
      }
@@ -133,7 +144,7 @@
    left: 0;
    right: 0;
    bottom: 0;
    background: rgba(0,0,0,.4);
    background: rgba(0, 0, 0, 0.4);
    z-index: 99;
  }
}
src/components/alarmCardPop.vue
@@ -24,7 +24,8 @@
          >
            <alarm-card
              :name="(row - 1) * cols + col + ''"
              :level="bits[(row - 1) * cols + col - 1] ? 3 : 0"
              :level="level"
              :flag="bits[(row - 1) * cols + col - 1]"
              v-if="(row - 1) * cols + col <= count"
              >{{ (row - 1) * cols + col }}</alarm-card
            >
@@ -53,6 +54,13 @@
    title: {
      type: String,
      default: "",
    },
    level: {
      type: Number,
      required: true,
      validator(value) {
        return [0, 1, 2, 3].some((v) => v == value);
      },
    },
    value: {
      type: Array,
@@ -112,7 +120,7 @@
    width: 800px;
  }
  .p-header {
    background: #78EEF8;
    background: #78eef8;
    color: #072943;
    font-weight: bold;
    height: 36px;
@@ -120,8 +128,8 @@
    border-radius: 6px 6px 0 0;
  }
  .p-body {
    background: #0C4D77;
    border: 1px solid #78EEF8;
    background: #0c4d77;
    border: 1px solid #78eef8;
    border-radius: 0 0 6px 6px;
    padding: 20px;
  }
src/components/bar1.vue
@@ -69,6 +69,7 @@
          }
        }
      });
      big = big || 1;
      for (let i = 0; i < sData.length; i++) {
        getmydzd.push(big * 4);
      }
@@ -90,6 +91,8 @@
        //让显示的刻度是整数
        return maxval;
      }
      var max = Math.ceil(calMax([sData]) / 10) * 10;
      return {
@@ -364,7 +367,7 @@
  mounted() {
    this.setData({
      xLabel: ["A相", "B相", "C相"],
      sData: [30, 50, 120],
      sData: [0, 0, 0],
    });
  },
};
src/components/bar2.vue
New file
@@ -0,0 +1,311 @@
<script>
import ECharts from "echarts";
import BaseChart from "@/components/echarts/BaseChart";
export default {
  extends: BaseChart,
  props: {
    name: {
      type: String,
      default: "",
    },
    unit: {
      type: String,
      default: "",
    },
  },
  data() {
    return {};
  },
  methods: {
    fullScreen() {
      return false;
    },
    setData(data) {
      let option = this.getOption(data);
      this.setOption(option);
    },
    getOption(data) {
      let xLabel = data.xLabel;
      let sData = data.sData;
      // let sName = this.name;
      // let maxD = Math.max(...sData);
      // if (maxD <= 0) {
      //   maxD = 1;
      // } else {
      //   maxD = Math.round(maxD * 1.2 * 100) / 100;
      // }
      // let fillData = sData.map(() => maxD);
      // let min = 0;
      // let max =
      //   sData.length == 0
      //     ? 0
      //     : function (data) {
      //         let max = data.max;
      //         if (max == -Infinity) {
      //           max = 1;
      //         }
      //         // max = Math.max(Math.round((max + max * 0.2) * 100) / 100);
      //         return max;
      //       };
      // let data = [
      //   [30, 50, 120],
      //   ["A相", "B相", "C相"],
      // ];
      var getmydzd = [];
      let big = 0;
      sData.forEach((el) => {
        if (!(el === undefined || el === "")) {
          if (big < Number(el)) {
            big = Number(el);
          }
        }
      });
      for (let i = 0; i < sData.length; i++) {
        getmydzd.push(big * 4);
      }
      //计算最大值
      function calMax(arr) {
        let max = 0;
        arr.forEach((el) => {
          el.forEach((el1) => {
            if (!(el1 === undefined || el1 === "")) {
              if (max < Number(el1)) {
                max = Number(el1);
              }
            }
          });
        });
        let maxint = Math.ceil(max / 9.5);
        //不让最高的值超过最上面的刻度
        let maxval = maxint * 10;
        //让显示的刻度是整数
        return maxval;
      }
      var max = Math.ceil(calMax([sData]) / 10) * 10;
      return {
        grid: {
          left: "3%",
          right: "13%",
          bottom: "10%",
          top: "10%",
          containLabel: true,
        },
        tooltip: {
          formatter: (params) => {
            if (params.name !== "") {
              return params.name + " : " + sData[params.dataIndex];
            }
          },
          textStyle: {
            align: "left",
          },
        },
        xAxis: [
          {
            type: "value",
            axisLabel: {
              margin: 5,
              color: "#fff",
              formatter: function (val) {
                return val + "";
              },
              textStyle: {
                fontSize: "13",
              },
            },
            min: 0,
            max: max, // 计算最大值
            interval: max / 5, //  平均分为5份
            splitNumber: 5,
            splitLine: {
              show: false,
              lineStyle: {
                color: "#fff",
              },
            },
            axisLine: {
              show: false,
              lineStyle: {
                color: "#fff",
                width: 1,
                opacity: 0.3,
              },
            },
            axisTick: {
              show: false,
            },
            axisLabel: {
              show: false,
            },
          },
          {
            type: "value",
            axisLabel: {
              show: false,
            },
            min: 0,
            max: max, // 计算最大值
            interval: max / 10, //  平均分为5份
            splitNumber: 10,
            splitLine: {
              show: false,
              lineStyle: {
                type: "dashed",
                color: "#D8D8D8",
              },
            },
            axisLine: {
              show: false,
              lineStyle: {
                color: "#fff",
              },
            },
            axisTick: {
              show: false,
            },
          },
        ],
        yAxis: [
          {
            type: "category",
            inverse: true,
            //  boundaryGap:true,
            axisLabel: {
              formatter: (value, index) => {
                if (value.length >= 12) {
                  value = value.slice(0, 12) + `\n` + value.slice(12);
                }
                if (value.length >= 26) {
                  value = value.slice(0, 26) + `\n` + value.slice(26);
                }
                return value;
              },
              textStyle: {
                color: "rgba(255,255,255,0.8)",
                fontSize: "12",
                align: "right",
                lineHeight: 18,
              },
            },
            splitLine: {
              show: false,
            },
            axisTick: {
              show: false,
            },
            axisLine: {
              show: false,
              lineStyle: {
                color: "#fff",
                width: 1,
                opacity: 0.3,
              },
            },
            data: xLabel,
          },
          {
            type: "category",
            inverse: true,
            axisTick: "none",
            axisLine: "none",
            show: true,
            axisLabel: {
              textStyle: {
                color: "#ff0000",
                fontSize: "12",
              },
              formatter: function (value) {
                return "{a|" + value + "}";
              },
              rich: {
                a: {
                  backgroundColor: "#0C4D77",
                  fontSize: 14,
                  // lineHeight: 24,
                  verticalAlign: 'middle',
                  width: 50,
                  color: "#78EEF8",
                  // padding: [4, 0, 0, 1],
                  padding: [4, 4 ],
                  borderColor: "#78EEF8",
                  borderRadius: 3,
                  borderWidth: 1,
                },
              },
            },
            data: (function () {
              let arr = [];
              sData.forEach((item) => {
                let data = item + "V";
                arr.push(data);
              });
              return arr;
            })(),
          },
        ],
        dataZoom: [
          {
            type: "inside",
            show: true,
            height: 15,
            start: 1,
            end: 100,
            orient: "vertical",
            zlevel: 66,
          },
        ],
        series: [
          {
            name: "值",
            type: "bar",
            xAxisIndex: 0,
            itemStyle: {
              normal: {
                // barBorderRadius: [0, 5, 5, 0],
                color: function (params) {
                  let colorList = ["#78EEF8", "#FFF100", "#F3535F"];
                  return colorList[params.dataIndex];
                },
              },
            },
            barWidth: 25,
            data: sData,
            z: 1,
          },
          {
            name: "背景",
            type: "bar",
            barWidth: 25,
            barGap: "-100%",
            xAxisIndex: 1,
            data: getmydzd,
            itemStyle: {
              normal: {
                color: '#52768C'
              },
            },
            z: 0,
          },
        ],
      };
    },
  },
  mounted() {
    this.setData({
      xLabel: ["A相", "B相", "C相"],
      sData: [30, 50, 120],
    });
  },
};
</script>
src/components/gradientBtn.vue
@@ -1,5 +1,5 @@
<template>
  <div :class="['gradient-btn', size, {active}]" @click="handlerClick" :style="styleVar">
  <div :class="['gradient-btn', size, {active, disabled}]" @click="handlerClick" :style="styleVar">
    <slot>按钮</slot>
  </div>
</template>
@@ -35,6 +35,10 @@
      },
      default: ''
    },
    disabled: {
      type: Boolean,
      default: false,
    },
    active: {
      type: Boolean,
      default: false,
@@ -53,6 +57,9 @@
  },
  methods: {
    handlerClick() {
      if (this.disabled) {
        return false;
      }
      this.$emit("click");
    },
  },
@@ -95,5 +102,9 @@
  &.active {
    background: #F2891B;
  }
  &.disabled {
    cursor: not-allowed;
    background: #ccc;
  }
}
</style>
src/components/listCard.vue
@@ -8,7 +8,9 @@
      >
        <div class="content" v-if="iitem">
          <div class="label">{{ iitem.label }}:</div>
          <div class="value">{{ valueObj[iitem.key] || "" }}</div>
          <div class="value">
            {{ iitem.config ? iitem.config[valueObj[iitem["key" + (valueObj[iitem.flag] ? 1 : 0)]]] : valueObj[iitem["key" + (valueObj[iitem.flag] ? 1 : 0)]] }}
          </div>
        </div>
      </div>
    </div>
@@ -116,7 +118,7 @@
  .content {
    flex: 1;
    display: flex;
    justify-content: space-between;
    justify-content: space-between;
    .value {
      width: 88px;
      margin-left: 6px;
src/components/panel.vue
@@ -6,10 +6,12 @@
        <slot name="tools"></slot>
      </div>
      <!-- 标题 -->
      <div class="title">{{ title }}</div>
      <div v-if="title" class="title">{{ title }}</div>
      <!-- 内容 -->
      <div class="content">
        <slot></slot>
      <div class="panel-content">
        <div class="pos-full">
          <slot></slot>
        </div>
      </div>
    </div>
  </div>
@@ -49,8 +51,8 @@
          circle farthest-side at 0% 100%,
          transparent 70%,
          rgba(0, 255, 255, 0.3) 70%,
          rgba(0, 255, 255, 3) 71%,
          rgba(0, 255, 255, 3) 95%,
          rgba(0, 255, 255, 3) 75%,
          rgba(0, 255, 255, 3) 91%,
          rgba(0, 255, 255, 0.3) 96%,
          transparent 96%,
          transparent
@@ -76,8 +78,8 @@
          circle farthest-side at 100% 0,
          transparent 70%,
          rgba(0, 255, 255, 0.3) 70%,
          rgba(0, 255, 255, 3) 71%,
          rgba(0, 255, 255, 3) 95%,
          rgba(0, 255, 255, 3) 75%,
          rgba(0, 255, 255, 3) 91%,
          rgba(0, 255, 255, 0.3) 96%,
          transparent 96%,
          transparent
@@ -103,8 +105,8 @@
          circle farthest-side at 100% 100%,
          transparent 70%,
          rgba(0, 255, 255, 0.3) 70%,
          rgba(0, 255, 255, 3) 71%,
          rgba(0, 255, 255, 3) 95%,
          rgba(0, 255, 255, 3) 75%,
          rgba(0, 255, 255, 3) 91%,
          rgba(0, 255, 255, 0.3) 96%,
          transparent 96%,
          transparent
@@ -130,8 +132,8 @@
          circle farthest-side at 0 0,
          transparent 70%,
          rgba(0, 255, 255, 0.3) 70%,
          rgba(0, 255, 255, 3) 71%,
          rgba(0, 255, 255, 3) 95%,
          rgba(0, 255, 255, 3) 75%,
          rgba(0, 255, 255, 3) 91%,
          rgba(0, 255, 255, 0.3) 96%,
          transparent 96%,
          transparent
@@ -165,6 +167,7 @@
    display: flex;
    flex-direction: column;
    position: relative;
    overflow: hidden;
    .title {
      height: 42px;
      text-align: center;
@@ -173,8 +176,16 @@
      line-height: 42px;
      background: url("images/panel-title.png") 50% 50% / auto 100% no-repeat;
    }
    .content {
    .panel-content {
      flex: 1;
      position: relative;
      .pos-full {
        position: absolute;
        left: 0;
        top: 0;
        right: 0;
        bottom: 0;
      }
    }
    .tools {
      position: absolute;
src/components/ycGrid.vue
@@ -50,12 +50,10 @@
<style scoped lang="less">
.card-children-container {
  color: #fff;
  height: 100%;
  display: flex;
  flex-direction: column;
  .row {
    display: flex;
    flex: 1;
    & ~ .row {
      margin-top: 8px;
    }
src/layout/components/Sidebar/index.vue
@@ -33,9 +33,9 @@
  data() {
    return {
      menuStyle: {
        bg: "#304156",
        text: "#bfcbd9",
        activeText: "#409EFF",
        bg: "#153953",
        text: "#77EEF7",
        activeText: "#77EEF7",
      },
      menus: routes,
    };
@@ -71,6 +71,16 @@
  .side-menu-content {
    flex: 1;
    overflow-y: auto;
    border-right: 1px solid #77EEF7;
    .el-menu {
      padding: 0 6px;
      /deep/ .el-menu-item {
        border-radius: 6px;
      }
    }
  }
}
#app .el-menu /deep/ .el-menu-item.is-active {
  background-color: #011f39 !important;
}
</style>
src/main.js
@@ -15,7 +15,7 @@
import layer from 'vue-layer'
import 'vue-layer/lib/vue-layer.css';
import '@/assets/css/base.css'
import '@/assets/css/base.less'
import './assets/js/unCtrl'
src/router/routes.js
@@ -72,6 +72,20 @@
    ]
  },
  {
    path: "/power-cabinet-rtalarm",
    component: Layout,
    meta: { title: "电源柜实时告警", icon: 'dashboard'},
    name: "powerCabinetRtalarm",
    children: [
      {
        path: '',
        component: () => import('@/views/powerCabinetRtalarm'),
        name: 'powerCabinetRtalarm',
        meta: {title: '电源柜实时告警', icon: 'dashboard'}
      },
    ]
  },
  {
    path: "/user",
    component: Layout,
    redirect: '/user/list',
src/store/modules/globalData.js
New file
@@ -0,0 +1,25 @@
/**
 * 弃用
 */
const state = {
  homeData: {},
}
const mutations = {
  UPDATE_HOMEDATA: (state, data) => {
    state.homeData = data;
  },
}
const actions = {
  updateHomeData({ commit }, data) {
    commit('UPDATE_HOMEDATA', data)
  },
}
export default {
  namespaced: true,
  state,
  mutations,
  actions
}
src/views/home/components/protectorBox.vue
@@ -1,5 +1,9 @@
<template>
  <g :transform="'translate(' + offset.join(',') + ')'">
  <g
    ref="g"
    :transform="'translate(' + offset.join(',') + ')'"
    @click="handlerClick"
  >
    <defs>
      <linearGradient id="color" x1="0%" y1="0%" x2="0%" y2="100%">
        <stop offset="0%" style="stop-color: #377add; stop-opacity: 1" />
@@ -25,6 +29,7 @@
<script>
import img from "../images/bhq.png";
export default {
  name: "",
  props: {
@@ -68,6 +73,9 @@
        C ${cp7[0]} ${cp7[1]}, ${p0[0]} ${p0[1]}, ${cp0[0]} ${cp0[1]}
        Z`;
    },
    handlerClick() {
      this.$emit("click", this.$refs.g);
    },
  },
  mounted() {},
src/views/home/components/switchBox.vue
@@ -1,5 +1,5 @@
<template>
  <g class="pointer" :transform="'translate(' + offset.join(',') + ')'">
  <g class="pointer" ref="g" :transform="'translate(' + offset.join(',') + ')'" @click="handlerClick">
    <!-- 圆角矩形 -->
    <path
      :d="createRoundRectPath(small ? 64 : 84, 68, 10)"
@@ -113,6 +113,9 @@
        C ${cp7[0]} ${cp7[1]}, ${p0[0]} ${p0[1]}, ${cp0[0]} ${cp0[1]}
        Z`;
    },
    handlerClick() {
      this.$emit('click', this.$refs.g);
    }
  },
  mounted() {},
src/views/home/index.vue
@@ -1,5 +1,5 @@
<script>
import { mapState } from "vuex";
import { mapMutations, mapState } from "vuex";
import { updateDfu, readFileList, getDevFileName, stopDfu } from "./api";
import propConfig from "./js/props";
import SwitchBox from "./components/switchBox";
@@ -14,14 +14,15 @@
import kggImg from "./images/kgg.png";
import hrImg from "./images/hr.png";
import ListCard from "@/components/listCard.vue";
// import { mixin as clickaway } from "vue-clickaway";
import createWs from "@/assets/js/websocket/plus";
const WSMixin = createWs("dev", "dfu");
const WSMixin = createWs("ckRtAndSignalAndHr");
const { PDG, KGG, HR } = propConfig;
export default {
  name: "home",
  // mixins: [WSMixin],
  mixins: [WSMixin],
  components: {
    FileProcess,
    Panel,
@@ -40,12 +41,39 @@
      pdgImg,
      kggImg,
      hrImg,
      rtData: {},
      popVisible: false,
      popPosition: {
        top: 0,
        left: 0,
      },
    };
  },
  methods: {
    hover() {
      console.log('hhhh');
    }
    ...mapMutations('globalData', ['UPDATE_HOMEDATA']),
    showState(el) {
      console.log("hhhh", el);
      let { x, y, width, height, left, right, top, bottom } =
        el.getBoundingClientRect();
      console.log(x, "pos");
      this.popPosition.left = right + "px";
      this.popPosition.top = bottom + "px";
      this.popVisible = true;
    },
    onWSMessage1(res) {
      let { data, data2, data3 } = JSON.parse(res.data);
      // console.log(data, "=====data", data2);
      // this.paramsAlram(data);
      this.rtData = {
        ...data,
        ...data2,
        ...data3,
      };
      // this.UPDATE_HOMEDATA(this.rtData);
    },
    redirect(tabIdx) {
      this.$router.push({ name: "realtime", params: { tabIdx } });
    },
  },
  computed: {
    ...mapState({
@@ -63,7 +91,7 @@
        <div class="info info1">
          <div class="side">
            <div class="info-title">交直流配电柜</div>
            <div class="img">
            <div class="img" @click="redirect(0)">
              <el-image :src="pdgImg" fit="fill"></el-image>
            </div>
            <div class="state">
@@ -78,13 +106,18 @@
            </div>
          </div>
          <div class="main">
            <list-card :datas="PDG" :rows="9" :cols="2"></list-card>
            <list-card
              :datas="PDG"
              :valueObj="rtData"
              :rows="9"
              :cols="2"
            ></list-card>
          </div>
        </div>
        <div class="info info2">
          <div class="side">
            <div class="info-title">高频开关柜</div>
            <div class="img">
            <div class="img" @click="redirect(1)">
              <el-image :src="kggImg" fit="fill"></el-image>
            </div>
            <div class="state">
@@ -99,14 +132,19 @@
            </div>
          </div>
          <div class="main">
            <list-card :datas="KGG" :rows="6" :cols="2"></list-card>
            <list-card
              :datas="KGG"
              :valueObj="rtData"
              :rows="5"
              :cols="2"
            ></list-card>
          </div>
        </div>
        <div class="info info3">
          <div class="side">
            <div class="info-title">核容装置</div>
            <div class="img img3">
            <div class="img img3" @click="redirect(2)">
              <el-image :src="hrImg" fit="fill"></el-image>
            </div>
            <div class="state">
@@ -121,7 +159,13 @@
            </div>
          </div>
          <div class="main">
            <list-card :datas="HR" :emptyIdxs="[3]" :rows="4" :cols="2"></list-card>
            <list-card
              :datas="HR"
              :valueObj="rtData"
              :emptyIdxs="[3]"
              :rows="4"
              :cols="2"
            ></list-card>
          </div>
        </div>
      </div>
@@ -137,14 +181,45 @@
                <div class="pos-full">
                  <svg width="100%" height="100%" viewBox="0 0 500 340">
                    <text-box :offset="[220, 10]"></text-box>
                    <protector-box :offset="[36, 10]"></protector-box>
                    <switch-box :type="3" :offset="[36, 134]"></switch-box>
                    <switch-box :type="3" :offset="[220, 134]"></switch-box>
                    <switch-box :type="3" :offset="[390, 134]"></switch-box>
                    <switch-box :type="1" :offset="[36, 252]"></switch-box>
                    <switch-box :type="1" :offset="[150, 252]"></switch-box>
                    <switch-box :type="1" :offset="[274, 252]"></switch-box>
                    <switch-box :type="1" :offset="[390, 252]"></switch-box>
                    <protector-box
                      @click="showState"
                      :offset="[36, 10]"
                    ></protector-box>
                    <switch-box
                      @click="showState"
                      :type="3"
                      :offset="[36, 134]"
                    ></switch-box>
                    <switch-box
                      @click="showState"
                      :type="3"
                      :offset="[220, 134]"
                    ></switch-box>
                    <switch-box
                      @click="showState"
                      :type="3"
                      :offset="[390, 134]"
                    ></switch-box>
                    <switch-box
                      @click="showState"
                      :type="1"
                      :offset="[36, 252]"
                    ></switch-box>
                    <switch-box
                      @click="showState"
                      :type="1"
                      :offset="[150, 252]"
                    ></switch-box>
                    <switch-box
                      @click="showState"
                      :type="1"
                      :offset="[274, 252]"
                    ></switch-box>
                    <switch-box
                      @click="showState"
                      :type="1"
                      :offset="[390, 252]"
                    ></switch-box>
                    <svg-line
                      :points="[
                        [262, 40],
@@ -221,14 +296,45 @@
                <div class="pos-full">
                  <svg width="100%" height="100%" viewBox="0 0 500 340">
                    <text-box :offset="[220, 10]"></text-box>
                    <protector-box :offset="[390, 10]"></protector-box>
                    <switch-box :type="3" :offset="[36, 134]"></switch-box>
                    <switch-box :type="3" :offset="[220, 134]"></switch-box>
                    <switch-box :type="3" :offset="[390, 134]"></switch-box>
                    <switch-box :type="1" :offset="[36, 252]"></switch-box>
                    <switch-box :type="1" :offset="[150, 252]"></switch-box>
                    <switch-box :type="1" :offset="[274, 252]"></switch-box>
                    <switch-box :type="1" :offset="[390, 252]"></switch-box>
                    <protector-box
                      @click="showState"
                      :offset="[390, 10]"
                    ></protector-box>
                    <switch-box
                      @click="showState"
                      :type="3"
                      :offset="[36, 134]"
                    ></switch-box>
                    <switch-box
                      @click="showState"
                      :type="3"
                      :offset="[220, 134]"
                    ></switch-box>
                    <switch-box
                      @click="showState"
                      :type="3"
                      :offset="[390, 134]"
                    ></switch-box>
                    <switch-box
                      @click="showState"
                      :type="1"
                      :offset="[36, 252]"
                    ></switch-box>
                    <switch-box
                      @click="showState"
                      :type="1"
                      :offset="[150, 252]"
                    ></switch-box>
                    <switch-box
                      @click="showState"
                      :type="1"
                      :offset="[274, 252]"
                    ></switch-box>
                    <switch-box
                      @click="showState"
                      :type="1"
                      :offset="[390, 252]"
                    ></switch-box>
                    <svg-line
                      :points="[
                        [262, 40],
@@ -305,15 +411,52 @@
              <div class="svg-contain">
                <div class="pos-full">
                  <svg width="100%" height="100%" viewBox="0 0 622 240">
                    <switch-box @click.native="hover" :type="2" :offset="[269, 14]"></switch-box>
                    <switch-box @click.native="hover" small :offset="[20, 160]"></switch-box>
                    <switch-box small :offset="[94, 160]"></switch-box>
                    <switch-box small :offset="[168, 160]"></switch-box>
                    <switch-box alarm small :offset="[242, 160]"></switch-box>
                    <switch-box small :offset="[316, 160]"></switch-box>
                    <switch-box small :offset="[390, 160]"></switch-box>
                    <switch-box small :offset="[464, 160]"></switch-box>
                    <switch-box small :offset="[538, 160]"></switch-box>
                    <switch-box
                      @click="showState"
                      :type="2"
                      :offset="[269, 14]"
                    ></switch-box>
                    <switch-box
                      @click="showState"
                      small
                      :offset="[20, 160]"
                    ></switch-box>
                    <switch-box
                      @click="showState"
                      small
                      :offset="[94, 160]"
                    ></switch-box>
                    <switch-box
                      @click="showState"
                      small
                      :offset="[168, 160]"
                    ></switch-box>
                    <switch-box
                      @click="showState"
                      alarm
                      small
                      :offset="[242, 160]"
                    ></switch-box>
                    <switch-box
                      @click="showState"
                      small
                      :offset="[316, 160]"
                    ></switch-box>
                    <switch-box
                      @click="showState"
                      small
                      :offset="[390, 160]"
                    ></switch-box>
                    <switch-box
                      @click="showState"
                      small
                      :offset="[464, 160]"
                    ></switch-box>
                    <switch-box
                      @click="showState"
                      small
                      :offset="[538, 160]"
                    ></switch-box>
                    <svg-line
                      :points="[
                        [311, 82],
@@ -379,15 +522,51 @@
              <div class="svg-contain">
                <div class="pos-full">
                  <svg width="100%" height="100%" viewBox="0 0 622 240">
                    <switch-box :type="2" :offset="[269, 14]"></switch-box>
                    <switch-box small :offset="[20, 160]"></switch-box>
                    <switch-box small :offset="[94, 160]"></switch-box>
                    <switch-box small :offset="[168, 160]"></switch-box>
                    <switch-box small :offset="[242, 160]"></switch-box>
                    <switch-box small :offset="[316, 160]"></switch-box>
                    <switch-box small :offset="[390, 160]"></switch-box>
                    <switch-box small :offset="[464, 160]"></switch-box>
                    <switch-box small :offset="[538, 160]"></switch-box>
                    <switch-box
                      @click="showState"
                      :type="2"
                      :offset="[269, 14]"
                    ></switch-box>
                    <switch-box
                      @click="showState"
                      small
                      :offset="[20, 160]"
                    ></switch-box>
                    <switch-box
                      @click="showState"
                      small
                      :offset="[94, 160]"
                    ></switch-box>
                    <switch-box
                      @click="showState"
                      small
                      :offset="[168, 160]"
                    ></switch-box>
                    <switch-box
                      @click="showState"
                      small
                      :offset="[242, 160]"
                    ></switch-box>
                    <switch-box
                      @click="showState"
                      small
                      :offset="[316, 160]"
                    ></switch-box>
                    <switch-box
                      @click="showState"
                      small
                      :offset="[390, 160]"
                    ></switch-box>
                    <switch-box
                      @click="showState"
                      small
                      :offset="[464, 160]"
                    ></switch-box>
                    <switch-box
                      @click="showState"
                      small
                      :offset="[538, 160]"
                    ></switch-box>
                    <svg-line
                      :points="[
                        [311, 82],
@@ -450,6 +629,26 @@
        </div>
      </div>
    </panel>
    <!-- 开关状态 -->
    <div class="pop-info" v-show="popVisible" :style="popPosition">
      <div class="item">
        <div class="label">开关名称</div>
        <div class="value">直流微断开关DK16</div>
      </div>
      <div class="item">
        <div class="label">开关规格</div>
        <div class="value">1P/16A</div>
      </div>
      <div class="item">
        <div class="label">开关状态</div>
        <div class="value">分闸</div>
      </div>
    </div>
    <div
      class="trans-mask"
      v-show="popVisible"
      @click="popVisible = false"
    ></div>
  </div>
</template>
@@ -506,6 +705,7 @@
      .img {
        width: 80px;
        height: 120px;
        cursor: pointer;
      }
      .img3 {
        width: 120px;
@@ -646,4 +846,33 @@
    }
  }
}
.pop-info {
  position: absolute;
  background: #4871e3;
  transform: translate(-100%, -100%);
  padding: 16px;
  border-radius: 6px;
  z-index: 99;
  .item {
    display: flex;
    white-space: nowrap;
    .label {
      margin-right: 0.4em;
      &::after {
        content: ":";
      }
    }
  }
}
.trans-mask {
  z-index: 98;
  // background: transparent;
  background: rgba(0, 0, 0, 0.4);
  position: fixed;
  // pointer-events: none;
  left: 0;
  top: 0;
  bottom: 0;
  right: 0;
}
</style>
src/views/home/js/props.js
@@ -1,155 +1,247 @@
/**
 * key0 为直实值对应的属性名
 * key1 为模拟值对应的属性名
 * flag 为0真实值生效 1模拟值生效
 */
const PDG = [
  {
    label: '1路交流输入A相电压(V)',
    key: '',
    label: "1路交流输入A相电压(V)",
    key0: "acIn1VolAReal",
    key1: "acIn1VolAFake",
    flag: "acIn1VolASt",
  },
  {
    label: '1路交流输入B相电压(V)',
    key: '',
    label: "1路交流输入B相电压(V)",
    key0: "acIn1VolBReal",
    key1: "acIn1VolBFake",
    flag: "acIn1VolBSt",
  },
  {
    label: '1路交流输入C相电压(V)',
    key: '',
    label: "1路交流输入C相电压(V)",
    key0: "acIn1VolCReal",
    key1: "acIn1VolCFake",
    flag: "acIn1VolCSt",
  },
  {
    label: '1路交流输入A相电流(A)',
    key: '',
    label: "1路交流输入A相电流(A)",
    key0: "acIn1CurrAReal",
    key1: "acIn1CurrAFake",
    flag: "acIn1CurrASt",
  },
  {
    label: '1路交流输入B相电流(A)',
    key: '',
    label: "1路交流输入B相电流(A)",
    key0: "acIn1CurrBReal",
    key1: "acIn1CurrBFake",
    flag: "acIn1CurrBSt",
  },
  {
    label: '1路交流输入C相电流(A)',
    key: '',
    label: "1路交流输入C相电流(A)",
    key0: "acIn1CurrCReal",
    key1: "acIn1CurrCFake",
    flag: "acIn1CurrCSt",
  },
  {
    label: '直流电压(V)',
    key: '',
    label: "第1路直流输入电压(V)",
    key0: "dcIn1VolReal",
    key1: "dcIn1VolFake",
    flag: "dcIn1VolSt",
  },
  {
    label: '电池组电压(V)',
    key: '',
    label: "1段直流母线输出电压(V)",
    key0: "dcOut1VolReal",
    key1: "dcOut1VolFake",
    flag: "dcOut1VolSt",
  },
  {
    label: '机柜温度(℃)',
    key: '',
    label: "1段直流母线输出电流(A)",
    key0: "dcOut1CurrReal",
    key1: "dcOut1CurrFake",
    flag: "dcOut1CurrSt",
  },
  // {
  //   label: '直流配电柜温度(℃)',
  //   key0: 'dcCabinetTempReal',
  //   key1: 'dcCabinetTempFake',
  //   flag: 'dcCabinetTempSt',
  // },
  // {
  //   label: '交流配电柜温度(℃)',
  //   key0: 'acCabinetTempReal',
  //   key1: 'acCabinetTempFake',
  //   flag: 'acCabinetTempSt',
  // },
  {
    label: "2路交流输入A相电压(V)",
    key0: "acIn2VolAReal",
    key1: "acIn2VolAFake",
    flag: "acIn2VolASt",
  },
  {
    label: "2路交流输入B相电压(V)",
    key0: "acIn2VolBReal",
    key1: "acIn2VolBFake",
    flag: "acIn2VolBSt",
  },
  {
    label: "2路交流输入C相电压(V)",
    key0: "acIn2VolCReal",
    key1: "acIn2VolCFake",
    flag: "acIn2VolCSt",
  },
  {
    label: "2路交流输入A相电流(A)",
    key0: "acIn2CurrAReal",
    key1: "acIn2CurrAFake",
    flag: "acIn2CurrASt",
  },
  {
    label: "2路交流输入B相电流(A)",
    key0: "acIn2CurrBReal",
    key1: "acIn2CurrBFake",
    flag: "acIn2CurrBSt",
  },
  {
    label: "2路交流输入C相电流(A)",
    key0: "acIn2CurrCReal",
    key1: "acIn2CurrCFake",
    flag: "acIn2CurrCSt",
  },
  {
    label: "第2路直流输入电压(V)",
    key0: "dcIn2VolReal",
    key1: "dcIn2VolFake",
    flag: "dcIn2VolSt",
  },
  {
    label: '2路交流输入A相电压(V)',
    key: '',
    label: "2段直流母线输出电压(V)",
    key0: "dcOut2VolReal",
    key1: "dcOut2VolFake",
    flag: "dcOut2VolSt",
  },
  {
    label: '2路交流输入B相电压(V)',
    key: '',
  },
  {
    label: '2路交流输入C相电压(V)',
    key: '',
  },
  {
    label: '2路交流输入A相电流(A)',
    key: '',
  },
  {
    label: '2路交流输入B相电流(A)',
    key: '',
  },
  {
    label: '2路交流输入C相电流(A)',
    key: '',
  },
  {
    label: '直流电流(A)',
    key: '',
  },
  {
    label: '电池组电流(A)',
    key: '',
  },
  {
    label: '故障报警',
    key: '',
    label: "2段直流母线输出电流(A)",
    key0: "dcOut2CurrReal",
    key1: "dcOut2CurrFake",
    flag: "dcOut2CurrSt",
  },
];
const KGG = [
  {
    label: '交流输入电压(V)',
    key: '',
    label: "交流A相输出电压(V)",
    key0: "acOutVolAReal",
    key1: "acOutVolAFake",
    flag: "acOutVolASt",
  },
  {
    label: '交流输入电流(A)',
    key: '',
    label: "交流B相输出电压(V)",
    key0: "acOutVolBReal",
    key1: "acOutVolBFake",
    flag: "acOutVolBSt",
  },
  {
    label: '电池电压(V)',
    key: '',
    label: "交流C相输出电压(V)",
    key0: "acOutVolCReal",
    key1: "acOutVolCFake",
    flag: "acOutVolCSt",
  },
  {
    label: '负载电流(A)',
    key: '',
    label: "直流输出电压(V)",
    key0: "dcOutVolReal",
    key1: "dcOutVolFake",
    flag: "dcOutVolSt",
  },
  {
    label: '开关状态',
    key: '',
    label: "负载电流(A)",
    key0: "loadCurrReal",
    key1: "loadCurrFake",
    flag: "loadCurrSt",
  },
  {
    label: '故障报警',
    key: '',
    label: "交流A相输出电流(A)",
    key0: "acOutCurrAReal",
    key1: "acOutCurrAFake",
    flag: "acOutCurrASt",
  },
  {
    label: '直流输出电压(V)',
    key: '',
    label: "交流B相输出电流(A)",
    key0: "acOutCurrBReal",
    key1: "acOutCurrBFake",
    flag: "acOutCurrBSt",
  },
  {
    label: '直流输出电流(A)',
    key: '',
    label: "交流C相输出电流(A)",
    key0: "acOutCurrCReal",
    key1: "acOutCurrCFake",
    flag: "acOutCurrCSt",
  },
  {
    label: '电池(充电)电流(A)',
    key: '',
    label: "电池组端电压(V)",
    key0: "batt1GroupVolReal",
    key1: "batt1GroupVolFake",
    flag: "batt1GroupVolSt",
  },
  {
    label: '直流熔丝状态',
    key: '',
    label: "蓄电池组充电电流(A)",
    key0: "battCharCurrReal",
    key1: "battCharCurrFake",
    flag: "battCharCurrSt",
  },
  {
    label: '机柜温度(℃)',
    key: '',
  },
  // {
  //   label: "机柜温度(℃)",
  //   key0: "highFrqCabinetTempReal",
  //   key1: "highFrqCabinetTempFake",
  //   flag: "highFrqCabinetTempSt",
  // },
];
const HR = [
  {
    label: '系统工作状态',
    key: '',
    label: "核容装置工作状态",
    key0: "devWorkStateReal",
    key1: "devWorkStateFake",
    flag: "devWorkStateSt",
    // [0:在线浮充 1:预充电(限流充电)2:核容测试 3:停电放电 4:内阻测试 5:K1/D1 测试]'
    config: [
      "在线浮充",
      "预充电(限流充电)",
      "核容测试",
      "停电放电",
      "内阻测试",
      "K1/D1测试",
    ],
  },
  {
    label: '电池组电流',
    key: '',
  },
  {
    label: '最高单体电压',
    key: '',
    label: "电池组均/浮充状态",
    key0: "junFloatStateReal",
    key1: "junFloatStateFake",
    flag: "junFloatStateSt",
    // [1-均充;0-浮充]
    config: ["浮充", "均充"],
  },
  {
    label: '电池组电压',
    key: '',
    label: "电池组电压(V)",
    key0: "batt1GroupVolReal",
    key1: "batt1GroupVolFake",
    flag: "batt1GroupVolSt",
  },
  {
    label: '在线端电压',
    key: '',
    label: "电池组电流(A)",
    key0: "battCharCurrReal",
    key1: "battCharCurrFake",
    flag: "battCharCurrSt",
  },
  {
    label: '最低单体电压',
    key: '',
  {
    label: "在线端电压",
    key0: "onlineVolReal",
    key1: "onlineVolFake",
    flag: "onlineVolSt",
  },
];
export default {
  PDG,
  KGG,
  HR
}
  HR,
};
src/views/powerCabinetControl/components/card.vue
@@ -5,12 +5,12 @@
        <div class="i"></div>
        {{ title }}
      </div>
      <el-checkbox v-model="checked"></el-checkbox>
      <el-checkbox v-model="checked1" @change="changed"></el-checkbox>
    </div>
    <div class="card-content">
      <div class="row">
        实时:
        <div class="value">18</div>
        <div class="value">{{ value }}</div>
        <div class="btn"></div>
      </div>
      <div class="row">
@@ -18,11 +18,14 @@
        <el-input-number
          class="input"
          size="mini"
          :disabled="setFlag"
          v-model="num"
          :step="1"
        ></el-input-number>
        <div class="btn">
          <gradient-btn :active="setFlag" size="xs">{{setFlag ? btnText + '中' : btnText}}</gradient-btn>
          <gradient-btn :active="setFlag" size="xs" @click="confirm">{{
            setFlag ? btnText + "中" : btnText
          }}</gradient-btn>
        </div>
      </div>
    </div>
@@ -31,32 +34,91 @@
<script>
import gradientBtn from "@/components/gradientBtn.vue";
import { updateYC } from "../js/apis";
export default {
  name: "",
  props: {
    title: {
      type: String,
      default: "我是标题",
    option: {
      type: Object,
      required: true,
    },
    setFlag: {
      type: Boolean,
      default: false,
    datas: {
      type: Object,
      required: true,
    },
    btnText: {
      type: String,
      default: '给定'
    }
      default: "给定",
    },
    checked: {
      type: Boolean,
      required: true,
    },
  },
  computed: {
    title() {
      return this.option.label;
    },
    tip() {
      return this.option.tip;
    },
    setFlag() {
      return !!this.datas[this.option.flag];
    },
    value() {
      let { datas, option } = this;
      return this.setFlag ? datas[option.key1] : datas[option.key0];
    },
  },
  watch: {
    datas(n, o) {
      if (o.isEmpty && !n.inEmpty) {
        this.num = this.datas[this.option.key1];
      }
    },
    checked(n) {
      this.checked1 = n;
    },
  },
  data() {
    return {
      checked: true,
      checked1: this.checked,
      // checked: false,
      num: 0,
    };
  },
  components: {
    gradientBtn,
  },
  methods: {},
  methods: {
    changed() {
      this.$emit("update:checked", this.checked1);
    },
    confirm() {
      let title = this.setFlag ? "是否取消给定?" : "是否给定?";
      this.$confirm(title, "提示", {
        type: "warning",
      })
        .then(() => {
          // console.log('调用结定接口', this.num, this.option.key1);
          let loading = this.$layer.loading();
          let params = {};
          params[this.option.key1] = this.num;
          params[this.option.flag] = 1;
          updateYC(params)
            .then((res) => {
              let { code, data, msg } = res.data;
              this.$layer.close(loading);
              this.$message(msg);
            })
            .catch((err) => {
              console.log(err);
              this.$layer.close(loading);
            });
        })
        .catch(() => {});
    },
  },
  mounted() {},
};
@@ -72,7 +134,7 @@
  flex-direction: column;
}
.card {
  height: 100%;
  height: 110px;
  border: 1px solid #3e8d9d;
  border-radius: 4px;
  color: #fff;
@@ -122,7 +184,7 @@
    }
  }
  .btn {
    width: 76px;
    width: 60px;
  }
  .row {
    flex: 1;
src/views/powerCabinetControl/components/card2.vue
@@ -2,7 +2,13 @@
  <div class="card flex-c">
    <div class="card-title">
      <div class="flex-r">
        <div class="i"></div>
        <el-tooltip
          effect="dark"
          :content="tip"
          placement="top-start"
        >
          <div class="i"></div>
        </el-tooltip>
        {{ title }}
      </div>
      <el-checkbox v-model="checked"></el-checkbox>
@@ -15,7 +21,9 @@
      <div class="col">
        模拟:
        <div class="btn">
          <gradient-btn :active="setFlag" size="xs">{{setFlag ? '执行中' : '执行'}}</gradient-btn>
          <gradient-btn :active="setFlag" @click="handlerClick" size="xs">{{
            setFlag ? "执行中" : "执行"
          }}</gradient-btn>
        </div>
      </div>
    </div>
@@ -27,14 +35,14 @@
export default {
  name: "",
  props: {
    title: {
      type: String,
      default: "我是标题",
    option: {
      type: Object,
      required: true
    },
    setFlag: {
      type: Boolean,
      default: false,
    }
    datas: {
      type: Object,
      required: true,
    },
  },
  data() {
    return {
@@ -42,10 +50,25 @@
      num: 0,
    };
  },
  computed: {
    title() {
      return this.option.label;
    },
    tip() {
      return this.option.tip;
    },
    setFlag() {
      return !!this.datas[this.option.flag];
    },
  },
  components: {
    gradientBtn,
  },
  methods: {},
  methods: {
    handlerClick() {
      console.log('执行', this.option);
    }
  },
  mounted() {},
};
@@ -61,13 +84,13 @@
  flex-direction: column;
}
.card {
  height: 100%;
  height: 100px;
  border: 1px solid #77edf6;
  border-radius: 4px;
  color: #fff;
  overflow: hidden;
  .card-title {
    background: #011F39;
    background: #011f39;
    height: 30px;
    color: #77edf6;
    display: flex;
@@ -77,6 +100,7 @@
    border-bottom: 1px solid #77edf6;
  }
  .i {
    cursor: pointer;
    margin-left: 4px;
    margin-right: 6px;
    width: 20px;
@@ -87,9 +111,9 @@
  }
  .card-content {
    flex: 1;
    background: #0C4D77;
    background: #0c4d77;
    display: flex;
    justify-content: space-between;
    justify-content: space-between;
    align-items: center;
    padding: 6px;
  }
src/views/powerCabinetControl/components/ipCard.vue
@@ -86,7 +86,7 @@
  flex-direction: column;
}
.card {
  height: 100%;
  height: 110px;
  border: 1px solid #3e8d9d;
  border-radius: 4px;
  color: #fff;
src/views/powerCabinetControl/index.vue
@@ -5,26 +5,56 @@
        <div class="tab-content content1 flex-r">
          <panel class="panel left" title="遥测量模拟">
            <div slot="tools" class="btn-grp">
              <gradient-btn size="xs">全选</gradient-btn>
              <gradient-btn size="xs">批量给定</gradient-btn>
              <gradient-btn size="xs" @click="selectAll('checkList1_acdc')"
                >全选</gradient-btn
              >
              <gradient-btn
                size="xs"
                :disabled="!checkList1_acdc.some((v) => v == true)"
                @click="batchYCSet('acdc')"
                >批量给定</gradient-btn
              >
            </div>
            <div class="content">
              <yc-grid :count="18" :config="[1, 2, 3]">
                <template v-slot="scope">
                  <card :setFlag="Math.random() > 0.5"></card>
            <div class="content flex-c">
              <yc-grid
                class="scroller"
                :count="param_acdc.length"
                :config="param_acdc"
              >
                <template v-slot="{ data, index }">
                  <card
                    :ref="'acdc_param_' + index"
                    :option="data[index]"
                    :checked.sync="checkList1_acdc[index]"
                    :datas="rtData"
                  ></card>
                </template>
              </yc-grid>
            </div>
          </panel>
          <panel class="panel right" title="遥信量模拟">
            <div slot="tools" class="btn-grp">
              <gradient-btn size="xs">全选</gradient-btn>
              <gradient-btn size="xs">批量执行</gradient-btn>
              <gradient-btn
                size="xs"
                @click="selectAll('acdc_alarms')"
                >全选</gradient-btn
              >
              <gradient-btn
                size="xs"
                :disabled="!checkList1_acdc.some((v) => v == true)"
                @click="batchYXSet('checkList1_acdc')"
                >批量执行</gradient-btn
              >
            </div>
            <div class="content">
              <yc-grid :count="28" :cols="4" :config="[1, 2, 3]">
                <template v-slot="scope">
                  <card2></card2>
              <yc-grid
                class="scroller"
                :count="acdc_alarms.length"
                :cols="4"
                :config="acdc_alarms"
              >
                <template v-slot="{ data, index }">
                  <card2 :option="data[index]" :datas="rtData"></card2>
                </template>
              </yc-grid>
            </div>
@@ -35,13 +65,26 @@
        <div class="tab-content content2 flex-r">
          <panel class="panel left" title="遥测量模拟">
            <div slot="tools" class="btn-grp">
              <gradient-btn size="xs">全选</gradient-btn>
              <gradient-btn
                size="xs"
                @click="selectAll('checkList1_gp')"
                >全选</gradient-btn
              >
              <gradient-btn size="xs">批量给定</gradient-btn>
            </div>
            <div class="content">
              <yc-grid :count="18" :config="[1, 2, 3]">
                <template v-slot="scope">
                  <card></card>
            <div class="content flex-c">
              <yc-grid
                class="scroller"
                :count="param_gp.length"
                :cols="3"
                :config="param_gp"
              >
                <template v-slot="{ data, index }">
                  <card
                    :option="data[index]"
                    :datas="rtData"
                    :checked.sync="checkList1_gp[index]"
                  ></card>
                </template>
              </yc-grid>
            </div>
@@ -52,9 +95,14 @@
              <gradient-btn size="xs">批量执行</gradient-btn>
            </div>
            <div class="content">
              <yc-grid :count="28" :cols="4" :config="[1, 2, 3]">
                <template v-slot="scope">
                  <card2></card2>
              <yc-grid
                class="scroller"
                :count="gp_alarms.length"
                :cols="4"
                :config="gp_alarms"
              >
                <template v-slot="{ data, index }">
                  <card2 :option="data[index]" :datas="rtData"></card2>
                </template>
              </yc-grid>
            </div>
@@ -71,15 +119,22 @@
            <div class="content">
              <div class="grid1">
                <yc-grid :count="6" :config="[1, 2, 3]">
                  <template v-slot="scope">
                    <card btnText="设定"></card>
                  <template v-slot="{ data, index }">
                    <card
                      :option="{}"
                      :checked.sync="checkList1_gp[index]"
                      :datas="rtData"
                    ></card>
                  </template>
                </yc-grid>
              </div>
              <div class="grid1">
                <yc-grid :count="3" :cols="2" :config="ips">
                  <template v-slot="scope">
                    <ip-card :ip.sync="scope.data[scope.index].ip" @change="changeIp"></ip-card>
                  <template v-slot="{ data, index }">
                    <ip-card
                      :ip.sync="data[index].ip"
                      @change="changeIp"
                    ></ip-card>
                  </template>
                </yc-grid>
              </div>
@@ -89,7 +144,7 @@
            <div class="content">
              <el-row class="el_row" :gutter="20">
                <el-col class="el_col" :span="12">
                  <div class="card">
                  <div class="card3">
                    <div class="card-title">蓄电池放电模拟</div>
                    <div class="card-content">
                      <div class="item-row">
@@ -107,7 +162,7 @@
                  </div>
                </el-col>
                <el-col class="el_col" :span="12">
                  <div class="card">
                  <div class="card3">
                    <div class="card-title">蓄电池内阻模拟</div>
                    <div class="card-content">
                      <div class="item-row">
@@ -127,7 +182,7 @@
                  </div>
                </el-col>
                <el-col class="el_col" :span="12">
                  <div class="card">
                  <div class="card3">
                    <div class="card-title">核容装置K1/D1测试模拟</div>
                    <div class="card-content">
                      <div class="item-row">
@@ -147,7 +202,7 @@
                  </div>
                </el-col>
                <el-col class="el_col" :span="12">
                  <div class="card">
                  <div class="card3">
                    <div class="card-title">蓄电池内阻模拟</div>
                    <div class="card-content">
                      <div class="item-row">
@@ -164,7 +219,7 @@
                  </div>
                </el-col>
                <el-col class="el_col" :span="12">
                  <div class="card">
                  <div class="card3">
                    <div class="card-title">核容装置IP配置</div>
                    <div class="card-content">
                      <div class="item-row">
@@ -220,9 +275,17 @@
import card from "./components/card";
import card2 from "./components/card2";
import IpCard from "./components/ipCard";
import props_const from "./js/const_props";
const { props1, props2, param_acdc, param_gp } = props_const;
import createWs from "@/assets/js/websocket/plus";
const WSMixin = createWs("ckRtAndSignalAndHr", "ckDevRsAndRtAlm");
import { updateYC } from "./js/apis";
export default {
  name: "",
  mixins: [WSMixin],
  components: {
    Panel,
    ycGrid,
@@ -234,11 +297,139 @@
  },
  data() {
    return {
      rtData: {
        isEmpty: true,
      },
      // props1,
      // props2,
      param_acdc,
      param_gp,
      checkList1_acdc: param_acdc.map(() => false),
      checkList1_gp: param_gp.map(() => false),
      ips: [{ ip: "192.168.10.222" }, { ip: "255.0.0.0" }, { ip: "0.0.0.0" }],
    };
  },
  computed: {
    acdc_alarms() {
      let arr = [];
      for (let i = 0, j = props1.length; i < j; i++) {
        let item = props1[i];
        if (item.childrenCount) {
          for (let m = 0, n = item.childrenCount; m < n; m++) {
            let idx = m + 1;
            arr.push({
              label: item.label.replace("N", idx),
              key0: item.key0,
              key1: item.key1,
              flag: item.flag,
              childrenCount: item.childrenCount,
              tip: item.tip.replace("N", idx),
            });
          }
        } else {
          arr.push(item);
        }
      }
      return arr;
    },
    gp_alarms() {
      let arr = [];
      for (let i = 0, j = props2.length; i < j; i++) {
        let item = props2[i];
        if (item.childrenCount) {
          for (let m = 0, n = item.childrenCount; m < n; m++) {
            let idx = m + 1;
            arr.push({
              label: item.label.replace("N", idx),
              key0: item.key0,
              key1: item.key1,
              flag: item.flag,
              childrenCount: item.childrenCount,
              tip: item.tip.replace("N", idx),
            });
          }
        } else {
          arr.push(item);
        }
      }
      return arr;
    },
  },
  methods: {
    onWSMessage1(res) {
      let { data, data2, data3, data4 } = JSON.parse(res.data);
      // console.log(data, "=====data??", data2);
      // this.paramsAlram(data);
      this.rtData = {
        ...data,
        ...data2,
        ...data3,
      };
      // this.monData = data4;
    },
    tabClick() {},
    selectAll(list) {
      this[list] = this[list].map(() => true);
    },
    batchYCSet(type) {
      this.$confirm("确认批量给定?", "提示", {
        type: "warning",
      })
        .then(() => {
          let loading = this.$layer.loading();
          let params = {};
          let checkList = this["checkList1_" + type];
          checkList
            .map((v, i) => ({ i, v }))
            .filter((v) => v.v)
            .forEach((v) => {
              let refName = type + "_param_" + v.i;
              let $el = this.$refs[refName];
              // console.log($el);
              params[$el.option.key1] = $el.num;
              params[$el.option.flag] = 1;
            });
          updateYC(params)
            .then((res) => {
              let { code, data, msg } = res.data;
              this.$layer.close(loading);
              this.$message(msg);
            })
            .catch((err) => {
              console.log(err);
              this.$layer.close(loading);
            });
        })
        .catch(() => {});
    },
    batchYXSet(type) {
      // let props = propList
      //   .filter((v, i) => checkList[i])
      //   .map((v) => {
      //     return {
      //       key1: v.key1,
      //       flag: v.flag,
      //     };
      //   });
      // let params = {};
      // props.forEach((v) => {
      //   // TODO
      //   params[v.key1] = 22;
      //   params[v.flag] = 1;
      // });
      // console.log("批量设定的属性有", props);
      // updateYC(params)
      //   .then((res) => {
      //     let { code, data, msg } = res.data;
      //     if (code && data) {
      //       console.log(data);
      //     }
      //   })
      //   .catch((err) => {
      //     console.log(err);
      //   });
    },
    changeIp(ip) {
      console.log(ip, "hhhhhh");
    },
@@ -285,7 +476,9 @@
      color: #000;
      border-radius: 4px;
      font-weight: bold;
      font-size: 18px;
      height: 30px;
      line-height: 30px;
      font-size: 16px;
      border: 0 none;
      & + .el-tabs__item {
        margin-left: 6px;
@@ -326,7 +519,7 @@
  height: 240px;
  margin-bottom: 20px;
}
.card {
.card3 {
  height: 100%;
  border: 1px solid #3e8d9d;
  border-radius: 4px;
@@ -369,6 +562,9 @@
    }
  }
}
.scroller {
  overflow-y: auto;
}
.el_col:nth-child(n + 3) {
  margin-top: 20px;
}
src/views/powerCabinetControl/js/apis.js
New file
@@ -0,0 +1,13 @@
import axios from "axios";
/**
 * 测控电源设备 遥测量设置
 * @returns
 */
export const updateYC = (data) => {
  return axios({
    method: "POST",
    url: "ckPowerDevSet/update",
    data
  });
};
src/views/powerCabinetControl/js/const_props.js
New file
@@ -0,0 +1,1023 @@
// 交直流
const props1 = [
  {
    label: "交流输入1停电",
    key0: "acIn1PowerDownReal",
    key1: "acIn1PowerDownFake",
    flag: "acIn1PowerDownSt",
    tip: "三相电压均小于告警值",
  },
  {
    label: "交流输入2停电",
    key0: "acIn2PowerDownReal",
    key1: "acIn2PowerDownFake",
    flag: "acIn2PowerDownSt",
    tip: "三相电压均小于告警值",
  },
  {
    label: "交流输入1防雷器故障",
    key0: "acIn1ThunderErrReal",
    key1: "acIn1ThunderErrFake",
    flag: "acIn1ThunderErrSt",
    tip: "防雷电路有故障",
  },
  {
    label: "交流输入2防雷器故障",
    key0: "acIn2ThunderErrReal",
    key1: "acIn2ThunderErrFake",
    flag: "acIn2ThunderErrSt",
    tip: "防雷电路有故障",
  },
  {
    label: "第1路交流输入开关跳闸",
    key0: "acIn1SwitchTripReal",
    key1: "acIn1SwitchTripFake",
    flag: "acIn1SwitchTripSt",
    tip: "第1路交流输入空开跳闸",
  },
  {
    label: "第2路交流输入开关跳闸",
    key0: "acIn2SwitchTripReal",
    key1: "acIn2SwitchTripFake",
    flag: "acIn2SwitchTripSt",
    tip: "第2路交流输入空开跳闸",
  },
  {
    label: "第1路交流A相过压",
    key0: "acIn1OverVolAReal",
    key1: "acIn1OverVolAFake",
    flag: "acIn1OverVolASt",
    tip: "第1路交流A相输入电压大于交流过压告警值",
  },
  {
    label: "第1路交流A相欠压",
    key0: "acIn1UnderVolAReal",
    key1: "acIn1UnderVolAFake",
    flag: "acIn1UnderVolASt",
    tip: "第1路交流A相输入电压小于交流欠压告警值",
  },
  {
    label: "第1路交流B相过压",
    key0: "acIn1OverVolBReal",
    key1: "acIn1OverVolBFake",
    flag: "acIn1OverVolBSt",
    tip: "第1路交流B相输入电压大于交流过压告警值",
  },
  {
    label: "第1路交流B相欠压",
    key0: "acIn1UnderVolBReal",
    key1: "acIn1UnderVolBFake",
    flag: "acIn1UnderVolBSt",
    tip: "第1路交流B相输入电压小于交流欠压告警值",
  },
  {
    label: "第1路交流C相过压",
    key0: "acIn1OverVolCReal",
    key1: "acIn1OverVolCFake",
    flag: "acIn1OverVolCSt",
    tip: "第1路交流C相输入电压大于交流过压告警值",
  },
  {
    label: "第1路交流C相欠压",
    key0: "acIn1UnderVolCReal",
    key1: "acIn1UnderVolCFake",
    flag: "acIn1UnderVolCSt",
    tip: "第1路交流C相输入电压小于交流欠压告警值",
  },
  {
    label: "第2路交流A相过压",
    key0: "acIn2OverVolAReal",
    key1: "acIn2OverVolAFake",
    flag: "acIn2OverVolASt",
    tip: "第2路交流A相输入电压大于交流过压告警值",
  },
  {
    label: "第2路交流A相欠压",
    key0: "acIn2UnderVolAReal",
    key1: "acIn2UnderVolAFake",
    flag: "acIn2UnderVolASt",
    tip: "第2路交流A相输入电压小于交流欠压告警值",
  },
  {
    label: "第2路交流B相过压",
    key0: "acIn2OverVolBReal",
    key1: "acIn2OverVolBFake",
    flag: "acIn2OverVolBSt",
    tip: "第2路交流B相输入电压大于交流过压告警值",
  },
  {
    label: "第2路交流B相欠压",
    key0: "acIn2UnderVolBReal",
    key1: "acIn2UnderVolBFake",
    flag: "acIn2UnderVolBSt",
    tip: "第2路交流B相输入电压小于交流欠压告警值",
  },
  {
    label: "第2路交流C相过压",
    key0: "acIn2OverVolCReal",
    key1: "acIn2OverVolCFake",
    flag: "acIn2OverVolCSt",
    tip: "第2路交流C相输入电压大于交流过压告警值",
  },
  {
    label: "第2路交流C相欠压",
    key0: "acIn2UnderVolCReal",
    key1: "acIn2UnderVolCFake",
    flag: "acIn2UnderVolCSt",
    tip: "第2路交流C相输入电压小于交流欠压告警值",
  },
  {
    label: "第1路交流A相缺相",
    key0: "acIn1LessVolAReal",
    key1: "acIn1LessVolAFake",
    flag: "acIn1LessVolASt",
    tip: "第1路交流单相电压低于告警阈值",
  },
  {
    label: "第1路交流B相缺相",
    key0: "acIn1LessVolBReal",
    key1: "acIn1LessVolBFake",
    flag: "acIn1LessVolBSt",
    tip: "第1路交流单相电压低于告警阈值",
  },
  {
    label: "第1路交流C相缺相",
    key0: "acIn1LessVolCReal",
    key1: "acIn1LessVolCFake",
    flag: "acIn1LessVolCSt",
    tip: "第1路交流单相电压低于告警阈值",
  },
  {
    label: "第2路交流A相缺相",
    key0: "acIn2LessVolAReal",
    key1: "acIn2LessVolAFake",
    flag: "acIn2LessVolASt",
    tip: "第2路交流单相电压低于告警阈值",
  },
  {
    label: "第2路交流B相缺相",
    key0: "acIn2LessVolBReal",
    key1: "acIn2LessVolBFake",
    flag: "acIn2LessVolBSt",
    tip: "第2路交流单相电压低于告警阈值",
  },
  {
    label: "第2路交流C相缺相",
    key0: "acIn2LessVolCReal",
    key1: "acIn2LessVolCFake",
    flag: "acIn2LessVolCSt",
    tip: "第2路交流单相电压低于告警阈值",
  },
  {
    label: "交流监控单元故障",
    key0: "acMonitorErrReal",
    key1: "acMonitorErrFake",
    flag: "acMonitorErrSt",
    tip: "监控单元硬件故障,或者采集交流数据失败",
  },
  {
    label: "1段交流母线输出开关N跳闸",
    key0: [
      "ac1OutSwitch1TripReal",
      "ac1OutSwitch2TripReal",
      "ac1OutSwitch3TripReal",
      "ac1OutSwitch4TripReal",
    ],
    key1: [
      "ac1OutSwitch1TripFake",
      "ac1OutSwitch2TripFake",
      "ac1OutSwitch3TripFake",
      "ac1OutSwitch4TripFake",
    ],
    flag: [
      "ac1OutSwitch1TripSt",
      "ac1OutSwitch2TripSt",
      "ac1OutSwitch3TripSt",
      "ac1OutSwitch4TripSt",
    ],
    childrenCount: 100,
    tip: "1段交流母线输出开关N跳闸",
  },
  {
    label: "2段交流母线输出开关N跳闸",
    key0: [
      "ac2OutSwitch1TripReal",
      "ac2OutSwitch2TripReal",
      "ac2OutSwitch3TripReal",
      "ac2OutSwitch4TripReal",
    ],
    key1: [
      "ac2OutSwitch1TripFake",
      "ac2OutSwitch2TripFake",
      "ac2OutSwitch3TripFake",
      "ac2OutSwitch4TripFake",
    ],
    flag: [
      "ac2OutSwitch1TripSt",
      "ac2OutSwitch2TripSt",
      "ac2OutSwitch3TripSt",
      "ac2OutSwitch4TripSt",
    ],
    childrenCount: 100,
    tip: "2段交流母线输出开关N跳闸",
  },
  {
    label: "交流配电柜总告警",
    key0: "acCabinetTatalAlmReal",
    key1: "acCabinetTatalAlmFake",
    flag: "acCabinetTatalAlmSt",
    tip: "任一交流配电柜相关告警产生",
  },
  {
    label: "交流配电柜温度告警",
    key0: "acCabinetTempAlmReal",
    key1: "acCabinetTempAlmFake",
    flag: "acCabinetTempAlmSt",
    tip: "交流配电柜环境温度高于告警值",
  },
  {
    label: "直流配电柜温度告警",
    key0: "dcCabinetTempAlmReal",
    key1: "dcCabinetTempAlmFake",
    flag: "dcCabinetTempAlmSt",
    tip: "直流配电柜环境温度高于告警点",
  },
  {
    label: "第1路直流过压",
    key0: "dc1OverVolReal",
    key1: "dc1OverVolFake",
    flag: "dc1OverVolSt",
    tip: "直流输出电压大于直流过压告警值",
  },
  {
    label: "第1路直流欠压",
    key0: "dc1UnderVolReal",
    key1: "dc1UnderVolFake",
    flag: "dc1UnderVolSt",
    tip: "直流输出电压小于直流欠压告警值",
  },
  {
    label: "第2路直流过压",
    key0: "dc2OverVolReal",
    key1: "dc2OverVolFake",
    flag: "dc2OverVolSt",
    tip: "直流输出电压大于直流过压告警值",
  },
  {
    label: "第2路直流欠压",
    key0: "dc2UnderVolReal",
    key1: "dc2UnderVolFake",
    flag: "dc2UnderVolSt",
    tip: "直流输出电压小于直流欠压告警值",
  },
  {
    label: "第1路直流输入开关跳闸",
    key0: "dcIn1SwitchTripReal",
    key1: "dcIn1SwitchTripFake",
    flag: "dcIn1SwitchTripSt",
    tip: "第1路直流输入开关跳闸",
  },
  {
    label: "第2路直流输入开关跳闸",
    key0: "dcIn2SwitchTripReal",
    key1: "dcIn2SwitchTripFake",
    flag: "dcIn2SwitchTripSt",
    tip: "第2路直流输入开关跳闸",
  },
  {
    label: "1段直流第N路开关跳闸",
    key0: [
      "dc1Switch1TripReal",
      "dc1Switch2TripReal",
      "dc1Switch3TripReal",
      "dc1Switch4TripReal",
    ],
    key1: [
      "dc1Switch1TripFake",
      "dc1Switch2TripFake",
      "dc1Switch3TripFake",
      "dc1Switch4TripFake",
    ],
    flag: [
      "dc1Switch1TripSt",
      "dc1Switch2TripSt",
      "dc1Switch3TripSt",
      "dc1Switch4TripSt",
    ],
    childrenCount: 100,
    tip: "第N路开关跳闸状态",
  },
  {
    label: "2段直流第N路开关跳闸",
    key0: [
      "dc2Switch1TripReal",
      "dc2Switch2TripReal",
      "dc2Switch3TripReal",
      "dc2Switch4TripReal",
    ],
    key1: [
      "dc2Switch1TripFake",
      "dc2Switch2TripFake",
      "dc2Switch3TripFake",
      "dc2Switch4TripFake",
    ],
    flag: [
      "dc2Switch1TripSt",
      "dc2Switch2TripSt",
      "dc2Switch3TripSt",
      "dc2Switch4TripSt",
    ],
    childrenCount: 100,
    tip: "第N路开关跳闸状态",
  },
  {
    label: "直流监控单元故障",
    key0: "monitorErrReal",
    key1: "monitorErrFake",
    flag: "monitorErrSt",
    tip: "直流监控单元故障",
  },
  {
    label: "直流配电柜总告警",
    key0: "dcCabinetTatalAlmReal",
    key1: "dcCabinetTatalAlmFake",
    flag: "dcCabinetTatalAlmSt",
    tip: "直流配电柜任一告警",
  },
];
const props2 = [
  {
    label: "模块N开关机状态",
    key0: ["m1Off1Real", "m1Off2Real"],
    key1: ["m1Off1Fake", "m1Off2Fake"],
    flag: ["m1Off1St", "m1Off2St"],
    childrenCount: 32,
    tip: "N模块开/关机状态",
  },
  {
    label: "模块N故障",
    key0: ["m1Err1Real", "m1Err2Real"],
    key1: ["m1Err1Fake", "m1Err2Fake"],
    flag: ["m1Err1St", "m1Err2St"],
    childrenCount: 32,
    tip: "N模块故障状态",
  },
  {
    label: "高频开关电源柜总告警",
    key0: "highFrqCabinetTotalAlmReal",
    key1: "highFrqCabinetTotalAlmFake",
    flag: "highFrqCabinetTotalAlmSt",
    tip: "任一高频开关电源柜相关告警产生",
  },
  {
    label: "直流输出过压",
    key0: "dcOutOverVolReal",
    key1: "dcOutOverVolFake",
    flag: "dcOutOverVolSt",
    tip: "直流输出电压大于直流过压告警值",
  },
  {
    label: "直流输出欠压",
    key0: "dcOutUnderVolReal",
    key1: "dcOutUnderVolFake",
    flag: "dcOutUnderVolSt",
    tip: "直流输出电压小于直流欠压告警值",
  },
  {
    label: "电池组下电保护告警",
    key0: "battOffProtectAlmReal",
    key1: "battOffProtectAlmFake",
    flag: "battOffProtectAlmSt",
    tip: "电池组电压过低,自动保护脱离系统",
  },
  {
    label: "电池组熔丝告警",
    key0: "batt1FuseAlmReal",
    key1: "batt1FuseAlmFake",
    flag: "batt1FuseAlmSt",
    tip: "电池组熔丝状态",
  },
  {
    label: "负载熔丝状态",
    key0: "loadFuseStateReal",
    key1: "loadFuseStateFake",
    flag: "loadFuseStateSt",
    tip: "供直流配电柜的负载熔丝状态",
  },
  {
    label: "均浮充状态",
    key0: "junFloatStateReal",
    key1: "junFloatStateFake",
    flag: "junFloatStateSt",
    tip: "高频开关电源柜处于均充/浮充",
  },
  {
    label: "交流输入1停电",
    key0: "ac1InPowerDownReal",
    key1: "ac1InPowerDownFake",
    flag: "ac1InPowerDownSt",
    tip: "交流1输入三相电压均小于告警值",
  },
  {
    label: "交流输入2停电",
    key0: "ac2InPowerDownReal",
    key1: "ac2InPowerDownFake",
    flag: "ac2InPowerDownSt",
    tip: "交流2输入三相电压均小于告警值",
  },
  {
    label: "交流输入1防雷器故障",
    key0: "ac1InThunderErrReal",
    key1: "ac1InThunderErrFake",
    flag: "ac1InThunderErrSt",
    tip: "防雷电路故障",
  },
  {
    label: "交流输入2防雷器故障",
    key0: "ac2InThunderErrReal",
    key1: "ac2InThunderErrFake",
    flag: "ac2InThunderErrSt",
    tip: "防雷电路故障",
  },
  {
    label: "第1路交流输入开关跳闸",
    key0: "ac1InSwitchTripReal",
    key1: "ac1InSwitchTripFake",
    flag: "ac1InSwitchTripSt",
    tip: "第1路交流输入空开跳闸",
  },
  {
    label: "第2路交流输入开关跳闸",
    key0: "ac2InSwitchTripReal",
    key1: "ac2InSwitchTripFake",
    flag: "ac2InSwitchTripSt",
    tip: "第2路交流输入空开跳闸",
  },
  {
    label: "第1路交流A相过压",
    key0: "ac1OverVolAReal",
    key1: "ac1OverVolAFake",
    flag: "ac1OverVolASt",
    tip: "第1路交流A相输入电压大于交流过压告警值",
  },
  {
    label: "第1路交流A相欠压",
    key0: "ac1UnderVolAReal",
    key1: "ac1UnderVolAFake",
    flag: "ac1UnderVolASt",
    tip: "第1路交流A相输入电压小于交流欠压告警值",
  },
  {
    label: "第1路交流B相过压",
    key0: "ac1OverVolBReal",
    key1: "ac1OverVolBFake",
    flag: "ac1OverVolBSt",
    tip: "第1路交流B相输入电压大于交流过压告警值",
  },
  {
    label: "第1路交流B相欠压",
    key0: "ac1UnderVolBReal",
    key1: "ac1UnderVolBFake",
    flag: "ac1UnderVolBSt",
    tip: "第1路交流B相输入电压小于交流欠压告警值",
  },
  {
    label: "第1路交流C相过压",
    key0: "ac1OverVolCReal",
    key1: "ac1OverVolCFake",
    flag: "ac1OverVolCSt",
    tip: "第1路交流C相输入电压大于交流过压告警值",
  },
  {
    label: "第1路交流C相欠压",
    key0: "ac1UnderVolCReal",
    key1: "ac1UnderVolCFake",
    flag: "ac1UnderVolCSt",
    tip: "第1路交流C相输入电压小于交流欠压告警值",
  },
  {
    label: "第2路交流A相过压",
    key0: "ac2OverVolAReal",
    key1: "ac2OverVolAFake",
    flag: "ac2OverVolASt",
    tip: "第2路交流A相输入电压大于交流过压告警值",
  },
  {
    label: "第2路交流A相欠压",
    key0: "ac2UnderVolAReal",
    key1: "ac2UnderVolAFake",
    flag: "ac2UnderVolASt",
    tip: "第2路交流A相输入电压小于交流欠压告警值",
  },
  {
    label: "第2路交流B相过压",
    key0: "ac2OverVolBReal",
    key1: "ac2OverVolBFake",
    flag: "ac2OverVolBSt",
    tip: "第2路交流B相输入电压大于交流过压告警值",
  },
  {
    label: "第2路交流B相欠压",
    key0: "ac2UnderVolBReal",
    key1: "ac2UnderVolBFake",
    flag: "ac2UnderVolBSt",
    tip: "第2路交流B相输入电压小于交流欠压告警值",
  },
  {
    label: "第2路交流C相过压",
    key0: "ac2OverVolCReal",
    key1: "ac2OverVolCFake",
    flag: "ac2OverVolCSt",
    tip: "第2路交流C相输入电压大于交流过压告警值",
  },
  {
    label: "第2路交流C相欠压",
    key0: "ac2UnderVolCReal",
    key1: "ac2UnderVolCFake",
    flag: "ac2UnderVolCSt",
    tip: "第2路交流C相输入电压小于交流欠压告警值",
  },
  {
    label: "第1路交流A相缺相",
    key0: "ac1LessVolAReal",
    key1: "ac1LessVolAFake",
    flag: "ac1LessVolASt",
    tip: "第1路交流A相电压低于告警阈值",
  },
  {
    label: "第1路交流B相缺相",
    key0: "ac1LessVolBReal",
    key1: "ac1LessVolBFake",
    flag: "ac1LessVolBSt",
    tip: "第1路交流B相电压低于告警阈值",
  },
  {
    label: "第1路交流C相缺相",
    key0: "ac1LessVolCReal",
    key1: "ac1LessVolCFake",
    flag: "ac1LessVolCSt",
    tip: "第1路交流C相电压低于告警阈值",
  },
  {
    label: "第2路交流A相缺相",
    key0: "ac2LessVolAReal",
    key1: "ac2LessVolAFake",
    flag: "ac2LessVolASt",
    tip: "第2路交流A相电压低于告警阈值",
  },
  {
    label: "第2路交流B相缺相",
    key0: "ac2LessVolBReal",
    key1: "ac2LessVolBFake",
    flag: "ac2LessVolBSt",
    tip: "第2路交流B相电压低于告警阈值",
  },
  {
    label: "第2路交流C相缺相",
    key0: "ac2LessVolCReal",
    key1: "ac2LessVolCFake",
    flag: "ac2LessVolCSt",
    tip: "第2路交流C相电压低于告警阈值",
  },
  {
    label: "高频监控单元故障",
    key0: "gpMonitorErrReal",
    key1: "gpMonitorErrFake",
    flag: "gpMonitorErrSt",
    tip: "监控单元硬件故障,或者采集交流/直流数据失败",
  },
  {
    label: "在用交流输入路数",
    key0: "acInUseCountReal",
    key1: "acInUseCountFake",
    flag: "acInUseCountSt",
    tip: "系统主用交流",
  },
];
const param_acdc = [
  {
    label: "第1路交流A相输入电压",
    key0: "acIn1VolAReal",
    key1: "acIn1VolAFake",
    flag: "acIn1VolASt",
  },
  {
    label: "第1路交流B相输入电压",
    key0: "acIn1VolBReal",
    key1: "acIn1VolBFake",
    flag: "acIn1VolBSt",
  },
  {
    label: "第1路交流C相输入电压",
    key0: "acIn1VolCReal",
    key1: "acIn1VolCFake",
    flag: "acIn1VolCSt",
  },
  {
    label: "第1路交流A相输入电流",
    key0: "acIn1CurrAReal",
    key1: "acIn1CurrAFake",
    flag: "acIn1CurrASt",
  },
  {
    label: "第1路交流B相输入电流",
    key0: "acIn1CurrBReal",
    key1: "acIn1CurrBFake",
    flag: "acIn1CurrBSt",
  },
  {
    label: "第1路交流C相输入电流",
    key0: "acIn1CurrCReal",
    key1: "acIn1CurrCFake",
    flag: "acIn1CurrCSt",
  },
  {
    label: "第2路交流A相输入电压",
    key0: "acIn2VolAReal",
    key1: "acIn2VolAFake",
    flag: "acIn2VolASt",
  },
  {
    label: "第2路交流B相输入电压",
    key0: "acIn2VolBReal",
    key1: "acIn2VolBFake",
    flag: "acIn2VolBSt",
  },
  {
    label: "第2路交流C相输入电压",
    key0: "acIn2VolCReal",
    key1: "acIn2VolCFake",
    flag: "acIn2VolCSt",
  },
  {
    label: "第2路交流A相输入电流",
    key0: "acIn2CurrAReal",
    key1: "acIn2CurrAFake",
    flag: "acIn2CurrASt",
  },
  {
    label: "第2路交流B相输入电流",
    key0: "acIn2CurrBReal",
    key1: "acIn2CurrBFake",
    flag: "acIn2CurrBSt",
  },
  {
    label: "第2路交流C相输入电流",
    key0: "acIn2CurrCReal",
    key1: "acIn2CurrCFake",
    flag: "acIn2CurrCSt",
  },
  {
    label: "交流配电柜温度",
    key0: "acCabinetTempReal",
    key1: "acCabinetTempFake",
    flag: "acCabinetTempSt",
  },
  {
    label: "直流配电柜温度",
    key0: "dcCabinetTempReal",
    key1: "dcCabinetTempFake",
    flag: "dcCabinetTempSt",
  },
  {
    label: "第1路直流输入电压",
    key0: "dcIn1VolReal",
    key1: "dcIn1VolFake",
    flag: "dcIn1VolSt",
  },
  {
    label: "第2路直流输入电压",
    key0: "dcIn2VolReal",
    key1: "dcIn2VolFake",
    flag: "dcIn2VolSt",
  },
  {
    label: "1段直流母线输出电压",
    key0: "dcOut1VolReal",
    key1: "dcOut1VolFake",
    flag: "dcOut1VolSt",
  },
  {
    label: "2段直流母线输出电压",
    key0: "dcOut2VolReal",
    key1: "dcOut2VolFake",
    flag: "dcOut2VolSt",
  },
  {
    label: "1段直流母线输出电流",
    key0: "dcOut1CurrReal",
    key1: "dcOut1CurrFake",
    flag: "dcOut1CurrSt",
  },
  {
    label: "2段直流母线输出电流",
    key0: "dcOut2CurrReal",
    key1: "dcOut2CurrFake",
    flag: "dcOut2CurrSt",
  },
];
const param_gp = [
  {
    label: "高频开关配电柜温度",
    key0: "highFrqCabinetTempReal",
    key1: "highFrqCabinetTempFake",
    flag: "highFrqCabinetTempSt",
  },
  {
    label: "交流A相输出电压",
    key0: "acOutVolAReal",
    key1: "acOutVolAFake",
    flag: "acOutVolASt",
  },
  {
    label: "交流B相输出电压",
    key0: "acOutVolBReal",
    key1: "acOutVolBFake",
    flag: "acOutVolBSt",
  },
  {
    label: "交流C相输出电压",
    key0: "acOutVolCReal",
    key1: "acOutVolCFake",
    flag: "acOutVolCSt",
  },
  {
    label: "交流A相输出电流",
    key0: "acOutCurrAReal",
    key1: "acOutCurrAFake",
    flag: "acOutCurrASt",
  },
  {
    label: "交流B相输出电流",
    key0: "acOutCurrBReal",
    key1: "acOutCurrBFake",
    flag: "acOutCurrBSt",
  },
  {
    label: "交流C相输出电流",
    key0: "acOutCurrCReal",
    key1: "acOutCurrCFake",
    flag: "acOutCurrCSt",
  },
  {
    label: "直流输出电压",
    key0: "dcOutVolReal",
    key1: "dcOutVolFake",
    flag: "dcOutVolSt",
  },
  {
    label: "负载电流",
    key0: "loadCurrReal",
    key1: "loadCurrFake",
    flag: "loadCurrSt",
  },
  {
    label: "蓄电池组充电电流",
    key0: "battCharCurrReal",
    key1: "battCharCurrFake",
    flag: "battCharCurrSt",
  },
  {
    label: "电池组端电压",
    key0: "batt1GroupVolReal",
    key1: "batt1GroupVolFake",
    flag: "batt1GroupVolSt",
  },
  {
    label: "模块1输出电流",
    key0: "m1OutCurrReal",
    key1: "m1OutCurrFake",
    flag: "m1OutCurrSt",
  },
  {
    label: "模块2输出电流",
    key0: "m2OutCurrReal",
    key1: "m2OutCurrFake",
    flag: "m2OutCurrSt",
  },
  {
    label: "模块3输出电流",
    key0: "m3OutCurrReal",
    key1: "m3OutCurrFake",
    flag: "m3OutCurrSt",
  },
  {
    label: "模块4输出电流",
    key0: "m4OutCurrReal",
    key1: "m4OutCurrFake",
    flag: "m4OutCurrSt",
  },
  {
    label: "模块5输出电流",
    key0: "m5OutCurrReal",
    key1: "m5OutCurrFake",
    flag: "m5OutCurrSt",
  },
  {
    label: "模块6输出电流",
    key0: "m6OutCurrReal",
    key1: "m6OutCurrFake",
    flag: "m6OutCurrSt",
  },
  {
    label: "模块7输出电流",
    key0: "m7OutCurrReal",
    key1: "m7OutCurrFake",
    flag: "m7OutCurrSt",
  },
  {
    label: "模块8输出电流",
    key0: "m8OutCurrReal",
    key1: "m8OutCurrFake",
    flag: "m8OutCurrSt",
  },
  {
    label: "模块9输出电流",
    key0: "m9OutCurrReal",
    key1: "m9OutCurrFake",
    flag: "m9OutCurrSt",
  },
  {
    label: "模块10输出电流",
    key0: "m10OutCurrReal",
    key1: "m10OutCurrFake",
    flag: "m10OutCurrSt",
  },
  {
    label: "模块11输出电流",
    key0: "m11OutCurrReal",
    key1: "m11OutCurrFake",
    flag: "m11OutCurrSt",
  },
  {
    label: "模块12输出电流",
    key0: "m12OutCurrReal",
    key1: "m12OutCurrFake",
    flag: "m12OutCurrSt",
  },
  {
    label: "模块13输出电流",
    key0: "m13OutCurrReal",
    key1: "m13OutCurrFake",
    flag: "m13OutCurrSt",
  },
  {
    label: "模块14输出电流",
    key0: "m14OutCurrReal",
    key1: "m14OutCurrFake",
    flag: "m14OutCurrSt",
  },
  {
    label: "模块15输出电流",
    key0: "m15OutCurrReal",
    key1: "m15OutCurrFake",
    flag: "m15OutCurrSt",
  },
  {
    label: "模块16输出电流",
    key0: "m16OutCurrReal",
    key1: "m16OutCurrFake",
    flag: "m16OutCurrSt",
  },
  {
    label: "模块17输出电流",
    key0: "m17OutCurrReal",
    key1: "m17OutCurrFake",
    flag: "m17OutCurrSt",
  },
  {
    label: "模块18输出电流",
    key0: "m18OutCurrReal",
    key1: "m18OutCurrFake",
    flag: "m18OutCurrSt",
  },
  {
    label: "模块19输出电流",
    key0: "m19OutCurrReal",
    key1: "m19OutCurrFake",
    flag: "m19OutCurrSt",
  },
  {
    label: "模块20输出电流",
    key0: "m20OutCurrReal",
    key1: "m20OutCurrFake",
    flag: "m20OutCurrSt",
  },
  {
    label: "模块21输出电流",
    key0: "m21OutCurrReal",
    key1: "m21OutCurrFake",
    flag: "m21OutCurrSt",
  },
  {
    label: "模块22输出电流",
    key0: "m22OutCurrReal",
    key1: "m22OutCurrFake",
    flag: "m22OutCurrSt",
  },
  {
    label: "模块23输出电流",
    key0: "m23OutCurrReal",
    key1: "m23OutCurrFake",
    flag: "m23OutCurrSt",
  },
  {
    label: "模块24输出电流",
    key0: "m24OutCurrReal",
    key1: "m24OutCurrFake",
    flag: "m24OutCurrSt",
  },
  {
    label: "模块25输出电流",
    key0: "m25OutCurrReal",
    key1: "m25OutCurrFake",
    flag: "m25OutCurrSt",
  },
  {
    label: "模块26输出电流",
    key0: "m26OutCurrReal",
    key1: "m26OutCurrFake",
    flag: "m26OutCurrSt",
  },
  {
    label: "模块27输出电流",
    key0: "m27OutCurrReal",
    key1: "m27OutCurrFake",
    flag: "m27OutCurrSt",
  },
  {
    label: "模块28输出电流",
    key0: "m28OutCurrReal",
    key1: "m28OutCurrFake",
    flag: "m28OutCurrSt",
  },
  {
    label: "模块29输出电流",
    key0: "m29OutCurrReal",
    key1: "m29OutCurrFake",
    flag: "m29OutCurrSt",
  },
  {
    label: "模块30输出电流",
    key0: "m30OutCurrReal",
    key1: "m30OutCurrFake",
    flag: "m30OutCurrSt",
  },
  {
    label: "模块31输出电流",
    key0: "m31OutCurrReal",
    key1: "m31OutCurrFake",
    flag: "m31OutCurrSt",
  },
  {
    label: "模块32输出电流",
    key0: "m32OutCurrReal",
    key1: "m32OutCurrFake",
    flag: "m32OutCurrSt",
  },
  {
    label: "第1路交流A相输入电压",
    key0: "ac1InVolAReal",
    key1: "ac1InVolAFake",
    flag: "ac1InVolASt",
  },
  {
    label: "第1路交流B相输入电压",
    key0: "ac1InVolBReal",
    key1: "ac1InVolBFake",
    flag: "ac1InVolBSt",
  },
  {
    label: "第1路交流C相输入电压",
    key0: "ac1InVolCReal",
    key1: "ac1InVolCFake",
    flag: "ac1InVolCSt",
  },
  {
    label: "第2路交流A相输入电压",
    key0: "ac2InVolAReal",
    key1: "ac2InVolAFake",
    flag: "ac2InVolASt",
  },
  {
    label: "第2路交流B相输入电压",
    key0: "ac2InVolBReal",
    key1: "ac2InVolBFake",
    flag: "ac2InVolBSt",
  },
  {
    label: "第2路交流C相输入电压",
    key0: "ac2InVolCReal",
    key1: "ac2InVolCFake",
    flag: "ac2InVolCSt",
  },
];
export default {
  props1,
  props2,
  param_acdc,
  param_gp,
};
src/views/powerCabinetRtalarm/index.vue
New file
@@ -0,0 +1,377 @@
<template>
  <div class="p-main flex-c">
    <div class="btn-grp">
      <el-button class="btn-alarm levelall"
        >全部告警
        <div class="num">25</div>
      </el-button>
      <el-button class="btn-alarm level0">
        <div class="a">紧急</div>
        <div class="num">10</div>
      </el-button>
      <el-button class="btn-alarm level1"
        >重大
        <div class="num">7</div>
      </el-button>
      <el-button class="btn-alarm level2"
        >一般
        <div class="num">8</div>
      </el-button>
    </div>
    <panel class="panel p-content">
      <div class="panel-content flex-c">
        <div class="search">
          <div class="s-item">
            <div class="label">所属设备</div>
            <div class="value">
              <el-select v-model="value" class="dark" size="mini" placeholder="请选择">
                <el-option
                  v-for="item in options"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value"
                >
                </el-option>
              </el-select>
            </div>
          </div>
          <div class="s-item">
            <div class="label">告警名称</div>
            <div class="value">
              <el-select v-model="value"  class="dark" size="mini" placeholder="请选择">
                <el-option
                  v-for="item in options"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value"
                >
                </el-option>
              </el-select>
            </div>
          </div>
          <div class="s-item">
            <div class="label">告警等级</div>
            <div class="value">
              <el-select v-model="value"  class="dark" size="mini" placeholder="请选择">
                <el-option
                  v-for="item in options"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value"
                >
                </el-option>
              </el-select>
            </div>
          </div>
          <div class="s-item">
            <div class="label">告警开始时间</div>
            <div class="value">
              <el-date-picker
                v-model="valueTime1"
                size="mini"
                class="time_box dark"
                type="date"
                placeholder="选择日期"
                value-format="yyyy-MM-dd"
              ></el-date-picker>
            </div>
          </div>
          <div class="s-item">
            <div class="label">告警确认时间</div>
            <div class="value">
              <el-date-picker
                v-model="valueTime1"
                size="mini"
                class="time_box dark"
                type="date"
                placeholder="选择日期"
                value-format="yyyy-MM-dd"
              ></el-date-picker>
            </div>
          </div>
          <div class="s-item">
            <gradient-btn size="sm">查询</gradient-btn>
          </div>
        </div>
        <div class="table-wrap">
          <el-table
            id="batteryrTimequeryTable"
            stripe
            size="small"
            :data="table.datas"
            height="100%"
            class="table-dark"
            tooltip-effect="light"
          >
            <el-table-column
              label="序号"
              type="index"
              width="80"
            ></el-table-column>
            <el-table-column
              v-for="header in table.headers"
              :key="header.prop"
              :prop="header.prop"
              :label="header.label"
              :width="header.width"
              :min-width="header.minWidth"
              show-overflow-tooltip
              align="center"
            ></el-table-column>
            <el-table-column
              prop="cztime"
              fixed="right"
              width="240px"
              align="center"
              label="操作"
            >
              <template slot-scope="scope">
                <el-button class="yellow" size="mini">确认告警</el-button>
                <el-button class="l-green" disabled="" size="mini"
                  >告警详情</el-button
                >
              </template>
            </el-table-column>
          </el-table>
        </div>
        <!-- 底部分页 -->
        <el-pagination
          class="pages center dark"
          :current-page="pageCurr"
          @size-change="handleSizeChange"
          @current-change="handleCurrentChange"
          :page-sizes="[10, 20, 30, 50, 100]"
          :page-size="pageSize"
          layout="total, sizes, prev, pager, next, jumper"
          :total="total"
        ></el-pagination>
      </div>
    </panel>
  </div>
</template>
<script>
import Panel from "@/components/panel.vue";
import gradientBtn from "@/components/gradientBtn.vue";
export default {
  name: "",
  components: {
    Panel,
    gradientBtn,
  },
  data() {
    return {
      valueTime1: "",
      options: [
        {
          value: "选项1",
          label: "黄金糕",
        },
        {
          value: "选项2",
          label: "双皮奶",
        },
        {
          value: "选项3",
          label: "蚵仔煎",
        },
        {
          value: "选项4",
          label: "龙须面",
        },
        {
          value: "选项5",
          label: "北京烤鸭",
        },
      ],
      value: "",
      pageCurr: 1,
      pageSize: 10,
      total: 0,
      table: {
        headers: [
          {
            prop: "a",
            label: "设备名称",
            minWidth: 320,
          },
          {
            prop: "b",
            label: "告警名称",
            width: 120,
          },
          {
            prop: "c",
            label: "告警等级",
            width: 162,
          },
          {
            prop: "d",
            label: "告警开始时间",
            width: 180,
          },
          {
            prop: "e",
            label: "告警确认时间",
            width: 180,
          },
          {
            prop: "f",
            label: "确认告警",
            width: 120,
          },
        ],
        datas: [
          {
            a: 1,
            b: 2,
            c: 3,
            d: 4,
          },
          {
            a: 1,
            b: 2,
            c: 3,
            d: 4,
          },
          {
            a: 1,
            b: 2,
            c: 3,
            d: 4,
          },
          {
            a: 1,
            b: 2,
            c: 3,
            d: 4,
          },
          {
            a: 1,
            b: 2,
            c: 3,
            d: 4,
          },
          {
            a: 1,
            b: 2,
            c: 3,
            d: 4,
          },
          {
            a: 1,
            b: 2,
            c: 3,
            d: 4,
          },
        ],
      },
    };
  },
  methods: {
    getList() {},
    // 展示数据数量
    handleSizeChange(val) {
      this.pageSize = val;
      this.getList();
    },
    // 翻页
    handleCurrentChange(val) {
      this.pageCurr = val;
      this.getList();
    },
  },
  mounted() {},
};
</script>
<style scoped lang="less">
.p-main {
  height: 100%;
  .btn-grp {
    .btn-alarm {
      width: 160px;
      height: 30px;
      color: #fff;
      font-size: 18px;
      font-weight: bold;
      padding: 0 6px;
      border: 0 none;
      /deep/ span {
        display: flex;
        color: inherit;
        justify-content: space-between;
        align-items: center;
        .num {
          background: #fff;
          border-radius: 4px;
          padding: 2px 16px;
        }
      }
      &.levelall {
        background: #78eef8;
        color: #011f39;
        .num {
          background: #011f39;
          color: #78eef8;
        }
      }
      &.level0 {
        background: #ff3801;
        .num {
          color: #ff3801;
        }
      }
      &.level1 {
        background: #f69f40;
        .num {
          color: #f69f40;
        }
      }
      &.level2 {
        background: #4871e3;
        .num {
          color: #4871e3;
        }
      }
    }
  }
  .p-content {
    flex: 1;
    margin-top: 4px;
    /deep/ .content {
      background: #011f39;
    }
    .panel-content {
      height: 100%;
      padding: 10px;
    }
    .search {
      display: flex;
      justify-content: space-around;
      .s-item {
        display: flex;
        align-items: center;
        .label {
          color: #78eef8;
          &::after {
            content: ':';
          }
          margin-right: 0.4em;
        }
      }
    }
    .table-wrap {
      flex: 1;
      margin-top: 6px;
      margin-bottom: 6px;
    }
  }
}
</style>
src/views/realTime/index.vue
@@ -1,7 +1,12 @@
<template>
  <div class="p-main">
    <el-tabs class="tab" type="border-card" @tab-click="tabClick">
      <el-tab-pane label="交流/直流配电柜">
    <el-tabs
      class="tab"
      type="border-card"
      v-model="acTab"
      @tab-click="tabClick"
    >
      <el-tab-pane name="pdg" label="交流/直流配电柜">
        <div class="tab-content content1 flex-r">
          <panel class="panel left" title="交流/直流配电柜遥测量">
            <div class="content">
@@ -20,7 +25,11 @@
                </div>
              </div>
              <div class="card row2">
                <list-card :datas="props1" :rows="4"></list-card>
                <list-card
                  :datas="props1"
                  :rows="4"
                  :valueObj="rtData"
                ></list-card>
              </div>
              <div class="row row3">
                <div class="card has-title">
@@ -37,7 +46,11 @@
                </div>
              </div>
              <div class="card card2 row4">
                <list-card :datas="props2" :rows="3"></list-card>
                <list-card
                  :datas="props2"
                  :rows="3"
                  :valueObj="rtData"
                ></list-card>
              </div>
            </div>
          </panel>
@@ -54,8 +67,8 @@
                    <alarm-card
                      class="state-item"
                      :level="item.level"
                      :name="item.name"
                      :flag="item.flag"
                      :name="item.label"
                      :flag="getValue(item)"
                      @click.native="cardChildShow(item)"
                    ></alarm-card>
                  </el-col>
@@ -70,7 +83,8 @@
                  >
                    <alarm-card
                      :level="item.level"
                      :name="item.name"
                      :name="item.label"
                      :flag="getValue(item)"
                      @click.native="cardChildShow(item)"
                    ></alarm-card>
                  </el-col>
@@ -80,7 +94,7 @@
          </panel>
        </div>
      </el-tab-pane>
      <el-tab-pane label="高频开关整流柜">
      <el-tab-pane name="kgg" label="高频开关整流柜">
        <div class="tab-content content2 flex-r">
          <panel class="panel left" title="高频开关整流柜遥测量">
            <div class="content">
@@ -99,7 +113,11 @@
                </div>
              </div>
              <div class="card row2">
                <list-card :datas="props3" :rows="4"></list-card>
                <list-card
                  :datas="props3"
                  :rows="4"
                  :valueObj="rtData"
                ></list-card>
              </div>
              <div class="row row3">
                <div class="card has-title">
@@ -116,7 +134,11 @@
                </div>
              </div>
              <div class="card card2 row4">
                <list-card :datas="props4" :rows="3"></list-card>
                <list-card
                  :datas="props4"
                  :rows="3"
                  :valueObj="rtData"
                ></list-card>
              </div>
            </div>
          </panel>
@@ -133,7 +155,8 @@
                    <alarm-card
                      class="state-item"
                      :level="item.level"
                      :name="item.name"
                      :name="item.label"
                      :flag="getValue(item)"
                      @click.native="cardChildShow(item)"
                    ></alarm-card>
                  </el-col>
@@ -143,7 +166,7 @@
          </panel>
        </div>
      </el-tab-pane>
      <el-tab-pane label="核容装置">
      <el-tab-pane name="hr" label="核容装置">
        <div class="tab-content content3 flex-r">
          <panel class="panel left" title="核容装置遥测量">
            <div class="content">
@@ -151,7 +174,12 @@
                <div class="card has-title">
                  <div class="card-title">核容装置与电池组</div>
                  <div class="card-content">
                    <list-card :datas="props5" :rows="7" :cols="3"></list-card>
                    <list-card
                      :datas="props5"
                      :rows="7"
                      :cols="3"
                      :valueObj="rtData"
                    ></list-card>
                  </div>
                </div>
              </div>
@@ -162,7 +190,7 @@
                    <div class="h3">
                      <!-- 1-24节单体电压 -->
                      <div class="info-title">
                        1-24节单体{{ battInfoTypeStr }}
                        1-{{ rtMonData.length }}节单体{{ battInfoTypeStr }}
                      </div>
                      <!-- 电压 内阻 温度 剩余容量 均衡电流 -->
                      <el-radio-group
@@ -190,9 +218,16 @@
                          v-for="idx in 8"
                          :key="'batt_' + i + '_' + idx"
                        >
                          <div class="batt">
                          <div
                            class="batt"
                            v-if="(i - 1) * 8 + idx <= rtMonData.length"
                          >
                            <div class="name"># {{ (i - 1) * 8 + idx }}</div>
                            <div class="value">50V</div>
                            <div class="value">
                              {{
                                rtMonData[(i - 1) * 8 + idx - 1][battInfoType]
                              }}
                            </div>
                          </div>
                        </el-col>
                      </el-row>
@@ -217,7 +252,8 @@
                      <alarm-card
                        class="state-item"
                        :level="item.level"
                        :name="item.name"
                        :name="item.label"
                        :flag="getValue(item)"
                        @click.native="cardChildShow(item)"
                      ></alarm-card>
                    </el-col>
@@ -234,7 +270,8 @@
                  >
                    <alarm-card
                      :level="item.level"
                      :name="item.name"
                      :name="item.label"
                      :flag="getValue(item)"
                      @click.native="cardChildShow(item)"
                    ></alarm-card>
                  </el-col>
@@ -249,7 +286,8 @@
    <alarm-card-pop
      :visible.sync="childrenVisible"
      :title="childrenTitle"
      :value="[0x1fffffa, 0x0, 0xff, 0xff00]"
      :value="childrenState"
      :level="childrenLevel"
      :count="childrenCount"
    ></alarm-card-pop>
  </div>
@@ -265,10 +303,16 @@
import gauge3 from "@/components/gauge3";
import bar1 from "@/components/bar1";
import getBinaryDigits from "@/assets/js/getBinaryDigits";
import bitArray2num from "@/assets/js/bitArray2num";
import const_props from "./js/const_props";
import createWs from "@/assets/js/websocket/plus";
const WSMixin = createWs("ckRtAndSignalAndHr", "ckDevRsAndRtAlm");
export default {
  name: "Details",
  mixins: [WSMixin],
  components: {
    Panel,
    ListCard,
@@ -291,11 +335,19 @@
      alarmList4,
      alarmList5,
    } = const_props;
    const tabIdx = this.$route.params.tabIdx;
    const tabs = ["pdg", "kgg", "hr"];
    return {
      // 单体实时数据
      monData: [],
      rtData: {},
      currAlarmItem: {},
      acTab: tabs[tabIdx ? tabIdx : 0],
      childrenVisible: false,
      childrenTitle: "",
      childrenCount: 0,
      childrenState: 0,
      // childrenState: [0],
      childrenLevel: 0,
      battInfoType: 0,
      props1,
      props2,
@@ -310,7 +362,25 @@
    };
  },
  mounted() {},
  watch: {},
  methods: {
    getValue(obj) {
      let rtData = this.rtData;
      if (Array.isArray(obj.flag)) {
        return obj.flag.map((v, i) =>
          this.getValues(rtData[v], rtData[obj.key1[i]], rtData[obj.key0[i]])
        );
      } else {
        return rtData[obj.flag] ? rtData[obj.key1] : rtData[obj.key0];
      }
    },
    getValues(flags, key1s, key0s) {
      const _flags = getBinaryDigits(flags);
      const _key1s = getBinaryDigits(key1s);
      const _key0s = getBinaryDigits(key0s);
      let arr = _flags.map((v, i) => (v ? _key1s[i] : _key0s[i]));
      return bitArray2num(arr);
    },
    tabClick() {
      this.$nextTick(() => {
        this.$refs.bar1.resize();
@@ -326,11 +396,97 @@
    cardChildShow(obj) {
      console.log("enter", obj);
      if (obj.childrenCount) {
        this.childrenTitle = obj.name;
        this.childrenVisible = true;
        this.childrenTitle = obj.label;
        this.childrenCount = obj.childrenCount;
        this.childrenState = obj.childrenState;
        this.currAlarmItem = obj;
        // this.childrenState = this.getValue(obj);
        this.childrenLevel = obj.level;
        this.childrenVisible = true;
      }
    },
    onWSMessage1(res) {
      let { data, data2, data3, data4 } = JSON.parse(res.data);
      // console.log(data, "=====data", data2);
      // this.paramsAlram(data);
      this.rtData = {
        ...data,
        ...data2,
        ...data3,
      };
      this.monData = data4;
      this.updateChart();
    },
    onWSMessage2(res) {
      let {
        data: {
          rsAlmRes: {
            data2: [rsAlm],
          },
          rtAlmRes: {
            data2: [rtAlm],
          },
        },
      } = JSON.parse(res.data);
      // console.log(rsAlm, "=====data", rtAlm);
      // this.paramsAlram(data);
      // this.rtData = {
      //   ...data,
      //   ...data2,
      // };
    },
    getBarData(idx, data) {
      let name = "";
      switch (idx) {
        case 1:
          name = "acIn1Vol";
          break;
        case 2:
          name = "acIn2Vol";
          break;
        // TODU
        default:
          name = "acIn1Vol";
          break;
      }
      return ["A", "B", "C"].map((v) => {
        return data[name + v + "St"]
          ? data[name + v + "Fake"]
          : data[name + v + "Real"];
      });
    },
    getBoardData(idx, data) {
      let name = "";
      switch (idx) {
        case 1:
          name = "acIn1Curr";
          break;
        case 2:
          name = "acIn2Curr";
          break;
        // TODU
        default:
          name = "acIn1Curr";
          break;
      }
      return ["A", "B", "C"].map((v) => {
        return data[name + v + "St"]
          ? data[name + v + "Fake"]
          : data[name + v + "Real"];
      });
    },
    updateChart() {
      let rtData = this.rtData;
      [1, 2, 3, 4].forEach((v) => {
        let data = this.getBarData(v, rtData);
        this.$refs["bar" + v].setData({
          xLabel: ["A相", "B相", "C相"],
          sData: data,
        });
        let data2 = this.getBoardData(v, rtData);
        this.$refs["board" + v].setData(data2);
      });
    },
  },
  beforeDestroy() {
@@ -344,6 +500,45 @@
      return ["电压", "内阻", "温度", "剩余容量", "均衡电流"][
        this.battInfoType
      ];
    },
    childrenState() {
      if (this.childrenVisible) {
        const obj = this.currAlarmItem;
        let rtData = this.rtData;
        return obj.flag.map((v, i) =>
          this.getValues(rtData[v], rtData[obj.key1[i]], rtData[obj.key0[i]])
        );
      } else {
        return [0];
      }
    },
    // 单体实时数据 生成一个二维数组 每个元素为单体的数据 ["电压", "内阻", "温度", "剩余容量", "均衡电流"]
    rtMonData() {
      return this.monData.map((v) => {
        let {
          monVolReal,
          monVolFake,
          monVolSt,
          monResReal,
          monResFake,
          monResSt,
          monTmpReal,
          monTmpFake,
          monTmpSt,
          monRestCapReal,
          monRestCapFake,
          monRestCapSt,
          monJhCurrReal,
          monJhCurrFake,
          monJhCurrSt,
        } = v;
        let vol = monVolSt ? monVolFake : monVolReal;
        let res = monResSt ? monResFake : monResReal;
        let tmp = monTmpSt ? monTmpFake : monTmpReal;
        let cap = monRestCapSt ? monRestCapFake : monRestCapReal;
        let curr = monJhCurrSt ? monJhCurrFake : monJhCurrReal;
        return [vol + "V", res + "Ω", tmp + "℃", cap + "AH", curr + "A"];
      });
    },
  },
};
@@ -386,7 +581,9 @@
      color: #000;
      border-radius: 4px;
      font-weight: bold;
      font-size: 18px;
      height: 30px;
      line-height: 30px;
      font-size: 16px;
      border: 0 none;
      & + .el-tabs__item {
        margin-left: 6px;
src/views/realTime/js/const_props.js
@@ -1,654 +1,954 @@
const props1 = [
  {
    label: "交流配电柜温度(℃)",
    key: "",
    key0: "acCabinetTempReal",
    key1: "acCabinetTempFake",
    flag: "acCabinetTempSt",
  },
  {
    label: "交流电压告警阀值下限(V)",
    key: "",
  },
  // {
  //   label: "交流电压告警阀值下限(V)",
  //   key: "",
  // },
  {
    label: "第1路直流输入电压(V)",
    key: "",
    key0: "dcIn1VolReal",
    key1: "dcIn1VolFake",
    flag: "dcIn1VolSt",
  },
  {
    label: "1段直流母线输出电压(V)",
    key: "",
    key0: "dcOut1VolReal",
    key1: "dcOut1VolFake",
    flag: "dcOut1VolSt",
  },
  {
    label: "2段直流母线输出电流(A)",
    key: "",
    label: "1段直流母线输出电流(A)",
    key0: "dcOut1CurrReal",
    key1: "dcOut1CurrFake",
    flag: "dcOut1CurrSt",
  },
  {
    label: "直流配电柜温度(℃)",
    key: "",
    key0: "dcCabinetTempReal",
    key1: "dcCabinetTempFake",
    flag: "dcCabinetTempSt",
  },
  {
    label: "直流电压告警阀值下限(V)",
    key: "",
  },
  // {
  //   label: "直流电压告警阀值下限(V)",
  //   key: "",
  // },
];
const props2 = [
  // {
  //   label: "交流电压告警阀值上限(V)",
  //   key: "",
  // },
  {
    label: "交流电压告警阀值上限(V)",
    key: "",
  },
  {
    label: "第二路直流输入电压(V)",
    key: "",
    label: "第2路直流输入电压(V)",
    key0: "dcIn2VolReal",
    key1: "dcIn2VolFake",
    flag: "dcIn2VolSt",
  },
  {
    label: "2段直流母线输出电压(V)",
    key: "",
    key0: "dcOut2VolReal",
    key1: "dcOut2VolFake",
    flag: "dcOut2VolSt",
  },
  {
    label: "2段直流母线输出电流(A)",
    key: "",
    key0: "dcOut2CurrReal",
    key1: "dcOut2CurrFake",
    flag: "dcOut2CurrSt",
  },
  {
    label: "直流电压告警阀值上限(V)",
    key: "",
  },
  // {
  //   label: "直流电压告警阀值上限(V)",
  //   key: "",
  // },
];
const props3 = [
  {
    label: "直流输出电压(V)",
    key: "",
    key0: "dcOutVolReal",
    key1: "dcOutVolFake",
    flag: "dcOutVolSt",
  },
  {
    label: "蓄电池组充电电流(A)",
    key: "",
  },
  {
    label: "均充电压(V)",
    key: "",
  },
  {
    label: "电池N端电压(V)",
    key: "",
    childrenCount: 2,
  },
  {
    label: "模块N输出电流(A)",
    key: "",
    childrenCount: 32
  },
  {
    label: "交流电压告警阀值下限(V)",
    key: "",
  },
  {
    label: "直流电压告警阀值下限(V)",
    key: "",
  },
  // {
  //   label: "蓄电池组充电电流(A)",
  //   key: "",
  // },
  // {
  //   label: "均充电压(V)",
  //   key: "",
  // },
  // {
  //   label: "电池N端电压(V)",
  //   key: "",
  //   childrenCount: 2,
  // },
  // {
  //   label: "模块N输出电流(A)",
  //   key: "",
  //   childrenCount: 32,
  // },
  // {
  //   label: "交流电压告警阀值下限(V)",
  //   key: "",
  // },
  // {
  //   label: "直流电压告警阀值下限(V)",
  //   key: "",
  // },
];
const props4 = [
  {
    label: "负载电流(A)",
    key: "",
    key0: "loadCurrReal",
    key1: "loadCurrFake",
    flag: "loadCurrSt",
  },
  {
    label: "电池充电限流值(A)",
    key: "",
  },
  {
    label: "浮充电压(V)",
    key: "",
  },
  // {
  //   label: "电池充电限流值(A)",
  //   key: "",
  // },
  // {
  //   label: "浮充电压(V)",
  //   key: "",
  // },
  {
    label: "高频开关电源柜温度(℃)",
    key: "",
    key0: "highFrqCabinetTempReal",
    key1: "highFrqCabinetTempFake",
    flag: "highFrqCabinetTempSt",
  },
  {
    label: "交流电压告警阀值上限(V)",
    key: "",
  },
  {
    label: "直流电压告警阀值上限(V)",
    key: "",
  },
  // {
  //   label: "交流电压告警阀值上限(V)",
  //   key: "",
  // },
  // {
  //   label: "直流电压告警阀值上限(V)",
  //   key: "",
  // },
];
const props5 = [
  {
    label: "核容系统工作状态",
    key: "",
    label: "核容装置工作状态",
    key0: "devWorkStateReal",
    key1: "devWorkStateFake",
    flag: "devWorkStateSt",
    // [0:在线浮充 1:预充电(限流充电)2:核容测试 3:停电放电 4:内阻测试 5:K1/D1 测试]'
    config: [
      "在线浮充",
      "预充电(限流充电)",
      "核容测试",
      "停电放电",
      "内阻测试",
      "K1/D1测试",
    ],
  },
  {
    label: "第1组电池在线端电压(V)",
    key: "",
    key0: "batt1GroupVolReal",
    key1: "batt1GroupVolFake",
    flag: "batt1GroupVolSt",
  },
  {
    label: "第1组电池测试终止时间(h)",
    key: "",
    key0: "testOverTimeReal",
    key1: "testOverTimeFake",
    flag: "testOverTimeSt",
  },
  {
    label: "第1组核容测试终止单体电压下限阀值(V)",
    key: "",
    key0: "testOverMonVolLowLimitReal",
    key1: "testOverMonVolLowLimitFake",
    flag: "testOverMonVolLowLimitSt",
  },
  {
    label: "第1组核容测试时的已放电时间(h)",
    key: "",
    key0: "",
    key1: "",
    flag: "",
  },
  {
    label: "第1组核容测试时终止时的核容电流(A)",
    key: "",
    key0: "testOverCurrReal",
    key1: "testOverCurrFake",
    flag: "testOverCurrSt",
  },
  {
    label: "二极管D1导通压降(V)",
    key: "",
    key0: "d1CondVolDpReal",
    key1: "d1CondVolDpFake",
    flag: "d1CondVolDpSt",
  },
  {
    label: "第1组电池组电压(V)",
    key: "",
    key0: "batt1GroupVolReal",
    key1: "batt1GroupVolFake",
    flag: "batt1GroupVolSt",
  },
  {
    label: "第1组电池测试终止电压(V)",
    key: "",
    key0: "testOverVolReal",
    key1: "testOverVolFake",
    flag: "testOverVolSt",
  },
  {
    label: "第1组电池核容测试终止容量上限阀值",
    key: "",
    key0: "testOverCapHighLimitReal",
    key1: "testOverCapHighLimitFake",
    flag: "testOverCapHighLimitSt",
  },
  {
    label: "第1组核容测试终止单体温度上限阀值(℃)",
    key: "",
    key0: "testOverMonTmpHighLimitReal",
    key1: "testOverMonTmpHighLimitFake",
    flag: "testOverMonTmpHighLimitSt",
  },
  {
    label: "第1组核容测试终止时的蓄电池组端电压(V)",
    key: "",
    key0: "testGroupVolReal",
    key1: "testGroupVolFake",
    flag: "testGroupVolSt",
  },
  {
    label: "常闭接触器K1触点电阻值",
    key: "",
    key0: "k1PointResReal",
    key1: "k1PointResFake",
    flag: "k1PointResSt",
  },
  {
    label: "二极管D1导通测试电流(A)",
    key: "",
    key0: "d1CondTestCurrReal",
    key1: "d1CondTestCurrFake",
    flag: "d1CondTestCurrSt",
  },
  {
    label: "第1组电池组电流(A)",
    key: "",
    key0: "groupCurrReal",
    key1: "groupCurrFake",
    flag: "groupCurrSt",
  },
  {
    label: "第1组电池测试终止容量(AH)",
    key: "",
    label: "第1组电池测试终止剩余容量(AH)",
    key0: "testOverRestCapReal",
    key1: "testOverRestCapFake",
    flag: "testOverRestCapSt",
  },
  {
    label: "第1组核容测试放电电流设定值",
    key: "",
    key0: "testDisCurrReal",
    key1: "testDisCurrFake",
    flag: "testDisCurrSt",
  },
  {
    label: "第1组电池测试时终止放电容量(AH)",
    key: "",
    label: "第1组核容测试终止时已放电容量(AH)",
    key0: "testCapReal",
    key1: "testCapFake",
    flag: "testCapSt",
  },
  {
    label: "第1组核容测试终止时的在线电源端电压(V)",
    key: "",
    key0: "testOnlineVolReal",
    key1: "testOnlineVolFake",
    flag: "testOnlineVolSt",
  },
  {
    label: "常闭接触器K1触点测试电流",
    key: "",
    key0: "k1PointCurrReal",
    key1: "k1PointCurrFake",
    flag: "k1PointCurrSt",
  },
  {
    label: "核容系统内部温度(℃)",
    key: "",
    key0: "devTmpReal",
    key1: "devTmpFake",
    flag: "devTmpSt",
  },
];
const alarmList1 = [
  {
    name: "交流输入1停电",
    label: "交流输入1停电",
    level: 3,
    flag: 0
    key0: "acIn1PowerDownReal",
    key1: "acIn1PowerDownFake",
    flag: "acIn1PowerDownSt",
  },
  {
    name: "交流输入2停电",
    label: "交流输入2停电",
    level: 3,
    flag: 0
    key0: "acIn2PowerDownReal",
    key1: "acIn2PowerDownFake",
    flag: "acIn2PowerDownSt",
  },
  {
    name: "交流输入1防雷器故障",
    label: "交流输入1防雷器故障",
    level: 2,
    flag: 0
    key0: "acIn1ThunderErrReal",
    key1: "acIn1ThunderErrFake",
    flag: "acIn1ThunderErrSt",
  },
  {
    name: "交流输入2防雷器故障",
    label: "交流输入2防雷器故障",
    level: 2,
    flag: 0
    key0: "acIn2ThunderErrReal",
    key1: "acIn2ThunderErrFake",
    flag: "acIn2ThunderErrSt",
  },
  {
    name: "第1路交流输入开关跳闸",
    label: "第1路交流输入开关跳闸",
    level: 2,
    flag: 0
    key0: "acIn1SwitchTripReal",
    key1: "acIn1SwitchTripFake",
    flag: "acIn1SwitchTripSt",
  },
  {
    name: "第2路交流输入开关跳闸",
    label: "第2路交流输入开关跳闸",
    level: 2,
    flag: 0
    key0: "acIn2SwitchTripReal",
    key1: "acIn2SwitchTripFake",
    flag: "acIn2SwitchTripSt",
  },
  {
    name: "第1路交流A相过压",
    label: "第1路交流A相过压",
    level: 2,
    flag: 0
    key0: "acIn1OverVolAReal",
    key1: "acIn1OverVolAFake",
    flag: "acIn1OverVolASt",
  },
  {
    name: "第1路交流A相欠压",
    label: "第1路交流A相欠压",
    level: 2,
    flag: 0
    key0: "acIn1UnderVolAReal",
    key1: "acIn1UnderVolAFake",
    flag: "acIn1UnderVolASt",
  },
  {
    name: "第1路交流B相过压",
    label: "第1路交流B相过压",
    level: 2,
    flag: 0
    key0: "acIn1OverVolBReal",
    key1: "acIn1OverVolBFake",
    flag: "acIn1OverVolBSt",
  },
  {
    name: "第1路交流B相欠压",
    label: "第1路交流B相欠压",
    level: 2,
    flag: 0
    key0: "acIn1UnderVolBReal",
    key1: "acIn1UnderVolBFake",
    flag: "acIn1UnderVolBSt",
  },
  {
    name: "第1路交流C相过压",
    label: "第1路交流C相过压",
    level: 2,
    flag: 0
    key0: "acIn1OverVolCReal",
    key1: "acIn1OverVolCFake",
    flag: "acIn1OverVolCSt",
  },
  {
    name: "第1路交流C相欠压",
    label: "第1路交流C相欠压",
    level: 2,
    flag: 0
    key0: "acIn1UnderVolCReal",
    key1: "acIn1UnderVolCFake",
    flag: "acIn1UnderVolCSt",
  },
  {
    name: "第2路交流A相过压",
    label: "第2路交流A相过压",
    level: 2,
    flag: 0
    key0: "acIn2OverVolAReal",
    key1: "acIn2OverVolAFake",
    flag: "acIn2OverVolASt",
  },
  {
    name: "第2路交流A相欠压",
    label: "第2路交流A相欠压",
    level: 2,
    flag: 0
    key0: "acIn2UnderVolAReal",
    key1: "acIn2UnderVolAFake",
    flag: "acIn2UnderVolASt",
  },
  {
    name: "第2路交流B相过压",
    label: "第2路交流B相过压",
    level: 2,
    flag: 0
    key0: "acIn2OverVolBReal",
    key1: "acIn2OverVolBFake",
    flag: "acIn2OverVolBSt",
  },
  {
    name: "第2路交流B相欠压",
    label: "第2路交流B相欠压",
    level: 2,
    flag: 0
    key0: "acIn2UnderVolBReal",
    key1: "acIn2UnderVolBFake",
    flag: "acIn2UnderVolBSt",
  },
  {
    name: "第2路交流C相过压",
    label: "第2路交流C相过压",
    level: 2,
    flag: 0
    key0: "acIn2OverVolCReal",
    key1: "acIn2OverVolCFake",
    flag: "acIn2OverVolCSt",
  },
  {
    name: "第2路交流C相欠压",
    label: "第2路交流C相欠压",
    level: 2,
    flag: 0
    key0: "acIn2UnderVolCReal",
    key1: "acIn2UnderVolCFake",
    flag: "acIn2UnderVolCSt",
  },
  {
    name: "第1路交流A相缺相",
    label: "第1路交流A相缺相",
    level: 2,
    flag: 0
    key0: "acIn1LessVolAReal",
    key1: "acIn1LessVolAFake",
    flag: "acIn1LessVolASt",
  },
  {
    name: "第1路交流B相缺相",
    label: "第1路交流B相缺相",
    level: 2,
    flag: 0
    key0: "acIn1LessVolBReal",
    key1: "acIn1LessVolBFake",
    flag: "acIn1LessVolBSt",
  },
  {
    name: "第1路交流C相缺相",
    label: "第1路交流C相缺相",
    level: 2,
    flag: 0
    key0: "acIn1LessVolCReal",
    key1: "acIn1LessVolCFake",
    flag: "acIn1LessVolCSt",
  },
  {
    name: "第2路交流A相缺相",
    label: "第2路交流A相缺相",
    level: 2,
    flag: 0
    key0: "acIn2LessVolAReal",
    key1: "acIn2LessVolAFake",
    flag: "acIn2LessVolASt",
  },
  {
    name: "第2路交流B相缺相",
    label: "第2路交流B相缺相",
    level: 2,
    flag: 0
    key0: "acIn2LessVolBReal",
    key1: "acIn2LessVolBFake",
    flag: "acIn2LessVolBSt",
  },
  {
    name: "第2路交流C相缺相",
    label: "第2路交流C相缺相",
    level: 2,
    flag: 0
    key0: "acIn2LessVolCReal",
    key1: "acIn2LessVolCFake",
    flag: "acIn2LessVolCSt",
  },
  {
    name: "交流监控单元故障",
    label: "交流监控单元故障",
    level: 2,
    flag: 0
    key0: "acMonitorErrReal",
    key1: "acMonitorErrFake",
    flag: "acMonitorErrSt",
  },
  {
    name: "1段交流母线输出开关1~N跳闸",
    label: "1段交流母线输出开关1~N跳闸",
    level: 1,
    flag: 0,
    childrenVisible: false,
    key0: [
      "ac1OutSwitch1TripReal",
      "ac1OutSwitch2TripReal",
      "ac1OutSwitch3TripReal",
      "ac1OutSwitch4TripReal",
    ],
    key1: [
      "ac1OutSwitch1TripFake",
      "ac1OutSwitch2TripFake",
      "ac1OutSwitch3TripFake",
      "ac1OutSwitch4TripFake",
    ],
    flag: [
      "ac1OutSwitch1TripSt",
      "ac1OutSwitch2TripSt",
      "ac1OutSwitch3TripSt",
      "ac1OutSwitch4TripSt",
    ],
    childrenCount: 100,
    childrenState: 39465
  },
  {
    name: "2段交流母线输出开关1~N跳闸",
    label: "2段交流母线输出开关1~N跳闸",
    level: 1,
    flag: 0,
    childrenCount: 100
    key0: [
      "ac2OutSwitch1TripReal",
      "ac2OutSwitch2TripReal",
      "ac2OutSwitch3TripReal",
      "ac2OutSwitch4TripReal",
    ],
    key1: [
      "ac2OutSwitch1TripFake",
      "ac2OutSwitch2TripFake",
      "ac2OutSwitch3TripFake",
      "ac2OutSwitch4TripFake",
    ],
    flag: [
      "ac2OutSwitch1TripSt",
      "ac2OutSwitch2TripSt",
      "ac2OutSwitch3TripSt",
      "ac2OutSwitch4TripSt",
    ],
    childrenCount: 100,
  },
  {
    name: "交流配电柜总告警",
    label: "交流配电柜总告警",
    level: 1,
    flag: 0
    key0: "acCabinetTatalAlmReal",
    key1: "acCabinetTatalAlmFake",
    flag: "acCabinetTatalAlmSt",
  },
  {
    name: "交流配电柜温度告警",
    label: "交流配电柜温度告警",
    level: 1,
    flag: 0
    key0: "acCabinetTempAlmReal",
    key1: "acCabinetTempAlmFake",
    flag: "acCabinetTempAlmSt",
  },
];
const alarmList2 = [
  {
    name: "第1路直流过压",
    label: "第1路直流过压",
    level: 2,
    flag: 0
    key0: "dc1OverVolReal",
    key1: "dc1OverVolFake",
    flag: "dc1OverVolSt",
  },
  {
    name: "第1路直流欠压",
    label: "第1路直流欠压",
    level: 2,
    flag: 0
    key0: "dc1UnderVolReal",
    key1: "dc1UnderVolFake",
    flag: "dc1UnderVolSt",
  },
  {
    name: "第2路直流过压",
    label: "第2路直流过压",
    level: 2,
    flag: 0
    key0: "dc2OverVolReal",
    key1: "dc2OverVolFake",
    flag: "dc2OverVolSt",
  },
  {
    name: "第2路直流欠压",
    label: "第2路直流欠压",
    level: 2,
    flag: 0
    key0: "dc2UnderVolReal",
    key1: "dc2UnderVolFake",
    flag: "dc2UnderVolSt",
  },
  {
    name: "第1路直流输入开关跳闸",
    label: "第1路直流输入开关跳闸",
    level: 1,
    flag: 0
    key0: "dcIn1SwitchTripReal",
    key1: "dcIn1SwitchTripFake",
    flag: "dcIn1SwitchTripSt",
  },
  {
    name: "第2路直流输入开关跳闸",
    label: "第2路直流输入开关跳闸",
    level: 1,
    flag: 0
    key0: "dcIn2SwitchTripReal",
    key1: "dcIn2SwitchTripFake",
    flag: "dcIn2SwitchTripSt",
  },
  {
    name: "1段直流第N路开关跳闸",
    label: "1段直流第N路开关跳闸",
    level: 1,
    flag: 0,
    childrenCount: 100
    key0: [
      "dc1Switch1TripReal",
      "dc1Switch2TripReal",
      "dc1Switch3TripReal",
      "dc1Switch4TripReal",
    ],
    key1: [
      "dc1Switch1TripFake",
      "dc1Switch2TripFake",
      "dc1Switch3TripFake",
      "dc1Switch4TripFake",
    ],
    flag: [
      "dc1Switch1TripSt",
      "dc1Switch2TripSt",
      "dc1Switch3TripSt",
      "dc1Switch4TripSt",
    ],
    childrenCount: 100,
  },
  {
    name: "2段直流第N路开关跳闸",
    label: "2段直流第N路开关跳闸",
    level: 1,
    flag: 0,
    childrenCount: 100
    key0: [
      "dc2Switch1TripReal",
      "dc2Switch2TripReal",
      "dc2Switch3TripReal",
      "dc2Switch4TripReal",
    ],
    key1: [
      "dc2Switch1TripFake",
      "dc2Switch2TripFake",
      "dc2Switch3TripFake",
      "dc2Switch4TripFake",
    ],
    flag: [
      "dc2Switch1TripSt",
      "dc2Switch2TripSt",
      "dc2Switch3TripSt",
      "dc2Switch4TripSt",
    ],
    childrenCount: 100,
  },
  {
    name: "温度告警",
    label: "直流配电柜温度告警",
    level: 1,
    flag: 0
    key0: "dcCabinetTempReal",
    key1: "dcCabinetTempFake",
    flag: "dcCabinetTempSt",
  },
  {
    name: "监控单元故障",
    label: "直流监控单元故障",
    level: 1,
    flag: 0
    key0: "monitorErrReal",
    key1: "monitorErrFake",
    flag: "monitorErrSt",
  },
  {
    name: "直流配电柜总告警",
    label: "直流配电柜总告警",
    level: 1,
    flag: 0
    key0: "dcCabinetTatalAlmReal",
    key1: "dcCabinetTatalAlmFake",
    flag: "dcCabinetTatalAlmSt",
  },
];
const alarmList3 = [
  {
    name: "交流输入1停电",
    label: "交流输入1停电",
    level: 3,
    flag: 0
    key0: "aaaaaaaaaaaaaaaaaaa",
    key1: "aaaaaaaaaaaaaaaaaaa",
    flag: "aaaaaaaaaaaaaaaaa",
  },
  {
    name: "交流输入2停电",
    label: "交流输入2停电",
    level: 3,
    flag: 0
    key0: "aaaaaaaaaaaaaaaaaaa",
    key1: "aaaaaaaaaaaaaaaaaaa",
    flag: "aaaaaaaaaaaaaaaaa",
  },
  {
    name: "交流输入1防雷器故障",
    label: "交流输入1防雷器故障",
    level: 2,
    flag: 0
    key0: "aaaaaaaaaaaaaaaaaaa",
    key1: "aaaaaaaaaaaaaaaaaaa",
    flag: "aaaaaaaaaaaaaaaaa",
  },
  {
    name: "交流输入2防雷器故障",
    label: "交流输入2防雷器故障",
    level: 2,
    flag: 0
    key0: "aaaaaaaaaaaaaaaaaaa",
    key1: "aaaaaaaaaaaaaaaaaaa",
    flag: "aaaaaaaaaaaaaaaaa",
  },
  {
    name: "第1路交流输入开关跳闸",
    label: "第1路交流输入开关跳闸",
    level: 2,
    flag: 0
    key0: "aaaaaaaaaaaaaaaaaaa",
    key1: "aaaaaaaaaaaaaaaaaaa",
    flag: "aaaaaaaaaaaaaaaaa",
  },
  {
    name: "第2路交流输入开关跳闸",
    label: "第2路交流输入开关跳闸",
    level: 2,
    flag: 0
    key0: "aaaaaaaaaaaaaaaaaaa",
    key1: "aaaaaaaaaaaaaaaaaaa",
    flag: "aaaaaaaaaaaaaaaaa",
  },
  {
    name: "第1路交流A相过压",
    label: "第1路交流A相过压",
    level: 2,
    flag: 0
    key0: "xxxxxxxxxxxxxxxxx",
    key1: "xxxxxxxxxxxxxxxxx",
    flag: "xxxxxxxxxxxxxxx",
  },
  {
    name: "第1路交流A相欠压",
    label: "第1路交流A相欠压",
    level: 2,
    flag: 0
    key0: "xxxxxxxxxxxxxxxxxx",
    key1: "xxxxxxxxxxxxxxxxxx",
    flag: "xxxxxxxxxxxxxxxx",
  },
  {
    name: "第1路交流B相过压",
    label: "第1路交流B相过压",
    level: 2,
    flag: 0
    key0: "aaaaaaaaaaaaaaaaaaa",
    key1: "aaaaaaaaaaaaaaaaaaa",
    flag: "aaaaaaaaaaaaaaaaa",
  },
  {
    name: "第1路交流B相欠压",
    label: "第1路交流B相欠压",
    level: 2,
    flag: 0
    key0: "aaaaaaaaaaaaaaaaaaa",
    key1: "aaaaaaaaaaaaaaaaaaa",
    flag: "aaaaaaaaaaaaaaaaa",
  },
  {
    name: "第1路交流C相过压",
    label: "第1路交流C相过压",
    level: 2,
    flag: 0
    key0: "aaaaaaaaaaaaaaaaaaa",
    key1: "aaaaaaaaaaaaaaaaaaa",
    flag: "aaaaaaaaaaaaaaaaa",
  },
  {
    name: "第1路交流C相欠压",
    label: "第1路交流C相欠压",
    level: 2,
    flag: 0
    key0: "aaaaaaaaaaaaaaaaaaa",
    key1: "aaaaaaaaaaaaaaaaaaa",
    flag: "aaaaaaaaaaaaaaaaa",
  },
  {
    name: "第2路交流A相过压",
    label: "第2路交流A相过压",
    level: 2,
    flag: 0
    key0: "aaaaaaaaaaaaaaaaaaa",
    key1: "aaaaaaaaaaaaaaaaaaa",
    flag: "aaaaaaaaaaaaaaaaa",
  },
  {
    name: "第2路交流A相欠压",
    label: "第2路交流A相欠压",
    level: 2,
    flag: 0
    key0: "aaaaaaaaaaaaaaaaaaa",
    key1: "aaaaaaaaaaaaaaaaaaa",
    flag: "aaaaaaaaaaaaaaaaa",
  },
  {
    name: "第2路交流B相过压",
    label: "第2路交流B相过压",
    level: 2,
    flag: 0
    key0: "aaaaaaaaaaaaaaaaaaa",
    key1: "aaaaaaaaaaaaaaaaaaa",
    flag: "aaaaaaaaaaaaaaaaa",
  },
  {
    name: "第2路交流B相欠压",
    label: "第2路交流B相欠压",
    level: 2,
    flag: 0
    key0: "aaaaaaaaaaaaaaaaaaa",
    key1: "aaaaaaaaaaaaaaaaaaa",
    flag: "aaaaaaaaaaaaaaaaa",
  },
  {
    name: "第2路交流C相过压",
    label: "第2路交流C相过压",
    level: 2,
    flag: 0
    key0: "aaaaaaaaaaaaaaaaaaa",
    key1: "aaaaaaaaaaaaaaaaaaa",
    flag: "aaaaaaaaaaaaaaaaa",
  },
  {
    name: "第2路交流C相欠压",
    label: "第2路交流C相欠压",
    level: 2,
    flag: 0
    key0: "aaaaaaaaaaaaaaaaaaa",
    key1: "aaaaaaaaaaaaaaaaaaa",
    flag: "aaaaaaaaaaaaaaaaa",
  },
  {
    name: "第1路交流A相缺相",
    label: "第1路交流A相缺相",
    level: 2,
    flag: 0
    key0: "aaaaaaaaaaaaaaaaaaa",
    key1: "aaaaaaaaaaaaaaaaaaa",
    flag: "aaaaaaaaaaaaaaaaa",
  },
  {
    name: "第1路交流B相缺相",
    label: "第1路交流B相缺相",
    level: 2,
    flag: 0
    key0: "aaaaaaaaaaaaaaaaaaa",
    key1: "aaaaaaaaaaaaaaaaaaa",
    flag: "aaaaaaaaaaaaaaaaa",
  },
  {
    name: "第1路交流C相缺相",
    label: "第1路交流C相缺相",
    level: 2,
    flag: 0
    key0: "aaaaaaaaaaaaaaaaaaa",
    key1: "aaaaaaaaaaaaaaaaaaa",
    flag: "aaaaaaaaaaaaaaaaa",
  },
  {
    name: "第2路交流A相缺相",
    label: "第2路交流A相缺相",
    level: 2,
    flag: 0
    key0: "aaaaaaaaaaaaaaaaaaa",
    key1: "aaaaaaaaaaaaaaaaaaa",
    flag: "aaaaaaaaaaaaaaaaa",
  },
  {
    name: "第2路交流B相缺相",
    label: "第2路交流B相缺相",
    level: 2,
    flag: 0
    key0: "aaaaaaaaaaaaaaaaaaa",
    key1: "aaaaaaaaaaaaaaaaaaa",
    flag: "aaaaaaaaaaaaaaaaa",
  },
  {
    name: "第2路交流C相缺相",
    label: "第2路交流C相缺相",
    level: 2,
    flag: 0
    key0: "aaaaaaaaaaaaaaaaaaa",
    key1: "aaaaaaaaaaaaaaaaaaa",
    flag: "aaaaaaaaaaaaaaaaa",
  },
  {
    name: "交流监控单元故障",
    label: "交流监控单元故障",
    level: 2,
    flag: 0
    key0: "aaaaaaaaaaaaaaaaaaa",
    key1: "aaaaaaaaaaaaaaaaaaa",
    flag: "aaaaaaaaaaaaaaaaa",
  },
  {
    name: "模块N开关机状态",
    label: "模块N开关机状态",
    level: 1,
    flag: 0,
    key0: ["m1Off1Real", "m1Off2Real"],
    key1: ["m1Off1Fake", "m1Off2Fake"],
    flag: ["m1Off1St", "m1Off2St"],
    childrenCount: 32,
    childrenState: 4561
  },
  {
    name: "模块N故障",
    label: "模块N故障",
    level: 1,
    flag: 0,
    key0: ["m1Err1Real", "m1Err2Real"],
    key1: ["m1Err1Fake", "m1Err2Fake"],
    flag: ["m1Err1St", "m1Err2St"],
    childrenCount: 32,
    childrenState: 4561
  },
  {
    name: "高频开关电源柜总告警",
    label: "高频开关电源柜总告警",
    level: 1,
    flag: 0
    key0: "highFrqCabinetTotalAlmReal",
    key1: "highFrqCabinetTotalAlmFake",
    flag: "highFrqCabinetTotalAlmSt",
  },
  {
    name: "直流输出过压",
    label: "直流输出过压",
    level: 2,
    flag: 0
    key0: "dcOutOverVolReal",
    key1: "dcOutOverVolFake",
    flag: "dcOutOverVolSt",
  },
  {
    name: "直流输出欠压",
    label: "直流输出欠压",
    level: 2,
    flag: 0
    key0: "dcOutUnderVolReal",
    key1: "dcOutUnderVolFake",
    flag: "dcOutUnderVolSt",
  },
  {
    name: "电池组下电保护告警",
    label: "电池组下电保护告警",
    level: 2,
    flag: 0
    key0: "battOffProtectAlmReal",
    key1: "battOffProtectAlmFake",
    flag: "battOffProtectAlmSt",
  },
  {
    name: "电池组N熔丝告警",
    label: "电池组熔丝告警",
    level: 2,
    flag: 0,
    childrenCount: 2
    key0: "batt1FuseAlmReal",
    key1: "batt1FuseAlmFake",
    flag: "batt1FuseAlmSt",
    // childrenCount: 2,
  },
  {
    name: "负载熔丝状态",
    label: "负载熔丝状态",
    level: 2,
    flag: 0
    key0: "loadFuseStateReal",
    key1: "loadFuseStateFake",
    flag: "loadFuseStateSt",
  },
  {
    name: "均浮充状态",
    label: "均浮充状态",
    level: 1,
    flag: 0
    key0: "junFloatStateReal",
    key1: "junFloatStateFake",
    flag: "junFloatStateSt",
  },
  {
    name: "在用交流输入路数",
    label: "在用交流输入路数",
    level: 0,
    flag: 0
    key0: "acInUseCountReal",
    key1: "acInUseCountFake",
    flag: "acInUseCountSt",
  },
];
const alarmList4 = [
  {
    name: "第1组电池组电压告警",
    label: "第1组电池组电压告警",
    level: 2,
    flag: 0
    key0: "aaaaaaaaaaaaaaaaaaa",
    key1: "aaaaaaaaaaaaaaaaaaa",
    flag: "aaaaaaaaaaaaaaaaa",
  },
  {
    name: "常闭接触器K1告警",
    label: "常闭接触器K1告警",
    level: 2,
    flag: 0
    key0: "aaaaaaaaaaaaaaaaaaa",
    key1: "aaaaaaaaaaaaaaaaaaa",
    flag: "aaaaaaaaaaaaaaaaa",
  },
  {
    name: "核容装置通讯告警",
    label: "核容装置通讯告警",
    level: 2,
    flag: 0
    key0: "aaaaaaaaaaaaaaaaaaa",
    key1: "aaaaaaaaaaaaaaaaaaa",
    flag: "aaaaaaaaaaaaaaaaa",
  },
  {
    name: "核容装置过温告警",
    label: "核容装置过温告警",
    level: 2,
    flag: 0
    key0: "aaaaaaaaaaaaaaaaaaa",
    key1: "aaaaaaaaaaaaaaaaaaa",
    flag: "aaaaaaaaaaaaaaaaa",
  },
  {
    name: "二极管D1告警",
    label: "二极管D1告警",
    level: 2,
    flag: 0
    key0: "aaaaaaaaaaaaaaaaaaa",
    key1: "aaaaaaaaaaaaaaaaaaa",
    flag: "aaaaaaaaaaaaaaaaa",
  },
  {
    name: "第N个外部输入干接点告警",
    label: "第N个外部输入干接点告警",
    level: 2,
    flag: 0,
    childrenCount: 20
    key0: "aaaaaaaaaaaaaaaaaaa",
    key1: "aaaaaaaaaaaaaaaaaaa",
    flag: "aaaaaaaaaaaaaaaaa",
    childrenCount: 20,
  },
  {
    name: "核容装置总告警",
    label: "核容装置总告警",
    level: 2,
    flag: 0
    key0: "aaaaaaaaaaaaaaaaaaa",
    key1: "aaaaaaaaaaaaaaaaaaa",
    flag: "aaaaaaaaaaaaaaaaa",
  },
];
const alarmList5 = [
  {
    name: "单体电压告警",
    label: "单体电压告警",
    level: 1,
    flag: 0,
    childrenCount: 24
    key0: "aaaaaaaaaaaaaaaaaaa",
    key1: "aaaaaaaaaaaaaaaaaaa",
    flag: "aaaaaaaaaaaaaaaaa",
    childrenCount: 24,
  },
  {
    name: "单体内阻告警",
    label: "单体内阻告警",
    level: 1,
    flag: 0,
    childrenCount: 24
    key0: "aaaaaaaaaaaaaaaaaaa",
    key1: "aaaaaaaaaaaaaaaaaaa",
    flag: "aaaaaaaaaaaaaaaaa",
    childrenCount: 24,
  },
  {
    name: "单体极柱温度告警",
    label: "单体极柱温度告警",
    level: 1,
    flag: 0,
    childrenCount: 24
    key0: "aaaaaaaaaaaaaaaaaaa",
    key1: "aaaaaaaaaaaaaaaaaaa",
    flag: "aaaaaaaaaaaaaaaaa",
    childrenCount: 24,
  },
  {
    name: "单体剩余容量告警",
    label: "单体剩余容量告警",
    level: 1,
    flag: 0,
    childrenCount: 24
    key0: "aaaaaaaaaaaaaaaaaaa",
    key1: "aaaaaaaaaaaaaaaaaaa",
    flag: "aaaaaaaaaaaaaaaaa",
    childrenCount: 24,
  },
];
src/views/switchControl/index.vue
@@ -2,7 +2,7 @@
  <div class="p-contain">
    <panel class="panel side" title="通信电源柜线路选择">
      <div class="content">
        <div class="list-item AC active">
        <div class="list-item AC active" >
          <div class="i"></div>
          <div class="name">交流进线1</div>
        </div>
@@ -64,7 +64,13 @@
          <div class="yc-panel">
            <div class="yc-title">三相相电压(V)</div>
            <div class="yc-content">
              <bar1 ref="bar1"></bar1>
              <div class="bar-contain">
                <bar1 ref="bar1"></bar1>
              </div>
              <div class="info">
                <div class="label">平均值:</div>
                <div class="value">123V</div>
              </div>
            </div>
          </div>
          <div class="border">
@@ -73,7 +79,13 @@
          <div class="yc-panel">
            <div class="yc-title">三相相电压(V)</div>
            <div class="yc-content">
              <bar1 ref="bar1"></bar1>
              <div class="bar-contain">
                <bar2 ref="bar2"></bar2>
              </div>
              <div class="info">
                <div class="label">平均值:</div>
                <div class="value">123V</div>
              </div>
            </div>
          </div>
          <div class="border">
@@ -90,6 +102,7 @@
import ListCard from "@/components/listCard.vue";
import gauge3 from "@/components/gauge3";
import bar1 from "@/components/bar1";
import bar2 from "@/components/bar2";
export default {
  name: "",
@@ -218,6 +231,7 @@
    ListCard,
    gauge3,
    bar1,
    bar2,
  },
  methods: {},
@@ -289,6 +303,7 @@
      padding: 10px;
      .tableCent {
        background: #00253f;
        color: #fff;
        &::before {
          height: 0;
        }
@@ -324,7 +339,6 @@
      margin-top: 10px;
      .content {
        display: flex;
      }
    }
  }
@@ -354,6 +368,23 @@
      flex-direction: column;
      background: #011f39;
    }
    .bar-contain {
      flex: 1;
    }
    .info {
      // line-height: 1.4;
      padding: 0 18px 20px 12px;
      display: flex;
      justify-content: space-between;
      .value {
        background: #0C4D77;;
        width: 60px;
        border-radius: 4px;
        padding: 2px 4px;
        color: #78eef8;
        border: 1px #78EEF8 solid;
      }
    }
  }
  .border {
    flex: 1;
src/views/user/list.vue
@@ -1,82 +1,92 @@
<template>
  <div class="p-container">
    <div class="p-title">用户列表</div>
    <div class="btn-grp">
      <el-button
        type="primary"
        icon="el-icon-plus"
        round
        size="mini"
        @click="addUser"
        >添加</el-button
      >
      <el-button
        type="primary"
        round
        size="mini"
        @click="getList"
        icon="el-icon-search"
        >查询</el-button
      >
    </div>
    <!-- 用户列表 -->
    <el-table :data="tableData" border style="width: 100%">
      <el-table-column type="index" label="序号" width="80"></el-table-column>
      <el-table-column
        v-for="header in headers"
        :key="header.prop"
        :prop="header.prop"
        :label="header.label"
        :min-width="header.width"
        align="center"
      ></el-table-column>
      <el-table-column label="操作" width="260" align="center">
        <template slot-scope="scope">
    <panel class="panel p-content">
      <div class="panel-content flex-c">
        <div class="btn-grp">
          <el-button
            type="primary"
            icon="el-icon-plus"
            round
            size="mini"
            :disabled="scope.row.uid == uid"
            @click="edit(scope.row)"
            >编辑</el-button
            @click="addUser"
            >添加</el-button
          >
          <el-button
            type="danger"
            type="primary"
            round
            size="mini"
            :disabled="scope.row.uid == uid"
            @click="confirmRemove(scope.row)"
            >删除</el-button
            @click="getList"
            icon="el-icon-search"
            >查询</el-button
          >
          <el-button
            type="success"
            v-if="scope.row.uid > 1000"
            size="mini"
            @click="improveRole(scope.row)"
            >加入管理员组</el-button
          >
          <el-button
            type="danger"
            v-else
            :disabled="scope.row.uid == uid"
            size="mini"
            @click="dropRole(scope.row)"
            >移出管理员组</el-button
          >
        </template>
      </el-table-column>
    </el-table>
    <!-- 底部 -->
    <!-- 底部分页 -->
    <el-pagination
      class="pagess"
      :current-page="pageCurr"
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
      :page-sizes="[10, 20, 30, 50, 100]"
      :page-size="pageSize"
      layout="total, sizes, prev, pager, next, jumper"
      :total="total"
    ></el-pagination>
        </div>
        <!-- 用户列表 -->
        <div class="table-wrap">
          <el-table class="table-dark" stripe height="100%"
            size="small" :data="tableData" style="width: 100%">
            <el-table-column
              type="index"
              label="序号"
              width="80"
            ></el-table-column>
            <el-table-column
              v-for="header in headers"
              :key="header.prop"
              :prop="header.prop"
              :label="header.label"
              :min-width="header.width"
              align="center"
            ></el-table-column>
            <el-table-column label="操作" width="260" align="center">
              <template slot-scope="scope">
                <el-button
                  type="primary"
                  size="mini"
                  :disabled="scope.row.uid == uid"
                  @click="edit(scope.row)"
                  >编辑</el-button
                >
                <el-button
                  type="danger"
                  size="mini"
                  :disabled="scope.row.uid == uid"
                  @click="confirmRemove(scope.row)"
                  >删除</el-button
                >
                <el-button
                  type="success"
                  v-if="scope.row.uid > 1000"
                  size="mini"
                  @click="improveRole(scope.row)"
                  >加入管理员组</el-button
                >
                <el-button
                  type="danger"
                  v-else
                  :disabled="scope.row.uid == uid"
                  size="mini"
                  @click="dropRole(scope.row)"
                  >移出管理员组</el-button
                >
              </template>
            </el-table-column>
          </el-table>
        </div>
        <!-- 底部 -->
        <!-- 底部分页 -->
        <el-pagination
          class="pages center dark"
          :current-page="pageCurr"
          @size-change="handleSizeChange"
          @current-change="handleCurrentChange"
          :page-sizes="[10, 20, 30, 50, 100]"
          :page-size="pageSize"
          layout="total, sizes, prev, pager, next, jumper"
          :total="total"
        ></el-pagination>
      </div>
    </panel>
    <!-- 弹窗 -->
    <el-dialog
      :title="dialogTitle"
@@ -98,6 +108,9 @@
</template>
<script>
import Panel from "@/components/panel.vue";
import gradientBtn from "@/components/gradientBtn.vue";
import { getAllUser, deleteUser, dropRole, improveRole } from "./api";
import AddEdit from "./addEdit";
import { mapGetters } from "vuex";
@@ -121,13 +134,13 @@
        },
        {
          prop: "canDownload",
          label: "下载权限",
          label: "控制权限",
          width: "",
        },
      ],
    };
  },
  components: { AddEdit },
  components: { AddEdit, Panel, gradientBtn },
  computed: {
    ...mapGetters(["uid"]),
  },
@@ -255,17 +268,28 @@
};
</script>
<style scoped>
<style scoped lang="less">
.p-container {
  height: 100%;
  display: flex;
  flex-direction: column;
}
.p-title {
  font-size: 20px;
  font-weight: bold;
  color: #333;
  padding: 0.4em;
  .p-content {
    flex: 1;
    margin-top: 4px;
    /deep/ .content {
      background: #011f39;
    }
    .panel-content {
      height: 100%;
      padding: 10px;
      .table-wrap {
        flex: 1;
        margin-top: 6px;
        margin-bottom: 6px;
      }
    }
  }
}
.btn-grp {
  padding: 0.6em;