15902849627 5 tháng trước cách đây
commit
2a0e273c23
84 tập tin đã thay đổi với 10485 bổ sung0 xóa
  1. 1 0
      .gitattributes
  2. 30 0
      .gitignore
  3. 6 0
      .prettierrc.json
  4. 29 0
      README.md
  5. 13 0
      index.html
  6. 8 0
      jsconfig.json
  7. 2929 0
      package-lock.json
  8. 28 0
      package.json
  9. BIN
      public/favicon.ico
  10. 73 0
      public/public.json
  11. 85 0
      src/App.vue
  12. BIN
      src/assets/enterprise.png
  13. BIN
      src/assets/font/DSDIGI1.ttf
  14. BIN
      src/assets/font/FX-LED Bold.TTF
  15. BIN
      src/assets/font/MFLiHei_Noncommercial-Regular.otf
  16. BIN
      src/assets/img/TB1UN4PQXXXXXaHXFXXXXXXXXXX-592-131.png
  17. BIN
      src/assets/img/bg.png
  18. BIN
      src/assets/img/bg_video.mp4
  19. BIN
      src/assets/img/chart_bg.png
  20. BIN
      src/assets/img/chart_bg1.png
  21. BIN
      src/assets/img/chart_bgtit.png
  22. BIN
      src/assets/img/charts_bg.png
  23. BIN
      src/assets/img/data_bg.png
  24. BIN
      src/assets/img/data_bg1.png
  25. BIN
      src/assets/img/data_bg2.png
  26. BIN
      src/assets/img/data_bg3.png
  27. BIN
      src/assets/img/data_title_bg.png
  28. BIN
      src/assets/img/icon_car.png
  29. BIN
      src/assets/img/icon_car1.png
  30. BIN
      src/assets/img/icon_car2.png
  31. BIN
      src/assets/img/icon_car3.png
  32. BIN
      src/assets/img/icon_car4.png
  33. BIN
      src/assets/img/iframe_bg.png
  34. BIN
      src/assets/img/num_bg.png
  35. BIN
      src/assets/img/step.png
  36. BIN
      src/assets/img/stone_1.png
  37. BIN
      src/assets/img/stone_2.png
  38. BIN
      src/assets/img/title_bg.png
  39. BIN
      src/assets/img/top_bg.png
  40. BIN
      src/assets/imgs/bgimg.png
  41. BIN
      src/assets/imgs/c_car1.png
  42. BIN
      src/assets/imgs/c_car2.png
  43. BIN
      src/assets/imgs/c_car3.png
  44. BIN
      src/assets/imgs/car_1.png
  45. BIN
      src/assets/imgs/car_2.png
  46. BIN
      src/assets/imgs/ditu@2x.png
  47. BIN
      src/assets/imgs/dot.png
  48. BIN
      src/assets/imgs/left_bg.png
  49. BIN
      src/assets/imgs/map_bg.png
  50. BIN
      src/assets/imgs/mid_bbg.png
  51. BIN
      src/assets/imgs/mid_tbg.png
  52. BIN
      src/assets/imgs/n_car1.png
  53. BIN
      src/assets/imgs/n_car2.png
  54. BIN
      src/assets/imgs/n_car3.png
  55. BIN
      src/assets/imgs/right_bg.png
  56. BIN
      src/assets/imgs/tab_l.png
  57. BIN
      src/assets/imgs/tab_led.png
  58. BIN
      src/assets/imgs/tab_r.png
  59. BIN
      src/assets/imgs/tab_red.png
  60. BIN
      src/assets/imgs/title_bg.png
  61. BIN
      src/assets/imgs/tits_bg.png
  62. BIN
      src/assets/marker1.png
  63. BIN
      src/assets/marker2.png
  64. BIN
      src/assets/marker3.png
  65. BIN
      src/assets/marker4.png
  66. BIN
      src/assets/zhibiao1.png
  67. BIN
      src/assets/zhibiao2.png
  68. BIN
      src/assets/组19@2x.png
  69. 1880 0
      src/components/page/bindex.vue
  70. 202 0
      src/components/page/count.vue
  71. 231 0
      src/components/page/counts.vue
  72. 292 0
      src/components/page/data.js
  73. 46 0
      src/components/page/requestAnimationFrame.js
  74. 1245 0
      src/components/page/sindex copy.vue
  75. 1444 0
      src/components/page/sindex.vue
  76. 59 0
      src/components/selfCP/charts.vue
  77. 84 0
      src/components/selfCP/chartsbar.vue
  78. 19 0
      src/main.js
  79. 18 0
      src/router/index.js
  80. 11 0
      src/server/api/common.js
  81. 89 0
      src/server/response/request.js
  82. 80 0
      src/views/index.vue
  83. 24 0
      vite.config.js
  84. 1559 0
      yarn.lock

+ 1 - 0
.gitattributes

@@ -0,0 +1 @@
+* text=auto eol=lf

+ 30 - 0
.gitignore

@@ -0,0 +1,30 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+.DS_Store
+dist
+dist-ssr
+coverage
+*.local
+
+/cypress/videos/
+/cypress/screenshots/
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
+
+*.tsbuildinfo

+ 6 - 0
.prettierrc.json

@@ -0,0 +1,6 @@
+{
+  "$schema": "https://json.schemastore.org/prettierrc",
+  "semi": false,
+  "singleQuote": true,
+  "printWidth": 100
+}

+ 29 - 0
README.md

@@ -0,0 +1,29 @@
+# vue3
+
+This template should help get you started developing with Vue 3 in Vite.
+
+## Recommended IDE Setup
+
+[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur).
+
+## Customize configuration
+
+See [Vite Configuration Reference](https://vite.dev/config/).
+
+## Project Setup
+
+```sh
+yarn
+```
+
+### Compile and Hot-Reload for Development
+
+```sh
+yarn dev
+```
+
+### Compile and Minify for Production
+
+```sh
+yarn build
+```

+ 13 - 0
index.html

@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html lang="">
+  <head>
+    <meta charset="UTF-8">
+    <link rel="icon" href="/favicon.ico">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>矿拉拉-物流集散调度中心-4K</title>
+  </head>
+  <body>
+    <div id="app"></div>
+    <script type="module" src="/src/main.js"></script>
+  </body>
+</html>

+ 8 - 0
jsconfig.json

@@ -0,0 +1,8 @@
+{
+  "compilerOptions": {
+    "paths": {
+      "@/*": ["./src/*"]
+    }
+  },
+  "exclude": ["node_modules", "dist"]
+}

+ 2929 - 0
package-lock.json

@@ -0,0 +1,2929 @@
+{
+  "name": "vue3",
+  "version": "0.0.0",
+  "lockfileVersion": 3,
+  "requires": true,
+  "packages": {
+    "": {
+      "name": "vue3",
+      "version": "0.0.0",
+      "dependencies": {
+        "axios": "^1.10.0",
+        "echarts": "^5.6.0",
+        "moment": "^2.30.1",
+        "vue": "^3.5.17",
+        "vue-router": "^4.5.1",
+        "vue3-marquee": "^4.2.2",
+        "vue3-seamless-scroll": "^3.0.2"
+      },
+      "devDependencies": {
+        "@vitejs/plugin-vue": "^6.0.0",
+        "less": "^4.3.0",
+        "prettier": "3.5.3",
+        "vite": "^7.0.0",
+        "vite-plugin-vue-devtools": "^7.7.7"
+      }
+    },
+    "node_modules/@ampproject/remapping": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.3.0.tgz",
+      "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@jridgewell/gen-mapping": "^0.3.5",
+        "@jridgewell/trace-mapping": "^0.3.24"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@antfu/utils": {
+      "version": "0.7.10",
+      "resolved": "https://registry.npmmirror.com/@antfu/utils/-/utils-0.7.10.tgz",
+      "integrity": "sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==",
+      "dev": true,
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
+      }
+    },
+    "node_modules/@babel/code-frame": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.27.1.tgz",
+      "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-validator-identifier": "^7.27.1",
+        "js-tokens": "^4.0.0",
+        "picocolors": "^1.1.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/compat-data": {
+      "version": "7.28.0",
+      "resolved": "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.28.0.tgz",
+      "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/core": {
+      "version": "7.28.0",
+      "resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.28.0.tgz",
+      "integrity": "sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@ampproject/remapping": "^2.2.0",
+        "@babel/code-frame": "^7.27.1",
+        "@babel/generator": "^7.28.0",
+        "@babel/helper-compilation-targets": "^7.27.2",
+        "@babel/helper-module-transforms": "^7.27.3",
+        "@babel/helpers": "^7.27.6",
+        "@babel/parser": "^7.28.0",
+        "@babel/template": "^7.27.2",
+        "@babel/traverse": "^7.28.0",
+        "@babel/types": "^7.28.0",
+        "convert-source-map": "^2.0.0",
+        "debug": "^4.1.0",
+        "gensync": "^1.0.0-beta.2",
+        "json5": "^2.2.3",
+        "semver": "^6.3.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/babel"
+      }
+    },
+    "node_modules/@babel/generator": {
+      "version": "7.28.0",
+      "resolved": "https://registry.npmmirror.com/@babel/generator/-/generator-7.28.0.tgz",
+      "integrity": "sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/parser": "^7.28.0",
+        "@babel/types": "^7.28.0",
+        "@jridgewell/gen-mapping": "^0.3.12",
+        "@jridgewell/trace-mapping": "^0.3.28",
+        "jsesc": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-annotate-as-pure": {
+      "version": "7.27.3",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz",
+      "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.27.3"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-compilation-targets": {
+      "version": "7.27.2",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz",
+      "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/compat-data": "^7.27.2",
+        "@babel/helper-validator-option": "^7.27.1",
+        "browserslist": "^4.24.0",
+        "lru-cache": "^5.1.1",
+        "semver": "^6.3.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-create-class-features-plugin": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.1.tgz",
+      "integrity": "sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-annotate-as-pure": "^7.27.1",
+        "@babel/helper-member-expression-to-functions": "^7.27.1",
+        "@babel/helper-optimise-call-expression": "^7.27.1",
+        "@babel/helper-replace-supers": "^7.27.1",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",
+        "@babel/traverse": "^7.27.1",
+        "semver": "^6.3.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/helper-globals": {
+      "version": "7.28.0",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-globals/-/helper-globals-7.28.0.tgz",
+      "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-member-expression-to-functions": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz",
+      "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/traverse": "^7.27.1",
+        "@babel/types": "^7.27.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-module-imports": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz",
+      "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/traverse": "^7.27.1",
+        "@babel/types": "^7.27.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-module-transforms": {
+      "version": "7.27.3",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz",
+      "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-module-imports": "^7.27.1",
+        "@babel/helper-validator-identifier": "^7.27.1",
+        "@babel/traverse": "^7.27.3"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/helper-optimise-call-expression": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz",
+      "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.27.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-plugin-utils": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz",
+      "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-replace-supers": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz",
+      "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-member-expression-to-functions": "^7.27.1",
+        "@babel/helper-optimise-call-expression": "^7.27.1",
+        "@babel/traverse": "^7.27.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz",
+      "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/traverse": "^7.27.1",
+        "@babel/types": "^7.27.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-string-parser": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
+      "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-validator-identifier": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
+      "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-validator-option": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
+      "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helpers": {
+      "version": "7.27.6",
+      "resolved": "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.27.6.tgz",
+      "integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/template": "^7.27.2",
+        "@babel/types": "^7.27.6"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/parser": {
+      "version": "7.28.0",
+      "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.28.0.tgz",
+      "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.28.0"
+      },
+      "bin": {
+        "parser": "bin/babel-parser.js"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@babel/plugin-proposal-decorators": {
+      "version": "7.28.0",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.28.0.tgz",
+      "integrity": "sha512-zOiZqvANjWDUaUS9xMxbMcK/Zccztbe/6ikvUXaG9nsPH3w6qh5UaPGAnirI/WhIbZ8m3OHU0ReyPrknG+ZKeg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-create-class-features-plugin": "^7.27.1",
+        "@babel/helper-plugin-utils": "^7.27.1",
+        "@babel/plugin-syntax-decorators": "^7.27.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-decorators": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.27.1.tgz",
+      "integrity": "sha512-YMq8Z87Lhl8EGkmb0MwYkt36QnxC+fzCgrl66ereamPlYToRpIk5nUjKUY3QKLWq8mwUB1BgbeXcTJhZOCDg5A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.27.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-import-attributes": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz",
+      "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.27.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-import-meta": {
+      "version": "7.10.4",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
+      "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.10.4"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-jsx": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz",
+      "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.27.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-typescript": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz",
+      "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.27.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-typescript": {
+      "version": "7.28.0",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.0.tgz",
+      "integrity": "sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-annotate-as-pure": "^7.27.3",
+        "@babel/helper-create-class-features-plugin": "^7.27.1",
+        "@babel/helper-plugin-utils": "^7.27.1",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",
+        "@babel/plugin-syntax-typescript": "^7.27.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/template": {
+      "version": "7.27.2",
+      "resolved": "https://registry.npmmirror.com/@babel/template/-/template-7.27.2.tgz",
+      "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/code-frame": "^7.27.1",
+        "@babel/parser": "^7.27.2",
+        "@babel/types": "^7.27.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/traverse": {
+      "version": "7.28.0",
+      "resolved": "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.28.0.tgz",
+      "integrity": "sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/code-frame": "^7.27.1",
+        "@babel/generator": "^7.28.0",
+        "@babel/helper-globals": "^7.28.0",
+        "@babel/parser": "^7.28.0",
+        "@babel/template": "^7.27.2",
+        "@babel/types": "^7.28.0",
+        "debug": "^4.3.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/types": {
+      "version": "7.28.1",
+      "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.28.1.tgz",
+      "integrity": "sha512-x0LvFTekgSX+83TI28Y9wYPUfzrnl2aT5+5QLnO6v7mSJYtEEevuDRN0F0uSHRk1G1IWZC43o00Y0xDDrpBGPQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-string-parser": "^7.27.1",
+        "@babel/helper-validator-identifier": "^7.27.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@ctrl/tinycolor": {
+      "version": "3.6.1",
+      "resolved": "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz",
+      "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/@element-plus/icons-vue": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz",
+      "integrity": "sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==",
+      "license": "MIT",
+      "peerDependencies": {
+        "vue": "^3.2.0"
+      }
+    },
+    "node_modules/@esbuild/win32-x64": {
+      "version": "0.25.6",
+      "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.25.6.tgz",
+      "integrity": "sha512-NgJPHHbEpLQgDH2MjQu90pzW/5vvXIZ7KOnPyNBm92A6WgZ/7b6fJyUBjoumLqeOQQGqY2QjQxRo97ah4Sj0cA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@floating-ui/core": {
+      "version": "1.7.2",
+      "resolved": "https://registry.npmmirror.com/@floating-ui/core/-/core-1.7.2.tgz",
+      "integrity": "sha512-wNB5ooIKHQc+Kui96jE/n69rHFWAVoxn5CAzL1Xdd8FG03cgY3MLO+GF9U3W737fYDSgPWA6MReKhBQBop6Pcw==",
+      "license": "MIT",
+      "dependencies": {
+        "@floating-ui/utils": "^0.2.10"
+      }
+    },
+    "node_modules/@floating-ui/dom": {
+      "version": "1.7.2",
+      "resolved": "https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.7.2.tgz",
+      "integrity": "sha512-7cfaOQuCS27HD7DX+6ib2OrnW+b4ZBwDNnCcT0uTyidcmyWb03FnQqJybDBoCnpdxwBSfA94UAYlRCt7mV+TbA==",
+      "license": "MIT",
+      "dependencies": {
+        "@floating-ui/core": "^1.7.2",
+        "@floating-ui/utils": "^0.2.10"
+      }
+    },
+    "node_modules/@floating-ui/utils": {
+      "version": "0.2.10",
+      "resolved": "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.2.10.tgz",
+      "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==",
+      "license": "MIT"
+    },
+    "node_modules/@jridgewell/gen-mapping": {
+      "version": "0.3.12",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz",
+      "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/sourcemap-codec": "^1.5.0",
+        "@jridgewell/trace-mapping": "^0.3.24"
+      }
+    },
+    "node_modules/@jridgewell/resolve-uri": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+      "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@jridgewell/sourcemap-codec": {
+      "version": "1.5.4",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz",
+      "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==",
+      "license": "MIT"
+    },
+    "node_modules/@jridgewell/trace-mapping": {
+      "version": "0.3.29",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz",
+      "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/resolve-uri": "^3.1.0",
+        "@jridgewell/sourcemap-codec": "^1.4.14"
+      }
+    },
+    "node_modules/@polka/url": {
+      "version": "1.0.0-next.29",
+      "resolved": "https://registry.npmmirror.com/@polka/url/-/url-1.0.0-next.29.tgz",
+      "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@popperjs/core": {
+      "name": "@sxzz/popperjs-es",
+      "version": "2.11.7",
+      "resolved": "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz",
+      "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==",
+      "license": "MIT",
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/popperjs"
+      }
+    },
+    "node_modules/@rolldown/pluginutils": {
+      "version": "1.0.0-beta.19",
+      "resolved": "https://registry.npmmirror.com/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.19.tgz",
+      "integrity": "sha512-3FL3mnMbPu0muGOCaKAhhFEYmqv9eTfPSJRJmANrCwtgK8VuxpsZDGK+m0LYAGoyO8+0j5uRe4PeyPDK1yA/hA==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@rollup/pluginutils": {
+      "version": "5.2.0",
+      "resolved": "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.2.0.tgz",
+      "integrity": "sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/estree": "^1.0.0",
+        "estree-walker": "^2.0.2",
+        "picomatch": "^4.0.2"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      },
+      "peerDependencies": {
+        "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
+      },
+      "peerDependenciesMeta": {
+        "rollup": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@rollup/rollup-win32-x64-msvc": {
+      "version": "4.45.1",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.45.1.tgz",
+      "integrity": "sha512-M/fKi4sasCdM8i0aWJjCSFm2qEnYRR8AMLG2kxp6wD13+tMGA4Z1tVAuHkNRjud5SW2EM3naLuK35w9twvf6aA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ]
+    },
+    "node_modules/@sec-ant/readable-stream": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmmirror.com/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz",
+      "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@sindresorhus/merge-streams": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz",
+      "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/@types/estree": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.8.tgz",
+      "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@types/lodash": {
+      "version": "4.17.20",
+      "resolved": "https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.20.tgz",
+      "integrity": "sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==",
+      "license": "MIT"
+    },
+    "node_modules/@types/lodash-es": {
+      "version": "4.17.12",
+      "resolved": "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz",
+      "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/lodash": "*"
+      }
+    },
+    "node_modules/@types/web-bluetooth": {
+      "version": "0.0.16",
+      "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz",
+      "integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==",
+      "license": "MIT"
+    },
+    "node_modules/@vitejs/plugin-vue": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-6.0.0.tgz",
+      "integrity": "sha512-iAliE72WsdhjzTOp2DtvKThq1VBC4REhwRcaA+zPAAph6I+OQhUXv+Xu2KS7ElxYtb7Zc/3R30Hwv1DxEo7NXQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@rolldown/pluginutils": "1.0.0-beta.19"
+      },
+      "engines": {
+        "node": "^20.19.0 || >=22.12.0"
+      },
+      "peerDependencies": {
+        "vite": "^5.0.0 || ^6.0.0 || ^7.0.0",
+        "vue": "^3.2.25"
+      }
+    },
+    "node_modules/@vue/babel-helper-vue-transform-on": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmmirror.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.4.0.tgz",
+      "integrity": "sha512-mCokbouEQ/ocRce/FpKCRItGo+013tHg7tixg3DUNS+6bmIchPt66012kBMm476vyEIJPafrvOf4E5OYj3shSw==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@vue/babel-plugin-jsx": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmmirror.com/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.4.0.tgz",
+      "integrity": "sha512-9zAHmwgMWlaN6qRKdrg1uKsBKHvnUU+Py+MOCTuYZBoZsopa90Di10QRjB+YPnVss0BZbG/H5XFwJY1fTxJWhA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-module-imports": "^7.25.9",
+        "@babel/helper-plugin-utils": "^7.26.5",
+        "@babel/plugin-syntax-jsx": "^7.25.9",
+        "@babel/template": "^7.26.9",
+        "@babel/traverse": "^7.26.9",
+        "@babel/types": "^7.26.9",
+        "@vue/babel-helper-vue-transform-on": "1.4.0",
+        "@vue/babel-plugin-resolve-type": "1.4.0",
+        "@vue/shared": "^3.5.13"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      },
+      "peerDependenciesMeta": {
+        "@babel/core": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@vue/babel-plugin-resolve-type": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmmirror.com/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.4.0.tgz",
+      "integrity": "sha512-4xqDRRbQQEWHQyjlYSgZsWj44KfiF6D+ktCuXyZ8EnVDYV3pztmXJDf1HveAjUAXxAnR8daCQT51RneWWxtTyQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/code-frame": "^7.26.2",
+        "@babel/helper-module-imports": "^7.25.9",
+        "@babel/helper-plugin-utils": "^7.26.5",
+        "@babel/parser": "^7.26.9",
+        "@vue/compiler-sfc": "^3.5.13"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sxzz"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@vue/compiler-core": {
+      "version": "3.5.17",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.17.tgz",
+      "integrity": "sha512-Xe+AittLbAyV0pabcN7cP7/BenRBNcteM4aSDCtRvGw0d9OL+HG1u/XHLY/kt1q4fyMeZYXyIYrsHuPSiDPosA==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/parser": "^7.27.5",
+        "@vue/shared": "3.5.17",
+        "entities": "^4.5.0",
+        "estree-walker": "^2.0.2",
+        "source-map-js": "^1.2.1"
+      }
+    },
+    "node_modules/@vue/compiler-dom": {
+      "version": "3.5.17",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.17.tgz",
+      "integrity": "sha512-+2UgfLKoaNLhgfhV5Ihnk6wB4ljyW1/7wUIog2puUqajiC29Lp5R/IKDdkebh9jTbTogTbsgB+OY9cEWzG95JQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/compiler-core": "3.5.17",
+        "@vue/shared": "3.5.17"
+      }
+    },
+    "node_modules/@vue/compiler-sfc": {
+      "version": "3.5.17",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.17.tgz",
+      "integrity": "sha512-rQQxbRJMgTqwRugtjw0cnyQv9cP4/4BxWfTdRBkqsTfLOHWykLzbOc3C4GGzAmdMDxhzU/1Ija5bTjMVrddqww==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/parser": "^7.27.5",
+        "@vue/compiler-core": "3.5.17",
+        "@vue/compiler-dom": "3.5.17",
+        "@vue/compiler-ssr": "3.5.17",
+        "@vue/shared": "3.5.17",
+        "estree-walker": "^2.0.2",
+        "magic-string": "^0.30.17",
+        "postcss": "^8.5.6",
+        "source-map-js": "^1.2.1"
+      }
+    },
+    "node_modules/@vue/compiler-ssr": {
+      "version": "3.5.17",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.17.tgz",
+      "integrity": "sha512-hkDbA0Q20ZzGgpj5uZjb9rBzQtIHLS78mMilwrlpWk2Ep37DYntUz0PonQ6kr113vfOEdM+zTBuJDaceNIW0tQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/compiler-dom": "3.5.17",
+        "@vue/shared": "3.5.17"
+      }
+    },
+    "node_modules/@vue/devtools-api": {
+      "version": "6.6.4",
+      "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.6.4.tgz",
+      "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==",
+      "license": "MIT"
+    },
+    "node_modules/@vue/devtools-core": {
+      "version": "7.7.7",
+      "resolved": "https://registry.npmmirror.com/@vue/devtools-core/-/devtools-core-7.7.7.tgz",
+      "integrity": "sha512-9z9TLbfC+AjAi1PQyWX+OErjIaJmdFlbDHcD+cAMYKY6Bh5VlsAtCeGyRMrXwIlMEQPukvnWt3gZBLwTAIMKzQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@vue/devtools-kit": "^7.7.7",
+        "@vue/devtools-shared": "^7.7.7",
+        "mitt": "^3.0.1",
+        "nanoid": "^5.1.0",
+        "pathe": "^2.0.3",
+        "vite-hot-client": "^2.0.4"
+      },
+      "peerDependencies": {
+        "vue": "^3.0.0"
+      }
+    },
+    "node_modules/@vue/devtools-core/node_modules/nanoid": {
+      "version": "5.1.5",
+      "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-5.1.5.tgz",
+      "integrity": "sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "MIT",
+      "bin": {
+        "nanoid": "bin/nanoid.js"
+      },
+      "engines": {
+        "node": "^18 || >=20"
+      }
+    },
+    "node_modules/@vue/devtools-kit": {
+      "version": "7.7.7",
+      "resolved": "https://registry.npmmirror.com/@vue/devtools-kit/-/devtools-kit-7.7.7.tgz",
+      "integrity": "sha512-wgoZtxcTta65cnZ1Q6MbAfePVFxfM+gq0saaeytoph7nEa7yMXoi6sCPy4ufO111B9msnw0VOWjPEFCXuAKRHA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@vue/devtools-shared": "^7.7.7",
+        "birpc": "^2.3.0",
+        "hookable": "^5.5.3",
+        "mitt": "^3.0.1",
+        "perfect-debounce": "^1.0.0",
+        "speakingurl": "^14.0.1",
+        "superjson": "^2.2.2"
+      }
+    },
+    "node_modules/@vue/devtools-shared": {
+      "version": "7.7.7",
+      "resolved": "https://registry.npmmirror.com/@vue/devtools-shared/-/devtools-shared-7.7.7.tgz",
+      "integrity": "sha512-+udSj47aRl5aKb0memBvcUG9koarqnxNM5yjuREvqwK6T3ap4mn3Zqqc17QrBFTqSMjr3HK1cvStEZpMDpfdyw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "rfdc": "^1.4.1"
+      }
+    },
+    "node_modules/@vue/reactivity": {
+      "version": "3.5.17",
+      "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.17.tgz",
+      "integrity": "sha512-l/rmw2STIscWi7SNJp708FK4Kofs97zc/5aEPQh4bOsReD/8ICuBcEmS7KGwDj5ODQLYWVN2lNibKJL1z5b+Lw==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/shared": "3.5.17"
+      }
+    },
+    "node_modules/@vue/runtime-core": {
+      "version": "3.5.17",
+      "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.17.tgz",
+      "integrity": "sha512-QQLXa20dHg1R0ri4bjKeGFKEkJA7MMBxrKo2G+gJikmumRS7PTD4BOU9FKrDQWMKowz7frJJGqBffYMgQYS96Q==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/reactivity": "3.5.17",
+        "@vue/shared": "3.5.17"
+      }
+    },
+    "node_modules/@vue/runtime-dom": {
+      "version": "3.5.17",
+      "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.17.tgz",
+      "integrity": "sha512-8El0M60TcwZ1QMz4/os2MdlQECgGoVHPuLnQBU3m9h3gdNRW9xRmI8iLS4t/22OQlOE6aJvNNlBiCzPHur4H9g==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/reactivity": "3.5.17",
+        "@vue/runtime-core": "3.5.17",
+        "@vue/shared": "3.5.17",
+        "csstype": "^3.1.3"
+      }
+    },
+    "node_modules/@vue/server-renderer": {
+      "version": "3.5.17",
+      "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.17.tgz",
+      "integrity": "sha512-BOHhm8HalujY6lmC3DbqF6uXN/K00uWiEeF22LfEsm9Q93XeJ/plHTepGwf6tqFcF7GA5oGSSAAUock3VvzaCA==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/compiler-ssr": "3.5.17",
+        "@vue/shared": "3.5.17"
+      },
+      "peerDependencies": {
+        "vue": "3.5.17"
+      }
+    },
+    "node_modules/@vue/shared": {
+      "version": "3.5.17",
+      "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.17.tgz",
+      "integrity": "sha512-CabR+UN630VnsJO/jHWYBC1YVXyMq94KKp6iF5MQgZJs5I8cmjw6oVMO1oDbtBkENSHSSn/UadWlW/OAgdmKrg==",
+      "license": "MIT"
+    },
+    "node_modules/@vueuse/core": {
+      "version": "9.13.0",
+      "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-9.13.0.tgz",
+      "integrity": "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/web-bluetooth": "^0.0.16",
+        "@vueuse/metadata": "9.13.0",
+        "@vueuse/shared": "9.13.0",
+        "vue-demi": "*"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
+      }
+    },
+    "node_modules/@vueuse/metadata": {
+      "version": "9.13.0",
+      "resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.13.0.tgz",
+      "integrity": "sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==",
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
+      }
+    },
+    "node_modules/@vueuse/shared": {
+      "version": "9.13.0",
+      "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.13.0.tgz",
+      "integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==",
+      "license": "MIT",
+      "dependencies": {
+        "vue-demi": "*"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
+      }
+    },
+    "node_modules/async-validator": {
+      "version": "4.2.5",
+      "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz",
+      "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==",
+      "license": "MIT"
+    },
+    "node_modules/asynckit": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz",
+      "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
+      "license": "MIT"
+    },
+    "node_modules/axios": {
+      "version": "1.10.0",
+      "resolved": "https://registry.npmmirror.com/axios/-/axios-1.10.0.tgz",
+      "integrity": "sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==",
+      "license": "MIT",
+      "dependencies": {
+        "follow-redirects": "^1.15.6",
+        "form-data": "^4.0.0",
+        "proxy-from-env": "^1.1.0"
+      }
+    },
+    "node_modules/birpc": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmmirror.com/birpc/-/birpc-2.5.0.tgz",
+      "integrity": "sha512-VSWO/W6nNQdyP520F1mhf+Lc2f8pjGQOtoHHm7Ze8Go1kX7akpVIrtTa0fn+HB0QJEDVacl6aO08YE0PgXfdnQ==",
+      "dev": true,
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
+      }
+    },
+    "node_modules/browserslist": {
+      "version": "4.25.1",
+      "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.25.1.tgz",
+      "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/browserslist"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/browserslist"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "caniuse-lite": "^1.0.30001726",
+        "electron-to-chromium": "^1.5.173",
+        "node-releases": "^2.0.19",
+        "update-browserslist-db": "^1.1.3"
+      },
+      "bin": {
+        "browserslist": "cli.js"
+      },
+      "engines": {
+        "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+      }
+    },
+    "node_modules/bundle-name": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmmirror.com/bundle-name/-/bundle-name-4.1.0.tgz",
+      "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "run-applescript": "^7.0.0"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/call-bind-apply-helpers": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
+      "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
+      "license": "MIT",
+      "dependencies": {
+        "es-errors": "^1.3.0",
+        "function-bind": "^1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/caniuse-lite": {
+      "version": "1.0.30001727",
+      "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001727.tgz",
+      "integrity": "sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/browserslist"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "CC-BY-4.0"
+    },
+    "node_modules/combined-stream": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz",
+      "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+      "license": "MIT",
+      "dependencies": {
+        "delayed-stream": "~1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/convert-source-map": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-2.0.0.tgz",
+      "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/copy-anything": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmmirror.com/copy-anything/-/copy-anything-2.0.6.tgz",
+      "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-what": "^3.14.1"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/mesqueeb"
+      }
+    },
+    "node_modules/cross-spawn": {
+      "version": "7.0.6",
+      "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.6.tgz",
+      "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "path-key": "^3.1.0",
+        "shebang-command": "^2.0.0",
+        "which": "^2.0.1"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/csstype": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz",
+      "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
+      "license": "MIT"
+    },
+    "node_modules/dayjs": {
+      "version": "1.11.13",
+      "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz",
+      "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==",
+      "license": "MIT"
+    },
+    "node_modules/debug": {
+      "version": "4.4.1",
+      "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.1.tgz",
+      "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ms": "^2.1.3"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "peerDependenciesMeta": {
+        "supports-color": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/default-browser": {
+      "version": "5.2.1",
+      "resolved": "https://registry.npmmirror.com/default-browser/-/default-browser-5.2.1.tgz",
+      "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "bundle-name": "^4.1.0",
+        "default-browser-id": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/default-browser-id": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmmirror.com/default-browser-id/-/default-browser-id-5.0.0.tgz",
+      "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/define-lazy-prop": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz",
+      "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/delayed-stream": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz",
+      "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/dunder-proto": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz",
+      "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+      "license": "MIT",
+      "dependencies": {
+        "call-bind-apply-helpers": "^1.0.1",
+        "es-errors": "^1.3.0",
+        "gopd": "^1.2.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/echarts": {
+      "version": "5.6.0",
+      "resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.6.0.tgz",
+      "integrity": "sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "tslib": "2.3.0",
+        "zrender": "5.6.1"
+      }
+    },
+    "node_modules/electron-to-chromium": {
+      "version": "1.5.185",
+      "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.185.tgz",
+      "integrity": "sha512-dYOZfUk57hSMPePoIQ1fZWl1Fkj+OshhEVuPacNKWzC1efe56OsHY3l/jCfiAgIICOU3VgOIdoq7ahg7r7n6MQ==",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/element-plus": {
+      "version": "2.10.4",
+      "resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.10.4.tgz",
+      "integrity": "sha512-UD4elWHrCnp1xlPhbXmVcaKFLCRaRAY6WWRwemGfGW3ceIjXm9fSYc9RNH3AiOEA6Ds1p9ZvhCs76CR9J8Vd+A==",
+      "license": "MIT",
+      "dependencies": {
+        "@ctrl/tinycolor": "^3.4.1",
+        "@element-plus/icons-vue": "^2.3.1",
+        "@floating-ui/dom": "^1.0.1",
+        "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7",
+        "@types/lodash": "^4.14.182",
+        "@types/lodash-es": "^4.17.6",
+        "@vueuse/core": "^9.1.0",
+        "async-validator": "^4.2.5",
+        "dayjs": "^1.11.13",
+        "escape-html": "^1.0.3",
+        "lodash": "^4.17.21",
+        "lodash-es": "^4.17.21",
+        "lodash-unified": "^1.0.2",
+        "memoize-one": "^6.0.0",
+        "normalize-wheel-es": "^1.2.0"
+      },
+      "peerDependencies": {
+        "vue": "^3.2.0"
+      }
+    },
+    "node_modules/entities": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz",
+      "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=0.12"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/entities?sponsor=1"
+      }
+    },
+    "node_modules/errno": {
+      "version": "0.1.8",
+      "resolved": "https://registry.npmmirror.com/errno/-/errno-0.1.8.tgz",
+      "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==",
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "prr": "~1.0.1"
+      },
+      "bin": {
+        "errno": "cli.js"
+      }
+    },
+    "node_modules/error-stack-parser-es": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmmirror.com/error-stack-parser-es/-/error-stack-parser-es-0.1.5.tgz",
+      "integrity": "sha512-xHku1X40RO+fO8yJ8Wh2f2rZWVjqyhb1zgq1yZ8aZRQkv6OOKhKWRUaht3eSCUbAOBaKIgM+ykwFLE+QUxgGeg==",
+      "dev": true,
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
+      }
+    },
+    "node_modules/es-define-property": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz",
+      "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es-errors": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz",
+      "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es-object-atoms": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
+      "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
+      "license": "MIT",
+      "dependencies": {
+        "es-errors": "^1.3.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es-set-tostringtag": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
+      "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
+      "license": "MIT",
+      "dependencies": {
+        "es-errors": "^1.3.0",
+        "get-intrinsic": "^1.2.6",
+        "has-tostringtag": "^1.0.2",
+        "hasown": "^2.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/esbuild": {
+      "version": "0.25.6",
+      "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.25.6.tgz",
+      "integrity": "sha512-GVuzuUwtdsghE3ocJ9Bs8PNoF13HNQ5TXbEi2AhvVb8xU1Iwt9Fos9FEamfoee+u/TOsn7GUWc04lz46n2bbTg==",
+      "dev": true,
+      "hasInstallScript": true,
+      "license": "MIT",
+      "bin": {
+        "esbuild": "bin/esbuild"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "optionalDependencies": {
+        "@esbuild/aix-ppc64": "0.25.6",
+        "@esbuild/android-arm": "0.25.6",
+        "@esbuild/android-arm64": "0.25.6",
+        "@esbuild/android-x64": "0.25.6",
+        "@esbuild/darwin-arm64": "0.25.6",
+        "@esbuild/darwin-x64": "0.25.6",
+        "@esbuild/freebsd-arm64": "0.25.6",
+        "@esbuild/freebsd-x64": "0.25.6",
+        "@esbuild/linux-arm": "0.25.6",
+        "@esbuild/linux-arm64": "0.25.6",
+        "@esbuild/linux-ia32": "0.25.6",
+        "@esbuild/linux-loong64": "0.25.6",
+        "@esbuild/linux-mips64el": "0.25.6",
+        "@esbuild/linux-ppc64": "0.25.6",
+        "@esbuild/linux-riscv64": "0.25.6",
+        "@esbuild/linux-s390x": "0.25.6",
+        "@esbuild/linux-x64": "0.25.6",
+        "@esbuild/netbsd-arm64": "0.25.6",
+        "@esbuild/netbsd-x64": "0.25.6",
+        "@esbuild/openbsd-arm64": "0.25.6",
+        "@esbuild/openbsd-x64": "0.25.6",
+        "@esbuild/openharmony-arm64": "0.25.6",
+        "@esbuild/sunos-x64": "0.25.6",
+        "@esbuild/win32-arm64": "0.25.6",
+        "@esbuild/win32-ia32": "0.25.6",
+        "@esbuild/win32-x64": "0.25.6"
+      }
+    },
+    "node_modules/escalade": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz",
+      "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/escape-html": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz",
+      "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
+      "license": "MIT"
+    },
+    "node_modules/estree-walker": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz",
+      "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+      "license": "MIT"
+    },
+    "node_modules/execa": {
+      "version": "9.6.0",
+      "resolved": "https://registry.npmmirror.com/execa/-/execa-9.6.0.tgz",
+      "integrity": "sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@sindresorhus/merge-streams": "^4.0.0",
+        "cross-spawn": "^7.0.6",
+        "figures": "^6.1.0",
+        "get-stream": "^9.0.0",
+        "human-signals": "^8.0.1",
+        "is-plain-obj": "^4.1.0",
+        "is-stream": "^4.0.1",
+        "npm-run-path": "^6.0.0",
+        "pretty-ms": "^9.2.0",
+        "signal-exit": "^4.1.0",
+        "strip-final-newline": "^4.0.0",
+        "yoctocolors": "^2.1.1"
+      },
+      "engines": {
+        "node": "^18.19.0 || >=20.5.0"
+      },
+      "funding": {
+        "url": "https://github.com/sindresorhus/execa?sponsor=1"
+      }
+    },
+    "node_modules/fdir": {
+      "version": "6.4.6",
+      "resolved": "https://registry.npmmirror.com/fdir/-/fdir-6.4.6.tgz",
+      "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==",
+      "dev": true,
+      "license": "MIT",
+      "peerDependencies": {
+        "picomatch": "^3 || ^4"
+      },
+      "peerDependenciesMeta": {
+        "picomatch": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/figures": {
+      "version": "6.1.0",
+      "resolved": "https://registry.npmmirror.com/figures/-/figures-6.1.0.tgz",
+      "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-unicode-supported": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/follow-redirects": {
+      "version": "1.15.9",
+      "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.9.tgz",
+      "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==",
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://github.com/sponsors/RubenVerborgh"
+        }
+      ],
+      "license": "MIT",
+      "engines": {
+        "node": ">=4.0"
+      },
+      "peerDependenciesMeta": {
+        "debug": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/form-data": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.3.tgz",
+      "integrity": "sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==",
+      "license": "MIT",
+      "dependencies": {
+        "asynckit": "^0.4.0",
+        "combined-stream": "^1.0.8",
+        "es-set-tostringtag": "^2.1.0",
+        "hasown": "^2.0.2",
+        "mime-types": "^2.1.12"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/fs-extra": {
+      "version": "11.3.0",
+      "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-11.3.0.tgz",
+      "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "graceful-fs": "^4.2.0",
+        "jsonfile": "^6.0.1",
+        "universalify": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=14.14"
+      }
+    },
+    "node_modules/function-bind": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz",
+      "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/gensync": {
+      "version": "1.0.0-beta.2",
+      "resolved": "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz",
+      "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/get-intrinsic": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
+      "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
+      "license": "MIT",
+      "dependencies": {
+        "call-bind-apply-helpers": "^1.0.2",
+        "es-define-property": "^1.0.1",
+        "es-errors": "^1.3.0",
+        "es-object-atoms": "^1.1.1",
+        "function-bind": "^1.1.2",
+        "get-proto": "^1.0.1",
+        "gopd": "^1.2.0",
+        "has-symbols": "^1.1.0",
+        "hasown": "^2.0.2",
+        "math-intrinsics": "^1.1.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/get-proto": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz",
+      "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+      "license": "MIT",
+      "dependencies": {
+        "dunder-proto": "^1.0.1",
+        "es-object-atoms": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/get-stream": {
+      "version": "9.0.1",
+      "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-9.0.1.tgz",
+      "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@sec-ant/readable-stream": "^0.4.1",
+        "is-stream": "^4.0.1"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/gopd": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz",
+      "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/graceful-fs": {
+      "version": "4.2.11",
+      "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz",
+      "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/has-symbols": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz",
+      "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/has-tostringtag": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+      "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+      "license": "MIT",
+      "dependencies": {
+        "has-symbols": "^1.0.3"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/hasown": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz",
+      "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+      "license": "MIT",
+      "dependencies": {
+        "function-bind": "^1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/hookable": {
+      "version": "5.5.3",
+      "resolved": "https://registry.npmmirror.com/hookable/-/hookable-5.5.3.tgz",
+      "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/human-signals": {
+      "version": "8.0.1",
+      "resolved": "https://registry.npmmirror.com/human-signals/-/human-signals-8.0.1.tgz",
+      "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">=18.18.0"
+      }
+    },
+    "node_modules/iconv-lite": {
+      "version": "0.6.3",
+      "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz",
+      "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "safer-buffer": ">= 2.1.2 < 3.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/image-size": {
+      "version": "0.5.5",
+      "resolved": "https://registry.npmmirror.com/image-size/-/image-size-0.5.5.tgz",
+      "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==",
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "bin": {
+        "image-size": "bin/image-size.js"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-docker": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/is-docker/-/is-docker-3.0.0.tgz",
+      "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "is-docker": "cli.js"
+      },
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/is-inside-container": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/is-inside-container/-/is-inside-container-1.0.0.tgz",
+      "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-docker": "^3.0.0"
+      },
+      "bin": {
+        "is-inside-container": "cli.js"
+      },
+      "engines": {
+        "node": ">=14.16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/is-plain-obj": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
+      "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/is-stream": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-4.0.1.tgz",
+      "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/is-unicode-supported": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz",
+      "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/is-what": {
+      "version": "3.14.1",
+      "resolved": "https://registry.npmmirror.com/is-what/-/is-what-3.14.1.tgz",
+      "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/is-wsl": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-3.1.0.tgz",
+      "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-inside-container": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/isexe": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz",
+      "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/js-tokens": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz",
+      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/jsesc": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-3.1.0.tgz",
+      "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "jsesc": "bin/jsesc"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/json5": {
+      "version": "2.2.3",
+      "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz",
+      "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "json5": "lib/cli.js"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/jsonfile": {
+      "version": "6.1.0",
+      "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz",
+      "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "universalify": "^2.0.0"
+      },
+      "optionalDependencies": {
+        "graceful-fs": "^4.1.6"
+      }
+    },
+    "node_modules/kolorist": {
+      "version": "1.8.0",
+      "resolved": "https://registry.npmmirror.com/kolorist/-/kolorist-1.8.0.tgz",
+      "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/less": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmmirror.com/less/-/less-4.3.0.tgz",
+      "integrity": "sha512-X9RyH9fvemArzfdP8Pi3irr7lor2Ok4rOttDXBhlwDg+wKQsXOXgHWduAJE1EsF7JJx0w0bcO6BC6tCKKYnXKA==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "copy-anything": "^2.0.1",
+        "parse-node-version": "^1.0.1",
+        "tslib": "^2.3.0"
+      },
+      "bin": {
+        "lessc": "bin/lessc"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "optionalDependencies": {
+        "errno": "^0.1.1",
+        "graceful-fs": "^4.1.2",
+        "image-size": "~0.5.0",
+        "make-dir": "^2.1.0",
+        "mime": "^1.4.1",
+        "needle": "^3.1.0",
+        "source-map": "~0.6.0"
+      }
+    },
+    "node_modules/less/node_modules/tslib": {
+      "version": "2.8.1",
+      "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz",
+      "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+      "dev": true,
+      "license": "0BSD"
+    },
+    "node_modules/lodash": {
+      "version": "4.17.21",
+      "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz",
+      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+      "license": "MIT"
+    },
+    "node_modules/lodash-es": {
+      "version": "4.17.21",
+      "resolved": "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz",
+      "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==",
+      "license": "MIT"
+    },
+    "node_modules/lodash-unified": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/lodash-unified/-/lodash-unified-1.0.3.tgz",
+      "integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==",
+      "license": "MIT",
+      "peerDependencies": {
+        "@types/lodash-es": "*",
+        "lodash": "*",
+        "lodash-es": "*"
+      }
+    },
+    "node_modules/lru-cache": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz",
+      "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "yallist": "^3.0.2"
+      }
+    },
+    "node_modules/magic-string": {
+      "version": "0.30.17",
+      "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.17.tgz",
+      "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==",
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/sourcemap-codec": "^1.5.0"
+      }
+    },
+    "node_modules/make-dir": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz",
+      "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "pify": "^4.0.1",
+        "semver": "^5.6.0"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/make-dir/node_modules/semver": {
+      "version": "5.7.2",
+      "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz",
+      "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+      "dev": true,
+      "license": "ISC",
+      "optional": true,
+      "bin": {
+        "semver": "bin/semver"
+      }
+    },
+    "node_modules/math-intrinsics": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+      "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/memoize-one": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz",
+      "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==",
+      "license": "MIT"
+    },
+    "node_modules/mime": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz",
+      "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "bin": {
+        "mime": "cli.js"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/mime-db": {
+      "version": "1.52.0",
+      "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz",
+      "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/mime-types": {
+      "version": "2.1.35",
+      "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz",
+      "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+      "license": "MIT",
+      "dependencies": {
+        "mime-db": "1.52.0"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/mitt": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmmirror.com/mitt/-/mitt-3.0.1.tgz",
+      "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/moment": {
+      "version": "2.30.1",
+      "resolved": "https://registry.npmmirror.com/moment/-/moment-2.30.1.tgz",
+      "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==",
+      "license": "MIT",
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/mrmime": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/mrmime/-/mrmime-2.0.1.tgz",
+      "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/ms": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz",
+      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/nanoid": {
+      "version": "3.3.11",
+      "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.11.tgz",
+      "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "MIT",
+      "bin": {
+        "nanoid": "bin/nanoid.cjs"
+      },
+      "engines": {
+        "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+      }
+    },
+    "node_modules/needle": {
+      "version": "3.3.1",
+      "resolved": "https://registry.npmmirror.com/needle/-/needle-3.3.1.tgz",
+      "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==",
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "iconv-lite": "^0.6.3",
+        "sax": "^1.2.4"
+      },
+      "bin": {
+        "needle": "bin/needle"
+      },
+      "engines": {
+        "node": ">= 4.4.x"
+      }
+    },
+    "node_modules/node-releases": {
+      "version": "2.0.19",
+      "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.19.tgz",
+      "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/normalize-wheel-es": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz",
+      "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==",
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/npm-run-path": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-6.0.0.tgz",
+      "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "path-key": "^4.0.0",
+        "unicorn-magic": "^0.3.0"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/npm-run-path/node_modules/path-key": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/path-key/-/path-key-4.0.0.tgz",
+      "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/open": {
+      "version": "10.2.0",
+      "resolved": "https://registry.npmmirror.com/open/-/open-10.2.0.tgz",
+      "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "default-browser": "^5.2.1",
+        "define-lazy-prop": "^3.0.0",
+        "is-inside-container": "^1.0.0",
+        "wsl-utils": "^0.1.0"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/parse-ms": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/parse-ms/-/parse-ms-4.0.0.tgz",
+      "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/parse-node-version": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/parse-node-version/-/parse-node-version-1.0.1.tgz",
+      "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.10"
+      }
+    },
+    "node_modules/path-key": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz",
+      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/pathe": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmmirror.com/pathe/-/pathe-2.0.3.tgz",
+      "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/perfect-debounce": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/perfect-debounce/-/perfect-debounce-1.0.0.tgz",
+      "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/picocolors": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz",
+      "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+      "license": "ISC"
+    },
+    "node_modules/picomatch": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.3.tgz",
+      "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/jonschlinkert"
+      }
+    },
+    "node_modules/pify": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz",
+      "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/postcss": {
+      "version": "8.5.6",
+      "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.6.tgz",
+      "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/postcss/"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/postcss"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "nanoid": "^3.3.11",
+        "picocolors": "^1.1.1",
+        "source-map-js": "^1.2.1"
+      },
+      "engines": {
+        "node": "^10 || ^12 || >=14"
+      }
+    },
+    "node_modules/prettier": {
+      "version": "3.5.3",
+      "resolved": "https://registry.npmmirror.com/prettier/-/prettier-3.5.3.tgz",
+      "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "prettier": "bin/prettier.cjs"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/prettier/prettier?sponsor=1"
+      }
+    },
+    "node_modules/pretty-ms": {
+      "version": "9.2.0",
+      "resolved": "https://registry.npmmirror.com/pretty-ms/-/pretty-ms-9.2.0.tgz",
+      "integrity": "sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "parse-ms": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/proxy-from-env": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+      "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
+      "license": "MIT"
+    },
+    "node_modules/prr": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/prr/-/prr-1.0.1.tgz",
+      "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==",
+      "dev": true,
+      "license": "MIT",
+      "optional": true
+    },
+    "node_modules/rfdc": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmmirror.com/rfdc/-/rfdc-1.4.1.tgz",
+      "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/rollup": {
+      "version": "4.45.1",
+      "resolved": "https://registry.npmmirror.com/rollup/-/rollup-4.45.1.tgz",
+      "integrity": "sha512-4iya7Jb76fVpQyLoiVpzUrsjQ12r3dM7fIVz+4NwoYvZOShknRmiv+iu9CClZml5ZLGb0XMcYLutK6w9tgxHDw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/estree": "1.0.8"
+      },
+      "bin": {
+        "rollup": "dist/bin/rollup"
+      },
+      "engines": {
+        "node": ">=18.0.0",
+        "npm": ">=8.0.0"
+      },
+      "optionalDependencies": {
+        "@rollup/rollup-android-arm-eabi": "4.45.1",
+        "@rollup/rollup-android-arm64": "4.45.1",
+        "@rollup/rollup-darwin-arm64": "4.45.1",
+        "@rollup/rollup-darwin-x64": "4.45.1",
+        "@rollup/rollup-freebsd-arm64": "4.45.1",
+        "@rollup/rollup-freebsd-x64": "4.45.1",
+        "@rollup/rollup-linux-arm-gnueabihf": "4.45.1",
+        "@rollup/rollup-linux-arm-musleabihf": "4.45.1",
+        "@rollup/rollup-linux-arm64-gnu": "4.45.1",
+        "@rollup/rollup-linux-arm64-musl": "4.45.1",
+        "@rollup/rollup-linux-loongarch64-gnu": "4.45.1",
+        "@rollup/rollup-linux-powerpc64le-gnu": "4.45.1",
+        "@rollup/rollup-linux-riscv64-gnu": "4.45.1",
+        "@rollup/rollup-linux-riscv64-musl": "4.45.1",
+        "@rollup/rollup-linux-s390x-gnu": "4.45.1",
+        "@rollup/rollup-linux-x64-gnu": "4.45.1",
+        "@rollup/rollup-linux-x64-musl": "4.45.1",
+        "@rollup/rollup-win32-arm64-msvc": "4.45.1",
+        "@rollup/rollup-win32-ia32-msvc": "4.45.1",
+        "@rollup/rollup-win32-x64-msvc": "4.45.1",
+        "fsevents": "~2.3.2"
+      }
+    },
+    "node_modules/run-applescript": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmmirror.com/run-applescript/-/run-applescript-7.0.0.tgz",
+      "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/safer-buffer": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz",
+      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+      "dev": true,
+      "license": "MIT",
+      "optional": true
+    },
+    "node_modules/sax": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmmirror.com/sax/-/sax-1.4.1.tgz",
+      "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==",
+      "dev": true,
+      "license": "ISC",
+      "optional": true
+    },
+    "node_modules/semver": {
+      "version": "6.3.1",
+      "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz",
+      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+      "dev": true,
+      "license": "ISC",
+      "bin": {
+        "semver": "bin/semver.js"
+      }
+    },
+    "node_modules/shebang-command": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz",
+      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "shebang-regex": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/shebang-regex": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz",
+      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/signal-exit": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-4.1.0.tgz",
+      "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/sirv": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmmirror.com/sirv/-/sirv-3.0.1.tgz",
+      "integrity": "sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@polka/url": "^1.0.0-next.24",
+        "mrmime": "^2.0.0",
+        "totalist": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/source-map": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz",
+      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "optional": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/source-map-js": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz",
+      "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/speakingurl": {
+      "version": "14.0.1",
+      "resolved": "https://registry.npmmirror.com/speakingurl/-/speakingurl-14.0.1.tgz",
+      "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/strip-final-newline": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-4.0.0.tgz",
+      "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/superjson": {
+      "version": "2.2.2",
+      "resolved": "https://registry.npmmirror.com/superjson/-/superjson-2.2.2.tgz",
+      "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "copy-anything": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=16"
+      }
+    },
+    "node_modules/superjson/node_modules/copy-anything": {
+      "version": "3.0.5",
+      "resolved": "https://registry.npmmirror.com/copy-anything/-/copy-anything-3.0.5.tgz",
+      "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-what": "^4.1.8"
+      },
+      "engines": {
+        "node": ">=12.13"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/mesqueeb"
+      }
+    },
+    "node_modules/superjson/node_modules/is-what": {
+      "version": "4.1.16",
+      "resolved": "https://registry.npmmirror.com/is-what/-/is-what-4.1.16.tgz",
+      "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=12.13"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/mesqueeb"
+      }
+    },
+    "node_modules/tinyglobby": {
+      "version": "0.2.14",
+      "resolved": "https://registry.npmmirror.com/tinyglobby/-/tinyglobby-0.2.14.tgz",
+      "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "fdir": "^6.4.4",
+        "picomatch": "^4.0.2"
+      },
+      "engines": {
+        "node": ">=12.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/SuperchupuDev"
+      }
+    },
+    "node_modules/totalist": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmmirror.com/totalist/-/totalist-3.0.1.tgz",
+      "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/tslib": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz",
+      "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==",
+      "license": "0BSD"
+    },
+    "node_modules/unicorn-magic": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmmirror.com/unicorn-magic/-/unicorn-magic-0.3.0.tgz",
+      "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/universalify": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz",
+      "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 10.0.0"
+      }
+    },
+    "node_modules/update-browserslist-db": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz",
+      "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/browserslist"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/browserslist"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "escalade": "^3.2.0",
+        "picocolors": "^1.1.1"
+      },
+      "bin": {
+        "update-browserslist-db": "cli.js"
+      },
+      "peerDependencies": {
+        "browserslist": ">= 4.21.0"
+      }
+    },
+    "node_modules/vite": {
+      "version": "7.0.4",
+      "resolved": "https://registry.npmmirror.com/vite/-/vite-7.0.4.tgz",
+      "integrity": "sha512-SkaSguuS7nnmV7mfJ8l81JGBFV7Gvzp8IzgE8A8t23+AxuNX61Q5H1Tpz5efduSN7NHC8nQXD3sKQKZAu5mNEA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "esbuild": "^0.25.0",
+        "fdir": "^6.4.6",
+        "picomatch": "^4.0.2",
+        "postcss": "^8.5.6",
+        "rollup": "^4.40.0",
+        "tinyglobby": "^0.2.14"
+      },
+      "bin": {
+        "vite": "bin/vite.js"
+      },
+      "engines": {
+        "node": "^20.19.0 || >=22.12.0"
+      },
+      "funding": {
+        "url": "https://github.com/vitejs/vite?sponsor=1"
+      },
+      "optionalDependencies": {
+        "fsevents": "~2.3.3"
+      },
+      "peerDependencies": {
+        "@types/node": "^20.19.0 || >=22.12.0",
+        "jiti": ">=1.21.0",
+        "less": "^4.0.0",
+        "lightningcss": "^1.21.0",
+        "sass": "^1.70.0",
+        "sass-embedded": "^1.70.0",
+        "stylus": ">=0.54.8",
+        "sugarss": "^5.0.0",
+        "terser": "^5.16.0",
+        "tsx": "^4.8.1",
+        "yaml": "^2.4.2"
+      },
+      "peerDependenciesMeta": {
+        "@types/node": {
+          "optional": true
+        },
+        "jiti": {
+          "optional": true
+        },
+        "less": {
+          "optional": true
+        },
+        "lightningcss": {
+          "optional": true
+        },
+        "sass": {
+          "optional": true
+        },
+        "sass-embedded": {
+          "optional": true
+        },
+        "stylus": {
+          "optional": true
+        },
+        "sugarss": {
+          "optional": true
+        },
+        "terser": {
+          "optional": true
+        },
+        "tsx": {
+          "optional": true
+        },
+        "yaml": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/vite-hot-client": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/vite-hot-client/-/vite-hot-client-2.1.0.tgz",
+      "integrity": "sha512-7SpgZmU7R+dDnSmvXE1mfDtnHLHQSisdySVR7lO8ceAXvM0otZeuQQ6C8LrS5d/aYyP/QZ0hI0L+dIPrm4YlFQ==",
+      "dev": true,
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
+      },
+      "peerDependencies": {
+        "vite": "^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0"
+      }
+    },
+    "node_modules/vite-plugin-inspect": {
+      "version": "0.8.9",
+      "resolved": "https://registry.npmmirror.com/vite-plugin-inspect/-/vite-plugin-inspect-0.8.9.tgz",
+      "integrity": "sha512-22/8qn+LYonzibb1VeFZmISdVao5kC22jmEKm24vfFE8siEn47EpVcCLYMv6iKOYMJfjSvSJfueOwcFCkUnV3A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@antfu/utils": "^0.7.10",
+        "@rollup/pluginutils": "^5.1.3",
+        "debug": "^4.3.7",
+        "error-stack-parser-es": "^0.1.5",
+        "fs-extra": "^11.2.0",
+        "open": "^10.1.0",
+        "perfect-debounce": "^1.0.0",
+        "picocolors": "^1.1.1",
+        "sirv": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
+      },
+      "peerDependencies": {
+        "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.1"
+      },
+      "peerDependenciesMeta": {
+        "@nuxt/kit": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/vite-plugin-vue-devtools": {
+      "version": "7.7.7",
+      "resolved": "https://registry.npmmirror.com/vite-plugin-vue-devtools/-/vite-plugin-vue-devtools-7.7.7.tgz",
+      "integrity": "sha512-d0fIh3wRcgSlr4Vz7bAk4va1MkdqhQgj9ANE/rBhsAjOnRfTLs2ocjFMvSUOsv6SRRXU9G+VM7yMgqDb6yI4iQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@vue/devtools-core": "^7.7.7",
+        "@vue/devtools-kit": "^7.7.7",
+        "@vue/devtools-shared": "^7.7.7",
+        "execa": "^9.5.2",
+        "sirv": "^3.0.1",
+        "vite-plugin-inspect": "0.8.9",
+        "vite-plugin-vue-inspector": "^5.3.1"
+      },
+      "engines": {
+        "node": ">=v14.21.3"
+      },
+      "peerDependencies": {
+        "vite": "^3.1.0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0"
+      }
+    },
+    "node_modules/vite-plugin-vue-inspector": {
+      "version": "5.3.2",
+      "resolved": "https://registry.npmmirror.com/vite-plugin-vue-inspector/-/vite-plugin-vue-inspector-5.3.2.tgz",
+      "integrity": "sha512-YvEKooQcSiBTAs0DoYLfefNja9bLgkFM7NI2b07bE2SruuvX0MEa9cMaxjKVMkeCp5Nz9FRIdcN1rOdFVBeL6Q==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/core": "^7.23.0",
+        "@babel/plugin-proposal-decorators": "^7.23.0",
+        "@babel/plugin-syntax-import-attributes": "^7.22.5",
+        "@babel/plugin-syntax-import-meta": "^7.10.4",
+        "@babel/plugin-transform-typescript": "^7.22.15",
+        "@vue/babel-plugin-jsx": "^1.1.5",
+        "@vue/compiler-dom": "^3.3.4",
+        "kolorist": "^1.8.0",
+        "magic-string": "^0.30.4"
+      },
+      "peerDependencies": {
+        "vite": "^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0"
+      }
+    },
+    "node_modules/vue": {
+      "version": "3.5.17",
+      "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.17.tgz",
+      "integrity": "sha512-LbHV3xPN9BeljML+Xctq4lbz2lVHCR6DtbpTf5XIO6gugpXUN49j2QQPcMj086r9+AkJ0FfUT8xjulKKBkkr9g==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/compiler-dom": "3.5.17",
+        "@vue/compiler-sfc": "3.5.17",
+        "@vue/runtime-dom": "3.5.17",
+        "@vue/server-renderer": "3.5.17",
+        "@vue/shared": "3.5.17"
+      },
+      "peerDependencies": {
+        "typescript": "*"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/vue-demi": {
+      "version": "0.14.10",
+      "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz",
+      "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",
+      "hasInstallScript": true,
+      "license": "MIT",
+      "bin": {
+        "vue-demi-fix": "bin/vue-demi-fix.js",
+        "vue-demi-switch": "bin/vue-demi-switch.js"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
+      },
+      "peerDependencies": {
+        "@vue/composition-api": "^1.0.0-rc.1",
+        "vue": "^3.0.0-0 || ^2.6.0"
+      },
+      "peerDependenciesMeta": {
+        "@vue/composition-api": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/vue-router": {
+      "version": "4.5.1",
+      "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.5.1.tgz",
+      "integrity": "sha512-ogAF3P97NPm8fJsE4by9dwSYtDwXIY1nFY9T6DyQnGHd1E2Da94w9JIolpe42LJGIl0DwOHBi8TcRPlPGwbTtw==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/devtools-api": "^6.6.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/posva"
+      },
+      "peerDependencies": {
+        "vue": "^3.2.0"
+      }
+    },
+    "node_modules/vue3-marquee": {
+      "version": "4.2.2",
+      "resolved": "https://registry.npmmirror.com/vue3-marquee/-/vue3-marquee-4.2.2.tgz",
+      "integrity": "sha512-FeFvGUVInKfFilXFcnl8sDRBJBZCZSNLlQDquJErB9db6W2xICRVqbRV/jtdzsEP0rftarLQhx9MeEAU0+TPuQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
+      "peerDependencies": {
+        "vue": "^3.2"
+      }
+    },
+    "node_modules/vue3-seamless-scroll": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmmirror.com/vue3-seamless-scroll/-/vue3-seamless-scroll-3.0.2.tgz",
+      "integrity": "sha512-LpKoL1ht71MASabUBsoSqbhLqcuKSrD+u01dgHac+/cthPAShKvcdM7dSGtaxjVntSFqdeViqJssjcwy/KqRSA==",
+      "license": "MIT",
+      "dependencies": {
+        "element-plus": "^2.9.3"
+      }
+    },
+    "node_modules/which": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz",
+      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "isexe": "^2.0.0"
+      },
+      "bin": {
+        "node-which": "bin/node-which"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/wsl-utils": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmmirror.com/wsl-utils/-/wsl-utils-0.1.0.tgz",
+      "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-wsl": "^3.1.0"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/yallist": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz",
+      "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/yoctocolors": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/yoctocolors/-/yoctocolors-2.1.1.tgz",
+      "integrity": "sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/zrender": {
+      "version": "5.6.1",
+      "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.6.1.tgz",
+      "integrity": "sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==",
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "tslib": "2.3.0"
+      }
+    }
+  }
+}

+ 28 - 0
package.json

@@ -0,0 +1,28 @@
+{
+  "name": "vue3",
+  "version": "0.0.0",
+  "private": true,
+  "type": "module",
+  "scripts": {
+    "dev": "vite",
+    "build": "vite build",
+    "preview": "vite preview",
+    "format": "prettier --write src/"
+  },
+  "dependencies": {
+    "axios": "^1.10.0",
+    "echarts": "^5.6.0",
+    "moment": "^2.30.1",
+    "vue": "^3.5.17",
+    "vue-router": "^4.5.1",
+    "vue3-marquee": "^4.2.2",
+    "vue3-seamless-scroll": "^3.0.2"
+  },
+  "devDependencies": {
+    "@vitejs/plugin-vue": "^6.0.0",
+    "less": "^4.3.0",
+    "prettier": "3.5.3",
+    "vite": "^7.0.0",
+    "vite-plugin-vue-devtools": "^7.7.7"
+  }
+}

BIN
public/favicon.ico


+ 73 - 0
public/public.json

@@ -0,0 +1,73 @@
+{
+    "api1": "https://saas.sckaiwu.cn/wfatnLZJFkYyDRte",
+    "time": 10,
+    "time1": 300,
+    "taskList":{
+        "url": "https://saas.sckaiwu.cn/wfatnLZJFkYyDRte/bigscreen/logistics/task",
+        "name": "运单简要"
+    },
+    "totalTasks":{
+        "url": "https://saas.sckaiwu.cn/wfatnLZJFkYyDRte/bigscreen/logistics/total?type=total_tasks",
+        "name": "累计运单"
+    },
+    "totalWeight":{
+        "url": "https://saas.sckaiwu.cn/wfatnLZJFkYyDRte/bigscreen/logistics/total?type=total_weight",
+        "name": "累计装载"
+    },
+    "totalRunnings":{
+        "url": "https://saas.sckaiwu.cn/wfatnLZJFkYyDRte/bigscreen/logistics/total?type=total_running",
+        "name": "运行中"
+    },
+    "totalEntry":{
+        "url": "https://saas.sckaiwu.cn/wfatnLZJFkYyDRte/bigscreen/logistics/total?type=wait_entry",
+        "name": "等待进场"
+    },
+    "running":{
+        "url": "https://saas.sckaiwu.cn/wfatnLZJFkYyDRte/bigscreen/logistics/total?type=running",
+        "name": "配送中"
+    },
+    "order":{
+        "url": "https://saas.sckaiwu.cn/wfatnLZJFkYyDRte/bigscreen/logistics/order",
+        "name": "订单"
+    },
+    "todayTasks":{
+        "url": "https://saas.sckaiwu.cn/wfatnLZJFkYyDRte/bigscreen/logistics/total?type=today_tasks",
+        "name": "今日运单"
+    },
+    "todayWeight":{
+        "url": "https://saas.sckaiwu.cn/wfatnLZJFkYyDRte/bigscreen/logistics/total?type=today_weight",
+        "name": "今日装载"
+    },
+    "customerTask":{
+        "url": "https://saas.sckaiwu.cn/wfatnLZJFkYyDRte/bigscreen/logistics/chart?type=customer_task",
+        "name": "车次排行"
+    },
+    "taskTable":{
+        "url": "https://saas.sckaiwu.cn/wfatnLZJFkYyDRte/bigscreen/logistics/chart?type=task_table",
+        "name": "运力车次趋势分析"
+    },
+    "truckRegister":{
+        "url": "https://saas.sckaiwu.cn/wfatnLZJFkYyDRte/bigscreen/logistics/chart?type=truck_register",
+        "name": "车辆入驻统计"
+    },
+    "newTruck":{
+        "url": "https://saas.sckaiwu.cn/wfatnLZJFkYyDRte/bigscreen/logistics/total?type=new_truck_ore",
+        "name": "新能源车辆"
+    },
+    "truckH2":{
+        "url": "https://saas.sckaiwu.cn/wfatnLZJFkYyDRte/bigscreen/logistics/total?type=truck_h2",
+        "name": "氢能源车辆"
+    },
+    "truckOre":{
+        "url": "https://saas.sckaiwu.cn/wfatnLZJFkYyDRte/bigscreen/logistics/total?type=truck_ore",
+        "name": "传统能源车辆"
+    },
+    "runningTruckType":{
+        "url": "https://saas.sckaiwu.cn/wfatnLZJFkYyDRte/bigscreen/logistics/total?type=running_truck_type",
+        "name": "运行中车辆分布:"
+    },
+    "registerTruckOption":{
+        "url": "https://saas.sckaiwu.cn/wfatnLZJFkYyDRte/bigscreen/logistics/total?type=register_truck",
+        "name": "入住车型分布图"
+    }
+}

+ 85 - 0
src/App.vue

@@ -0,0 +1,85 @@
+<script>
+export default {
+    data() {
+        return {
+            isRouterAlive: true
+        };
+    },
+    methods: {
+        //   inject: ['reload'],   在页面中注入此方法,  使用this.reload() 达到F5的效果
+        reload() {
+            this.isRouterAlive = false;
+            this.$nextTick(function () {
+                this.isRouterAlive = true;
+            });
+        }
+    },
+    provide() {
+        return {
+            reload: this.reload
+        };
+    },
+    mounted() {
+        const screenWidth = window.innerWidth
+        let bodyStyle = document.body.style
+        let appStyle = document.getElementById('app').style;
+        if (document.documentElement.clientWidth / document.documentElement.clientHeight < 4224 / 1152) {
+            appStyle.width = `2048px`
+            bodyStyle.transform = `scale(${screenWidth / 2048})`
+        } else {
+            appStyle.width = `4224px`
+            bodyStyle.transform = `scale(${screenWidth / 4224})`
+        }
+        window.addEventListener('resize', () => {
+            const screenWidth = window.innerWidth
+            let bodyStyle = document.body.style
+            let appStyle = document.getElementById('app').style;
+            if (document.documentElement.clientWidth / document.documentElement.clientHeight < 4224 / 1152) {
+                appStyle.width = `2048px`
+                bodyStyle.transform = `scale(${screenWidth / 2048})`
+            } else {
+                appStyle.width = `4224px`
+                bodyStyle.transform = `scale(${screenWidth / 4224})`
+            }
+        })
+
+    },
+    beforeMount() {
+
+    }
+};
+</script>
+
+<template>
+    <div id="app">
+        <router-view v-if="isRouterAlive"></router-view>
+    </div>
+</template>
+
+<style lang="less">
+
+.amap-logo {
+    display: none !important;
+}
+
+* {
+    margin: 0;
+    padding: 0;
+}
+
+body {
+    // width: 4224px;
+    height: 1152px;
+    position: fixed;
+    left: 0;
+    top: 0;
+    overflow: hidden;
+    background-color: rgb(27, 28, 30);
+    transform-origin: left top;
+}
+
+#app {
+    width: 100%;
+    height: 100%;
+}
+</style>

BIN
src/assets/enterprise.png


BIN
src/assets/font/DSDIGI1.ttf


BIN
src/assets/font/FX-LED Bold.TTF


BIN
src/assets/font/MFLiHei_Noncommercial-Regular.otf


BIN
src/assets/img/TB1UN4PQXXXXXaHXFXXXXXXXXXX-592-131.png


BIN
src/assets/img/bg.png


BIN
src/assets/img/bg_video.mp4


BIN
src/assets/img/chart_bg.png


BIN
src/assets/img/chart_bg1.png


BIN
src/assets/img/chart_bgtit.png


BIN
src/assets/img/charts_bg.png


BIN
src/assets/img/data_bg.png


BIN
src/assets/img/data_bg1.png


BIN
src/assets/img/data_bg2.png


BIN
src/assets/img/data_bg3.png


BIN
src/assets/img/data_title_bg.png


BIN
src/assets/img/icon_car.png


BIN
src/assets/img/icon_car1.png


BIN
src/assets/img/icon_car2.png


BIN
src/assets/img/icon_car3.png


BIN
src/assets/img/icon_car4.png


BIN
src/assets/img/iframe_bg.png


BIN
src/assets/img/num_bg.png


BIN
src/assets/img/step.png


BIN
src/assets/img/stone_1.png


BIN
src/assets/img/stone_2.png


BIN
src/assets/img/title_bg.png


BIN
src/assets/img/top_bg.png


BIN
src/assets/imgs/bgimg.png


BIN
src/assets/imgs/c_car1.png


BIN
src/assets/imgs/c_car2.png


BIN
src/assets/imgs/c_car3.png


BIN
src/assets/imgs/car_1.png


BIN
src/assets/imgs/car_2.png


BIN
src/assets/imgs/ditu@2x.png


BIN
src/assets/imgs/dot.png


BIN
src/assets/imgs/left_bg.png


BIN
src/assets/imgs/map_bg.png


BIN
src/assets/imgs/mid_bbg.png


BIN
src/assets/imgs/mid_tbg.png


BIN
src/assets/imgs/n_car1.png


BIN
src/assets/imgs/n_car2.png


BIN
src/assets/imgs/n_car3.png


BIN
src/assets/imgs/right_bg.png


BIN
src/assets/imgs/tab_l.png


BIN
src/assets/imgs/tab_led.png


BIN
src/assets/imgs/tab_r.png


BIN
src/assets/imgs/tab_red.png


BIN
src/assets/imgs/title_bg.png


BIN
src/assets/imgs/tits_bg.png


BIN
src/assets/marker1.png


BIN
src/assets/marker2.png


BIN
src/assets/marker3.png


BIN
src/assets/marker4.png


BIN
src/assets/zhibiao1.png


BIN
src/assets/zhibiao2.png


BIN
src/assets/组19@2x.png


+ 1880 - 0
src/components/page/bindex.vue

@@ -0,0 +1,1880 @@
+<template>
+    <div class="page_index">
+        <div class="video_box">
+            <div class="-datav-wraper" style="width: 4227px; height: 1152px; pointer-events: auto;">
+                <video src="../../assets/img/bg_video.mp4" muted autoplay loop width="4227" height="1152"
+                    class="video-switch" style="object-fit: fill">
+                </video>
+            </div>
+        </div>
+        <div class="content">
+            <div class="topbg">
+                <div class="top">
+                    <div class="title">矿拉拉-物流集散调度中心</div>
+                </div>
+            </div>
+            <div class="contain">
+                <div class="mid_charts">
+                    <div class="mid_content_one">
+                        <div class="mid_Top">
+                            <div class="mid_TopBox">
+                                <div class="textBox">
+                                    <div>今日运单</div>
+                                    <div class="num_box">
+                                        <count bg :startVal='0' :endVal='todayTasks' :decimals="0" />
+                                        <span>车</span>
+                                    </div>
+                                </div>
+                            </div>
+                            <div class="mid_TopBox">
+                                <div class="textBox">
+                                    <div>今日运载</div>
+                                    <div class="num_box">
+                                        <count bg :startVal='0' :endVal='todayWeight' :decimals="0" />
+                                        <span>吨</span>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                        <div class="mid">
+                            <div class="iframe_box">
+                                <iframe ref="iframe" id="iframe" src="https://saas.sckaiwu.cn/wyenuxmd4j.html"
+                                    frameborder="0"></iframe>
+                            </div>
+                        </div>
+                        <div class="mid_BottomBox">
+                            <div style="width: 100%;position: relative;">
+                                <div class="content_titles ">运力车次趋势分析</div>
+                                <Charts :eOption="taskTableOption" v-if="taskTableOption"
+                                    style="height: 155px;position: absolute;" />
+                            </div>
+                        </div>
+                    </div>
+                </div>
+                <div class="right_charts">
+                    <div class="charts">
+                        <div>
+                            <div class="right_content_one">
+                                <div class="right_one_box">
+                                    <div class="two_tit">车辆入驻统计</div>
+                                    <Charts :eOption="truckRegisterOption" v-if="truckRegisterOption"
+                                        style="width: 667px;height: 516px"></Charts>
+                                </div>
+                            </div>
+                            <div class="right_content_two">
+                                <div class="two_tit">运力服务排行(车次)</div>
+                                <Charts :eOption="customerTaskOption" v-if="customerTaskOption"
+                                    style="width: 100%;height: 249px" />
+                            </div>
+                        </div>
+                        <div>
+                            <div class="right_content_three">
+                                <img class="bgimg" src="../../assets/img/chart_bg1.png" alt="">
+                                <div class="three_tit">入驻车辆</div>
+                                <div class="three_box">
+                                    <div class="tree_item">
+                                        <div class="i_tit c_1">新能源</div>
+                                        <div class="i_right">
+                                            <img class="car_img" src="../../assets/img/icon_car.png" alt="">
+                                            <div class="car_num">{{ newTruck }}</div>
+                                        </div>
+                                    </div>
+                                    <div class="tree_item">
+                                        <div class="i_tit c_2">氢能源</div>
+                                        <div class="i_right">
+                                            <img class="car_img" src="../../assets/img/icon_car1.png" alt="">
+                                            <div class="car_num">{{ truckH2 }}</div>
+                                        </div>
+                                    </div>
+                                    <div class="tree_item">
+                                        <div class="i_tit c_3">传统能源</div>
+                                        <div class="i_right">
+                                            <img class="car_img" src="../../assets/img/icon_car2.png" alt="">
+                                            <div class="car_num">{{ truckOre }}</div>
+                                        </div>
+                                    </div>
+                                </div>
+                            </div>
+                            <div class="right_content_bot">
+                                <div class="bot_chart" style="margin-left: 20px;">
+                                    <div class="bot_tit">运行中车型分布图</div>
+                                    <div class="chart_boxs">
+                                        <Chartsbar :seriesData="barData" :eOption="runningTruckTypeOption"
+                                            v-if="runningTruckTypeOption" style="width: 100%;height: 264px" />
+                                    </div>
+                                </div>
+                                <div class="bot_chart">
+                                    <div class="bot_tit">入驻车型分布图</div>
+                                    <div class="chart_boxs">
+                                        <Chartsbar :seriesData="barData1" :eOption="registerTruckOption"
+                                            v-if="registerTruckOption" style="width: 100%;height: 264px" />
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</template>
+<script>
+import moment from 'moment';
+import Charts from '@/components/selfCP/charts.vue';
+import Chartsbar from '@/components/selfCP/chartsbar.vue';
+import count from './count.vue';
+import { POST, GET } from '@/server/api/common';
+import * as echarts from "echarts";
+let time1, time2
+export default {
+    name: 'dashboard',
+    components: {
+        Charts,
+        Chartsbar,
+        count
+    },
+    computed: {
+        defaultOption() {
+            return {
+                step: 2, // 数值越大速度滚动越快
+                limitMoveNum: 18, // 开始无缝滚动的数据量 this.dataList.length
+                hoverStop: true, // 是否开启鼠标悬停stop
+                direction: 1, // 0向下 1向上 2向左 3向右
+                openWatch: true, // 开启数据实时监控刷新dom
+                singleHeight: 55, // 单步运动停止的高度(默认值0是无缝不停止的滚动) direction => 0/1
+                singleWidth: 0, // 单步运动停止的宽度(默认值0是无缝不停止的滚动) direction => 2/3
+                waitTime: 1000 // 单步运动停止的时间(默认值1000ms)
+            };
+        },
+        defaultOption1() {
+            return {
+                step: 2, // 数值越大速度滚动越快
+                limitMoveNum: 5, // 开始无缝滚动的数据量 this.dataList.length
+                hoverStop: true, // 是否开启鼠标悬停stop
+                direction: 1, // 0向下 1向上 2向左 3向右
+                openWatch: true, // 开启数据实时监控刷新dom
+                singleHeight: 57, // 单步运动停止的高度(默认值0是无缝不停止的滚动) direction => 0/1
+                singleWidth: 0, // 单步运动停止的宽度(默认值0是无缝不停止的滚动) direction => 2/3
+                waitTime: 1000 // 单步运动停止的时间(默认值1000ms)
+            };
+        }
+    },
+    data() {
+        return {
+            newTruck: 0,
+            truckH2: 0,
+            truckOre: 0,
+            calciumOxideTimer: null,
+            customerTaskOption: null,
+            taskTableOption: null,
+            truckRegisterOption: null,
+            runningTruckTypeOption: null,
+            registerTruckOption: null,
+            orderSituationList: [],
+            totalTasks: 0,
+            totalWeight: 0,
+            totalRunnings: 0,
+            totalEntry: 0,
+            running: 0,
+            todayTasks: 0,
+            todayWeight: 0,
+            orderList: [],
+            barData: [],
+            barData1: [],
+        }
+    },
+    mounted() {
+        console.log(this.$config);
+        if (this.$route.query && this.$route.query.companyId) {
+            this.mineId = this.$route.query.companyId;
+        }
+        this.getApiUrl();
+        moment.locale('zh-cn');
+        clearInterval(time1)
+        clearInterval(time2)
+        time1 = setInterval(() => {
+            this.getdata()
+        }, this.$config.time * 1000);
+        time2 = setInterval(() => {
+            this.getdatas()
+        }, this.$config.time1 * 1000);
+    },
+    destoryed() {
+        clearInterval(this.calciumOxideTimer);
+        this.calciumOxideTimer = null;
+    },
+    methods: {
+        getApiUrl() {
+            const self = this;
+            this.getTaskList()
+            this.getTotalTasks()
+            this.getTotalWeight()
+            this.getTotalRunnings()
+            this.getTotalEntry()
+            this.getRunning()
+            this.getOrder()
+            this.getTodayTasks()
+            this.getTodayWeight()
+            this.getTaskTable()
+            this.getTruckRegister()
+            this.getCustomerTask()
+            this.getNewTruck()
+            this.getTruckH2()
+            this.getTruckOre()
+            this.getRunningTruckType()
+            this.getRegisterTruckOption()
+        },
+        getdata() {
+            this.getTotalTasks()
+            this.getTotalWeight()
+            this.getTotalRunnings()
+            this.getTotalEntry()
+            this.getRunning()
+            this.getTodayTasks()
+            this.getTodayWeight()
+            this.getNewTruck()
+            this.getTruckH2()
+            this.getTruckOre()
+        },
+        getdatas() {
+            this.getTaskList()
+            this.getOrder()
+            this.getTaskTable()
+            this.getTruckRegister()
+            this.getCustomerTask()
+            this.getRunningTruckType()
+            this.getRegisterTruckOption()
+        },
+        //运单简要
+        getTaskList() {
+            GET(this.$config.taskList.url).then((res) => {
+                this.orderSituationList = res.data
+            })
+        },
+        //累计运单
+        getTotalTasks() {
+            GET(this.$config.totalTasks.url).then((res) => {
+                this.totalTasks = res.data[0].value
+            })
+        },
+        //累计装载
+        getTotalWeight() {
+            GET(this.$config.totalWeight.url).then((res) => {
+                this.totalWeight = res.data[0].value
+            })
+        },
+        //运行中
+        getTotalRunnings() {
+            GET(this.$config.totalRunnings.url).then((res) => {
+                this.totalRunnings = res.data[0].value
+            })
+        },
+        //等待进场
+        getTotalEntry() {
+            GET(this.$config.totalEntry.url).then((res) => {
+                this.totalEntry = res.data[0].value
+            })
+        },
+        //配送中
+        getRunning() {
+            GET(this.$config.running.url).then((res) => {
+                this.running = res.data[0].value
+            })
+        },
+        //订单
+        getOrder() {
+            GET(this.$config.order.url).then((res) => {
+                this.orderList = res.data
+            })
+        },
+        //今日运单
+        getTodayTasks() {
+            GET(this.$config.todayTasks.url).then((res) => {
+                this.todayTasks = res.data[0].value
+            })
+        },
+        //今日装载
+        getTodayWeight() {
+            GET(this.$config.todayWeight.url).then((res) => {
+                this.todayWeight = res.data[0].value
+            })
+        },
+        //车次排行
+        getCustomerTask() {
+            GET(this.$config.customerTask.url).then((res) => {
+                if (res.status == 200) {
+                    let dataList = res.data;
+                    var colorList = ['#0A73FF'];
+                    this.customerTaskOption = {
+                        tooltip: {
+                            show: false,
+                        },
+                        legend: {
+                            show: false
+                        },
+                        grid: {
+                            left: 0,
+                            right: '5%',
+                            top: '5%',
+                            bottom: '2%',
+                            containLabel: true
+                        },
+                        xAxis: {
+                            show: false,
+                            type: 'value'
+                        },
+                        yAxis: [{
+                            type: 'category',
+                            inverse: true,
+                            axisLine: {
+                                show: false
+                            },
+                            axisTick: {
+                                show: false
+                            },
+                            axisPointer: {
+                                label: {
+                                    show: true,
+                                    margin: 30
+                                }
+                            },
+                            data: dataList.map(item => item.content),
+                            axisLabel: {
+                                margin: 50,
+                                fontSize: 14,
+                                align: 'left',
+                                color: '#333',
+                                rich: {
+                                    a1: {
+                                        color: '#fff',
+                                        backgroundColor: colorList[0],
+                                        width: 30,
+                                        height: 30,
+                                        align: 'center',
+                                        borderRadius: 2
+                                    },
+                                    a2: {
+                                        color: '#fff',
+                                        backgroundColor: colorList[0],
+                                        width: 30,
+                                        height: 30,
+                                        align: 'center',
+                                        borderRadius: 2
+                                    },
+                                    a3: {
+                                        color: '#fff',
+                                        backgroundColor: colorList[0],
+                                        width: 30,
+                                        height: 30,
+                                        align: 'center',
+                                        borderRadius: 2
+                                    },
+                                    b: {
+                                        color: '#fff',
+                                        backgroundColor: colorList[0],
+                                        width: 30,
+                                        height: 30,
+                                        align: 'center',
+                                        borderRadius: 2
+                                    }
+                                },
+                                formatter: function (params) {
+                                    var index = dataList.map(item => item.content).indexOf(params);
+                                    index = index + 1;
+                                    if (index - 1 < 3) {
+                                        return [
+                                            '{a' + index + '|' + index + '}'
+                                        ].join('\n')
+                                    } else {
+                                        return [
+                                            '{b|' + index + '}'
+                                        ].join('\n')
+                                    }
+                                }
+                            }
+                        },],
+                        series: [{
+                            z: 2,
+                            name: 'value',
+                            type: 'bar',
+                            barCategoryGap: '40%',
+                            barGap: 5,
+                            barWidth: 30,
+                            itemStyle: {
+                                normal: {
+                                    barBorderRadius: 0,
+                                    color: new echarts.graphic.LinearGradient(1, 0, 0, 0, [
+                                        {
+                                            offset: 0,
+                                            color: '#16C8FB',
+                                        },
+                                        {
+                                            offset: 1,
+                                            color: '#0958D2',
+                                        },
+                                    ]),
+                                },
+                            },
+                            data: dataList.map((item, i) => {
+                                return {
+                                    value: item.value,
+                                };
+                            }),
+                            label: {
+                                normal: {
+                                    color: '#666',
+                                    show: true,
+                                    position: [20, 0],
+                                    textStyle: {
+                                        fontSize: 12,
+                                        color: '#fff',
+                                        lineHeight: 30
+                                    },
+                                    formatter: function (a, b) {
+                                        return a.name
+                                    }
+                                }
+                            }
+                        }
+
+                        ]
+                    };
+                }
+            });
+        },
+        //运力车次趋势分析
+        getTaskTable() {
+            GET(this.$config.taskTable.url).then((res) => {
+                if (res.status == 200) {
+                    let dataList = res.data;
+                    let xAxis = []
+                    let yAxis = []
+                    dataList.forEach((item) => {
+                        xAxis.push(item.date)
+                        yAxis.push(item.nums)
+                    })
+                    this.taskTableOption = {
+                        grid: {
+                            top: 10,
+                            left: 30,
+                            right: 30,
+                            bottom: 40,
+                            itemGap: 25,
+                            itemWidth: 18,
+                            containLabel: true,
+                        },
+                        tooltip: {
+                            show: false
+                        },
+                        xAxis: [
+                            {
+                                type: 'category',
+                                boundaryGap: false,
+                                axisLabel: {
+                                    interval: 20,
+                                    formatter: '{value}',
+                                    fontSize: 14,
+                                    margin: 10,
+                                    textStyle: {
+                                        color: '#616161',
+                                    },
+                                },
+                                axisLine: {
+                                    lineStyle: {
+                                        width: 3,
+                                        color: '#616161',
+                                    },
+                                },
+                                splitLine: {
+                                    interval: 15,
+                                    show: true,
+                                    lineStyle: {
+                                        color: '#243753',
+                                    },
+                                },
+                                axisTick: {
+                                    show: false,
+                                },
+                                data: xAxis,
+                            },
+                        ],
+                        yAxis: [
+                            {
+                                boundaryGap: false,
+                                type: 'value',
+                                axisLabel: {
+                                    textStyle: {
+                                        color: '#616161',
+                                    },
+                                },
+                                nameTextStyle: {
+                                    color: '#fff',
+                                    fontSize: 12,
+                                    lineHeight: 40,
+                                },
+                                splitLine: {
+                                    lineStyle: {
+                                        color: '#243753',
+                                    },
+                                },
+                                axisLine: {
+                                    show: true,
+                                    lineStyle: {
+                                        width: 3,
+                                        color: '#616161',
+                                    },
+                                },
+                                axisTick: {
+                                    show: false,
+                                },
+                            },
+                        ],
+                        series: [
+                            {
+                                name: '',
+                                type: 'line',
+                                smooth: true,
+                                showSymbol: true,
+                                symbolSize: 2,
+                                zlevel: 3,
+                                itemStyle: {
+                                    color: '#19a3df',
+                                    borderColor: '#a3c8d8',
+                                },
+                                lineStyle: {
+                                    normal: {
+                                        width: 1,
+                                        color: '#19a3df',
+                                    },
+                                },
+                                areaStyle: {
+                                    normal: {
+                                        color: new echarts.graphic.LinearGradient(
+                                            0,
+                                            0,
+                                            0,
+                                            1,
+                                            [
+                                                {
+                                                    offset: 0,
+                                                    color: 'rgba(15, 125, 228,1)',
+                                                },
+                                                {
+                                                    offset: 0.8,
+                                                    color: 'rgba(15, 125, 228,0.4)',
+                                                },
+                                            ],
+                                            false
+                                        ),
+                                    },
+                                },
+                                data: yAxis,
+                            },
+                        ],
+                    };
+                }
+            });
+        },
+        getTruckRegister() {
+            GET(this.$config.truckRegister.url).then((res) => {
+                let dataList = res.data
+                let xAxis = []
+                let arr1 = []
+                let arr2 = []
+                let arr3 = []
+                dataList.forEach((item) => {
+                    if (item.s == 1) {
+                        xAxis.push(item.date)
+                        arr1.push(item.y)
+                    }
+                    if (item.s == 2) {
+                        arr2.push(item.y)
+                    }
+                    if (item.s == 3) {
+                        arr3.push(item.y)
+                    }
+                })
+                this.truckRegisterOption = {
+                    backgroundColor: '#25282F',
+                    tooltip: {
+                        show: false,
+                    },
+                    legend: {
+                        data: ['传统能源', '氢能源', '新能源'],
+                        align: 'right',
+                        right: 10,
+                        textStyle: {
+                            color: "#fff"
+                        },
+                        top: 20,
+                        itemWidth: 10,
+                        itemHeight: 10,
+                        itemGap: 35
+                    },
+                    grid: {
+                        left: '3%',
+                        right: '4%',
+                        bottom: '3%',
+                        containLabel: true
+                    },
+                    xAxis: [{
+                        type: 'category',
+                        data: xAxis,
+                        axisLine: {
+                            show: true,
+                            lineStyle: {
+                                color: "#616161",
+                                width: 1,
+                                type: "solid"
+                            }
+                        },
+                        axisTick: {
+                            show: false,
+                        },
+                        axisLabel: {
+                            show: true,
+                            textStyle: {
+                                color: "#616161",
+                            }
+                        },
+                    },
+
+                    ],
+                    yAxis: [{
+                        type: 'value',
+                        axisLabel: {
+                            formatter: '{value}',
+                            textStyle: {
+                                color: "#616161",
+                            }
+                        },
+                        axisTick: {
+                            show: false,
+                        },
+                        axisLine: {
+                            show: false,
+                            lineStyle: {
+                                color: "#616161",
+                                width: 1,
+                                type: "solid"
+                            },
+                        },
+                        splitLine: {
+                            lineStyle: {
+                                color: "#616161",
+                            }
+                        }
+                    },],
+                    series: [{
+                        name: '传统能源',
+                        type: 'bar',
+                        data: arr1,
+                        barWidth: 10, //柱子宽度
+                        barGap: 1, //柱子之间间距
+                        showBackground: true,
+                        label: {
+                            normal: {
+                                show: true,
+                                position: "top",
+                                distance: 20,
+                                formatter: function (params) {
+                                    return params.data.value;
+                                },
+                                textStyle: {
+                                    color: "#fff",
+                                    fontSize: 12
+                                }
+                            }
+                        },
+                        itemStyle: {
+                            normal: {
+                                color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
+                                    offset: 0,
+                                    color: '#BE2238'
+                                }, {
+                                    offset: 1,
+                                    color: '#BE2238'
+                                }]),
+                                opacity: 1,
+                            }
+                        }
+                    }, {
+                        name: '氢能源',
+                        type: 'bar',
+                        data: arr2,
+                        barWidth: 10,
+                        barGap: 1,
+                        showBackground: true,
+                        label: {
+                            normal: {
+                                show: true,
+                                position: "top",
+                                distance: 20,
+                                formatter: function (params) {
+                                    return params.data.value;
+                                },
+                                textStyle: {
+                                    color: "#fff",
+                                    fontSize: 12
+                                }
+                            }
+                        },
+                        itemStyle: {
+                            normal: {
+                                color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
+                                    offset: 0,
+                                    color: '#00BFFE'
+                                }, {
+                                    offset: 1,
+                                    color: '#00BFFE'
+                                }]),
+                                opacity: 1,
+                            }
+                        }
+                    }, {
+                        name: '新能源',
+                        type: 'bar',
+                        data: arr3,
+                        barWidth: 10,
+                        barGap: 1,
+                        showBackground: true,
+                        label: {
+                            normal: {
+                                show: true,
+                                position: "top",
+                                distance: 20,
+                                formatter: function (params) {
+                                    return params.data.value;
+                                },
+                                textStyle: {
+                                    color: "#fff",
+                                    fontSize: 12
+                                }
+                            }
+                        },
+                        itemStyle: {
+                            normal: {
+                                color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
+                                    offset: 0,
+                                    color: '#7DC13C'
+                                }, {
+                                    offset: 1,
+                                    color: '#7DC13C'
+                                }]),
+                                opacity: 1,
+                            }
+                        }
+                    },
+                    ]
+                }
+            })
+        },
+        //新能源车辆
+        getNewTruck() {
+            GET(this.$config.newTruck.url).then((res) => {
+                if (res.status == 200) {
+                    this.newTruck = res.data[0].value
+                }
+            });
+        },
+        //氢能源车辆
+        getTruckH2() {
+            GET(this.$config.truckH2.url).then((res) => {
+                if (res.status == 200) {
+                    this.truckH2 = res.data[0].value
+                }
+            });
+        },
+        //传统能源车辆
+        getTruckOre() {
+            GET(this.$config.truckOre.url).then((res) => {
+                if (res.status == 200) {
+                    this.truckOre = res.data[0].value
+                }
+            });
+        },
+        getRunningTruckType() {
+            GET(this.$config.runningTruckType.url).then((res) => {
+                if (res.status == 200) {
+                    let dataList = res.data
+                    let arr = []
+                    let num = 0
+                    dataList.forEach(item => {
+                        item.name = item.type
+                        num = num + item.value
+                        arr.push(item.value)
+                    })
+                    let pie = Number(dataList[0].value / num * 100).toFixed(0)
+                    this.barData = dataList
+                    this.runningTruckTypeOption = {
+
+                        color: ['#F52E5A', '#37FDA3', '#FFA523', '#3779FD', '#4CFFE6'],
+                        legend: {
+                            data: ['六轴', '五轴', '四轴', '三轴', '二轴'],
+                            show: true,
+                            align: 'left',
+                            // right: 10,
+                            textStyle: {
+                                color: "#fff"
+                            },
+                            bottom: 10,
+                            itemWidth: 10,
+                            itemHeight: 10,
+                            itemGap: 4
+                        },
+                        grid: {
+                            top: '10%',
+                            left: '0%',
+                            right: '5%',
+                            bottom: '0%',
+                            containLabel: true
+                        },
+                        title: [
+                            {
+                                text: dataList[0].name,
+                                x: "center",
+                                top: "57%",
+                                textStyle: {
+                                    color: "#FFFFFF",
+                                    fontSize: 22,
+                                    fontWeight: "600",
+                                },
+                            },
+                            {
+                                text: pie + '%',
+                                x: "center",
+                                y: "center",
+                                textStyle: {
+                                    fontSize: 40,
+                                    color: "#FFFFFF",
+                                    fontFamily: "DINAlternate-Bold, DINAlternate",
+                                    foontWeight: "600",
+                                },
+                            },
+                        ],
+                        backgroundColor: "#111",
+                        polar: {
+                            radius: ["70%", "76%"],
+                            center: ["50%", "50%"],
+                        },
+                        angleAxis: {
+                            max: 100,
+                            show: false,
+                        },
+                        radiusAxis: {
+                            type: "category",
+                            show: true,
+                            axisLabel: {
+                                show: false,
+                            },
+                            axisLine: {
+                                show: false,
+                            },
+                            axisTick: {
+                                show: false,
+                            },
+                        },
+                        series: [
+                            {
+                                name: '',
+                                type: 'pie',
+                                radius: ['60%', '70%'],
+                                avoidLabelOverlap: false,
+                                label: {
+                                    show: false,
+                                    position: 'center'
+                                },
+                                emphasis: {
+                                    label: {
+                                        show: false,
+                                        fontSize: '85',
+                                        fontWeight: 'bold'
+                                    }
+                                },
+                                labelLine: {
+                                    show: false
+                                },
+                                data: dataList
+                            }
+                        ],
+                    }
+                }
+            });
+
+        },
+        getRegisterTruckOption() {
+            GET(this.$config.registerTruckOption.url).then((res) => {
+                if (res.status == 200) {
+                    let dataList = res.data
+                    let arr = []
+                    let num = 0
+                    dataList.forEach(item => {
+                        item.name = item.type
+                        num = num + item.value
+                        arr.push(item.value)
+                    })
+                    let pie = Number(dataList[0].value / num * 100).toFixed(0)
+                    this.barData1 = dataList
+                    this.registerTruckOption = {
+                        legend: {
+                            data: ['六轴', '五轴', '四轴', '三轴', '二轴'],
+                            show: true,
+                            align: 'left',
+                            // right: 10,
+                            textStyle: {
+                                color: "#fff"
+                            },
+                            bottom: 10,
+                            itemWidth: 10,
+                            itemHeight: 10,
+                            itemGap: 4
+                        },
+                        color: ['#F52E5A', '#37FDA3', '#FFA523', '#3779FD', '#4CFFE6'],
+                        grid: {
+                            top: '10%',
+                            left: '0%',
+                            right: '5%',
+                            bottom: '0%',
+                            containLabel: true
+                        },
+                        title: [
+                            {
+                                text: dataList[0].name,
+                                x: "center",
+                                top: "57%",
+                                textStyle: {
+                                    color: "#FFFFFF",
+                                    fontSize: 22,
+                                    fontWeight: "600",
+                                },
+                            },
+                            {
+                                text: pie + '%',
+                                x: "center",
+                                y: "center",
+                                textStyle: {
+                                    fontSize: 40,
+                                    color: "#FFFFFF",
+                                    fontFamily: "DINAlternate-Bold, DINAlternate",
+                                    foontWeight: "600",
+                                },
+                            },
+                        ],
+                        backgroundColor: "#111",
+                        polar: {
+                            radius: ["70%", "76%"],
+                            center: ["50%", "50%"],
+                        },
+                        angleAxis: {
+                            max: 100,
+                            show: false,
+                        },
+                        radiusAxis: {
+                            type: "category",
+                            show: true,
+                            axisLabel: {
+                                show: false,
+                            },
+                            axisLine: {
+                                show: false,
+                            },
+                            axisTick: {
+                                show: false,
+                            },
+                        },
+                        series: [
+                            {
+                                name: '',
+                                type: 'pie',
+                                radius: ['60%', '70%'],
+                                avoidLabelOverlap: false,
+                                label: {
+                                    show: false,
+                                    position: 'center'
+                                },
+                                emphasis: {
+                                    label: {
+                                        show: false,
+                                        fontSize: '85',
+                                        fontWeight: 'bold'
+                                    }
+                                },
+                                labelLine: {
+                                    show: false
+                                },
+                                data: dataList
+                            }
+                        ],
+                    }
+                }
+            });
+
+        },
+        getRadioWidth(pct) {
+            let width = (76 / 100) * parseFloat(pct);
+            return width + 'px';
+        }
+    }
+}
+</script>
+<style lang="less" scoped>
+@font-face {
+    font-family: MFLiHei;
+    src: url('./font/MFLiHei_Noncommercial-Regular.otf') format('opentype');
+}
+
+@font-face {
+    font-family: FXLed;
+    src: url('./font/DSDIGI1.ttf');
+}
+
+.fontMF {
+    font-family: MFLiHei;
+}
+
+.fontFx {
+    font-family: FXLed;
+}
+
+.flex {
+    display: flex;
+    align-items: center;
+}
+
+.MR40 {
+    margin-right: 40px;
+}
+
+.page_index {
+    width: 100%;
+    height: 100%;
+    overflow: hidden;
+    position: relative;
+
+    .video_box {
+        width: 4227px;
+        height: 1147px;
+        z-index: 0;
+        transform: rotate(0deg);
+        opacity: 0.5;
+        pointer-events: none;
+        left: 5px;
+        top: -4px;
+    }
+
+    .absolute {
+        // position: absolute !important;
+        // margin: 0 !important;
+    }
+
+    .content {
+        position: absolute;
+        top: 0;
+        left: 0;
+        height: 100%;
+        z-index: 1;
+        width: calc(100% - 80px);
+        padding: 0 20px;
+
+        .topbg {
+            width: 4220px;
+            height: 312px;
+            z-index: 0;
+            transform: rotate(0deg);
+            opacity: 1;
+            pointer-events: none;
+            left: -15px;
+            top: -4px;
+            position: absolute;
+        }
+
+        .top {
+            position: absolute !important;
+            margin: 0 !important;
+            width: 4220px;
+            height: 312px;
+            display: flex;
+            justify-content: space-between;
+            background-image: url(../../assets/img/title_bg.png);
+            background-repeat: no-repeat;
+            background-size: 100% 100%;
+
+            .title {
+                text-align: center;
+                line-height: 25px;
+                flex: 1;
+                padding: 25px 0;
+                pointer-events: auto;
+                color: rgb(255, 255, 255);
+                font-weight: bold;
+                font-family: "Microsoft Yahei", Arial, "sans-serif";
+                font-size: 40px;
+                writing-mode: horizontal-tb;
+                letter-spacing: 0px;
+                text-overflow: ellipsis;
+                white-space: nowrap;
+                overflow: hidden;
+            }
+        }
+
+        .contain {
+            display: flex;
+            margin-top: 130px;
+
+            .three_tits {
+                width: 279px;
+                height: 40px;
+                pointer-events: auto;
+                display: flex;
+                align-items: center;
+                justify-content: flex-start;
+                color: rgb(204, 204, 204);
+                font-weight: bold;
+                font-family: "Microsoft Yahei", Arial, "sans-serif";
+                font-size: 18px;
+                writing-mode: horizontal-tb;
+                letter-spacing: 0px;
+                text-overflow: ellipsis;
+                white-space: nowrap;
+                overflow: hidden;
+                padding-left: 32px;
+                padding-top: 20px;
+            }
+
+            .left_charts {
+                .rows {
+                    margin-left: 20px;
+                }
+
+                .charts {
+                    display: flex;
+
+                    .left_content_one {
+                        width: 541px;
+                        height: 1005px;
+                        pointer-events: auto;
+                        border-radius: 0px;
+                        border-style: solid;
+                        border-image: url(../../assets/img/chart_bg.png);
+                        border-image-slice: 288 500 272 680;
+                        border-image-width: 288px 500px 272px 680px;
+                        border-image-repeat: repeat;
+                        border-width: 1px;
+                        background: none;
+
+                        .scroll_table {
+                            width: 520px;
+                            margin: 0 auto;
+
+                            .thead {}
+
+                            .tbody {
+                                .seamless-warp {
+                                    overflow: hidden;
+                                    height: 880px;
+                                    width: 520px;
+                                }
+                            }
+
+                            th {
+                                text-align: left;
+                                font-size: 12px;
+                                font-weight: 400;
+                                color: #ffffff;
+                                line-height: 55px;
+                            }
+
+                            .td {
+                                font-size: 12px;
+                                font-weight: 400;
+                                color: #ffffff;
+                                line-height: 55px;
+                            }
+
+                            .tr:nth-child(even) {
+                                background-color: rgba(255, 255, 255, 0.1);
+                                // background-color: rgba(255, 255, 255, 0.399);
+                            }
+
+                            .radio_td {
+                                display: flex;
+                                align-items: center;
+
+                                .radio {
+                                    position: relative;
+                                    min-width: 6px;
+                                    height: 10px;
+                                    background: linear-gradient(90deg, #29abe3, #01ffff);
+                                    margin-right: 4px;
+
+                                    .div {
+                                        width: 6px;
+                                        height: 16px;
+                                        background: #ffffff;
+                                        position: absolute;
+                                        top: -3px;
+                                        right: 0;
+                                    }
+                                }
+                            }
+                        }
+                    }
+
+                    .left_content_two {
+                        width: 803px;
+                        height: 563px;
+                        pointer-events: auto;
+                        border-radius: 0px;
+                        border-style: solid;
+                        border-image: url(../../assets/img/chart_bg.png);
+                        border-image-slice: 288 500 272 680;
+                        border-image-width: 288px 500px 272px 680px;
+                        border-image-repeat: repeat;
+                        border-width: 1px;
+                        background: none;
+
+                        .quantity_box {
+                            padding: 50px;
+
+                            .quantity_top {
+                                height: 129px;
+                                // background-color: #ccc;
+                                // opacity: 0.1;
+                                display: flex;
+                                justify-content: space-between;
+                                margin-top: 30px;
+
+                                .quantity_topOne {
+                                    background-color: rgba(36, 38, 45, 0.25);
+                                    height: 129px;
+                                    width: 336px;
+                                    display: flex;
+                                    flex-direction: column;
+                                    justify-content: center;
+
+
+                                    .quantity_txt {
+                                        color: rgb(213, 213, 213);
+                                        font-weight: normal;
+                                        font-family: "Microsoft Yahei", Arial, "sans-serif";
+                                        font-size: 20px;
+                                        text-overflow: ellipsis;
+                                        white-space: nowrap;
+                                        overflow: hidden;
+                                        line-height: normal;
+                                        text-align: left;
+                                        padding-left: 10px;
+
+                                    }
+
+
+                                    .quantity_num {
+                                        color: rgb(55, 121, 253);
+                                        font-size: 53px;
+                                        font-weight: bold;
+                                        letter-spacing: 0;
+                                        display: flex;
+                                        align-items: baseline;
+                                        padding-left: 10px;
+
+                                        .quantity_unit {
+                                            font-size: 18px;
+                                            color: #d9d9d9;
+                                            font-weight: bolder;
+                                            vertical-align: super;
+                                            font-family: Microsoft Yahei;
+                                        }
+                                    }
+                                }
+
+                            }
+
+                            .quantity_bottom {
+                                height: 279px;
+                                // background-color: #ccc;
+                                // opacity: 0.1;
+                                display: flex;
+                                justify-content: space-between;
+                                margin-top: 40px;
+
+                                .quantity_left {
+                                    width: 332px;
+                                    height: 279px;
+                                    background-color: rgba(36, 38, 45, 0.25);
+                                    color: #fff;
+                                    display: flex;
+                                    flex-direction: column;
+                                    justify-content: center;
+                                    padding-left: 10px;
+
+                                    .quantity_txt {
+                                        color: rgb(213, 213, 213);
+                                        font-weight: normal;
+                                        font-family: "Microsoft Yahei", Arial, "sans-serif";
+                                        font-size: 32px;
+                                        text-overflow: ellipsis;
+                                        white-space: nowrap;
+                                        overflow: hidden;
+                                        line-height: normal;
+                                        text-align: left;
+
+                                    }
+
+                                    .quantity_num {
+                                        color: rgb(245, 46, 90);
+                                        font-size: 128px;
+                                        font-weight: bold;
+                                        letter-spacing: 0;
+                                        display: flex;
+                                        align-items: baseline;
+
+                                        .quantity_unit {
+                                            font-size: 36px;
+                                            color: #d9d9d9;
+                                            font-weight: bolder;
+                                            vertical-align: super;
+                                            font-family: Microsoft Yahei;
+                                        }
+                                    }
+                                }
+
+                                .quantity_right {
+                                    width: 336px;
+                                    height: 279px;
+
+
+                                    .quantity_rightBox {
+                                        display: flex;
+                                        justify-content: space-between;
+                                        width: 336px;
+                                        height: 129px;
+                                        align-items: center;
+                                        background-color: rgba(36, 38, 45, 0.25);
+                                        color: #fff;
+                                        margin-bottom: 20px;
+
+                                        .quantity_txtBox {
+                                            padding-left: 10px;
+
+                                            .quantity_txt {
+                                                font-weight: normal;
+                                                font-family: "Microsoft Yahei", Arial, "sans-serif";
+                                                font-size: 24px;
+                                                text-overflow: ellipsis;
+                                                white-space: nowrap;
+                                                overflow: hidden;
+                                                line-height: normal;
+                                            }
+
+                                            .quantity_num {
+                                                font-size: 53px;
+                                                font-weight: bold;
+                                                letter-spacing: 0;
+                                                display: flex;
+                                                align-items: baseline;
+                                                color: rgb(255, 255, 255);
+                                            }
+
+                                            .quantity_unit {
+                                                font-size: 18px;
+                                                color: #d9d9d9;
+                                                font-weight: bolder;
+                                                vertical-align: super;
+                                                font-family: Microsoft Yahei;
+                                            }
+                                        }
+
+                                        .quantity_image {
+                                            width: 144px;
+                                            height: 97px;
+                                            pointer-events: auto;
+                                            image-rendering: -webkit-optimize-contrast;
+                                            background-repeat: no-repeat;
+                                            background-size: 100% 100%;
+                                            background-image: url('../../assets/img/icon_car3.png');
+                                            -webkit-mask-image: none;
+                                            -webkit-mask-repeat: initial;
+                                            -webkit-mask-size: initial;
+                                            background-color: initial;
+                                            border-radius: 0px;
+                                            cursor: pointer;
+                                        }
+
+                                        .quantity_image1 {
+                                            background-image: url('../../assets/img/icon_car4.png');
+                                        }
+                                    }
+                                }
+                            }
+                        }
+
+                    }
+
+                    .left_content_three {
+                        margin-top: 20px;
+                        width: 802px;
+                        height: 415px;
+                        pointer-events: auto;
+                        border-radius: 0px;
+                        border-style: solid;
+                        border-image: url(../../assets/img/chart_bg.png);
+                        border-image-slice: 288 500 272 680;
+                        border-image-width: 288px 500px 272px 680px;
+                        border-image-repeat: repeat;
+                        border-width: 1px;
+                        background: none;
+
+                        .scroll_table {
+                            width: 762px;
+                            margin: 0 auto;
+                            margin-top: 50px;
+
+                            .thead {
+                                background-color: rgb(0, 80, 179);
+                            }
+
+                            .tbody {
+                                .seamless-warp {
+                                    overflow: hidden;
+                                    // height: 360px;
+                                    height: 285px;
+                                    width: 100%;
+                                }
+                            }
+
+                            th {
+                                text-align: left;
+                                font-size: 12px;
+                                font-weight: 400;
+                                color: #ffffff;
+                                line-height: 57px;
+                                background-color: rgb(0, 80, 179);
+                            }
+
+                            .td {
+                                font-size: 12px;
+                                font-weight: 400;
+                                color: #ffffff;
+                                line-height: 57px;
+                            }
+
+                            .tr {
+                                background-color: #032255;
+                                // background-color: rgba(255, 255, 255, 0.399);
+                            }
+
+                            .radio_td {
+                                display: flex;
+                                align-items: center;
+                                color: #ffffff;
+
+                                .radio {
+                                    position: relative;
+                                    min-width: 6px;
+                                    height: 10px;
+                                    background: linear-gradient(90deg, #29abe3, #01ffff);
+                                    margin-right: 4px;
+
+                                    .div {
+                                        width: 6px;
+                                        height: 16px;
+                                        background: #ffffff;
+                                        position: absolute;
+                                        top: -3px;
+                                        right: 0;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+
+            .mid_charts {
+                margin-left: 20px;
+
+                .mid_content_one {
+                    width: 1350px;
+                    height: 993px;
+                    pointer-events: auto;
+                    border-radius: 0px;
+                    border-style: solid;
+                    border-image: url(../../assets/img/charts_bg.png);
+                    border-image-slice: 17 24 18 19;
+                    border-image-width: 17px 24px 18px 19px;
+                    border-image-repeat: repeat;
+                    border-width: 1px;
+                    background: none;
+
+                    .mid_Top {
+                        display: flex;
+
+                        .mid_TopBox {
+                            width: 684px;
+                            height: 179px;
+                            pointer-events: auto;
+                            border-radius: 0px;
+                            border-style: solid;
+                            border-image-source: url('../../assets/img/data_bg3.png');
+                            border-image-slice: 423 606 410 652;
+                            border-image-width: 423px 606px 410px 652;
+                            border-image-repeat: repeat;
+                            border-width: 1px;
+                            background: none;
+                            color: #ffffff;
+
+                            .textBox {
+                                width: 421px;
+                                height: 135px;
+                                margin: 0 auto;
+                                margin-top: 40px;
+                                color: rgb(191, 191, 191);
+                                font-weight: lighter;
+                                font-family: "Microsoft Yahei", Arial, "sans-serif";
+                                font-size: 18px;
+                                text-overflow: ellipsis;
+                                white-space: nowrap;
+                                overflow: hidden;
+                                line-height: normal;
+
+                                .num_box {
+                                    display: flex;
+                                    align-items: baseline;
+                                    font-size: 70px;
+                                    font-weight: bolder;
+                                    letter-spacing: 0.02em;
+                                    margin-right: 0.1em;
+                                    border-radius: 0px;
+                                    width: 70px;
+                                    height: 92px;
+                                    line-height: 92px;
+                                    color: #ffffff;
+                                    // font-family: DS-Digital;
+                                    font-family: FXLed;
+
+                                    span {
+                                        font-size: 20px;
+                                        color: #ffffff;
+                                        font-weight: bolder;
+                                        vertical-align: super;
+                                        font-family: Microsoft Yahei;
+                                    }
+                                }
+                            }
+
+                            // margin: 0 15px;
+                        }
+                    }
+
+                    .mid {
+                        width: 1293px;
+                        height: 619px;
+                        pointer-events: auto;
+                        margin: 0 auto;
+
+                        // background-color: green;
+                        .iframe_box {
+                            width: 100%;
+                            height: 619px;
+                            // background-image: url(../../assets/img/iframe_bg.png);
+                            // background-repeat: no-repeat;
+                            // background-size: 100% 100%;
+                            overflow: hidden;
+
+                            #iframe {
+                                // margin: 10px 12px;
+                                width: 1293px;
+                                height: 619px;
+                                // border-radius: 30px;
+                            }
+                        }
+                    }
+
+                    .mid_BottomBox {
+                        width: 1295px;
+                        height: 155px;
+                        pointer-events: auto;
+                        border: none;
+                        border-radius: 0px;
+                        background: rgb(38, 38, 38);
+                        margin: 0 auto;
+                        margin-top: 15px;
+
+                        .content_titles {
+                            font-size: 18px;
+                            font-weight: 400;
+                            color: #ffffff;
+                            padding: 10px 0 0px 20px;
+                        }
+
+                    }
+                }
+            }
+
+            .right_charts {
+                margin-left: 20px;
+
+                .charts {
+                    display: flex;
+
+                    .right_content_one {
+                        width: 734px;
+                        height: 663px;
+                        pointer-events: auto;
+                        border-radius: 0px;
+                        border-style: solid;
+                        border-image-source: url(../../assets/img/chart_bg.png);
+                        border-image-slice: 288 500 272 680;
+                        border-image-width: 288px 500px 272px 680px;
+                        border-image-repeat: repeat;
+                        border-width: 1px;
+                        background: none;
+
+                        .right_one_box {
+                            width: 667px;
+                            height: 557px;
+                            pointer-events: auto;
+                            border: none;
+                            border-radius: 0px;
+                            background: rgb(36, 38, 45);
+                            margin: 0 auto;
+                            margin-top: 60px;
+
+                            .two_tit {
+                                height: 39px;
+                                pointer-events: auto;
+                                border: none;
+                                border-radius: 0px;
+                                background: rgb(29, 30, 36);
+                                padding-left: 30px;
+                                pointer-events: auto;
+                                display: flex;
+                                align-items: center;
+                                justify-content: flex-start;
+                                color: rgb(204, 204, 204);
+                                font-weight: bold;
+                                font-family: "Microsoft Yahei", Arial, "sans-serif";
+                                font-size: 18px;
+                                writing-mode: horizontal-tb;
+                                letter-spacing: 0px;
+                                text-overflow: ellipsis;
+                                white-space: nowrap;
+                                overflow: hidden;
+                            }
+                        }
+                    }
+
+                    .right_content_two {
+                        margin-top: 20px;
+                        width: 734px;
+                        height: 309px;
+                        pointer-events: auto;
+                        border-radius: 0px;
+                        border-style: solid;
+                        border-image-source: url(../../assets/img/chart_bg.png);
+                        border-image-slice: 288 500 272 680;
+                        border-image-width: 288px 500px 272px 680px;
+                        border-image-repeat: repeat;
+                        border-width: 1px;
+                        background: none;
+
+                        .two_tit {
+                            width: 279px;
+                            height: 40px;
+                            pointer-events: auto;
+                            display: flex;
+                            align-items: center;
+                            justify-content: flex-start;
+                            color: rgb(204, 204, 204);
+                            font-weight: bold;
+                            font-family: "Microsoft Yahei", Arial, "sans-serif";
+                            font-size: 18px;
+                            writing-mode: horizontal-tb;
+                            letter-spacing: 0px;
+                            text-overflow: ellipsis;
+                            white-space: nowrap;
+                            overflow: hidden;
+                            padding-left: 32px;
+                            padding-top: 20px;
+                        }
+                    }
+
+                    .right_content_three {
+                        position: relative;
+                        width: 688px;
+                        height: 688px;
+                        pointer-events: auto;
+                        border-radius: 0px;
+                        border-style: solid;
+                        border-image: url(../../assets/img/chart_bgtit.png);
+                        border-image-slice: 101 690 35 693;
+                        border-image-width: 101px 690px 35px 693px;
+                        border-image-repeat: repeat;
+                        border-width: 1px;
+                        background: none;
+
+                        .bgimg {
+                            position: absolute;
+                            width: 688px;
+                            height: 688px;
+                            left: 50%;
+                            top: 50%;
+                            transform: translate(-50%, -50%);
+                        }
+
+                        .three_tit {
+                            width: 239px;
+                            height: 42px;
+                            pointer-events: auto;
+                            display: flex;
+                            align-items: center;
+                            cursor: default;
+                            background-color: initial;
+                            border: none;
+                            border-radius: 0px;
+                            justify-content: center;
+                            font-weight: bold;
+                            font-family: "Microsoft Yahei", Arial, "sans-serif";
+                            font-size: 28px;
+                            writing-mode: horizontal-tb;
+                            letter-spacing: 0px;
+                            text-overflow: ellipsis;
+                            white-space: nowrap;
+                            overflow: hidden;
+                            margin: 0 auto;
+                            overflow: unset;
+                            text-overflow: unset;
+                            white-space: unset;
+                            color: unset;
+                            background-image: linear-gradient(135deg, rgb(0, 222, 255) 0%, rgb(0, 139, 255) 100%);
+                            background-clip: text;
+                            -webkit-text-fill-color: transparent;
+                        }
+
+                        .three_box {
+                            margin-top: 30px;
+
+                            .tree_item {
+                                display: flex;
+                            }
+
+                            .i_tit {
+                                width: 130px;
+                                height: 56px;
+                                pointer-events: auto;
+                                display: flex;
+                                align-items: center;
+                                cursor: default;
+                                background-color: initial;
+                                border: none;
+                                border-radius: 0px;
+                                justify-content: center;
+                                font-weight: bold;
+                                font-family: "Microsoft Yahei", Arial, "sans-serif";
+                                font-size: 28px;
+                                writing-mode: horizontal-tb;
+                                letter-spacing: 0px;
+                                text-overflow: ellipsis;
+                                white-space: nowrap;
+                                overflow: hidden;
+                                overflow: unset;
+                                text-overflow: unset;
+                                white-space: unset;
+                                color: unset;
+                                background-clip: text;
+                                -webkit-text-fill-color: transparent;
+                            }
+
+                            .c_1 {
+                                background-image: linear-gradient(rgb(180, 236, 81) 0%, rgb(66, 147, 33) 100%);
+                            }
+
+                            .c_2 {
+                                background-image: linear-gradient(rgb(61, 83, 231) 0%, rgb(35, 132, 255) 100%);
+                            }
+
+                            .c_3 {
+                                background-image: linear-gradient(rgb(245, 81, 95) 0%, rgb(159, 4, 27) 100%);
+                            }
+
+                            .i_right {
+                                display: flex;
+                                align-items: center;
+
+                                .car_img {
+                                    width: 319px;
+                                    height: 170px;
+                                    pointer-events: auto;
+                                    border-radius: 0px;
+                                    cursor: pointer;
+                                }
+
+                                .car_num {
+                                    width: 245px;
+                                    height: 199px;
+                                    pointer-events: auto;
+                                    display: flex;
+                                    align-items: center;
+                                    cursor: default;
+                                    background-color: initial;
+                                    border: none;
+                                    border-radius: 0px;
+                                    justify-content: center;
+                                    font-weight: bold;
+                                    font-family: "Microsoft Yahei", Arial, "sans-serif";
+                                    font-size: 72px;
+                                    writing-mode: horizontal-tb;
+                                    letter-spacing: 0px;
+                                    text-overflow: ellipsis;
+                                    white-space: nowrap;
+                                    overflow: hidden;
+                                    text-overflow: unset;
+                                    white-space: unset;
+                                    color: unset;
+                                    background-image: linear-gradient(135deg, rgb(0, 222, 255) 0%, rgb(0, 139, 255) 100%);
+                                    background-clip: text;
+                                    -webkit-text-fill-color: transparent;
+                                }
+                            }
+                        }
+                    }
+
+                    .right_content_bot {
+                        margin-top: 20px;
+                        display: flex;
+                        align-items: center;
+                        justify-content: space-between;
+
+                        .bot_chart {
+                            width: 295px;
+                            height: 295px;
+                            pointer-events: auto;
+                            border: none;
+                            border-radius: 0px;
+
+                            // background: rgb(36, 38, 45);
+                            .bot_tit {
+                                width: 100%;
+                                height: 32px;
+                                line-height: 32px;
+                                pointer-events: auto;
+                                background-color: #1D1E24;
+                                color: rgb(204, 204, 204);
+                                font-weight: bold;
+                                font-family: "Microsoft Yahei", Arial, "sans-serif";
+                                font-size: 18px;
+                                writing-mode: horizontal-tb;
+                                letter-spacing: 0px;
+                                text-overflow: ellipsis;
+                                white-space: nowrap;
+                                overflow: hidden;
+                                text-indent: 15px;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+</style>

+ 202 - 0
src/components/page/count.vue

@@ -0,0 +1,202 @@
+<template>
+  <div style="display: inline-block;">
+    <i v-for="(i,k) in displayValue" :style="{background:((bg && i!=',')?'#142137':''),marginRight:((bg && i!=',')?'11px':''),width:((bg && i!=',')?'62px':'')}">{{i}}</i>
+  </div>
+</template>
+<script>
+import { requestAnimationFrame, cancelAnimationFrame } from './requestAnimationFrame.js'
+export default {
+props: {
+  startVal: {
+    type: Number,
+    required: false,
+    default: 0
+  },
+  endVal: {
+    type: Number,
+    required: false,
+    default: 2017
+  },
+  duration: {
+    type: Number,
+    required: false,
+    default: 2000
+  },
+  autoplay: {
+    type: Boolean,
+    required: false,
+    default: true
+  },
+  decimals: {
+    type: Number,
+    required: false,
+    default: 0,
+    validator(value) {
+      return value >= 0
+    }
+  },
+  decimal: {
+    type: String,
+    required: false,
+    default: '.'
+  },
+  separator: {
+    type: String,
+    required: false,
+    default: ','
+  },
+  prefix: {
+    type: String,
+    required: false,
+    default: ''
+  },
+  suffix: {
+    type: String,
+    required: false,
+    default: ''
+  },
+  useEasing: {
+    type: Boolean,
+    required: false,
+    default: true
+  },
+  easingFn: {
+    type: Function,
+    default(t, b, c, d) {
+      return c * (-Math.pow(2, -10 * t / d) + 1) * 1024 / 1023 + b;
+    }
+  },
+  bg:{
+    type:Boolean,
+    default:false
+  }
+},
+data() {
+  return {
+    localStartVal: this.startVal,
+    displayValue: this.formatNumber(this.startVal),
+    printVal: null,
+    paused: false,
+    localDuration: this.duration,
+    startTime: null,
+    timestamp: null,
+    remaining: null,
+    rAF: null
+  };
+},
+computed: {
+  countDown() {
+    return this.startVal > this.endVal
+  }
+},
+watch: {
+  startVal() {
+    if (this.autoplay) {
+      this.start();
+    }
+  },
+  endVal() {
+    if (this.autoplay) {
+      this.start();
+    }
+  }
+},
+mounted() {
+  if (this.autoplay) {
+    this.start();
+  }
+  this.$emit('mountedCallback')
+},
+methods: {
+  start() {
+    this.localStartVal = this.startVal;
+    this.startTime = null;
+    this.localDuration = this.duration;
+    this.paused = false;
+    this.rAF = requestAnimationFrame(this.count);
+  },
+  pauseResume() {
+    if (this.paused) {
+      this.resume();
+      this.paused = false;
+    } else {
+      this.pause();
+      this.paused = true;
+    }
+  },
+  pause() {
+    cancelAnimationFrame(this.rAF);
+  },
+  resume() {
+    this.startTime = null;
+    this.localDuration = +this.remaining;
+    this.localStartVal = +this.printVal;
+    requestAnimationFrame(this.count);
+  },
+  reset() {
+    this.startTime = null;
+    cancelAnimationFrame(this.rAF);
+    this.displayValue = this.formatNumber(this.startVal);
+  },
+  count(timestamp) {
+    if (!this.startTime) this.startTime = timestamp;
+    this.timestamp = timestamp;
+    const progress = timestamp - this.startTime;
+    this.remaining = this.localDuration - progress;
+
+    if (this.useEasing) {
+      if (this.countDown) {
+        this.printVal = this.localStartVal - this.easingFn(progress, 0, this.localStartVal - this.endVal, this.localDuration)
+      } else {
+        this.printVal = this.easingFn(progress, this.localStartVal, this.endVal - this.localStartVal, this.localDuration);
+      }
+    } else {
+      if (this.countDown) {
+        this.printVal = this.localStartVal - ((this.localStartVal - this.endVal) * (progress / this.localDuration));
+      } else {
+        this.printVal = this.localStartVal + (this.endVal - this.localStartVal) * (progress / this.localDuration);
+      }
+    }
+    if (this.countDown) {
+      this.printVal = this.printVal < this.endVal ? this.endVal : this.printVal;
+    } else {
+      this.printVal = this.printVal > this.endVal ? this.endVal : this.printVal;
+    }
+
+    this.displayValue = this.formatNumber(this.printVal)
+    if (progress < this.localDuration) {
+      this.rAF = requestAnimationFrame(this.count);
+    } else {
+      this.$emit('callback');
+    }
+  },
+  isNumber(val) {
+    return !isNaN(parseFloat(val))
+  },
+  formatNumber(num) {
+    num = num.toFixed(this.decimals);
+    num += '';
+    const x = num.split('.');
+    let x1 = x[0];
+    const x2 = x.length > 1 ? this.decimal + x[1] : '';
+    const rgx = /(\d+)(\d{3})/;
+    if (this.separator && !this.isNumber(this.separator)) {
+      while (rgx.test(x1)) {
+        x1 = x1.replace(rgx, '$1' + this.separator + '$2');
+      }
+    }
+    return this.prefix + x1 + x2 + this.suffix;
+  }
+},
+destroyed() {
+  cancelAnimationFrame(this.rAF)
+}
+};
+</script>
+<style>
+i{
+  font-style: normal;
+  display: inline-block;
+  text-align: center;
+}
+</style>

+ 231 - 0
src/components/page/counts.vue

@@ -0,0 +1,231 @@
+<template>
+    <div style="display: inline-block">
+        <i :class="[bg ? 'bg' : '']"  v-for="(i,k) in zero" :key="'k'+k">0</i>
+        <i v-for="(i, k) in displayValue" :key="k" :class="[bg ? 'bg' : '']">{{ i }}</i>
+    </div>
+</template>
+<script>
+import { requestAnimationFrame, cancelAnimationFrame } from './requestAnimationFrame.js';
+export default {
+    props: {
+        startVal: {
+            type: Number,
+            required: false,
+            default: 0
+        },
+        endVal: {
+            type: Number,
+            required: false,
+            default: 2017
+        },
+        duration: {
+            type: Number,
+            required: false,
+            default: 2000
+        },
+        autoplay: {
+            type: Boolean,
+            required: false,
+            default: true
+        },
+        decimals: {
+            type: Number,
+            required: false,
+            default: 0,
+            validator(value) {
+                return value >= 0;
+            }
+        },
+        decimal: {
+            type: String,
+            required: false,
+            default: '.'
+        },
+        separator: {
+            type: String,
+            required: false,
+            default: ','
+        },
+        prefix: {
+            type: String,
+            required: false,
+            default: ''
+        },
+        suffix: {
+            type: String,
+            required: false,
+            default: ''
+        },
+        useEasing: {
+            type: Boolean,
+            required: false,
+            default: true
+        },
+        easingFn: {
+            type: Function,
+            default(t, b, c, d) {
+                return (c * (-Math.pow(2, (-10 * t) / d) + 1) * 1024) / 1023 + b;
+            }
+        },
+        length:{
+          type: [Number,null],
+          default: null
+        },
+        bg: {
+            type: Boolean,
+            default: false
+        }
+    },
+    data() {
+        return {
+            localStartVal: this.startVal,
+            displayValue: this.formatNumber(this.startVal),
+            printVal: null,
+            paused: false,
+            localDuration: this.duration,
+            startTime: null,
+            timestamp: null,
+            remaining: null,
+            rAF: null,
+            zero:[]
+        };
+    },
+    computed: {
+        countDown() {
+            return this.startVal > this.endVal;
+        }
+    },
+    watch: {
+        startVal() {
+            if (this.autoplay) {
+                this.start();
+            }
+        },
+        endVal() {
+            if (this.autoplay) {
+                this.start();
+                if (this.length) {
+                    this.zero = this.length - String(this.endVal).length > 0 ? this.length - String(this.endVal).length : 0
+                }
+            }
+        }
+    },
+    mounted() {
+        if (this.autoplay) {
+            this.start();
+        }
+        if(this.length){
+          this.zero=this.length-String(this.endVal).length>0?this.length-String(this.endVal).length:0
+        }
+        this.$emit('mountedCallback');
+    },
+    methods: {
+        start() {
+            this.localStartVal = this.startVal;
+            this.startTime = null;
+            this.localDuration = this.duration;
+            this.paused = false;
+            this.rAF = requestAnimationFrame(this.count);
+        },
+        pauseResume() {
+            if (this.paused) {
+                this.resume();
+                this.paused = false;
+            } else {
+                this.pause();
+                this.paused = true;
+            }
+        },
+        pause() {
+            cancelAnimationFrame(this.rAF);
+        },
+        resume() {
+            this.startTime = null;
+            this.localDuration = +this.remaining;
+            this.localStartVal = +this.printVal;
+            requestAnimationFrame(this.count);
+        },
+        reset() {
+            this.startTime = null;
+            cancelAnimationFrame(this.rAF);
+            this.displayValue = this.formatNumber(this.startVal);
+        },
+        count(timestamp) {
+            if (!this.startTime) this.startTime = timestamp;
+            this.timestamp = timestamp;
+            const progress = timestamp - this.startTime;
+            this.remaining = this.localDuration - progress;
+
+            if (this.useEasing) {
+                if (this.countDown) {
+                    this.printVal = this.localStartVal - this.easingFn(progress, 0, this.localStartVal - this.endVal, this.localDuration);
+                } else {
+                    this.printVal = this.easingFn(progress, this.localStartVal, this.endVal - this.localStartVal, this.localDuration);
+                }
+            } else {
+                if (this.countDown) {
+                    this.printVal = this.localStartVal - (this.localStartVal - this.endVal) * (progress / this.localDuration);
+                } else {
+                    this.printVal = this.localStartVal + (this.endVal - this.localStartVal) * (progress / this.localDuration);
+                }
+            }
+            if (this.countDown) {
+                this.printVal = this.printVal < this.endVal ? this.endVal : this.printVal;
+            } else {
+                this.printVal = this.printVal > this.endVal ? this.endVal : this.printVal;
+            }
+
+            this.displayValue = this.formatNumber(this.printVal);
+            if (progress < this.localDuration) {
+                this.rAF = requestAnimationFrame(this.count);
+            } else {
+                this.$emit('callback');
+            }
+        },
+        isNumber(val) {
+            return !isNaN(parseFloat(val));
+        },
+        formatNumber(num) {
+            num = num.toFixed(this.decimals);
+            num += '';
+            const x = num.split('.');
+            let x1 = x[0];
+            const x2 = x.length > 1 ? this.decimal + x[1] : '';
+            const rgx = /(\d+)(\d{3})/;
+            if (this.separator && !this.isNumber(this.separator)) {
+                while (rgx.test(x1)) {
+                    x1 = x1.replace(rgx, '$1' + this.separator + '$2');
+                }
+            }
+            return this.prefix + x1 + x2 + this.suffix;
+        }
+    },
+    destroyed() {
+        cancelAnimationFrame(this.rAF);
+    }
+};
+</script>
+<style lang="less" scoped>
+
+i {
+    font-style: normal;
+    display: inline-block;
+    text-align: center;
+    width: 26px;
+    font-family: FXLed;
+    font-size: 27px;
+    text-align: center;
+    line-height: 37px;
+    height: 37px;
+    color: #fff;
+    margin-right: 4px;
+}
+i:last-child {
+    margin-right: 0;
+}
+.bg {
+    background-image: url(https://ore-1302260927.cos.ap-chengdu.myqcloud.com/data_screen/image/num_bg.png);
+    background-repeat: no-repeat;
+    background-size: 100% 100%;
+}
+</style>

+ 292 - 0
src/components/page/data.js

@@ -0,0 +1,292 @@
+// 节能减排数据
+const SaveInfo = [
+    { title: '换电次数', unit: '次', value: [0, 0, 0, 7, 0, 5, 0] },
+    { title: '换电量', unit: 'kw', value: [0, 0, 7, 0, 5, 0, 0] },
+    { title: '减排量', unit: '吨', value: [0, 0, 0, 7, 0, 5, 0] }
+];
+// 换电重卡数据
+const ElectricCarData = [
+    { title: '车辆总数', unit: '辆', value: [0, 0, 0, 0, 0, 0, 0] },
+    { title: '行驶总里程数', unit: 'KM', value: [0, 0, 0, 0, 0, 0, 0] },
+    { title: '总耗电量', unit: 'kw.h', value: [0, 0, 0, 0, 0, 0, 0] },
+    { title: '总充电量', unit: 'kw.h', value: [0, 0, 0, 0, 0, 0, 0] }
+];
+// 氧化钙生产排放数据
+const CalciumOxideList = [
+    {
+        title: '1号线2#排口',
+        data: [
+            { label: 'SO2', value: '200.00 mg/m³' },
+            { label: '颗粒物(湿)', value: '4.27 mg/m³' },
+            { label: 'SO2折算', value: '173.11 mg/m³' },
+            { label: '颗粒物', value: '200.00 mg/m³' },
+            { label: 'SO2排放率', value: '1.43 kg/h' },
+            { label: '颗粒物折算', value: '3.75 mg/m³' },
+            { label: 'NOx(NO2)', value: '1.11 mg/m³' },
+            { label: '颗粒物排放率', value: '0.03 kg/h' },
+            { label: 'Nox折算', value: '1.43 mg/m³' },
+            { label: '烟气压力(表)', value: '3.75Pa' },
+            { label: 'NOx排放率', value: '1.11 kg/h' },
+            { label: '烟气湿度', value: '0.03%', error: true },
+            { label: 'O2', value: '5.97%' },
+            { label: '烟气平均流速', value: '1.63 m/s' },
+            { label: '烟气温度', value: '84.65 ℃' },
+            { label: '标干烟气流量', value: '1.99 m³/s' }
+        ]
+    },
+    {
+        title: '1号线3#排口',
+        data: [
+            { label: 'SO2', value: '200.00 mg/m³' },
+            { label: '颗粒物(湿)', value: '4.27 mg/m³' },
+            { label: 'SO2折算', value: '173.11 mg/m³' },
+            { label: '颗粒物', value: '200.00 mg/m³' },
+            { label: 'SO2排放率', value: '1.43 kg/h' },
+            { label: '颗粒物折算', value: '3.75 mg/m³' },
+            { label: 'NOx(NO2)', value: '1.11 mg/m³' },
+            { label: '颗粒物排放率', value: '0.03 kg/h' },
+            { label: 'Nox折算', value: '1.43 mg/m³' },
+            { label: '烟气压力(表)', value: '3.75Pa' },
+            { label: 'NOx排放率', value: '1.11 kg/h' },
+            { label: '烟气湿度', value: '0.03%' },
+            { label: 'O2', value: '5.97%' },
+            { label: '烟气平均流速', value: '1.63 m/s' },
+            { label: '烟气温度', value: '84.65 ℃' },
+            { label: '标干烟气流量', value: '1.99 m³/s' }
+        ]
+    },
+    {
+        title: '1号线4#排口',
+        data: [
+            { label: 'SO2', value: '200.00 mg/m³' },
+            { label: '颗粒物(湿)', value: '4.27 mg/m³' },
+            { label: 'SO2折算', value: '173.11 mg/m³' },
+            { label: '颗粒物', value: '200.00 mg/m³' },
+            { label: 'SO2排放率', value: '1.43 kg/h' },
+            { label: '颗粒物折算', value: '3.75 mg/m³' },
+            { label: 'NOx(NO2)', value: '1.11 mg/m³' },
+            { label: '颗粒物排放率', value: '0.03 kg/h' },
+            { label: 'Nox折算', value: '1.43 mg/m³' },
+            { label: '烟气压力(表)', value: '3.75Pa' },
+            { label: 'NOx排放率', value: '1.11 kg/h' },
+            { label: '烟气湿度', value: '0.03%' },
+            { label: 'O2', value: '5.97%' },
+            { label: '烟气平均流速', value: '1.63 m/s' },
+            { label: '烟气温度', value: '84.65 ℃' },
+            { label: '标干烟气流量', value: '1.99 m³/s' }
+        ]
+    },
+    {
+        title: '1号线5#排口',
+        data: [
+            { label: 'SO2', value: '200.00 mg/m³' },
+            { label: '颗粒物(湿)', value: '4.27 mg/m³' },
+            { label: 'SO2折算', value: '173.11 mg/m³' },
+            { label: '颗粒物', value: '200.00 mg/m³' },
+            { label: 'SO2排放率', value: '1.43 kg/h' },
+            { label: '颗粒物折算', value: '3.75 mg/m³' },
+            { label: 'NOx(NO2)', value: '1.11 mg/m³' },
+            { label: '颗粒物排放率', value: '0.03 kg/h' },
+            { label: 'Nox折算', value: '1.43 mg/m³' },
+            { label: '烟气压力(表)', value: '3.75Pa' },
+            { label: 'NOx排放率', value: '1.11 kg/h' },
+            { label: '烟气湿度', value: '0.03%' },
+            { label: 'O2', value: '5.97%' },
+            { label: '烟气平均流速', value: '1.63 m/s' },
+            { label: '烟气温度', value: '84.65 ℃' },
+            { label: '标干烟气流量', value: '1.99 m³/s' }
+        ]
+    },
+    {
+        title: '1号线6#排口',
+        data: [
+            { label: 'SO2', value: '200.00 mg/m³' },
+            { label: '颗粒物(湿)', value: '4.27 mg/m³' },
+            { label: 'SO2折算', value: '173.11 mg/m³' },
+            { label: '颗粒物', value: '200.00 mg/m³' },
+            { label: 'SO2排放率', value: '1.43 kg/h' },
+            { label: '颗粒物折算', value: '3.75 mg/m³' },
+            { label: 'NOx(NO2)', value: '1.11 mg/m³' },
+            { label: '颗粒物排放率', value: '0.03 kg/h' },
+            { label: 'Nox折算', value: '1.43 mg/m³' },
+            { label: '烟气压力(表)', value: '3.75Pa' },
+            { label: 'NOx排放率', value: '1.11 kg/h' },
+            { label: '烟气湿度', value: '0.03%' },
+            { label: 'O2', value: '5.97%' },
+            { label: '烟气平均流速', value: '1.63 m/s' },
+            { label: '烟气温度', value: '84.65 ℃' },
+            { label: '标干烟气流量', value: '1.99 m³/s' }
+        ]
+    }
+];
+// 分类 数据
+const typeList = [
+    {
+        id: 1,
+        label: '车辆'
+    },
+    {
+        id: 2,
+        label: '装载机械'
+    },
+    {
+        id: 3,
+        label: '矿卡'
+    },
+    {
+        id: 4,
+        label: '人员'
+    },
+    {
+        id: 5,
+        label: '水表'
+    },
+    {
+        id: 6,
+        label: '电表'
+    },
+    {
+        id: 7,
+        label: '边坡监控'
+    },
+    {
+        id: 8,
+        label: '视频监控'
+    },
+    {
+        id: 9,
+        label: '皮带称重'
+    },
+    {
+        id: 10,
+        label: '环境监测'
+    },
+    {
+        id: 11,
+        label: '无人地磅'
+    },
+    {
+        id: 12,
+        label: '排放监测'
+    }
+];
+// 能源消耗数据
+const energy_consumption = {
+    xAxis: ['11:00', '12:00', '13:00', '14:00', '15:00', '16:00', '17:00', '18:00', '19:00', '20:00', '21:00'],
+    dataSource: {
+        用电量: {
+            type: 'bar',
+            unit: 'KW/h',
+            data: [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4]
+        },
+        产电量: {
+            type: 'bar',
+            unit: 'KW/h',
+            data: [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0]
+        },
+        自然用水量: {
+            type: 'line',
+            unit: 'm³',
+            data: [12.0, 22.2, 33.3, 44.5, 36.3, 20.2, 20.3, 13.4, 23.0, 36.5, 42.0]
+        },
+        商业用水量: {
+            type: 'line',
+            unit: 'm³',
+            data: [20.3, 23.4, 23.0, 16.5, 12.0, 20.3, 23.4, 23.0, 16.5, 12.0, 39]
+        }
+    }
+};
+// 实时产量数据
+const yieldData = {
+    xAxis: ['11:00', '12:00', '13:00', '14:00', '15:00', '16:00', '17:00', '18:00', '19:00', '20:00', '21:00'],
+    dataSource: {
+        '石灰石 60mm以下': {
+            type: 'line',
+            unit: '吨',
+            data: [12.0, 22.2, 33.3, 44.5, 36.3, 20.2, 20.3, 13.4, 23.0, 36.5, 42.0]
+        },
+        '石灰石 60mm以上': {
+            type: 'line',
+            unit: '吨',
+            data: [20.3, 23.4, 23.0, 16.5, 12.0, 20.3, 23.4, 23.0, 16.5, 12.0, 39]
+        },
+        '骨料 10-20mm': {
+            type: 'line',
+            unit: '吨',
+            data: [20.3, 23.4, 23.0, 16.5, 12.0, 20.3, 23.4, 23.0, 16.5, 12.0, 39]
+        },
+        '骨料 20-30mm': {
+            type: 'line',
+            unit: '吨',
+            data: [20.3, 23.4, 23.0, 16.5, 12.0, 20.3, 23.4, 23.0, 16.5, 12.0, 39]
+        },
+        '石灰石 80mm以下': {
+            type: 'line',
+            unit: '吨',
+            data: [13.0, 23.2, 34.3, 42.5, 32.3, 22.2, 22.3, 12.4, 22.0, 26.5, 22.0]
+        },
+        '石灰石 80mm以上': {
+            type: 'line',
+            unit: '吨',
+            data: [30.3, 33.4, 33.0, 13.5, 32.0, 23.3, 33.4, 23.0, 13.5, 32.0, 33]
+        },
+        '骨料 30-40mm': {
+            type: 'line',
+            unit: '吨',
+            data: [21.3, 21.4, 13.0, 11.5, 11.0, 10.3, 13.4, 13.0, 11.5, 11.0, 19]
+        },
+        '骨料 40-50mm': {
+            type: 'line',
+            unit: '吨',
+            data: [22.3, 22.4, 22.0, 26.5, 22.0, 22.3, 22.4, 22.0, 12.5, 22.0, 29]
+        }
+    }
+};
+// 实时销量数据
+const sales_volumn_data = {
+    xAxis: ['11:00', '12:00', '13:00', '14:00', '15:00', '16:00', '17:00', '18:00', '19:00', '20:00', '21:00'],
+    dataSource: {
+        '石灰石 60mm以下': {
+            type: 'line',
+            unit: '吨',
+            data: [12.0, 22.2, 33.3, 44.5, 36.3, 20.2, 20.3, 13.4, 23.0, 36.5, 42.0]
+        },
+        '石灰石 60mm以上': {
+            type: 'line',
+            unit: '吨',
+            data: [20.3, 23.4, 23.0, 16.5, 12.0, 20.3, 23.4, 23.0, 16.5, 12.0, 39]
+        },
+        '骨料 10-20mm': {
+            type: 'line',
+            unit: '吨',
+            data: [20.3, 23.4, 23.0, 16.5, 12.0, 20.3, 23.4, 23.0, 16.5, 12.0, 39]
+        },
+        '骨料 20-30mm': {
+            type: 'line',
+            unit: '吨',
+            data: [20.3, 23.4, 23.0, 16.5, 12.0, 20.3, 23.4, 23.0, 16.5, 12.0, 39]
+        },
+        '石灰石 80mm以下': {
+            type: 'line',
+            unit: '吨',
+            data: [13.0, 23.2, 34.3, 42.5, 32.3, 22.2, 22.3, 12.4, 22.0, 26.5, 22.0]
+        },
+        '石灰石 80mm以上': {
+            type: 'line',
+            unit: '吨',
+            data: [30.3, 33.4, 33.0, 13.5, 32.0, 23.3, 33.4, 23.0, 13.5, 32.0, 33]
+        },
+        '骨料 30-40mm': {
+            type: 'line',
+            unit: '吨',
+            data: [21.3, 21.4, 13.0, 11.5, 11.0, 10.3, 13.4, 13.0, 11.5, 11.0, 19]
+        },
+        '骨料 40-50mm': {
+            type: 'line',
+            unit: '吨',
+            data: [22.3, 22.4, 22.0, 26.5, 22.0, 22.3, 22.4, 22.0, 12.5, 22.0, 29]
+        }
+    }
+};
+const data = { SaveInfo, ElectricCarData, CalciumOxideList, typeList, energy_consumption, yieldData, sales_volumn_data };
+export default data;

+ 46 - 0
src/components/page/requestAnimationFrame.js

@@ -0,0 +1,46 @@
+let lastTime = 0
+const prefixes = 'webkit moz ms o'.split(' ') // 各浏览器前缀
+
+let requestAnimationFrame
+let cancelAnimationFrame
+
+const isServer = typeof window === 'undefined'
+if (isServer) {
+  requestAnimationFrame = function() {
+    return
+  }
+  cancelAnimationFrame = function() {
+    return
+  }
+} else {
+  requestAnimationFrame = window.requestAnimationFrame
+  cancelAnimationFrame = window.cancelAnimationFrame
+  let prefix
+    // 通过遍历各浏览器前缀,来得到requestAnimationFrame和cancelAnimationFrame在当前浏览器的实现形式
+  for (let i = 0; i < prefixes.length; i++) {
+    if (requestAnimationFrame && cancelAnimationFrame) { break }
+    prefix = prefixes[i]
+    requestAnimationFrame = requestAnimationFrame || window[prefix + 'RequestAnimationFrame']
+    cancelAnimationFrame = cancelAnimationFrame || window[prefix + 'CancelAnimationFrame'] || window[prefix + 'CancelRequestAnimationFrame']
+  }
+
+  // 如果当前浏览器不支持requestAnimationFrame和cancelAnimationFrame,则会退到setTimeout
+  if (!requestAnimationFrame || !cancelAnimationFrame) {
+    requestAnimationFrame = function(callback) {
+      const currTime = new Date().getTime()
+      // 为了使setTimteout的尽可能的接近每秒60帧的效果
+      const timeToCall = Math.max(0, 16 - (currTime - lastTime))
+      const id = window.setTimeout(() => {
+        callback(currTime + timeToCall)
+      }, timeToCall)
+      lastTime = currTime + timeToCall
+      return id
+    }
+
+    cancelAnimationFrame = function(id) {
+      window.clearTimeout(id)
+    }
+  }
+}
+
+export { requestAnimationFrame, cancelAnimationFrame }

+ 1245 - 0
src/components/page/sindex copy.vue

@@ -0,0 +1,1245 @@
+<template>
+    <div class="page_index">
+        <div class="-datav-wraper" style="width: 2048px; height: 1152px; pointer-events: auto;z-index: 0;">
+            <img src="../../assets/imgs/bgimg.png" alt="" style="width: 2048px;height: 1152px;">
+        </div>
+        <div class="content">
+            <div class="topbg">
+                <div class="top">
+                    <div class="title">矿拉拉-物流集散调度中心</div>
+                </div>
+                <!-- <div class="lbtn tabbtn" :class="tabIndex == 1 ? 'lbtned' : ''" @click="changeTab(1)">运单统计</div>
+                <div class="rbtn tabbtn" :class="tabIndex == 2 ? 'rbtned' : ''" @click="changeTab(2)">运力统计</div> -->
+                <div class="times fontFx">
+                    <span class="m_10 fontMF">{{ nowWeek }}</span>
+                    <span class="m_10">{{ nowDate }}</span>
+                    {{ nowTime }}
+                </div>
+            </div>
+            <div class="b_content">
+                <div class="left" v-show="tabIndex == 1">
+                    <div class="tt fontMF">当前运力分析展示</div>
+                    <div class="carbox">
+                        <img class="carimg" src="../../assets/imgs/car_1.png" alt="">
+                        <div class="cardes">
+                            <div class="cart fontMF">累计运单</div>
+                            <div class="quantity_num">
+                                <count :startVal='0' :endVal='totalTasks' :decimals="0" />
+                                <span class="quantity_unit">车</span>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="carbox">
+                        <img class="carimg" src="../../assets/imgs/car_2.png" alt="">
+                        <div class="cardes">
+                            <div class="cart fontMF">累计装载</div>
+                            <div class="quantity_num">
+                                <count :startVal='0' :endVal='totalWeight' :decimals="0" />
+                                <span class="quantity_unit">吨</span>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="z_box">
+                        <div class="l_box">
+                            <img class="l_img" src="../../assets/imgs/c_car1.png" alt="">
+                            <div>
+                                <div class="l_tit fontMF">运行中的车辆</div>
+                                <div class="quantity_num">
+                                    <count :startVal='0' :endVal='totalRunnings' :decimals="0" />
+                                    <span class="quantity_unit">辆</span>
+                                </div>
+                            </div>
+                        </div>
+                        <div class="r_box">
+                            <div class="b_item">
+                                <img class="l_img" src="../../assets/imgs/c_car2.png" alt="">
+                                <div class="b_des">
+                                    <div class="b_tit fontMF">装载作业</div>
+                                    <div class="quantity_num">
+                                        <count :startVal='0' :endVal='totalEntry' :decimals="0" />
+                                        <span class="quantity_unit">辆</span>
+                                    </div>
+                                </div>
+                            </div>
+                            <div class="b_item" style="margin-top: 20px;">
+                                <img class="l_img" src="../../assets/imgs/c_car3.png" alt="">
+                                <div class="b_des">
+                                    <div class="b_tit fontMF">配送中</div>
+                                    <div class="quantity_num">
+                                        <count :startVal='0' :endVal='running' :decimals="0" />
+                                        <span class="quantity_unit">辆</span>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="tt fontMF" style="margin-top: 30px;">订单执行情况</div>
+                    <div class="scroll_table">
+                        <div class="thead flex">
+                            <div style="width: 28%;text-align: center;">订单号</div>
+                            <div style="width: 18%;text-align: center;">计划量/吨</div>
+                            <div style="width: 18%;text-align: center;">已装载/吨</div>
+                            <div style="width: 18%;text-align: center;">车次</div>
+                            <div style="width: 18%;text-align: center;">完成率</div>
+                        </div>
+                        <div class="tbody" style="height: 400px; overflow: hidden; position: relative;">
+                            <div
+                                class="scroll-content2"
+                                :style="{ transform: `translateY(-${scrollTop2}px)` }"
+                                ref="scrollContentRef2"
+                                @mouseenter="pauseScroll2"
+                                @mouseleave="resumeScroll2"
+                            >
+                                <div
+                                    v-for="(item, i) in orderList"
+                                    :key="i"
+                                    class="tr flex"
+                                    style="height: 40px;"
+                                >
+                                    <div class="td" style="width: 28%;text-align: center;">{{ item.order_no }}</div>
+                                    <div class="td" style="width: 18%;text-align: center;">{{ item.quantity }}</div>
+                                    <div class="td" style="width: 18%;text-align: center;">{{ item.actual_weight }}</div>
+                                    <div class="td" style="width: 18%;text-align: center;">{{ item.nums }}</div>
+                                    <div class="radio_td" style="width: 18%">
+                                        <div class="radio" :style="{ width: getRadioWidth(item.pct) }">
+                                            <div class="div"></div>
+                                        </div>
+                                        {{ item.pct }}
+                                    </div>
+                                </div>
+                                <!-- 复制一份实现无缝循环 -->
+                                <div
+                                    v-for="(item, i) in orderList"
+                                    :key="'copy-' + i"
+                                    class="tr flex"
+                                    style="height: 40px;"
+                                >
+                                    <div class="td" style="width: 28%;text-align: center;">{{ item.order_no }}</div>
+                                    <div class="td" style="width: 18%;text-align: center;">{{ item.quantity }}</div>
+                                    <div class="td" style="width: 18%;text-align: center;">{{ item.actual_weight }}</div>
+                                    <div class="td" style="width: 18%;text-align: center;">{{ item.nums }}</div>
+                                    <div class="radio_td" style="width: 18%">
+                                        <div class="radio" :style="{ width: getRadioWidth(item.pct) }">
+                                            <div class="div"></div>
+                                        </div>
+                                        {{ item.pct }}
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+                <div class="mid">
+                    <div class="mid_t">
+                        <div class="m_item">
+                            <div class="m_top">
+                                <img class="m_img" src="../../assets/imgs/dot.png" alt="">
+                                <div class="m_txt fontMF">今日运单/车</div>
+                            </div>
+                            <counts bg :startVal="0" :length="6" :endVal='Number(todayTasks)' separator="" />
+                        </div>
+                        <div class="m_item" style="margin-left: 200px;">
+                            <div class="m_top">
+                                <img class="m_img" src="../../assets/imgs/dot.png" alt="">
+                                <div class="m_txt fontMF">今日运载/吨</div>
+                            </div>
+                            <counts bg :startVal="0" :length="10" :endVal='todayWeight' separator="" />
+                        </div>
+                    </div>
+                    <div class="mid_c">
+                        <img src="../../assets/imgs/map_bg.png" alt="" class="mapbg">
+                        <div class="iframe_box">
+                            <iframe ref="iframe" id="iframe" src="https://saas.sckaiwu.cn/wyenuxmd4j.html"
+                                frameborder="0"></iframe>
+                        </div>
+                    </div>
+                    <div class="mid_b">
+                        <div class="tt fontMF">运力车次趋势分析</div>
+                        <Charts :eOption="taskTableOption" v-if="taskTableOption"
+                            style="height: 155px;position: absolute;width: 960px;" />
+                    </div>
+                </div>
+                <div class="right" v-show="tabIndex == 1">
+                    <div class="tt fontMF">运单情况展示</div>
+                    <div class="scroll_table">
+                        <div class="thead flex">
+                            <div style="width: 28%;text-align: center;">运单号</div>
+                            <div style="width: 24%;text-align: center;">车牌号</div>
+                            <div style="width: 12%;text-align: center;">车型</div>
+                            <div style="width: 18%;text-align: center;">下单量/吨</div>
+                            <div style="width: 18%;text-align: center;">当前状态</div>
+                        </div>
+                        <div class="tbody" style="height:890px; overflow: hidden; position: relative;">
+                            <div
+                                class="scroll-content"
+                                :style="{ transform: `translateY(-${scrollTop}px)` }"
+                                ref="scrollContentRef"
+                                @mouseenter="pauseScroll"
+                                @mouseleave="resumeScroll"
+                            >
+                                <div
+                                    v-for="(item, i) in orderSituationList"
+                                    :key="i"
+                                    class="tr flex"
+                                    style="height: 40px;"
+                                >
+                                    <div class="td" style="width: 28%;text-align: center;">{{ item.task_no }}</div>
+                                    <div class="td" style="width: 24%;text-align: center;">{{ item.license }}</div>
+                                    <div class="td" style="width: 12%;text-align: center;">{{ item.model }}</div>
+                                    <div class="td" style="width: 18%;text-align: center;color: #01FFFF;">{{ item.weight }}</div>
+                                    <div class="td" style="width: 18%;text-align: center;">{{ item.status }}</div>
+                                </div>
+                                <!-- 复制一份实现无缝循环 -->
+                                <div
+                                    v-for="(item, i) in orderSituationList"
+                                    :key="'copy-' + i"
+                                    class="tr flex"
+                                    style="height: 40px;"
+                                >
+                                    <div class="td" style="width: 28%;text-align: center;">{{ item.task_no }}</div>
+                                    <div class="td" style="width: 24%;text-align: center;">{{ item.license }}</div>
+                                    <div class="td" style="width: 12%;text-align: center;">{{ item.model }}</div>
+                                    <div class="td" style="width: 18%;text-align: center;color: #01FFFF;">{{ item.weight }}</div>
+                                    <div class="td" style="width: 18%;text-align: center;">{{ item.status }}</div>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+
+            </div>
+        </div>
+    </div>
+</template>
+<script setup>
+import { ref, reactive, computed, onMounted, onBeforeUnmount,defineComponent } from 'vue';
+import moment from 'moment';
+import Charts from '@/components/selfCP/charts.vue';
+import Chartsbar from '@/components/selfCP/chartsbar.vue';
+import count from './count.vue';
+import counts from './counts.vue';
+import { POST, GET } from '@/server/api/common';
+import * as echarts from "echarts";
+import { useRoute } from 'vue-router';
+import { getCurrentInstance } from 'vue';
+
+const { appContext } = getCurrentInstance();
+const $config = appContext.config.globalProperties.$config;
+
+// 注册组件
+const components = { Charts, Chartsbar, count, counts };
+
+// 响应式数据
+const nowWeek = ref('');
+const nowDate = ref('');
+const nowTime = ref('');
+const newTruck = ref(0);
+const truckH2 = ref(0);
+const truckOre = ref(0);
+const calciumOxideTimer = ref(null);
+const customerTaskOption = ref(null);
+const taskTableOption = ref(null);
+const truckRegisterOption = ref(null);
+const runningTruckTypeOption = ref(null);
+const registerTruckOption = ref(null);
+const orderSituationList = ref([]);
+const totalTasks = ref(0);
+const totalWeight = ref(0);
+const totalRunnings = ref(0);
+const totalEntry = ref(0);
+const running = ref(0);
+const todayTasks = ref(0);
+const todayWeight = ref(0);
+const orderList = ref([]);
+const barData = ref([]);
+const barData1 = ref([]);
+const tabIndex = ref(1);
+
+let newTimer = null;
+let time1 = null;
+let time2 = null;
+let mineId = ref(null);
+
+const route = useRoute();
+
+function changeTab(index) {
+  tabIndex.value = index;
+}
+
+function getNowTime() {
+  let date = new Date();
+  nowDate.value =
+    date.getFullYear() +
+    '.' +
+    (date.getMonth() + 1 >= 10 ? date.getMonth() + 1 : '0' + (date.getMonth() + 1)) +
+    '.' +
+    (date.getDate() >= 10 ? date.getDate() : '0' + date.getDate());
+  nowTime.value =
+    date.getHours() +
+    ':' +
+    (date.getMinutes() >= 10 ? date.getMinutes() : '0' + date.getMinutes()) +
+    ':' +
+    (date.getSeconds() >= 10 ? date.getSeconds() : '0' + date.getSeconds());
+  let weeks = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
+  nowWeek.value = weeks[date.getDay()];
+}
+
+function getApiUrl() {
+  getTaskList();
+  getTotalTasks();
+  getTotalWeight();
+  getTotalRunnings();
+  getTotalEntry();
+  getRunning();
+  getOrder();
+  getTodayTasks();
+  getTodayWeight();
+  getTaskTable();
+  getTruckRegister();
+  getCustomerTask();
+  getNewTruck();
+  getTruckH2();
+  getTruckOre();
+  getRunningTruckType();
+  getRegisterTruckOption();
+}
+
+function getdata() {
+  getTotalTasks();
+  getTotalWeight();
+  getTotalRunnings();
+  getTotalEntry();
+  getRunning();
+  getTodayTasks();
+  getTodayWeight();
+  getNewTruck();
+  getTruckH2();
+  getTruckOre();
+}
+
+function getdatas() {
+  getTaskList();
+  getOrder();
+  getTaskTable();
+  getTruckRegister();
+  getCustomerTask();
+  getRunningTruckType();
+  getRegisterTruckOption();
+}
+
+function getTaskList() {
+  GET($config.taskList.url).then((res) => {
+    orderSituationList.value = res.data;
+    console.log(orderSituationList.value);
+  });
+}
+function getTotalTasks() {
+  GET($config.totalTasks.url).then((res) => {
+    totalTasks.value = res.data[0].value;
+  });
+}
+function getTotalWeight() {
+  GET($config.totalWeight.url).then((res) => {
+    totalWeight.value = res.data[0].value;
+  });
+}
+function getTotalRunnings() {
+  GET($config.totalRunnings.url).then((res) => {
+    totalRunnings.value = res.data[0].value;
+  });
+}
+function getTotalEntry() {
+  GET($config.totalEntry.url).then((res) => {
+    totalEntry.value = res.data[0].value;
+  });
+}
+function getRunning() {
+  GET($config.running.url).then((res) => {
+    running.value = res.data[0].value;
+  });
+}
+function getOrder() {
+  GET($config.order.url).then((res) => {
+    orderList.value = res.data;
+  });
+}
+function getTodayTasks() {
+  GET($config.todayTasks.url).then((res) => {
+    todayTasks.value = res.data[0].value;
+  });
+}
+function getTodayWeight() {
+  GET($config.todayWeight.url).then((res) => {
+    todayWeight.value = res.data[0].value;
+  });
+}
+function getCustomerTask() {
+  GET($config.customerTask.url).then((res) => {
+    if (res.status == 200) {
+      let dataList = res.data;
+      var colorList = ['#0A73FF'];
+      customerTaskOption.value = {
+        tooltip: { show: false },
+        legend: { show: false },
+        grid: { left: 0, right: '5%', top: '5%', bottom: '2%', containLabel: true },
+        xAxis: { show: false, type: 'value' },
+        yAxis: [{
+          type: 'category',
+          inverse: true,
+          axisLine: { show: false },
+          axisTick: { show: false },
+          axisPointer: { label: { show: true, margin: 30 } },
+          data: dataList.map(item => item.content),
+          axisLabel: {
+            margin: 50,
+            fontSize: 14,
+            align: 'left',
+            color: '#333',
+            rich: {
+              a1: { color: '#fff', backgroundColor: colorList[0], width: 30, height: 30, align: 'center', borderRadius: 2 },
+              a2: { color: '#fff', backgroundColor: colorList[0], width: 30, height: 30, align: 'center', borderRadius: 2 },
+              a3: { color: '#fff', backgroundColor: colorList[0], width: 30, height: 30, align: 'center', borderRadius: 2 },
+              b: { color: '#fff', backgroundColor: colorList[0], width: 30, height: 30, align: 'center', borderRadius: 2 }
+            },
+            formatter: function (params) {
+              var index = dataList.map(item => item.content).indexOf(params);
+              index = index + 1;
+              if (index - 1 < 3) {
+                return [ '{a' + index + '|' + index + '}' ].join('\n')
+              } else {
+                return [ '{b|' + index + '}' ].join('\n')
+              }
+            }
+          }
+        }],
+        series: [{
+          z: 2,
+          name: 'value',
+          type: 'bar',
+          barCategoryGap: '40%',
+          barGap: 5,
+          barWidth: 30,
+          itemStyle: {
+            normal: {
+              barBorderRadius: 0,
+              color: new echarts.graphic.LinearGradient(1, 0, 0, 0, [
+                { offset: 0, color: '#16C8FB' },
+                { offset: 1, color: '#0958D2' },
+              ]),
+            },
+          },
+          data: dataList.map((item, i) => ({ value: item.value })),
+          label: {
+            normal: {
+              color: '#666',
+              show: true,
+              position: [20, 0],
+              textStyle: { fontSize: 12, color: '#fff', lineHeight: 30 },
+              formatter: function (a, b) { return a.name }
+            }
+          }
+        }]
+      };
+    }
+  });
+}
+function getTaskTable() {
+  GET($config.taskTable.url).then((res) => {
+    if (res.status == 200) {
+      let dataList = res.data;
+      let xAxis = [];
+      let yAxis = [];
+      dataList.forEach((item) => {
+        xAxis.push(item.date);
+        yAxis.push(item.nums);
+      });
+      taskTableOption.value = {
+        grid: { top: 10, left: 30, right: 30, bottom: 40, itemGap: 25, itemWidth: 18, containLabel: true },
+        tooltip: { show: false },
+        xAxis: [{
+          type: 'category',
+          boundaryGap: false,
+          axisLabel: { interval: 20, formatter: '{value}', fontSize: 14, margin: 10, textStyle: { color: '#616161' } },
+          axisLine: { lineStyle: { width: 3, color: '#616161' } },
+          splitLine: { interval: 15, show: true, lineStyle: { color: '#243753' } },
+          axisTick: { show: false },
+          data: xAxis,
+        }],
+        yAxis: [{
+          boundaryGap: false,
+          type: 'value',
+          axisLabel: { textStyle: { color: '#616161' } },
+          nameTextStyle: { color: '#fff', fontSize: 12, lineHeight: 40 },
+          splitLine: { lineStyle: { color: '#243753' } },
+          axisLine: { show: true, lineStyle: { width: 3, color: '#616161' } },
+          axisTick: { show: false },
+        }],
+        series: [{
+          name: '',
+          type: 'line',
+          smooth: true,
+          showSymbol: true,
+          symbolSize: 2,
+          zlevel: 3,
+          itemStyle: { color: '#19a3df', borderColor: '#a3c8d8' },
+          lineStyle: { normal: { width: 1, color: '#19a3df' } },
+          areaStyle: { normal: { color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ { offset: 0, color: 'rgba(15, 125, 228,1)' }, { offset: 0.8, color: 'rgba(15, 125, 228,0.4)' } ], false) } },
+          data: yAxis,
+        }],
+      };
+    }
+  });
+}
+function getTruckRegister() {
+  GET($config.truckRegister.url).then((res) => {
+    let dataList = res.data;
+    let xAxis = [];
+    let arr1 = [];
+    let arr2 = [];
+    let arr3 = [];
+    dataList.forEach((item) => {
+      if (item.s == 1) {
+        xAxis.push(item.date);
+        arr1.push(item.y);
+      }
+      if (item.s == 2) {
+        arr2.push(item.y);
+      }
+      if (item.s == 3) {
+        arr3.push(item.y);
+      }
+    });
+    truckRegisterOption.value = {
+      backgroundColor: 'transparent',
+      tooltip: { show: false },
+      legend: { data: ['传统能源', '氢能源', '新能源'], align: 'right', right: 10, textStyle: { color: "#fff" }, top: 20, itemWidth: 10, itemHeight: 10, itemGap: 35 },
+      grid: { left: '3%', right: '4%', bottom: '3%', containLabel: true },
+      xAxis: [{ type: 'category', data: xAxis, axisLine: { show: true, lineStyle: { color: "#616161", width: 1, type: "solid" } }, axisTick: { show: false }, axisLabel: { show: true, textStyle: { color: "#616161" } } }],
+      yAxis: [{ type: 'value', axisLabel: { formatter: '{value}', textStyle: { color: "#616161" } }, axisTick: { show: false }, axisLine: { show: false, lineStyle: { color: "#616161", width: 1, type: "solid" } }, splitLine: { lineStyle: { color: "#616161" } } }],
+      series: [
+        { name: '传统能源', type: 'bar', data: arr1, barWidth: 10, barGap: 0, showBackground: false, label: { normal: { show: false, position: "top", distance: 20, formatter: function (params) { return params.data.value; }, textStyle: { color: "#fff", fontSize: 12 } } }, itemStyle: { normal: { color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ offset: 0, color: '#3A93FF' }, { offset: 1, color: '#3A93FF' }]), opacity: 1 } } },
+        { name: '氢能源', type: 'bar', data: arr2, barWidth: 10, barGap: 0, showBackground: false, label: { normal: { show: false, position: "top", distance: 20, formatter: function (params) { return params.data.value; }, textStyle: { color: "#fff", fontSize: 12 } } }, itemStyle: { normal: { color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ offset: 0, color: '#01FF49' }, { offset: 1, color: '#01FF49' }]), opacity: 1 } } },
+        { name: '新能源', type: 'bar', data: arr3, barWidth: 10, barGap: 0, showBackground: false, label: { normal: { show: false, position: "top", distance: 20, formatter: function (params) { return params.data.value; }, textStyle: { color: "#fff", fontSize: 12 } } }, itemStyle: { normal: { color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ offset: 0, color: '#01FFFF' }, { offset: 1, color: '#01FFFF' }]), opacity: 1 } } }
+      ]
+    };
+  });
+}
+function getNewTruck() {
+  GET($config.newTruck.url).then((res) => {
+    if (res.status == 200) {
+      newTruck.value = res.data[0].value;
+    }
+  });
+}
+function getTruckH2() {
+  GET($config.truckH2.url).then((res) => {
+    if (res.status == 200) {
+      truckH2.value = res.data[0].value;
+    }
+  });
+}
+function getTruckOre() {
+  GET($config.truckOre.url).then((res) => {
+    if (res.status == 200) {
+      truckOre.value = res.data[0].value;
+    }
+  });
+}
+function getRunningTruckType() {
+  GET($config.runningTruckType.url).then((res) => {
+    if (res.status == 200) {
+      let dataList = res.data;
+      let arr = [];
+      let num = 0;
+      dataList.forEach(item => {
+        item.name = item.type;
+        num = num + item.value;
+        arr.push(item.value);
+      });
+      let pie = Number(dataList[0].value / num * 100).toFixed(0);
+      barData.value = dataList;
+      runningTruckTypeOption.value = {
+        color: ['#F52E5A', '#37FDA3', '#FFA523', '#3779FD', '#4CFFE6'],
+        legend: { data: ['六轴', '五轴', '四轴', '三轴', '二轴'], show: true, align: 'left', bottom: 10, textStyle: { color: "#fff" }, itemWidth: 10, itemHeight: 10, itemGap: 4 },
+        grid: { top: '10%', left: '0%', right: '5%', bottom: '0%', containLabel: true },
+        title: [
+          { text: dataList[0].name, x: "center", top: "57%", textStyle: { color: "#FFFFFF", fontSize: 22, fontWeight: "600" } },
+          { text: pie + '%', x: "center", y: "center", textStyle: { fontSize: 40, color: "#FFFFFF", fontFamily: "DINAlternate-Bold, DINAlternate", foontWeight: "600" } }
+        ],
+        backgroundColor: "transparent",
+        polar: { radius: ["70%", "76%"], center: ["50%", "50%"] },
+        angleAxis: { max: 100, show: false },
+        radiusAxis: { type: "category", show: true, axisLabel: { show: false }, axisLine: { show: false }, axisTick: { show: false } },
+        series: [{ name: '', type: 'pie', radius: ['60%', '70%'], avoidLabelOverlap: false, label: { show: false, position: 'center' }, emphasis: { label: { show: false, fontSize: '85', fontWeight: 'bold' } }, labelLine: { show: false }, data: dataList }],
+      }
+    }
+  });
+}
+function getRegisterTruckOption() {
+  GET($config.registerTruckOption.url).then((res) => {
+    if (res.status == 200) {
+      let dataList = res.data;
+      let arr = [];
+      let num = 0;
+      dataList.forEach(item => {
+        item.name = item.type;
+        num = num + item.value;
+        arr.push(item.value);
+      });
+      let pie = Number(dataList[0].value / num * 100).toFixed(0);
+      barData1.value = dataList;
+      registerTruckOption.value = {
+        legend: { data: ['六轴', '五轴', '四轴', '三轴', '二轴'], show: true, align: 'left', bottom: 0, textStyle: { color: "#fff" }, itemWidth: 10, itemHeight: 10, itemGap: 4 },
+        color: ['#F52E5A', '#37FDA3', '#FFA523', '#3779FD', '#4CFFE6'],
+        grid: { top: '10%', left: '0%', right: '5%', bottom: '0%', containLabel: true },
+        title: [
+          { text: dataList[0].name, x: "center", top: "57%", textStyle: { color: "#FFFFFF", fontSize: 22, fontWeight: "600" } },
+          { text: pie + '%', x: "center", y: "center", textStyle: { fontSize: 40, color: "#FFFFFF", fontFamily: "DINAlternate-Bold, DINAlternate", foontWeight: "600" } }
+        ],
+        backgroundColor: "transparent",
+        polar: { radius: ["70%", "76%"], center: ["50%", "50%"] },
+        angleAxis: { max: 100, show: false },
+        radiusAxis: { type: "category", show: true, axisLabel: { show: false }, axisLine: { show: false }, axisTick: { show: false } },
+        series: [{ name: '', type: 'pie', radius: ['60%', '70%'], avoidLabelOverlap: false, label: { show: false, position: 'center' }, emphasis: { label: { show: false, fontSize: '85', fontWeight: 'bold' } }, labelLine: { show: false }, data: dataList }],
+      }
+    }
+  });
+}
+function getRadioWidth(pct) {
+  let width = (76 / 100) * parseFloat(pct);
+  return width + 'px';
+}
+
+const scrollTop = ref(0);
+const scrollContentRef = ref(null);
+let scrollTimer = null;
+const rowHeight = 40; // 单行高度,和上面style一致
+let pause = false;
+
+function startScroll() {
+  if (scrollTimer) clearInterval(scrollTimer);
+  scrollTimer = setInterval(() => {
+    if (pause) return;
+    scrollTop.value += 1;
+    // 滚动到一半(即原始数据高度)后重置
+    if (orderSituationList.value.length > 0 && scrollTop.value >= rowHeight * orderSituationList.value.length) {
+      scrollTop.value = 0;
+    }
+  }, 30); // 速度可调
+}
+
+function pauseScroll() {
+  pause = true;
+}
+function resumeScroll() {
+  pause = false;
+}
+
+const scrollTop2 = ref(0);
+const scrollContentRef2 = ref(null);
+let scrollTimer2 = null;
+const rowHeight2 = 40;
+let pause2 = false;
+
+function startScroll2() {
+  if (scrollTimer2) clearInterval(scrollTimer2);
+  scrollTimer2 = setInterval(() => {
+    if (pause2) return;
+    scrollTop2.value += 1;
+    if (orderList.value.length > 0 && scrollTop2.value >= rowHeight2 * orderList.value.length) {
+      scrollTop2.value = 0;
+    }
+  }, 30);
+}
+
+function pauseScroll2() {
+  pause2 = true;
+}
+function resumeScroll2() {
+  pause2 = false;
+}
+
+onMounted(() => {
+  getNowTime();
+  newTimer = setInterval(getNowTime, 1000);
+  if (route.query && route.query.companyId) {
+    mineId.value = route.query.companyId;
+  }
+  getApiUrl();
+  moment.locale('zh-cn');
+  clearInterval(time1);
+  clearInterval(time2);
+  time1 = setInterval(getdata, $config.time * 1000);
+  time2 = setInterval(getdatas, $config.time1 * 1000);
+  startScroll();
+  startScroll2();
+});
+
+onBeforeUnmount(() => {
+  clearInterval(newTimer);
+  newTimer = null;
+  clearInterval(calciumOxideTimer.value);
+  calciumOxideTimer.value = null;
+  if (scrollTimer) clearInterval(scrollTimer);
+  if (scrollTimer2) clearInterval(scrollTimer2);
+});
+
+
+
+</script>
+<style lang="less" scoped>
+@font-face {
+    font-family: MFLiHei;
+    src: url('./font/MFLiHei_Noncommercial-Regular.otf') format('opentype');
+}
+
+@font-face {
+    font-family: FXLed;
+    src: url('./font/DSDIGI1.ttf');
+}
+
+.fontMF {
+    font-family: MFLiHei;
+}
+
+.fontFx {
+    font-family: FXLed;
+}
+
+.flex {
+    display: flex;
+    align-items: center;
+}
+
+.MR40 {
+    margin-right: 40px;
+}
+
+.m_10 {
+    margin-right: 10px;
+}
+
+.page_index {
+    width: 100%;
+    height: 100%;
+    overflow: hidden;
+    position: relative;
+
+    .content {
+        position: absolute;
+        top: 0;
+        left: 0;
+        height: 100%;
+        z-index: 1;
+        width: 100%;
+        padding: 0px;
+
+        .topbg {
+            width: 2048px;
+            height: 113px;
+            z-index: 0;
+            transform: rotate(0deg);
+            opacity: 1;
+            // pointer-events: none;
+            position: relative;
+        }
+
+        .top {
+            position: absolute !important;
+            margin: 0 !important;
+            width: 2048px;
+            height: 113px;
+            display: flex;
+            justify-content: space-between;
+            background-image: url(../../assets/imgs/title_bg.png);
+            background-repeat: no-repeat;
+            background-size: 100% 100%;
+
+            .title {
+                text-align: center;
+                line-height: 25px;
+                flex: 1;
+                padding: 25px 0;
+                pointer-events: auto;
+                color: rgb(255, 255, 255);
+                font-weight: bold;
+                font-family: "Microsoft Yahei", Arial, "sans-serif";
+                font-size: 40px;
+                writing-mode: horizontal-tb;
+                letter-spacing: 0px;
+                text-overflow: ellipsis;
+                white-space: nowrap;
+                overflow: hidden;
+            }
+        }
+
+        .tabbtn {
+            position: absolute;
+            width: 257px;
+            height: 39px;
+            background-size: 100% 100%;
+            background-repeat: no-repeat;
+            font-family: MF LiHei;
+            font-weight: 400;
+            font-size: 18px;
+            color: #FFFFFF;
+            line-height: 39px;
+            text-align: center;
+            cursor: pointer;
+        }
+
+        .lbtn {
+            background-image: url(../../assets/imgs/tab_l.png);
+            left: 270px;
+            top: 15px;
+            text-indent: 40px;
+        }
+
+        .lbtned {
+            background-image: url(../../assets/imgs/tab_led.png);
+        }
+
+        .rbtn {
+            background-image: url(../../assets/imgs/tab_r.png);
+            right: 270px;
+            top: 15px;
+            text-indent: -30px;
+        }
+
+        .rbtned {
+            background-image: url(../../assets/imgs/tab_red.png);
+        }
+
+        .times {
+            position: fixed;
+            right: 50px;
+            height: 30px;
+            line-height: 30px;
+            font-size: 16px;
+            top: 8px;
+            color: #fff;
+        }
+
+        .b_content {
+            display: flex;
+            justify-content: center;
+
+            .left {
+                width: 484px;
+                height: 1010px;
+                background-image: url(../../assets/imgs/left_bg.png);
+                background-size: 100% 100%;
+                background-repeat: no-repeat;
+                padding: 20px;
+                box-sizing: border-box;
+
+                .quantity_num {
+                    color: #FFFFFF;
+                    font-size: 28px;
+                    font-weight: bold;
+                    letter-spacing: 0;
+                    display: flex;
+                    align-items: baseline;
+
+                    .quantity_name {
+                        font-size: 16px;
+                        margin-right: 8px;
+                    }
+
+                    .quantity_unit {
+                        margin-left: 8px;
+                        font-size: 14px;
+                        color: #FFFFFF;
+                        font-weight: bolder;
+                        vertical-align: super;
+                        font-family: Microsoft Yahei;
+                    }
+                }
+
+                .tt {
+                    width: 313px;
+                    height: 24px;
+                    background-image: url(../../assets/imgs/tits_bg.png);
+                    background-size: 100% 100%;
+                    background-repeat: no-repeat;
+                    font-weight: 400;
+                    font-size: 18px;
+                    color: #FFFFFF;
+                    text-indent: 25px;
+                    margin-top: 10px;
+                    line-height: 15px;
+                }
+
+                .carbox {
+                    display: flex;
+                    align-items: center;
+                    padding-left: 40px;
+                    margin-top: 30px;
+
+                    .carimg {
+                        width: 97px;
+                        height: 88px;
+                    }
+
+                    .cardes {
+                        margin-left: 35px;
+
+                        .cart {
+                            font-weight: 400;
+                            font-size: 18px;
+                            color: #FFFFFF;
+                        }
+                    }
+                }
+
+                .z_box {
+                    margin-top: 30px;
+                    display: flex;
+                    align-items: center;
+
+                    .l_box {
+                        width: 190px;
+                        height: 160px;
+                        background: rgba(255, 255, 255, 0.1);
+                        display: flex;
+                        flex-flow: column;
+                        justify-content: center;
+                        align-items: center;
+
+                        .l_img {
+                            width: 156px;
+                            height: 86px;
+                        }
+
+                        .l_tit {
+                            font-weight: 400;
+                            font-size: 16px;
+                            color: #FFFFFF;
+                        }
+
+                    }
+
+                    .r_box {
+                        margin-left: 20px;
+
+                        .b_item {
+                            width: 200px;
+                            height: 70px;
+                            background: rgba(255, 255, 255, 0.1);
+                            display: flex;
+                            align-items: center;
+
+                            // justify-content: center;
+                            .l_img {
+                                width: 108px;
+                                height: 59px;
+                                margin-left: -20px;
+                            }
+
+                            .b_des {
+                                margin-left: 16px;
+
+                                .b_tit {
+                                    font-weight: 400;
+                                    font-size: 16px;
+                                    color: #FFFFFF;
+                                }
+                            }
+                        }
+                    }
+                }
+
+                .scroll_table {
+                    width: 420px;
+                    margin: 0 auto;
+                    margin-top: 20px;
+                    height: 360px;
+
+                    .thead {
+                        background-color: rgb(0, 80, 179);
+                        color: #ffffff;
+                    }
+
+                    .tbody {
+                        .seamless-warp {
+                            overflow: hidden;
+                            height: 360px;
+                            // height: 390px;
+                            width: 100%;
+                        }
+                    }
+
+                    th {
+                        text-align: left;
+                        font-size: 12px;
+                        font-weight: 400;
+                        color: #ffffff;
+                        line-height: 30px;
+                        // background-color: rgb(0, 80, 179);
+                    }
+
+                    .td {
+                        font-size: 12px;
+                        font-weight: 400;
+                        color: #ffffff;
+                        line-height: 30px;
+                    }
+
+                    .tr:nth-child(2n+1) {
+                        // background-color: #032255;
+                        background-color: rgba(255, 255, 255, 0.1);
+                    }
+
+                    .radio_td {
+                        display: flex;
+                        align-items: center;
+                        color: #ffffff;
+                        font-size: 12px;
+
+                        .radio {
+                            position: relative;
+                            min-width: 6px;
+                            height: 10px;
+                            background: linear-gradient(90deg, #29abe3, #01ffff);
+                            margin-right: 4px;
+
+                            .div {
+                                width: 6px;
+                                height: 16px;
+                                background: #ffffff;
+                                position: absolute;
+                                top: -3px;
+                                right: 0;
+                            }
+                        }
+                    }
+                }
+
+                .nitem {
+                    display: flex;
+                    align-items: center;
+
+                    .nimg {
+                        width: 216px;
+                        height: 122px;
+                        position: relative;
+                        z-index: 2;
+                    }
+
+                    .ndes {
+                        width: 220px;
+                        height: 70px;
+                        background: rgba(255, 255, 255, 0.1);
+                        display: flex;
+                        margin-left: -50px;
+                        position: relative;
+                        z-index: 1;
+                    }
+
+                    .mc {
+                        margin-left: 30px;
+                        margin-top: 24px;
+                    }
+                }
+            }
+        }
+
+        .mid {
+            .mid_t {
+                width: 1018px;
+                height: 138px;
+                background-image: url(../../assets/imgs/mid_tbg.png);
+                background-size: 100% 100%;
+                background-repeat: no-repeat;
+                display: flex;
+                align-items: center;
+                justify-content: center;
+
+                .m_item {
+                    display: flex;
+                    flex-flow: column;
+                    align-items: center;
+
+                    .m_top {
+                        display: flex;
+                        align-items: center;
+                        margin-bottom: 12px;
+
+                        .m_img {
+                            width: 20px;
+                            height: 20px;
+                        }
+
+                        .m_txt {
+                            margin-left: 8px;
+                            font-weight: 500;
+                            font-size: 18px;
+                            color: #FFFFFF;
+                        }
+                    }
+                }
+            }
+
+            .mid_c {
+                margin-top: 14px;
+                width: 1018px;
+                height: 658px;
+                // width: 1018px;
+                // height: 658px;
+                // background-image: url(../../assets/imgs/map_bg.png);
+                // background-size: 100% 100%;
+                // background-repeat: no-repeat;
+                // margin-top: 14px;
+                position: relative;
+
+                .mapbg {
+                    width: 1018px;
+                    height: 658px;
+                    position: absolute;
+                    z-index: 1;
+                    pointer-events: none;
+                }
+
+                .iframe_box {
+                    position: absolute;
+                    // background-image: url(../../assets/img/iframe_bg.png);
+                    // background-repeat: no-repeat;
+                    // background-size: 100% 100%;
+                    overflow: hidden;
+
+                    #iframe {
+                        // margin: 10px 12px;
+                        margin: 0 auto;
+                        margin-left: 10px;
+                        margin-top: 10px;
+                        width: 998px;
+                        height: 638px;
+                        z-index: 0;
+                        // border-radius: 30px;
+                    }
+                }
+            }
+
+            .mid_b {
+                padding: 20px;
+                box-sizing: border-box;
+                width: 1018px;
+                height: 190px;
+                background-image: url(../../assets/imgs/mid_bbg.png);
+                background-size: 100% 100%;
+                background-repeat: no-repeat;
+                margin-top: 10px;
+
+                .tt {
+                    width: 313px;
+                    height: 24px;
+                    background-image: url(../../assets/imgs/tits_bg.png);
+                    background-size: 100% 100%;
+                    background-repeat: no-repeat;
+                    font-weight: 400;
+                    font-size: 18px;
+                    color: #FFFFFF;
+                    text-indent: 25px;
+                    line-height: 15px;
+                    margin-top: 10px;
+                    margin-left: 10px;
+                }
+            }
+        }
+
+        .right {
+            width: 484px;
+            height: 1010px;
+            background-image: url(../../assets/imgs/right_bg.png);
+            background-size: 100% 100%;
+            background-repeat: no-repeat;
+            padding: 30px;
+            box-sizing: border-box;
+
+            .tt {
+                width: 313px;
+                height: 24px;
+                background-image: url(../../assets/imgs/tits_bg.png);
+                background-size: 100% 100%;
+                background-repeat: no-repeat;
+                font-weight: 400;
+                font-size: 18px;
+                color: #FFFFFF;
+                text-indent: 25px;
+                line-height: 15px;
+                margin-top: 10px;
+                margin-left: 10px;
+            }
+
+            .scroll_table {
+                width: 424px;
+                margin: 0 auto;
+
+                .thead {
+                    background-color: rgb(0, 80, 179);
+                    color: #fff;
+                }
+
+                .tbody {
+                    .seamless-warp {
+                        overflow: hidden;
+                        height: 900px;
+                        width: 424px;
+                    }
+                }
+
+                th {
+                    text-align: left;
+                    font-size: 12px;
+                    font-weight: 400;
+                    color: #ffffff;
+                    line-height: 30px;
+                }
+
+                .td {
+                    font-size: 12px;
+                    font-weight: 400;
+                    color: #ffffff;
+                    line-height: 30px;
+                }
+
+                .tr:nth-child(even) {
+                    background-color: rgba(255, 255, 255, 0.1);
+                    // background-color: rgba(255, 255, 255, 0.399);
+                }
+
+                .radio_td {
+                    display: flex;
+                    align-items: center;
+                    font-size: 12px;
+
+                    .radio {
+                        position: relative;
+                        min-width: 6px;
+                        height: 10px;
+                        background: linear-gradient(90deg, #29abe3, #01ffff);
+                        margin-right: 4px;
+
+                        .div {
+                            width: 6px;
+                            height: 16px;
+                            background: #ffffff;
+                            position: absolute;
+                            top: -3px;
+                            right: 0;
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+.scroll-content {
+  transition: transform 0.1s linear;
+  will-change: transform;
+}
+.scroll-content2 {
+  transition: transform 0.1s linear;
+  will-change: transform;
+}
+</style>

+ 1444 - 0
src/components/page/sindex.vue

@@ -0,0 +1,1444 @@
+<template>
+    <div class="page_index">
+        <div class="-datav-wraper" style="width: 2048px; height: 1152px; pointer-events: auto;z-index: 0;">
+            <img src="../../assets/imgs/bgimg.png" alt="" style="width: 2048px;height: 1152px;">
+        </div>
+        <div class="content">
+            <div class="topbg">
+                <div class="top">
+                    <div class="title fontMF">电氢智运-物流集散调度中心</div>
+                </div>
+
+                <div class="times fontFx">
+                    <span class="m_10 fontMF">{{ nowWeek }}</span>
+                    <span class="m_10">{{ nowDate }}</span>
+                    {{ nowTime }}
+                </div>
+            </div>
+            <div class="b_content">
+                <div class="left">
+                    <div class="tt fontMF">当前运力分析展示</div>
+                    <div class="settledEnterprise">
+                        <img src="../../assets/enterprise.png" alt="" class="enterprise_img">
+                        <p class="title">入驻企业</p>
+                        <div class="number">
+                            <counts bg :startVal="0" :length="6" :endVal='6923' separator="" /><span>家</span>
+                        </div>
+                    </div>
+                    <div class="rightcontentitem1">
+                        <div class="num">
+                            <count :startVal='0' :endVal='totalTasks' :decimals="0" />
+                            <p>入驻车辆/辆</p>
+                        </div>
+                        <div class="num">
+                            <count :startVal='0' :endVal='totalTasks' :decimals="0" />
+                            <p>入驻无人车辆</p>
+                        </div>
+                    </div>
+                    <div class="rightcontentitem2">
+                        <div class="num">
+                            <count :startVal='0' :endVal='totalTasks' :decimals="0" />
+                            <p>入驻司机/人</p>
+                        </div>
+                        <div class="num">
+                            <count :startVal='0' :endVal='totalTasks' :decimals="0" />
+                            <p>平台磅秤/座</p>
+                        </div>
+                    </div>
+                    <div class="tt fontMF">客户列表展示</div>
+                    <div class="scroll_table">
+                        <div class="thead flex" style="padding-left: 28px;">
+                            <div style="width: 20%;text-align: center;">客户类型</div>
+                            <div style="width: 20%;text-align: center;">使用次数</div>
+                            <div style="width: 20%;text-align: center;">货物运输量</div>
+                            <div style="width: 20%;text-align: center;">服务车辆数</div>
+                            <div style="width: 20%;text-align: center;">车辆运营时长</div>
+                        </div>
+                        <div class="tbody" style="height:480px; overflow: hidden; position: relative;">
+                            <div class="scroll-content new-scroll-content"
+                                :style="{ transform: `translateY(-${scrollTop}px)` }" ref="scrollContentRef"
+                                @mouseenter="pauseScroll" @mouseleave="resumeScroll">
+                                <div v-for="(item, i) in orderSituationList" :key="i" class="tr flex"
+                                    style="height: 28px;display: flex;">
+                                    <div class="rank">{{ i + 1 }}</div>
+                                    <div class="flex-row">
+                                        <div class="td" style="width: 20%;text-align: center;">货主</div>
+                                        <div class="td" style="width: 20%;text-align: center;">1,000次</div>
+                                        <div class="td" style="width: 20%;text-align: center;">9,0000吨</div>
+                                        <div class="td" style="width: 20%;text-align: center;">500辆</div>
+                                        <div class="td" style="width: 20%;text-align: center;">3447h</div>
+                                    </div>
+                                </div>
+                                <div v-for="(item, i) in orderSituationList" :key="'copy-' + i" class="tr flex"
+                                    style="height: 28px;">
+                                    <div class="rank">{{ i + 1 }}</div>
+                                    <div class="flex-row">
+                                        <div class="td" style="width: 20%;text-align: center;">货主</div>
+                                        <div class="td" style="width: 20%;text-align: center;">1,000次</div>
+                                        <div class="td" style="width: 20%;text-align: center;">9,0000吨</div>
+                                        <div class="td" style="width: 20%;text-align: center;">500辆</div>
+                                        <div class="td" style="width: 20%;text-align: center;">3447h</div>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+
+                </div>
+                <div class="mid">
+                    <div class="mid_t">
+                        <div class="m_item">
+                            <div class="m_top">
+                                <img class="m_img" src="../../assets/imgs/dot.png" alt="">
+                                <div class="m_txt fontMF">累计运单/车</div>
+                            </div>
+                            <counts bg :startVal="0" :length="6" :endVal='Number(78236)' separator="" />
+                        </div>
+                        <div class="m_item">
+                            <div class="m_top">
+                                <img class="m_img" src="../../assets/imgs/dot.png" alt="">
+                                <div class="m_txt fontMF">累计运载/吨</div>
+                            </div>
+                            <counts bg :startVal="0" :length="6" :endVal='6923' separator="" />
+                        </div>
+                        <div class="m_item">
+                            <div class="m_top">
+                                <img class="m_img" src="../../assets/imgs/dot.png" alt="">
+                                <div class="m_txt fontMF">配送中车辆数/辆</div>
+                            </div>
+                            <counts bg :startVal="0" :length="6" :endVal='5923' separator="" />
+                        </div>
+                    </div>
+                    <div class="mid_c">
+                        <img src="../../assets/imgs/map_bg.png" alt="" class="mapbg">
+                        <div class="iframe_box">
+                            <iframe ref="iframe" id="iframe" src="https://saas.sckaiwu.cn/wyenuxmd4j.html"
+                                frameborder="0"></iframe>
+                        </div>
+                    </div>
+                </div>
+                <div class="right">
+                    <div class="tt fontMF" style="margin-top: 0px;margin-left: 0 !important;">车辆入驻统计</div>
+                    <div >
+                        <Charts :eOption="vehicleStatsOption" v-if="vehicleStatsOption" style="height: 424px; width: 450px;" />
+                    </div>
+                    <div class="tt fontMF" style="margin-top: 30px;margin-left: 0 !important;">订单执行情况</div>
+                    <div class="scroll_table">
+                        <div class="thead flex">
+                            <div style="width: 28%;text-align: center;">订单号</div>
+                            <div style="width: 18%;text-align: center;">计划量/吨</div>
+                            <div style="width: 18%;text-align: center;">已装载/吨</div>
+                            <div style="width: 18%;text-align: center;">车次</div>
+                            <div style="width: 18%;text-align: center;">完成率</div>
+                        </div>
+                        <div class="tbody" style="height: 400px; overflow: hidden; position: relative;">
+                            <div class="scroll-content2" :style="{ transform: `translateY(-${scrollTop2}px)` }"
+                                ref="scrollContentRef2" @mouseenter="pauseScroll2" @mouseleave="resumeScroll2">
+                                <div v-for="(item, i) in orderList" :key="i" class="tr flex" style="height: 40px;">
+                                    <div class="td" style="width: 28%;text-align: center;">{{ item.order_no }}</div>
+                                    <div class="td" style="width: 18%;text-align: center;">{{ item.quantity }}</div>
+                                    <div class="td" style="width: 18%;text-align: center;">{{ item.actual_weight }}
+                                    </div>
+                                    <div class="td" style="width: 18%;text-align: center;">{{ item.nums }}</div>
+                                    <div class="radio_td" style="width: 18%;color: #fff;">
+                                        <div class="radio" :style="{ width: getRadioWidth(item.pct) }">
+                                            <div class="div"></div>
+                                        </div>
+                                        {{ item.pct }}
+                                    </div>
+                                </div>
+                                <div v-for="(item, i) in orderList" :key="'copy-' + i" class="tr flex"
+                                    style="height: 40px;">
+                                    <div class="td" style="width: 28%;text-align: center;">{{ item.order_no }}</div>
+                                    <div class="td" style="width: 18%;text-align: center;">{{ item.quantity }}</div>
+                                    <div class="td" style="width: 18%;text-align: center;">{{ item.actual_weight }}
+                                    </div>
+                                    <div class="td" style="width: 18%;text-align: center;">{{ item.nums }}</div>
+                                    <div class="radio_td" style="width: 18%;color: #fff;">
+                                        <div class="radio" :style="{ width: getRadioWidth(item.pct) }">
+                                            <div class="div"></div>
+                                        </div>
+                                        {{ item.pct }}
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+
+                </div>
+
+            </div>
+        </div>
+    </div>
+</template>
+<script setup>
+import { ref, reactive, computed, onMounted, onBeforeUnmount, defineComponent } from 'vue';
+import moment from 'moment';
+import Charts from '@/components/selfCP/charts.vue';
+import Chartsbar from '@/components/selfCP/chartsbar.vue';
+import count from './count.vue';
+import counts from './counts.vue';
+import { POST, GET } from '@/server/api/common';
+import * as echarts from "echarts";
+import { useRoute } from 'vue-router';
+import { getCurrentInstance } from 'vue';
+
+const { appContext } = getCurrentInstance();
+const $config = appContext.config.globalProperties.$config;
+
+// 注册组件
+const components = { Charts, Chartsbar, count, counts };
+
+// 响应式数据
+const nowWeek = ref('');
+const nowDate = ref('');
+const nowTime = ref('');
+const newTruck = ref(0);
+const truckH2 = ref(0);
+const truckOre = ref(0);
+const calciumOxideTimer = ref(null);
+const customerTaskOption = ref(null);
+const taskTableOption = ref(null);
+const truckRegisterOption = ref(null);
+const runningTruckTypeOption = ref(null);
+const registerTruckOption = ref(null);
+const orderSituationList = ref([]);
+const totalTasks = ref(0);
+const totalWeight = ref(0);
+const totalRunnings = ref(0);
+const totalEntry = ref(0);
+const running = ref(0);
+const todayTasks = ref(0);
+const todayWeight = ref(0);
+const orderList = ref([]);
+const barData = ref([]);
+const barData1 = ref([]);
+const tabIndex = ref(1);
+
+let newTimer = null;
+let time1 = null;
+let time2 = null;
+let mineId = ref(null);
+
+const route = useRoute();
+
+function changeTab(index) {
+    tabIndex.value = index;
+}
+
+function getNowTime() {
+    let date = new Date();
+    nowDate.value =
+        date.getFullYear() +
+        '.' +
+        (date.getMonth() + 1 >= 10 ? date.getMonth() + 1 : '0' + (date.getMonth() + 1)) +
+        '.' +
+        (date.getDate() >= 10 ? date.getDate() : '0' + date.getDate());
+    nowTime.value =
+        date.getHours() +
+        ':' +
+        (date.getMinutes() >= 10 ? date.getMinutes() : '0' + date.getMinutes()) +
+        ':' +
+        (date.getSeconds() >= 10 ? date.getSeconds() : '0' + date.getSeconds());
+    let weeks = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
+    nowWeek.value = weeks[date.getDay()];
+}
+
+function getApiUrl() {
+    getTaskList();
+    getTotalTasks();
+    getTotalWeight();
+    getTotalRunnings();
+    getTotalEntry();
+    getRunning();
+    getOrder();
+    getTodayTasks();
+    getTodayWeight();
+    getTaskTable();
+    getTruckRegister();
+    getCustomerTask();
+    getNewTruck();
+    getTruckH2();
+    getTruckOre();
+    getRunningTruckType();
+    getRegisterTruckOption();
+}
+
+function getdata() {
+    getTotalTasks();
+    getTotalWeight();
+    getTotalRunnings();
+    getTotalEntry();
+    getRunning();
+    getTodayTasks();
+    getTodayWeight();
+    getNewTruck();
+    getTruckH2();
+    getTruckOre();
+}
+
+function getdatas() {
+    getTaskList();
+    getOrder();
+    getTaskTable();
+    getTruckRegister();
+    getCustomerTask();
+    getRunningTruckType();
+    getRegisterTruckOption();
+}
+
+function getTaskList() {
+    GET($config.taskList.url).then((res) => {
+        orderSituationList.value = res.data;
+        console.log(orderSituationList.value);
+    });
+}
+function getTotalTasks() {
+    GET($config.totalTasks.url).then((res) => {
+        totalTasks.value = res.data[0].value;
+    });
+}
+function getTotalWeight() {
+    GET($config.totalWeight.url).then((res) => {
+        totalWeight.value = res.data[0].value;
+    });
+}
+function getTotalRunnings() {
+    GET($config.totalRunnings.url).then((res) => {
+        totalRunnings.value = res.data[0].value;
+    });
+}
+function getTotalEntry() {
+    GET($config.totalEntry.url).then((res) => {
+        totalEntry.value = res.data[0].value;
+    });
+}
+function getRunning() {
+    GET($config.running.url).then((res) => {
+        running.value = res.data[0].value;
+    });
+}
+function getOrder() {
+    GET($config.order.url).then((res) => {
+        orderList.value = res.data;
+    });
+}
+function getTodayTasks() {
+    GET($config.todayTasks.url).then((res) => {
+        todayTasks.value = res.data[0].value;
+    });
+}
+function getTodayWeight() {
+    GET($config.todayWeight.url).then((res) => {
+        todayWeight.value = res.data[0].value;
+    });
+}
+function getCustomerTask() {
+    GET($config.customerTask.url).then((res) => {
+        if (res.status == 200) {
+            let dataList = res.data;
+            var colorList = ['#0A73FF'];
+            customerTaskOption.value = {
+                tooltip: { show: false },
+                legend: { show: false },
+                grid: { left: 0, right: '5%', top: '5%', bottom: '2%', containLabel: true },
+                xAxis: { show: false, type: 'value' },
+                yAxis: [{
+                    type: 'category',
+                    inverse: true,
+                    axisLine: { show: false },
+                    axisTick: { show: false },
+                    axisPointer: { label: { show: true, margin: 30 } },
+                    data: dataList.map(item => item.content),
+                    axisLabel: {
+                        margin: 50,
+                        fontSize: 14,
+                        align: 'left',
+                        color: '#333',
+                        rich: {
+                            a1: { color: '#fff', backgroundColor: colorList[0], width: 30, height: 30, align: 'center', borderRadius: 2 },
+                            a2: { color: '#fff', backgroundColor: colorList[0], width: 30, height: 30, align: 'center', borderRadius: 2 },
+                            a3: { color: '#fff', backgroundColor: colorList[0], width: 30, height: 30, align: 'center', borderRadius: 2 },
+                            b: { color: '#fff', backgroundColor: colorList[0], width: 30, height: 30, align: 'center', borderRadius: 2 }
+                        },
+                        formatter: function (params) {
+                            var index = dataList.map(item => item.content).indexOf(params);
+                            index = index + 1;
+                            if (index - 1 < 3) {
+                                return ['{a' + index + '|' + index + '}'].join('\n')
+                            } else {
+                                return ['{b|' + index + '}'].join('\n')
+                            }
+                        }
+                    }
+                }],
+                series: [{
+                    z: 2,
+                    name: 'value',
+                    type: 'bar',
+                    barCategoryGap: '40%',
+                    barGap: 5,
+                    barWidth: 30,
+                    itemStyle: {
+                        normal: {
+                            barBorderRadius: 0,
+                            color: new echarts.graphic.LinearGradient(1, 0, 0, 0, [
+                                { offset: 0, color: '#16C8FB' },
+                                { offset: 1, color: '#0958D2' },
+                            ]),
+                        },
+                    },
+                    data: dataList.map((item, i) => ({ value: item.value })),
+                    label: {
+                        normal: {
+                            color: '#666',
+                            show: true,
+                            position: [20, 0],
+                            textStyle: { fontSize: 12, color: '#fff', lineHeight: 30 },
+                            formatter: function (a, b) { return a.name }
+                        }
+                    }
+                }]
+            };
+        }
+    });
+}
+function getTaskTable() {
+    GET($config.taskTable.url).then((res) => {
+        if (res.status == 200) {
+            let dataList = res.data;
+            let xAxis = [];
+            let yAxis = [];
+            dataList.forEach((item) => {
+                xAxis.push(item.date);
+                yAxis.push(item.nums);
+            });
+            taskTableOption.value = {
+                grid: { top: 10, left: 30, right: 30, bottom: 40, itemGap: 25, itemWidth: 18, containLabel: true },
+                tooltip: { show: false },
+                xAxis: [{
+                    type: 'category',
+                    boundaryGap: false,
+                    axisLabel: { interval: 20, formatter: '{value}', fontSize: 14, margin: 10, textStyle: { color: '#616161' } },
+                    axisLine: { lineStyle: { width: 3, color: '#616161' } },
+                    splitLine: { interval: 15, show: true, lineStyle: { color: '#243753' } },
+                    axisTick: { show: false },
+                    data: xAxis,
+                }],
+                yAxis: [{
+                    boundaryGap: false,
+                    type: 'value',
+                    axisLabel: { textStyle: { color: '#616161' } },
+                    nameTextStyle: { color: '#fff', fontSize: 12, lineHeight: 40 },
+                    splitLine: { lineStyle: { color: '#243753' } },
+                    axisLine: { show: true, lineStyle: { width: 3, color: '#616161' } },
+                    axisTick: { show: false },
+                }],
+                series: [{
+                    name: '',
+                    type: 'line',
+                    smooth: true,
+                    showSymbol: true,
+                    symbolSize: 2,
+                    zlevel: 3,
+                    itemStyle: { color: '#19a3df', borderColor: '#a3c8d8' },
+                    lineStyle: { normal: { width: 1, color: '#19a3df' } },
+                    areaStyle: { normal: { color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ offset: 0, color: 'rgba(15, 125, 228,1)' }, { offset: 0.8, color: 'rgba(15, 125, 228,0.4)' }], false) } },
+                    data: yAxis,
+                }],
+            };
+        }
+    });
+}
+function getTruckRegister() {
+    GET($config.truckRegister.url).then((res) => {
+        let dataList = res.data;
+        let xAxis = [];
+        let arr1 = [];
+        let arr2 = [];
+        let arr3 = [];
+        dataList.forEach((item) => {
+            if (item.s == 1) {
+                xAxis.push(item.date);
+                arr1.push(item.y);
+            }
+            if (item.s == 2) {
+                arr2.push(item.y);
+            }
+            if (item.s == 3) {
+                arr3.push(item.y);
+            }
+        });
+        truckRegisterOption.value = {
+            backgroundColor: 'transparent',
+            tooltip: { show: false },
+            legend: { data: ['传统能源', '氢能源', '新能源'], align: 'right', right: 10, textStyle: { color: "#fff" }, top: 20, itemWidth: 10, itemHeight: 10, itemGap: 35 },
+            grid: { left: '3%', right: '4%', bottom: '3%', containLabel: true },
+            xAxis: [{ type: 'category', data: xAxis, axisLine: { show: true, lineStyle: { color: "#616161", width: 1, type: "solid" } }, axisTick: { show: false }, axisLabel: { show: true, textStyle: { color: "#616161" } } }],
+            yAxis: [{ type: 'value', axisLabel: { formatter: '{value}', textStyle: { color: "#616161" } }, axisTick: { show: false }, axisLine: { show: false, lineStyle: { color: "#616161", width: 1, type: "solid" } }, splitLine: { lineStyle: { color: "#616161" } } }],
+            series: [
+                { name: '传统能源', type: 'bar', data: arr1, barWidth: 10, barGap: 0, showBackground: false, label: { normal: { show: false, position: "top", distance: 20, formatter: function (params) { return params.data.value; }, textStyle: { color: "#fff", fontSize: 12 } } }, itemStyle: { normal: { color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ offset: 0, color: '#3A93FF' }, { offset: 1, color: '#3A93FF' }]), opacity: 1 } } },
+                { name: '氢能源', type: 'bar', data: arr2, barWidth: 10, barGap: 0, showBackground: false, label: { normal: { show: false, position: "top", distance: 20, formatter: function (params) { return params.data.value; }, textStyle: { color: "#fff", fontSize: 12 } } }, itemStyle: { normal: { color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ offset: 0, color: '#01FF49' }, { offset: 1, color: '#01FF49' }]), opacity: 1 } } },
+                { name: '新能源', type: 'bar', data: arr3, barWidth: 10, barGap: 0, showBackground: false, label: { normal: { show: false, position: "top", distance: 20, formatter: function (params) { return params.data.value; }, textStyle: { color: "#fff", fontSize: 12 } } }, itemStyle: { normal: { color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ offset: 0, color: '#01FFFF' }, { offset: 1, color: '#01FFFF' }]), opacity: 1 } } }
+            ]
+        };
+    });
+}
+function getNewTruck() {
+    GET($config.newTruck.url).then((res) => {
+        if (res.status == 200) {
+            newTruck.value = res.data[0].value;
+        }
+    });
+}
+function getTruckH2() {
+    GET($config.truckH2.url).then((res) => {
+        if (res.status == 200) {
+            truckH2.value = res.data[0].value;
+        }
+    });
+}
+function getTruckOre() {
+    GET($config.truckOre.url).then((res) => {
+        if (res.status == 200) {
+            truckOre.value = res.data[0].value;
+        }
+    });
+}
+function getRunningTruckType() {
+    GET($config.runningTruckType.url).then((res) => {
+        if (res.status == 200) {
+            let dataList = res.data;
+            let arr = [];
+            let num = 0;
+            dataList.forEach(item => {
+                item.name = item.type;
+                num = num + item.value;
+                arr.push(item.value);
+            });
+            let pie = Number(dataList[0].value / num * 100).toFixed(0);
+            barData.value = dataList;
+            runningTruckTypeOption.value = {
+                color: ['#F52E5A', '#37FDA3', '#FFA523', '#3779FD', '#4CFFE6'],
+                legend: { data: ['六轴', '五轴', '四轴', '三轴', '二轴'], show: true, align: 'left', bottom: 10, textStyle: { color: "#fff" }, itemWidth: 10, itemHeight: 10, itemGap: 4 },
+                grid: { top: '10%', left: '0%', right: '5%', bottom: '0%', containLabel: true },
+                title: [
+                    { text: dataList[0].name, x: "center", top: "57%", textStyle: { color: "#FFFFFF", fontSize: 22, fontWeight: "600" } },
+                    { text: pie + '%', x: "center", y: "center", textStyle: { fontSize: 40, color: "#FFFFFF", fontFamily: "DINAlternate-Bold, DINAlternate", foontWeight: "600" } }
+                ],
+                backgroundColor: "transparent",
+                polar: { radius: ["70%", "76%"], center: ["50%", "50%"] },
+                angleAxis: { max: 100, show: false },
+                radiusAxis: { type: "category", show: true, axisLabel: { show: false }, axisLine: { show: false }, axisTick: { show: false } },
+                series: [{ name: '', type: 'pie', radius: ['60%', '70%'], avoidLabelOverlap: false, label: { show: false, position: 'center' }, emphasis: { label: { show: false, fontSize: '85', fontWeight: 'bold' } }, labelLine: { show: false }, data: dataList }],
+            }
+        }
+    });
+}
+function getRegisterTruckOption() {
+    GET($config.registerTruckOption.url).then((res) => {
+        if (res.status == 200) {
+            let dataList = res.data;
+            let arr = [];
+            let num = 0;
+            dataList.forEach(item => {
+                item.name = item.type;
+                num = num + item.value;
+                arr.push(item.value);
+            });
+            let pie = Number(dataList[0].value / num * 100).toFixed(0);
+            barData1.value = dataList;
+            registerTruckOption.value = {
+                legend: { data: ['六轴', '五轴', '四轴', '三轴', '二轴'], show: true, align: 'left', bottom: 0, textStyle: { color: "#fff" }, itemWidth: 10, itemHeight: 10, itemGap: 4 },
+                color: ['#F52E5A', '#37FDA3', '#FFA523', '#3779FD', '#4CFFE6'],
+                grid: { top: '10%', left: '0%', right: '5%', bottom: '0%', containLabel: true },
+                title: [
+                    { text: dataList[0].name, x: "center", top: "57%", textStyle: { color: "#FFFFFF", fontSize: 22, fontWeight: "600" } },
+                    { text: pie + '%', x: "center", y: "center", textStyle: { fontSize: 40, color: "#FFFFFF", fontFamily: "DINAlternate-Bold, DINAlternate", foontWeight: "600" } }
+                ],
+                backgroundColor: "transparent",
+                polar: { radius: ["70%", "76%"], center: ["50%", "50%"] },
+                angleAxis: { max: 100, show: false },
+                radiusAxis: { type: "category", show: true, axisLabel: { show: false }, axisLine: { show: false }, axisTick: { show: false } },
+                series: [{ name: '', type: 'pie', radius: ['60%', '70%'], avoidLabelOverlap: false, label: { show: false, position: 'center' }, emphasis: { label: { show: false, fontSize: '85', fontWeight: 'bold' } }, labelLine: { show: false }, data: dataList }],
+            }
+        }
+    });
+}
+function getRadioWidth(pct) {
+    let width = (76 / 100) * parseFloat(pct);
+    return width + 'px';
+}
+
+const scrollTop = ref(0);
+const scrollContentRef = ref(null);
+let scrollTimer = null;
+const rowHeight = 40; // 单行高度,和上面style一致
+let pause = false;
+
+function startScroll() {
+    if (scrollTimer) clearInterval(scrollTimer);
+    scrollTimer = setInterval(() => {
+        if (pause) return;
+        scrollTop.value += 1;
+        // 滚动到一半(即原始数据高度)后重置
+        if (orderSituationList.value.length > 0 && scrollTop.value >= rowHeight * orderSituationList.value.length) {
+            scrollTop.value = 0;
+        }
+    }, 30); // 速度可调
+}
+
+function pauseScroll() {
+    pause = true;
+}
+function resumeScroll() {
+    pause = false;
+}
+
+const scrollTop2 = ref(0);
+const scrollContentRef2 = ref(null);
+let scrollTimer2 = null;
+const rowHeight2 = 40;
+let pause2 = false;
+
+function startScroll2() {
+    if (scrollTimer2) clearInterval(scrollTimer2);
+    scrollTimer2 = setInterval(() => {
+        if (pause2) return;
+        scrollTop2.value += 1;
+        if (orderList.value.length > 0 && scrollTop2.value >= rowHeight2 * orderList.value.length) {
+            scrollTop2.value = 0;
+        }
+    }, 30);
+}
+
+function pauseScroll2() {
+    pause2 = true;
+}
+function resumeScroll2() {
+    pause2 = false;
+}
+
+// script setup 区域增加车辆统计图表配置
+// 重新配置车辆统计图表,为每个柱子组合添加背景
+const vehicleStatsOption = ref({
+  backgroundColor: 'transparent',
+  
+  title: {
+    text: '入驻数量',
+    left: '20px',
+    top: '20px',
+    textStyle: {
+      color: '#fff',
+      fontSize: 16,
+      fontWeight: 'normal'
+    }
+  },
+  legend: {
+    data: ['入驻司机', '登记车辆', '无人车辆'],
+    right: '20px',
+    top: '20px',
+    textStyle: {
+      color: '#fff',
+      fontSize: 12
+    },
+    itemWidth: 8,
+    itemHeight: 8,
+    icon: 'rect'
+  },
+  grid: {
+    left: '3%',
+    right: '5%',
+    bottom: '5%',
+    top: '20%',
+    containLabel: true
+  },
+  xAxis: {
+    type: 'category',
+    data: ['2023/10/11', '2023/11/11', '2023/12/11', '2024/01/11', '2024/02/11'],
+    axisLine: {
+      lineStyle: {
+        color: '#2a4b7c'
+      }
+    },
+    axisLabel: {
+      color: '#8892b0',
+      fontSize: 10
+    },
+    axisTick: {
+      show: false
+    }
+  },
+  yAxis: {
+    type: 'value',
+    max: 800,
+    interval: 100,
+    axisLine: {
+      show: false
+    },
+    axisTick: {
+      show: false
+    },
+    axisLabel: {
+      color: '#8892b0',
+      fontSize: 12
+    },
+    splitLine: {
+      show: true,
+      lineStyle: {
+        color: '#1e3a5f',
+        type: 'solid',
+        width: 1
+      }
+    }
+  },
+  series: [
+    {
+      name: '入驻司机',
+      type: 'bar',
+      data: [280, 640, 320, 560, 460],
+      barWidth: 15,
+      barGap: '10%',
+      itemStyle: {
+        color: '#1890ff',
+        borderRadius: [2, 2, 0, 0]
+      }
+    },
+    {
+      name: '登记车辆',
+      type: 'bar',
+      data: [160, 360, 180, 320, 260],
+      barWidth: 15,
+      itemStyle: {
+        color: '#52c41a',
+        borderRadius: [2, 2, 0, 0]
+      }
+    },
+    {
+      name: '无人车辆',
+      type: 'bar',
+      data: [40, 80, 40, 80, 60],
+      barWidth: 15,
+      itemStyle: {
+        color: '#13c2c2',
+        borderRadius: [2, 2, 0, 0]
+      }
+    }
+  ]
+});
+
+onMounted(() => {
+    getNowTime();
+    newTimer = setInterval(getNowTime, 1000);
+    if (route.query && route.query.companyId) {
+        mineId.value = route.query.companyId;
+    }
+    getApiUrl();
+    moment.locale('zh-cn');
+    clearInterval(time1);
+    clearInterval(time2);
+    time1 = setInterval(getdata, $config.time * 1000);
+    time2 = setInterval(getdatas, $config.time1 * 1000);
+    startScroll();
+    startScroll2();
+});
+
+onBeforeUnmount(() => {
+    clearInterval(newTimer);
+    newTimer = null;
+    clearInterval(calciumOxideTimer.value);
+    calciumOxideTimer.value = null;
+    if (scrollTimer) clearInterval(scrollTimer);
+    if (scrollTimer2) clearInterval(scrollTimer2);
+});
+
+
+
+</script>
+<style lang="less" scoped>
+@font-face {
+    font-family: MFLiHei;
+    src: url('../../assets/font/MFLiHei_Noncommercial-Regular.otf') format('opentype');
+}
+
+@font-face {
+    font-family: FXLed;
+    src: url('../../assets/font/DSDIGI1.ttf');
+}
+
+.fontMF {
+    font-family: MFLiHei;
+}
+
+.fontFx {
+    font-family: FXLed;
+}
+
+.flex {
+    display: flex;
+    align-items: center;
+}
+
+.MR40 {
+    margin-right: 40px;
+}
+
+.m_10 {
+    margin-right: 10px;
+}
+
+.rightcontentitem2 {
+    height: 98px;
+    width: 398px;
+    background: url(../../assets/zhibiao2.png) no-repeat;
+    background-size: 100%;
+    display: flex;
+    color: #fff;
+    padding-right: 98px;
+    box-sizing: border-box;
+    margin: 0 auto;
+    padding-bottom: 4px;
+
+    .num {
+        width: 50%;
+        text-align: center;
+        display: flex;
+        flex-direction: column;
+        font-family: FXLed;
+        font-weight: normal;
+        font-size: 23px;
+        color: #FFFFFF;
+        margin-bottom: 0;
+        align-items: center;
+        justify-content: center;
+        line-height: 23px;
+    }
+
+    p {
+        font-size: 12px;
+        line-height: 12px;
+        margin-top: 4px;
+    }
+}
+
+.settledEnterprise {
+    width: 314px;
+    height: 95px;
+    background: rgba(255, 255, 255, 0.1);
+    padding-top: 12px;
+    padding-left: 75px;
+    box-sizing: border-box;
+    position: relative;
+    margin-left: 96px;
+    margin-top: 40px;
+
+    .enterprise_img {
+        position: absolute;
+        width: 125px;
+        height: 125px;
+        left: -67.5px;
+        top: -20px;
+    }
+
+    .title {
+        font-family: MFLiHei;
+        font-weight: 400;
+        font-size: 19px;
+        color: #FFFFFF;
+    }
+
+    .number {
+        span {
+            color: #fff;
+            margin-left: 4px;
+            line-height: 40px;
+            position: relative;
+            top: 8px;
+        }
+    }
+}
+
+.rightcontentitem1 {
+    margin-top: 10px;
+    height: 98px;
+    width: 398px;
+    background: url(../../assets/zhibiao1.png) no-repeat;
+    background-size: 100%;
+    display: flex;
+    color: #fff;
+    padding-left: 98px;
+    box-sizing: border-box;
+    margin: 0 auto;
+    padding-bottom: 4px;
+    margin-top: 20px;
+
+    .num {
+        width: 50%;
+        text-align: center;
+        display: flex;
+        flex-direction: column;
+        font-family: FXLed;
+        font-weight: normal;
+        font-size: 23px;
+        color: #FFFFFF;
+        margin-bottom: 0;
+        align-items: center;
+        justify-content: center;
+        line-height: 23px;
+    }
+
+    p {
+        font-size: 12px;
+        line-height: 12px;
+        margin-top: 4px;
+    }
+}
+
+.page_index {
+    width: 100%;
+    height: 100%;
+    overflow: hidden;
+    position: relative;
+
+    .content {
+        position: absolute;
+        top: 0;
+        left: 0;
+        height: 100%;
+        z-index: 1;
+        width: 100%;
+        padding: 0px;
+
+        .topbg {
+            width: 2048px;
+            height: 113px;
+            z-index: 0;
+            transform: rotate(0deg);
+            opacity: 1;
+            // pointer-events: none;
+            position: relative;
+        }
+
+        .top {
+            position: absolute !important;
+            margin: 0 !important;
+            width: 2048px;
+            height: 113px;
+            display: flex;
+            justify-content: space-between;
+            background-image: url(../../assets/imgs/title_bg.png);
+            background-repeat: no-repeat;
+            background-size: 100% 100%;
+
+            .title {
+                text-align: center;
+                line-height: 25px;
+                flex: 1;
+                padding: 25px 0;
+                pointer-events: auto;
+                color: rgb(255, 255, 255);
+                font-weight: 400;
+                font-size: 40px;
+                writing-mode: horizontal-tb;
+                letter-spacing: 0px;
+                text-overflow: ellipsis;
+                white-space: nowrap;
+                overflow: hidden;
+            }
+        }
+
+        .tabbtn {
+            position: absolute;
+            width: 257px;
+            height: 39px;
+            background-size: 100% 100%;
+            background-repeat: no-repeat;
+            font-family: MF LiHei;
+            font-weight: 400;
+            font-size: 18px;
+            color: #FFFFFF;
+            line-height: 39px;
+            text-align: center;
+            cursor: pointer;
+        }
+
+        .lbtn {
+            background-image: url(../../assets/imgs/tab_l.png);
+            left: 270px;
+            top: 15px;
+            text-indent: 40px;
+        }
+
+        .lbtned {
+            background-image: url(../../assets/imgs/tab_led.png);
+        }
+
+        .rbtn {
+            background-image: url(../../assets/imgs/tab_r.png);
+            right: 270px;
+            top: 15px;
+            text-indent: -30px;
+        }
+
+        .rbtned {
+            background-image: url(../../assets/imgs/tab_red.png);
+        }
+
+        .times {
+            position: fixed;
+            right: 50px;
+            height: 30px;
+            line-height: 30px;
+            font-size: 16px;
+            top: 8px;
+            color: #fff;
+        }
+
+        .b_content {
+            display: flex;
+            justify-content: center;
+
+            .left {
+                width: 484px;
+                height: 1010px;
+                background-image: url(../../assets/imgs/left_bg.png);
+                background-size: 100% 100%;
+                background-repeat: no-repeat;
+                padding: 20px;
+                box-sizing: border-box;
+
+                .quantity_num {
+                    color: #FFFFFF;
+                    font-size: 28px;
+                    font-weight: bold;
+                    letter-spacing: 0;
+                    display: flex;
+                    align-items: baseline;
+
+                    .quantity_name {
+                        font-size: 16px;
+                        margin-right: 8px;
+                    }
+
+                    .quantity_unit {
+                        margin-left: 8px;
+                        font-size: 14px;
+                        color: #FFFFFF;
+                        font-weight: bolder;
+                        vertical-align: super;
+                        font-family: Microsoft Yahei;
+                    }
+                }
+
+                .tt {
+                    width: 313px;
+                    height: 24px;
+                    background-image: url(../../assets/imgs/tits_bg.png);
+                    background-size: 100% 100%;
+                    background-repeat: no-repeat;
+                    font-weight: 400;
+                    font-size: 18px;
+                    color: #FFFFFF;
+                    text-indent: 25px;
+                    margin-top: 10px;
+                    line-height: 15px;
+                }
+
+                .carbox {
+                    display: flex;
+                    align-items: center;
+                    padding-left: 40px;
+                    margin-top: 30px;
+
+                    .carimg {
+                        width: 97px;
+                        height: 88px;
+                    }
+
+                    .cardes {
+                        margin-left: 35px;
+
+                        .cart {
+                            font-weight: 400;
+                            font-size: 18px;
+                            color: #FFFFFF;
+                        }
+                    }
+                }
+
+                .z_box {
+                    margin-top: 30px;
+                    display: flex;
+                    align-items: center;
+
+                    .l_box {
+                        width: 190px;
+                        height: 160px;
+                        background: rgba(255, 255, 255, 0.1);
+                        display: flex;
+                        flex-flow: column;
+                        justify-content: center;
+                        align-items: center;
+
+                        .l_img {
+                            width: 156px;
+                            height: 86px;
+                        }
+
+                        .l_tit {
+                            font-weight: 400;
+                            font-size: 16px;
+                            color: #FFFFFF;
+                        }
+
+                    }
+
+                    .r_box {
+                        margin-left: 20px;
+
+                        .b_item {
+                            width: 200px;
+                            height: 70px;
+                            background: rgba(255, 255, 255, 0.1);
+                            display: flex;
+                            align-items: center;
+
+                            // justify-content: center;
+                            .l_img {
+                                width: 108px;
+                                height: 59px;
+                                margin-left: -20px;
+                            }
+
+                            .b_des {
+                                margin-left: 16px;
+
+                                .b_tit {
+                                    font-weight: 400;
+                                    font-size: 16px;
+                                    color: #FFFFFF;
+                                }
+                            }
+                        }
+                    }
+                }
+
+                .scroll_table {
+                    width: 420px;
+                    margin: 0 auto;
+                    margin-top: 20px;
+                    height: 360px;
+
+                    .thead {
+                        color: #ffffff;
+                        font-size: 12px;
+                        padding: 9px 0;
+                    }
+
+                    .tbody {
+                        .seamless-warp {
+                            overflow: hidden;
+                            height: 360px;
+                            // height: 390px;
+                            width: 100%;
+                        }
+                    }
+
+                    th {
+                        text-align: left;
+                        font-size: 12px;
+                        font-weight: 400;
+                        color: #ffffff;
+                        line-height: 30px;
+                        // background-color: rgb(0, 80, 179);
+                    }
+
+                    .td {
+                        font-size: 12px;
+                        font-weight: 400;
+                        color: #ffffff;
+                        line-height: 30px;
+                    }
+
+                    .tr:nth-child(2n+1) {
+                        // background-color: #032255;
+                        background-color: rgba(255, 255, 255, 0.1);
+                    }
+
+                    .radio_td {
+                        display: flex;
+                        align-items: center;
+                        color: #ffffff;
+                        font-size: 12px;
+
+                        .radio {
+                            position: relative;
+                            min-width: 6px;
+                            height: 10px;
+                            background: linear-gradient(90deg, #29abe3, #01ffff);
+                            margin-right: 4px;
+
+                            .div {
+                                width: 6px;
+                                height: 16px;
+                                background: #ffffff;
+                                position: absolute;
+                                top: -3px;
+                                right: 0;
+                            }
+                        }
+                    }
+                }
+
+                .nitem {
+                    display: flex;
+                    align-items: center;
+
+                    .nimg {
+                        width: 216px;
+                        height: 122px;
+                        position: relative;
+                        z-index: 2;
+                    }
+
+                    .ndes {
+                        width: 220px;
+                        height: 70px;
+                        background: rgba(255, 255, 255, 0.1);
+                        display: flex;
+                        margin-left: -50px;
+                        position: relative;
+                        z-index: 1;
+                    }
+
+                    .mc {
+                        margin-left: 30px;
+                        margin-top: 24px;
+                    }
+                }
+            }
+        }
+
+        .mid {
+            .mid_t {
+                width: 1018px;
+                height: 138px;
+                background-image: url(../../assets/imgs/mid_tbg.png);
+                background-size: 100% 100%;
+                background-repeat: no-repeat;
+                display: flex;
+                align-items: center;
+                justify-content: center;
+
+                .m_item {
+                    display: flex;
+                    flex-flow: column;
+                    align-items: center;
+                    flex: 1;
+
+                    .m_top {
+                        display: flex;
+                        align-items: center;
+                        margin-bottom: 12px;
+
+                        .m_img {
+                            width: 20px;
+                            height: 20px;
+                        }
+
+                        .m_txt {
+                            margin-left: 8px;
+                            font-weight: 500;
+                            font-size: 18px;
+                            color: #FFFFFF;
+                        }
+                    }
+                }
+            }
+
+            .mid_c {
+                margin-top: 14px;
+                width: 1018px;
+                height: 860px;
+                // width: 1018px;
+                // height: 658px;
+                // background-image: url(../../assets/imgs/map_bg.png);
+                // background-size: 100% 100%;
+                // background-repeat: no-repeat;
+                // margin-top: 14px;
+                position: relative;
+                box-sizing: border-box;
+
+                .mapbg {
+                    width: 1018px;
+                    height: 100%;
+                    position: absolute;
+                    z-index: 1;
+                    pointer-events: none;
+                }
+
+                .iframe_box {
+                    position: absolute;
+                    // background-image: url(../../assets/img/iframe_bg.png);
+                    // background-repeat: no-repeat;
+                    // background-size: 100% 100%;
+                    overflow: hidden;
+                    height: 100%;
+                    padding-bottom: 20px;
+                    box-sizing: border-box;
+
+                    #iframe {
+                        // margin: 10px 12px;
+                        margin: 0 auto;
+                        margin-left: 10px;
+                        margin-top: 10px;
+                        width: 998px;
+                        height: 100%;
+                        z-index: 0;
+                        // border-radius: 30px;
+                    }
+                }
+            }
+
+            .mid_b {
+                padding: 20px;
+                box-sizing: border-box;
+                width: 1018px;
+                height: 190px;
+                background-image: url(../../assets/imgs/mid_bbg.png);
+                background-size: 100% 100%;
+                background-repeat: no-repeat;
+                margin-top: 10px;
+
+                .tt {
+                    width: 313px;
+                    height: 24px;
+                    background-image: url(../../assets/imgs/tits_bg.png);
+                    background-size: 100% 100%;
+                    background-repeat: no-repeat;
+                    font-weight: 400;
+                    font-size: 18px;
+                    color: #FFFFFF;
+                    text-indent: 25px;
+                    line-height: 15px;
+                    margin-top: 10px;
+                    margin-left: 10px;
+                }
+            }
+        }
+
+        .right {
+            width: 484px;
+            height: 1010px;
+            background-image: url(../../assets/imgs/right_bg.png);
+            background-size: 100% 100%;
+            background-repeat: no-repeat;
+            padding: 30px;
+            box-sizing: border-box;
+
+            .tt {
+                width: 313px;
+                height: 24px;
+                background-image: url(../../assets/imgs/tits_bg.png);
+                background-size: 100% 100%;
+                background-repeat: no-repeat;
+                font-weight: 400;
+                font-size: 18px;
+                color: #FFFFFF;
+                text-indent: 25px;
+                line-height: 15px;
+                margin-top: 10px;
+                margin-left: 10px;
+            }
+
+            .scroll_table {
+                width: 424px;
+                margin: 0 auto;
+
+                .thead {
+                    color: #fff;
+                    padding: 9px 0;
+                    font-size: 12px;
+                }
+
+                .tbody {
+                    .seamless-warp {
+                        overflow: hidden;
+                        height: 900px;
+                        width: 424px;
+                    }
+                }
+
+                th {
+                    text-align: left;
+                    font-size: 12px;
+                    font-weight: 400;
+                    color: #ffffff;
+                    line-height: 30px;
+                }
+
+                .td {
+                    font-size: 12px;
+                    font-weight: 400;
+                    color: #ffffff;
+                    line-height: 30px;
+                }
+
+                .tr:nth-child(even) {
+                    background-color: rgba(255, 255, 255, 0.1);
+                    // background-color: rgba(255, 255, 255, 0.399);
+                }
+
+                .radio_td {
+                    display: flex;
+                    align-items: center;
+                    font-size: 12px;
+
+                    .radio {
+                        position: relative;
+                        min-width: 6px;
+                        height: 10px;
+                        background: linear-gradient(90deg, #29abe3, #01ffff);
+                        margin-right: 4px;
+
+                        .div {
+                            width: 6px;
+                            height: 16px;
+                            background: #ffffff;
+                            position: absolute;
+                            top: -3px;
+                            right: 0;
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+
+.scroll-content {
+    transition: transform 0.1s linear;
+    will-change: transform;
+}
+
+.scroll-content2 {
+    transition: transform 0.1s linear;
+    will-change: transform;
+}
+
+.new-scroll-content {
+
+    .rank {
+        width: 28px;
+        height: 28px;
+        background: linear-gradient(90deg, #0067FF, #3A93FF);
+        text-align: center;
+        color: #fff;
+    }
+
+    .flex-row {
+        display: flex;
+        flex: 1;
+    }
+}
+</style>

+ 59 - 0
src/components/selfCP/charts.vue

@@ -0,0 +1,59 @@
+<template>
+    <div class="chart"></div>
+</template>
+<!--end-->
+<script>
+import * as echarts from "echarts";
+export default {
+    name: 'Charts',
+    props: ['seriesData', 'eOption'],
+    // 数据
+    data() {
+        return {
+            chart: null
+        };
+    },
+    watch: {
+        eOption: {
+            deep: true,
+            handler() {
+                this.updateChartView();
+            }
+        }
+    },
+    mounted() {
+        this.chart = echarts.init(this.$el);
+        this.updateChartView();
+        window.addEventListener('resize', this.handleWindowResize);
+    },
+    beforeDestroy() {
+        window.removeEventListener('resize', this.handleWindowResize);
+    },
+    methods: {
+        /**
+         * 更新echart视图
+         */
+        updateChartView() {
+            if (!this.chart) return;
+            this.chart.clear();
+            setTimeout(() => {
+                this.chart.setOption(this.eOption, true);
+            }, 200);
+        },
+
+        /**
+         * 当窗口缩放时,echart动态调整自身大小
+         */
+        handleWindowResize() {
+            if (!this.chart) return;
+            this.chart.resize();
+        }
+    }
+};
+</script>
+<style scope>
+.chart {
+    width: 100%;
+    height: 100%;
+}
+</style>

+ 84 - 0
src/components/selfCP/chartsbar.vue

@@ -0,0 +1,84 @@
+<template>
+    <div class="chartsbar"></div>
+</template>
+<!--end-->
+<script>
+import * as echarts from "echarts";
+export default {
+    name: 'chartsbar',
+    props: ['seriesData', 'eOption'],
+    // 数据
+    data() {
+        return {
+            chart: null,
+            time: null,
+            index: 0
+        };
+    },
+    watch: {
+        eOption: {
+            deep: true,
+            handler() {
+                this.updateChartView();
+            }
+        }
+    },
+    mounted() {
+        this.chart = echarts.init(this.$el);
+        this.updateChartView();
+        window.addEventListener('resize', this.handleWindowResize);
+    },
+    beforeDestroy() {
+        window.removeEventListener('resize', this.handleWindowResize);
+        clearInterval(this.time)
+    },
+    methods: {
+        /**
+         * 更新echart视图
+         */
+        updateChartView() {
+            clearInterval(this.time)
+            if (!this.chart) return;
+            this.chart.clear();
+            setTimeout(() => {
+                this.chart.setOption(this.eOption, true);
+                this.index = 0
+                let num = 0
+                this.seriesData.forEach(item => {
+                    num = num + item.value
+                })
+                let option = JSON.parse(JSON.stringify(this.eOption))
+                if (this.time) {
+                    return false
+                }
+                this.time = setInterval(() => {
+                    this.index = this.index + 1
+                    console.log(this.seriesData.length)
+                    if (this.index >= this.seriesData.length) {
+                        this.index = 0
+                    }
+                    let pie = Number(this.seriesData[this.index].value / num * 100).toFixed(0)
+                    option.title[0].text = this.seriesData[this.index].name
+                    option.title[1].text = pie + '%'
+                    this.chart.setOption(option, false);
+                }, 5000)
+            }, 200);
+        },
+
+        /**
+         * 当窗口缩放时,echart动态调整自身大小
+         */
+        handleWindowResize() {
+            if (!this.chart) return;
+            // clearInterval(this.time)
+            this.chart.resize();
+        }
+    }
+};
+</script>
+<style scope>
+.chartsbar {
+    width: 100%;
+    height: 100%;
+}
+</style>

+ 19 - 0
src/main.js

@@ -0,0 +1,19 @@
+
+
+import { createApp } from 'vue'
+import App from './App.vue'
+import router from './router'
+import axios from 'axios'
+const app = createApp(App)
+
+app.use(router)
+
+
+function getServerConfig() {
+    axios.get('./public.json').then(result => {
+        let config = result.data;
+        app.config.globalProperties.$config = config
+        app.mount('#app')
+    })
+}
+getServerConfig()

+ 18 - 0
src/router/index.js

@@ -0,0 +1,18 @@
+import { createRouter, createWebHistory } from 'vue-router'
+
+const router = createRouter({
+  history: createWebHistory(import.meta.env.BASE_URL),
+  routes: [
+    {
+      path: '/',
+      redirect: '/dashboard',
+    },
+    {
+      path: '/dashboard',
+      component: () => import('@/components/page/sindex.vue'),
+      meta: { title: '首页' }
+    }
+  ],
+})
+
+export default router

+ 11 - 0
src/server/api/common.js

@@ -0,0 +1,11 @@
+import { get, post } from '../response/request'
+// POST请求
+export const POST = (url,params) => (
+    post(url,params)
+)
+// Get请求
+export const GET = (url) => (
+    get(url)
+)
+
+

+ 89 - 0
src/server/response/request.js

@@ -0,0 +1,89 @@
+import axios from 'axios';
+let loadingInstance = null;
+//请求拦截
+axios.interceptors.request.use(
+	config => {
+		return config;
+	},
+	error => {
+		return Promise.reject();
+	}
+);
+//返回拦截
+axios.interceptors.response.use(response => {
+	return response
+}, error => {
+	return Promise.resolve(error.response)
+})
+
+//发送请求
+async function service(method, url, params, type = 'application/x-www-form-urlencoded; charset=UTF-8;') {
+	return axios({
+		method: method,
+		//拼接参数
+		url: url,
+		data: params,
+		timeout: 10000,
+		headers: {
+			'X-Requested-With': 'XMLHttpRequest',
+			"Access-Control-Allow-Origin":'*'
+		},
+		withCredentials: false
+	}).then(
+		(response) => {
+			return checkStatus(response)
+		}
+	)
+}
+//发送请求
+async function serviceGet(method, url, params, type = 'application/x-www-form-urlencoded; charset=UTF-8;') {
+	return axios({
+		method: method,
+		//拼接参数
+		url: url,
+		data: params,
+		timeout: 10000,
+		headers: {
+			'X-Requested-With': 'XMLHttpRequest',
+			"Access-Control-Allow-Origin":'*'
+		},
+		withCredentials: false
+	}).then(
+		(response) => {
+			return response
+		}
+	)
+}
+function checkStatus(response) {
+	//状态码正常  去判断返回数据
+	if (response.status === 200) {
+		return checkCode(response.data)
+	} else {
+		return {
+			suc: false,
+			message: '系统请求错误'
+		}
+	}
+}
+
+function checkCode(res) {
+	//成功的返回
+	if (res.code == 200) {
+		return {
+			suc: true,
+			data: res.data,
+			msg: res.msg
+		}
+	} else {
+		return res
+	}
+
+}
+
+export const get = function (url, params) {
+	return serviceGet('GET', url, params)
+}
+export const post = function (url, params) {
+	return service('POST', url, params, 'application/json; charset=UTF-8;')
+}
+

+ 80 - 0
src/views/index.vue

@@ -0,0 +1,80 @@
+<template>
+    <div class="page_index">
+        <Bindex v-if="isB"></Bindex>
+        <Sindex v-else></Sindex>
+    </div>
+</template>
+<script>
+import Bindex from '../components/page/bindex.vue';
+import Sindex from '../components/page/sindex.vue'
+export default {
+    name: 'dashboard',
+    components: {
+        Bindex,
+        Sindex
+    },
+    data() {
+        return {
+            isB: true
+        }
+    },
+    beforeMount() {
+        if (document.documentElement.clientWidth / document.documentElement.clientHeight < 4224 / 1152) {
+            this.isB = false
+        } else {
+            this.isB = true
+        }
+        window.addEventListener('resize', () => {
+            if (document.documentElement.clientWidth / document.documentElement.clientHeight < 4224 / 1152) {
+                this.isB = false
+            } else {
+                this.isB = true
+            }
+        })
+        console.log(this.isB)
+    },
+    mounted() {
+
+    },
+    destoryed() {
+
+    },
+    methods: {
+    }
+}
+</script>
+<style lang="less" scoped>
+@font-face {
+    font-family: MFLiHei;
+    src: url('../assets/font/MFLiHei_Noncommercial-Regular.otf') format('opentype');
+}
+
+@font-face {
+    font-family: FXLed;
+    src: url('../assets/font/DSDIGI1.ttf');
+}
+
+.fontMF {
+    font-family: MFLiHei;
+}
+
+.fontFx {
+    font-family: FXLed;
+}
+
+.flex {
+    display: flex;
+    align-items: center;
+}
+
+.MR40 {
+    margin-right: 40px;
+}
+
+.page_index {
+    width: 100%;
+    height: 100%;
+    overflow: hidden;
+    position: relative;
+}
+</style>

+ 24 - 0
vite.config.js

@@ -0,0 +1,24 @@
+import { fileURLToPath, URL } from 'node:url'
+
+import { defineConfig } from 'vite'
+import vue from '@vitejs/plugin-vue'
+import vueDevTools from 'vite-plugin-vue-devtools'
+
+// https://vite.dev/config/
+export default defineConfig({
+  plugins: [
+    vue({
+      template: {
+        compilerOptions: {
+          isCustomElement: (tag) => tag.startsWith('vue-seamless-scroll')
+        }
+      }
+    }),
+    vueDevTools(),
+  ],
+  resolve: {
+    alias: {
+      '@': fileURLToPath(new URL('./src', import.meta.url))
+    },
+  },
+})

+ 1559 - 0
yarn.lock

@@ -0,0 +1,1559 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@ampproject/remapping@^2.2.0":
+  version "2.3.0"
+  resolved "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.3.0.tgz"
+  integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==
+  dependencies:
+    "@jridgewell/gen-mapping" "^0.3.5"
+    "@jridgewell/trace-mapping" "^0.3.24"
+
+"@antfu/utils@^0.7.10":
+  version "0.7.10"
+  resolved "https://registry.npmmirror.com/@antfu/utils/-/utils-0.7.10.tgz"
+  integrity sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==
+
+"@babel/code-frame@^7.26.2", "@babel/code-frame@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.27.1.tgz"
+  integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==
+  dependencies:
+    "@babel/helper-validator-identifier" "^7.27.1"
+    js-tokens "^4.0.0"
+    picocolors "^1.1.1"
+
+"@babel/compat-data@^7.27.2":
+  version "7.28.0"
+  resolved "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.28.0.tgz"
+  integrity sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==
+
+"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.23.0":
+  version "7.28.0"
+  resolved "https://registry.npmmirror.com/@babel/core/-/core-7.28.0.tgz"
+  integrity sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==
+  dependencies:
+    "@ampproject/remapping" "^2.2.0"
+    "@babel/code-frame" "^7.27.1"
+    "@babel/generator" "^7.28.0"
+    "@babel/helper-compilation-targets" "^7.27.2"
+    "@babel/helper-module-transforms" "^7.27.3"
+    "@babel/helpers" "^7.27.6"
+    "@babel/parser" "^7.28.0"
+    "@babel/template" "^7.27.2"
+    "@babel/traverse" "^7.28.0"
+    "@babel/types" "^7.28.0"
+    convert-source-map "^2.0.0"
+    debug "^4.1.0"
+    gensync "^1.0.0-beta.2"
+    json5 "^2.2.3"
+    semver "^6.3.1"
+
+"@babel/generator@^7.28.0":
+  version "7.28.0"
+  resolved "https://registry.npmmirror.com/@babel/generator/-/generator-7.28.0.tgz"
+  integrity sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==
+  dependencies:
+    "@babel/parser" "^7.28.0"
+    "@babel/types" "^7.28.0"
+    "@jridgewell/gen-mapping" "^0.3.12"
+    "@jridgewell/trace-mapping" "^0.3.28"
+    jsesc "^3.0.2"
+
+"@babel/helper-annotate-as-pure@^7.27.1", "@babel/helper-annotate-as-pure@^7.27.3":
+  version "7.27.3"
+  resolved "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz"
+  integrity sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==
+  dependencies:
+    "@babel/types" "^7.27.3"
+
+"@babel/helper-compilation-targets@^7.27.2":
+  version "7.27.2"
+  resolved "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz"
+  integrity sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==
+  dependencies:
+    "@babel/compat-data" "^7.27.2"
+    "@babel/helper-validator-option" "^7.27.1"
+    browserslist "^4.24.0"
+    lru-cache "^5.1.1"
+    semver "^6.3.1"
+
+"@babel/helper-create-class-features-plugin@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.1.tgz"
+  integrity sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.27.1"
+    "@babel/helper-member-expression-to-functions" "^7.27.1"
+    "@babel/helper-optimise-call-expression" "^7.27.1"
+    "@babel/helper-replace-supers" "^7.27.1"
+    "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1"
+    "@babel/traverse" "^7.27.1"
+    semver "^6.3.1"
+
+"@babel/helper-globals@^7.28.0":
+  version "7.28.0"
+  resolved "https://registry.npmmirror.com/@babel/helper-globals/-/helper-globals-7.28.0.tgz"
+  integrity sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==
+
+"@babel/helper-member-expression-to-functions@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz"
+  integrity sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==
+  dependencies:
+    "@babel/traverse" "^7.27.1"
+    "@babel/types" "^7.27.1"
+
+"@babel/helper-module-imports@^7.25.9", "@babel/helper-module-imports@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz"
+  integrity sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==
+  dependencies:
+    "@babel/traverse" "^7.27.1"
+    "@babel/types" "^7.27.1"
+
+"@babel/helper-module-transforms@^7.27.3":
+  version "7.27.3"
+  resolved "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz"
+  integrity sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==
+  dependencies:
+    "@babel/helper-module-imports" "^7.27.1"
+    "@babel/helper-validator-identifier" "^7.27.1"
+    "@babel/traverse" "^7.27.3"
+
+"@babel/helper-optimise-call-expression@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.npmmirror.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz"
+  integrity sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==
+  dependencies:
+    "@babel/types" "^7.27.1"
+
+"@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.26.5", "@babel/helper-plugin-utils@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz"
+  integrity sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==
+
+"@babel/helper-replace-supers@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz"
+  integrity sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==
+  dependencies:
+    "@babel/helper-member-expression-to-functions" "^7.27.1"
+    "@babel/helper-optimise-call-expression" "^7.27.1"
+    "@babel/traverse" "^7.27.1"
+
+"@babel/helper-skip-transparent-expression-wrappers@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz"
+  integrity sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==
+  dependencies:
+    "@babel/traverse" "^7.27.1"
+    "@babel/types" "^7.27.1"
+
+"@babel/helper-string-parser@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz"
+  integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==
+
+"@babel/helper-validator-identifier@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz"
+  integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==
+
+"@babel/helper-validator-option@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz"
+  integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==
+
+"@babel/helpers@^7.27.6":
+  version "7.27.6"
+  resolved "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.27.6.tgz"
+  integrity sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==
+  dependencies:
+    "@babel/template" "^7.27.2"
+    "@babel/types" "^7.27.6"
+
+"@babel/parser@^7.26.9", "@babel/parser@^7.27.2", "@babel/parser@^7.27.5", "@babel/parser@^7.28.0":
+  version "7.28.0"
+  resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.28.0.tgz"
+  integrity sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==
+  dependencies:
+    "@babel/types" "^7.28.0"
+
+"@babel/plugin-proposal-decorators@^7.23.0":
+  version "7.28.0"
+  resolved "https://registry.npmmirror.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.28.0.tgz"
+  integrity sha512-zOiZqvANjWDUaUS9xMxbMcK/Zccztbe/6ikvUXaG9nsPH3w6qh5UaPGAnirI/WhIbZ8m3OHU0ReyPrknG+ZKeg==
+  dependencies:
+    "@babel/helper-create-class-features-plugin" "^7.27.1"
+    "@babel/helper-plugin-utils" "^7.27.1"
+    "@babel/plugin-syntax-decorators" "^7.27.1"
+
+"@babel/plugin-syntax-decorators@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.npmmirror.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.27.1.tgz"
+  integrity sha512-YMq8Z87Lhl8EGkmb0MwYkt36QnxC+fzCgrl66ereamPlYToRpIk5nUjKUY3QKLWq8mwUB1BgbeXcTJhZOCDg5A==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-syntax-import-attributes@^7.22.5":
+  version "7.27.1"
+  resolved "https://registry.npmmirror.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz"
+  integrity sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-syntax-import-meta@^7.10.4":
+  version "7.10.4"
+  resolved "https://registry.npmmirror.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz"
+  integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-jsx@^7.25.9":
+  version "7.27.1"
+  resolved "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz"
+  integrity sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-syntax-typescript@^7.27.1":
+  version "7.27.1"
+  resolved "https://registry.npmmirror.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz"
+  integrity sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.27.1"
+
+"@babel/plugin-transform-typescript@^7.22.15":
+  version "7.28.0"
+  resolved "https://registry.npmmirror.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.0.tgz"
+  integrity sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.27.3"
+    "@babel/helper-create-class-features-plugin" "^7.27.1"
+    "@babel/helper-plugin-utils" "^7.27.1"
+    "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1"
+    "@babel/plugin-syntax-typescript" "^7.27.1"
+
+"@babel/template@^7.26.9", "@babel/template@^7.27.2":
+  version "7.27.2"
+  resolved "https://registry.npmmirror.com/@babel/template/-/template-7.27.2.tgz"
+  integrity sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==
+  dependencies:
+    "@babel/code-frame" "^7.27.1"
+    "@babel/parser" "^7.27.2"
+    "@babel/types" "^7.27.1"
+
+"@babel/traverse@^7.26.9", "@babel/traverse@^7.27.1", "@babel/traverse@^7.27.3", "@babel/traverse@^7.28.0":
+  version "7.28.0"
+  resolved "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.28.0.tgz"
+  integrity sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==
+  dependencies:
+    "@babel/code-frame" "^7.27.1"
+    "@babel/generator" "^7.28.0"
+    "@babel/helper-globals" "^7.28.0"
+    "@babel/parser" "^7.28.0"
+    "@babel/template" "^7.27.2"
+    "@babel/types" "^7.28.0"
+    debug "^4.3.1"
+
+"@babel/types@^7.26.9", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.27.6", "@babel/types@^7.28.0":
+  version "7.28.1"
+  resolved "https://registry.npmmirror.com/@babel/types/-/types-7.28.1.tgz"
+  integrity sha512-x0LvFTekgSX+83TI28Y9wYPUfzrnl2aT5+5QLnO6v7mSJYtEEevuDRN0F0uSHRk1G1IWZC43o00Y0xDDrpBGPQ==
+  dependencies:
+    "@babel/helper-string-parser" "^7.27.1"
+    "@babel/helper-validator-identifier" "^7.27.1"
+
+"@ctrl/tinycolor@^3.4.1":
+  version "3.6.1"
+  resolved "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz"
+  integrity sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==
+
+"@element-plus/icons-vue@^2.3.1":
+  version "2.3.1"
+  resolved "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz"
+  integrity sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==
+
+"@esbuild/win32-x64@0.25.6":
+  version "0.25.6"
+  resolved "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.25.6.tgz"
+  integrity sha512-NgJPHHbEpLQgDH2MjQu90pzW/5vvXIZ7KOnPyNBm92A6WgZ/7b6fJyUBjoumLqeOQQGqY2QjQxRo97ah4Sj0cA==
+
+"@floating-ui/core@^1.7.2":
+  version "1.7.2"
+  resolved "https://registry.npmmirror.com/@floating-ui/core/-/core-1.7.2.tgz"
+  integrity sha512-wNB5ooIKHQc+Kui96jE/n69rHFWAVoxn5CAzL1Xdd8FG03cgY3MLO+GF9U3W737fYDSgPWA6MReKhBQBop6Pcw==
+  dependencies:
+    "@floating-ui/utils" "^0.2.10"
+
+"@floating-ui/dom@^1.0.1":
+  version "1.7.2"
+  resolved "https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.7.2.tgz"
+  integrity sha512-7cfaOQuCS27HD7DX+6ib2OrnW+b4ZBwDNnCcT0uTyidcmyWb03FnQqJybDBoCnpdxwBSfA94UAYlRCt7mV+TbA==
+  dependencies:
+    "@floating-ui/core" "^1.7.2"
+    "@floating-ui/utils" "^0.2.10"
+
+"@floating-ui/utils@^0.2.10":
+  version "0.2.10"
+  resolved "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.2.10.tgz"
+  integrity sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==
+
+"@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.5":
+  version "0.3.12"
+  resolved "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz"
+  integrity sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==
+  dependencies:
+    "@jridgewell/sourcemap-codec" "^1.5.0"
+    "@jridgewell/trace-mapping" "^0.3.24"
+
+"@jridgewell/resolve-uri@^3.1.0":
+  version "3.1.2"
+  resolved "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz"
+  integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
+
+"@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0":
+  version "1.5.4"
+  resolved "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz"
+  integrity sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==
+
+"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.28":
+  version "0.3.29"
+  resolved "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz"
+  integrity sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==
+  dependencies:
+    "@jridgewell/resolve-uri" "^3.1.0"
+    "@jridgewell/sourcemap-codec" "^1.4.14"
+
+"@polka/url@^1.0.0-next.24":
+  version "1.0.0-next.29"
+  resolved "https://registry.npmmirror.com/@polka/url/-/url-1.0.0-next.29.tgz"
+  integrity sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==
+
+"@popperjs/core@npm:@sxzz/popperjs-es@^2.11.7":
+  version "2.11.7"
+  resolved "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz"
+  integrity sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==
+
+"@rolldown/pluginutils@1.0.0-beta.19":
+  version "1.0.0-beta.19"
+  resolved "https://registry.npmmirror.com/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.19.tgz"
+  integrity sha512-3FL3mnMbPu0muGOCaKAhhFEYmqv9eTfPSJRJmANrCwtgK8VuxpsZDGK+m0LYAGoyO8+0j5uRe4PeyPDK1yA/hA==
+
+"@rollup/pluginutils@^5.1.3":
+  version "5.2.0"
+  resolved "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.2.0.tgz"
+  integrity sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==
+  dependencies:
+    "@types/estree" "^1.0.0"
+    estree-walker "^2.0.2"
+    picomatch "^4.0.2"
+
+"@rollup/rollup-win32-x64-msvc@4.45.1":
+  version "4.45.1"
+  resolved "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.45.1.tgz"
+  integrity sha512-M/fKi4sasCdM8i0aWJjCSFm2qEnYRR8AMLG2kxp6wD13+tMGA4Z1tVAuHkNRjud5SW2EM3naLuK35w9twvf6aA==
+
+"@sec-ant/readable-stream@^0.4.1":
+  version "0.4.1"
+  resolved "https://registry.npmmirror.com/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz"
+  integrity sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==
+
+"@sindresorhus/merge-streams@^4.0.0":
+  version "4.0.0"
+  resolved "https://registry.npmmirror.com/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz"
+  integrity sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==
+
+"@types/estree@^1.0.0", "@types/estree@1.0.8":
+  version "1.0.8"
+  resolved "https://registry.npmmirror.com/@types/estree/-/estree-1.0.8.tgz"
+  integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==
+
+"@types/lodash-es@*", "@types/lodash-es@^4.17.6":
+  version "4.17.12"
+  resolved "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz"
+  integrity sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==
+  dependencies:
+    "@types/lodash" "*"
+
+"@types/lodash@*", "@types/lodash@^4.14.182":
+  version "4.17.20"
+  resolved "https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.20.tgz"
+  integrity sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==
+
+"@types/web-bluetooth@^0.0.16":
+  version "0.0.16"
+  resolved "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz"
+  integrity sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==
+
+"@vitejs/plugin-vue@^6.0.0":
+  version "6.0.0"
+  resolved "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-6.0.0.tgz"
+  integrity sha512-iAliE72WsdhjzTOp2DtvKThq1VBC4REhwRcaA+zPAAph6I+OQhUXv+Xu2KS7ElxYtb7Zc/3R30Hwv1DxEo7NXQ==
+  dependencies:
+    "@rolldown/pluginutils" "1.0.0-beta.19"
+
+"@vue/babel-helper-vue-transform-on@1.4.0":
+  version "1.4.0"
+  resolved "https://registry.npmmirror.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.4.0.tgz"
+  integrity sha512-mCokbouEQ/ocRce/FpKCRItGo+013tHg7tixg3DUNS+6bmIchPt66012kBMm476vyEIJPafrvOf4E5OYj3shSw==
+
+"@vue/babel-plugin-jsx@^1.1.5":
+  version "1.4.0"
+  resolved "https://registry.npmmirror.com/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.4.0.tgz"
+  integrity sha512-9zAHmwgMWlaN6qRKdrg1uKsBKHvnUU+Py+MOCTuYZBoZsopa90Di10QRjB+YPnVss0BZbG/H5XFwJY1fTxJWhA==
+  dependencies:
+    "@babel/helper-module-imports" "^7.25.9"
+    "@babel/helper-plugin-utils" "^7.26.5"
+    "@babel/plugin-syntax-jsx" "^7.25.9"
+    "@babel/template" "^7.26.9"
+    "@babel/traverse" "^7.26.9"
+    "@babel/types" "^7.26.9"
+    "@vue/babel-helper-vue-transform-on" "1.4.0"
+    "@vue/babel-plugin-resolve-type" "1.4.0"
+    "@vue/shared" "^3.5.13"
+
+"@vue/babel-plugin-resolve-type@1.4.0":
+  version "1.4.0"
+  resolved "https://registry.npmmirror.com/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.4.0.tgz"
+  integrity sha512-4xqDRRbQQEWHQyjlYSgZsWj44KfiF6D+ktCuXyZ8EnVDYV3pztmXJDf1HveAjUAXxAnR8daCQT51RneWWxtTyQ==
+  dependencies:
+    "@babel/code-frame" "^7.26.2"
+    "@babel/helper-module-imports" "^7.25.9"
+    "@babel/helper-plugin-utils" "^7.26.5"
+    "@babel/parser" "^7.26.9"
+    "@vue/compiler-sfc" "^3.5.13"
+
+"@vue/compiler-core@3.5.17":
+  version "3.5.17"
+  resolved "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.17.tgz"
+  integrity sha512-Xe+AittLbAyV0pabcN7cP7/BenRBNcteM4aSDCtRvGw0d9OL+HG1u/XHLY/kt1q4fyMeZYXyIYrsHuPSiDPosA==
+  dependencies:
+    "@babel/parser" "^7.27.5"
+    "@vue/shared" "3.5.17"
+    entities "^4.5.0"
+    estree-walker "^2.0.2"
+    source-map-js "^1.2.1"
+
+"@vue/compiler-dom@^3.3.4", "@vue/compiler-dom@3.5.17":
+  version "3.5.17"
+  resolved "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.17.tgz"
+  integrity sha512-+2UgfLKoaNLhgfhV5Ihnk6wB4ljyW1/7wUIog2puUqajiC29Lp5R/IKDdkebh9jTbTogTbsgB+OY9cEWzG95JQ==
+  dependencies:
+    "@vue/compiler-core" "3.5.17"
+    "@vue/shared" "3.5.17"
+
+"@vue/compiler-sfc@^3.5.13", "@vue/compiler-sfc@3.5.17":
+  version "3.5.17"
+  resolved "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.17.tgz"
+  integrity sha512-rQQxbRJMgTqwRugtjw0cnyQv9cP4/4BxWfTdRBkqsTfLOHWykLzbOc3C4GGzAmdMDxhzU/1Ija5bTjMVrddqww==
+  dependencies:
+    "@babel/parser" "^7.27.5"
+    "@vue/compiler-core" "3.5.17"
+    "@vue/compiler-dom" "3.5.17"
+    "@vue/compiler-ssr" "3.5.17"
+    "@vue/shared" "3.5.17"
+    estree-walker "^2.0.2"
+    magic-string "^0.30.17"
+    postcss "^8.5.6"
+    source-map-js "^1.2.1"
+
+"@vue/compiler-ssr@3.5.17":
+  version "3.5.17"
+  resolved "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.17.tgz"
+  integrity sha512-hkDbA0Q20ZzGgpj5uZjb9rBzQtIHLS78mMilwrlpWk2Ep37DYntUz0PonQ6kr113vfOEdM+zTBuJDaceNIW0tQ==
+  dependencies:
+    "@vue/compiler-dom" "3.5.17"
+    "@vue/shared" "3.5.17"
+
+"@vue/devtools-api@^6.6.4":
+  version "6.6.4"
+  resolved "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.6.4.tgz"
+  integrity sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==
+
+"@vue/devtools-core@^7.7.7":
+  version "7.7.7"
+  resolved "https://registry.npmmirror.com/@vue/devtools-core/-/devtools-core-7.7.7.tgz"
+  integrity sha512-9z9TLbfC+AjAi1PQyWX+OErjIaJmdFlbDHcD+cAMYKY6Bh5VlsAtCeGyRMrXwIlMEQPukvnWt3gZBLwTAIMKzQ==
+  dependencies:
+    "@vue/devtools-kit" "^7.7.7"
+    "@vue/devtools-shared" "^7.7.7"
+    mitt "^3.0.1"
+    nanoid "^5.1.0"
+    pathe "^2.0.3"
+    vite-hot-client "^2.0.4"
+
+"@vue/devtools-kit@^7.7.7":
+  version "7.7.7"
+  resolved "https://registry.npmmirror.com/@vue/devtools-kit/-/devtools-kit-7.7.7.tgz"
+  integrity sha512-wgoZtxcTta65cnZ1Q6MbAfePVFxfM+gq0saaeytoph7nEa7yMXoi6sCPy4ufO111B9msnw0VOWjPEFCXuAKRHA==
+  dependencies:
+    "@vue/devtools-shared" "^7.7.7"
+    birpc "^2.3.0"
+    hookable "^5.5.3"
+    mitt "^3.0.1"
+    perfect-debounce "^1.0.0"
+    speakingurl "^14.0.1"
+    superjson "^2.2.2"
+
+"@vue/devtools-shared@^7.7.7":
+  version "7.7.7"
+  resolved "https://registry.npmmirror.com/@vue/devtools-shared/-/devtools-shared-7.7.7.tgz"
+  integrity sha512-+udSj47aRl5aKb0memBvcUG9koarqnxNM5yjuREvqwK6T3ap4mn3Zqqc17QrBFTqSMjr3HK1cvStEZpMDpfdyw==
+  dependencies:
+    rfdc "^1.4.1"
+
+"@vue/reactivity@3.5.17":
+  version "3.5.17"
+  resolved "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.17.tgz"
+  integrity sha512-l/rmw2STIscWi7SNJp708FK4Kofs97zc/5aEPQh4bOsReD/8ICuBcEmS7KGwDj5ODQLYWVN2lNibKJL1z5b+Lw==
+  dependencies:
+    "@vue/shared" "3.5.17"
+
+"@vue/runtime-core@3.5.17":
+  version "3.5.17"
+  resolved "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.17.tgz"
+  integrity sha512-QQLXa20dHg1R0ri4bjKeGFKEkJA7MMBxrKo2G+gJikmumRS7PTD4BOU9FKrDQWMKowz7frJJGqBffYMgQYS96Q==
+  dependencies:
+    "@vue/reactivity" "3.5.17"
+    "@vue/shared" "3.5.17"
+
+"@vue/runtime-dom@3.5.17":
+  version "3.5.17"
+  resolved "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.17.tgz"
+  integrity sha512-8El0M60TcwZ1QMz4/os2MdlQECgGoVHPuLnQBU3m9h3gdNRW9xRmI8iLS4t/22OQlOE6aJvNNlBiCzPHur4H9g==
+  dependencies:
+    "@vue/reactivity" "3.5.17"
+    "@vue/runtime-core" "3.5.17"
+    "@vue/shared" "3.5.17"
+    csstype "^3.1.3"
+
+"@vue/server-renderer@3.5.17":
+  version "3.5.17"
+  resolved "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.17.tgz"
+  integrity sha512-BOHhm8HalujY6lmC3DbqF6uXN/K00uWiEeF22LfEsm9Q93XeJ/plHTepGwf6tqFcF7GA5oGSSAAUock3VvzaCA==
+  dependencies:
+    "@vue/compiler-ssr" "3.5.17"
+    "@vue/shared" "3.5.17"
+
+"@vue/shared@^3.5.13", "@vue/shared@3.5.17":
+  version "3.5.17"
+  resolved "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.17.tgz"
+  integrity sha512-CabR+UN630VnsJO/jHWYBC1YVXyMq94KKp6iF5MQgZJs5I8cmjw6oVMO1oDbtBkENSHSSn/UadWlW/OAgdmKrg==
+
+"@vueuse/core@^9.1.0":
+  version "9.13.0"
+  resolved "https://registry.npmmirror.com/@vueuse/core/-/core-9.13.0.tgz"
+  integrity sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==
+  dependencies:
+    "@types/web-bluetooth" "^0.0.16"
+    "@vueuse/metadata" "9.13.0"
+    "@vueuse/shared" "9.13.0"
+    vue-demi "*"
+
+"@vueuse/metadata@9.13.0":
+  version "9.13.0"
+  resolved "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.13.0.tgz"
+  integrity sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==
+
+"@vueuse/shared@9.13.0":
+  version "9.13.0"
+  resolved "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.13.0.tgz"
+  integrity sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==
+  dependencies:
+    vue-demi "*"
+
+async-validator@^4.2.5:
+  version "4.2.5"
+  resolved "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz"
+  integrity sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==
+
+asynckit@^0.4.0:
+  version "0.4.0"
+  resolved "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz"
+  integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
+
+axios@^1.10.0:
+  version "1.10.0"
+  resolved "https://registry.npmmirror.com/axios/-/axios-1.10.0.tgz"
+  integrity sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==
+  dependencies:
+    follow-redirects "^1.15.6"
+    form-data "^4.0.0"
+    proxy-from-env "^1.1.0"
+
+birpc@^2.3.0:
+  version "2.5.0"
+  resolved "https://registry.npmmirror.com/birpc/-/birpc-2.5.0.tgz"
+  integrity sha512-VSWO/W6nNQdyP520F1mhf+Lc2f8pjGQOtoHHm7Ze8Go1kX7akpVIrtTa0fn+HB0QJEDVacl6aO08YE0PgXfdnQ==
+
+browserslist@^4.24.0, "browserslist@>= 4.21.0":
+  version "4.25.1"
+  resolved "https://registry.npmmirror.com/browserslist/-/browserslist-4.25.1.tgz"
+  integrity sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==
+  dependencies:
+    caniuse-lite "^1.0.30001726"
+    electron-to-chromium "^1.5.173"
+    node-releases "^2.0.19"
+    update-browserslist-db "^1.1.3"
+
+bundle-name@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.npmmirror.com/bundle-name/-/bundle-name-4.1.0.tgz"
+  integrity sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==
+  dependencies:
+    run-applescript "^7.0.0"
+
+call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz"
+  integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==
+  dependencies:
+    es-errors "^1.3.0"
+    function-bind "^1.1.2"
+
+caniuse-lite@^1.0.30001726:
+  version "1.0.30001727"
+  resolved "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001727.tgz"
+  integrity sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==
+
+combined-stream@^1.0.8:
+  version "1.0.8"
+  resolved "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz"
+  integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
+  dependencies:
+    delayed-stream "~1.0.0"
+
+convert-source-map@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-2.0.0.tgz"
+  integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==
+
+copy-anything@^2.0.1:
+  version "2.0.6"
+  resolved "https://registry.npmmirror.com/copy-anything/-/copy-anything-2.0.6.tgz"
+  integrity sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==
+  dependencies:
+    is-what "^3.14.1"
+
+copy-anything@^3.0.2:
+  version "3.0.5"
+  resolved "https://registry.npmmirror.com/copy-anything/-/copy-anything-3.0.5.tgz"
+  integrity sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==
+  dependencies:
+    is-what "^4.1.8"
+
+cross-spawn@^7.0.6:
+  version "7.0.6"
+  resolved "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.6.tgz"
+  integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==
+  dependencies:
+    path-key "^3.1.0"
+    shebang-command "^2.0.0"
+    which "^2.0.1"
+
+csstype@^3.1.3:
+  version "3.1.3"
+  resolved "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz"
+  integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==
+
+dayjs@^1.11.13:
+  version "1.11.13"
+  resolved "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz"
+  integrity sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==
+
+debug@^4.1.0, debug@^4.3.1, debug@^4.3.7:
+  version "4.4.1"
+  resolved "https://registry.npmmirror.com/debug/-/debug-4.4.1.tgz"
+  integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==
+  dependencies:
+    ms "^2.1.3"
+
+default-browser-id@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.npmmirror.com/default-browser-id/-/default-browser-id-5.0.0.tgz"
+  integrity sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==
+
+default-browser@^5.2.1:
+  version "5.2.1"
+  resolved "https://registry.npmmirror.com/default-browser/-/default-browser-5.2.1.tgz"
+  integrity sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==
+  dependencies:
+    bundle-name "^4.1.0"
+    default-browser-id "^5.0.0"
+
+define-lazy-prop@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz"
+  integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==
+
+delayed-stream@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz"
+  integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
+
+dunder-proto@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz"
+  integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==
+  dependencies:
+    call-bind-apply-helpers "^1.0.1"
+    es-errors "^1.3.0"
+    gopd "^1.2.0"
+
+echarts@^5.6.0:
+  version "5.6.0"
+  resolved "https://registry.npmmirror.com/echarts/-/echarts-5.6.0.tgz"
+  integrity sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==
+  dependencies:
+    tslib "2.3.0"
+    zrender "5.6.1"
+
+electron-to-chromium@^1.5.173:
+  version "1.5.185"
+  resolved "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.185.tgz"
+  integrity sha512-dYOZfUk57hSMPePoIQ1fZWl1Fkj+OshhEVuPacNKWzC1efe56OsHY3l/jCfiAgIICOU3VgOIdoq7ahg7r7n6MQ==
+
+element-plus@^2.9.3:
+  version "2.10.4"
+  resolved "https://registry.npmmirror.com/element-plus/-/element-plus-2.10.4.tgz"
+  integrity sha512-UD4elWHrCnp1xlPhbXmVcaKFLCRaRAY6WWRwemGfGW3ceIjXm9fSYc9RNH3AiOEA6Ds1p9ZvhCs76CR9J8Vd+A==
+  dependencies:
+    "@ctrl/tinycolor" "^3.4.1"
+    "@element-plus/icons-vue" "^2.3.1"
+    "@floating-ui/dom" "^1.0.1"
+    "@popperjs/core" "npm:@sxzz/popperjs-es@^2.11.7"
+    "@types/lodash" "^4.14.182"
+    "@types/lodash-es" "^4.17.6"
+    "@vueuse/core" "^9.1.0"
+    async-validator "^4.2.5"
+    dayjs "^1.11.13"
+    escape-html "^1.0.3"
+    lodash "^4.17.21"
+    lodash-es "^4.17.21"
+    lodash-unified "^1.0.2"
+    memoize-one "^6.0.0"
+    normalize-wheel-es "^1.2.0"
+
+entities@^4.5.0:
+  version "4.5.0"
+  resolved "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz"
+  integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
+
+errno@^0.1.1:
+  version "0.1.8"
+  resolved "https://registry.npmmirror.com/errno/-/errno-0.1.8.tgz"
+  integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==
+  dependencies:
+    prr "~1.0.1"
+
+error-stack-parser-es@^0.1.5:
+  version "0.1.5"
+  resolved "https://registry.npmmirror.com/error-stack-parser-es/-/error-stack-parser-es-0.1.5.tgz"
+  integrity sha512-xHku1X40RO+fO8yJ8Wh2f2rZWVjqyhb1zgq1yZ8aZRQkv6OOKhKWRUaht3eSCUbAOBaKIgM+ykwFLE+QUxgGeg==
+
+es-define-property@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz"
+  integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==
+
+es-errors@^1.3.0:
+  version "1.3.0"
+  resolved "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz"
+  integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==
+
+es-object-atoms@^1.0.0, es-object-atoms@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz"
+  integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==
+  dependencies:
+    es-errors "^1.3.0"
+
+es-set-tostringtag@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz"
+  integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==
+  dependencies:
+    es-errors "^1.3.0"
+    get-intrinsic "^1.2.6"
+    has-tostringtag "^1.0.2"
+    hasown "^2.0.2"
+
+esbuild@^0.25.0:
+  version "0.25.6"
+  resolved "https://registry.npmmirror.com/esbuild/-/esbuild-0.25.6.tgz"
+  integrity sha512-GVuzuUwtdsghE3ocJ9Bs8PNoF13HNQ5TXbEi2AhvVb8xU1Iwt9Fos9FEamfoee+u/TOsn7GUWc04lz46n2bbTg==
+  optionalDependencies:
+    "@esbuild/aix-ppc64" "0.25.6"
+    "@esbuild/android-arm" "0.25.6"
+    "@esbuild/android-arm64" "0.25.6"
+    "@esbuild/android-x64" "0.25.6"
+    "@esbuild/darwin-arm64" "0.25.6"
+    "@esbuild/darwin-x64" "0.25.6"
+    "@esbuild/freebsd-arm64" "0.25.6"
+    "@esbuild/freebsd-x64" "0.25.6"
+    "@esbuild/linux-arm" "0.25.6"
+    "@esbuild/linux-arm64" "0.25.6"
+    "@esbuild/linux-ia32" "0.25.6"
+    "@esbuild/linux-loong64" "0.25.6"
+    "@esbuild/linux-mips64el" "0.25.6"
+    "@esbuild/linux-ppc64" "0.25.6"
+    "@esbuild/linux-riscv64" "0.25.6"
+    "@esbuild/linux-s390x" "0.25.6"
+    "@esbuild/linux-x64" "0.25.6"
+    "@esbuild/netbsd-arm64" "0.25.6"
+    "@esbuild/netbsd-x64" "0.25.6"
+    "@esbuild/openbsd-arm64" "0.25.6"
+    "@esbuild/openbsd-x64" "0.25.6"
+    "@esbuild/openharmony-arm64" "0.25.6"
+    "@esbuild/sunos-x64" "0.25.6"
+    "@esbuild/win32-arm64" "0.25.6"
+    "@esbuild/win32-ia32" "0.25.6"
+    "@esbuild/win32-x64" "0.25.6"
+
+escalade@^3.2.0:
+  version "3.2.0"
+  resolved "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz"
+  integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==
+
+escape-html@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz"
+  integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==
+
+estree-walker@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz"
+  integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
+
+execa@^9.5.2:
+  version "9.6.0"
+  resolved "https://registry.npmmirror.com/execa/-/execa-9.6.0.tgz"
+  integrity sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw==
+  dependencies:
+    "@sindresorhus/merge-streams" "^4.0.0"
+    cross-spawn "^7.0.6"
+    figures "^6.1.0"
+    get-stream "^9.0.0"
+    human-signals "^8.0.1"
+    is-plain-obj "^4.1.0"
+    is-stream "^4.0.1"
+    npm-run-path "^6.0.0"
+    pretty-ms "^9.2.0"
+    signal-exit "^4.1.0"
+    strip-final-newline "^4.0.0"
+    yoctocolors "^2.1.1"
+
+fdir@^6.4.4, fdir@^6.4.6:
+  version "6.4.6"
+  resolved "https://registry.npmmirror.com/fdir/-/fdir-6.4.6.tgz"
+  integrity sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==
+
+figures@^6.1.0:
+  version "6.1.0"
+  resolved "https://registry.npmmirror.com/figures/-/figures-6.1.0.tgz"
+  integrity sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==
+  dependencies:
+    is-unicode-supported "^2.0.0"
+
+follow-redirects@^1.15.6:
+  version "1.15.9"
+  resolved "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.9.tgz"
+  integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==
+
+form-data@^4.0.0:
+  version "4.0.3"
+  resolved "https://registry.npmmirror.com/form-data/-/form-data-4.0.3.tgz"
+  integrity sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==
+  dependencies:
+    asynckit "^0.4.0"
+    combined-stream "^1.0.8"
+    es-set-tostringtag "^2.1.0"
+    hasown "^2.0.2"
+    mime-types "^2.1.12"
+
+fs-extra@^11.2.0:
+  version "11.3.0"
+  resolved "https://registry.npmmirror.com/fs-extra/-/fs-extra-11.3.0.tgz"
+  integrity sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==
+  dependencies:
+    graceful-fs "^4.2.0"
+    jsonfile "^6.0.1"
+    universalify "^2.0.0"
+
+function-bind@^1.1.2:
+  version "1.1.2"
+  resolved "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz"
+  integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
+
+gensync@^1.0.0-beta.2:
+  version "1.0.0-beta.2"
+  resolved "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz"
+  integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
+
+get-intrinsic@^1.2.6:
+  version "1.3.0"
+  resolved "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz"
+  integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==
+  dependencies:
+    call-bind-apply-helpers "^1.0.2"
+    es-define-property "^1.0.1"
+    es-errors "^1.3.0"
+    es-object-atoms "^1.1.1"
+    function-bind "^1.1.2"
+    get-proto "^1.0.1"
+    gopd "^1.2.0"
+    has-symbols "^1.1.0"
+    hasown "^2.0.2"
+    math-intrinsics "^1.1.0"
+
+get-proto@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz"
+  integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==
+  dependencies:
+    dunder-proto "^1.0.1"
+    es-object-atoms "^1.0.0"
+
+get-stream@^9.0.0:
+  version "9.0.1"
+  resolved "https://registry.npmmirror.com/get-stream/-/get-stream-9.0.1.tgz"
+  integrity sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==
+  dependencies:
+    "@sec-ant/readable-stream" "^0.4.1"
+    is-stream "^4.0.1"
+
+gopd@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz"
+  integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==
+
+graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0:
+  version "4.2.11"
+  resolved "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz"
+  integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
+
+has-symbols@^1.0.3, has-symbols@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz"
+  integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==
+
+has-tostringtag@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz"
+  integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==
+  dependencies:
+    has-symbols "^1.0.3"
+
+hasown@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz"
+  integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==
+  dependencies:
+    function-bind "^1.1.2"
+
+hookable@^5.5.3:
+  version "5.5.3"
+  resolved "https://registry.npmmirror.com/hookable/-/hookable-5.5.3.tgz"
+  integrity sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==
+
+human-signals@^8.0.1:
+  version "8.0.1"
+  resolved "https://registry.npmmirror.com/human-signals/-/human-signals-8.0.1.tgz"
+  integrity sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==
+
+iconv-lite@^0.6.3:
+  version "0.6.3"
+  resolved "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz"
+  integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
+  dependencies:
+    safer-buffer ">= 2.1.2 < 3.0.0"
+
+image-size@~0.5.0:
+  version "0.5.5"
+  resolved "https://registry.npmmirror.com/image-size/-/image-size-0.5.5.tgz"
+  integrity sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==
+
+is-docker@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/is-docker/-/is-docker-3.0.0.tgz"
+  integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==
+
+is-inside-container@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/is-inside-container/-/is-inside-container-1.0.0.tgz"
+  integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==
+  dependencies:
+    is-docker "^3.0.0"
+
+is-plain-obj@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz"
+  integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==
+
+is-stream@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.npmmirror.com/is-stream/-/is-stream-4.0.1.tgz"
+  integrity sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==
+
+is-unicode-supported@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz"
+  integrity sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==
+
+is-what@^3.14.1:
+  version "3.14.1"
+  resolved "https://registry.npmmirror.com/is-what/-/is-what-3.14.1.tgz"
+  integrity sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==
+
+is-what@^4.1.8:
+  version "4.1.16"
+  resolved "https://registry.npmmirror.com/is-what/-/is-what-4.1.16.tgz"
+  integrity sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==
+
+is-wsl@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.npmmirror.com/is-wsl/-/is-wsl-3.1.0.tgz"
+  integrity sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==
+  dependencies:
+    is-inside-container "^1.0.0"
+
+isexe@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz"
+  integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
+
+js-tokens@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz"
+  integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+jsesc@^3.0.2:
+  version "3.1.0"
+  resolved "https://registry.npmmirror.com/jsesc/-/jsesc-3.1.0.tgz"
+  integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==
+
+json5@^2.2.3:
+  version "2.2.3"
+  resolved "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz"
+  integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
+
+jsonfile@^6.0.1:
+  version "6.1.0"
+  resolved "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz"
+  integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
+  dependencies:
+    universalify "^2.0.0"
+  optionalDependencies:
+    graceful-fs "^4.1.6"
+
+kolorist@^1.8.0:
+  version "1.8.0"
+  resolved "https://registry.npmmirror.com/kolorist/-/kolorist-1.8.0.tgz"
+  integrity sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==
+
+less@^4.0.0, less@^4.3.0:
+  version "4.3.0"
+  resolved "https://registry.npmmirror.com/less/-/less-4.3.0.tgz"
+  integrity sha512-X9RyH9fvemArzfdP8Pi3irr7lor2Ok4rOttDXBhlwDg+wKQsXOXgHWduAJE1EsF7JJx0w0bcO6BC6tCKKYnXKA==
+  dependencies:
+    copy-anything "^2.0.1"
+    parse-node-version "^1.0.1"
+    tslib "^2.3.0"
+  optionalDependencies:
+    errno "^0.1.1"
+    graceful-fs "^4.1.2"
+    image-size "~0.5.0"
+    make-dir "^2.1.0"
+    mime "^1.4.1"
+    needle "^3.1.0"
+    source-map "~0.6.0"
+
+lodash-es@*, lodash-es@^4.17.21:
+  version "4.17.21"
+  resolved "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz"
+  integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==
+
+lodash-unified@^1.0.2:
+  version "1.0.3"
+  resolved "https://registry.npmmirror.com/lodash-unified/-/lodash-unified-1.0.3.tgz"
+  integrity sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==
+
+lodash@*, lodash@^4.17.21:
+  version "4.17.21"
+  resolved "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz"
+  integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+
+lru-cache@^5.1.1:
+  version "5.1.1"
+  resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz"
+  integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
+  dependencies:
+    yallist "^3.0.2"
+
+magic-string@^0.30.17, magic-string@^0.30.4:
+  version "0.30.17"
+  resolved "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.17.tgz"
+  integrity sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==
+  dependencies:
+    "@jridgewell/sourcemap-codec" "^1.5.0"
+
+make-dir@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz"
+  integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==
+  dependencies:
+    pify "^4.0.1"
+    semver "^5.6.0"
+
+math-intrinsics@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz"
+  integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==
+
+memoize-one@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz"
+  integrity sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==
+
+mime-db@1.52.0:
+  version "1.52.0"
+  resolved "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz"
+  integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
+
+mime-types@^2.1.12:
+  version "2.1.35"
+  resolved "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz"
+  integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
+  dependencies:
+    mime-db "1.52.0"
+
+mime@^1.4.1:
+  version "1.6.0"
+  resolved "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz"
+  integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
+
+mitt@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.npmmirror.com/mitt/-/mitt-3.0.1.tgz"
+  integrity sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==
+
+moment@^2.30.1:
+  version "2.30.1"
+  resolved "https://registry.npmmirror.com/moment/-/moment-2.30.1.tgz"
+  integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==
+
+mrmime@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.npmmirror.com/mrmime/-/mrmime-2.0.1.tgz"
+  integrity sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==
+
+ms@^2.1.3:
+  version "2.1.3"
+  resolved "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz"
+  integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
+
+nanoid@^3.3.11:
+  version "3.3.11"
+  resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.11.tgz"
+  integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==
+
+nanoid@^5.1.0:
+  version "5.1.5"
+  resolved "https://registry.npmmirror.com/nanoid/-/nanoid-5.1.5.tgz"
+  integrity sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==
+
+needle@^3.1.0:
+  version "3.3.1"
+  resolved "https://registry.npmmirror.com/needle/-/needle-3.3.1.tgz"
+  integrity sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==
+  dependencies:
+    iconv-lite "^0.6.3"
+    sax "^1.2.4"
+
+node-releases@^2.0.19:
+  version "2.0.19"
+  resolved "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.19.tgz"
+  integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==
+
+normalize-wheel-es@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz"
+  integrity sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==
+
+npm-run-path@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-6.0.0.tgz"
+  integrity sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==
+  dependencies:
+    path-key "^4.0.0"
+    unicorn-magic "^0.3.0"
+
+open@^10.1.0:
+  version "10.2.0"
+  resolved "https://registry.npmmirror.com/open/-/open-10.2.0.tgz"
+  integrity sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==
+  dependencies:
+    default-browser "^5.2.1"
+    define-lazy-prop "^3.0.0"
+    is-inside-container "^1.0.0"
+    wsl-utils "^0.1.0"
+
+parse-ms@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmmirror.com/parse-ms/-/parse-ms-4.0.0.tgz"
+  integrity sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==
+
+parse-node-version@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmmirror.com/parse-node-version/-/parse-node-version-1.0.1.tgz"
+  integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==
+
+path-key@^3.1.0:
+  version "3.1.1"
+  resolved "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz"
+  integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
+
+path-key@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmmirror.com/path-key/-/path-key-4.0.0.tgz"
+  integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==
+
+pathe@^2.0.3:
+  version "2.0.3"
+  resolved "https://registry.npmmirror.com/pathe/-/pathe-2.0.3.tgz"
+  integrity sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==
+
+perfect-debounce@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/perfect-debounce/-/perfect-debounce-1.0.0.tgz"
+  integrity sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==
+
+picocolors@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz"
+  integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
+
+"picomatch@^3 || ^4", picomatch@^4.0.2:
+  version "4.0.3"
+  resolved "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.3.tgz"
+  integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==
+
+pify@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz"
+  integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
+
+postcss@^8.5.6:
+  version "8.5.6"
+  resolved "https://registry.npmmirror.com/postcss/-/postcss-8.5.6.tgz"
+  integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==
+  dependencies:
+    nanoid "^3.3.11"
+    picocolors "^1.1.1"
+    source-map-js "^1.2.1"
+
+prettier@3.5.3:
+  version "3.5.3"
+  resolved "https://registry.npmmirror.com/prettier/-/prettier-3.5.3.tgz"
+  integrity sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==
+
+pretty-ms@^9.2.0:
+  version "9.2.0"
+  resolved "https://registry.npmmirror.com/pretty-ms/-/pretty-ms-9.2.0.tgz"
+  integrity sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==
+  dependencies:
+    parse-ms "^4.0.0"
+
+proxy-from-env@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz"
+  integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
+
+prr@~1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmmirror.com/prr/-/prr-1.0.1.tgz"
+  integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==
+
+rfdc@^1.4.1:
+  version "1.4.1"
+  resolved "https://registry.npmmirror.com/rfdc/-/rfdc-1.4.1.tgz"
+  integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==
+
+rollup@^1.20.0||^2.0.0||^3.0.0||^4.0.0, rollup@^4.40.0:
+  version "4.45.1"
+  resolved "https://registry.npmmirror.com/rollup/-/rollup-4.45.1.tgz"
+  integrity sha512-4iya7Jb76fVpQyLoiVpzUrsjQ12r3dM7fIVz+4NwoYvZOShknRmiv+iu9CClZml5ZLGb0XMcYLutK6w9tgxHDw==
+  dependencies:
+    "@types/estree" "1.0.8"
+  optionalDependencies:
+    "@rollup/rollup-android-arm-eabi" "4.45.1"
+    "@rollup/rollup-android-arm64" "4.45.1"
+    "@rollup/rollup-darwin-arm64" "4.45.1"
+    "@rollup/rollup-darwin-x64" "4.45.1"
+    "@rollup/rollup-freebsd-arm64" "4.45.1"
+    "@rollup/rollup-freebsd-x64" "4.45.1"
+    "@rollup/rollup-linux-arm-gnueabihf" "4.45.1"
+    "@rollup/rollup-linux-arm-musleabihf" "4.45.1"
+    "@rollup/rollup-linux-arm64-gnu" "4.45.1"
+    "@rollup/rollup-linux-arm64-musl" "4.45.1"
+    "@rollup/rollup-linux-loongarch64-gnu" "4.45.1"
+    "@rollup/rollup-linux-powerpc64le-gnu" "4.45.1"
+    "@rollup/rollup-linux-riscv64-gnu" "4.45.1"
+    "@rollup/rollup-linux-riscv64-musl" "4.45.1"
+    "@rollup/rollup-linux-s390x-gnu" "4.45.1"
+    "@rollup/rollup-linux-x64-gnu" "4.45.1"
+    "@rollup/rollup-linux-x64-musl" "4.45.1"
+    "@rollup/rollup-win32-arm64-msvc" "4.45.1"
+    "@rollup/rollup-win32-ia32-msvc" "4.45.1"
+    "@rollup/rollup-win32-x64-msvc" "4.45.1"
+    fsevents "~2.3.2"
+
+run-applescript@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.npmmirror.com/run-applescript/-/run-applescript-7.0.0.tgz"
+  integrity sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==
+
+"safer-buffer@>= 2.1.2 < 3.0.0":
+  version "2.1.2"
+  resolved "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz"
+  integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
+sax@^1.2.4:
+  version "1.4.1"
+  resolved "https://registry.npmmirror.com/sax/-/sax-1.4.1.tgz"
+  integrity sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==
+
+semver@^5.6.0:
+  version "5.7.2"
+  resolved "https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz"
+  integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==
+
+semver@^6.3.1:
+  version "6.3.1"
+  resolved "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz"
+  integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
+
+shebang-command@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz"
+  integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
+  dependencies:
+    shebang-regex "^3.0.0"
+
+shebang-regex@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz"
+  integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+
+signal-exit@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.npmmirror.com/signal-exit/-/signal-exit-4.1.0.tgz"
+  integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==
+
+sirv@^3.0.0, sirv@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.npmmirror.com/sirv/-/sirv-3.0.1.tgz"
+  integrity sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==
+  dependencies:
+    "@polka/url" "^1.0.0-next.24"
+    mrmime "^2.0.0"
+    totalist "^3.0.0"
+
+source-map-js@^1.2.1:
+  version "1.2.1"
+  resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz"
+  integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==
+
+source-map@~0.6.0:
+  version "0.6.1"
+  resolved "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz"
+  integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+speakingurl@^14.0.1:
+  version "14.0.1"
+  resolved "https://registry.npmmirror.com/speakingurl/-/speakingurl-14.0.1.tgz"
+  integrity sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==
+
+strip-final-newline@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-4.0.0.tgz"
+  integrity sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==
+
+superjson@^2.2.2:
+  version "2.2.2"
+  resolved "https://registry.npmmirror.com/superjson/-/superjson-2.2.2.tgz"
+  integrity sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==
+  dependencies:
+    copy-anything "^3.0.2"
+
+tinyglobby@^0.2.14:
+  version "0.2.14"
+  resolved "https://registry.npmmirror.com/tinyglobby/-/tinyglobby-0.2.14.tgz"
+  integrity sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==
+  dependencies:
+    fdir "^6.4.4"
+    picomatch "^4.0.2"
+
+totalist@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.npmmirror.com/totalist/-/totalist-3.0.1.tgz"
+  integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==
+
+tslib@^2.3.0:
+  version "2.8.1"
+  resolved "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz"
+  integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==
+
+tslib@2.3.0:
+  version "2.3.0"
+  resolved "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz"
+  integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==
+
+unicorn-magic@^0.3.0:
+  version "0.3.0"
+  resolved "https://registry.npmmirror.com/unicorn-magic/-/unicorn-magic-0.3.0.tgz"
+  integrity sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==
+
+universalify@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz"
+  integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==
+
+update-browserslist-db@^1.1.3:
+  version "1.1.3"
+  resolved "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz"
+  integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==
+  dependencies:
+    escalade "^3.2.0"
+    picocolors "^1.1.1"
+
+vite-hot-client@^2.0.4:
+  version "2.1.0"
+  resolved "https://registry.npmmirror.com/vite-hot-client/-/vite-hot-client-2.1.0.tgz"
+  integrity sha512-7SpgZmU7R+dDnSmvXE1mfDtnHLHQSisdySVR7lO8ceAXvM0otZeuQQ6C8LrS5d/aYyP/QZ0hI0L+dIPrm4YlFQ==
+
+vite-plugin-inspect@0.8.9:
+  version "0.8.9"
+  resolved "https://registry.npmmirror.com/vite-plugin-inspect/-/vite-plugin-inspect-0.8.9.tgz"
+  integrity sha512-22/8qn+LYonzibb1VeFZmISdVao5kC22jmEKm24vfFE8siEn47EpVcCLYMv6iKOYMJfjSvSJfueOwcFCkUnV3A==
+  dependencies:
+    "@antfu/utils" "^0.7.10"
+    "@rollup/pluginutils" "^5.1.3"
+    debug "^4.3.7"
+    error-stack-parser-es "^0.1.5"
+    fs-extra "^11.2.0"
+    open "^10.1.0"
+    perfect-debounce "^1.0.0"
+    picocolors "^1.1.1"
+    sirv "^3.0.0"
+
+vite-plugin-vue-devtools@^7.7.7:
+  version "7.7.7"
+  resolved "https://registry.npmmirror.com/vite-plugin-vue-devtools/-/vite-plugin-vue-devtools-7.7.7.tgz"
+  integrity sha512-d0fIh3wRcgSlr4Vz7bAk4va1MkdqhQgj9ANE/rBhsAjOnRfTLs2ocjFMvSUOsv6SRRXU9G+VM7yMgqDb6yI4iQ==
+  dependencies:
+    "@vue/devtools-core" "^7.7.7"
+    "@vue/devtools-kit" "^7.7.7"
+    "@vue/devtools-shared" "^7.7.7"
+    execa "^9.5.2"
+    sirv "^3.0.1"
+    vite-plugin-inspect "0.8.9"
+    vite-plugin-vue-inspector "^5.3.1"
+
+vite-plugin-vue-inspector@^5.3.1:
+  version "5.3.2"
+  resolved "https://registry.npmmirror.com/vite-plugin-vue-inspector/-/vite-plugin-vue-inspector-5.3.2.tgz"
+  integrity sha512-YvEKooQcSiBTAs0DoYLfefNja9bLgkFM7NI2b07bE2SruuvX0MEa9cMaxjKVMkeCp5Nz9FRIdcN1rOdFVBeL6Q==
+  dependencies:
+    "@babel/core" "^7.23.0"
+    "@babel/plugin-proposal-decorators" "^7.23.0"
+    "@babel/plugin-syntax-import-attributes" "^7.22.5"
+    "@babel/plugin-syntax-import-meta" "^7.10.4"
+    "@babel/plugin-transform-typescript" "^7.22.15"
+    "@vue/babel-plugin-jsx" "^1.1.5"
+    "@vue/compiler-dom" "^3.3.4"
+    kolorist "^1.8.0"
+    magic-string "^0.30.4"
+
+"vite@^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0", "vite@^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0", "vite@^3.1.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.1", "vite@^3.1.0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0", "vite@^5.0.0 || ^6.0.0 || ^7.0.0", vite@^7.0.0:
+  version "7.0.4"
+  resolved "https://registry.npmmirror.com/vite/-/vite-7.0.4.tgz"
+  integrity sha512-SkaSguuS7nnmV7mfJ8l81JGBFV7Gvzp8IzgE8A8t23+AxuNX61Q5H1Tpz5efduSN7NHC8nQXD3sKQKZAu5mNEA==
+  dependencies:
+    esbuild "^0.25.0"
+    fdir "^6.4.6"
+    picomatch "^4.0.2"
+    postcss "^8.5.6"
+    rollup "^4.40.0"
+    tinyglobby "^0.2.14"
+  optionalDependencies:
+    fsevents "~2.3.3"
+
+vue-demi@*:
+  version "0.14.10"
+  resolved "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz"
+  integrity sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==
+
+vue-router@^4.5.1:
+  version "4.5.1"
+  resolved "https://registry.npmmirror.com/vue-router/-/vue-router-4.5.1.tgz"
+  integrity sha512-ogAF3P97NPm8fJsE4by9dwSYtDwXIY1nFY9T6DyQnGHd1E2Da94w9JIolpe42LJGIl0DwOHBi8TcRPlPGwbTtw==
+  dependencies:
+    "@vue/devtools-api" "^6.6.4"
+
+vue@^3.0.0, "vue@^3.0.0-0 || ^2.6.0", vue@^3.2, vue@^3.2.0, vue@^3.2.25, vue@^3.5.17, vue@3.5.17:
+  version "3.5.17"
+  resolved "https://registry.npmmirror.com/vue/-/vue-3.5.17.tgz"
+  integrity sha512-LbHV3xPN9BeljML+Xctq4lbz2lVHCR6DtbpTf5XIO6gugpXUN49j2QQPcMj086r9+AkJ0FfUT8xjulKKBkkr9g==
+  dependencies:
+    "@vue/compiler-dom" "3.5.17"
+    "@vue/compiler-sfc" "3.5.17"
+    "@vue/runtime-dom" "3.5.17"
+    "@vue/server-renderer" "3.5.17"
+    "@vue/shared" "3.5.17"
+
+vue3-marquee@^4.2.2:
+  version "4.2.2"
+  resolved "https://registry.npmmirror.com/vue3-marquee/-/vue3-marquee-4.2.2.tgz"
+  integrity sha512-FeFvGUVInKfFilXFcnl8sDRBJBZCZSNLlQDquJErB9db6W2xICRVqbRV/jtdzsEP0rftarLQhx9MeEAU0+TPuQ==
+
+vue3-seamless-scroll@^3.0.2:
+  version "3.0.2"
+  resolved "https://registry.npmmirror.com/vue3-seamless-scroll/-/vue3-seamless-scroll-3.0.2.tgz"
+  integrity sha512-LpKoL1ht71MASabUBsoSqbhLqcuKSrD+u01dgHac+/cthPAShKvcdM7dSGtaxjVntSFqdeViqJssjcwy/KqRSA==
+  dependencies:
+    element-plus "^2.9.3"
+
+which@^2.0.1:
+  version "2.0.2"
+  resolved "https://registry.npmmirror.com/which/-/which-2.0.2.tgz"
+  integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+  dependencies:
+    isexe "^2.0.0"
+
+wsl-utils@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.npmmirror.com/wsl-utils/-/wsl-utils-0.1.0.tgz"
+  integrity sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==
+  dependencies:
+    is-wsl "^3.1.0"
+
+yallist@^3.0.2:
+  version "3.1.1"
+  resolved "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz"
+  integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
+
+yoctocolors@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.npmmirror.com/yoctocolors/-/yoctocolors-2.1.1.tgz"
+  integrity sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==
+
+zrender@5.6.1:
+  version "5.6.1"
+  resolved "https://registry.npmmirror.com/zrender/-/zrender-5.6.1.tgz"
+  integrity sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==
+  dependencies:
+    tslib "2.3.0"