From 5a7814a305ae2e210ec74b05864dbed5b88d405f Mon Sep 17 00:00:00 2001
From: chenyc <501753378@qq.com>
Date: 星期一, 13 一月 2025 12:59:36 +0800
Subject: [PATCH] init
---
tsconfig.app.json | 8
.gitignore | 24
package-lock.json | 2833 ++++++++++++++++++++++++++
public/vite.svg | 1
.vscode/extensions.json | 3
vite.config.ts | 15
src/components/img/TQS88.png | 0
src/views/deviceWindows.vue | 913 ++++++++
index.html | 13
src/vite-env.d.ts | 1
src/components/deviceView.vue | 750 +++++++
src/router/index.ts | 34
src/utils/formatTime.ts | 310 ++
src/img/maibo.png | 0
src/img/xueya.png | 0
README.md | 5
src/assets/vue.svg | 1
src/main.ts | 8
src/img/TQS88.png | 0
tsconfig.node.json | 7
tsconfig.json | 16
src/style.css | 41
package.json | 26
src/views/Home.vue | 1293 ++++++++++++
src/App.vue | 12
25 files changed, 6,312 insertions(+), 2 deletions(-)
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..a547bf3
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,24 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
new file mode 100644
index 0000000..a7cea0b
--- /dev/null
+++ b/.vscode/extensions.json
@@ -0,0 +1,3 @@
+{
+ "recommendations": ["Vue.volar"]
+}
diff --git a/README.md b/README.md
index 9129cf1..33895ab 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,5 @@
-## Single_application
+# Vue 3 + TypeScript + Vite
-单应用项目,可以创建很多独立工具类页面 ,不用登录 初始化的页面
+This template should help get you started developing with Vue 3 and TypeScript in Vite. The template uses Vue 3 `<script setup>` SFCs, check out the [script setup docs](https://v3.vuejs.org/api/sfc-script-setup.html#sfc-script-setup) to learn more.
+Learn more about the recommended Project Setup and IDE Support in the [Vue Docs TypeScript Guide](https://vuejs.org/guide/typescript/overview.html#project-setup).
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..07bd4ff
--- /dev/null
+++ b/index.html
@@ -0,0 +1,13 @@
+<!doctype html>
+<html lang="en">
+ <head>
+ <meta charset="UTF-8" />
+ <link rel="icon" type="image/svg+xml" href="/vite.svg" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>胜透床旁监测</title>
+ </head>
+ <body>
+ <div id="app"></div>
+ <script type="module" src="/src/main.ts"></script>
+ </body>
+</html>
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..86aeeb4
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,2833 @@
+{
+ "name": "my-project",
+ "version": "0.0.0",
+ "lockfileVersion": 2,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "my-project",
+ "version": "0.0.0",
+ "dependencies": {
+ "echarts": "^5.6.0",
+ "element-plus": "^2.9.2",
+ "vue": "^3.5.13",
+ "vue-router": "^4.0.13"
+ },
+ "devDependencies": {
+ "@vitejs/plugin-vue": "^5.2.1",
+ "@vue/compiler-sfc": "^3.5.13",
+ "@vue/tsconfig": "^0.7.0",
+ "less": "^4.2.1",
+ "typescript": "~5.6.2",
+ "vite": "^6.0.5",
+ "vue-tsc": "^2.2.0"
+ }
+ },
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
+ "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
+ "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.26.3",
+ "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.26.3.tgz",
+ "integrity": "sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==",
+ "dependencies": {
+ "@babel/types": "^7.26.3"
+ },
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/types": {
+ "version": "7.26.3",
+ "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.26.3.tgz",
+ "integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==",
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.25.9",
+ "@babel/helper-validator-identifier": "^7.25.9"
+ },
+ "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/aix-ppc64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz",
+ "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.24.2.tgz",
+ "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz",
+ "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.24.2.tgz",
+ "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz",
+ "integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz",
+ "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz",
+ "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz",
+ "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz",
+ "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz",
+ "integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz",
+ "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz",
+ "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz",
+ "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz",
+ "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz",
+ "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz",
+ "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz",
+ "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-arm64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz",
+ "integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz",
+ "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz",
+ "integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz",
+ "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz",
+ "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz",
+ "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz",
+ "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz",
+ "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@floating-ui/core": {
+ "version": "1.6.9",
+ "resolved": "https://registry.npmmirror.com/@floating-ui/core/-/core-1.6.9.tgz",
+ "integrity": "sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==",
+ "license": "MIT",
+ "dependencies": {
+ "@floating-ui/utils": "^0.2.9"
+ }
+ },
+ "node_modules/@floating-ui/dom": {
+ "version": "1.6.13",
+ "resolved": "https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.6.13.tgz",
+ "integrity": "sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==",
+ "license": "MIT",
+ "dependencies": {
+ "@floating-ui/core": "^1.6.0",
+ "@floating-ui/utils": "^0.2.9"
+ }
+ },
+ "node_modules/@floating-ui/utils": {
+ "version": "0.2.9",
+ "resolved": "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.2.9.tgz",
+ "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==",
+ "license": "MIT"
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
+ "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="
+ },
+ "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/@rollup/rollup-android-arm-eabi": {
+ "version": "4.30.1",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.30.1.tgz",
+ "integrity": "sha512-pSWY+EVt3rJ9fQ3IqlrEUtXh3cGqGtPDH1FQlNZehO2yYxCHEX1SPsz1M//NXwYfbTlcKr9WObLnJX9FsS9K1Q==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.30.1",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.30.1.tgz",
+ "integrity": "sha512-/NA2qXxE3D/BRjOJM8wQblmArQq1YoBVJjrjoTSBS09jgUisq7bqxNHJ8kjCHeV21W/9WDGwJEWSN0KQ2mtD/w==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.30.1",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.30.1.tgz",
+ "integrity": "sha512-r7FQIXD7gB0WJ5mokTUgUWPl0eYIH0wnxqeSAhuIwvnnpjdVB8cRRClyKLQr7lgzjctkbp5KmswWszlwYln03Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.30.1",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.30.1.tgz",
+ "integrity": "sha512-x78BavIwSH6sqfP2xeI1hd1GpHL8J4W2BXcVM/5KYKoAD3nNsfitQhvWSw+TFtQTLZ9OmlF+FEInEHyubut2OA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-arm64": {
+ "version": "4.30.1",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.30.1.tgz",
+ "integrity": "sha512-HYTlUAjbO1z8ywxsDFWADfTRfTIIy/oUlfIDmlHYmjUP2QRDTzBuWXc9O4CXM+bo9qfiCclmHk1x4ogBjOUpUQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-x64": {
+ "version": "4.30.1",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.30.1.tgz",
+ "integrity": "sha512-1MEdGqogQLccphhX5myCJqeGNYTNcmTyaic9S7CG3JhwuIByJ7J05vGbZxsizQthP1xpVx7kd3o31eOogfEirw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.30.1",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.30.1.tgz",
+ "integrity": "sha512-PaMRNBSqCx7K3Wc9QZkFx5+CX27WFpAMxJNiYGAXfmMIKC7jstlr32UhTgK6T07OtqR+wYlWm9IxzennjnvdJg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+ "version": "4.30.1",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.30.1.tgz",
+ "integrity": "sha512-B8Rcyj9AV7ZlEFqvB5BubG5iO6ANDsRKlhIxySXcF1axXYUyqwBok+XZPgIYGBgs7LDXfWfifxhw0Ik57T0Yug==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.30.1",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.30.1.tgz",
+ "integrity": "sha512-hqVyueGxAj3cBKrAI4aFHLV+h0Lv5VgWZs9CUGqr1z0fZtlADVV1YPOij6AhcK5An33EXaxnDLmJdQikcn5NEw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.30.1",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.30.1.tgz",
+ "integrity": "sha512-i4Ab2vnvS1AE1PyOIGp2kXni69gU2DAUVt6FSXeIqUCPIR3ZlheMW3oP2JkukDfu3PsexYRbOiJrY+yVNSk9oA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loongarch64-gnu": {
+ "version": "4.30.1",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.30.1.tgz",
+ "integrity": "sha512-fARcF5g296snX0oLGkVxPmysetwUk2zmHcca+e9ObOovBR++9ZPOhqFUM61UUZ2EYpXVPN1redgqVoBB34nTpQ==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
+ "version": "4.30.1",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.30.1.tgz",
+ "integrity": "sha512-GLrZraoO3wVT4uFXh67ElpwQY0DIygxdv0BNW9Hkm3X34wu+BkqrDrkcsIapAY+N2ATEbvak0XQ9gxZtCIA5Rw==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.30.1",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.30.1.tgz",
+ "integrity": "sha512-0WKLaAUUHKBtll0wvOmh6yh3S0wSU9+yas923JIChfxOaaBarmb/lBKPF0w/+jTVozFnOXJeRGZ8NvOxvk/jcw==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.30.1",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.30.1.tgz",
+ "integrity": "sha512-GWFs97Ruxo5Bt+cvVTQkOJ6TIx0xJDD/bMAOXWJg8TCSTEK8RnFeOeiFTxKniTc4vMIaWvCplMAFBt9miGxgkA==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.30.1",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.30.1.tgz",
+ "integrity": "sha512-UtgGb7QGgXDIO+tqqJ5oZRGHsDLO8SlpE4MhqpY9Llpzi5rJMvrK6ZGhsRCST2abZdBqIBeXW6WPD5fGK5SDwg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.30.1",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.30.1.tgz",
+ "integrity": "sha512-V9U8Ey2UqmQsBT+xTOeMzPzwDzyXmnAoO4edZhL7INkwQcaW1Ckv3WJX3qrrp/VHaDkEWIBWhRwP47r8cdrOow==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.30.1",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.30.1.tgz",
+ "integrity": "sha512-WabtHWiPaFF47W3PkHnjbmWawnX/aE57K47ZDT1BXTS5GgrBUEpvOzq0FI0V/UYzQJgdb8XlhVNH8/fwV8xDjw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.30.1",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.30.1.tgz",
+ "integrity": "sha512-pxHAU+Zv39hLUTdQQHUVHf4P+0C47y/ZloorHpzs2SXMRqeAWmGghzAhfOlzFHHwjvgokdFAhC4V+6kC1lRRfw==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.30.1",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.30.1.tgz",
+ "integrity": "sha512-D6qjsXGcvhTjv0kI4fU8tUuBDF/Ueee4SVX79VfNDXZa64TfCW1Slkb6Z7O1p7vflqZjcmOVdZlqf8gvJxc6og==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.6.tgz",
+ "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
+ "dev": true
+ },
+ "node_modules/@types/lodash": {
+ "version": "4.17.14",
+ "resolved": "https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.14.tgz",
+ "integrity": "sha512-jsxagdikDiDBeIRaPYtArcT8my4tN1og7MtMRquFT3XNA6axxyHDRUemqDz/taRDdOUn0GnGHRCuff4q48sW9A==",
+ "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": "5.2.1",
+ "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-5.2.1.tgz",
+ "integrity": "sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ==",
+ "dev": true,
+ "engines": {
+ "node": "^18.0.0 || >=20.0.0"
+ },
+ "peerDependencies": {
+ "vite": "^5.0.0 || ^6.0.0",
+ "vue": "^3.2.25"
+ }
+ },
+ "node_modules/@volar/language-core": {
+ "version": "2.4.11",
+ "resolved": "https://registry.npmmirror.com/@volar/language-core/-/language-core-2.4.11.tgz",
+ "integrity": "sha512-lN2C1+ByfW9/JRPpqScuZt/4OrUUse57GLI6TbLgTIqBVemdl1wNcZ1qYGEo2+Gw8coYLgCy7SuKqn6IrQcQgg==",
+ "dev": true,
+ "dependencies": {
+ "@volar/source-map": "2.4.11"
+ }
+ },
+ "node_modules/@volar/source-map": {
+ "version": "2.4.11",
+ "resolved": "https://registry.npmmirror.com/@volar/source-map/-/source-map-2.4.11.tgz",
+ "integrity": "sha512-ZQpmafIGvaZMn/8iuvCFGrW3smeqkq/IIh9F1SdSx9aUl0J4Iurzd6/FhmjNO5g2ejF3rT45dKskgXWiofqlZQ==",
+ "dev": true
+ },
+ "node_modules/@volar/typescript": {
+ "version": "2.4.11",
+ "resolved": "https://registry.npmmirror.com/@volar/typescript/-/typescript-2.4.11.tgz",
+ "integrity": "sha512-2DT+Tdh88Spp5PyPbqhyoYavYCPDsqbHLFwcUI9K1NlY1YgUJvujGdrqUp0zWxnW7KWNTr3xSpMuv2WnaTKDAw==",
+ "dev": true,
+ "dependencies": {
+ "@volar/language-core": "2.4.11",
+ "path-browserify": "^1.0.1",
+ "vscode-uri": "^3.0.8"
+ }
+ },
+ "node_modules/@vue/compiler-core": {
+ "version": "3.5.13",
+ "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.13.tgz",
+ "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==",
+ "dependencies": {
+ "@babel/parser": "^7.25.3",
+ "@vue/shared": "3.5.13",
+ "entities": "^4.5.0",
+ "estree-walker": "^2.0.2",
+ "source-map-js": "^1.2.0"
+ }
+ },
+ "node_modules/@vue/compiler-dom": {
+ "version": "3.5.13",
+ "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz",
+ "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==",
+ "dependencies": {
+ "@vue/compiler-core": "3.5.13",
+ "@vue/shared": "3.5.13"
+ }
+ },
+ "node_modules/@vue/compiler-sfc": {
+ "version": "3.5.13",
+ "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz",
+ "integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.25.3",
+ "@vue/compiler-core": "3.5.13",
+ "@vue/compiler-dom": "3.5.13",
+ "@vue/compiler-ssr": "3.5.13",
+ "@vue/shared": "3.5.13",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.30.11",
+ "postcss": "^8.4.48",
+ "source-map-js": "^1.2.0"
+ }
+ },
+ "node_modules/@vue/compiler-ssr": {
+ "version": "3.5.13",
+ "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz",
+ "integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==",
+ "dependencies": {
+ "@vue/compiler-dom": "3.5.13",
+ "@vue/shared": "3.5.13"
+ }
+ },
+ "node_modules/@vue/compiler-vue2": {
+ "version": "2.7.16",
+ "resolved": "https://registry.npmmirror.com/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz",
+ "integrity": "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==",
+ "dev": true,
+ "dependencies": {
+ "de-indent": "^1.0.2",
+ "he": "^1.2.0"
+ }
+ },
+ "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/language-core": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmmirror.com/@vue/language-core/-/language-core-2.2.0.tgz",
+ "integrity": "sha512-O1ZZFaaBGkKbsRfnVH1ifOK1/1BUkyK+3SQsfnh6PmMmD4qJcTU8godCeA96jjDRTL6zgnK7YzCHfaUlH2r0Mw==",
+ "dev": true,
+ "dependencies": {
+ "@volar/language-core": "~2.4.11",
+ "@vue/compiler-dom": "^3.5.0",
+ "@vue/compiler-vue2": "^2.7.16",
+ "@vue/shared": "^3.5.0",
+ "alien-signals": "^0.4.9",
+ "minimatch": "^9.0.3",
+ "muggle-string": "^0.4.1",
+ "path-browserify": "^1.0.1"
+ },
+ "peerDependencies": {
+ "typescript": "*"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@vue/reactivity": {
+ "version": "3.5.13",
+ "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.13.tgz",
+ "integrity": "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==",
+ "dependencies": {
+ "@vue/shared": "3.5.13"
+ }
+ },
+ "node_modules/@vue/runtime-core": {
+ "version": "3.5.13",
+ "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.13.tgz",
+ "integrity": "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==",
+ "dependencies": {
+ "@vue/reactivity": "3.5.13",
+ "@vue/shared": "3.5.13"
+ }
+ },
+ "node_modules/@vue/runtime-dom": {
+ "version": "3.5.13",
+ "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz",
+ "integrity": "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==",
+ "dependencies": {
+ "@vue/reactivity": "3.5.13",
+ "@vue/runtime-core": "3.5.13",
+ "@vue/shared": "3.5.13",
+ "csstype": "^3.1.3"
+ }
+ },
+ "node_modules/@vue/server-renderer": {
+ "version": "3.5.13",
+ "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.13.tgz",
+ "integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==",
+ "dependencies": {
+ "@vue/compiler-ssr": "3.5.13",
+ "@vue/shared": "3.5.13"
+ },
+ "peerDependencies": {
+ "vue": "3.5.13"
+ }
+ },
+ "node_modules/@vue/shared": {
+ "version": "3.5.13",
+ "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.13.tgz",
+ "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ=="
+ },
+ "node_modules/@vue/tsconfig": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmmirror.com/@vue/tsconfig/-/tsconfig-0.7.0.tgz",
+ "integrity": "sha512-ku2uNz5MaZ9IerPPUyOHzyjhXoX2kVJaVf7hL315DC17vS6IiZRmmCPfggNbU16QTvM80+uYYy3eYJB59WCtvg==",
+ "dev": true,
+ "peerDependencies": {
+ "typescript": "5.x",
+ "vue": "^3.4.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ },
+ "vue": {
+ "optional": true
+ }
+ }
+ },
+ "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/core/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/@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/@vueuse/shared/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/alien-signals": {
+ "version": "0.4.14",
+ "resolved": "https://registry.npmmirror.com/alien-signals/-/alien-signals-0.4.14.tgz",
+ "integrity": "sha512-itUAVzhczTmP2U5yX67xVpsbbOiquusbWVyA9N+sy6+r6YVbFkahXvNCeEPWEOMhwDYwbVbGHFkVL03N9I5g+Q==",
+ "dev": true
+ },
+ "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/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "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/csstype": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz",
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
+ },
+ "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/de-indent": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz",
+ "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==",
+ "dev": true
+ },
+ "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/element-plus": {
+ "version": "2.9.2",
+ "resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.9.2.tgz",
+ "integrity": "sha512-HS+Cc5mmy70DixJuoN3cMxPPoNWXkjHzUw2PcGmysk6NHQzzUtwi2Vc+dlmbmRxj3eNqgC1xpPQV5Nf9uDtQRg==",
+ "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==",
+ "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/esbuild": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.24.2.tgz",
+ "integrity": "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==",
+ "dev": true,
+ "hasInstallScript": true,
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.24.2",
+ "@esbuild/android-arm": "0.24.2",
+ "@esbuild/android-arm64": "0.24.2",
+ "@esbuild/android-x64": "0.24.2",
+ "@esbuild/darwin-arm64": "0.24.2",
+ "@esbuild/darwin-x64": "0.24.2",
+ "@esbuild/freebsd-arm64": "0.24.2",
+ "@esbuild/freebsd-x64": "0.24.2",
+ "@esbuild/linux-arm": "0.24.2",
+ "@esbuild/linux-arm64": "0.24.2",
+ "@esbuild/linux-ia32": "0.24.2",
+ "@esbuild/linux-loong64": "0.24.2",
+ "@esbuild/linux-mips64el": "0.24.2",
+ "@esbuild/linux-ppc64": "0.24.2",
+ "@esbuild/linux-riscv64": "0.24.2",
+ "@esbuild/linux-s390x": "0.24.2",
+ "@esbuild/linux-x64": "0.24.2",
+ "@esbuild/netbsd-arm64": "0.24.2",
+ "@esbuild/netbsd-x64": "0.24.2",
+ "@esbuild/openbsd-arm64": "0.24.2",
+ "@esbuild/openbsd-x64": "0.24.2",
+ "@esbuild/sunos-x64": "0.24.2",
+ "@esbuild/win32-arm64": "0.24.2",
+ "@esbuild/win32-ia32": "0.24.2",
+ "@esbuild/win32-x64": "0.24.2"
+ }
+ },
+ "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=="
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "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",
+ "optional": true
+ },
+ "node_modules/he": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmmirror.com/he/-/he-1.2.0.tgz",
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+ "dev": true,
+ "bin": {
+ "he": "bin/he"
+ }
+ },
+ "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-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/less": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmmirror.com/less/-/less-4.2.1.tgz",
+ "integrity": "sha512-CasaJidTIhWmjcqv0Uj5vccMI7pJgfD9lMkKtlnTHAdJdYK/7l8pM9tumLyJ0zhbD4KJLo/YvTj+xznQd5NBhg==",
+ "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": ">=6"
+ },
+ "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/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/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==",
+ "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/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/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/muggle-string": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmmirror.com/muggle-string/-/muggle-string-0.4.1.tgz",
+ "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==",
+ "dev": true
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.8",
+ "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.8.tgz",
+ "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "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/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/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-browserify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/path-browserify/-/path-browserify-1.0.1.tgz",
+ "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==",
+ "dev": true
+ },
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
+ },
+ "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.4.49",
+ "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.49.tgz",
+ "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==",
+ "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"
+ }
+ ],
+ "dependencies": {
+ "nanoid": "^3.3.7",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "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/rollup": {
+ "version": "4.30.1",
+ "resolved": "https://registry.npmmirror.com/rollup/-/rollup-4.30.1.tgz",
+ "integrity": "sha512-mlJ4glW020fPuLi7DkM/lN97mYEZGWeqBnrljzN0gs7GLctqX3lNWxKQ7Gl712UAX+6fog/L3jh4gb7R6aVi3w==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree": "1.0.6"
+ },
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=18.0.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "@rollup/rollup-android-arm-eabi": "4.30.1",
+ "@rollup/rollup-android-arm64": "4.30.1",
+ "@rollup/rollup-darwin-arm64": "4.30.1",
+ "@rollup/rollup-darwin-x64": "4.30.1",
+ "@rollup/rollup-freebsd-arm64": "4.30.1",
+ "@rollup/rollup-freebsd-x64": "4.30.1",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.30.1",
+ "@rollup/rollup-linux-arm-musleabihf": "4.30.1",
+ "@rollup/rollup-linux-arm64-gnu": "4.30.1",
+ "@rollup/rollup-linux-arm64-musl": "4.30.1",
+ "@rollup/rollup-linux-loongarch64-gnu": "4.30.1",
+ "@rollup/rollup-linux-powerpc64le-gnu": "4.30.1",
+ "@rollup/rollup-linux-riscv64-gnu": "4.30.1",
+ "@rollup/rollup-linux-s390x-gnu": "4.30.1",
+ "@rollup/rollup-linux-x64-gnu": "4.30.1",
+ "@rollup/rollup-linux-x64-musl": "4.30.1",
+ "@rollup/rollup-win32-arm64-msvc": "4.30.1",
+ "@rollup/rollup-win32-ia32-msvc": "4.30.1",
+ "@rollup/rollup-win32-x64-msvc": "4.30.1",
+ "fsevents": "~2.3.2"
+ }
+ },
+ "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": "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/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==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "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/typescript": {
+ "version": "5.6.3",
+ "resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.6.3.tgz",
+ "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==",
+ "devOptional": true,
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/vite": {
+ "version": "6.0.7",
+ "resolved": "https://registry.npmmirror.com/vite/-/vite-6.0.7.tgz",
+ "integrity": "sha512-RDt8r/7qx9940f8FcOIAH9PTViRrghKaK2K1jY3RaAURrEUbm9Du1mJ72G+jlhtG3WwodnfzY8ORQZbBavZEAQ==",
+ "dev": true,
+ "dependencies": {
+ "esbuild": "^0.24.2",
+ "postcss": "^8.4.49",
+ "rollup": "^4.23.0"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ },
+ "peerDependencies": {
+ "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
+ "jiti": ">=1.21.0",
+ "less": "*",
+ "lightningcss": "^1.21.0",
+ "sass": "*",
+ "sass-embedded": "*",
+ "stylus": "*",
+ "sugarss": "*",
+ "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/vscode-uri": {
+ "version": "3.0.8",
+ "resolved": "https://registry.npmmirror.com/vscode-uri/-/vscode-uri-3.0.8.tgz",
+ "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==",
+ "dev": true
+ },
+ "node_modules/vue": {
+ "version": "3.5.13",
+ "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.13.tgz",
+ "integrity": "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==",
+ "dependencies": {
+ "@vue/compiler-dom": "3.5.13",
+ "@vue/compiler-sfc": "3.5.13",
+ "@vue/runtime-dom": "3.5.13",
+ "@vue/server-renderer": "3.5.13",
+ "@vue/shared": "3.5.13"
+ },
+ "peerDependencies": {
+ "typescript": "*"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vue-router": {
+ "version": "4.0.13",
+ "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.0.13.tgz",
+ "integrity": "sha512-LmXrC+BkDRLak+d5xTMgUYraT3Nj0H/vCbP+7usGvIl9Viqd1UP6AsP0i69pSbn9O0dXK/xCdp4yPw21HqV9Jw==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/devtools-api": "^6.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/posva"
+ },
+ "peerDependencies": {
+ "vue": "^3.2.0"
+ }
+ },
+ "node_modules/vue-tsc": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmmirror.com/vue-tsc/-/vue-tsc-2.2.0.tgz",
+ "integrity": "sha512-gtmM1sUuJ8aSb0KoAFmK9yMxb8TxjewmxqTJ1aKphD5Cbu0rULFY6+UQT51zW7SpUcenfPUuflKyVwyx9Qdnxg==",
+ "dev": true,
+ "dependencies": {
+ "@volar/typescript": "~2.4.11",
+ "@vue/language-core": "2.2.0"
+ },
+ "bin": {
+ "vue-tsc": "bin/vue-tsc.js"
+ },
+ "peerDependencies": {
+ "typescript": ">=5.0.0"
+ }
+ },
+ "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"
+ }
+ }
+ },
+ "dependencies": {
+ "@babel/helper-string-parser": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
+ "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA=="
+ },
+ "@babel/helper-validator-identifier": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
+ "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="
+ },
+ "@babel/parser": {
+ "version": "7.26.3",
+ "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.26.3.tgz",
+ "integrity": "sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==",
+ "requires": {
+ "@babel/types": "^7.26.3"
+ }
+ },
+ "@babel/types": {
+ "version": "7.26.3",
+ "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.26.3.tgz",
+ "integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==",
+ "requires": {
+ "@babel/helper-string-parser": "^7.25.9",
+ "@babel/helper-validator-identifier": "^7.25.9"
+ }
+ },
+ "@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=="
+ },
+ "@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==",
+ "requires": {}
+ },
+ "@esbuild/aix-ppc64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz",
+ "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/android-arm": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.24.2.tgz",
+ "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/android-arm64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz",
+ "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/android-x64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.24.2.tgz",
+ "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/darwin-arm64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz",
+ "integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/darwin-x64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz",
+ "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/freebsd-arm64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz",
+ "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/freebsd-x64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz",
+ "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-arm": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz",
+ "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-arm64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz",
+ "integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-ia32": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz",
+ "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-loong64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz",
+ "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-mips64el": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz",
+ "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-ppc64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz",
+ "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-riscv64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz",
+ "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-s390x": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz",
+ "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-x64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz",
+ "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/netbsd-arm64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz",
+ "integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/netbsd-x64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz",
+ "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/openbsd-arm64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz",
+ "integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/openbsd-x64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz",
+ "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/sunos-x64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz",
+ "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/win32-arm64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz",
+ "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/win32-ia32": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz",
+ "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/win32-x64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz",
+ "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==",
+ "dev": true,
+ "optional": true
+ },
+ "@floating-ui/core": {
+ "version": "1.6.9",
+ "resolved": "https://registry.npmmirror.com/@floating-ui/core/-/core-1.6.9.tgz",
+ "integrity": "sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==",
+ "requires": {
+ "@floating-ui/utils": "^0.2.9"
+ }
+ },
+ "@floating-ui/dom": {
+ "version": "1.6.13",
+ "resolved": "https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.6.13.tgz",
+ "integrity": "sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==",
+ "requires": {
+ "@floating-ui/core": "^1.6.0",
+ "@floating-ui/utils": "^0.2.9"
+ }
+ },
+ "@floating-ui/utils": {
+ "version": "0.2.9",
+ "resolved": "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.2.9.tgz",
+ "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg=="
+ },
+ "@jridgewell/sourcemap-codec": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
+ "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="
+ },
+ "@popperjs/core": {
+ "version": "npm:@sxzz/popperjs-es@2.11.7",
+ "resolved": "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz",
+ "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ=="
+ },
+ "@rollup/rollup-android-arm-eabi": {
+ "version": "4.30.1",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.30.1.tgz",
+ "integrity": "sha512-pSWY+EVt3rJ9fQ3IqlrEUtXh3cGqGtPDH1FQlNZehO2yYxCHEX1SPsz1M//NXwYfbTlcKr9WObLnJX9FsS9K1Q==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-android-arm64": {
+ "version": "4.30.1",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.30.1.tgz",
+ "integrity": "sha512-/NA2qXxE3D/BRjOJM8wQblmArQq1YoBVJjrjoTSBS09jgUisq7bqxNHJ8kjCHeV21W/9WDGwJEWSN0KQ2mtD/w==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-darwin-arm64": {
+ "version": "4.30.1",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.30.1.tgz",
+ "integrity": "sha512-r7FQIXD7gB0WJ5mokTUgUWPl0eYIH0wnxqeSAhuIwvnnpjdVB8cRRClyKLQr7lgzjctkbp5KmswWszlwYln03Q==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-darwin-x64": {
+ "version": "4.30.1",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.30.1.tgz",
+ "integrity": "sha512-x78BavIwSH6sqfP2xeI1hd1GpHL8J4W2BXcVM/5KYKoAD3nNsfitQhvWSw+TFtQTLZ9OmlF+FEInEHyubut2OA==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-freebsd-arm64": {
+ "version": "4.30.1",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.30.1.tgz",
+ "integrity": "sha512-HYTlUAjbO1z8ywxsDFWADfTRfTIIy/oUlfIDmlHYmjUP2QRDTzBuWXc9O4CXM+bo9qfiCclmHk1x4ogBjOUpUQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-freebsd-x64": {
+ "version": "4.30.1",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.30.1.tgz",
+ "integrity": "sha512-1MEdGqogQLccphhX5myCJqeGNYTNcmTyaic9S7CG3JhwuIByJ7J05vGbZxsizQthP1xpVx7kd3o31eOogfEirw==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.30.1",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.30.1.tgz",
+ "integrity": "sha512-PaMRNBSqCx7K3Wc9QZkFx5+CX27WFpAMxJNiYGAXfmMIKC7jstlr32UhTgK6T07OtqR+wYlWm9IxzennjnvdJg==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-arm-musleabihf": {
+ "version": "4.30.1",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.30.1.tgz",
+ "integrity": "sha512-B8Rcyj9AV7ZlEFqvB5BubG5iO6ANDsRKlhIxySXcF1axXYUyqwBok+XZPgIYGBgs7LDXfWfifxhw0Ik57T0Yug==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.30.1",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.30.1.tgz",
+ "integrity": "sha512-hqVyueGxAj3cBKrAI4aFHLV+h0Lv5VgWZs9CUGqr1z0fZtlADVV1YPOij6AhcK5An33EXaxnDLmJdQikcn5NEw==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-arm64-musl": {
+ "version": "4.30.1",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.30.1.tgz",
+ "integrity": "sha512-i4Ab2vnvS1AE1PyOIGp2kXni69gU2DAUVt6FSXeIqUCPIR3ZlheMW3oP2JkukDfu3PsexYRbOiJrY+yVNSk9oA==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-loongarch64-gnu": {
+ "version": "4.30.1",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.30.1.tgz",
+ "integrity": "sha512-fARcF5g296snX0oLGkVxPmysetwUk2zmHcca+e9ObOovBR++9ZPOhqFUM61UUZ2EYpXVPN1redgqVoBB34nTpQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-powerpc64le-gnu": {
+ "version": "4.30.1",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.30.1.tgz",
+ "integrity": "sha512-GLrZraoO3wVT4uFXh67ElpwQY0DIygxdv0BNW9Hkm3X34wu+BkqrDrkcsIapAY+N2ATEbvak0XQ9gxZtCIA5Rw==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.30.1",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.30.1.tgz",
+ "integrity": "sha512-0WKLaAUUHKBtll0wvOmh6yh3S0wSU9+yas923JIChfxOaaBarmb/lBKPF0w/+jTVozFnOXJeRGZ8NvOxvk/jcw==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.30.1",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.30.1.tgz",
+ "integrity": "sha512-GWFs97Ruxo5Bt+cvVTQkOJ6TIx0xJDD/bMAOXWJg8TCSTEK8RnFeOeiFTxKniTc4vMIaWvCplMAFBt9miGxgkA==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-x64-gnu": {
+ "version": "4.30.1",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.30.1.tgz",
+ "integrity": "sha512-UtgGb7QGgXDIO+tqqJ5oZRGHsDLO8SlpE4MhqpY9Llpzi5rJMvrK6ZGhsRCST2abZdBqIBeXW6WPD5fGK5SDwg==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-x64-musl": {
+ "version": "4.30.1",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.30.1.tgz",
+ "integrity": "sha512-V9U8Ey2UqmQsBT+xTOeMzPzwDzyXmnAoO4edZhL7INkwQcaW1Ckv3WJX3qrrp/VHaDkEWIBWhRwP47r8cdrOow==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.30.1",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.30.1.tgz",
+ "integrity": "sha512-WabtHWiPaFF47W3PkHnjbmWawnX/aE57K47ZDT1BXTS5GgrBUEpvOzq0FI0V/UYzQJgdb8XlhVNH8/fwV8xDjw==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.30.1",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.30.1.tgz",
+ "integrity": "sha512-pxHAU+Zv39hLUTdQQHUVHf4P+0C47y/ZloorHpzs2SXMRqeAWmGghzAhfOlzFHHwjvgokdFAhC4V+6kC1lRRfw==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-win32-x64-msvc": {
+ "version": "4.30.1",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.30.1.tgz",
+ "integrity": "sha512-D6qjsXGcvhTjv0kI4fU8tUuBDF/Ueee4SVX79VfNDXZa64TfCW1Slkb6Z7O1p7vflqZjcmOVdZlqf8gvJxc6og==",
+ "dev": true,
+ "optional": true
+ },
+ "@types/estree": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.6.tgz",
+ "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
+ "dev": true
+ },
+ "@types/lodash": {
+ "version": "4.17.14",
+ "resolved": "https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.14.tgz",
+ "integrity": "sha512-jsxagdikDiDBeIRaPYtArcT8my4tN1og7MtMRquFT3XNA6axxyHDRUemqDz/taRDdOUn0GnGHRCuff4q48sW9A=="
+ },
+ "@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==",
+ "requires": {
+ "@types/lodash": "*"
+ }
+ },
+ "@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=="
+ },
+ "@vitejs/plugin-vue": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-5.2.1.tgz",
+ "integrity": "sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ==",
+ "dev": true,
+ "requires": {}
+ },
+ "@volar/language-core": {
+ "version": "2.4.11",
+ "resolved": "https://registry.npmmirror.com/@volar/language-core/-/language-core-2.4.11.tgz",
+ "integrity": "sha512-lN2C1+ByfW9/JRPpqScuZt/4OrUUse57GLI6TbLgTIqBVemdl1wNcZ1qYGEo2+Gw8coYLgCy7SuKqn6IrQcQgg==",
+ "dev": true,
+ "requires": {
+ "@volar/source-map": "2.4.11"
+ }
+ },
+ "@volar/source-map": {
+ "version": "2.4.11",
+ "resolved": "https://registry.npmmirror.com/@volar/source-map/-/source-map-2.4.11.tgz",
+ "integrity": "sha512-ZQpmafIGvaZMn/8iuvCFGrW3smeqkq/IIh9F1SdSx9aUl0J4Iurzd6/FhmjNO5g2ejF3rT45dKskgXWiofqlZQ==",
+ "dev": true
+ },
+ "@volar/typescript": {
+ "version": "2.4.11",
+ "resolved": "https://registry.npmmirror.com/@volar/typescript/-/typescript-2.4.11.tgz",
+ "integrity": "sha512-2DT+Tdh88Spp5PyPbqhyoYavYCPDsqbHLFwcUI9K1NlY1YgUJvujGdrqUp0zWxnW7KWNTr3xSpMuv2WnaTKDAw==",
+ "dev": true,
+ "requires": {
+ "@volar/language-core": "2.4.11",
+ "path-browserify": "^1.0.1",
+ "vscode-uri": "^3.0.8"
+ }
+ },
+ "@vue/compiler-core": {
+ "version": "3.5.13",
+ "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.13.tgz",
+ "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==",
+ "requires": {
+ "@babel/parser": "^7.25.3",
+ "@vue/shared": "3.5.13",
+ "entities": "^4.5.0",
+ "estree-walker": "^2.0.2",
+ "source-map-js": "^1.2.0"
+ }
+ },
+ "@vue/compiler-dom": {
+ "version": "3.5.13",
+ "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz",
+ "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==",
+ "requires": {
+ "@vue/compiler-core": "3.5.13",
+ "@vue/shared": "3.5.13"
+ }
+ },
+ "@vue/compiler-sfc": {
+ "version": "3.5.13",
+ "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz",
+ "integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==",
+ "requires": {
+ "@babel/parser": "^7.25.3",
+ "@vue/compiler-core": "3.5.13",
+ "@vue/compiler-dom": "3.5.13",
+ "@vue/compiler-ssr": "3.5.13",
+ "@vue/shared": "3.5.13",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.30.11",
+ "postcss": "^8.4.48",
+ "source-map-js": "^1.2.0"
+ }
+ },
+ "@vue/compiler-ssr": {
+ "version": "3.5.13",
+ "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz",
+ "integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==",
+ "requires": {
+ "@vue/compiler-dom": "3.5.13",
+ "@vue/shared": "3.5.13"
+ }
+ },
+ "@vue/compiler-vue2": {
+ "version": "2.7.16",
+ "resolved": "https://registry.npmmirror.com/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz",
+ "integrity": "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==",
+ "dev": true,
+ "requires": {
+ "de-indent": "^1.0.2",
+ "he": "^1.2.0"
+ }
+ },
+ "@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=="
+ },
+ "@vue/language-core": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmmirror.com/@vue/language-core/-/language-core-2.2.0.tgz",
+ "integrity": "sha512-O1ZZFaaBGkKbsRfnVH1ifOK1/1BUkyK+3SQsfnh6PmMmD4qJcTU8godCeA96jjDRTL6zgnK7YzCHfaUlH2r0Mw==",
+ "dev": true,
+ "requires": {
+ "@volar/language-core": "~2.4.11",
+ "@vue/compiler-dom": "^3.5.0",
+ "@vue/compiler-vue2": "^2.7.16",
+ "@vue/shared": "^3.5.0",
+ "alien-signals": "^0.4.9",
+ "minimatch": "^9.0.3",
+ "muggle-string": "^0.4.1",
+ "path-browserify": "^1.0.1"
+ }
+ },
+ "@vue/reactivity": {
+ "version": "3.5.13",
+ "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.13.tgz",
+ "integrity": "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==",
+ "requires": {
+ "@vue/shared": "3.5.13"
+ }
+ },
+ "@vue/runtime-core": {
+ "version": "3.5.13",
+ "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.13.tgz",
+ "integrity": "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==",
+ "requires": {
+ "@vue/reactivity": "3.5.13",
+ "@vue/shared": "3.5.13"
+ }
+ },
+ "@vue/runtime-dom": {
+ "version": "3.5.13",
+ "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz",
+ "integrity": "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==",
+ "requires": {
+ "@vue/reactivity": "3.5.13",
+ "@vue/runtime-core": "3.5.13",
+ "@vue/shared": "3.5.13",
+ "csstype": "^3.1.3"
+ }
+ },
+ "@vue/server-renderer": {
+ "version": "3.5.13",
+ "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.13.tgz",
+ "integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==",
+ "requires": {
+ "@vue/compiler-ssr": "3.5.13",
+ "@vue/shared": "3.5.13"
+ }
+ },
+ "@vue/shared": {
+ "version": "3.5.13",
+ "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.13.tgz",
+ "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ=="
+ },
+ "@vue/tsconfig": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmmirror.com/@vue/tsconfig/-/tsconfig-0.7.0.tgz",
+ "integrity": "sha512-ku2uNz5MaZ9IerPPUyOHzyjhXoX2kVJaVf7hL315DC17vS6IiZRmmCPfggNbU16QTvM80+uYYy3eYJB59WCtvg==",
+ "dev": true,
+ "requires": {}
+ },
+ "@vueuse/core": {
+ "version": "9.13.0",
+ "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-9.13.0.tgz",
+ "integrity": "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==",
+ "requires": {
+ "@types/web-bluetooth": "^0.0.16",
+ "@vueuse/metadata": "9.13.0",
+ "@vueuse/shared": "9.13.0",
+ "vue-demi": "*"
+ },
+ "dependencies": {
+ "vue-demi": {
+ "version": "0.14.10",
+ "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz",
+ "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",
+ "requires": {}
+ }
+ }
+ },
+ "@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=="
+ },
+ "@vueuse/shared": {
+ "version": "9.13.0",
+ "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.13.0.tgz",
+ "integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==",
+ "requires": {
+ "vue-demi": "*"
+ },
+ "dependencies": {
+ "vue-demi": {
+ "version": "0.14.10",
+ "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz",
+ "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",
+ "requires": {}
+ }
+ }
+ },
+ "alien-signals": {
+ "version": "0.4.14",
+ "resolved": "https://registry.npmmirror.com/alien-signals/-/alien-signals-0.4.14.tgz",
+ "integrity": "sha512-itUAVzhczTmP2U5yX67xVpsbbOiquusbWVyA9N+sy6+r6YVbFkahXvNCeEPWEOMhwDYwbVbGHFkVL03N9I5g+Q==",
+ "dev": true
+ },
+ "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=="
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "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,
+ "requires": {
+ "is-what": "^3.14.1"
+ }
+ },
+ "csstype": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz",
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
+ },
+ "dayjs": {
+ "version": "1.11.13",
+ "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz",
+ "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg=="
+ },
+ "de-indent": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz",
+ "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==",
+ "dev": true
+ },
+ "echarts": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.6.0.tgz",
+ "integrity": "sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==",
+ "requires": {
+ "tslib": "2.3.0",
+ "zrender": "5.6.1"
+ }
+ },
+ "element-plus": {
+ "version": "2.9.2",
+ "resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.9.2.tgz",
+ "integrity": "sha512-HS+Cc5mmy70DixJuoN3cMxPPoNWXkjHzUw2PcGmysk6NHQzzUtwi2Vc+dlmbmRxj3eNqgC1xpPQV5Nf9uDtQRg==",
+ "requires": {
+ "@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": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="
+ },
+ "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,
+ "optional": true,
+ "requires": {
+ "prr": "~1.0.1"
+ }
+ },
+ "esbuild": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.24.2.tgz",
+ "integrity": "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==",
+ "dev": true,
+ "requires": {
+ "@esbuild/aix-ppc64": "0.24.2",
+ "@esbuild/android-arm": "0.24.2",
+ "@esbuild/android-arm64": "0.24.2",
+ "@esbuild/android-x64": "0.24.2",
+ "@esbuild/darwin-arm64": "0.24.2",
+ "@esbuild/darwin-x64": "0.24.2",
+ "@esbuild/freebsd-arm64": "0.24.2",
+ "@esbuild/freebsd-x64": "0.24.2",
+ "@esbuild/linux-arm": "0.24.2",
+ "@esbuild/linux-arm64": "0.24.2",
+ "@esbuild/linux-ia32": "0.24.2",
+ "@esbuild/linux-loong64": "0.24.2",
+ "@esbuild/linux-mips64el": "0.24.2",
+ "@esbuild/linux-ppc64": "0.24.2",
+ "@esbuild/linux-riscv64": "0.24.2",
+ "@esbuild/linux-s390x": "0.24.2",
+ "@esbuild/linux-x64": "0.24.2",
+ "@esbuild/netbsd-arm64": "0.24.2",
+ "@esbuild/netbsd-x64": "0.24.2",
+ "@esbuild/openbsd-arm64": "0.24.2",
+ "@esbuild/openbsd-x64": "0.24.2",
+ "@esbuild/sunos-x64": "0.24.2",
+ "@esbuild/win32-arm64": "0.24.2",
+ "@esbuild/win32-ia32": "0.24.2",
+ "@esbuild/win32-x64": "0.24.2"
+ }
+ },
+ "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=="
+ },
+ "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=="
+ },
+ "fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "optional": true
+ },
+ "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,
+ "optional": true
+ },
+ "he": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmmirror.com/he/-/he-1.2.0.tgz",
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+ "dev": true
+ },
+ "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,
+ "optional": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ }
+ },
+ "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,
+ "optional": true
+ },
+ "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
+ },
+ "less": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmmirror.com/less/-/less-4.2.1.tgz",
+ "integrity": "sha512-CasaJidTIhWmjcqv0Uj5vccMI7pJgfD9lMkKtlnTHAdJdYK/7l8pM9tumLyJ0zhbD4KJLo/YvTj+xznQd5NBhg==",
+ "dev": true,
+ "requires": {
+ "copy-anything": "^2.0.1",
+ "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",
+ "parse-node-version": "^1.0.1",
+ "source-map": "~0.6.0",
+ "tslib": "^2.3.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+ },
+ "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=="
+ },
+ "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==",
+ "requires": {}
+ },
+ "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==",
+ "requires": {
+ "@jridgewell/sourcemap-codec": "^1.5.0"
+ }
+ },
+ "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,
+ "optional": true,
+ "requires": {
+ "pify": "^4.0.1",
+ "semver": "^5.6.0"
+ }
+ },
+ "memoize-one": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz",
+ "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw=="
+ },
+ "mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "dev": true,
+ "optional": true
+ },
+ "minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^2.0.1"
+ }
+ },
+ "muggle-string": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmmirror.com/muggle-string/-/muggle-string-0.4.1.tgz",
+ "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==",
+ "dev": true
+ },
+ "nanoid": {
+ "version": "3.3.8",
+ "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.8.tgz",
+ "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w=="
+ },
+ "needle": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmmirror.com/needle/-/needle-3.3.1.tgz",
+ "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "iconv-lite": "^0.6.3",
+ "sax": "^1.2.4"
+ }
+ },
+ "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=="
+ },
+ "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
+ },
+ "path-browserify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/path-browserify/-/path-browserify-1.0.1.tgz",
+ "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==",
+ "dev": true
+ },
+ "picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
+ },
+ "pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+ "dev": true,
+ "optional": true
+ },
+ "postcss": {
+ "version": "8.4.49",
+ "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.49.tgz",
+ "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==",
+ "requires": {
+ "nanoid": "^3.3.7",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ }
+ },
+ "prr": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/prr/-/prr-1.0.1.tgz",
+ "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==",
+ "dev": true,
+ "optional": true
+ },
+ "rollup": {
+ "version": "4.30.1",
+ "resolved": "https://registry.npmmirror.com/rollup/-/rollup-4.30.1.tgz",
+ "integrity": "sha512-mlJ4glW020fPuLi7DkM/lN97mYEZGWeqBnrljzN0gs7GLctqX3lNWxKQ7Gl712UAX+6fog/L3jh4gb7R6aVi3w==",
+ "dev": true,
+ "requires": {
+ "@rollup/rollup-android-arm-eabi": "4.30.1",
+ "@rollup/rollup-android-arm64": "4.30.1",
+ "@rollup/rollup-darwin-arm64": "4.30.1",
+ "@rollup/rollup-darwin-x64": "4.30.1",
+ "@rollup/rollup-freebsd-arm64": "4.30.1",
+ "@rollup/rollup-freebsd-x64": "4.30.1",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.30.1",
+ "@rollup/rollup-linux-arm-musleabihf": "4.30.1",
+ "@rollup/rollup-linux-arm64-gnu": "4.30.1",
+ "@rollup/rollup-linux-arm64-musl": "4.30.1",
+ "@rollup/rollup-linux-loongarch64-gnu": "4.30.1",
+ "@rollup/rollup-linux-powerpc64le-gnu": "4.30.1",
+ "@rollup/rollup-linux-riscv64-gnu": "4.30.1",
+ "@rollup/rollup-linux-s390x-gnu": "4.30.1",
+ "@rollup/rollup-linux-x64-gnu": "4.30.1",
+ "@rollup/rollup-linux-x64-musl": "4.30.1",
+ "@rollup/rollup-win32-arm64-msvc": "4.30.1",
+ "@rollup/rollup-win32-ia32-msvc": "4.30.1",
+ "@rollup/rollup-win32-x64-msvc": "4.30.1",
+ "@types/estree": "1.0.6",
+ "fsevents": "~2.3.2"
+ }
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true,
+ "optional": true
+ },
+ "sax": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmmirror.com/sax/-/sax-1.4.1.tgz",
+ "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==",
+ "dev": true,
+ "optional": true
+ },
+ "semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+ "dev": true,
+ "optional": true
+ },
+ "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,
+ "optional": true
+ },
+ "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=="
+ },
+ "tslib": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz",
+ "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
+ },
+ "typescript": {
+ "version": "5.6.3",
+ "resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.6.3.tgz",
+ "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==",
+ "devOptional": true
+ },
+ "vite": {
+ "version": "6.0.7",
+ "resolved": "https://registry.npmmirror.com/vite/-/vite-6.0.7.tgz",
+ "integrity": "sha512-RDt8r/7qx9940f8FcOIAH9PTViRrghKaK2K1jY3RaAURrEUbm9Du1mJ72G+jlhtG3WwodnfzY8ORQZbBavZEAQ==",
+ "dev": true,
+ "requires": {
+ "esbuild": "^0.24.2",
+ "fsevents": "~2.3.3",
+ "postcss": "^8.4.49",
+ "rollup": "^4.23.0"
+ }
+ },
+ "vscode-uri": {
+ "version": "3.0.8",
+ "resolved": "https://registry.npmmirror.com/vscode-uri/-/vscode-uri-3.0.8.tgz",
+ "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==",
+ "dev": true
+ },
+ "vue": {
+ "version": "3.5.13",
+ "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.13.tgz",
+ "integrity": "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==",
+ "requires": {
+ "@vue/compiler-dom": "3.5.13",
+ "@vue/compiler-sfc": "3.5.13",
+ "@vue/runtime-dom": "3.5.13",
+ "@vue/server-renderer": "3.5.13",
+ "@vue/shared": "3.5.13"
+ }
+ },
+ "vue-router": {
+ "version": "4.0.13",
+ "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.0.13.tgz",
+ "integrity": "sha512-LmXrC+BkDRLak+d5xTMgUYraT3Nj0H/vCbP+7usGvIl9Viqd1UP6AsP0i69pSbn9O0dXK/xCdp4yPw21HqV9Jw==",
+ "requires": {
+ "@vue/devtools-api": "^6.0.0"
+ }
+ },
+ "vue-tsc": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmmirror.com/vue-tsc/-/vue-tsc-2.2.0.tgz",
+ "integrity": "sha512-gtmM1sUuJ8aSb0KoAFmK9yMxb8TxjewmxqTJ1aKphD5Cbu0rULFY6+UQT51zW7SpUcenfPUuflKyVwyx9Qdnxg==",
+ "dev": true,
+ "requires": {
+ "@volar/typescript": "~2.4.11",
+ "@vue/language-core": "2.2.0"
+ }
+ },
+ "zrender": {
+ "version": "5.6.1",
+ "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.6.1.tgz",
+ "integrity": "sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==",
+ "requires": {
+ "tslib": "2.3.0"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..a957493
--- /dev/null
+++ b/package.json
@@ -0,0 +1,26 @@
+{
+ "name": "my-project",
+ "private": true,
+ "version": "0.0.0",
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "vue-tsc -b && vite build",
+ "preview": "vite preview"
+ },
+ "dependencies": {
+ "echarts": "^5.6.0",
+ "element-plus": "^2.9.2",
+ "vue": "^3.5.13",
+ "vue-router": "^4.0.13"
+ },
+ "devDependencies": {
+ "@vitejs/plugin-vue": "^5.2.1",
+ "@vue/compiler-sfc": "^3.5.13",
+ "@vue/tsconfig": "^0.7.0",
+ "less": "^4.2.1",
+ "typescript": "~5.6.2",
+ "vite": "^6.0.5",
+ "vue-tsc": "^2.2.0"
+ }
+}
diff --git a/public/vite.svg b/public/vite.svg
new file mode 100644
index 0000000..fcf269d
--- /dev/null
+++ b/public/vite.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 165.75 145.05"><defs><style>.cls-1,.cls-4{fill:#094;}.cls-1,.cls-2,.cls-3{isolation:isolate;opacity:0.5;}.cls-2{fill:#abcd03;}.cls-3{fill:#9fd9f6;}.cls-5{fill:#333;}</style></defs><g id="图层_2" data-name="图层 2"><g id="图层_1-2" data-name="图层 1"><g id="content"><path class="cls-1" d="M0,50.94v58.84c17.4,8.29,111.05-77.9,165.75-69.62V78.29C111.05,86.57,17.4,42.65,0,50.94"/><path class="cls-2" d="M0,.38V144.59c49.73,8.28,92.82-97,165.75-88.68v56.36C92.82,120.55,49.73-7.9,0,.38"/><path class="cls-3" d="M0,44.31V71.66C45.58,79.94,107.74-2.93,165.75,5.36V117.24C107.74,125.53,45.58,36,0,44.31"/><g id="name_and_slogan_id" data-name="name and slogan id"><path id="namepathdata" class="cls-4" d="M73.94,61.48v8.88h7.5v6.12H57V70.36H67.19V61.48H57.87V55.17h9.32V46.29H63.75c-.13,2-.71,3.42-1.75,4.25s-2.71,1.19-5,1.19V41.42h2.31V34.48h4.44v5.69h3.44V34.48h6.75v5.69h6.93v6.12H73.94v8.88h6.44v6.31ZM56.25,35v33.5a15.69,15.69,0,0,1-.44,4A5.4,5.4,0,0,1,54.56,75a4.11,4.11,0,0,1-2.12,1.38,12.06,12.06,0,0,1-3.25.37h-1.5V69.42h2.12V62.73H47.06v5.94a20.92,20.92,0,0,1-.31,4A5,5,0,0,1,45.5,75a4.14,4.14,0,0,1-2.25,1.19,14.36,14.36,0,0,1-3.56.38V68.67h1.12V35ZM47.06,57.36h2.75v-6H47.06Zm0-11.38h2.75V40H47.06Zm79,24.75v5.88H97.25A6.76,6.76,0,0,1,94,76a5.58,5.58,0,0,1-2-2.06,12.18,12.18,0,0,1-.81,1.5,2.3,2.3,0,0,1-.81.87,2.7,2.7,0,0,1-1,.44,7.86,7.86,0,0,1-1.49.13H85V69.23h1.56a1.08,1.08,0,0,0,1.13-.62,5,5,0,0,0,.19-1.38V50.36H85V44.67h9.44V67.42A9.49,9.49,0,0,0,94.56,69a1.45,1.45,0,0,0,.5,1,2.09,2.09,0,0,0,1.19.5,8.29,8.29,0,0,0,2,.19ZM96.94,41.48h10.87V39.86h-10V35.61h20.5v-.82h6.56a6.68,6.68,0,0,1-.31,2.13,3.43,3.43,0,0,1-1.31,1.56,6.28,6.28,0,0,1-2.37,1.06,19.18,19.18,0,0,1-3.82.32h-2.19v1.62h10.88v4.44h-3.5v1.5h3.56v5.12h-2.56c-2.46,0-4.23-.45-5.31-1.37a4.87,4.87,0,0,1-1.56-3.94V45.92h-1.51v6.31h-7.06V45.92H106.5v1.31a4.76,4.76,0,0,1-1.63,3.94c-1,.92-2.81,1.37-5.31,1.37h-2.5V47.42h3.56v-1.5H96.94Zm.94,11.44h24.43l1.75,2.5-2.5,2.87h3.63v7.44a5.29,5.29,0,0,1-1,3.56c-.63.75-1.86,1.13-3.69,1.13h-7.06V65.36h4.5V62.29h-4.82V60l1.94-2.44h-7.25v5.07a12.13,12.13,0,0,1-.44,3.56,5.31,5.31,0,0,1-1.31,2.31,5,5,0,0,1-2.18,1.25,11.25,11.25,0,0,1-3.07.38h-3.5V63.36h2.94V57.54H97.88ZM85.62,42.48V34.61a23.25,23.25,0,0,1,3.69.25A5.42,5.42,0,0,1,91.94,36a4.7,4.7,0,0,1,1.56,2.38,13.71,13.71,0,0,1,.5,4.06Z"/><path id="sloganpathdata" class="cls-5" d="M48.62,87.86a3,3,0,0,1,1.13.18,1.38,1.38,0,0,1,.69.44,2.3,2.3,0,0,1,.37.69,5.57,5.57,0,0,1,.06.87v4.69H49.81V90.48a3.14,3.14,0,0,0-.06-.69,2.06,2.06,0,0,0-.19-.56,1,1,0,0,0-.37-.31,1.63,1.63,0,0,0-.69-.13,2.7,2.7,0,0,0-.63.07,2.45,2.45,0,0,0-.56.18,1.77,1.77,0,0,0-.5.44,3.58,3.58,0,0,0-.37.69v4.56H45.37v-9.5h1.07v3.69a1.64,1.64,0,0,1,.43-.5,1.11,1.11,0,0,1,.5-.31,3,3,0,0,1,.63-.19A3.34,3.34,0,0,1,48.62,87.86Zm9.88,2.81a1.71,1.71,0,0,1-.06.37v.44l-4.63.25a3.37,3.37,0,0,0,.13,1,1.64,1.64,0,0,0,.37.63,1.36,1.36,0,0,0,.69.43,3,3,0,0,0,1,.13,4.76,4.76,0,0,0,1.12-.13,3.59,3.59,0,0,0,1-.31v1l-.37.13-.56.12a3.36,3.36,0,0,1-.63.06,3.81,3.81,0,0,1-.75.07,4.26,4.26,0,0,1-1.31-.19,2,2,0,0,1-1-.56A2.31,2.31,0,0,1,52.94,93a4.84,4.84,0,0,1-.25-1.68,4.9,4.9,0,0,1,.25-1.69,2.28,2.28,0,0,1,.56-1.06,2,2,0,0,1,1-.57,4.06,4.06,0,0,1,1.25-.18,3.54,3.54,0,0,1,1.44.25,2.14,2.14,0,0,1,.81.68,2.68,2.68,0,0,1,.37.88A3.81,3.81,0,0,1,58.5,90.67Zm-1.06,0a3,3,0,0,0-.07-.69,1.29,1.29,0,0,0-.25-.62.74.74,0,0,0-.5-.44,1.63,1.63,0,0,0-.87-.19,2,2,0,0,0-.94.19,1,1,0,0,0-.56.44,1.11,1.11,0,0,0-.31.68c0,.25-.09.57-.13.94Zm10-2.81a2.62,2.62,0,0,1,1,.18,1.31,1.31,0,0,1,.68.44,2.13,2.13,0,0,1,.38.69,3.26,3.26,0,0,1,.12.87v4.69H68.56V90.48a2.51,2.51,0,0,0-.25-1.25,1.22,1.22,0,0,0-1.06-.44,1.91,1.91,0,0,0-.56.07,2.3,2.3,0,0,0-.5.18,1.7,1.7,0,0,0-.38.38,2.52,2.52,0,0,0-.31.56v4.75H64.44V90.48a2.63,2.63,0,0,0-.25-1.25,1.06,1.06,0,0,0-1-.44,1.91,1.91,0,0,0-.56.07,1.52,1.52,0,0,0-.51.18,1.29,1.29,0,0,0-.43.38,3.78,3.78,0,0,0-.25.62v4.69H60.31V88h1.13v.88a1.94,1.94,0,0,1,.81-.82,3.29,3.29,0,0,1,1.12-.18,2.1,2.1,0,0,1,1.25.31,1.33,1.33,0,0,1,.69.81,2.08,2.08,0,0,1,.38-.56,2,2,0,0,1,.56-.31,2,2,0,0,1,.56-.19A3.36,3.36,0,0,1,67.44,87.86Zm7.12,7a4.26,4.26,0,0,1-1.31-.19,2,2,0,0,1-1-.56A2.31,2.31,0,0,1,71.69,93a4.84,4.84,0,0,1-.25-1.68,4.9,4.9,0,0,1,.25-1.69,2.28,2.28,0,0,1,.56-1.06,2,2,0,0,1,1-.57,4.86,4.86,0,0,1,2.62,0,1.76,1.76,0,0,1,1,.57,2.88,2.88,0,0,1,.62,1.06,6.73,6.73,0,0,1,.19,1.69A6.65,6.65,0,0,1,77.5,93a2.93,2.93,0,0,1-.62,1.07,1.75,1.75,0,0,1-1,.56A4.26,4.26,0,0,1,74.56,94.86Zm0-.94a2.8,2.8,0,0,0,.94-.13,1.08,1.08,0,0,0,.62-.37,1.56,1.56,0,0,0,.32-.81,5.51,5.51,0,0,0,.12-1.25,5.45,5.45,0,0,0-.12-1.25,1.56,1.56,0,0,0-.32-.82,2.26,2.26,0,0,0-.62-.43,2.8,2.8,0,0,0-.94-.13,2.84,2.84,0,0,0-.94.13,2.62,2.62,0,0,0-.62.43,2.76,2.76,0,0,0-.31.82,10.75,10.75,0,0,0-.06,1.25,10.87,10.87,0,0,0,.06,1.25,2.17,2.17,0,0,0,.37.81,1.13,1.13,0,0,0,.56.37A2.84,2.84,0,0,0,74.56,93.92Zm10.69-8.69v9.5h-.94l-.12-1.12a1.59,1.59,0,0,1-.75.87,2.57,2.57,0,0,1-1.44.38,3.72,3.72,0,0,1-1.44-.25,2.08,2.08,0,0,1-.81-.75,2.87,2.87,0,0,1-.44-1.07,8.19,8.19,0,0,1-.12-1.43A7,7,0,0,1,79.31,90a3.45,3.45,0,0,1,.44-1.12,2.08,2.08,0,0,1,.81-.75A3,3,0,0,1,82,87.86a4.47,4.47,0,0,1,.81.06,2.31,2.31,0,0,1,.63.31.8.8,0,0,1,.44.38,2.71,2.71,0,0,1,.31.56V85.23Zm-3.13,8.69a3,3,0,0,0,1-.13,1.43,1.43,0,0,0,.69-.56,3.1,3.1,0,0,0,.32-.81,8,8,0,0,0,.06-1.06,9.08,9.08,0,0,0-.06-1.07,3.1,3.1,0,0,0-.32-.81,1.43,1.43,0,0,0-.69-.56,2.17,2.17,0,0,0-1-.19,1.45,1.45,0,0,0-.93.25,1.29,1.29,0,0,0-.57.56,2.84,2.84,0,0,0-.24.88,5.53,5.53,0,0,0-.07.94,6.82,6.82,0,0,0,.07,1,2.15,2.15,0,0,0,.24.81,1.24,1.24,0,0,0,.57.56A2,2,0,0,0,82.12,93.92Zm5.94-7.19a.76.76,0,0,1-.5-.12c-.08,0-.12-.21-.12-.5s0-.46.12-.5a.7.7,0,0,1,.5-.13.82.82,0,0,1,.5.13c.09,0,.13.2.13.5s0,.45-.13.5A.9.9,0,0,1,88.06,86.73ZM87.5,88h1.06v6.75H87.5Zm6.06-.12a6.29,6.29,0,0,1,1.31.12,3,3,0,0,1,.82.44,1.7,1.7,0,0,1,.43.69,2.37,2.37,0,0,1,.13.81v4.81h-.94l-.18-1a1.31,1.31,0,0,1-.38.44,1.56,1.56,0,0,1-.56.37,1.85,1.85,0,0,1-.69.25,3.81,3.81,0,0,1-.75.07,2.7,2.7,0,0,1-1.81-.5,2.16,2.16,0,0,1-.5-1.5,2.32,2.32,0,0,1,.18-1,1.84,1.84,0,0,1,.5-.69,3,3,0,0,1,.88-.38,4.53,4.53,0,0,1,1.06-.12h2.07v-.56a2.08,2.08,0,0,0-.07-.5.62.62,0,0,0-.25-.44,1.29,1.29,0,0,0-.5-.31,2.08,2.08,0,0,0-.81-.13,4.74,4.74,0,0,0-.75.06l-.75.13V88l.75-.12ZM92.81,94a2.83,2.83,0,0,0,1.5-.37,1.81,1.81,0,0,0,.82-.94V91.54H93.19a3.3,3.3,0,0,0-.75.07,1.38,1.38,0,0,0-.5.18.91.91,0,0,0-.31.38,1.46,1.46,0,0,0-.13.69,1,1,0,0,0,.31.81A1.36,1.36,0,0,0,92.81,94Zm7.19.81a1.68,1.68,0,0,1-1.12-.31,1.48,1.48,0,0,1-.38-1.12V85.23h1.06v7.88c0,.33.06.54.19.62a.48.48,0,0,0,.44.19h.25a.71.71,0,0,1,.31-.06v.87a1,1,0,0,1-.31.06Zm1.81,1.5a1.71,1.71,0,0,0,1.25-.37,2.55,2.55,0,0,0,.69-1.19L101.06,88h1.19l2.06,5.63h.06L106.31,88h1.13L105,94.48a11,11,0,0,1-.5,1.19,2.72,2.72,0,0,1-.62.81,1.85,1.85,0,0,1-.82.56,3.46,3.46,0,0,1-1.25.19Zm8.44-1.5h-.56a2.89,2.89,0,0,1-.56-.06,2.22,2.22,0,0,1-.51-.06,1.19,1.19,0,0,0-.37-.06v-.94l.44.12a1.77,1.77,0,0,1,.5.07,2.34,2.34,0,0,0,.56.06h.5a2.59,2.59,0,0,0,1.13-.19.87.87,0,0,0,.43-.81,1.66,1.66,0,0,0-.06-.5.58.58,0,0,0-.25-.31.62.62,0,0,0-.44-.25,5.29,5.29,0,0,0-.81-.25,7.44,7.44,0,0,1-.88-.25,4.2,4.2,0,0,1-.62-.38,1.29,1.29,0,0,1-.25-.56,2.1,2.1,0,0,1-.13-.75,1.59,1.59,0,0,1,.63-1.31,2.81,2.81,0,0,1,1.81-.5,6.86,6.86,0,0,1,.94.06,2.25,2.25,0,0,1,.75.19l-.06.87a4.32,4.32,0,0,0-.69-.19,6.86,6.86,0,0,0-.94-.06,2.34,2.34,0,0,0-1.06.19.81.81,0,0,0-.38.81.92.92,0,0,0,.07.38.79.79,0,0,0,.18.31,2,2,0,0,0,.44.19l.63.18a5.88,5.88,0,0,1,1,.32,1.43,1.43,0,0,1,.62.37,1.16,1.16,0,0,1,.38.56,2.33,2.33,0,0,1,.12.82,1.75,1.75,0,0,1-.69,1.5A3.27,3.27,0,0,1,110.25,94.79Zm4.94-8.06a.9.9,0,0,1-.5-.12c-.09,0-.13-.21-.13-.5s0-.46.13-.5a.82.82,0,0,1,.5-.13.7.7,0,0,1,.5.13c.12,0,.18.2.18.5s-.06.45-.18.5A.76.76,0,0,1,115.19,86.73Zm-.5,1.25h1.06v6.75h-1.06Zm4.87,6.81h-.5a2.4,2.4,0,0,1-.56-.06,1.66,1.66,0,0,1-.5-.06,1.8,1.8,0,0,0-.37-.06v-.94l.37.12a2.38,2.38,0,0,1,.56.07,2.2,2.2,0,0,0,.5.06h.5a3,3,0,0,0,1.19-.19.91.91,0,0,0,.37-.81,1.66,1.66,0,0,0-.06-.5.73.73,0,0,0-.18-.31,1,1,0,0,0-.5-.25,3.41,3.41,0,0,0-.75-.25c-.38-.09-.69-.17-.94-.25a2.33,2.33,0,0,1-.57-.38,1.12,1.12,0,0,1-.31-.56,4.06,4.06,0,0,1-.06-.75,1.68,1.68,0,0,1,.56-1.31,2.81,2.81,0,0,1,1.81-.5,8.26,8.26,0,0,1,1,.06,2.12,2.12,0,0,1,.75.19l-.12.87a2.78,2.78,0,0,0-.69-.19,6.36,6.36,0,0,0-.87-.06,2.1,2.1,0,0,0-1.06.19.81.81,0,0,0-.38.81.94.94,0,0,0,.06.38.81.81,0,0,0,.19.31.91.91,0,0,0,.37.19l.63.18a4.06,4.06,0,0,1,1,.32,1.52,1.52,0,0,1,.69.37A.87.87,0,0,1,122,92a2.31,2.31,0,0,1,.13.82,1.82,1.82,0,0,1-.63,1.5A3.62,3.62,0,0,1,119.56,94.79Z"/></g></g></g></g></svg>
\ No newline at end of file
diff --git a/src/App.vue b/src/App.vue
new file mode 100644
index 0000000..7fe1997
--- /dev/null
+++ b/src/App.vue
@@ -0,0 +1,12 @@
+<script setup lang="ts">
+import { ref } from "vue";
+import deviceView from "./components/deviceView.vue";
+
+</script>
+
+<template>
+ <router-view/>
+</template>
+
+<style scoped>
+</style>
diff --git a/src/assets/vue.svg b/src/assets/vue.svg
new file mode 100644
index 0000000..770e9d3
--- /dev/null
+++ b/src/assets/vue.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="37.07" height="36" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 198"><path fill="#41B883" d="M204.8 0H256L128 220.8L0 0h97.92L128 51.2L157.44 0h47.36Z"></path><path fill="#41B883" d="m0 0l128 220.8L256 0h-51.2L128 132.48L50.56 0H0Z"></path><path fill="#35495E" d="M50.56 0L128 133.12L204.8 0h-47.36L128 51.2L97.92 0H50.56Z"></path></svg>
\ No newline at end of file
diff --git a/src/components/deviceView.vue b/src/components/deviceView.vue
new file mode 100644
index 0000000..45b67c2
--- /dev/null
+++ b/src/components/deviceView.vue
@@ -0,0 +1,750 @@
+<template>
+ <div class="divice" :class="{blink:isbaioji}" :style="{borderColor: background}" >
+ <div v-if="deviceData.患者姓名 !== ''&&!xiaoduzhuangti" style="height: 100%;" >
+ <el-row v-if="deviceData.患者姓名 !== ''" @click='showgaojing' :style="{backgroundColor: background}" :class="{blink2:isbaioji}" style="font-weight: 900;color: #FFFFFF; width: 100%; height: 20%; line-height: 100%;padding: 5px;position: relative; ">
+ <span class="grid-container" style="font-size: 300%; height: 100%;" v-if="deviceData.设备名称!==null">{{deviceData.设备名称}} </span>
+ <span class="grid-container" style="margin-left: 5%;font-size: 350%; height: 100%;">{{deviceData.患者姓名}} </span>
+
+ <span class="grid-container" v-if="deviceData.年龄!==null" style="margin-left: 5%;font-size: 300%; height: 100%;">{{deviceData.年龄}}岁</span>
+ <span class="grid-container" style="margin-left: 5%;font-size: 300%; height: 100%;">{{deviceData.性别}}</span>
+ <div style="position: absolute;top: 0;right: 0;display: grid;padding: 5px; font-size: 300%;" >
+ <span v-if="deviceData.iot_跨膜压>=200&&Number(deviceData.透析状态)===2" style="color: #303133;">
+ TMP↑
+ </span>
+ <span v-if="deviceData.iot_跨膜压<0&&Number(deviceData.透析状态)===2" style="color: #303133;">
+ TMP↓
+ </span>
+ <span v-if="deviceData.监测血压是否低于百分之30&&Number(deviceData.透析状态)===2" style="color: #303133;">
+ BP↓
+ </span>
+ <span v-if="deviceData.监测血压是否高于百分之30&&Number(deviceData.透析状态)===2" style="color: #303133;">
+ BP↑
+ </span>
+
+ </div>
+
+ </el-row>
+ <el-row v-if="deviceData.患者姓名!==''" :style="{backgroundColor: textcolor}" style="padding-right:2px;height: 70%;">
+ <el-col :span="12" style="height: 100%;">
+ <div style="height:100%;">
+ <el-row style="padding:10% 0px 0px 20px; height: 100%;">
+ <el-col :span="10" style="height: 100%;">
+ <div :style="{backgroundImage:`url(${deviceData.患者头像})`}" style="background-size:100% 100%;border-radius: 5px; margin-top: 10%;margin-bottom: 1%; height: 80%; width: 100%;"></div>
+ </el-col>
+ <el-col :span="14" style="padding-left: 5px; height: 100%; font-weight: 700;font-size: 300%;" >
+ <el-row style="height: 25%; ">
+ <el-col class="grid-container" style="height: 100%;" :span="12" :style="{color:deviceData.透析方案==='HDF'?'#E6A23C':''}">
+ {{deviceData.透析方案}}
+ </el-col>
+ <el-col :span="12" class="grid-container" style="text-align: right;font-weight: 800; color: #70A3DD;white-space: nowrap;height: 100%;">
+ {{txztText}}
+ </el-col>
+ </el-row>
+ <div style="height: 25%;">
+ <template v-if="Number(deviceData.透析状态)>=2">
+ <div class="grid-container" style="height: 100%;">
+ <div>
+ <span v-if="deviceData.iot_静脉压" style="color: #409EFF;">{{deviceData.iot_静脉压}}/</span><span v-if="deviceData.iot_跨膜压" :style="{color:deviceData.iot_跨膜压>200?'red':''}">{{deviceData.iot_跨膜压}}</span>
+ </div>
+ </div>
+ </template>
+ </div>
+ <div style="height: 15%;" >
+ <span v-if="Number(deviceData.透析状态)>=2">
+
+ <span style="color:#303133;">{{Number(deviceData.iot_当前脱水量).toFixed(1)}}</span>/<span style="font-size: 90%">{{Number(deviceData.iot_脱水目标量).toFixed(1)}}</span><span style="font-size: 80%">({{deviceData.iot_脱水速率}})</span>
+ </span>
+ <span v-if="Number(deviceData.透析状态)==1">
+ <span style="color:#303133;">{{Number(deviceData.iot_当前脱水量).toFixed(1)}}</span>/<span style="font-size: 90%">{{Number(deviceData.处方脱水量).toFixed(1)}}</span>
+ </span>
+ </div>
+ <div style="height: 10%;">
+ <el-progress :text-inside="true" :stroke-width="26" :percentage="70" />
+ </div>
+ <div style="height: 25%;">
+ <span v-if="Number(deviceData.透析状态)>=1">
+ <span style="color: #303133;">{{jgTime4(deviceData.iot_透析时间)}}</span>/<span style="color: #606266;">{{deviceData.透析处方的时长_小时}}:{{deviceData.透析处方的时长_分钟}}</span>
+ </span>
+ </div>
+ </el-col>
+ </el-row>
+ </div>
+ </el-col>
+ <el-col :span="12">
+ <div v-if="Number(deviceData.透析状态)>1" :ref="'echartsDiv'+device.设备编号" style="height: 97%;">
+ </div>
+ <div v-if="Number(deviceData.透析状态)===1" style="text-align: right;height: 100%;">
+ <div class="container" style="height: 25%;font-weight: 600;color: #909399; font-size: 80%; ">
+ CW:<span style="font-weight: 800; font-size: 130%; color: #303133;white-space: nowrap;">{{Number(deviceData.透前称重).toFixed(1)}}</span>
+ </div>
+ <div class="container" style="height: 25%;font-weight: 600;color: #909399; font-size: 80%; ">
+ D<span style="font-weight: 800; font-size: 130%; color: #303133;white-space: nowrap;">{{Number(deviceData.干体重).toFixed(1)}}</span>L<span style="font-weight: 800; font-size: 130%; color: #303133;white-space: nowrap;">{{Number(deviceData.上次透后称重)}}</span>
+ </div>
+ <div :style="{color:deviceData.体重增长率>=5?'red':'#303133'}" style="height: 25%;font-weight: 600; font-size: 80%;">
+ <span style="font-weight: 800; font-size: 130%; white-space: nowrap;">
+ <template v-if="Number(deviceData.透前称重-deviceData.干体重)>0">+</template>{{Number(deviceData.透前称重-deviceData.干体重).toFixed(1)}}
+ </span>
+ <span>({{deviceData.体重增长率}}%)</span>
+ </div>
+ <div class="container" style="font-weight: 600;height: 25%;color: #909399; font-size: 80%;margin-left: -20px;">
+ <span v-if="deviceData.透前血压_伸缩压" :style="{color:tqXygj?'red':'#303133'}" style="font-weight: 800; font-size: 130%;white-space: nowrap;">{{deviceData.透前血压_伸缩压}}/</span>
+ <span :style="{color:tqXygj?'red':'#303133'}" style="font-weight: 800; font-size: 130%;white-space: nowrap;">{{deviceData.透前血压_舒张压}}</span>
+ <span v-if="deviceData.透前脉搏" :style="{color:tqMbgj?'red':'#303133'}" style="font-weight: 800; font-size: 130%;white-space: nowrap;">,{{deviceData.透前脉搏}}</span>
+ </div>
+
+ </div>
+ </el-col>
+ </el-row>
+ </div>
+ <div v-else style="height: 100%; border: #409EFF 1px solid;" :class="{blink2:noBaoji!==''}">
+ <el-row style="font-weight: 900;font-size: 300%; color: #3b3737; width: 100%; height: 20%; border: #3b3737 1px solid;">
+ <el-row v-if="noBaoji===''" :style="{backgroundColor:zhuangtaiColor}" style="color: #FFFFFF;width: 100%; height: 100%;white-space: nowrap;overflow: hidden;">
+ <div class="grid-container" style="height: 100%;">
+ {{deviceData.设备名称}} {{zhuangtaiStr}}
+ </div>
+
+ </el-row>
+
+ <el-row v-else style="width: 100%;">
+ <el-col :span="24" style="color: #FFFFFF;width: 100%;white-space: nowrap;overflow: hidden;">
+ {{deviceData.设备名称}} {{noBaoji}}
+ </el-col>
+ </el-row>
+
+
+ </el-row>
+ <el-row style="padding-right:2px;height: 80%; background-color: #FFFFFF">
+ <el-col :span="15" style="height: 100%;">
+ <div style="height:100%;">
+ <el-row style="padding:0px 0px 0px 0px; height: 100%;">
+ <el-col :span="10" :style="{backgroundImage:`url(${TQS88})`}" style="background-size:100% 100%;border-radius: 5px; margin-top: 2%;margin-bottom: 1%;">
+
+ </el-col>
+ <el-col v-if="noBaoji!==''" :span="14" style="padding-left: 5px; height: 100%; font-weight: 500;font-size:100%" >
+ <div class="grid-container" style="height: 33%; line-height: 100%;color: red; ">
+
+ <div class="centered-text">温度:{{wd}}</div>
+ </div>
+
+ <div class="grid-container" style="height: 33%;color: #409EFF;" >
+
+ <div class="centered-text">流速:{{ls}}</div>
+ </div>
+ <div class="grid-container" style="height: 33%;color: #E6A23C;">
+
+ <div class="centered-text">Cond:{{ddd}}</div>
+ </div>
+ </el-col>
+ </el-row>
+ </div>
+ </el-col>
+ <el-col :span="9" v-if="noBaoji!==''">
+ <!-- 历史状态画图 -->
+ <div :ref="'echartsDivwd'+device.设备编号" style="height: 33%;">
+ </div>
+ <div :ref="'echartsDivls'+device.设备编号" style="height: 33%;">
+ </div>
+ <div :ref="'echartsDivddd'+device.设备编号" style="height: 33%;">
+ </div>
+ </el-col>
+ </el-row>
+ </div>
+
+
+ </div>
+
+</template>
+<script lang="ts" setup>
+import TQS88 from './img/TQS88.png'
+import {computed, getCurrentInstance, onMounted,ref,watch} from 'vue'
+import * as echarts from 'echarts';
+const props = defineProps(['deviceData'])
+import { jgTime4 } from '../utils/formatTime';
+const { proxy } = getCurrentInstance() as any;
+const device=computed(()=>{
+ return props.deviceData
+})
+// 告警提示
+const textbaojing=ref('')
+const iscomfig=ref(false)
+const centerDialogVisible=ref(false)
+const background=ref('')
+const txztText=ref('')
+const textcolor=ref('')
+const wd=ref('')
+const ls=ref('')
+const ddd=ref('')
+const txzt: any = computed(() => {
+return props.deviceData.透析状态;
+});
+// 是否是消毒类型和待机
+const xiaoduzhuangti=computed(()=>{
+ // const list=device.value.设备状态列表
+ // if(list&&list.length>0){
+ // const x= list.findIndex(e=>{return e.状态类型==='透析机消毒'||e.状态类型==='待机'})
+ // if(x>=0){
+ // return true
+ // }else{
+ // return false
+ // }
+ // }
+ return false
+});
+// 状态颜色
+const zhuangtaiColor=computed(()=>{
+ const list=device.value.设备状态列表
+ let colorStr='#13CE66'
+ if(list&&list.length>0){
+ // 默认显示第一状态颜色
+ // colorStr=list[0].状态颜色
+ // 消毒状态优先级高
+ const x= list.findIndex(e=>{return e.状态类型==='透析机消毒'||e.状态类型==='在线'})
+ if(x!==0){
+ colorStr=list[0].状态颜色
+ }
+ }
+ return colorStr
+});
+// 没有报警就返回空字符传
+const noBaoji=computed(()=>{
+ const list=device.value.设备状态列表
+ let zhuantaiStr=''
+ let jinggaoStr=''
+ if(list&&list.length>0){
+ list.forEach((el:any)=>{
+ if(el.是否为警告标记===1){
+ if(jinggaoStr!==''){
+ jinggaoStr+='/'+el.状态名称
+ }else{
+ jinggaoStr+=el.状态名称
+ }
+ }else{
+ zhuantaiStr+=el.状态名称
+ }
+ })
+ }
+ return jinggaoStr
+});
+// 状态返回
+const zhuangtaiStr=computed(()=>{
+ const list=device.value.设备状态列表
+ let zhuantaiStr=''
+ if(list&&list.length>0){
+ list.forEach((el:any)=>{
+ if(el.是否为警告标记===1||el.状态类型==='透析机消毒'||el.状态类型==='在线'){ //去掉待机和消毒状态显示
+ }else{
+ if(zhuantaiStr!==''){
+ zhuantaiStr+='/'+el.状态名称
+ }else{
+ zhuantaiStr+=el.状态名称
+ }
+
+ }
+ })
+ }
+
+ return zhuantaiStr
+})
+const isbaioji=computed(()=>{
+ const list=device.value.设备状态列表
+ if((device.value.监测血压是否低于百分之30||device.value.跨膜压是否大于200||device.value.监测血压是否高于百分之30)&&device.value.透析状态==='2.0'){
+ return true
+ }
+ else{
+ return false
+ }
+})
+// 透前血压告警
+const tqXygj=computed(()=>{
+ if(device.value.透前血压_伸缩压>160||device.value.透前血压_伸缩压<90){
+ return true
+ }else{
+ return false
+ }
+})
+// 透前脉搏告警
+const tqMbgj=computed(()=>{
+ if(device.value.透前脉搏>90){
+ return true
+ }else{
+ return false
+ }
+})
+// 设置内联样式对象
+const backgroundStyle = {
+backgroundImage: `url(${TQS88})`,
+backgroundSize: 'cover', // 根据需要调整
+backgroundPosition: 'center', // 根据需要调整
+};
+watch(
+() => txzt.value,
+() => {
+ if (txzt.value === '0.0') {
+ txztText.value = '未签';
+ textcolor.value = '#FAFAFA';
+ background.value='#606266'
+ } else if (txzt.value === '1.0') {// 蓝色
+ textcolor.value = '#faecd8';
+ background.value='#E6A23C'
+ txztText.value = '已签';
+ } else if (txzt.value === '2.0') {// 绿色
+ // textcolor.value = '#D9F5E2';
+ // background.value='#67C23A'
+ textcolor.value = '#ECF5FF';
+ background.value='#409EFF'
+ txztText.value = '透中';
+ } else if (txzt.value === '2.5') { //
+ textcolor.value = '#fde2e2';
+ background.value='#fab6b6'
+ txztText.value = '结束';
+ } else if (txzt.value === '3.0') {// 已经结束
+ textcolor.value = '#FFECD0';
+ background.value='#E6A23C'
+ txztText.value = '检查';
+ } else if (txzt.value === '4.0') {// yij
+ textcolor.value = '#FFECD0';
+ background.value='#E6A23C'
+ txztText.value = '归档';
+ }
+},
+{
+ immediate: true,
+ deep: true,
+}
+);
+onMounted(()=>{
+})
+watch(()=>device.value.设备变化,()=>{
+ // console.log(device.value.设备名称,'子组件变量')
+ setTimeout(()=>{
+ if(!xiaoduzhuangti.value){
+ initTupiao()
+ }
+
+ },500)
+})
+
+const showgaojing=()=>{
+
+ if(device.value.监测血压是否低于百分之30){
+ centerDialogVisible.value=true
+ iscomfig.value=true
+ textbaojing.value=`${device.value.设备名称}床,${device.value.患者姓名} 监测血压下降至上机血压30%了,请及时处理`
+ }
+ if(device.value.跨膜压是否大于200){
+ centerDialogVisible.value=true
+ iscomfig.value=true
+ textbaojing.value=`${device.value.设备名称}床,${device.value.患者姓名} 跨膜压过高请及时处理`
+ }
+}
+const initTupiao=()=>{
+ if(device.value.患者姓名!==''){
+ const seriesData=[
+ {
+ name: '',
+ type: 'line',
+ symbol: "triangle",
+ symbolSize: 10,
+ symbolRotate:180,
+ data: [],
+ lineStyle: {
+ width: 5, // 设置线条宽度为5
+ color:'red'
+
+
+ },
+ itemStyle: {
+ borderWidth: 3,
+ borderColor: 'red',
+ color: 'red'
+ },
+ markPoint:{
+ data:[]
+ },
+ markLine:{
+ symbol:"none",
+ lineStyle:{color:'#409EFF',width: 3 },
+ data:[{ name:'y90',yAxis:90,label:{show:false},symbol:"none"}]
+ }
+ },
+
+
+ {
+ name: '',
+ type: 'line',
+ symbol: "triangle",
+ symbolSize: 10,
+ data: [],
+ lineStyle: {
+ color:'#409EFF',
+ width: 5 // 设置线条宽度为5
+ },
+ itemStyle: {
+ borderWidth: 3,
+ borderColor: '#409EFF',
+ color: '#409EFF'
+ },
+ markPoint:{
+ data:[]
+ },
+ markLine:{
+ symbol:"none",
+ lineStyle:{color:'#F56C6C',width: 3 },
+ data:[{ name:'y140',yAxis:140,label:{show:false},symbol:"none"}]
+ }
+ },
+ {
+ name: '',
+ type: 'line',
+ symbolSize: 10,
+ data: [],
+ lineStyle: {
+ color:'#D940FF',
+ width: 5 // 设置线条宽度为5
+ },
+ markPoint:{
+ data:[]
+ },
+
+ },
+ ]
+ const xAxisData=[]
+ if(Number(device.value.透析状态)>=2){
+ // alert(111)
+ device.value.监测记录列表.forEach((e,index)=>{
+ seriesData[0].data.push(e.伸缩压)
+ seriesData[1].data.push(e.舒张压)
+ seriesData[2].data.push(e.脉搏)
+ xAxisData.push(index)
+ if(index==0){
+ let y=(Number(e.伸缩压)+20)
+ let y2=(Number(e.舒张压)+20)
+ seriesData[0].markPoint.data.push({ name: '上机血压', value: e.伸缩压, xAxis: 0, yAxis: e.伸缩压,symbolSize:0,symbolOffset:[25,-15],label:{fontSize:20,color:'red'}})
+ seriesData[1].markPoint.data.push({ name: '上机血压', value: e.舒张压, xAxis: 0, yAxis: e.舒张压,symbolSize:0 ,symbolOffset:[15,15],label:{fontSize:20,color:'#409EFF'}})
+ seriesData[2].markPoint.data.push({ name: '上机血压', value: e.脉搏, xAxis: 0, yAxis: e.脉搏,symbolSize:0 ,symbolOffset:[10,-10],label:{fontSize:20,color:'#D940FF'}})
+ }
+ else if(device.value.监测记录列表.length>1&&index===(device.value.监测记录列表.length-1)){
+ let y=(Number(e.伸缩压)+20)
+ let y2=(Number(e.舒张压)+20)
+ seriesData[0].markPoint.data.push({ name: '上机血压', value: e.伸缩压, xAxis: index, yAxis: e.伸缩压,symbolSize:0,symbolOffset:[-15,-15],label:{fontSize:20,color:'red'}})
+ seriesData[1].markPoint.data.push({ name: '上机血压', value: e.舒张压, xAxis: index, yAxis: e.舒张压,symbolSize:0 ,symbolOffset:[-15,15],label:{fontSize:20,color:'#409EFF'}})
+ seriesData[2].markPoint.data.push({ name: '上机血压', value: e.脉搏, xAxis: index, yAxis: e.脉搏,symbolSize:0 ,symbolOffset:[0,-10],label:{fontSize:20,color:'#D940FF'}})
+ }
+ })
+ if(device.value.监测记录列表.length===1){
+ xAxisData.push(1)
+ }
+ try{
+ const myChart = echarts.init(proxy.$refs['echartsDiv'+device.value.设备编号]);
+ const option={
+ backgroundColor:textcolor.value,
+ tooltip: {
+ trigger: 'axis'
+ },
+ toolbox: {
+ show: false
+ },
+ grid:{
+ left:8,
+ top:0,
+ bottom:0,
+ },
+ xAxis: {
+ type: 'category',
+ // 标记做右往左排列
+ boundaryGap: false,
+ data: xAxisData,
+ axisTick: {
+ show: true // 显示 X 轴刻度
+ }
+ },
+ yAxis: {
+ name: '',
+ type: 'value',
+ min: 20,
+ max: 220,
+ interval: 20, // 指定刻度间隔,
+ splitLine: {
+ show: false
+ }
+ },
+ series: seriesData
+ };
+ myChart.setOption(option);
+ }catch(e){
+ console.log('图标渲染异常异常')
+ }
+
+ }else{
+ try{
+ const myChart = echarts.init(proxy.$refs['echartsDiv'+device.value.设备编号]);
+
+ const option={
+ backgroundColor:textcolor.value,
+ tooltip: {
+ trigger: 'axis'
+ },
+ toolbox: {
+ show: false
+ },
+ grid:{
+ left:5,
+ top:0,
+ bottom:0,
+ },
+ xAxis: {
+ type: 'category',
+ boundaryGap: false,
+ data: [1,2,3,4]
+ },
+ yAxis: {
+ name: '',
+ type: 'value',
+ min: 20,
+ max: 220,
+ interval: 20, // 指定刻度间隔,
+ splitLine: {
+ show: false
+ }
+ },
+ series: []
+ };
+ myChart.setOption(option);
+ }catch(e){
+ console.log('异常',proxy.$refs['echartsDiv'+device.value.设备编号])
+ }
+ }
+ }else if(device.value.患者姓名===''){
+ const tbdata1=[]
+ const tbdata2=[]
+ const tbdata3=[]
+ if(device.value.属性历史列表){
+ device.value.属性历史列表.forEach((e,index)=>{
+ // 温度
+ const wdMode=e.属性列表.find(l=>{return l.identifierText==='透析液温度'})
+ if(wdMode){
+ tbdata1.push(Number(wdMode?.finalText))
+ wd.value=Number(wdMode?.finalText)
+ }
+
+ // 血液流速
+ const xymode=e.属性列表.find(l=>{return l.identifierText==='血液流速'})
+ if(xymode){
+ tbdata2.push(Number(xymode?.finalText))
+ ls.value=Number(xymode?.finalText)
+ }
+
+ // 电导度
+ const dddMode=e.属性列表.find(l=>{return l.identifierText==='透析液电导度'})
+ if(dddMode){
+ tbdata3.push(Number(dddMode?.finalText))
+ ddd.value=Number(dddMode?.finalText)
+ }
+ })
+ }
+ try{
+ const myChart1 = echarts.init(proxy.$refs['echartsDivwd'+device.value.设备编号]);
+ const myChart2 = echarts.init(proxy.$refs['echartsDivls'+device.value.设备编号]);
+ const myChart3 = echarts.init(proxy.$refs['echartsDivddd'+device.value.设备编号]);
+ const option1={
+ backgroundColor:textcolor.value,
+ tooltip: {
+ trigger: 'axis'
+ },
+ toolbox: {
+ show: false
+ },
+ grid:{
+ left:8,
+ top:30,
+ bottom:0,
+ },
+ xAxis: {
+ show: false, // 隐藏X轴
+ type: 'category',
+ // 标记做右往左排列
+ boundaryGap: false,
+ data: [1,2,3],
+ axisTick: {
+ show: false // 显示 X 轴刻度
+ }
+ },
+ yAxis: {
+ type: 'value',
+ splitLine: {
+ show: false
+ }
+ },
+ series: [
+ {
+ data: tbdata1,
+ type: 'line',
+ lineStyle: {
+ width: 10, // 设置线条宽度为5
+ color:'red'
+ }
+ }
+ ]
+ };
+ const option2={
+ backgroundColor:textcolor.value,
+ tooltip: {
+ trigger: 'axis'
+ },
+ toolbox: {
+ show: false
+ },
+ grid:{
+ left:8,
+ top:20,
+ bottom:0,
+ },
+ xAxis: {
+ show: false, // 隐藏X轴
+ type: 'category',
+ // 标记做右往左排列
+ boundaryGap: false,
+ data: [1,2,3],
+ axisTick: {
+ show: false // 显示 X 轴刻度
+ }
+ },
+ yAxis: {
+ type: 'value',
+ min:-10,
+ splitLine: {
+ show: false
+ }
+ },
+ series: [
+ {
+ data: tbdata2,
+ type: 'line',
+ lineStyle: {
+ width: 10, // 设置线条宽度为5
+ color:'#409EFF'
+ }
+
+ }
+ ]
+ };
+ const option3={
+ backgroundColor:textcolor.value,
+ tooltip: {
+ trigger: 'axis'
+ },
+ toolbox: {
+ show: false
+ },
+ grid:{
+ left:8,
+ top:10,
+ bottom:0,
+ },
+ xAxis: {
+ show: false, // 隐藏X轴
+ type: 'category',
+ // 标记做右往左排列
+ boundaryGap: false,
+ data: [1,2,3],
+ axisTick: {
+ show: false // 显示 X 轴刻度
+ }
+ },
+ yAxis: {
+ type: 'value',
+ min:-10,
+ splitLine: {
+ show: false
+ }
+ },
+ series: [
+ {
+ data: tbdata3,
+ type: 'line',
+ lineStyle: {
+ width: 10, // 设置线条宽度为5
+ color:'#E6A23C'
+ }
+ }
+ ]
+ };
+ myChart1.setOption(option1);
+ myChart2.setOption(option2);
+ myChart3.setOption(option3);
+ }catch(e){
+ console.log('图标渲染异常异常')
+ }
+
+ console.log(device.value)
+ }
+
+
+}
+</script>
+<style lang="less" scoped>
+.divice{
+ font-size: 100%;
+ border-radius: 4px;
+ border: solid 1px;
+ width: 100%;
+ height: 100%;
+ border: 1px solid coral;
+}
+/* 定义闪烁动画 */
+@keyframes blink {
+0% {
+ border:4px solid red ;
+}
+50% {
+ border:4px solid Transparent ;
+}
+100% {
+ border:4px solid red ;
+ // border-bottom:8px solid red ;
+}
+}
+
+/* 应用闪烁动画 */
+.blink {
+ // float: left; /* 让div浮动到左边 */
+ width: 100%;
+ height: 100%;
+ animation: blink 2s infinite; /* 每秒闪烁一次,无限次数 */
+
+// border-left:5px solid red ;
+// border-right:5px solid red ;
+
+// background: red;
+ cursor: pointer;
+ // margin-bottom: 100%;
+}
+@keyframes blink2 {
+0% {
+ background: red ;
+}
+50% {
+ background: Transparent ;
+}
+100% {
+ background: red ;
+ // border-bottom:8px solid red ;
+}
+}
+.blink2{
+ animation: blink2 2s infinite; /* 每秒闪烁一次,无限次数 */
+ width: 100%;
+ height: 100%;
+}
+.grid-container {
+ display: grid;
+ align-items: center; /* 垂直居中 */
+ height: 100vh; /* 根据需要调整高度 */
+}
+
+.centered-text {
+ font-weight: 600;
+ /* 其他样式 */
+}
+
+</style>
\ No newline at end of file
diff --git a/src/components/img/TQS88.png b/src/components/img/TQS88.png
new file mode 100644
index 0000000..5c8300c
--- /dev/null
+++ b/src/components/img/TQS88.png
Binary files differ
diff --git a/src/img/TQS88.png b/src/img/TQS88.png
new file mode 100644
index 0000000..5c8300c
--- /dev/null
+++ b/src/img/TQS88.png
Binary files differ
diff --git a/src/img/maibo.png b/src/img/maibo.png
new file mode 100644
index 0000000..4c4b2ac
--- /dev/null
+++ b/src/img/maibo.png
Binary files differ
diff --git a/src/img/xueya.png b/src/img/xueya.png
new file mode 100644
index 0000000..c0cc320
--- /dev/null
+++ b/src/img/xueya.png
Binary files differ
diff --git a/src/main.ts b/src/main.ts
new file mode 100644
index 0000000..ae667b1
--- /dev/null
+++ b/src/main.ts
@@ -0,0 +1,8 @@
+import { createApp } from 'vue'
+import ElementPlus from 'element-plus'
+import 'element-plus/dist/index.css'
+import router from './router';
+import './style.css'
+import App from './App.vue'
+
+createApp(App).use(router).use(ElementPlus).mount('#app')
diff --git a/src/router/index.ts b/src/router/index.ts
new file mode 100644
index 0000000..e73a4fa
--- /dev/null
+++ b/src/router/index.ts
@@ -0,0 +1,34 @@
+// router/index.ts
+import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router';
+import Home from '../views/Home.vue'; // 假设这是你的主页组件
+import deviceWindows from '../views/deviceWindows.vue'
+// import Search from '../views/Search.vue'; // 搜索结果页,接收查询参数
+
+// 定义路由规则,并为每个路由指定类型安全的 props
+const routes: Array<RouteRecordRaw> = [
+ {
+ path: '/',
+ name: 'Home',
+ component: Home,
+ },
+ {
+ path: '/deviceWindows/:deviceid',
+ name: 'deviceWindows',
+ component: deviceWindows,
+ props: true, // 路径参数将作为 props 传递给组件
+ },
+// {
+// path: '/search',
+// name: 'Search',
+// component: Search,
+// props: (route) => ({ query: route.query.q as string }), // 将查询参数 q 作为 prop 传递给组件
+// }
+];
+
+// 创建路由器实例,并指定类型
+const router = createRouter({
+ history: createWebHistory(import.meta.env.BASE_URL),
+ routes, // 路由配置
+});
+
+export default router;
\ No newline at end of file
diff --git a/src/style.css b/src/style.css
new file mode 100644
index 0000000..877f744
--- /dev/null
+++ b/src/style.css
@@ -0,0 +1,41 @@
+:root {
+ font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
+ line-height: 1.5;
+ font-weight: 400;
+
+ color-scheme: light dark;
+ color: rgba(255, 255, 255, 0.87);
+ background-color: #242424;
+
+ font-synthesis: none;
+ text-rendering: optimizeLegibility;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+html, body {
+ margin: 0;
+ padding: 0;
+ width: 100%;
+ height: 100%;
+}
+
+#app {
+ width: 100%;
+ height: 100%;
+ border: 1px rgb(23, 7, 7) solid;
+ background-color: lightblue; /* 可选:用于可视化效果 */
+}
+
+@media (prefers-color-scheme: light) {
+ :root {
+ color: #213547;
+ background-color: #ffffff;
+ }
+ a:hover {
+ color: #747bff;
+ }
+ button {
+ background-color: #f9f9f9;
+ }
+}
diff --git a/src/utils/formatTime.ts b/src/utils/formatTime.ts
new file mode 100644
index 0000000..f045667
--- /dev/null
+++ b/src/utils/formatTime.ts
@@ -0,0 +1,310 @@
+/**
+ * 时间日期转换
+ * @param date 当前时间,new Date() 格式
+ * @param format 需要转换的时间格式字符串
+ * @description format 字符串随意,如 `YYYY-mm、YYYY-mm-dd`
+ * @description format 季度:"YYYY-mm-dd HH:MM:SS QQQQ"
+ * @description format 星期:"YYYY-mm-dd HH:MM:SS WWW"
+ * @description format 几周:"YYYY-mm-dd HH:MM:SS ZZZ"
+ * @description format 季度 + 星期 + 几周:"YYYY-mm-dd HH:MM:SS WWW QQQQ ZZZ"
+ * @returns 返回拼接后的时间字符串
+ */
+export function formatDate(date: Date, format: string): string {
+ let we = date.getDay(); // 星期
+ let z = getWeek(date); // 周
+ let qut = Math.floor((date.getMonth() + 3) / 3).toString(); // 季度
+ const opt: { [key: string]: string } = {
+ 'Y+': date.getFullYear().toString(), // 年
+ 'm+': (date.getMonth() + 1).toString(), // 月(月份从0开始,要+1)
+ 'd+': date.getDate().toString(), // 日
+ 'H+': date.getHours().toString(), // 时
+ 'M+': date.getMinutes().toString(), // 分
+ 'S+': date.getSeconds().toString(), // 秒
+ 'q+': qut, // 季度
+ };
+ // 中文数字 (星期)
+ const week: { [key: string]: string } = {
+ '0': '日',
+ '1': '一',
+ '2': '二',
+ '3': '三',
+ '4': '四',
+ '5': '五',
+ '6': '六',
+ };
+ // 中文数字(季度)
+ const quarter: { [key: string]: string } = {
+ '1': '一',
+ '2': '二',
+ '3': '三',
+ '4': '四',
+ };
+ if (/(W+)/.test(format))
+ format = format.replace(RegExp.$1, RegExp.$1.length > 1 ? (RegExp.$1.length > 2 ? '星期' + week[we] : '周' + week[we]) : week[we]);
+ if (/(Q+)/.test(format)) format = format.replace(RegExp.$1, RegExp.$1.length == 4 ? '第' + quarter[qut] + '季度' : quarter[qut]);
+ if (/(Z+)/.test(format)) format = format.replace(RegExp.$1, RegExp.$1.length == 3 ? '第' + z + '周' : z + '');
+ for (let k in opt) {
+ let r = new RegExp('(' + k + ')').exec(format);
+ // 若输入的长度不为1,则前面补零
+ if (r) format = format.replace(r[1], RegExp.$1.length == 1 ? opt[k] : opt[k].padStart(RegExp.$1.length, '0'));
+ }
+ return format;
+}
+
+/**
+ * 获取当前日期是第几周
+ * @param dateTime 当前传入的日期值
+ * @returns 返回第几周数字值
+ */
+export function getWeek(dateTime: Date): number {
+ let temptTime = new Date(dateTime.getTime());
+ // 周几
+ let weekday = temptTime.getDay() || 7;
+ // 周1+5天=周六
+ temptTime.setDate(temptTime.getDate() - weekday + 1 + 5);
+ let firstDay = new Date(temptTime.getFullYear(), 0, 1);
+ let dayOfWeek = firstDay.getDay();
+ let spendDay = 1;
+ if (dayOfWeek != 0) spendDay = 7 - dayOfWeek + 1;
+ firstDay = new Date(temptTime.getFullYear(), 0, 1 + spendDay);
+ let d = Math.ceil((temptTime.valueOf() - firstDay.valueOf()) / 86400000);
+ let result = Math.ceil(d / 7);
+ return result;
+}
+/**
+ *
+ * @param param moke当前日期的周排班
+ * @param format
+ * @returns
+ */
+export function getWeekDatas(week:number){
+ const datas=[];
+ var todey=new Date();
+ const dqweek=getWeek(todey)
+ if(week<dqweek){
+ todey.setTime(todey.getTime()-3600 * 1000 * 24 * 7 * (dqweek-week))
+ }
+ else if(week>dqweek){
+ todey.setTime(todey.getTime()+3600 * 1000 * 24 * 7 * (week-dqweek))
+ }
+ const num= todey.getDay();
+
+ if(num>0){
+ for(var i=0;i<8;i++){
+ if(i===num){
+ datas.push(formatDate(todey,'YYYY-mm-dd WWW'))
+ }else if(i<num){
+ const start = new Date(todey)
+ start.setTime(start.getTime() - 3600 * 1000 * 24 * (num-i));
+ datas.push(formatDate(start,'YYYY-mm-dd WWW'))
+ }else if(i>num){
+ const start2 = new Date(todey);
+ start2.setTime(start2.getTime() + 3600 * 1000 * 24 * (i-num));
+ datas.push(formatDate(start2,'YYYY-mm-dd WWW'))
+ }
+ }
+ datas.splice(0,1)// 删除第一个
+ return datas
+ }
+ else{
+ for(var x=6;x>=0;x--){
+ const start = new Date(todey)
+ start.setTime(start.getTime() - 3600 * 1000 * 24 * (x));
+ datas.push(formatDate(start,'YYYY-mm-dd WWW'))
+ }
+ return datas
+ }
+
+}
+
+/**
+ *
+ * @param param 获取周列表
+ * @param format 当前周
+ * @returns
+ */
+export function getgetWeeks(){
+ // const datas=[];
+ for(var x=7;x>0;x--){
+ const start2 = new Date();
+ start2.setTime(start2.getTime() + 3600 * 1000 * 24 * (x*7));
+ const weeks=formatDate(start2,'YYYY-mm-dd HH:MM:SS WWW QQQQ ZZZ')
+ console.log(weeks)
+ }
+ for(var x=0;x<7;x++){
+ const start2 = new Date();
+ start2.setTime(start2.getTime() - 3600 * 1000 * 24 * (x*7));
+ const weeks=formatDate(start2,'YYYY-mm-dd HH:MM:SS WWW QQQQ ZZZ')
+ console.log(weeks)
+ }
+ // console.log(week)
+}
+
+/**
+ * 将时间转换为 `几秒前`、`几分钟前`、`几小时前`、`几天前`
+ * @param param 当前时间,new Date() 格式或者字符串时间格式
+ * @param format 需要转换的时间格式字符串
+ * @description param 10秒: 10 * 1000
+ * @description param 1分: 60 * 1000
+ * @description param 1小时: 60 * 60 * 1000
+ * @description param 24小时:60 * 60 * 24 * 1000
+ * @description param 3天: 60 * 60* 24 * 1000 * 3
+ * @returns 返回拼接后的时间字符串
+ */
+export function formatPast(param: string | Date, format: string = 'YYYY-mm-dd'): string {
+ // 传入格式处理、存储转换值
+ let t: any, s: number;
+ // 获取js 时间戳
+ let time: number = new Date().getTime();
+ // 是否是对象
+ typeof param === 'string' || 'object' ? (t = new Date(param).getTime()) : (t = param);
+ // 当前时间戳 - 传入时间戳
+ time = Number.parseInt(`${time - t}`);
+ if (time < 10000) {
+ // 10秒内
+ return '刚刚';
+ } else if (time < 60000 && time >= 10000) {
+ // 超过10秒少于1分钟内
+ s = Math.floor(time / 1000);
+ return `${s}秒前`;
+ } else if (time < 3600000 && time >= 60000) {
+ // 超过1分钟少于1小时
+ s = Math.floor(time / 60000);
+ return `${s}分钟前`;
+ } else if (time < 86400000 && time >= 3600000) {
+ // 超过1小时少于24小时
+ s = Math.floor(time / 3600000);
+ return `${s}小时前`;
+ } else if (time < 259200000 && time >= 86400000) {
+ // 超过1天少于3天内
+ s = Math.floor(time / 86400000);
+ return `${s}天前`;
+ } else {
+ // 超过3天
+ let date = typeof param === 'string' || 'object' ? new Date(param) : param;
+ return formatDate(date, format);
+ }
+}
+
+/**
+ * 时间问候语
+ * @param param 当前时间,new Date() 格式
+ * @description param 调用 `formatAxis(new Date())` 输出 `上午好`
+ * @returns 返回拼接后的时间字符串
+ */
+export function formatAxis(param: Date): string {
+ let hour: number = new Date(param).getHours();
+ if (hour < 6) return '凌晨好';
+ else if (hour < 9) return '早上好';
+ else if (hour < 12) return '上午好';
+ else if (hour < 14) return '中午好';
+ else if (hour < 17) return '下午好';
+ else if (hour < 19) return '傍晚好';
+ else if (hour < 22) return '晚上好';
+ else return '夜里好';
+}
+//计算日期之间的月数
+export function datemonth(date1,date2){
+ // 拆分年月日
+ date1 = date1.split('-');
+ // 得到月数
+ // date1 = parseInt(date1[0]) * 12 + parseInt(date1[1]);
+ // 拆分年月日
+ date2 = date2.split('-');
+ // 得到月数
+ // date2 = parseInt(date2[0]) * 12 + parseInt(date2[1]);
+ console.log(date1,date2)
+ var m = Math.abs(parseInt(date1[0]) - parseInt(date2[0]));
+ var y=(parseInt(date1[1]) - parseInt(date2[1]))
+ if(y<0){
+ m=m-1
+ y=12+y
+ }
+ return m+'年'+y+'月';
+}
+//getDate('yyyy-MM-dd')
+export function getDate(fmt) {
+ let date = new Date()
+ var o = {
+ "M+": date.getMonth() + 1, //月份
+ "d+": date.getDate(), //日
+ "H+": date.getHours(), //小时
+ "m+": date.getMinutes(), //分
+ "s+": date.getSeconds(), //秒
+ "q+": Math.floor((date.getMonth() + 3) / 3), //季度
+ "S": date.getMilliseconds() //毫秒
+ };
+ if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
+ for (var k in o)
+ if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
+ return fmt;
+ }
+ export function GetDateDiff(startDiffTime:string) {
+ //将xxxx-xx-xx的时间格式,转换为 xxxx/xx/xx的格式
+ return startDiffTime.replace(/\-/g, "/");
+};
+// 计算时间间隔
+export function jgTime(data1:string,data2:string):number{
+ // 获取两个日期的毫秒数
+ var milliseconds1 = new Date(data1).getTime();
+ var milliseconds2 = new Date(data2).getTime();
+ // 计算两个日期的差值(毫秒数差)
+ var differenceInMilliseconds = milliseconds2 - milliseconds1;
+ var differenceInSeconds = Math.floor(differenceInMilliseconds / 1000);
+ var differenceInSeconds2=Math.floor(differenceInSeconds / 60);
+ return differenceInSeconds2
+}
+// 计算现在间隔
+export function jgTime2(data1:string,data2:string):number{
+ // 获取两个日期的毫秒数
+ var milliseconds1 = new Date(data1).getTime();
+ var milliseconds2 = new Date().getTime();
+ // 总分数
+ const x= jgTime(data1,data2)
+ // 计算两个日期的差值(毫秒数差)
+ var differenceInMilliseconds = milliseconds2 - milliseconds1;
+ var differenceInSeconds = Math.floor(differenceInMilliseconds / 1000);
+ var differenceInSeconds2=Math.floor(differenceInSeconds / 60);
+ const re=(differenceInSeconds2/x)*100
+ return re
+}
+export function jgTime3(data1:Date,):number{
+
+ // 获取两个日期的毫秒数
+ var milliseconds1 = data1.getTime();
+ var milliseconds2 = new Date().getTime();
+ console.log(milliseconds1,milliseconds2)
+ // 计算两个日期的差值(毫秒数差)
+ var differenceInMilliseconds = milliseconds2 - milliseconds1;
+ var differenceInSeconds = Math.floor(differenceInMilliseconds / 1000);
+ console.log(differenceInSeconds)
+ return differenceInSeconds
+}
+// 计算时间间隔
+export function jgTime4(data1:number):string{
+ // 获取两个日期的毫秒数
+ // 转换为分钟并取整数得到mm
+ var minutes = Math.floor(data1 % 60);
+ // 转换为小时并取整数得到hh
+ var hours = Math.floor(data1/60);
+ // 格式化输出
+ return hours + ':' + (minutes < 10 ? '0' + minutes : minutes);
+
+}
+// 计算时间间隔
+export function jgTime5(data1:string,data2:string):string{
+ // 获取两个日期的毫秒数
+ var milliseconds1 = new Date(data1).getTime();
+ var milliseconds2 = new Date(data2).getTime();
+ // 计算两个日期的差值(毫秒数差)
+ var interval = milliseconds2 - milliseconds1;
+ // 转换为秒并取余数得到ss
+ var seconds = Math.floor((interval / 1000) % 60);
+ // 转换为分钟并取整数得到mm
+ var minutes = Math.floor((interval / (1000 * 60)) % 60);
+ // 转换为小时并取整数得到hh
+ var hours = Math.floor(interval / (1000 * 60 * 60));
+ // 格式化输出
+ return hours + ':' + (minutes < 10 ? '0' + minutes : minutes);
+
+}
\ No newline at end of file
diff --git a/src/views/Home.vue b/src/views/Home.vue
new file mode 100644
index 0000000..7b0755d
--- /dev/null
+++ b/src/views/Home.vue
@@ -0,0 +1,1293 @@
+<template>
+ <div
+ class="divice"
+ :class="{ blink: isbaioji }"
+ :style="{ borderColor: background }"
+ >
+ <div
+ v-if="deviceData.患者姓名 !== '' && !xiaoduzhuangti"
+ style="height: 100%"
+ >
+ <el-row
+ v-if="deviceData.患者姓名 !== ''"
+ @click="showgaojing"
+ :style="{ backgroundColor: background }"
+ :class="{ blink2: isbaioji }"
+ style="
+ font-weight: 900;
+ color: #ffffff;
+ width: 100%;
+ height: 20%;
+ line-height: 100%;
+ padding: 5px;
+ position: relative;
+ "
+ >
+ <span
+ class="grid-container"
+ style="font-size: 300%; height: 100%"
+ v-if="deviceData.设备名称 !== null"
+ >{{ deviceData.设备名称 }}
+ </span>
+ <span
+ class="grid-container" @click="initTupiao"
+ style="margin-left: 5%; font-size: 350%; height: 100%"
+ >{{ deviceData.患者姓名 }}
+ </span>
+
+ <span
+ class="grid-container"
+ v-if="deviceData.年龄 !== null"
+ style="margin-left: 5%; font-size: 300%; height: 100%"
+ >{{ deviceData.年龄 }}岁</span
+ >
+ <span
+ class="grid-container"
+ style="margin-left: 5%; font-size: 300%; height: 100%"
+ >{{ deviceData.性别 }}</span
+ >
+ <div
+ style="
+ position: absolute;
+ top: 0;
+ right: 0;
+ display: grid;
+ padding: 5px;
+ font-size: 300%;
+ "
+ >
+ <span
+ v-if="
+ deviceData.iot_跨膜压 >= 200 && Number(deviceData.透析状态) === 2
+ "
+ style="color: #303133"
+ >
+ TMP↑
+ </span>
+ <span
+ v-if="
+ deviceData.iot_跨膜压 < 0 && Number(deviceData.透析状态) === 2
+ "
+ style="color: #303133"
+ >
+ TMP↓
+ </span>
+ <span
+ v-if="
+ deviceData.监测血压是否低于百分之30 &&
+ Number(deviceData.透析状态) === 2
+ "
+ style="color: #303133"
+ >
+ BP↓
+ </span>
+ <span
+ v-if="
+ deviceData.监测血压是否高于百分之30 &&
+ Number(deviceData.透析状态) === 2
+ "
+ style="color: #303133"
+ >
+ BP↑
+ </span>
+ </div>
+ </el-row>
+ <el-row
+ v-if="deviceData.患者姓名 !== ''"
+ :style="{ backgroundColor: textcolor }"
+ style="padding-right: 2px; height: 60%"
+ >
+ <el-col :span="12" style="height: 100%">
+ <div style="height: 100%">
+ <el-row style="padding: 5% 0px 0px 20px; height: 100%">
+ <el-col :span="10" style="height: 100%">
+ <div
+ :style="{ backgroundImage: `url(${deviceData.患者头像})` }"
+ style="
+ background-size: 100% 100%;
+ border-radius: 5px;
+ margin-bottom: 1%;
+ height: 100%;
+ width: 100%;
+ "
+ ></div>
+ </el-col>
+ <el-col
+ :span="14"
+ style="
+ padding-left: 5px;
+ height: 100%;
+ font-weight: 700;
+ font-size: 300%;
+ "
+ >
+ <el-row style="height: 20%">
+ <el-col
+ class="grid-container"
+ style="height: 100%"
+ :span="12"
+ :style="{
+ color: deviceData.透析方案 === 'HDF' ? '#E6A23C' : '',
+ }"
+ >
+ {{ deviceData.透析方案 }}
+ </el-col>
+ <el-col
+ :span="12"
+ class="grid-container"
+ style="
+ text-align: right;
+ font-weight: 800;
+ color: #70a3dd;
+ white-space: nowrap;
+ height: 100%;
+ "
+ >
+ {{ txztText }}
+ </el-col>
+ </el-row>
+ <div style="height: 20%">
+ <template v-if="Number(deviceData.透析状态) >= 2">
+ <div class="grid-container" style="height: 100%">
+ <div>
+ <span
+ v-if="deviceData.iot_静脉压"
+ style="color: #409eff"
+ >{{ deviceData.iot_静脉压 }}/</span
+ ><span
+ v-if="deviceData.iot_跨膜压"
+ :style="{
+ color: deviceData.iot_跨膜压 > 200 ? 'red' : '',
+ }"
+ >{{ deviceData.iot_跨膜压 }}</span
+ >
+ </div>
+ </div>
+ </template>
+ </div>
+ <div style="height: 20%">
+ <span v-if="Number(deviceData.透析状态) >= 2">
+ <span style="color: #303133">{{
+ Number(deviceData.iot_当前脱水量).toFixed(1)
+ }}</span
+ >/<span style="font-size: 90%">{{
+ Number(deviceData.iot_脱水目标量).toFixed(1)
+ }}</span
+ ><span style="font-size: 80%"
+ >({{ deviceData.iot_脱水速率 }})</span
+ >
+ </span>
+ <span v-if="Number(deviceData.透析状态) == 1">
+ <span style="color: #303133">{{
+ Number(deviceData.iot_当前脱水量).toFixed(1)
+ }}</span
+ >/<span style="font-size: 90%">{{
+ Number(deviceData.处方脱水量).toFixed(1)
+ }}</span>
+ </span>
+ </div>
+ <div style="height: 10%">
+ <el-progress
+ :text-inside="true"
+ :stroke-width="26"
+ :percentage="70"
+ />
+ </div>
+ <div style="height: 20%">
+ <span v-if="Number(deviceData.透析状态) >= 1">
+ <span style="color: #303133">{{
+ jgTime4(deviceData.iot_透析时间)
+ }}</span
+ >/<span style="color: #606266"
+ >{{ deviceData.透析处方的时长_小时 }}:{{
+ deviceData.透析处方的时长_分钟
+ }}</span
+ >
+ </span>
+ </div>
+ <div style="height: 10%">
+ <el-progress
+ :text-inside="true"
+ :stroke-width="26"
+ :percentage="80"
+ status="success"
+ />
+ </div>
+ </el-col>
+ </el-row>
+ </div>
+ </el-col>
+ <el-col :span="12">
+ <div
+ v-if="Number(deviceData.透析状态) > 1"
+ :ref="'echartsDiv' + deviceData.设备编号"
+ style="height: 97%"
+ ></div>
+ <div
+ v-if="Number(deviceData.透析状态) === 1"
+ style="text-align: right; height: 100%"
+ >
+ <div
+ class="container"
+ style="
+ height: 25%;
+ font-weight: 600;
+ color: #909399;
+ font-size: 80%;
+ "
+ >
+ CW:<span
+ style="
+ font-weight: 800;
+ font-size: 130%;
+ color: #303133;
+ white-space: nowrap;
+ "
+ >{{ Number(deviceData.透前称重).toFixed(1) }}</span
+ >
+ </div>
+ <div
+ class="container"
+ style="
+ height: 25%;
+ font-weight: 600;
+ color: #909399;
+ font-size: 80%;
+ "
+ >
+ D<span
+ style="
+ font-weight: 800;
+ font-size: 130%;
+ color: #303133;
+ white-space: nowrap;
+ "
+ >{{ Number(deviceData.干体重).toFixed(1) }}</span
+ >L<span
+ style="
+ font-weight: 800;
+ font-size: 130%;
+ color: #303133;
+ white-space: nowrap;
+ "
+ >{{ Number(deviceData.上次透后称重) }}</span
+ >
+ </div>
+ <div
+ :style="{ color: deviceData.体重增长率 >= 5 ? 'red' : '#303133' }"
+ style="height: 25%; font-weight: 600; font-size: 80%"
+ >
+ <span
+ style="font-weight: 800; font-size: 130%; white-space: nowrap"
+ >
+ <template
+ v-if="Number(deviceData.透前称重 - deviceData.干体重) > 0"
+ >+</template
+ >{{
+ Number(deviceData.透前称重 - deviceData.干体重).toFixed(1)
+ }}
+ </span>
+ <span>({{ deviceData.体重增长率 }}%)</span>
+ </div>
+ <div
+ class="container"
+ style="
+ font-weight: 600;
+ height: 25%;
+ color: #909399;
+ font-size: 80%;
+ margin-left: -20px;
+ "
+ >
+ <span
+ v-if="deviceData.透前血压_伸缩压"
+ :style="{ color: tqXygj ? 'red' : '#303133' }"
+ style="font-weight: 800; font-size: 130%; white-space: nowrap"
+ >{{ deviceData.透前血压_伸缩压 }}/</span
+ >
+ <span
+ :style="{ color: tqXygj ? 'red' : '#303133' }"
+ style="font-weight: 800; font-size: 130%; white-space: nowrap"
+ >{{ deviceData.透前血压_舒张压 }}</span
+ >
+ <span
+ v-if="deviceData.透前脉搏"
+ :style="{ color: tqMbgj ? 'red' : '#303133' }"
+ style="font-weight: 800; font-size: 130%; white-space: nowrap"
+ >,{{ deviceData.透前脉搏 }}</span
+ >
+ </div>
+ </div>
+ </el-col>
+ </el-row>
+ <el-row style="height: 20%;background-color: #ffffff; line-height: 50px;">
+ <!-- <div style="font-size: 200%;height: 100%;text-align: center; color: #909399;" class="grid-container">
+
+ <el-icon><ChatDotSquare /></el-icon>暂无通知
+
+ </div> -->
+ <div style="color: cornflowerblue;height: 20%; width: 100%;" class="grid-container">
+ <div style="text-align: center;width: 100%; color: #909399;">
+ 2025-01-11 12:23:45
+ </div>
+
+ </div>
+ <div style="font-size: 300%; color: cornflowerblue;height: 80%; width: 100%;" class="grid-container">
+
+ <div style="text-align: center;width: 100%;">
+ 高压:118,低压:88, 心率:89
+ </div>
+
+ </div>
+ <!-- <div style="font-size: 300%; color: red;height: 100%;" class="grid-container">
+
+ 患者掉压验证请注意!
+
+ </div> -->
+ <!-- <el-alert style="font-size: 300%" title="处方已经确认。医嘱已执行" type="success" show-icon />
+ <el-alert title="患者治疗过程中掉压验证,请注意!" type="warning" show-icon /> -->
+
+ </el-row>
+ </div>
+ <div
+ v-else
+ style="height: 100%; border: #409eff 1px solid"
+ :class="{ blink2: noBaoji !== '' }"
+ >
+ <el-row
+ style="
+ font-weight: 900;
+ font-size: 300%;
+ color: #3b3737;
+ width: 100%;
+ height: 20%;
+ border: #3b3737 1px solid;
+ "
+ >
+ <el-row
+ v-if="noBaoji === ''"
+ :style="{ backgroundColor: zhuangtaiColor }"
+ style="
+ color: #ffffff;
+ width: 100%;
+ height: 100%;
+ white-space: nowrap;
+ overflow: hidden;
+ "
+ >
+ <div class="grid-container" style="height: 100%">
+ {{ deviceData.设备名称 }} {{ zhuangtaiStr }}
+ </div>
+ </el-row>
+
+ <el-row v-else style="width: 100%">
+ <el-col
+ :span="24"
+ style="
+ color: #ffffff;
+ width: 100%;
+ white-space: nowrap;
+ overflow: hidden;
+ "
+ >
+ {{ deviceData.设备名称 }} {{ noBaoji }}
+ </el-col>
+ </el-row>
+ </el-row>
+ <el-row
+ style="padding-right: 2px; height: 80%; background-color: #ffffff"
+ >
+ <el-col :span="15" style="height: 100%">
+ <div style="height: 100%">
+ <el-row style="padding: 0px 0px 0px 0px; height: 100%">
+ <el-col
+ :span="10"
+ :style="{ backgroundImage: `url(${TQS88})` }"
+ style="
+ background-size: 100% 100%;
+ border-radius: 5px;
+ margin-top: 2%;
+ margin-bottom: 1%;
+ "
+ >
+
+ </el-col>
+ <el-col
+ v-if="noBaoji !== ''"
+ :span="14"
+ style="
+ padding-left: 5px;
+ height: 100%;
+ font-weight: 500;
+ font-size: 100%;
+ "
+ >
+ <div
+ class="grid-container"
+ style="height: 33%; line-height: 100%; color: red"
+ >
+ <div class="centered-text">温度:{{ wd }}</div>
+ </div>
+
+ <div class="grid-container" style="height: 33%; color: #409eff">
+ <div class="centered-text">流速:{{ ls }}</div>
+ </div>
+ <div class="grid-container" style="height: 33%; color: #e6a23c">
+ <div class="centered-text">Cond:{{ ddd }}</div>
+ </div>
+ </el-col>
+ </el-row>
+ </div>
+ </el-col>
+ <el-col :span="9" v-if="noBaoji !== ''">
+ <!-- 历史状态画图 -->
+ <div
+ :ref="'echartsDivwd' + deviceData.设备编号"
+ style="height: 33%"
+ ></div>
+ <div
+ :ref="'echartsDivls' + deviceData.设备编号"
+ style="height: 33%"
+ ></div>
+ <div
+ :ref="'echartsDivddd' + deviceData.设备编号"
+ style="height: 33%"
+ ></div>
+ </el-col>
+ </el-row>
+ </div>
+ </div>
+</template>
+ <script lang="ts" setup>
+import TQS88 from "../img/TQS88.png";
+import maibo from '../img/maibo.png'
+import xueya from '../img/xueya.png'
+import { computed, getCurrentInstance, onMounted, ref, watch } from "vue";
+import * as echarts from "echarts";
+import { jgTime4 } from "../utils/formatTime";
+const { proxy } = getCurrentInstance() as any;
+// 在需要使用的组件中引入
+import { ChatDotSquare } from '@element-plus/icons-vue';
+const deviceData = ref({
+ iot_传输时间: "2025-01-10 19:15:24",
+ iot_当前脱水量: 2.04,
+ iot_脱水目标量: 3.3,
+ iot_脱水速率: 0.82,
+ iot_跨膜压: 40,
+ iot_透析时间: 149,
+ iot_静脉压: 86,
+ 上次透后称重: 72.5,
+ 体重增加: 3.1,
+ 体重增长率: 4.5,
+ 分区编号: "109195231931115eZmM",
+ 处方脱水量: 3.3,
+ 实时脱水量: 1.65,
+ 干体重: 69.5,
+ 年龄: 59,
+ 性别: "男",
+ 患者头像:
+ "http://dhimg.leon056.com/hemodialysis/face/PAT9090070832211PyVq/face-IMG_20240413_112705.jpg-202404131127536157.jpg",
+ 患者姓名: "李金山",
+ 患者编号: "PAT9090070832211PyVq",
+ 患者透析号: "0207",
+ 最后一条血压: 116,
+ 此次脱水量: 6.1,
+ 监测血压是否低于百分之30: false,
+ 监测血压是否高于百分之30: false,
+ 监测记录列表: [
+ {
+ 伸缩压: "152",
+ 脉搏: "66",
+ 舒张压: "76",
+ },
+ {
+ 伸缩压: "133",
+ 脉搏: "67",
+ 舒张压: "72",
+ },
+ {
+ 伸缩压: "116",
+ 脉搏: "79",
+ 舒张压: "63",
+ },
+ ],
+ 第一条血压: 152,
+ 脉搏列表: "66,67,79",
+ 血压低值列表: "76,72,63",
+ 血压高值列表: "152,133,116",
+ 设备分区类型: 0,
+ 设备号: "23",
+ 设备名称: "23",
+ 设备序列号: "B97AP002",
+ 设备状态列表: [
+ {
+ 是否为警告标记: 0,
+ 状态名称: "待机",
+ 状态类型: "待机",
+ 状态颜色: "#13CE66",
+ },
+ ],
+ 设备编号: "DEVICE9195233509924hOHL",
+ 超滤速度过快: null,
+ 跨膜压列表: "2753,33,37",
+ 跨膜压是否大于200: false,
+ 透前称重: 75.6,
+ 透前脉搏: 77,
+ 透前血压_伸缩压: 136,
+ 透前血压_舒张压: 57,
+ 透析单编号: "9347151058555cAjJ",
+ 透析器: "B-17AHF",
+ 透析处方的时长: 4,
+ 透析处方的时长_分钟: "00",
+ 透析处方的时长_小时: "4",
+ 透析开始时间: "2025-01-10 16:44:00",
+ 透析方案: "HD",
+ 透析状态: "2.0",
+ 透析结束时间: "2025-01-10 20:44:00",
+ 设备变化: "1736508117033DEV",
+ 属性历史列表: [
+ {
+ 属性列表: [
+ {
+ identifier: "D",
+ identifierText: "血液流速",
+ time2: 1736507724242,
+ time: 1736507724242,
+ finalText: "00240",
+ isShow: 1,
+ },
+ {
+ identifier: "F",
+ identifierText: "透析液温度",
+ time2: 1736507724242,
+ time: 1736507724242,
+ finalText: "036.4",
+ isShow: 1,
+ },
+ {
+ identifier: "G",
+ identifierText: "透析液电导度",
+ time2: 1736507724242,
+ time: 1736507724242,
+ finalText: "013.8",
+ isShow: 1,
+ },
+ ],
+ 查询时间: "2025-01-10 19:17:57",
+ },
+ {
+ 属性列表: [
+ {
+ identifier: "D",
+ identifierText: "血液流速",
+ time2: 1736507538186,
+ time: 1736507538186,
+ finalText: "00240",
+ isShow: 1,
+ },
+ {
+ identifier: "F",
+ identifierText: "透析液温度",
+ time2: 1736507538186,
+ time: 1736507538186,
+ finalText: "036.5",
+ isShow: 1,
+ },
+ {
+ identifier: "G",
+ identifierText: "透析液电导度",
+ time2: 1736507538186,
+ time: 1736507538186,
+ finalText: "013.7",
+ isShow: 1,
+ },
+ ],
+ 查询时间: "2025-01-10 19:12:59",
+ },
+ {
+ 属性列表: [
+ {
+ identifier: "D",
+ identifierText: "血液流速",
+ time2: 1736507290239,
+ time: 1736507290239,
+ finalText: "00240",
+ isShow: 1,
+ },
+ {
+ identifier: "F",
+ identifierText: "透析液温度",
+ time2: 1736507290239,
+ time: 1736507290239,
+ finalText: "036.5",
+ isShow: 1,
+ },
+ {
+ identifier: "G",
+ identifierText: "透析液电导度",
+ time2: 1736507290239,
+ time: 1736507290239,
+ finalText: "013.8",
+ isShow: 1,
+ },
+ ],
+ 查询时间: "2025-01-10 19:08:00",
+ },
+ ],
+});
+// 告警提示
+const textbaojing = ref("");
+const iscomfig = ref(false);
+const centerDialogVisible = ref(false);
+const background = ref("");
+const txztText = ref("");
+const textcolor = ref("");
+const wd = ref("");
+const ls = ref("");
+const ddd = ref("");
+const txzt: any = computed(() => {
+ return deviceData.value.透析状态;
+});
+// 是否是消毒类型和待机
+const xiaoduzhuangti = computed(() => {
+ return false;
+});
+// 状态颜色
+const zhuangtaiColor = computed(() => {
+ const list = deviceData.value.设备状态列表;
+ let colorStr = "#13CE66";
+ if (list && list.length > 0) {
+ // 默认显示第一状态颜色
+ // colorStr=list[0].状态颜色
+ // 消毒状态优先级高
+ const x = list.findIndex((e) => {
+ return e.状态类型 === "透析机消毒" || e.状态类型 === "在线";
+ });
+ if (x !== 0) {
+ colorStr = list[0].状态颜色;
+ }
+ }
+ return colorStr;
+});
+// 没有报警就返回空字符传
+const noBaoji = computed(() => {
+ const list = deviceData.value.设备状态列表;
+ let zhuantaiStr = "";
+ let jinggaoStr = "";
+ if (list && list.length > 0) {
+ list.forEach((el: any) => {
+ if (el.是否为警告标记 === 1) {
+ if (jinggaoStr !== "") {
+ jinggaoStr += "/" + el.状态名称;
+ } else {
+ jinggaoStr += el.状态名称;
+ }
+ } else {
+ zhuantaiStr += el.状态名称;
+ }
+ });
+ }
+ return jinggaoStr;
+});
+// 状态返回
+const zhuangtaiStr = computed(() => {
+ const list = deviceData.value.设备状态列表;
+ let zhuantaiStr = "";
+ if (list && list.length > 0) {
+ list.forEach((el: any) => {
+ if (
+ el.是否为警告标记 === 1 ||
+ el.状态类型 === "透析机消毒" ||
+ el.状态类型 === "在线"
+ ) {
+ //去掉待机和消毒状态显示
+ } else {
+ if (zhuantaiStr !== "") {
+ zhuantaiStr += "/" + el.状态名称;
+ } else {
+ zhuantaiStr += el.状态名称;
+ }
+ }
+ });
+ }
+
+ return zhuantaiStr;
+});
+const isbaioji = computed(() => {
+ const list = deviceData.value.设备状态列表;
+ if (
+ (deviceData.value.监测血压是否低于百分之30 ||
+ deviceData.value.跨膜压是否大于200 ||
+ deviceData.value.监测血压是否高于百分之30) &&
+ deviceData.value.透析状态 === "2.0"
+ ) {
+ return true;
+ } else {
+ return false;
+ }
+});
+// 透前血压告警
+const tqXygj = computed(() => {
+ if (deviceData.value.透前血压_伸缩压 > 160 || deviceData.value.透前血压_伸缩压 < 90) {
+ return true;
+ } else {
+ return false;
+ }
+});
+// 透前脉搏告警
+const tqMbgj = computed(() => {
+ if (deviceData.value.透前脉搏 > 90) {
+ return true;
+ } else {
+ return false;
+ }
+});
+// 设置内联样式对象
+const backgroundStyle = {
+ backgroundImage: `url(${TQS88})`,
+ backgroundSize: "cover", // 根据需要调整
+ backgroundPosition: "center", // 根据需要调整
+};
+watch(
+ () => txzt.value,
+ () => {
+ if (txzt.value === "0.0") {
+ txztText.value = "未签";
+ textcolor.value = "#FAFAFA";
+ background.value = "#606266";
+ } else if (txzt.value === "1.0") {
+ // 蓝色
+ textcolor.value = "#faecd8";
+ background.value = "#E6A23C";
+ txztText.value = "已签";
+ } else if (txzt.value === "2.0") {
+ // 绿色
+ // textcolor.value = '#D9F5E2';
+ // background.value='#67C23A'
+ textcolor.value = "#ECF5FF";
+ background.value = "#409EFF";
+ txztText.value = "透中";
+ } else if (txzt.value === "2.5") {
+ //
+ textcolor.value = "#fde2e2";
+ background.value = "#fab6b6";
+ txztText.value = "结束";
+ } else if (txzt.value === "3.0") {
+ // 已经结束
+ textcolor.value = "#FFECD0";
+ background.value = "#E6A23C";
+ txztText.value = "检查";
+ } else if (txzt.value === "4.0") {
+ // yij
+ textcolor.value = "#FFECD0";
+ background.value = "#E6A23C";
+ txztText.value = "归档";
+ }
+ },
+ {
+ immediate: true,
+ deep: true,
+ }
+);
+onMounted(() => {});
+watch(
+ () => deviceData.value.设备变化,
+ () => {
+ // console.log(device.value.设备名称,'子组件变量')
+ setTimeout(() => {
+ if (!xiaoduzhuangti.value) {
+ initTupiao();
+ }
+ }, 500);
+ }
+);
+
+const showgaojing = () => {
+ if (deviceData.value.监测血压是否低于百分之30) {
+ centerDialogVisible.value = true;
+ iscomfig.value = true;
+ textbaojing.value = `${deviceData.value.设备名称}床,${deviceData.value.患者姓名} 监测血压下降至上机血压30%了,请及时处理`;
+ }
+ if (deviceData.value.跨膜压是否大于200) {
+ centerDialogVisible.value = true;
+ iscomfig.value = true;
+ textbaojing.value = `${deviceData.value.设备名称}床,${deviceData.value.患者姓名} 跨膜压过高请及时处理`;
+ }
+};
+const initTupiao = () => {
+ if (deviceData.value.患者姓名 !== "") {
+ const seriesData = [
+ {
+ name: "",
+ type: "line",
+ symbol: "triangle",
+ symbolSize: 10,
+ symbolRotate: 180,
+ data: [],
+ lineStyle: {
+ width: 5, // 设置线条宽度为5
+ color: "red",
+ },
+ itemStyle: {
+ borderWidth: 3,
+ borderColor: "red",
+ color: "red",
+ },
+ markPoint: {
+ data: [],
+ },
+ markLine: {
+ symbol: "none",
+ lineStyle: { color: "#409EFF", width: 3 },
+ data: [
+ { name: "y90", yAxis: 90, label: { show: false }, symbol: "none" },
+ ],
+ },
+ },
+
+ {
+ name: "",
+ type: "line",
+ symbol: "triangle",
+ symbolSize: 10,
+ data: [],
+ lineStyle: {
+ color: "#409EFF",
+ width: 5, // 设置线条宽度为5
+ },
+ itemStyle: {
+ borderWidth: 3,
+ borderColor: "#409EFF",
+ color: "#409EFF",
+ },
+ markPoint: {
+ data: [],
+ },
+ markLine: {
+ symbol: "none",
+ lineStyle: { color: "#F56C6C", width: 3 },
+ data: [
+ {
+ name: "y140",
+ yAxis: 140,
+ label: { show: false },
+ symbol: "none",
+ },
+ ],
+ },
+ },
+ {
+ name: "",
+ type: "line",
+ symbolSize: 10,
+ data: [],
+ lineStyle: {
+ color: "#D940FF",
+ width: 5, // 设置线条宽度为5
+ },
+ markPoint: {
+ data: [],
+ },
+ },
+ ];
+ const xAxisData = [];
+ if (Number(deviceData.value.透析状态) >= 2) {
+ // alert(111)
+ deviceData.value.监测记录列表.forEach((e, index) => {
+ seriesData[0].data.push(e.伸缩压);
+ seriesData[1].data.push(e.舒张压);
+ seriesData[2].data.push(e.脉搏);
+ xAxisData.push(index);
+ if (index == 0) {
+ let y = Number(e.伸缩压) + 20;
+ let y2 = Number(e.舒张压) + 20;
+ seriesData[0].markPoint.data.push({
+ name: "上机血压",
+ value: e.伸缩压,
+ xAxis: 0,
+ yAxis: e.伸缩压,
+ symbolSize: 0,
+ symbolOffset: [25, -15],
+ label: { fontSize: 20, color: "red" },
+ });
+ seriesData[1].markPoint.data.push({
+ name: "上机血压",
+ value: e.舒张压,
+ xAxis: 0,
+ yAxis: e.舒张压,
+ symbolSize: 0,
+ symbolOffset: [15, 15],
+ label: { fontSize: 20, color: "#409EFF" },
+ });
+ seriesData[2].markPoint.data.push({
+ name: "上机血压",
+ value: e.脉搏,
+ xAxis: 0,
+ yAxis: e.脉搏,
+ symbolSize: 0,
+ symbolOffset: [10, -10],
+ label: { fontSize: 20, color: "#D940FF" },
+ });
+ } else if (
+ deviceData.value.监测记录列表.length > 1 &&
+ index === deviceData.value.监测记录列表.length - 1
+ ) {
+ let y = Number(e.伸缩压) + 20;
+ let y2 = Number(e.舒张压) + 20;
+ seriesData[0].markPoint.data.push({
+ name: "上机血压",
+ value: e.伸缩压,
+ xAxis: index,
+ yAxis: e.伸缩压,
+ symbolSize: 0,
+ symbolOffset: [-15, -15],
+ label: { fontSize: 20, color: "red" },
+ });
+ seriesData[1].markPoint.data.push({
+ name: "上机血压",
+ value: e.舒张压,
+ xAxis: index,
+ yAxis: e.舒张压,
+ symbolSize: 0,
+ symbolOffset: [-15, 15],
+ label: { fontSize: 20, color: "#409EFF" },
+ });
+ seriesData[2].markPoint.data.push({
+ name: "上机血压",
+ value: e.脉搏,
+ xAxis: index,
+ yAxis: e.脉搏,
+ symbolSize: 0,
+ symbolOffset: [0, -10],
+ label: { fontSize: 20, color: "#D940FF" },
+ });
+ }
+ });
+ if (deviceData.value.监测记录列表.length === 1) {
+ xAxisData.push(1);
+ }
+ try {
+ const myChart = echarts.init(
+ proxy.$refs["echartsDiv" + deviceData.value.设备编号]
+ );
+ const option = {
+ backgroundColor: textcolor.value,
+ tooltip: {
+ trigger: "axis",
+ },
+ toolbox: {
+ show: false,
+ },
+ grid: {
+ left: 8,
+ top: 0,
+ bottom: 0,
+ },
+ xAxis: {
+ type: "category",
+ // 标记做右往左排列
+ boundaryGap: false,
+ data: xAxisData,
+ axisTick: {
+ show: true, // 显示 X 轴刻度
+ },
+ },
+ yAxis: {
+ name: "",
+ type: "value",
+ min: 20,
+ max: 220,
+ interval: 20, // 指定刻度间隔,
+ splitLine: {
+ show: false,
+ },
+ },
+ series: seriesData,
+ };
+ myChart.setOption(option);
+ } catch (e) {
+ console.log("图标渲染异常异常");
+ }
+ } else {
+ try {
+ const myChart = echarts.init(
+ proxy.$refs["echartsDiv" + deviceData.value.设备编号]
+ );
+
+ const option = {
+ backgroundColor: textcolor.value,
+ tooltip: {
+ trigger: "axis",
+ },
+ toolbox: {
+ show: false,
+ },
+ grid: {
+ left: 5,
+ top: 0,
+ bottom: 0,
+ },
+ xAxis: {
+ type: "category",
+ boundaryGap: false,
+ data: [1, 2, 3, 4],
+ },
+ yAxis: {
+ name: "",
+ type: "value",
+ min: 20,
+ max: 220,
+ interval: 20, // 指定刻度间隔,
+ splitLine: {
+ show: false,
+ },
+ },
+ series: [],
+ };
+ myChart.setOption(option);
+ } catch (e) {
+ console.log("异常", proxy.$refs["echartsDiv" + deviceData.value.设备编号]);
+ }
+ }
+ } else if (deviceData.value.患者姓名 === "") {
+ const tbdata1 = [];
+ const tbdata2 = [];
+ const tbdata3 = [];
+ if (deviceData.value.属性历史列表) {
+ deviceData.value.属性历史列表.forEach((e, index) => {
+ // 温度
+ const wdMode = e.属性列表.find((l) => {
+ return l.identifierText === "透析液温度";
+ });
+ if (wdMode) {
+ tbdata1.push(Number(wdMode?.finalText));
+ wd.value = Number(wdMode?.finalText);
+ }
+
+ // 血液流速
+ const xymode = e.属性列表.find((l) => {
+ return l.identifierText === "血液流速";
+ });
+ if (xymode) {
+ tbdata2.push(Number(xymode?.finalText));
+ ls.value = Number(xymode?.finalText);
+ }
+
+ // 电导度
+ const dddMode = e.属性列表.find((l) => {
+ return l.identifierText === "透析液电导度";
+ });
+ if (dddMode) {
+ tbdata3.push(Number(dddMode?.finalText));
+ ddd.value = Number(dddMode?.finalText);
+ }
+ });
+ }
+ try {
+ const myChart1 = echarts.init(
+ proxy.$refs["echartsDivwd" + deviceData.value.设备编号]
+ );
+ const myChart2 = echarts.init(
+ proxy.$refs["echartsDivls" + deviceData.value.设备编号]
+ );
+ const myChart3 = echarts.init(
+ proxy.$refs["echartsDivddd" + deviceData.value.设备编号]
+ );
+ const option1 = {
+ backgroundColor: textcolor.value,
+ tooltip: {
+ trigger: "axis",
+ },
+ toolbox: {
+ show: false,
+ },
+ grid: {
+ left: 8,
+ top: 30,
+ bottom: 0,
+ },
+ xAxis: {
+ show: false, // 隐藏X轴
+ type: "category",
+ // 标记做右往左排列
+ boundaryGap: false,
+ data: [1, 2, 3],
+ axisTick: {
+ show: false, // 显示 X 轴刻度
+ },
+ },
+ yAxis: {
+ type: "value",
+ splitLine: {
+ show: false,
+ },
+ },
+ series: [
+ {
+ data: tbdata1,
+ type: "line",
+ lineStyle: {
+ width: 10, // 设置线条宽度为5
+ color: "red",
+ },
+ },
+ ],
+ };
+ const option2 = {
+ backgroundColor: textcolor.value,
+ tooltip: {
+ trigger: "axis",
+ },
+ toolbox: {
+ show: false,
+ },
+ grid: {
+ left: 8,
+ top: 20,
+ bottom: 0,
+ },
+ xAxis: {
+ show: false, // 隐藏X轴
+ type: "category",
+ // 标记做右往左排列
+ boundaryGap: false,
+ data: [1, 2, 3],
+ axisTick: {
+ show: false, // 显示 X 轴刻度
+ },
+ },
+ yAxis: {
+ type: "value",
+ min: -10,
+ splitLine: {
+ show: false,
+ },
+ },
+ series: [
+ {
+ data: tbdata2,
+ type: "line",
+ lineStyle: {
+ width: 10, // 设置线条宽度为5
+ color: "#409EFF",
+ },
+ },
+ ],
+ };
+ const option3 = {
+ backgroundColor: textcolor.value,
+ tooltip: {
+ trigger: "axis",
+ },
+ toolbox: {
+ show: false,
+ },
+ grid: {
+ left: 8,
+ top: 10,
+ bottom: 0,
+ },
+ xAxis: {
+ show: false, // 隐藏X轴
+ type: "category",
+ // 标记做右往左排列
+ boundaryGap: false,
+ data: [1, 2, 3],
+ axisTick: {
+ show: false, // 显示 X 轴刻度
+ },
+ },
+ yAxis: {
+ type: "value",
+ min: -10,
+ splitLine: {
+ show: false,
+ },
+ },
+ series: [
+ {
+ data: tbdata3,
+ type: "line",
+ lineStyle: {
+ width: 10, // 设置线条宽度为5
+ color: "#E6A23C",
+ },
+ },
+ ],
+ };
+ myChart1.setOption(option1);
+ myChart2.setOption(option2);
+ myChart3.setOption(option3);
+ } catch (e) {
+ console.log("图标渲染异常异常");
+ }
+
+ console.log(deviceData.value);
+ }
+};
+</script>
+ <style lang="less" scoped>
+.divice {
+ font-size: 100%;
+ border-radius: 4px;
+ border: solid 1px;
+ width: 100%;
+ height: 100%;
+ border: 1px solid coral;
+}
+/* 定义闪烁动画 */
+@keyframes blink {
+ 0% {
+ border: 4px solid red;
+ }
+ 50% {
+ border: 4px solid Transparent;
+ }
+ 100% {
+ border: 4px solid red;
+ // border-bottom:8px solid red ;
+ }
+}
+
+/* 应用闪烁动画 */
+.blink {
+ // float: left; /* 让div浮动到左边 */
+ width: 100%;
+ height: 100%;
+ animation: blink 2s infinite; /* 每秒闪烁一次,无限次数 */
+
+ // border-left:5px solid red ;
+ // border-right:5px solid red ;
+
+ // background: red;
+ cursor: pointer;
+ // margin-bottom: 100%;
+}
+@keyframes blink2 {
+ 0% {
+ background: red;
+ }
+ 50% {
+ background: Transparent;
+ }
+ 100% {
+ background: red;
+ // border-bottom:8px solid red ;
+ }
+}
+.blink2 {
+ animation: blink2 2s infinite; /* 每秒闪烁一次,无限次数 */
+ width: 100%;
+ height: 100%;
+}
+.grid-container {
+ display: grid;
+ align-items: center; /* 垂直居中 */
+ height: 100vh; /* 根据需要调整高度 */
+}
+
+.centered-text {
+ font-weight: 600;
+ /* 其他样式 */
+}
+</style>
\ No newline at end of file
diff --git a/src/views/deviceWindows.vue b/src/views/deviceWindows.vue
new file mode 100644
index 0000000..7950549
--- /dev/null
+++ b/src/views/deviceWindows.vue
@@ -0,0 +1,913 @@
+<template>
+ <div class="divice" :class="{blink:isbaioji}" :style="{borderColor: background}" >
+ <div v-if="deviceData.患者姓名 !== ''&&!xiaoduzhuangti" style="height: 100%;" >
+ <el-row v-if="deviceData.患者姓名 !== ''" @click='showgaojing' :style="{backgroundColor: background}" :class="{blink2:isbaioji}" style="font-weight: 900;color: #FFFFFF; width: 100%; height: 20%; line-height: 100%;padding: 5px;position: relative; ">
+ <span class="grid-container" style="font-size: 300%; height: 100%;" v-if="deviceData.设备名称!==null">{{deviceData.设备名称}} </span>
+ <span class="grid-container" style="margin-left: 5%;font-size: 350%; height: 100%;">{{deviceData.患者姓名}} </span>
+
+ <span class="grid-container" v-if="deviceData.年龄!==null" style="margin-left: 5%;font-size: 300%; height: 100%;">{{deviceData.年龄}}岁</span>
+ <span class="grid-container" style="margin-left: 5%;font-size: 300%; height: 100%;">{{deviceData.性别}}</span>
+ <div style="position: absolute;top: 0;right: 0;display: grid;padding: 5px; font-size: 300%;" >
+ <span v-if="deviceData.iot_跨膜压>=200&&Number(deviceData.透析状态)===2" style="color: #303133;">
+ TMP↑
+ </span>
+ <span v-if="deviceData.iot_跨膜压<0&&Number(deviceData.透析状态)===2" style="color: #303133;">
+ TMP↓
+ </span>
+ <span v-if="deviceData.监测血压是否低于百分之30&&Number(deviceData.透析状态)===2" style="color: #303133;">
+ BP↓
+ </span>
+ <span v-if="deviceData.监测血压是否高于百分之30&&Number(deviceData.透析状态)===2" style="color: #303133;">
+ BP↑
+ </span>
+
+ </div>
+
+ </el-row>
+ <el-row v-if="deviceData.患者姓名!==''" :style="{backgroundColor: textcolor}" style="padding-right:2px;height: 70%;">
+ <el-col :span="12" style="height: 100%;">
+ <div style="height:100%;">
+ <el-row style="padding:10% 0px 0px 20px; height: 100%;">
+ <el-col :span="10" style="height: 100%;">
+ <div :style="{backgroundImage:`url(${deviceData.患者头像})`}" style="background-size:100% 100%;border-radius: 5px; margin-top: 10%;margin-bottom: 1%; height: 80%; width: 100%;"></div>
+ </el-col>
+ <el-col :span="14" style="padding-left: 5px; height: 100%; font-weight: 700;font-size: 300%;" >
+ <el-row style="height: 25%; ">
+ <el-col class="grid-container" style="height: 100%;" :span="12" :style="{color:deviceData.透析方案==='HDF'?'#E6A23C':''}">
+ {{deviceData.透析方案}}
+ </el-col>
+ <el-col :span="12" class="grid-container" style="text-align: right;font-weight: 800; color: #70A3DD;white-space: nowrap;height: 100%;">
+ {{txztText}}
+ </el-col>
+ </el-row>
+ <div style="height: 25%;">
+ <template v-if="Number(deviceData.透析状态)>=2">
+ <div class="grid-container" style="height: 100%;">
+ <div>
+ <span v-if="deviceData.iot_静脉压" style="color: #409EFF;">{{deviceData.iot_静脉压}}/</span><span v-if="deviceData.iot_跨膜压" :style="{color:deviceData.iot_跨膜压>200?'red':''}">{{deviceData.iot_跨膜压}}</span>
+ </div>
+ </div>
+ </template>
+ </div>
+ <div style="height: 15%;" >
+ <span v-if="Number(deviceData.透析状态)>=2">
+
+ <span style="color:#303133;">{{Number(deviceData.iot_当前脱水量).toFixed(1)}}</span>/<span style="font-size: 90%">{{Number(deviceData.iot_脱水目标量).toFixed(1)}}</span><span style="font-size: 80%">({{deviceData.iot_脱水速率}})</span>
+ </span>
+ <span v-if="Number(deviceData.透析状态)==1">
+ <span style="color:#303133;">{{Number(deviceData.iot_当前脱水量).toFixed(1)}}</span>/<span style="font-size: 90%">{{Number(deviceData.处方脱水量).toFixed(1)}}</span>
+ </span>
+ </div>
+ <div style="height: 10%;">
+ <el-progress :text-inside="true" :stroke-width="26" :percentage="70" />
+ </div>
+ <div style="height: 25%;">
+ <span v-if="Number(deviceData.透析状态)>=1">
+ <span style="color: #303133;">{{jgTime4(deviceData.iot_透析时间)}}</span>/<span style="color: #606266;">{{deviceData.透析处方的时长_小时}}:{{deviceData.透析处方的时长_分钟}}</span>
+ </span>
+ </div>
+ </el-col>
+ </el-row>
+ </div>
+ </el-col>
+ <el-col :span="12">
+ <div v-if="Number(deviceData.透析状态)>1" :ref="'echartsDiv'+device.设备编号" style="height: 97%;">
+ </div>
+ <div v-if="Number(deviceData.透析状态)===1" style="text-align: right;height: 100%;">
+ <div class="container" style="height: 25%;font-weight: 600;color: #909399; font-size: 80%; ">
+ CW:<span style="font-weight: 800; font-size: 130%; color: #303133;white-space: nowrap;">{{Number(deviceData.透前称重).toFixed(1)}}</span>
+ </div>
+ <div class="container" style="height: 25%;font-weight: 600;color: #909399; font-size: 80%; ">
+ D<span style="font-weight: 800; font-size: 130%; color: #303133;white-space: nowrap;">{{Number(deviceData.干体重).toFixed(1)}}</span>L<span style="font-weight: 800; font-size: 130%; color: #303133;white-space: nowrap;">{{Number(deviceData.上次透后称重)}}</span>
+ </div>
+ <div :style="{color:deviceData.体重增长率>=5?'red':'#303133'}" style="height: 25%;font-weight: 600; font-size: 80%;">
+ <span style="font-weight: 800; font-size: 130%; white-space: nowrap;">
+ <template v-if="Number(deviceData.透前称重-deviceData.干体重)>0">+</template>{{Number(deviceData.透前称重-deviceData.干体重).toFixed(1)}}
+ </span>
+ <span>({{deviceData.体重增长率}}%)</span>
+ </div>
+ <div class="container" style="font-weight: 600;height: 25%;color: #909399; font-size: 80%;margin-left: -20px;">
+ <span v-if="deviceData.透前血压_伸缩压" :style="{color:tqXygj?'red':'#303133'}" style="font-weight: 800; font-size: 130%;white-space: nowrap;">{{deviceData.透前血压_伸缩压}}/</span>
+ <span :style="{color:tqXygj?'red':'#303133'}" style="font-weight: 800; font-size: 130%;white-space: nowrap;">{{deviceData.透前血压_舒张压}}</span>
+ <span v-if="deviceData.透前脉搏" :style="{color:tqMbgj?'red':'#303133'}" style="font-weight: 800; font-size: 130%;white-space: nowrap;">,{{deviceData.透前脉搏}}</span>
+ </div>
+
+ </div>
+ </el-col>
+ </el-row>
+ </div>
+ <div v-else style="height: 100%; border: #409EFF 1px solid;" :class="{blink2:noBaoji!==''}">
+ <el-row style="font-weight: 900;font-size: 300%; color: #3b3737; width: 100%; height: 20%; border: #3b3737 1px solid;">
+ <el-row v-if="noBaoji===''" :style="{backgroundColor:zhuangtaiColor}" style="color: #FFFFFF;width: 100%; height: 100%;white-space: nowrap;overflow: hidden;">
+ <div class="grid-container" style="height: 100%;">
+ {{deviceData.设备名称}} {{zhuangtaiStr}}
+ </div>
+
+ </el-row>
+
+ <el-row v-else style="width: 100%;">
+ <el-col :span="24" style="color: #FFFFFF;width: 100%;white-space: nowrap;overflow: hidden;">
+ {{deviceData.设备名称}} {{noBaoji}}
+ </el-col>
+ </el-row>
+
+
+ </el-row>
+ <el-row style="padding-right:2px;height: 80%; background-color: #FFFFFF">
+ <el-col :span="15" style="height: 100%;">
+ <div style="height:100%;">
+ <el-row style="padding:0px 0px 0px 0px; height: 100%;">
+ <el-col :span="10" :style="{backgroundImage:`url(${TQS88})`}" style="background-size:100% 100%;border-radius: 5px; margin-top: 2%;margin-bottom: 1%;">
+
+ </el-col>
+ <el-col v-if="noBaoji!==''" :span="14" style="padding-left: 5px; height: 100%; font-weight: 500;font-size:100%" >
+ <div class="grid-container" style="height: 33%; line-height: 100%;color: red; ">
+
+ <div class="centered-text">温度:{{wd}}</div>
+ </div>
+
+ <div class="grid-container" style="height: 33%;color: #409EFF;" >
+
+ <div class="centered-text">流速:{{ls}}</div>
+ </div>
+ <div class="grid-container" style="height: 33%;color: #E6A23C;">
+
+ <div class="centered-text">Cond:{{ddd}}</div>
+ </div>
+ </el-col>
+ </el-row>
+ </div>
+ </el-col>
+ <el-col :span="9" v-if="noBaoji!==''">
+ <!-- 历史状态画图 -->
+ <div :ref="'echartsDivwd'+device.设备编号" style="height: 33%;">
+ </div>
+ <div :ref="'echartsDivls'+device.设备编号" style="height: 33%;">
+ </div>
+ <div :ref="'echartsDivddd'+device.设备编号" style="height: 33%;">
+ </div>
+ </el-col>
+ </el-row>
+ </div>
+
+
+ </div>
+
+ </template>
+ <script lang="ts" setup>
+ import TQS88 from '../img/TQS88.png'
+ import {computed, getCurrentInstance, onMounted,ref,watch} from 'vue'
+ import * as echarts from 'echarts';
+ import { jgTime4 } from '../utils/formatTime';
+ const { proxy } = getCurrentInstance() as any;
+ const device = ref({
+ iot_传输时间: "2025-01-10 19:15:24",
+ iot_当前脱水量: 2.04,
+ iot_脱水目标量: 3.3,
+ iot_脱水速率: 0.82,
+ iot_跨膜压: 40,
+ iot_透析时间: 149,
+ iot_静脉压: 86,
+ 上次透后称重: 72.5,
+ 体重增加: 3.1,
+ 体重增长率: 4.5,
+ 分区编号: "109195231931115eZmM",
+ 处方脱水量: 3.3,
+ 实时脱水量: 1.65,
+ 干体重: 69.5,
+ 年龄: 59,
+ 性别: "男",
+ 患者头像:
+ "http://dhimg.leon056.com/hemodialysis/face/PAT9090070832211PyVq/face-IMG_20240413_112705.jpg-202404131127536157.jpg",
+ 患者姓名: "李金山",
+ 患者编号: "PAT9090070832211PyVq",
+ 患者透析号: "0207",
+ 最后一条血压: 116,
+ 此次脱水量: 6.1,
+ 监测血压是否低于百分之30: false,
+ 监测血压是否高于百分之30: false,
+ 监测记录列表: [
+ {
+ 伸缩压: "152",
+ 脉搏: "66",
+ 舒张压: "76",
+ },
+ {
+ 伸缩压: "133",
+ 脉搏: "67",
+ 舒张压: "72",
+ },
+ {
+ 伸缩压: "116",
+ 脉搏: "79",
+ 舒张压: "63",
+ },
+ ],
+ 第一条血压: 152,
+ 脉搏列表: "66,67,79",
+ 血压低值列表: "76,72,63",
+ 血压高值列表: "152,133,116",
+ 设备分区类型: 0,
+ 设备号: "23",
+ 设备名称: "23",
+ 设备序列号: "B97AP002",
+ 设备状态列表: [
+ {
+ 是否为警告标记: 0,
+ 状态名称: "待机",
+ 状态类型: "待机",
+ 状态颜色: "#13CE66",
+ },
+ ],
+ 设备编号: "DEVICE9195233509924hOHL",
+ 超滤速度过快: null,
+ 跨膜压列表: "2753,33,37",
+ 跨膜压是否大于200: false,
+ 透前称重: 75.6,
+ 透前脉搏: 77,
+ 透前血压_伸缩压: 136,
+ 透前血压_舒张压: 57,
+ 透析单编号: "9347151058555cAjJ",
+ 透析器: "B-17AHF",
+ 透析处方的时长: 4,
+ 透析处方的时长_分钟: "00",
+ 透析处方的时长_小时: "4",
+ 透析开始时间: "2025-01-10 16:44:00",
+ 透析方案: "HD",
+ 透析状态: "2.0",
+ 透析结束时间: "2025-01-10 20:44:00",
+ 设备变化: "1736508117033DEV",
+ 属性历史列表: [
+ {
+ 属性列表: [
+ {
+ identifier: "D",
+ identifierText: "血液流速",
+ time2: 1736507724242,
+ time: 1736507724242,
+ finalText: "00240",
+ isShow: 1,
+ },
+ {
+ identifier: "F",
+ identifierText: "透析液温度",
+ time2: 1736507724242,
+ time: 1736507724242,
+ finalText: "036.4",
+ isShow: 1,
+ },
+ {
+ identifier: "G",
+ identifierText: "透析液电导度",
+ time2: 1736507724242,
+ time: 1736507724242,
+ finalText: "013.8",
+ isShow: 1,
+ },
+ ],
+ 查询时间: "2025-01-10 19:17:57",
+ },
+ {
+ 属性列表: [
+ {
+ identifier: "D",
+ identifierText: "血液流速",
+ time2: 1736507538186,
+ time: 1736507538186,
+ finalText: "00240",
+ isShow: 1,
+ },
+ {
+ identifier: "F",
+ identifierText: "透析液温度",
+ time2: 1736507538186,
+ time: 1736507538186,
+ finalText: "036.5",
+ isShow: 1,
+ },
+ {
+ identifier: "G",
+ identifierText: "透析液电导度",
+ time2: 1736507538186,
+ time: 1736507538186,
+ finalText: "013.7",
+ isShow: 1,
+ },
+ ],
+ 查询时间: "2025-01-10 19:12:59",
+ },
+ {
+ 属性列表: [
+ {
+ identifier: "D",
+ identifierText: "血液流速",
+ time2: 1736507290239,
+ time: 1736507290239,
+ finalText: "00240",
+ isShow: 1,
+ },
+ {
+ identifier: "F",
+ identifierText: "透析液温度",
+ time2: 1736507290239,
+ time: 1736507290239,
+ finalText: "036.5",
+ isShow: 1,
+ },
+ {
+ identifier: "G",
+ identifierText: "透析液电导度",
+ time2: 1736507290239,
+ time: 1736507290239,
+ finalText: "013.8",
+ isShow: 1,
+ },
+ ],
+ 查询时间: "2025-01-10 19:08:00",
+ },
+ ],
+ });
+ // 告警提示
+ const textbaojing=ref('')
+ const iscomfig=ref(false)
+ const centerDialogVisible=ref(false)
+ const background=ref('')
+ const txztText=ref('')
+ const textcolor=ref('')
+ const wd=ref('')
+ const ls=ref('')
+ const ddd=ref('')
+ const txzt: any = computed(() => {
+ return device.value.透析状态;
+ });
+ // 是否是消毒类型和待机
+ const xiaoduzhuangti=computed(()=>{
+ // const list=device.value.设备状态列表
+ // if(list&&list.length>0){
+ // const x= list.findIndex(e=>{return e.状态类型==='透析机消毒'||e.状态类型==='待机'})
+ // if(x>=0){
+ // return true
+ // }else{
+ // return false
+ // }
+ // }
+ return false
+ });
+ // 状态颜色
+ const zhuangtaiColor=computed(()=>{
+ const list=device.value.设备状态列表
+ let colorStr='#13CE66'
+ if(list&&list.length>0){
+ // 默认显示第一状态颜色
+ // colorStr=list[0].状态颜色
+ // 消毒状态优先级高
+ const x= list.findIndex(e=>{return e.状态类型==='透析机消毒'||e.状态类型==='在线'})
+ if(x!==0){
+ colorStr=list[0].状态颜色
+ }
+ }
+ return colorStr
+ });
+ // 没有报警就返回空字符传
+ const noBaoji=computed(()=>{
+ const list=device.value.设备状态列表
+ let zhuantaiStr=''
+ let jinggaoStr=''
+ if(list&&list.length>0){
+ list.forEach((el:any)=>{
+ if(el.是否为警告标记===1){
+ if(jinggaoStr!==''){
+ jinggaoStr+='/'+el.状态名称
+ }else{
+ jinggaoStr+=el.状态名称
+ }
+ }else{
+ zhuantaiStr+=el.状态名称
+ }
+ })
+ }
+ return jinggaoStr
+ });
+ // 状态返回
+ const zhuangtaiStr=computed(()=>{
+ const list=device.value.设备状态列表
+ let zhuantaiStr=''
+ if(list&&list.length>0){
+ list.forEach((el:any)=>{
+ if(el.是否为警告标记===1||el.状态类型==='透析机消毒'||el.状态类型==='在线'){ //去掉待机和消毒状态显示
+ }else{
+ if(zhuantaiStr!==''){
+ zhuantaiStr+='/'+el.状态名称
+ }else{
+ zhuantaiStr+=el.状态名称
+ }
+
+ }
+ })
+ }
+
+ return zhuantaiStr
+ })
+ const isbaioji=computed(()=>{
+ const list=device.value.设备状态列表
+ if((device.value.监测血压是否低于百分之30||device.value.跨膜压是否大于200||device.value.监测血压是否高于百分之30)&&device.value.透析状态==='2.0'){
+ return true
+ }
+ else{
+ return false
+ }
+ })
+ // 透前血压告警
+ const tqXygj=computed(()=>{
+ if(device.value.透前血压_伸缩压>160||device.value.透前血压_伸缩压<90){
+ return true
+ }else{
+ return false
+ }
+ })
+ // 透前脉搏告警
+ const tqMbgj=computed(()=>{
+ if(device.value.透前脉搏>90){
+ return true
+ }else{
+ return false
+ }
+ })
+ // 设置内联样式对象
+ const backgroundStyle = {
+ backgroundImage: `url(${TQS88})`,
+ backgroundSize: 'cover', // 根据需要调整
+ backgroundPosition: 'center', // 根据需要调整
+ };
+ watch(
+ () => txzt.value,
+ () => {
+ if (txzt.value === '0.0') {
+ txztText.value = '未签';
+ textcolor.value = '#FAFAFA';
+ background.value='#606266'
+ } else if (txzt.value === '1.0') {// 蓝色
+ textcolor.value = '#faecd8';
+ background.value='#E6A23C'
+ txztText.value = '已签';
+ } else if (txzt.value === '2.0') {// 绿色
+ // textcolor.value = '#D9F5E2';
+ // background.value='#67C23A'
+ textcolor.value = '#ECF5FF';
+ background.value='#409EFF'
+ txztText.value = '透中';
+ } else if (txzt.value === '2.5') { //
+ textcolor.value = '#fde2e2';
+ background.value='#fab6b6'
+ txztText.value = '结束';
+ } else if (txzt.value === '3.0') {// 已经结束
+ textcolor.value = '#FFECD0';
+ background.value='#E6A23C'
+ txztText.value = '检查';
+ } else if (txzt.value === '4.0') {// yij
+ textcolor.value = '#FFECD0';
+ background.value='#E6A23C'
+ txztText.value = '归档';
+ }
+ },
+ {
+ immediate: true,
+ deep: true,
+ }
+ );
+ onMounted(()=>{
+ })
+ watch(()=>device.value.设备变化,()=>{
+ // console.log(device.value.设备名称,'子组件变量')
+ setTimeout(()=>{
+ if(!xiaoduzhuangti.value){
+ initTupiao()
+ }
+
+ },500)
+ })
+
+ const showgaojing=()=>{
+
+ if(device.value.监测血压是否低于百分之30){
+ centerDialogVisible.value=true
+ iscomfig.value=true
+ textbaojing.value=`${device.value.设备名称}床,${device.value.患者姓名} 监测血压下降至上机血压30%了,请及时处理`
+ }
+ if(device.value.跨膜压是否大于200){
+ centerDialogVisible.value=true
+ iscomfig.value=true
+ textbaojing.value=`${device.value.设备名称}床,${device.value.患者姓名} 跨膜压过高请及时处理`
+ }
+ }
+ const initTupiao=()=>{
+ if(device.value.患者姓名!==''){
+ const seriesData=[
+ {
+ name: '',
+ type: 'line',
+ symbol: "triangle",
+ symbolSize: 10,
+ symbolRotate:180,
+ data: [],
+ lineStyle: {
+ width: 5, // 设置线条宽度为5
+ color:'red'
+
+
+ },
+ itemStyle: {
+ borderWidth: 3,
+ borderColor: 'red',
+ color: 'red'
+ },
+ markPoint:{
+ data:[]
+ },
+ markLine:{
+ symbol:"none",
+ lineStyle:{color:'#409EFF',width: 3 },
+ data:[{ name:'y90',yAxis:90,label:{show:false},symbol:"none"}]
+ }
+ },
+
+
+ {
+ name: '',
+ type: 'line',
+ symbol: "triangle",
+ symbolSize: 10,
+ data: [],
+ lineStyle: {
+ color:'#409EFF',
+ width: 5 // 设置线条宽度为5
+ },
+ itemStyle: {
+ borderWidth: 3,
+ borderColor: '#409EFF',
+ color: '#409EFF'
+ },
+ markPoint:{
+ data:[]
+ },
+ markLine:{
+ symbol:"none",
+ lineStyle:{color:'#F56C6C',width: 3 },
+ data:[{ name:'y140',yAxis:140,label:{show:false},symbol:"none"}]
+ }
+ },
+ {
+ name: '',
+ type: 'line',
+ symbolSize: 10,
+ data: [],
+ lineStyle: {
+ color:'#D940FF',
+ width: 5 // 设置线条宽度为5
+ },
+ markPoint:{
+ data:[]
+ },
+
+ },
+ ]
+ const xAxisData=[]
+ if(Number(device.value.透析状态)>=2){
+ // alert(111)
+ device.value.监测记录列表.forEach((e,index)=>{
+ seriesData[0].data.push(e.伸缩压)
+ seriesData[1].data.push(e.舒张压)
+ seriesData[2].data.push(e.脉搏)
+ xAxisData.push(index)
+ if(index==0){
+ let y=(Number(e.伸缩压)+20)
+ let y2=(Number(e.舒张压)+20)
+ seriesData[0].markPoint.data.push({ name: '上机血压', value: e.伸缩压, xAxis: 0, yAxis: e.伸缩压,symbolSize:0,symbolOffset:[25,-15],label:{fontSize:20,color:'red'}})
+ seriesData[1].markPoint.data.push({ name: '上机血压', value: e.舒张压, xAxis: 0, yAxis: e.舒张压,symbolSize:0 ,symbolOffset:[15,15],label:{fontSize:20,color:'#409EFF'}})
+ seriesData[2].markPoint.data.push({ name: '上机血压', value: e.脉搏, xAxis: 0, yAxis: e.脉搏,symbolSize:0 ,symbolOffset:[10,-10],label:{fontSize:20,color:'#D940FF'}})
+ }
+ else if(device.value.监测记录列表.length>1&&index===(device.value.监测记录列表.length-1)){
+ let y=(Number(e.伸缩压)+20)
+ let y2=(Number(e.舒张压)+20)
+ seriesData[0].markPoint.data.push({ name: '上机血压', value: e.伸缩压, xAxis: index, yAxis: e.伸缩压,symbolSize:0,symbolOffset:[-15,-15],label:{fontSize:20,color:'red'}})
+ seriesData[1].markPoint.data.push({ name: '上机血压', value: e.舒张压, xAxis: index, yAxis: e.舒张压,symbolSize:0 ,symbolOffset:[-15,15],label:{fontSize:20,color:'#409EFF'}})
+ seriesData[2].markPoint.data.push({ name: '上机血压', value: e.脉搏, xAxis: index, yAxis: e.脉搏,symbolSize:0 ,symbolOffset:[0,-10],label:{fontSize:20,color:'#D940FF'}})
+ }
+ })
+ if(device.value.监测记录列表.length===1){
+ xAxisData.push(1)
+ }
+ try{
+ const myChart = echarts.init(proxy.$refs['echartsDiv'+device.value.设备编号]);
+ const option={
+ backgroundColor:textcolor.value,
+ tooltip: {
+ trigger: 'axis'
+ },
+ toolbox: {
+ show: false
+ },
+ grid:{
+ left:8,
+ top:0,
+ bottom:0,
+ },
+ xAxis: {
+ type: 'category',
+ // 标记做右往左排列
+ boundaryGap: false,
+ data: xAxisData,
+ axisTick: {
+ show: true // 显示 X 轴刻度
+ }
+ },
+ yAxis: {
+ name: '',
+ type: 'value',
+ min: 20,
+ max: 220,
+ interval: 20, // 指定刻度间隔,
+ splitLine: {
+ show: false
+ }
+ },
+ series: seriesData
+ };
+ myChart.setOption(option);
+ }catch(e){
+ console.log('图标渲染异常异常')
+ }
+
+ }else{
+ try{
+ const myChart = echarts.init(proxy.$refs['echartsDiv'+device.value.设备编号]);
+
+ const option={
+ backgroundColor:textcolor.value,
+ tooltip: {
+ trigger: 'axis'
+ },
+ toolbox: {
+ show: false
+ },
+ grid:{
+ left:5,
+ top:0,
+ bottom:0,
+ },
+ xAxis: {
+ type: 'category',
+ boundaryGap: false,
+ data: [1,2,3,4]
+ },
+ yAxis: {
+ name: '',
+ type: 'value',
+ min: 20,
+ max: 220,
+ interval: 20, // 指定刻度间隔,
+ splitLine: {
+ show: false
+ }
+ },
+ series: []
+ };
+ myChart.setOption(option);
+ }catch(e){
+ console.log('异常',proxy.$refs['echartsDiv'+device.value.设备编号])
+ }
+ }
+ }else if(device.value.患者姓名===''){
+ const tbdata1=[]
+ const tbdata2=[]
+ const tbdata3=[]
+ if(device.value.属性历史列表){
+ device.value.属性历史列表.forEach((e,index)=>{
+ // 温度
+ const wdMode=e.属性列表.find(l=>{return l.identifierText==='透析液温度'})
+ if(wdMode){
+ tbdata1.push(Number(wdMode?.finalText))
+ wd.value=Number(wdMode?.finalText)
+ }
+
+ // 血液流速
+ const xymode=e.属性列表.find(l=>{return l.identifierText==='血液流速'})
+ if(xymode){
+ tbdata2.push(Number(xymode?.finalText))
+ ls.value=Number(xymode?.finalText)
+ }
+
+ // 电导度
+ const dddMode=e.属性列表.find(l=>{return l.identifierText==='透析液电导度'})
+ if(dddMode){
+ tbdata3.push(Number(dddMode?.finalText))
+ ddd.value=Number(dddMode?.finalText)
+ }
+ })
+ }
+ try{
+ const myChart1 = echarts.init(proxy.$refs['echartsDivwd'+device.value.设备编号]);
+ const myChart2 = echarts.init(proxy.$refs['echartsDivls'+device.value.设备编号]);
+ const myChart3 = echarts.init(proxy.$refs['echartsDivddd'+device.value.设备编号]);
+ const option1={
+ backgroundColor:textcolor.value,
+ tooltip: {
+ trigger: 'axis'
+ },
+ toolbox: {
+ show: false
+ },
+ grid:{
+ left:8,
+ top:30,
+ bottom:0,
+ },
+ xAxis: {
+ show: false, // 隐藏X轴
+ type: 'category',
+ // 标记做右往左排列
+ boundaryGap: false,
+ data: [1,2,3],
+ axisTick: {
+ show: false // 显示 X 轴刻度
+ }
+ },
+ yAxis: {
+ type: 'value',
+ splitLine: {
+ show: false
+ }
+ },
+ series: [
+ {
+ data: tbdata1,
+ type: 'line',
+ lineStyle: {
+ width: 10, // 设置线条宽度为5
+ color:'red'
+ }
+ }
+ ]
+ };
+ const option2={
+ backgroundColor:textcolor.value,
+ tooltip: {
+ trigger: 'axis'
+ },
+ toolbox: {
+ show: false
+ },
+ grid:{
+ left:8,
+ top:20,
+ bottom:0,
+ },
+ xAxis: {
+ show: false, // 隐藏X轴
+ type: 'category',
+ // 标记做右往左排列
+ boundaryGap: false,
+ data: [1,2,3],
+ axisTick: {
+ show: false // 显示 X 轴刻度
+ }
+ },
+ yAxis: {
+ type: 'value',
+ min:-10,
+ splitLine: {
+ show: false
+ }
+ },
+ series: [
+ {
+ data: tbdata2,
+ type: 'line',
+ lineStyle: {
+ width: 10, // 设置线条宽度为5
+ color:'#409EFF'
+ }
+
+ }
+ ]
+ };
+ const option3={
+ backgroundColor:textcolor.value,
+ tooltip: {
+ trigger: 'axis'
+ },
+ toolbox: {
+ show: false
+ },
+ grid:{
+ left:8,
+ top:10,
+ bottom:0,
+ },
+ xAxis: {
+ show: false, // 隐藏X轴
+ type: 'category',
+ // 标记做右往左排列
+ boundaryGap: false,
+ data: [1,2,3],
+ axisTick: {
+ show: false // 显示 X 轴刻度
+ }
+ },
+ yAxis: {
+ type: 'value',
+ min:-10,
+ splitLine: {
+ show: false
+ }
+ },
+ series: [
+ {
+ data: tbdata3,
+ type: 'line',
+ lineStyle: {
+ width: 10, // 设置线条宽度为5
+ color:'#E6A23C'
+ }
+ }
+ ]
+ };
+ myChart1.setOption(option1);
+ myChart2.setOption(option2);
+ myChart3.setOption(option3);
+ }catch(e){
+ console.log('图标渲染异常异常')
+ }
+
+ console.log(device.value)
+ }
+
+
+ }
+ </script>
+ <style lang="less" scoped>
+ .divice{
+ font-size: 100%;
+ border-radius: 4px;
+ border: solid 1px;
+ width: 100%;
+ height: 100%;
+ border: 1px solid coral;
+ }
+ /* 定义闪烁动画 */
+ @keyframes blink {
+ 0% {
+ border:4px solid red ;
+ }
+ 50% {
+ border:4px solid Transparent ;
+ }
+ 100% {
+ border:4px solid red ;
+ // border-bottom:8px solid red ;
+ }
+ }
+
+ /* 应用闪烁动画 */
+ .blink {
+ // float: left; /* 让div浮动到左边 */
+ width: 100%;
+ height: 100%;
+ animation: blink 2s infinite; /* 每秒闪烁一次,无限次数 */
+
+ // border-left:5px solid red ;
+ // border-right:5px solid red ;
+
+ // background: red;
+ cursor: pointer;
+ // margin-bottom: 100%;
+ }
+ @keyframes blink2 {
+ 0% {
+ background: red ;
+ }
+ 50% {
+ background: Transparent ;
+ }
+ 100% {
+ background: red ;
+ // border-bottom:8px solid red ;
+ }
+ }
+ .blink2{
+ animation: blink2 2s infinite; /* 每秒闪烁一次,无限次数 */
+ width: 100%;
+ height: 100%;
+ }
+ .grid-container {
+ display: grid;
+ align-items: center; /* 垂直居中 */
+ height: 100vh; /* 根据需要调整高度 */
+ }
+
+ .centered-text {
+ font-weight: 600;
+ /* 其他样式 */
+ }
+
+ </style>
\ No newline at end of file
diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts
new file mode 100644
index 0000000..11f02fe
--- /dev/null
+++ b/src/vite-env.d.ts
@@ -0,0 +1 @@
+/// <reference types="vite/client" />
diff --git a/tsconfig.app.json b/tsconfig.app.json
new file mode 100644
index 0000000..cac0e4d
--- /dev/null
+++ b/tsconfig.app.json
@@ -0,0 +1,8 @@
+{
+ "extends": "./tsconfig.json",
+ "compilerOptions": {
+ "outDir": "./dist",
+ "rootDir": "./src"
+ },
+ "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.vue"]
+}
\ No newline at end of file
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 0000000..cb5a989
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,16 @@
+{
+ "compilerOptions": {
+ "target": "ESNext",
+ "module": "ESNext",
+ "moduleResolution": "node",
+ "baseUrl": ".",
+ "paths": {
+ "*": ["node_modules/*", "src/types/*"]
+ },
+ "esModuleInterop": true,
+ "skipLibCheck": true,
+ "forceConsistentCasingInFileNames": true
+ },
+ "include": ["src/**/*.ts", "src/**/*.vue"],
+ "exclude": ["node_modules"]
+}
\ No newline at end of file
diff --git a/tsconfig.node.json b/tsconfig.node.json
new file mode 100644
index 0000000..233976b
--- /dev/null
+++ b/tsconfig.node.json
@@ -0,0 +1,7 @@
+{
+ "extends": "./tsconfig.json",
+ "compilerOptions": {
+ "module": "commonjs"
+ },
+ "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.vue"]
+}
\ No newline at end of file
diff --git a/vite.config.ts b/vite.config.ts
new file mode 100644
index 0000000..efdb8b5
--- /dev/null
+++ b/vite.config.ts
@@ -0,0 +1,15 @@
+import { defineConfig } from 'vite';
+import vue from '@vitejs/plugin-vue';
+
+export default defineConfig({
+ plugins: [vue()],
+ server: {
+ port: 3034, // 指定端口号为 3000
+ strictPort: true, // 如果端口被占用,则抛出错误而不是尝试下一个可用端口
+ },
+ resolve: {
+ alias: {
+ '@': '/src'
+ }
+ }
+});
\ No newline at end of file
--
Gitblit v1.8.0