From 00594e3e14d02377aef8319ae1c11ed79bfc5ee7 Mon Sep 17 00:00:00 2001
From: 杨磊 <505174330@qq.com>
Date: 星期一, 18 八月 2025 15:22:59 +0800
Subject: [PATCH] v3 firstSubmit

---
 src/assets/images/xiehe/about/关于我们_slices.zip                                           |    0 
 src/assets/images/login/pageBg.png                                                      |    0 
 src/assets/images/xiehe/detail/tuozhan@2x.png                                           |    0 
 src/assets/js/config.js                                                                 |   84 
 src/assets/js/userAction.js                                                             |  135 
 src/assets/images/xiehe/detail/img@2x.png                                               |    0 
 .gitattributes                                                                          |    1 
 src/assets/images/delete.png                                                            |    0 
 src/assets/images/xiehe/home/Frame.png                                                  |    0 
 src/assets/images/xiehe/about/zongzhi@2x.png                                            |    0 
 .vscode/extensions.json                                                                 |    3 
 src/assets/images/xiehe/detail/img.png                                                  |    0 
 src/assets/images/bookStore/京东icon-01.svg                                               |    1 
 src/assets/images/xiehe/detail/details_bg@2x.png                                        |    0 
 src/assets/images/xiehe/home/banner.png                                                 |    0 
 src/assets/images/personalCenter/examine.png                                            |    0 
 src/assets/images/login/weChartIcon.png                                                 |    0 
 src/assets/images/bookStore/当当网.svg                                                     |    1 
 src/assets/logo.svg                                                                     |    1 
 src/assets/images/packUp.png                                                            |    0 
 src/assets/images/xiehe/home/caozuoshouce@2x.png                                        |    0 
 src/assets/js/middleGround/api/edu.js                                                   |  166 +
 src/views/home/index.vue                                                                |   36 
 src/assets/js/middleGround/api/app.js                                                   |   57 
 src/assets/images/xiehe/detail/details_bg.png                                           |    0 
 src/assets/images/xiehe/detail/Audio.png                                                |    0 
 src/assets/images/xiehe/detail/shixun@2x.png                                            |    0 
 src/layout/components/footerPage.vue                                                    |   16 
 src/assets/images/xiehe/about/about_bg.png                                              |    0 
 src/assets/images/xiehe/home/caozuoshouce.png                                           |    0 
 package-lock.json                                                                       | 5611 ++++++++++++++++++++++++++++++++++++
 src/plugin/axios/index.ts                                                               |   69 
 jsconfig.json                                                                           |    8 
 src/stores/counter.js                                                                   |   12 
 src/assets/images/xiehe/about/phone.png                                                 |    0 
 src/assets/images/default_avatar.png                                                    |    0 
 src/assets/images/index/bookListBg.png                                                  |    0 
 src/assets/images/xiehe/about/wenhua_bg@2x.png                                          |    0 
 src/assets/images/xiehe/about/zongzhi.png                                               |    0 
 src/assets/images/teaching/arrow.png                                                    |    0 
 src/assets/images/xiehe/detail/PPT.png                                                  |    0 
 src/assets/js/middleGround/api/store.js                                                 |  879 +++++
 src/assets/images/pageHeader/logo.png                                                   |    0 
 src/assets/images/xiehe/home/Group_303@2x.png                                           |    0 
 src/assets/js/iframe.js                                                                 |   32 
 src/assets/main.css                                                                     |   15 
 src/assets/js/toolClass.js                                                              |  567 +++
 src/assets/images/pageFooter/logo.png                                                   |    0 
 src/assets/images/xiehe/about/email(1).png                                              |    0 
 src/assets/images/xiehe/home/Chevron_Circle Right _ undefined _ Glyph_ undefined@2x.png |    0 
 src/assets/images/xiehe/detail/tuozhan.png                                              |    0 
 src/assets/images/xiehe/detail/video@2x.png                                             |    0 
 src/assets/images/xiehe/home/Frame(2).png                                               |    0 
 src/assets/images/xiehe/about/footer-bg.png                                             |    0 
 src/assets/images/xiehe/detail/ziliao@2x.png                                            |    0 
 src/assets/images/xiehe/home/Chevron_Circle Right _ undefined _ Glyph_ undefined.png    |    0 
 src/assets/js/middleGround/api/identity.js                                              |  181 +
 src/assets/js/middleGround/api/resource.js                                              |  223 +
 src/assets/images/xiehe/about/footer-bg@2x.png                                          |    0 
 src/assets/base.css                                                                     |   86 
 src/assets/images/packDown.png                                                          |    0 
 src/layout/baseLayout.vue                                                               |   41 
 src/assets/images/xiehe/about/fazhan@2x.png                                             |    0 
 src/assets/images/personalCenter/choose.png                                             |    0 
 src/assets/images/xiehe/home/Group_303.png                                              |    0 
 src/assets/images/bookStore/shoucang.svg                                                |    1 
 src/assets/images/xiehe/about/email.png                                                 |    0 
 src/assets/images/bookStore/testImg.png                                                 |    0 
 src/assets/images/xiehe/about/yinhao.png                                                |    0 
 src/assets/images/xiehe/detail/PPT@2x.png                                               |    0 
 src/assets/images/xiehe/about/about_bg@2x.png                                           |    0 
 src/assets/images/xiehe/about/email@2x.png                                              |    0 
 src/assets/images/teaching/electronicBooks.png                                          |    0 
 src/assets/images/xiehe/detail/video.png                                                |    0 
 src/assets/images/xiehe/home/jiaoshirenzheng@2x.png                                     |    0 
 src/assets/js/middleGround/api/job.js                                                   |   34 
 src/assets/images/xiehe/home/Frame(1).png                                               |    0 
 index.html                                                                              |   13 
 src/assets/images/pageFooter/wechatCode.png                                             |    0 
 public/favicon.ico                                                                      |    0 
 vite.config.js                                                                          |   18 
 src/assets/images/xiehe/about/zizhi@2x.png                                              |    0 
 src/assets/images/xiehe/about/“@2x.png                                                  |    0 
 src/assets/images/officialAccount.jpg                                                   |    0 
 src/assets/images/xiehe/home/banner@2x.png                                              |    0 
 src/assets/images/xiehe/home/jiaoshirenzheng.png                                        |    0 
 src/layout/components/headerPage.vue                                                    |  184 +
 src/assets/images/xiehe/home/footer-bg@2x.png                                           |    0 
 src/assets/images/xiehe/home/Frame@2x.png                                               |    0 
 src/router/index.js                                                                     |   23 
 README.md                                                                               |   29 
 src/assets/images/personalCenter/noPass.png                                             |    0 
 src/assets/images/xiehe/about/website.png                                               |    0 
 src/assets/images/xiehe/about/dizhi@2x.png                                              |    0 
 src/assets/js/middleGround/tool.js                                                      |  423 ++
 src/main.js                                                                             |   30 
 src/assets/images/teaching/paperCopies.png                                              |    0 
 src/assets/images/xiehe/about/website@2x.png                                            |    0 
 src/assets/images/xiehe/home/Frame@2x(2).png                                            |    0 
 src/assets/images/xiehe/about/email@2x(1).png                                           |    0 
 .gitignore                                                                              |   30 
 src/assets/images/xiehe/home/Group_302.png                                              |    0 
 src/assets/images/default-book-img.png                                                  |    0 
 src/assets/images/xiehe/home/footer-bg.png                                              |    0 
 src/assets/images/xiehe/detail/Audio@2x.png                                             |    0 
 src/assets/images/personalCenter/pass.png                                               |    0 
 src/assets/images/teaching/teacher.png                                                  |    0 
 src/assets/images/xiehe/about/wenhua_bg.png                                             |    0 
 src/assets/images/xiehe/home/Group_302@2x.png                                           |    0 
 src/assets/images/xiehe/home/tuijian-bg.png                                             |    0 
 src/assets/images/xiehe/detail/数字教材详情_slices.zip                                        |    0 
 src/assets/images/login/boxBg.png                                                       |    0 
 src/assets/images/xiehe/detail/shijuan@2x.png                                           |    0 
 src/assets/images/pageFooter/weiboCode.png                                              |    0 
 src/assets/images/tuijian-bg.png                                                        |    0 
 src/assets/images/xiehe/about/beijing.png                                               |    0 
 src/assets/images/xiehe/home/Frame@2x(1).png                                            |    0 
 src/assets/images/teaching/sample.png                                                   |    0 
 src/assets/js/middleGround/api/file.js                                                  |   94 
 src/assets/images/xiehe/detail/ziliao.png                                               |    0 
 src/assets/js/middleGround/api/ugc.js                                                   |   98 
 src/assets/images/xiehe/about/beijing@2x.png                                            |    0 
 src/assets/images/xiehe/about/dizhi.png                                                 |    0 
 package.json                                                                            |   31 
 src/assets/images/xiehe/about/fazhan.png                                                |    0 
 src/assets/images/xiehe/about/phone@2x.png                                              |    0 
 src/assets/js/middleGround/WebMiddleGroundApi.js                                        |   24 
 .prettierrc.json                                                                        |    6 
 src/assets/images/bookStore/tianmaologo2.svg                                            |    1 
 src/assets/images/xiehe/detail/shijuan.png                                              |    0 
 src/App.vue                                                                             |   13 
 src/assets/images/xiehe/about/zizhi.png                                                 |    0 
 src/assets/images/xiehe/detail/shixun.png                                               |    0 
 133 files changed, 9,277 insertions(+), 0 deletions(-)

diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..6313b56
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1 @@
+* text=auto eol=lf
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..8ee54e8
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,30 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+.DS_Store
+dist
+dist-ssr
+coverage
+*.local
+
+/cypress/videos/
+/cypress/screenshots/
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
+
+*.tsbuildinfo
diff --git a/.prettierrc.json b/.prettierrc.json
new file mode 100644
index 0000000..29a2402
--- /dev/null
+++ b/.prettierrc.json
@@ -0,0 +1,6 @@
+{
+  "$schema": "https://json.schemastore.org/prettierrc",
+  "semi": false,
+  "singleQuote": true,
+  "printWidth": 100
+}
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
new file mode 100644
index 0000000..da9331c
--- /dev/null
+++ b/.vscode/extensions.json
@@ -0,0 +1,3 @@
+{
+  "recommendations": ["Vue.volar", "esbenp.prettier-vscode"]
+}
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..1cd9ccd
--- /dev/null
+++ b/README.md
@@ -0,0 +1,29 @@
+# xiehe
+
+This template should help get you started developing with Vue 3 in Vite.
+
+## Recommended IDE Setup
+
+[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur).
+
+## Customize configuration
+
+See [Vite Configuration Reference](https://vite.dev/config/).
+
+## Project Setup
+
+```sh
+npm install
+```
+
+### Compile and Hot-Reload for Development
+
+```sh
+npm run dev
+```
+
+### Compile and Minify for Production
+
+```sh
+npm run build
+```
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..b19040a
--- /dev/null
+++ b/index.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html lang="">
+  <head>
+    <meta charset="UTF-8">
+    <link rel="icon" href="/favicon.ico">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>Vite App</title>
+  </head>
+  <body>
+    <div id="app"></div>
+    <script type="module" src="/src/main.js"></script>
+  </body>
+</html>
diff --git a/jsconfig.json b/jsconfig.json
new file mode 100644
index 0000000..5a1f2d2
--- /dev/null
+++ b/jsconfig.json
@@ -0,0 +1,8 @@
+{
+  "compilerOptions": {
+    "paths": {
+      "@/*": ["./src/*"]
+    }
+  },
+  "exclude": ["node_modules", "dist"]
+}
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..e86f843
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,5611 @@
+{
+  "name": "xiehe",
+  "version": "0.0.0",
+  "lockfileVersion": 2,
+  "requires": true,
+  "packages": {
+    "": {
+      "name": "xiehe",
+      "version": "0.0.0",
+      "dependencies": {
+        "axios": "^1.11.0",
+        "element-plus": "^2.10.7",
+        "less": "^4.4.0",
+        "moment": "^2.30.1",
+        "pinia": "^3.0.3",
+        "spark-md5": "^3.0.2",
+        "vue": "^3.5.18",
+        "vue-router": "^4.5.1"
+      },
+      "devDependencies": {
+        "@vitejs/plugin-vue": "^6.0.1",
+        "prettier": "3.6.2",
+        "vite": "^7.0.6",
+        "vite-plugin-vue-devtools": "^8.0.0"
+      },
+      "engines": {
+        "node": "^20.19.0 || >=22.12.0"
+      }
+    },
+    "node_modules/@ampproject/remapping": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.3.0.tgz",
+      "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
+      "dev": true,
+      "dependencies": {
+        "@jridgewell/gen-mapping": "^0.3.5",
+        "@jridgewell/trace-mapping": "^0.3.24"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@babel/code-frame": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.27.1.tgz",
+      "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-validator-identifier": "^7.27.1",
+        "js-tokens": "^4.0.0",
+        "picocolors": "^1.1.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/compat-data": {
+      "version": "7.28.0",
+      "resolved": "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.28.0.tgz",
+      "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==",
+      "dev": true,
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/core": {
+      "version": "7.28.3",
+      "resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.28.3.tgz",
+      "integrity": "sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==",
+      "dev": true,
+      "dependencies": {
+        "@ampproject/remapping": "^2.2.0",
+        "@babel/code-frame": "^7.27.1",
+        "@babel/generator": "^7.28.3",
+        "@babel/helper-compilation-targets": "^7.27.2",
+        "@babel/helper-module-transforms": "^7.28.3",
+        "@babel/helpers": "^7.28.3",
+        "@babel/parser": "^7.28.3",
+        "@babel/template": "^7.27.2",
+        "@babel/traverse": "^7.28.3",
+        "@babel/types": "^7.28.2",
+        "convert-source-map": "^2.0.0",
+        "debug": "^4.1.0",
+        "gensync": "^1.0.0-beta.2",
+        "json5": "^2.2.3",
+        "semver": "^6.3.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/babel"
+      }
+    },
+    "node_modules/@babel/generator": {
+      "version": "7.28.3",
+      "resolved": "https://registry.npmmirror.com/@babel/generator/-/generator-7.28.3.tgz",
+      "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/parser": "^7.28.3",
+        "@babel/types": "^7.28.2",
+        "@jridgewell/gen-mapping": "^0.3.12",
+        "@jridgewell/trace-mapping": "^0.3.28",
+        "jsesc": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-annotate-as-pure": {
+      "version": "7.27.3",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz",
+      "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/types": "^7.27.3"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-compilation-targets": {
+      "version": "7.27.2",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz",
+      "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/compat-data": "^7.27.2",
+        "@babel/helper-validator-option": "^7.27.1",
+        "browserslist": "^4.24.0",
+        "lru-cache": "^5.1.1",
+        "semver": "^6.3.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-create-class-features-plugin": {
+      "version": "7.28.3",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.3.tgz",
+      "integrity": "sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-annotate-as-pure": "^7.27.3",
+        "@babel/helper-member-expression-to-functions": "^7.27.1",
+        "@babel/helper-optimise-call-expression": "^7.27.1",
+        "@babel/helper-replace-supers": "^7.27.1",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",
+        "@babel/traverse": "^7.28.3",
+        "semver": "^6.3.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/helper-globals": {
+      "version": "7.28.0",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-globals/-/helper-globals-7.28.0.tgz",
+      "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==",
+      "dev": true,
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-member-expression-to-functions": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz",
+      "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==",
+      "dev": true,
+      "dependencies": {
+        "@babel/traverse": "^7.27.1",
+        "@babel/types": "^7.27.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-module-imports": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz",
+      "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==",
+      "dev": true,
+      "dependencies": {
+        "@babel/traverse": "^7.27.1",
+        "@babel/types": "^7.27.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-module-transforms": {
+      "version": "7.28.3",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz",
+      "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-module-imports": "^7.27.1",
+        "@babel/helper-validator-identifier": "^7.27.1",
+        "@babel/traverse": "^7.28.3"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/helper-optimise-call-expression": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz",
+      "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/types": "^7.27.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-plugin-utils": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz",
+      "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==",
+      "dev": true,
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-replace-supers": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz",
+      "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-member-expression-to-functions": "^7.27.1",
+        "@babel/helper-optimise-call-expression": "^7.27.1",
+        "@babel/traverse": "^7.27.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz",
+      "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/traverse": "^7.27.1",
+        "@babel/types": "^7.27.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-string-parser": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
+      "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-validator-identifier": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
+      "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-validator-option": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
+      "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
+      "dev": true,
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helpers": {
+      "version": "7.28.3",
+      "resolved": "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.28.3.tgz",
+      "integrity": "sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/template": "^7.27.2",
+        "@babel/types": "^7.28.2"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/parser": {
+      "version": "7.28.3",
+      "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.28.3.tgz",
+      "integrity": "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==",
+      "dependencies": {
+        "@babel/types": "^7.28.2"
+      },
+      "bin": {
+        "parser": "bin/babel-parser.js"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@babel/plugin-proposal-decorators": {
+      "version": "7.28.0",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.28.0.tgz",
+      "integrity": "sha512-zOiZqvANjWDUaUS9xMxbMcK/Zccztbe/6ikvUXaG9nsPH3w6qh5UaPGAnirI/WhIbZ8m3OHU0ReyPrknG+ZKeg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-create-class-features-plugin": "^7.27.1",
+        "@babel/helper-plugin-utils": "^7.27.1",
+        "@babel/plugin-syntax-decorators": "^7.27.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-decorators": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.27.1.tgz",
+      "integrity": "sha512-YMq8Z87Lhl8EGkmb0MwYkt36QnxC+fzCgrl66ereamPlYToRpIk5nUjKUY3QKLWq8mwUB1BgbeXcTJhZOCDg5A==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.27.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-import-attributes": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz",
+      "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.27.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-import-meta": {
+      "version": "7.10.4",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
+      "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.10.4"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-jsx": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz",
+      "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.27.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-typescript": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz",
+      "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.27.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-typescript": {
+      "version": "7.28.0",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.0.tgz",
+      "integrity": "sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-annotate-as-pure": "^7.27.3",
+        "@babel/helper-create-class-features-plugin": "^7.27.1",
+        "@babel/helper-plugin-utils": "^7.27.1",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",
+        "@babel/plugin-syntax-typescript": "^7.27.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/template": {
+      "version": "7.27.2",
+      "resolved": "https://registry.npmmirror.com/@babel/template/-/template-7.27.2.tgz",
+      "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/code-frame": "^7.27.1",
+        "@babel/parser": "^7.27.2",
+        "@babel/types": "^7.27.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/traverse": {
+      "version": "7.28.3",
+      "resolved": "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.28.3.tgz",
+      "integrity": "sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/code-frame": "^7.27.1",
+        "@babel/generator": "^7.28.3",
+        "@babel/helper-globals": "^7.28.0",
+        "@babel/parser": "^7.28.3",
+        "@babel/template": "^7.27.2",
+        "@babel/types": "^7.28.2",
+        "debug": "^4.3.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/types": {
+      "version": "7.28.2",
+      "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.28.2.tgz",
+      "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==",
+      "dependencies": {
+        "@babel/helper-string-parser": "^7.27.1",
+        "@babel/helper-validator-identifier": "^7.27.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@ctrl/tinycolor": {
+      "version": "3.6.1",
+      "resolved": "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz",
+      "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/@element-plus/icons-vue": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.2.tgz",
+      "integrity": "sha512-OzIuTaIfC8QXEPmJvB4Y4kw34rSXdCJzxcD1kFStBvr8bK6X1zQAYDo0CNMjojnfTqRQCJ0I7prlErcoRiET2A==",
+      "license": "MIT",
+      "peerDependencies": {
+        "vue": "^3.2.0"
+      }
+    },
+    "node_modules/@esbuild/aix-ppc64": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.9.tgz",
+      "integrity": "sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==",
+      "cpu": [
+        "ppc64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "aix"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/android-arm": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.25.9.tgz",
+      "integrity": "sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/android-arm64": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.25.9.tgz",
+      "integrity": "sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/android-x64": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.25.9.tgz",
+      "integrity": "sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/darwin-arm64": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.9.tgz",
+      "integrity": "sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/darwin-x64": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.25.9.tgz",
+      "integrity": "sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/freebsd-arm64": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.9.tgz",
+      "integrity": "sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/freebsd-x64": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.9.tgz",
+      "integrity": "sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-arm": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.25.9.tgz",
+      "integrity": "sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-arm64": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.25.9.tgz",
+      "integrity": "sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-ia32": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.25.9.tgz",
+      "integrity": "sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==",
+      "cpu": [
+        "ia32"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-loong64": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.25.9.tgz",
+      "integrity": "sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==",
+      "cpu": [
+        "loong64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-mips64el": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.9.tgz",
+      "integrity": "sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==",
+      "cpu": [
+        "mips64el"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-ppc64": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.9.tgz",
+      "integrity": "sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==",
+      "cpu": [
+        "ppc64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-riscv64": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.9.tgz",
+      "integrity": "sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==",
+      "cpu": [
+        "riscv64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-s390x": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.25.9.tgz",
+      "integrity": "sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==",
+      "cpu": [
+        "s390x"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-x64": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.25.9.tgz",
+      "integrity": "sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/netbsd-arm64": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.9.tgz",
+      "integrity": "sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "netbsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/netbsd-x64": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.9.tgz",
+      "integrity": "sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "netbsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/openbsd-arm64": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.9.tgz",
+      "integrity": "sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "openbsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/openbsd-x64": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.9.tgz",
+      "integrity": "sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "openbsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/openharmony-arm64": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.9.tgz",
+      "integrity": "sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "openharmony"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/sunos-x64": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.25.9.tgz",
+      "integrity": "sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "sunos"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/win32-arm64": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.25.9.tgz",
+      "integrity": "sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/win32-ia32": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.25.9.tgz",
+      "integrity": "sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==",
+      "cpu": [
+        "ia32"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/win32-x64": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.25.9.tgz",
+      "integrity": "sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@floating-ui/core": {
+      "version": "1.7.3",
+      "resolved": "https://registry.npmmirror.com/@floating-ui/core/-/core-1.7.3.tgz",
+      "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==",
+      "license": "MIT",
+      "dependencies": {
+        "@floating-ui/utils": "^0.2.10"
+      }
+    },
+    "node_modules/@floating-ui/dom": {
+      "version": "1.7.3",
+      "resolved": "https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.7.3.tgz",
+      "integrity": "sha512-uZA413QEpNuhtb3/iIKoYMSK07keHPYeXF02Zhd6e213j+d1NamLix/mCLxBUDW/Gx52sPH2m+chlUsyaBs/Ag==",
+      "license": "MIT",
+      "dependencies": {
+        "@floating-ui/core": "^1.7.3",
+        "@floating-ui/utils": "^0.2.10"
+      }
+    },
+    "node_modules/@floating-ui/utils": {
+      "version": "0.2.10",
+      "resolved": "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.2.10.tgz",
+      "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==",
+      "license": "MIT"
+    },
+    "node_modules/@jridgewell/gen-mapping": {
+      "version": "0.3.13",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
+      "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
+      "dev": true,
+      "dependencies": {
+        "@jridgewell/sourcemap-codec": "^1.5.0",
+        "@jridgewell/trace-mapping": "^0.3.24"
+      }
+    },
+    "node_modules/@jridgewell/resolve-uri": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+      "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+      "dev": true,
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@jridgewell/sourcemap-codec": {
+      "version": "1.5.5",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+      "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="
+    },
+    "node_modules/@jridgewell/trace-mapping": {
+      "version": "0.3.30",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz",
+      "integrity": "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==",
+      "dev": true,
+      "dependencies": {
+        "@jridgewell/resolve-uri": "^3.1.0",
+        "@jridgewell/sourcemap-codec": "^1.4.14"
+      }
+    },
+    "node_modules/@polka/url": {
+      "version": "1.0.0-next.29",
+      "resolved": "https://registry.npmmirror.com/@polka/url/-/url-1.0.0-next.29.tgz",
+      "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==",
+      "dev": true
+    },
+    "node_modules/@popperjs/core": {
+      "name": "@sxzz/popperjs-es",
+      "version": "2.11.7",
+      "resolved": "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz",
+      "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==",
+      "license": "MIT",
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/popperjs"
+      }
+    },
+    "node_modules/@rolldown/pluginutils": {
+      "version": "1.0.0-beta.29",
+      "resolved": "https://registry.npmmirror.com/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.29.tgz",
+      "integrity": "sha512-NIJgOsMjbxAXvoGq/X0gD7VPMQ8j9g0BiDaNjVNVjvl+iKXxL3Jre0v31RmBYeLEmkbj2s02v8vFTbUXi5XS2Q==",
+      "dev": true
+    },
+    "node_modules/@rollup/rollup-android-arm-eabi": {
+      "version": "4.46.2",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.46.2.tgz",
+      "integrity": "sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "android"
+      ]
+    },
+    "node_modules/@rollup/rollup-android-arm64": {
+      "version": "4.46.2",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.46.2.tgz",
+      "integrity": "sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "android"
+      ]
+    },
+    "node_modules/@rollup/rollup-darwin-arm64": {
+      "version": "4.46.2",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.46.2.tgz",
+      "integrity": "sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "darwin"
+      ]
+    },
+    "node_modules/@rollup/rollup-darwin-x64": {
+      "version": "4.46.2",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.46.2.tgz",
+      "integrity": "sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "darwin"
+      ]
+    },
+    "node_modules/@rollup/rollup-freebsd-arm64": {
+      "version": "4.46.2",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.46.2.tgz",
+      "integrity": "sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "freebsd"
+      ]
+    },
+    "node_modules/@rollup/rollup-freebsd-x64": {
+      "version": "4.46.2",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.46.2.tgz",
+      "integrity": "sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "freebsd"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+      "version": "4.46.2",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.46.2.tgz",
+      "integrity": "sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+      "version": "4.46.2",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.46.2.tgz",
+      "integrity": "sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-arm64-gnu": {
+      "version": "4.46.2",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.46.2.tgz",
+      "integrity": "sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-arm64-musl": {
+      "version": "4.46.2",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.46.2.tgz",
+      "integrity": "sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-loongarch64-gnu": {
+      "version": "4.46.2",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.46.2.tgz",
+      "integrity": "sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA==",
+      "cpu": [
+        "loong64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-ppc64-gnu": {
+      "version": "4.46.2",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.46.2.tgz",
+      "integrity": "sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw==",
+      "cpu": [
+        "ppc64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+      "version": "4.46.2",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.46.2.tgz",
+      "integrity": "sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ==",
+      "cpu": [
+        "riscv64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-riscv64-musl": {
+      "version": "4.46.2",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.46.2.tgz",
+      "integrity": "sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw==",
+      "cpu": [
+        "riscv64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-s390x-gnu": {
+      "version": "4.46.2",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.46.2.tgz",
+      "integrity": "sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA==",
+      "cpu": [
+        "s390x"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-x64-gnu": {
+      "version": "4.46.2",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.46.2.tgz",
+      "integrity": "sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-x64-musl": {
+      "version": "4.46.2",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.46.2.tgz",
+      "integrity": "sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-win32-arm64-msvc": {
+      "version": "4.46.2",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.46.2.tgz",
+      "integrity": "sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "win32"
+      ]
+    },
+    "node_modules/@rollup/rollup-win32-ia32-msvc": {
+      "version": "4.46.2",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.46.2.tgz",
+      "integrity": "sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ==",
+      "cpu": [
+        "ia32"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "win32"
+      ]
+    },
+    "node_modules/@rollup/rollup-win32-x64-msvc": {
+      "version": "4.46.2",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.46.2.tgz",
+      "integrity": "sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "win32"
+      ]
+    },
+    "node_modules/@sec-ant/readable-stream": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmmirror.com/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz",
+      "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==",
+      "dev": true
+    },
+    "node_modules/@sindresorhus/merge-streams": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz",
+      "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/@types/estree": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.8.tgz",
+      "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
+      "dev": true
+    },
+    "node_modules/@types/lodash": {
+      "version": "4.17.20",
+      "resolved": "https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.20.tgz",
+      "integrity": "sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==",
+      "license": "MIT"
+    },
+    "node_modules/@types/lodash-es": {
+      "version": "4.17.12",
+      "resolved": "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz",
+      "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/lodash": "*"
+      }
+    },
+    "node_modules/@types/web-bluetooth": {
+      "version": "0.0.16",
+      "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz",
+      "integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==",
+      "license": "MIT"
+    },
+    "node_modules/@vitejs/plugin-vue": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-6.0.1.tgz",
+      "integrity": "sha512-+MaE752hU0wfPFJEUAIxqw18+20euHHdxVtMvbFcOEpjEyfqXH/5DCoTHiVJ0J29EhTJdoTkjEv5YBKU9dnoTw==",
+      "dev": true,
+      "dependencies": {
+        "@rolldown/pluginutils": "1.0.0-beta.29"
+      },
+      "engines": {
+        "node": "^20.19.0 || >=22.12.0"
+      },
+      "peerDependencies": {
+        "vite": "^5.0.0 || ^6.0.0 || ^7.0.0",
+        "vue": "^3.2.25"
+      }
+    },
+    "node_modules/@vue/babel-helper-vue-transform-on": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmmirror.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.5.0.tgz",
+      "integrity": "sha512-0dAYkerNhhHutHZ34JtTl2czVQHUNWv6xEbkdF5W+Yrv5pCWsqjeORdOgbtW2I9gWlt+wBmVn+ttqN9ZxR5tzA==",
+      "dev": true
+    },
+    "node_modules/@vue/babel-plugin-jsx": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmmirror.com/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.5.0.tgz",
+      "integrity": "sha512-mneBhw1oOqCd2247O0Yw/mRwC9jIGACAJUlawkmMBiNmL4dGA2eMzuNZVNqOUfYTa6vqmND4CtOPzmEEEqLKFw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-module-imports": "^7.27.1",
+        "@babel/helper-plugin-utils": "^7.27.1",
+        "@babel/plugin-syntax-jsx": "^7.27.1",
+        "@babel/template": "^7.27.2",
+        "@babel/traverse": "^7.28.0",
+        "@babel/types": "^7.28.2",
+        "@vue/babel-helper-vue-transform-on": "1.5.0",
+        "@vue/babel-plugin-resolve-type": "1.5.0",
+        "@vue/shared": "^3.5.18"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      },
+      "peerDependenciesMeta": {
+        "@babel/core": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@vue/babel-plugin-resolve-type": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmmirror.com/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.5.0.tgz",
+      "integrity": "sha512-Wm/60o+53JwJODm4Knz47dxJnLDJ9FnKnGZJbUUf8nQRAtt6P+undLUAVU3Ha33LxOJe6IPoifRQ6F/0RrU31w==",
+      "dev": true,
+      "dependencies": {
+        "@babel/code-frame": "^7.27.1",
+        "@babel/helper-module-imports": "^7.27.1",
+        "@babel/helper-plugin-utils": "^7.27.1",
+        "@babel/parser": "^7.28.0",
+        "@vue/compiler-sfc": "^3.5.18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sxzz"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@vue/compiler-core": {
+      "version": "3.5.18",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.18.tgz",
+      "integrity": "sha512-3slwjQrrV1TO8MoXgy3aynDQ7lslj5UqDxuHnrzHtpON5CBinhWjJETciPngpin/T3OuW3tXUf86tEurusnztw==",
+      "dependencies": {
+        "@babel/parser": "^7.28.0",
+        "@vue/shared": "3.5.18",
+        "entities": "^4.5.0",
+        "estree-walker": "^2.0.2",
+        "source-map-js": "^1.2.1"
+      }
+    },
+    "node_modules/@vue/compiler-dom": {
+      "version": "3.5.18",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.18.tgz",
+      "integrity": "sha512-RMbU6NTU70++B1JyVJbNbeFkK+A+Q7y9XKE2EM4NLGm2WFR8x9MbAtWxPPLdm0wUkuZv9trpwfSlL6tjdIa1+A==",
+      "dependencies": {
+        "@vue/compiler-core": "3.5.18",
+        "@vue/shared": "3.5.18"
+      }
+    },
+    "node_modules/@vue/compiler-sfc": {
+      "version": "3.5.18",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.18.tgz",
+      "integrity": "sha512-5aBjvGqsWs+MoxswZPoTB9nSDb3dhd1x30xrrltKujlCxo48j8HGDNj3QPhF4VIS0VQDUrA1xUfp2hEa+FNyXA==",
+      "dependencies": {
+        "@babel/parser": "^7.28.0",
+        "@vue/compiler-core": "3.5.18",
+        "@vue/compiler-dom": "3.5.18",
+        "@vue/compiler-ssr": "3.5.18",
+        "@vue/shared": "3.5.18",
+        "estree-walker": "^2.0.2",
+        "magic-string": "^0.30.17",
+        "postcss": "^8.5.6",
+        "source-map-js": "^1.2.1"
+      }
+    },
+    "node_modules/@vue/compiler-ssr": {
+      "version": "3.5.18",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.18.tgz",
+      "integrity": "sha512-xM16Ak7rSWHkM3m22NlmcdIM+K4BMyFARAfV9hYFl+SFuRzrZ3uGMNW05kA5pmeMa0X9X963Kgou7ufdbpOP9g==",
+      "dependencies": {
+        "@vue/compiler-dom": "3.5.18",
+        "@vue/shared": "3.5.18"
+      }
+    },
+    "node_modules/@vue/devtools-api": {
+      "version": "7.7.7",
+      "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-7.7.7.tgz",
+      "integrity": "sha512-lwOnNBH2e7x1fIIbVT7yF5D+YWhqELm55/4ZKf45R9T8r9dE2AIOy8HKjfqzGsoTHFbWbr337O4E0A0QADnjBg==",
+      "dependencies": {
+        "@vue/devtools-kit": "^7.7.7"
+      }
+    },
+    "node_modules/@vue/devtools-core": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmmirror.com/@vue/devtools-core/-/devtools-core-8.0.0.tgz",
+      "integrity": "sha512-5bPtF0jAFnaGs4C/4+3vGRR5U+cf6Y8UWK0nJflutEDGepHxl5L9JRaPdHQYCUgrzUaf4cY4waNBEEGXrfcs3A==",
+      "dev": true,
+      "dependencies": {
+        "@vue/devtools-kit": "^8.0.0",
+        "@vue/devtools-shared": "^8.0.0",
+        "mitt": "^3.0.1",
+        "nanoid": "^5.1.5",
+        "pathe": "^2.0.3",
+        "vite-hot-client": "^2.1.0"
+      },
+      "peerDependencies": {
+        "vue": "^3.0.0"
+      }
+    },
+    "node_modules/@vue/devtools-core/node_modules/@vue/devtools-kit": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmmirror.com/@vue/devtools-kit/-/devtools-kit-8.0.0.tgz",
+      "integrity": "sha512-b11OeQODkE0bctdT0RhL684pEV2DPXJ80bjpywVCbFn1PxuL3bmMPDoJKjbMnnoWbrnUYXYzFfmMWBZAMhORkQ==",
+      "dev": true,
+      "dependencies": {
+        "@vue/devtools-shared": "^8.0.0",
+        "birpc": "^2.5.0",
+        "hookable": "^5.5.3",
+        "mitt": "^3.0.1",
+        "perfect-debounce": "^1.0.0",
+        "speakingurl": "^14.0.1",
+        "superjson": "^2.2.2"
+      }
+    },
+    "node_modules/@vue/devtools-core/node_modules/@vue/devtools-shared": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmmirror.com/@vue/devtools-shared/-/devtools-shared-8.0.0.tgz",
+      "integrity": "sha512-jrKnbjshQCiOAJanoeJjTU7WaCg0Dz2BUal6SaR6VM/P3hiFdX5Q6Pxl73ZMnrhCxNK9nAg5hvvRGqs+6dtU1g==",
+      "dev": true,
+      "dependencies": {
+        "rfdc": "^1.4.1"
+      }
+    },
+    "node_modules/@vue/devtools-core/node_modules/nanoid": {
+      "version": "5.1.5",
+      "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-5.1.5.tgz",
+      "integrity": "sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "bin": {
+        "nanoid": "bin/nanoid.js"
+      },
+      "engines": {
+        "node": "^18 || >=20"
+      }
+    },
+    "node_modules/@vue/devtools-kit": {
+      "version": "7.7.7",
+      "resolved": "https://registry.npmmirror.com/@vue/devtools-kit/-/devtools-kit-7.7.7.tgz",
+      "integrity": "sha512-wgoZtxcTta65cnZ1Q6MbAfePVFxfM+gq0saaeytoph7nEa7yMXoi6sCPy4ufO111B9msnw0VOWjPEFCXuAKRHA==",
+      "dependencies": {
+        "@vue/devtools-shared": "^7.7.7",
+        "birpc": "^2.3.0",
+        "hookable": "^5.5.3",
+        "mitt": "^3.0.1",
+        "perfect-debounce": "^1.0.0",
+        "speakingurl": "^14.0.1",
+        "superjson": "^2.2.2"
+      }
+    },
+    "node_modules/@vue/devtools-shared": {
+      "version": "7.7.7",
+      "resolved": "https://registry.npmmirror.com/@vue/devtools-shared/-/devtools-shared-7.7.7.tgz",
+      "integrity": "sha512-+udSj47aRl5aKb0memBvcUG9koarqnxNM5yjuREvqwK6T3ap4mn3Zqqc17QrBFTqSMjr3HK1cvStEZpMDpfdyw==",
+      "dependencies": {
+        "rfdc": "^1.4.1"
+      }
+    },
+    "node_modules/@vue/reactivity": {
+      "version": "3.5.18",
+      "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.18.tgz",
+      "integrity": "sha512-x0vPO5Imw+3sChLM5Y+B6G1zPjwdOri9e8V21NnTnlEvkxatHEH5B5KEAJcjuzQ7BsjGrKtfzuQ5eQwXh8HXBg==",
+      "dependencies": {
+        "@vue/shared": "3.5.18"
+      }
+    },
+    "node_modules/@vue/runtime-core": {
+      "version": "3.5.18",
+      "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.18.tgz",
+      "integrity": "sha512-DUpHa1HpeOQEt6+3nheUfqVXRog2kivkXHUhoqJiKR33SO4x+a5uNOMkV487WPerQkL0vUuRvq/7JhRgLW3S+w==",
+      "dependencies": {
+        "@vue/reactivity": "3.5.18",
+        "@vue/shared": "3.5.18"
+      }
+    },
+    "node_modules/@vue/runtime-dom": {
+      "version": "3.5.18",
+      "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.18.tgz",
+      "integrity": "sha512-YwDj71iV05j4RnzZnZtGaXwPoUWeRsqinblgVJwR8XTXYZ9D5PbahHQgsbmzUvCWNF6x7siQ89HgnX5eWkr3mw==",
+      "dependencies": {
+        "@vue/reactivity": "3.5.18",
+        "@vue/runtime-core": "3.5.18",
+        "@vue/shared": "3.5.18",
+        "csstype": "^3.1.3"
+      }
+    },
+    "node_modules/@vue/server-renderer": {
+      "version": "3.5.18",
+      "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.18.tgz",
+      "integrity": "sha512-PvIHLUoWgSbDG7zLHqSqaCoZvHi6NNmfVFOqO+OnwvqMz/tqQr3FuGWS8ufluNddk7ZLBJYMrjcw1c6XzR12mA==",
+      "dependencies": {
+        "@vue/compiler-ssr": "3.5.18",
+        "@vue/shared": "3.5.18"
+      },
+      "peerDependencies": {
+        "vue": "3.5.18"
+      }
+    },
+    "node_modules/@vue/shared": {
+      "version": "3.5.18",
+      "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.18.tgz",
+      "integrity": "sha512-cZy8Dq+uuIXbxCZpuLd2GJdeSO/lIzIspC2WtkqIpje5QyFbvLaI5wZtdUjLHjGZrlVX6GilejatWwVYYRc8tA=="
+    },
+    "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/ansis": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmmirror.com/ansis/-/ansis-4.1.0.tgz",
+      "integrity": "sha512-BGcItUBWSMRgOCe+SVZJ+S7yTRG0eGt9cXAHev72yuGcY23hnLA7Bky5L/xLyPINoSN95geovfBkqoTlNZYa7w==",
+      "dev": true,
+      "engines": {
+        "node": ">=14"
+      }
+    },
+    "node_modules/async-validator": {
+      "version": "4.2.5",
+      "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz",
+      "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==",
+      "license": "MIT"
+    },
+    "node_modules/asynckit": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz",
+      "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
+      "license": "MIT"
+    },
+    "node_modules/axios": {
+      "version": "1.11.0",
+      "resolved": "https://registry.npmmirror.com/axios/-/axios-1.11.0.tgz",
+      "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==",
+      "license": "MIT",
+      "dependencies": {
+        "follow-redirects": "^1.15.6",
+        "form-data": "^4.0.4",
+        "proxy-from-env": "^1.1.0"
+      }
+    },
+    "node_modules/birpc": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmmirror.com/birpc/-/birpc-2.5.0.tgz",
+      "integrity": "sha512-VSWO/W6nNQdyP520F1mhf+Lc2f8pjGQOtoHHm7Ze8Go1kX7akpVIrtTa0fn+HB0QJEDVacl6aO08YE0PgXfdnQ==",
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
+      }
+    },
+    "node_modules/browserslist": {
+      "version": "4.25.2",
+      "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.25.2.tgz",
+      "integrity": "sha512-0si2SJK3ooGzIawRu61ZdPCO1IncZwS8IzuX73sPZsXW6EQ/w/DAfPyKI8l1ETTCr2MnvqWitmlCUxgdul45jA==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/browserslist"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/browserslist"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "dependencies": {
+        "caniuse-lite": "^1.0.30001733",
+        "electron-to-chromium": "^1.5.199",
+        "node-releases": "^2.0.19",
+        "update-browserslist-db": "^1.1.3"
+      },
+      "bin": {
+        "browserslist": "cli.js"
+      },
+      "engines": {
+        "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+      }
+    },
+    "node_modules/bundle-name": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmmirror.com/bundle-name/-/bundle-name-4.1.0.tgz",
+      "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==",
+      "dev": true,
+      "dependencies": {
+        "run-applescript": "^7.0.0"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/call-bind-apply-helpers": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
+      "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
+      "license": "MIT",
+      "dependencies": {
+        "es-errors": "^1.3.0",
+        "function-bind": "^1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/caniuse-lite": {
+      "version": "1.0.30001735",
+      "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001735.tgz",
+      "integrity": "sha512-EV/laoX7Wq2J9TQlyIXRxTJqIw4sxfXS4OYgudGxBYRuTv0q7AM6yMEpU/Vo1I94thg9U6EZ2NfZx9GJq83u7w==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/browserslist"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ]
+    },
+    "node_modules/combined-stream": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz",
+      "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+      "license": "MIT",
+      "dependencies": {
+        "delayed-stream": "~1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/convert-source-map": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-2.0.0.tgz",
+      "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+      "dev": true
+    },
+    "node_modules/copy-anything": {
+      "version": "3.0.5",
+      "resolved": "https://registry.npmmirror.com/copy-anything/-/copy-anything-3.0.5.tgz",
+      "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==",
+      "dependencies": {
+        "is-what": "^4.1.8"
+      },
+      "engines": {
+        "node": ">=12.13"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/mesqueeb"
+      }
+    },
+    "node_modules/cross-spawn": {
+      "version": "7.0.6",
+      "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.6.tgz",
+      "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+      "dev": true,
+      "dependencies": {
+        "path-key": "^3.1.0",
+        "shebang-command": "^2.0.0",
+        "which": "^2.0.1"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/csstype": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz",
+      "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
+    },
+    "node_modules/dayjs": {
+      "version": "1.11.13",
+      "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz",
+      "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==",
+      "license": "MIT"
+    },
+    "node_modules/debug": {
+      "version": "4.4.1",
+      "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.1.tgz",
+      "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
+      "dev": true,
+      "dependencies": {
+        "ms": "^2.1.3"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "peerDependenciesMeta": {
+        "supports-color": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/default-browser": {
+      "version": "5.2.1",
+      "resolved": "https://registry.npmmirror.com/default-browser/-/default-browser-5.2.1.tgz",
+      "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==",
+      "dev": true,
+      "dependencies": {
+        "bundle-name": "^4.1.0",
+        "default-browser-id": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/default-browser-id": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmmirror.com/default-browser-id/-/default-browser-id-5.0.0.tgz",
+      "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==",
+      "dev": true,
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/define-lazy-prop": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz",
+      "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/delayed-stream": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz",
+      "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/dunder-proto": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz",
+      "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+      "license": "MIT",
+      "dependencies": {
+        "call-bind-apply-helpers": "^1.0.1",
+        "es-errors": "^1.3.0",
+        "gopd": "^1.2.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/electron-to-chromium": {
+      "version": "1.5.201",
+      "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.201.tgz",
+      "integrity": "sha512-ZG65vsrLClodGqywuigc+7m0gr4ISoTQttfVh7nfpLv0M7SIwF4WbFNEOywcqTiujs12AUeeXbFyQieDICAIxg==",
+      "dev": true
+    },
+    "node_modules/element-plus": {
+      "version": "2.10.7",
+      "resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.10.7.tgz",
+      "integrity": "sha512-bL4yhepL8/0NEQA5+N2Q6ZVKLipIDkiQjK2mqtSmGh6CxJk1yaBMdG5HXfYkbk1htNcT3ULk9g23lzT323JGcA==",
+      "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==",
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "prr": "~1.0.1"
+      },
+      "bin": {
+        "errno": "cli.js"
+      }
+    },
+    "node_modules/error-stack-parser-es": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmmirror.com/error-stack-parser-es/-/error-stack-parser-es-1.0.5.tgz",
+      "integrity": "sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==",
+      "dev": true,
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
+      }
+    },
+    "node_modules/es-define-property": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz",
+      "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es-errors": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz",
+      "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es-object-atoms": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
+      "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
+      "license": "MIT",
+      "dependencies": {
+        "es-errors": "^1.3.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es-set-tostringtag": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
+      "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
+      "license": "MIT",
+      "dependencies": {
+        "es-errors": "^1.3.0",
+        "get-intrinsic": "^1.2.6",
+        "has-tostringtag": "^1.0.2",
+        "hasown": "^2.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/esbuild": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.25.9.tgz",
+      "integrity": "sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==",
+      "dev": true,
+      "hasInstallScript": true,
+      "bin": {
+        "esbuild": "bin/esbuild"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "optionalDependencies": {
+        "@esbuild/aix-ppc64": "0.25.9",
+        "@esbuild/android-arm": "0.25.9",
+        "@esbuild/android-arm64": "0.25.9",
+        "@esbuild/android-x64": "0.25.9",
+        "@esbuild/darwin-arm64": "0.25.9",
+        "@esbuild/darwin-x64": "0.25.9",
+        "@esbuild/freebsd-arm64": "0.25.9",
+        "@esbuild/freebsd-x64": "0.25.9",
+        "@esbuild/linux-arm": "0.25.9",
+        "@esbuild/linux-arm64": "0.25.9",
+        "@esbuild/linux-ia32": "0.25.9",
+        "@esbuild/linux-loong64": "0.25.9",
+        "@esbuild/linux-mips64el": "0.25.9",
+        "@esbuild/linux-ppc64": "0.25.9",
+        "@esbuild/linux-riscv64": "0.25.9",
+        "@esbuild/linux-s390x": "0.25.9",
+        "@esbuild/linux-x64": "0.25.9",
+        "@esbuild/netbsd-arm64": "0.25.9",
+        "@esbuild/netbsd-x64": "0.25.9",
+        "@esbuild/openbsd-arm64": "0.25.9",
+        "@esbuild/openbsd-x64": "0.25.9",
+        "@esbuild/openharmony-arm64": "0.25.9",
+        "@esbuild/sunos-x64": "0.25.9",
+        "@esbuild/win32-arm64": "0.25.9",
+        "@esbuild/win32-ia32": "0.25.9",
+        "@esbuild/win32-x64": "0.25.9"
+      }
+    },
+    "node_modules/escalade": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz",
+      "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+      "dev": true,
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/escape-html": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz",
+      "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
+      "license": "MIT"
+    },
+    "node_modules/estree-walker": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz",
+      "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
+    },
+    "node_modules/execa": {
+      "version": "9.6.0",
+      "resolved": "https://registry.npmmirror.com/execa/-/execa-9.6.0.tgz",
+      "integrity": "sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw==",
+      "dev": true,
+      "dependencies": {
+        "@sindresorhus/merge-streams": "^4.0.0",
+        "cross-spawn": "^7.0.6",
+        "figures": "^6.1.0",
+        "get-stream": "^9.0.0",
+        "human-signals": "^8.0.1",
+        "is-plain-obj": "^4.1.0",
+        "is-stream": "^4.0.1",
+        "npm-run-path": "^6.0.0",
+        "pretty-ms": "^9.2.0",
+        "signal-exit": "^4.1.0",
+        "strip-final-newline": "^4.0.0",
+        "yoctocolors": "^2.1.1"
+      },
+      "engines": {
+        "node": "^18.19.0 || >=20.5.0"
+      },
+      "funding": {
+        "url": "https://github.com/sindresorhus/execa?sponsor=1"
+      }
+    },
+    "node_modules/fdir": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/fdir/-/fdir-6.5.0.tgz",
+      "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+      "dev": true,
+      "engines": {
+        "node": ">=12.0.0"
+      },
+      "peerDependencies": {
+        "picomatch": "^3 || ^4"
+      },
+      "peerDependenciesMeta": {
+        "picomatch": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/figures": {
+      "version": "6.1.0",
+      "resolved": "https://registry.npmmirror.com/figures/-/figures-6.1.0.tgz",
+      "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==",
+      "dev": true,
+      "dependencies": {
+        "is-unicode-supported": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/follow-redirects": {
+      "version": "1.15.11",
+      "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.11.tgz",
+      "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==",
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://github.com/sponsors/RubenVerborgh"
+        }
+      ],
+      "license": "MIT",
+      "engines": {
+        "node": ">=4.0"
+      },
+      "peerDependenciesMeta": {
+        "debug": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/form-data": {
+      "version": "4.0.4",
+      "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.4.tgz",
+      "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
+      "license": "MIT",
+      "dependencies": {
+        "asynckit": "^0.4.0",
+        "combined-stream": "^1.0.8",
+        "es-set-tostringtag": "^2.1.0",
+        "hasown": "^2.0.2",
+        "mime-types": "^2.1.12"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/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/function-bind": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz",
+      "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/gensync": {
+      "version": "1.0.0-beta.2",
+      "resolved": "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz",
+      "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+      "dev": true,
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/get-intrinsic": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
+      "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
+      "license": "MIT",
+      "dependencies": {
+        "call-bind-apply-helpers": "^1.0.2",
+        "es-define-property": "^1.0.1",
+        "es-errors": "^1.3.0",
+        "es-object-atoms": "^1.1.1",
+        "function-bind": "^1.1.2",
+        "get-proto": "^1.0.1",
+        "gopd": "^1.2.0",
+        "has-symbols": "^1.1.0",
+        "hasown": "^2.0.2",
+        "math-intrinsics": "^1.1.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/get-proto": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz",
+      "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+      "license": "MIT",
+      "dependencies": {
+        "dunder-proto": "^1.0.1",
+        "es-object-atoms": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/get-stream": {
+      "version": "9.0.1",
+      "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-9.0.1.tgz",
+      "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==",
+      "dev": true,
+      "dependencies": {
+        "@sec-ant/readable-stream": "^0.4.1",
+        "is-stream": "^4.0.1"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/gopd": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz",
+      "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/graceful-fs": {
+      "version": "4.2.11",
+      "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz",
+      "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+      "license": "ISC",
+      "optional": true
+    },
+    "node_modules/has-symbols": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz",
+      "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/has-tostringtag": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+      "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+      "license": "MIT",
+      "dependencies": {
+        "has-symbols": "^1.0.3"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/hasown": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz",
+      "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+      "license": "MIT",
+      "dependencies": {
+        "function-bind": "^1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/hookable": {
+      "version": "5.5.3",
+      "resolved": "https://registry.npmmirror.com/hookable/-/hookable-5.5.3.tgz",
+      "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ=="
+    },
+    "node_modules/human-signals": {
+      "version": "8.0.1",
+      "resolved": "https://registry.npmmirror.com/human-signals/-/human-signals-8.0.1.tgz",
+      "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=18.18.0"
+      }
+    },
+    "node_modules/iconv-lite": {
+      "version": "0.6.3",
+      "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz",
+      "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+      "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==",
+      "license": "MIT",
+      "optional": true,
+      "bin": {
+        "image-size": "bin/image-size.js"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-docker": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/is-docker/-/is-docker-3.0.0.tgz",
+      "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==",
+      "dev": true,
+      "bin": {
+        "is-docker": "cli.js"
+      },
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/is-inside-container": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/is-inside-container/-/is-inside-container-1.0.0.tgz",
+      "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==",
+      "dev": true,
+      "dependencies": {
+        "is-docker": "^3.0.0"
+      },
+      "bin": {
+        "is-inside-container": "cli.js"
+      },
+      "engines": {
+        "node": ">=14.16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/is-plain-obj": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
+      "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/is-stream": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-4.0.1.tgz",
+      "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==",
+      "dev": true,
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/is-unicode-supported": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz",
+      "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/is-what": {
+      "version": "4.1.16",
+      "resolved": "https://registry.npmmirror.com/is-what/-/is-what-4.1.16.tgz",
+      "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==",
+      "engines": {
+        "node": ">=12.13"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/mesqueeb"
+      }
+    },
+    "node_modules/is-wsl": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-3.1.0.tgz",
+      "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==",
+      "dev": true,
+      "dependencies": {
+        "is-inside-container": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/isexe": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz",
+      "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+      "dev": true
+    },
+    "node_modules/js-tokens": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz",
+      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+      "dev": true
+    },
+    "node_modules/jsesc": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-3.1.0.tgz",
+      "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
+      "dev": true,
+      "bin": {
+        "jsesc": "bin/jsesc"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/json5": {
+      "version": "2.2.3",
+      "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz",
+      "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+      "dev": true,
+      "bin": {
+        "json5": "lib/cli.js"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/kolorist": {
+      "version": "1.8.0",
+      "resolved": "https://registry.npmmirror.com/kolorist/-/kolorist-1.8.0.tgz",
+      "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==",
+      "dev": true
+    },
+    "node_modules/less": {
+      "version": "4.4.0",
+      "resolved": "https://registry.npmmirror.com/less/-/less-4.4.0.tgz",
+      "integrity": "sha512-kdTwsyRuncDfjEs0DlRILWNvxhDG/Zij4YLO4TMJgDLW+8OzpfkdPnRgrsRuY1o+oaxJGWsps5f/RVBgGmmN0w==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "copy-anything": "^2.0.1",
+        "parse-node-version": "^1.0.1",
+        "tslib": "^2.3.0"
+      },
+      "bin": {
+        "lessc": "bin/lessc"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "optionalDependencies": {
+        "errno": "^0.1.1",
+        "graceful-fs": "^4.1.2",
+        "image-size": "~0.5.0",
+        "make-dir": "^2.1.0",
+        "mime": "^1.4.1",
+        "needle": "^3.1.0",
+        "source-map": "~0.6.0"
+      }
+    },
+    "node_modules/less/node_modules/copy-anything": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmmirror.com/copy-anything/-/copy-anything-2.0.6.tgz",
+      "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==",
+      "license": "MIT",
+      "dependencies": {
+        "is-what": "^3.14.1"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/mesqueeb"
+      }
+    },
+    "node_modules/less/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==",
+      "license": "MIT"
+    },
+    "node_modules/lodash": {
+      "version": "4.17.21",
+      "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz",
+      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+      "license": "MIT"
+    },
+    "node_modules/lodash-es": {
+      "version": "4.17.21",
+      "resolved": "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz",
+      "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==",
+      "license": "MIT"
+    },
+    "node_modules/lodash-unified": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/lodash-unified/-/lodash-unified-1.0.3.tgz",
+      "integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==",
+      "license": "MIT",
+      "peerDependencies": {
+        "@types/lodash-es": "*",
+        "lodash": "*",
+        "lodash-es": "*"
+      }
+    },
+    "node_modules/lru-cache": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz",
+      "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+      "dev": true,
+      "dependencies": {
+        "yallist": "^3.0.2"
+      }
+    },
+    "node_modules/magic-string": {
+      "version": "0.30.17",
+      "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.17.tgz",
+      "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==",
+      "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==",
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "pify": "^4.0.1",
+        "semver": "^5.6.0"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/make-dir/node_modules/semver": {
+      "version": "5.7.2",
+      "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz",
+      "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+      "license": "ISC",
+      "optional": true,
+      "bin": {
+        "semver": "bin/semver"
+      }
+    },
+    "node_modules/math-intrinsics": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+      "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/memoize-one": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz",
+      "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==",
+      "license": "MIT"
+    },
+    "node_modules/mime": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz",
+      "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+      "license": "MIT",
+      "optional": true,
+      "bin": {
+        "mime": "cli.js"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/mime-db": {
+      "version": "1.52.0",
+      "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz",
+      "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/mime-types": {
+      "version": "2.1.35",
+      "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz",
+      "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+      "license": "MIT",
+      "dependencies": {
+        "mime-db": "1.52.0"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/mitt": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmmirror.com/mitt/-/mitt-3.0.1.tgz",
+      "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw=="
+    },
+    "node_modules/moment": {
+      "version": "2.30.1",
+      "resolved": "https://registry.npmmirror.com/moment/-/moment-2.30.1.tgz",
+      "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==",
+      "license": "MIT",
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/mrmime": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/mrmime/-/mrmime-2.0.1.tgz",
+      "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/ms": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz",
+      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+      "dev": true
+    },
+    "node_modules/nanoid": {
+      "version": "3.3.11",
+      "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.11.tgz",
+      "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "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==",
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "iconv-lite": "^0.6.3",
+        "sax": "^1.2.4"
+      },
+      "bin": {
+        "needle": "bin/needle"
+      },
+      "engines": {
+        "node": ">= 4.4.x"
+      }
+    },
+    "node_modules/node-releases": {
+      "version": "2.0.19",
+      "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.19.tgz",
+      "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==",
+      "dev": true
+    },
+    "node_modules/normalize-wheel-es": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz",
+      "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==",
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/npm-run-path": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-6.0.0.tgz",
+      "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==",
+      "dev": true,
+      "dependencies": {
+        "path-key": "^4.0.0",
+        "unicorn-magic": "^0.3.0"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/npm-run-path/node_modules/path-key": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/path-key/-/path-key-4.0.0.tgz",
+      "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/ohash": {
+      "version": "2.0.11",
+      "resolved": "https://registry.npmmirror.com/ohash/-/ohash-2.0.11.tgz",
+      "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==",
+      "dev": true
+    },
+    "node_modules/open": {
+      "version": "10.2.0",
+      "resolved": "https://registry.npmmirror.com/open/-/open-10.2.0.tgz",
+      "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==",
+      "dev": true,
+      "dependencies": {
+        "default-browser": "^5.2.1",
+        "define-lazy-prop": "^3.0.0",
+        "is-inside-container": "^1.0.0",
+        "wsl-utils": "^0.1.0"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/parse-ms": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/parse-ms/-/parse-ms-4.0.0.tgz",
+      "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==",
+      "dev": true,
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/parse-node-version": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/parse-node-version/-/parse-node-version-1.0.1.tgz",
+      "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.10"
+      }
+    },
+    "node_modules/path-key": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz",
+      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/pathe": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmmirror.com/pathe/-/pathe-2.0.3.tgz",
+      "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
+      "dev": true
+    },
+    "node_modules/perfect-debounce": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/perfect-debounce/-/perfect-debounce-1.0.0.tgz",
+      "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA=="
+    },
+    "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/picomatch": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.3.tgz",
+      "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/jonschlinkert"
+      }
+    },
+    "node_modules/pify": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz",
+      "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+      "license": "MIT",
+      "optional": true,
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/pinia": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmmirror.com/pinia/-/pinia-3.0.3.tgz",
+      "integrity": "sha512-ttXO/InUULUXkMHpTdp9Fj4hLpD/2AoJdmAbAeW2yu1iy1k+pkFekQXw5VpC0/5p51IOR/jDaDRfRWRnMMsGOA==",
+      "dependencies": {
+        "@vue/devtools-api": "^7.7.2"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/posva"
+      },
+      "peerDependencies": {
+        "typescript": ">=4.4.4",
+        "vue": "^2.7.0 || ^3.5.11"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/postcss": {
+      "version": "8.5.6",
+      "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.6.tgz",
+      "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/postcss/"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/postcss"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "dependencies": {
+        "nanoid": "^3.3.11",
+        "picocolors": "^1.1.1",
+        "source-map-js": "^1.2.1"
+      },
+      "engines": {
+        "node": "^10 || ^12 || >=14"
+      }
+    },
+    "node_modules/prettier": {
+      "version": "3.6.2",
+      "resolved": "https://registry.npmmirror.com/prettier/-/prettier-3.6.2.tgz",
+      "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==",
+      "dev": true,
+      "bin": {
+        "prettier": "bin/prettier.cjs"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/prettier/prettier?sponsor=1"
+      }
+    },
+    "node_modules/pretty-ms": {
+      "version": "9.2.0",
+      "resolved": "https://registry.npmmirror.com/pretty-ms/-/pretty-ms-9.2.0.tgz",
+      "integrity": "sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==",
+      "dev": true,
+      "dependencies": {
+        "parse-ms": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/proxy-from-env": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+      "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
+      "license": "MIT"
+    },
+    "node_modules/prr": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/prr/-/prr-1.0.1.tgz",
+      "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==",
+      "license": "MIT",
+      "optional": true
+    },
+    "node_modules/rfdc": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmmirror.com/rfdc/-/rfdc-1.4.1.tgz",
+      "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA=="
+    },
+    "node_modules/rollup": {
+      "version": "4.46.2",
+      "resolved": "https://registry.npmmirror.com/rollup/-/rollup-4.46.2.tgz",
+      "integrity": "sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg==",
+      "dev": true,
+      "dependencies": {
+        "@types/estree": "1.0.8"
+      },
+      "bin": {
+        "rollup": "dist/bin/rollup"
+      },
+      "engines": {
+        "node": ">=18.0.0",
+        "npm": ">=8.0.0"
+      },
+      "optionalDependencies": {
+        "@rollup/rollup-android-arm-eabi": "4.46.2",
+        "@rollup/rollup-android-arm64": "4.46.2",
+        "@rollup/rollup-darwin-arm64": "4.46.2",
+        "@rollup/rollup-darwin-x64": "4.46.2",
+        "@rollup/rollup-freebsd-arm64": "4.46.2",
+        "@rollup/rollup-freebsd-x64": "4.46.2",
+        "@rollup/rollup-linux-arm-gnueabihf": "4.46.2",
+        "@rollup/rollup-linux-arm-musleabihf": "4.46.2",
+        "@rollup/rollup-linux-arm64-gnu": "4.46.2",
+        "@rollup/rollup-linux-arm64-musl": "4.46.2",
+        "@rollup/rollup-linux-loongarch64-gnu": "4.46.2",
+        "@rollup/rollup-linux-ppc64-gnu": "4.46.2",
+        "@rollup/rollup-linux-riscv64-gnu": "4.46.2",
+        "@rollup/rollup-linux-riscv64-musl": "4.46.2",
+        "@rollup/rollup-linux-s390x-gnu": "4.46.2",
+        "@rollup/rollup-linux-x64-gnu": "4.46.2",
+        "@rollup/rollup-linux-x64-musl": "4.46.2",
+        "@rollup/rollup-win32-arm64-msvc": "4.46.2",
+        "@rollup/rollup-win32-ia32-msvc": "4.46.2",
+        "@rollup/rollup-win32-x64-msvc": "4.46.2",
+        "fsevents": "~2.3.2"
+      }
+    },
+    "node_modules/run-applescript": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmmirror.com/run-applescript/-/run-applescript-7.0.0.tgz",
+      "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==",
+      "dev": true,
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/safer-buffer": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz",
+      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+      "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==",
+      "license": "ISC",
+      "optional": true
+    },
+    "node_modules/semver": {
+      "version": "6.3.1",
+      "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz",
+      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+      "dev": true,
+      "bin": {
+        "semver": "bin/semver.js"
+      }
+    },
+    "node_modules/shebang-command": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz",
+      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+      "dev": true,
+      "dependencies": {
+        "shebang-regex": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/shebang-regex": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz",
+      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/signal-exit": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-4.1.0.tgz",
+      "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+      "dev": true,
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/sirv": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmmirror.com/sirv/-/sirv-3.0.1.tgz",
+      "integrity": "sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==",
+      "dev": true,
+      "dependencies": {
+        "@polka/url": "^1.0.0-next.24",
+        "mrmime": "^2.0.0",
+        "totalist": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/source-map": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz",
+      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+      "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/spark-md5": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmmirror.com/spark-md5/-/spark-md5-3.0.2.tgz",
+      "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==",
+      "license": "(WTFPL OR MIT)"
+    },
+    "node_modules/speakingurl": {
+      "version": "14.0.1",
+      "resolved": "https://registry.npmmirror.com/speakingurl/-/speakingurl-14.0.1.tgz",
+      "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/strip-final-newline": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-4.0.0.tgz",
+      "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==",
+      "dev": true,
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/superjson": {
+      "version": "2.2.2",
+      "resolved": "https://registry.npmmirror.com/superjson/-/superjson-2.2.2.tgz",
+      "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==",
+      "dependencies": {
+        "copy-anything": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=16"
+      }
+    },
+    "node_modules/tinyglobby": {
+      "version": "0.2.14",
+      "resolved": "https://registry.npmmirror.com/tinyglobby/-/tinyglobby-0.2.14.tgz",
+      "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==",
+      "dev": true,
+      "dependencies": {
+        "fdir": "^6.4.4",
+        "picomatch": "^4.0.2"
+      },
+      "engines": {
+        "node": ">=12.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/SuperchupuDev"
+      }
+    },
+    "node_modules/totalist": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmmirror.com/totalist/-/totalist-3.0.1.tgz",
+      "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/tslib": {
+      "version": "2.8.1",
+      "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz",
+      "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+      "license": "0BSD"
+    },
+    "node_modules/unicorn-magic": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmmirror.com/unicorn-magic/-/unicorn-magic-0.3.0.tgz",
+      "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==",
+      "dev": true,
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/unplugin-utils": {
+      "version": "0.2.5",
+      "resolved": "https://registry.npmmirror.com/unplugin-utils/-/unplugin-utils-0.2.5.tgz",
+      "integrity": "sha512-gwXJnPRewT4rT7sBi/IvxKTjsms7jX7QIDLOClApuZwR49SXbrB1z2NLUZ+vDHyqCj/n58OzRRqaW+B8OZi8vg==",
+      "dev": true,
+      "dependencies": {
+        "pathe": "^2.0.3",
+        "picomatch": "^4.0.3"
+      },
+      "engines": {
+        "node": ">=18.12.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sxzz"
+      }
+    },
+    "node_modules/update-browserslist-db": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz",
+      "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/browserslist"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/browserslist"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "dependencies": {
+        "escalade": "^3.2.0",
+        "picocolors": "^1.1.1"
+      },
+      "bin": {
+        "update-browserslist-db": "cli.js"
+      },
+      "peerDependencies": {
+        "browserslist": ">= 4.21.0"
+      }
+    },
+    "node_modules/vite": {
+      "version": "7.1.2",
+      "resolved": "https://registry.npmmirror.com/vite/-/vite-7.1.2.tgz",
+      "integrity": "sha512-J0SQBPlQiEXAF7tajiH+rUooJPo0l8KQgyg4/aMunNtrOa7bwuZJsJbDWzeljqQpgftxuq5yNJxQ91O9ts29UQ==",
+      "dev": true,
+      "dependencies": {
+        "esbuild": "^0.25.0",
+        "fdir": "^6.4.6",
+        "picomatch": "^4.0.3",
+        "postcss": "^8.5.6",
+        "rollup": "^4.43.0",
+        "tinyglobby": "^0.2.14"
+      },
+      "bin": {
+        "vite": "bin/vite.js"
+      },
+      "engines": {
+        "node": "^20.19.0 || >=22.12.0"
+      },
+      "funding": {
+        "url": "https://github.com/vitejs/vite?sponsor=1"
+      },
+      "optionalDependencies": {
+        "fsevents": "~2.3.3"
+      },
+      "peerDependencies": {
+        "@types/node": "^20.19.0 || >=22.12.0",
+        "jiti": ">=1.21.0",
+        "less": "^4.0.0",
+        "lightningcss": "^1.21.0",
+        "sass": "^1.70.0",
+        "sass-embedded": "^1.70.0",
+        "stylus": ">=0.54.8",
+        "sugarss": "^5.0.0",
+        "terser": "^5.16.0",
+        "tsx": "^4.8.1",
+        "yaml": "^2.4.2"
+      },
+      "peerDependenciesMeta": {
+        "@types/node": {
+          "optional": true
+        },
+        "jiti": {
+          "optional": true
+        },
+        "less": {
+          "optional": true
+        },
+        "lightningcss": {
+          "optional": true
+        },
+        "sass": {
+          "optional": true
+        },
+        "sass-embedded": {
+          "optional": true
+        },
+        "stylus": {
+          "optional": true
+        },
+        "sugarss": {
+          "optional": true
+        },
+        "terser": {
+          "optional": true
+        },
+        "tsx": {
+          "optional": true
+        },
+        "yaml": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/vite-dev-rpc": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/vite-dev-rpc/-/vite-dev-rpc-1.1.0.tgz",
+      "integrity": "sha512-pKXZlgoXGoE8sEKiKJSng4hI1sQ4wi5YT24FCrwrLt6opmkjlqPPVmiPWWJn8M8byMxRGzp1CrFuqQs4M/Z39A==",
+      "dev": true,
+      "dependencies": {
+        "birpc": "^2.4.0",
+        "vite-hot-client": "^2.1.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
+      },
+      "peerDependencies": {
+        "vite": "^2.9.0 || ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.1 || ^7.0.0-0"
+      }
+    },
+    "node_modules/vite-hot-client": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/vite-hot-client/-/vite-hot-client-2.1.0.tgz",
+      "integrity": "sha512-7SpgZmU7R+dDnSmvXE1mfDtnHLHQSisdySVR7lO8ceAXvM0otZeuQQ6C8LrS5d/aYyP/QZ0hI0L+dIPrm4YlFQ==",
+      "dev": true,
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
+      },
+      "peerDependencies": {
+        "vite": "^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0"
+      }
+    },
+    "node_modules/vite-plugin-inspect": {
+      "version": "11.3.2",
+      "resolved": "https://registry.npmmirror.com/vite-plugin-inspect/-/vite-plugin-inspect-11.3.2.tgz",
+      "integrity": "sha512-nzwvyFQg58XSMAmKVLr2uekAxNYvAbz1lyPmCAFVIBncCgN9S/HPM+2UM9Q9cvc4JEbC5ZBgwLAdaE2onmQuKg==",
+      "dev": true,
+      "dependencies": {
+        "ansis": "^4.1.0",
+        "debug": "^4.4.1",
+        "error-stack-parser-es": "^1.0.5",
+        "ohash": "^2.0.11",
+        "open": "^10.2.0",
+        "perfect-debounce": "^1.0.0",
+        "sirv": "^3.0.1",
+        "unplugin-utils": "^0.2.4",
+        "vite-dev-rpc": "^1.1.0"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
+      },
+      "peerDependencies": {
+        "vite": "^6.0.0 || ^7.0.0-0"
+      },
+      "peerDependenciesMeta": {
+        "@nuxt/kit": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/vite-plugin-vue-devtools": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmmirror.com/vite-plugin-vue-devtools/-/vite-plugin-vue-devtools-8.0.0.tgz",
+      "integrity": "sha512-9bWQig8UMu3nPbxX86NJv56aelpFYoBHxB5+pxuQz3pa3Tajc1ezRidj/0dnADA4/UHuVIfwIVYHOvMXYcPshg==",
+      "dev": true,
+      "dependencies": {
+        "@vue/devtools-core": "^8.0.0",
+        "@vue/devtools-kit": "^8.0.0",
+        "@vue/devtools-shared": "^8.0.0",
+        "execa": "^9.6.0",
+        "sirv": "^3.0.1",
+        "vite-plugin-inspect": "^11.3.0",
+        "vite-plugin-vue-inspector": "^5.3.2"
+      },
+      "engines": {
+        "node": ">=v14.21.3"
+      },
+      "peerDependencies": {
+        "vite": "^6.0.0 || ^7.0.0-0"
+      }
+    },
+    "node_modules/vite-plugin-vue-devtools/node_modules/@vue/devtools-kit": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmmirror.com/@vue/devtools-kit/-/devtools-kit-8.0.0.tgz",
+      "integrity": "sha512-b11OeQODkE0bctdT0RhL684pEV2DPXJ80bjpywVCbFn1PxuL3bmMPDoJKjbMnnoWbrnUYXYzFfmMWBZAMhORkQ==",
+      "dev": true,
+      "dependencies": {
+        "@vue/devtools-shared": "^8.0.0",
+        "birpc": "^2.5.0",
+        "hookable": "^5.5.3",
+        "mitt": "^3.0.1",
+        "perfect-debounce": "^1.0.0",
+        "speakingurl": "^14.0.1",
+        "superjson": "^2.2.2"
+      }
+    },
+    "node_modules/vite-plugin-vue-devtools/node_modules/@vue/devtools-shared": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmmirror.com/@vue/devtools-shared/-/devtools-shared-8.0.0.tgz",
+      "integrity": "sha512-jrKnbjshQCiOAJanoeJjTU7WaCg0Dz2BUal6SaR6VM/P3hiFdX5Q6Pxl73ZMnrhCxNK9nAg5hvvRGqs+6dtU1g==",
+      "dev": true,
+      "dependencies": {
+        "rfdc": "^1.4.1"
+      }
+    },
+    "node_modules/vite-plugin-vue-inspector": {
+      "version": "5.3.2",
+      "resolved": "https://registry.npmmirror.com/vite-plugin-vue-inspector/-/vite-plugin-vue-inspector-5.3.2.tgz",
+      "integrity": "sha512-YvEKooQcSiBTAs0DoYLfefNja9bLgkFM7NI2b07bE2SruuvX0MEa9cMaxjKVMkeCp5Nz9FRIdcN1rOdFVBeL6Q==",
+      "dev": true,
+      "dependencies": {
+        "@babel/core": "^7.23.0",
+        "@babel/plugin-proposal-decorators": "^7.23.0",
+        "@babel/plugin-syntax-import-attributes": "^7.22.5",
+        "@babel/plugin-syntax-import-meta": "^7.10.4",
+        "@babel/plugin-transform-typescript": "^7.22.15",
+        "@vue/babel-plugin-jsx": "^1.1.5",
+        "@vue/compiler-dom": "^3.3.4",
+        "kolorist": "^1.8.0",
+        "magic-string": "^0.30.4"
+      },
+      "peerDependencies": {
+        "vite": "^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0"
+      }
+    },
+    "node_modules/vue": {
+      "version": "3.5.18",
+      "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.18.tgz",
+      "integrity": "sha512-7W4Y4ZbMiQ3SEo+m9lnoNpV9xG7QVMLa+/0RFwwiAVkeYoyGXqWE85jabU4pllJNUzqfLShJ5YLptewhCWUgNA==",
+      "dependencies": {
+        "@vue/compiler-dom": "3.5.18",
+        "@vue/compiler-sfc": "3.5.18",
+        "@vue/runtime-dom": "3.5.18",
+        "@vue/server-renderer": "3.5.18",
+        "@vue/shared": "3.5.18"
+      },
+      "peerDependencies": {
+        "typescript": "*"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/vue-router": {
+      "version": "4.5.1",
+      "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.5.1.tgz",
+      "integrity": "sha512-ogAF3P97NPm8fJsE4by9dwSYtDwXIY1nFY9T6DyQnGHd1E2Da94w9JIolpe42LJGIl0DwOHBi8TcRPlPGwbTtw==",
+      "dependencies": {
+        "@vue/devtools-api": "^6.6.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/posva"
+      },
+      "peerDependencies": {
+        "vue": "^3.2.0"
+      }
+    },
+    "node_modules/vue-router/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=="
+    },
+    "node_modules/which": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz",
+      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+      "dev": true,
+      "dependencies": {
+        "isexe": "^2.0.0"
+      },
+      "bin": {
+        "node-which": "bin/node-which"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/wsl-utils": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmmirror.com/wsl-utils/-/wsl-utils-0.1.0.tgz",
+      "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==",
+      "dev": true,
+      "dependencies": {
+        "is-wsl": "^3.1.0"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/yallist": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz",
+      "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+      "dev": true
+    },
+    "node_modules/yoctocolors": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/yoctocolors/-/yoctocolors-2.1.1.tgz",
+      "integrity": "sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    }
+  },
+  "dependencies": {
+    "@ampproject/remapping": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.3.0.tgz",
+      "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
+      "dev": true,
+      "requires": {
+        "@jridgewell/gen-mapping": "^0.3.5",
+        "@jridgewell/trace-mapping": "^0.3.24"
+      }
+    },
+    "@babel/code-frame": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.27.1.tgz",
+      "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-validator-identifier": "^7.27.1",
+        "js-tokens": "^4.0.0",
+        "picocolors": "^1.1.1"
+      }
+    },
+    "@babel/compat-data": {
+      "version": "7.28.0",
+      "resolved": "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.28.0.tgz",
+      "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==",
+      "dev": true
+    },
+    "@babel/core": {
+      "version": "7.28.3",
+      "resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.28.3.tgz",
+      "integrity": "sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==",
+      "dev": true,
+      "requires": {
+        "@ampproject/remapping": "^2.2.0",
+        "@babel/code-frame": "^7.27.1",
+        "@babel/generator": "^7.28.3",
+        "@babel/helper-compilation-targets": "^7.27.2",
+        "@babel/helper-module-transforms": "^7.28.3",
+        "@babel/helpers": "^7.28.3",
+        "@babel/parser": "^7.28.3",
+        "@babel/template": "^7.27.2",
+        "@babel/traverse": "^7.28.3",
+        "@babel/types": "^7.28.2",
+        "convert-source-map": "^2.0.0",
+        "debug": "^4.1.0",
+        "gensync": "^1.0.0-beta.2",
+        "json5": "^2.2.3",
+        "semver": "^6.3.1"
+      }
+    },
+    "@babel/generator": {
+      "version": "7.28.3",
+      "resolved": "https://registry.npmmirror.com/@babel/generator/-/generator-7.28.3.tgz",
+      "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==",
+      "dev": true,
+      "requires": {
+        "@babel/parser": "^7.28.3",
+        "@babel/types": "^7.28.2",
+        "@jridgewell/gen-mapping": "^0.3.12",
+        "@jridgewell/trace-mapping": "^0.3.28",
+        "jsesc": "^3.0.2"
+      }
+    },
+    "@babel/helper-annotate-as-pure": {
+      "version": "7.27.3",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz",
+      "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.27.3"
+      }
+    },
+    "@babel/helper-compilation-targets": {
+      "version": "7.27.2",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz",
+      "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==",
+      "dev": true,
+      "requires": {
+        "@babel/compat-data": "^7.27.2",
+        "@babel/helper-validator-option": "^7.27.1",
+        "browserslist": "^4.24.0",
+        "lru-cache": "^5.1.1",
+        "semver": "^6.3.1"
+      }
+    },
+    "@babel/helper-create-class-features-plugin": {
+      "version": "7.28.3",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.3.tgz",
+      "integrity": "sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-annotate-as-pure": "^7.27.3",
+        "@babel/helper-member-expression-to-functions": "^7.27.1",
+        "@babel/helper-optimise-call-expression": "^7.27.1",
+        "@babel/helper-replace-supers": "^7.27.1",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",
+        "@babel/traverse": "^7.28.3",
+        "semver": "^6.3.1"
+      }
+    },
+    "@babel/helper-globals": {
+      "version": "7.28.0",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-globals/-/helper-globals-7.28.0.tgz",
+      "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==",
+      "dev": true
+    },
+    "@babel/helper-member-expression-to-functions": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz",
+      "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==",
+      "dev": true,
+      "requires": {
+        "@babel/traverse": "^7.27.1",
+        "@babel/types": "^7.27.1"
+      }
+    },
+    "@babel/helper-module-imports": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz",
+      "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==",
+      "dev": true,
+      "requires": {
+        "@babel/traverse": "^7.27.1",
+        "@babel/types": "^7.27.1"
+      }
+    },
+    "@babel/helper-module-transforms": {
+      "version": "7.28.3",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz",
+      "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-imports": "^7.27.1",
+        "@babel/helper-validator-identifier": "^7.27.1",
+        "@babel/traverse": "^7.28.3"
+      }
+    },
+    "@babel/helper-optimise-call-expression": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz",
+      "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.27.1"
+      }
+    },
+    "@babel/helper-plugin-utils": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz",
+      "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==",
+      "dev": true
+    },
+    "@babel/helper-replace-supers": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz",
+      "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-member-expression-to-functions": "^7.27.1",
+        "@babel/helper-optimise-call-expression": "^7.27.1",
+        "@babel/traverse": "^7.27.1"
+      }
+    },
+    "@babel/helper-skip-transparent-expression-wrappers": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz",
+      "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==",
+      "dev": true,
+      "requires": {
+        "@babel/traverse": "^7.27.1",
+        "@babel/types": "^7.27.1"
+      }
+    },
+    "@babel/helper-string-parser": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
+      "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="
+    },
+    "@babel/helper-validator-identifier": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
+      "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow=="
+    },
+    "@babel/helper-validator-option": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
+      "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
+      "dev": true
+    },
+    "@babel/helpers": {
+      "version": "7.28.3",
+      "resolved": "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.28.3.tgz",
+      "integrity": "sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw==",
+      "dev": true,
+      "requires": {
+        "@babel/template": "^7.27.2",
+        "@babel/types": "^7.28.2"
+      }
+    },
+    "@babel/parser": {
+      "version": "7.28.3",
+      "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.28.3.tgz",
+      "integrity": "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==",
+      "requires": {
+        "@babel/types": "^7.28.2"
+      }
+    },
+    "@babel/plugin-proposal-decorators": {
+      "version": "7.28.0",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.28.0.tgz",
+      "integrity": "sha512-zOiZqvANjWDUaUS9xMxbMcK/Zccztbe/6ikvUXaG9nsPH3w6qh5UaPGAnirI/WhIbZ8m3OHU0ReyPrknG+ZKeg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-create-class-features-plugin": "^7.27.1",
+        "@babel/helper-plugin-utils": "^7.27.1",
+        "@babel/plugin-syntax-decorators": "^7.27.1"
+      }
+    },
+    "@babel/plugin-syntax-decorators": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.27.1.tgz",
+      "integrity": "sha512-YMq8Z87Lhl8EGkmb0MwYkt36QnxC+fzCgrl66ereamPlYToRpIk5nUjKUY3QKLWq8mwUB1BgbeXcTJhZOCDg5A==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.27.1"
+      }
+    },
+    "@babel/plugin-syntax-import-attributes": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz",
+      "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.27.1"
+      }
+    },
+    "@babel/plugin-syntax-import-meta": {
+      "version": "7.10.4",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
+      "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.10.4"
+      }
+    },
+    "@babel/plugin-syntax-jsx": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz",
+      "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.27.1"
+      }
+    },
+    "@babel/plugin-syntax-typescript": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz",
+      "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.27.1"
+      }
+    },
+    "@babel/plugin-transform-typescript": {
+      "version": "7.28.0",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.0.tgz",
+      "integrity": "sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-annotate-as-pure": "^7.27.3",
+        "@babel/helper-create-class-features-plugin": "^7.27.1",
+        "@babel/helper-plugin-utils": "^7.27.1",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",
+        "@babel/plugin-syntax-typescript": "^7.27.1"
+      }
+    },
+    "@babel/template": {
+      "version": "7.27.2",
+      "resolved": "https://registry.npmmirror.com/@babel/template/-/template-7.27.2.tgz",
+      "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==",
+      "dev": true,
+      "requires": {
+        "@babel/code-frame": "^7.27.1",
+        "@babel/parser": "^7.27.2",
+        "@babel/types": "^7.27.1"
+      }
+    },
+    "@babel/traverse": {
+      "version": "7.28.3",
+      "resolved": "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.28.3.tgz",
+      "integrity": "sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==",
+      "dev": true,
+      "requires": {
+        "@babel/code-frame": "^7.27.1",
+        "@babel/generator": "^7.28.3",
+        "@babel/helper-globals": "^7.28.0",
+        "@babel/parser": "^7.28.3",
+        "@babel/template": "^7.27.2",
+        "@babel/types": "^7.28.2",
+        "debug": "^4.3.1"
+      }
+    },
+    "@babel/types": {
+      "version": "7.28.2",
+      "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.28.2.tgz",
+      "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==",
+      "requires": {
+        "@babel/helper-string-parser": "^7.27.1",
+        "@babel/helper-validator-identifier": "^7.27.1"
+      }
+    },
+    "@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.2",
+      "resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.2.tgz",
+      "integrity": "sha512-OzIuTaIfC8QXEPmJvB4Y4kw34rSXdCJzxcD1kFStBvr8bK6X1zQAYDo0CNMjojnfTqRQCJ0I7prlErcoRiET2A==",
+      "requires": {}
+    },
+    "@esbuild/aix-ppc64": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.9.tgz",
+      "integrity": "sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==",
+      "dev": true,
+      "optional": true
+    },
+    "@esbuild/android-arm": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.25.9.tgz",
+      "integrity": "sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==",
+      "dev": true,
+      "optional": true
+    },
+    "@esbuild/android-arm64": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.25.9.tgz",
+      "integrity": "sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==",
+      "dev": true,
+      "optional": true
+    },
+    "@esbuild/android-x64": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.25.9.tgz",
+      "integrity": "sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==",
+      "dev": true,
+      "optional": true
+    },
+    "@esbuild/darwin-arm64": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.9.tgz",
+      "integrity": "sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==",
+      "dev": true,
+      "optional": true
+    },
+    "@esbuild/darwin-x64": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.25.9.tgz",
+      "integrity": "sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==",
+      "dev": true,
+      "optional": true
+    },
+    "@esbuild/freebsd-arm64": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.9.tgz",
+      "integrity": "sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==",
+      "dev": true,
+      "optional": true
+    },
+    "@esbuild/freebsd-x64": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.9.tgz",
+      "integrity": "sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==",
+      "dev": true,
+      "optional": true
+    },
+    "@esbuild/linux-arm": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.25.9.tgz",
+      "integrity": "sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==",
+      "dev": true,
+      "optional": true
+    },
+    "@esbuild/linux-arm64": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.25.9.tgz",
+      "integrity": "sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==",
+      "dev": true,
+      "optional": true
+    },
+    "@esbuild/linux-ia32": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.25.9.tgz",
+      "integrity": "sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==",
+      "dev": true,
+      "optional": true
+    },
+    "@esbuild/linux-loong64": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.25.9.tgz",
+      "integrity": "sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==",
+      "dev": true,
+      "optional": true
+    },
+    "@esbuild/linux-mips64el": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.9.tgz",
+      "integrity": "sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==",
+      "dev": true,
+      "optional": true
+    },
+    "@esbuild/linux-ppc64": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.9.tgz",
+      "integrity": "sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==",
+      "dev": true,
+      "optional": true
+    },
+    "@esbuild/linux-riscv64": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.9.tgz",
+      "integrity": "sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==",
+      "dev": true,
+      "optional": true
+    },
+    "@esbuild/linux-s390x": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.25.9.tgz",
+      "integrity": "sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==",
+      "dev": true,
+      "optional": true
+    },
+    "@esbuild/linux-x64": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.25.9.tgz",
+      "integrity": "sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==",
+      "dev": true,
+      "optional": true
+    },
+    "@esbuild/netbsd-arm64": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.9.tgz",
+      "integrity": "sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==",
+      "dev": true,
+      "optional": true
+    },
+    "@esbuild/netbsd-x64": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.9.tgz",
+      "integrity": "sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==",
+      "dev": true,
+      "optional": true
+    },
+    "@esbuild/openbsd-arm64": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.9.tgz",
+      "integrity": "sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==",
+      "dev": true,
+      "optional": true
+    },
+    "@esbuild/openbsd-x64": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.9.tgz",
+      "integrity": "sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==",
+      "dev": true,
+      "optional": true
+    },
+    "@esbuild/openharmony-arm64": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.9.tgz",
+      "integrity": "sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==",
+      "dev": true,
+      "optional": true
+    },
+    "@esbuild/sunos-x64": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.25.9.tgz",
+      "integrity": "sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==",
+      "dev": true,
+      "optional": true
+    },
+    "@esbuild/win32-arm64": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.25.9.tgz",
+      "integrity": "sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==",
+      "dev": true,
+      "optional": true
+    },
+    "@esbuild/win32-ia32": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.25.9.tgz",
+      "integrity": "sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==",
+      "dev": true,
+      "optional": true
+    },
+    "@esbuild/win32-x64": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.25.9.tgz",
+      "integrity": "sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==",
+      "dev": true,
+      "optional": true
+    },
+    "@floating-ui/core": {
+      "version": "1.7.3",
+      "resolved": "https://registry.npmmirror.com/@floating-ui/core/-/core-1.7.3.tgz",
+      "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==",
+      "requires": {
+        "@floating-ui/utils": "^0.2.10"
+      }
+    },
+    "@floating-ui/dom": {
+      "version": "1.7.3",
+      "resolved": "https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.7.3.tgz",
+      "integrity": "sha512-uZA413QEpNuhtb3/iIKoYMSK07keHPYeXF02Zhd6e213j+d1NamLix/mCLxBUDW/Gx52sPH2m+chlUsyaBs/Ag==",
+      "requires": {
+        "@floating-ui/core": "^1.7.3",
+        "@floating-ui/utils": "^0.2.10"
+      }
+    },
+    "@floating-ui/utils": {
+      "version": "0.2.10",
+      "resolved": "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.2.10.tgz",
+      "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ=="
+    },
+    "@jridgewell/gen-mapping": {
+      "version": "0.3.13",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
+      "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
+      "dev": true,
+      "requires": {
+        "@jridgewell/sourcemap-codec": "^1.5.0",
+        "@jridgewell/trace-mapping": "^0.3.24"
+      }
+    },
+    "@jridgewell/resolve-uri": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+      "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+      "dev": true
+    },
+    "@jridgewell/sourcemap-codec": {
+      "version": "1.5.5",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+      "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="
+    },
+    "@jridgewell/trace-mapping": {
+      "version": "0.3.30",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz",
+      "integrity": "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==",
+      "dev": true,
+      "requires": {
+        "@jridgewell/resolve-uri": "^3.1.0",
+        "@jridgewell/sourcemap-codec": "^1.4.14"
+      }
+    },
+    "@polka/url": {
+      "version": "1.0.0-next.29",
+      "resolved": "https://registry.npmmirror.com/@polka/url/-/url-1.0.0-next.29.tgz",
+      "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==",
+      "dev": true
+    },
+    "@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=="
+    },
+    "@rolldown/pluginutils": {
+      "version": "1.0.0-beta.29",
+      "resolved": "https://registry.npmmirror.com/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.29.tgz",
+      "integrity": "sha512-NIJgOsMjbxAXvoGq/X0gD7VPMQ8j9g0BiDaNjVNVjvl+iKXxL3Jre0v31RmBYeLEmkbj2s02v8vFTbUXi5XS2Q==",
+      "dev": true
+    },
+    "@rollup/rollup-android-arm-eabi": {
+      "version": "4.46.2",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.46.2.tgz",
+      "integrity": "sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==",
+      "dev": true,
+      "optional": true
+    },
+    "@rollup/rollup-android-arm64": {
+      "version": "4.46.2",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.46.2.tgz",
+      "integrity": "sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ==",
+      "dev": true,
+      "optional": true
+    },
+    "@rollup/rollup-darwin-arm64": {
+      "version": "4.46.2",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.46.2.tgz",
+      "integrity": "sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ==",
+      "dev": true,
+      "optional": true
+    },
+    "@rollup/rollup-darwin-x64": {
+      "version": "4.46.2",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.46.2.tgz",
+      "integrity": "sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA==",
+      "dev": true,
+      "optional": true
+    },
+    "@rollup/rollup-freebsd-arm64": {
+      "version": "4.46.2",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.46.2.tgz",
+      "integrity": "sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg==",
+      "dev": true,
+      "optional": true
+    },
+    "@rollup/rollup-freebsd-x64": {
+      "version": "4.46.2",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.46.2.tgz",
+      "integrity": "sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw==",
+      "dev": true,
+      "optional": true
+    },
+    "@rollup/rollup-linux-arm-gnueabihf": {
+      "version": "4.46.2",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.46.2.tgz",
+      "integrity": "sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA==",
+      "dev": true,
+      "optional": true
+    },
+    "@rollup/rollup-linux-arm-musleabihf": {
+      "version": "4.46.2",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.46.2.tgz",
+      "integrity": "sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ==",
+      "dev": true,
+      "optional": true
+    },
+    "@rollup/rollup-linux-arm64-gnu": {
+      "version": "4.46.2",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.46.2.tgz",
+      "integrity": "sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng==",
+      "dev": true,
+      "optional": true
+    },
+    "@rollup/rollup-linux-arm64-musl": {
+      "version": "4.46.2",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.46.2.tgz",
+      "integrity": "sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg==",
+      "dev": true,
+      "optional": true
+    },
+    "@rollup/rollup-linux-loongarch64-gnu": {
+      "version": "4.46.2",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.46.2.tgz",
+      "integrity": "sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA==",
+      "dev": true,
+      "optional": true
+    },
+    "@rollup/rollup-linux-ppc64-gnu": {
+      "version": "4.46.2",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.46.2.tgz",
+      "integrity": "sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw==",
+      "dev": true,
+      "optional": true
+    },
+    "@rollup/rollup-linux-riscv64-gnu": {
+      "version": "4.46.2",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.46.2.tgz",
+      "integrity": "sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ==",
+      "dev": true,
+      "optional": true
+    },
+    "@rollup/rollup-linux-riscv64-musl": {
+      "version": "4.46.2",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.46.2.tgz",
+      "integrity": "sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw==",
+      "dev": true,
+      "optional": true
+    },
+    "@rollup/rollup-linux-s390x-gnu": {
+      "version": "4.46.2",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.46.2.tgz",
+      "integrity": "sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA==",
+      "dev": true,
+      "optional": true
+    },
+    "@rollup/rollup-linux-x64-gnu": {
+      "version": "4.46.2",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.46.2.tgz",
+      "integrity": "sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA==",
+      "dev": true,
+      "optional": true
+    },
+    "@rollup/rollup-linux-x64-musl": {
+      "version": "4.46.2",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.46.2.tgz",
+      "integrity": "sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA==",
+      "dev": true,
+      "optional": true
+    },
+    "@rollup/rollup-win32-arm64-msvc": {
+      "version": "4.46.2",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.46.2.tgz",
+      "integrity": "sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g==",
+      "dev": true,
+      "optional": true
+    },
+    "@rollup/rollup-win32-ia32-msvc": {
+      "version": "4.46.2",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.46.2.tgz",
+      "integrity": "sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ==",
+      "dev": true,
+      "optional": true
+    },
+    "@rollup/rollup-win32-x64-msvc": {
+      "version": "4.46.2",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.46.2.tgz",
+      "integrity": "sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg==",
+      "dev": true,
+      "optional": true
+    },
+    "@sec-ant/readable-stream": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmmirror.com/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz",
+      "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==",
+      "dev": true
+    },
+    "@sindresorhus/merge-streams": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz",
+      "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==",
+      "dev": true
+    },
+    "@types/estree": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.8.tgz",
+      "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
+      "dev": true
+    },
+    "@types/lodash": {
+      "version": "4.17.20",
+      "resolved": "https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.20.tgz",
+      "integrity": "sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA=="
+    },
+    "@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": "6.0.1",
+      "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-6.0.1.tgz",
+      "integrity": "sha512-+MaE752hU0wfPFJEUAIxqw18+20euHHdxVtMvbFcOEpjEyfqXH/5DCoTHiVJ0J29EhTJdoTkjEv5YBKU9dnoTw==",
+      "dev": true,
+      "requires": {
+        "@rolldown/pluginutils": "1.0.0-beta.29"
+      }
+    },
+    "@vue/babel-helper-vue-transform-on": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmmirror.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.5.0.tgz",
+      "integrity": "sha512-0dAYkerNhhHutHZ34JtTl2czVQHUNWv6xEbkdF5W+Yrv5pCWsqjeORdOgbtW2I9gWlt+wBmVn+ttqN9ZxR5tzA==",
+      "dev": true
+    },
+    "@vue/babel-plugin-jsx": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmmirror.com/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.5.0.tgz",
+      "integrity": "sha512-mneBhw1oOqCd2247O0Yw/mRwC9jIGACAJUlawkmMBiNmL4dGA2eMzuNZVNqOUfYTa6vqmND4CtOPzmEEEqLKFw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-imports": "^7.27.1",
+        "@babel/helper-plugin-utils": "^7.27.1",
+        "@babel/plugin-syntax-jsx": "^7.27.1",
+        "@babel/template": "^7.27.2",
+        "@babel/traverse": "^7.28.0",
+        "@babel/types": "^7.28.2",
+        "@vue/babel-helper-vue-transform-on": "1.5.0",
+        "@vue/babel-plugin-resolve-type": "1.5.0",
+        "@vue/shared": "^3.5.18"
+      }
+    },
+    "@vue/babel-plugin-resolve-type": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmmirror.com/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.5.0.tgz",
+      "integrity": "sha512-Wm/60o+53JwJODm4Knz47dxJnLDJ9FnKnGZJbUUf8nQRAtt6P+undLUAVU3Ha33LxOJe6IPoifRQ6F/0RrU31w==",
+      "dev": true,
+      "requires": {
+        "@babel/code-frame": "^7.27.1",
+        "@babel/helper-module-imports": "^7.27.1",
+        "@babel/helper-plugin-utils": "^7.27.1",
+        "@babel/parser": "^7.28.0",
+        "@vue/compiler-sfc": "^3.5.18"
+      }
+    },
+    "@vue/compiler-core": {
+      "version": "3.5.18",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.18.tgz",
+      "integrity": "sha512-3slwjQrrV1TO8MoXgy3aynDQ7lslj5UqDxuHnrzHtpON5CBinhWjJETciPngpin/T3OuW3tXUf86tEurusnztw==",
+      "requires": {
+        "@babel/parser": "^7.28.0",
+        "@vue/shared": "3.5.18",
+        "entities": "^4.5.0",
+        "estree-walker": "^2.0.2",
+        "source-map-js": "^1.2.1"
+      }
+    },
+    "@vue/compiler-dom": {
+      "version": "3.5.18",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.18.tgz",
+      "integrity": "sha512-RMbU6NTU70++B1JyVJbNbeFkK+A+Q7y9XKE2EM4NLGm2WFR8x9MbAtWxPPLdm0wUkuZv9trpwfSlL6tjdIa1+A==",
+      "requires": {
+        "@vue/compiler-core": "3.5.18",
+        "@vue/shared": "3.5.18"
+      }
+    },
+    "@vue/compiler-sfc": {
+      "version": "3.5.18",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.18.tgz",
+      "integrity": "sha512-5aBjvGqsWs+MoxswZPoTB9nSDb3dhd1x30xrrltKujlCxo48j8HGDNj3QPhF4VIS0VQDUrA1xUfp2hEa+FNyXA==",
+      "requires": {
+        "@babel/parser": "^7.28.0",
+        "@vue/compiler-core": "3.5.18",
+        "@vue/compiler-dom": "3.5.18",
+        "@vue/compiler-ssr": "3.5.18",
+        "@vue/shared": "3.5.18",
+        "estree-walker": "^2.0.2",
+        "magic-string": "^0.30.17",
+        "postcss": "^8.5.6",
+        "source-map-js": "^1.2.1"
+      }
+    },
+    "@vue/compiler-ssr": {
+      "version": "3.5.18",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.18.tgz",
+      "integrity": "sha512-xM16Ak7rSWHkM3m22NlmcdIM+K4BMyFARAfV9hYFl+SFuRzrZ3uGMNW05kA5pmeMa0X9X963Kgou7ufdbpOP9g==",
+      "requires": {
+        "@vue/compiler-dom": "3.5.18",
+        "@vue/shared": "3.5.18"
+      }
+    },
+    "@vue/devtools-api": {
+      "version": "7.7.7",
+      "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-7.7.7.tgz",
+      "integrity": "sha512-lwOnNBH2e7x1fIIbVT7yF5D+YWhqELm55/4ZKf45R9T8r9dE2AIOy8HKjfqzGsoTHFbWbr337O4E0A0QADnjBg==",
+      "requires": {
+        "@vue/devtools-kit": "^7.7.7"
+      }
+    },
+    "@vue/devtools-core": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmmirror.com/@vue/devtools-core/-/devtools-core-8.0.0.tgz",
+      "integrity": "sha512-5bPtF0jAFnaGs4C/4+3vGRR5U+cf6Y8UWK0nJflutEDGepHxl5L9JRaPdHQYCUgrzUaf4cY4waNBEEGXrfcs3A==",
+      "dev": true,
+      "requires": {
+        "@vue/devtools-kit": "^8.0.0",
+        "@vue/devtools-shared": "^8.0.0",
+        "mitt": "^3.0.1",
+        "nanoid": "^5.1.5",
+        "pathe": "^2.0.3",
+        "vite-hot-client": "^2.1.0"
+      },
+      "dependencies": {
+        "@vue/devtools-kit": {
+          "version": "8.0.0",
+          "resolved": "https://registry.npmmirror.com/@vue/devtools-kit/-/devtools-kit-8.0.0.tgz",
+          "integrity": "sha512-b11OeQODkE0bctdT0RhL684pEV2DPXJ80bjpywVCbFn1PxuL3bmMPDoJKjbMnnoWbrnUYXYzFfmMWBZAMhORkQ==",
+          "dev": true,
+          "requires": {
+            "@vue/devtools-shared": "^8.0.0",
+            "birpc": "^2.5.0",
+            "hookable": "^5.5.3",
+            "mitt": "^3.0.1",
+            "perfect-debounce": "^1.0.0",
+            "speakingurl": "^14.0.1",
+            "superjson": "^2.2.2"
+          }
+        },
+        "@vue/devtools-shared": {
+          "version": "8.0.0",
+          "resolved": "https://registry.npmmirror.com/@vue/devtools-shared/-/devtools-shared-8.0.0.tgz",
+          "integrity": "sha512-jrKnbjshQCiOAJanoeJjTU7WaCg0Dz2BUal6SaR6VM/P3hiFdX5Q6Pxl73ZMnrhCxNK9nAg5hvvRGqs+6dtU1g==",
+          "dev": true,
+          "requires": {
+            "rfdc": "^1.4.1"
+          }
+        },
+        "nanoid": {
+          "version": "5.1.5",
+          "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-5.1.5.tgz",
+          "integrity": "sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==",
+          "dev": true
+        }
+      }
+    },
+    "@vue/devtools-kit": {
+      "version": "7.7.7",
+      "resolved": "https://registry.npmmirror.com/@vue/devtools-kit/-/devtools-kit-7.7.7.tgz",
+      "integrity": "sha512-wgoZtxcTta65cnZ1Q6MbAfePVFxfM+gq0saaeytoph7nEa7yMXoi6sCPy4ufO111B9msnw0VOWjPEFCXuAKRHA==",
+      "requires": {
+        "@vue/devtools-shared": "^7.7.7",
+        "birpc": "^2.3.0",
+        "hookable": "^5.5.3",
+        "mitt": "^3.0.1",
+        "perfect-debounce": "^1.0.0",
+        "speakingurl": "^14.0.1",
+        "superjson": "^2.2.2"
+      }
+    },
+    "@vue/devtools-shared": {
+      "version": "7.7.7",
+      "resolved": "https://registry.npmmirror.com/@vue/devtools-shared/-/devtools-shared-7.7.7.tgz",
+      "integrity": "sha512-+udSj47aRl5aKb0memBvcUG9koarqnxNM5yjuREvqwK6T3ap4mn3Zqqc17QrBFTqSMjr3HK1cvStEZpMDpfdyw==",
+      "requires": {
+        "rfdc": "^1.4.1"
+      }
+    },
+    "@vue/reactivity": {
+      "version": "3.5.18",
+      "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.18.tgz",
+      "integrity": "sha512-x0vPO5Imw+3sChLM5Y+B6G1zPjwdOri9e8V21NnTnlEvkxatHEH5B5KEAJcjuzQ7BsjGrKtfzuQ5eQwXh8HXBg==",
+      "requires": {
+        "@vue/shared": "3.5.18"
+      }
+    },
+    "@vue/runtime-core": {
+      "version": "3.5.18",
+      "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.18.tgz",
+      "integrity": "sha512-DUpHa1HpeOQEt6+3nheUfqVXRog2kivkXHUhoqJiKR33SO4x+a5uNOMkV487WPerQkL0vUuRvq/7JhRgLW3S+w==",
+      "requires": {
+        "@vue/reactivity": "3.5.18",
+        "@vue/shared": "3.5.18"
+      }
+    },
+    "@vue/runtime-dom": {
+      "version": "3.5.18",
+      "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.18.tgz",
+      "integrity": "sha512-YwDj71iV05j4RnzZnZtGaXwPoUWeRsqinblgVJwR8XTXYZ9D5PbahHQgsbmzUvCWNF6x7siQ89HgnX5eWkr3mw==",
+      "requires": {
+        "@vue/reactivity": "3.5.18",
+        "@vue/runtime-core": "3.5.18",
+        "@vue/shared": "3.5.18",
+        "csstype": "^3.1.3"
+      }
+    },
+    "@vue/server-renderer": {
+      "version": "3.5.18",
+      "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.18.tgz",
+      "integrity": "sha512-PvIHLUoWgSbDG7zLHqSqaCoZvHi6NNmfVFOqO+OnwvqMz/tqQr3FuGWS8ufluNddk7ZLBJYMrjcw1c6XzR12mA==",
+      "requires": {
+        "@vue/compiler-ssr": "3.5.18",
+        "@vue/shared": "3.5.18"
+      }
+    },
+    "@vue/shared": {
+      "version": "3.5.18",
+      "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.18.tgz",
+      "integrity": "sha512-cZy8Dq+uuIXbxCZpuLd2GJdeSO/lIzIspC2WtkqIpje5QyFbvLaI5wZtdUjLHjGZrlVX6GilejatWwVYYRc8tA=="
+    },
+    "@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": {}
+        }
+      }
+    },
+    "ansis": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmmirror.com/ansis/-/ansis-4.1.0.tgz",
+      "integrity": "sha512-BGcItUBWSMRgOCe+SVZJ+S7yTRG0eGt9cXAHev72yuGcY23hnLA7Bky5L/xLyPINoSN95geovfBkqoTlNZYa7w==",
+      "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=="
+    },
+    "asynckit": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz",
+      "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+    },
+    "axios": {
+      "version": "1.11.0",
+      "resolved": "https://registry.npmmirror.com/axios/-/axios-1.11.0.tgz",
+      "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==",
+      "requires": {
+        "follow-redirects": "^1.15.6",
+        "form-data": "^4.0.4",
+        "proxy-from-env": "^1.1.0"
+      }
+    },
+    "birpc": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmmirror.com/birpc/-/birpc-2.5.0.tgz",
+      "integrity": "sha512-VSWO/W6nNQdyP520F1mhf+Lc2f8pjGQOtoHHm7Ze8Go1kX7akpVIrtTa0fn+HB0QJEDVacl6aO08YE0PgXfdnQ=="
+    },
+    "browserslist": {
+      "version": "4.25.2",
+      "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.25.2.tgz",
+      "integrity": "sha512-0si2SJK3ooGzIawRu61ZdPCO1IncZwS8IzuX73sPZsXW6EQ/w/DAfPyKI8l1ETTCr2MnvqWitmlCUxgdul45jA==",
+      "dev": true,
+      "requires": {
+        "caniuse-lite": "^1.0.30001733",
+        "electron-to-chromium": "^1.5.199",
+        "node-releases": "^2.0.19",
+        "update-browserslist-db": "^1.1.3"
+      }
+    },
+    "bundle-name": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmmirror.com/bundle-name/-/bundle-name-4.1.0.tgz",
+      "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==",
+      "dev": true,
+      "requires": {
+        "run-applescript": "^7.0.0"
+      }
+    },
+    "call-bind-apply-helpers": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
+      "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
+      "requires": {
+        "es-errors": "^1.3.0",
+        "function-bind": "^1.1.2"
+      }
+    },
+    "caniuse-lite": {
+      "version": "1.0.30001735",
+      "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001735.tgz",
+      "integrity": "sha512-EV/laoX7Wq2J9TQlyIXRxTJqIw4sxfXS4OYgudGxBYRuTv0q7AM6yMEpU/Vo1I94thg9U6EZ2NfZx9GJq83u7w==",
+      "dev": true
+    },
+    "combined-stream": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz",
+      "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+      "requires": {
+        "delayed-stream": "~1.0.0"
+      }
+    },
+    "convert-source-map": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-2.0.0.tgz",
+      "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+      "dev": true
+    },
+    "copy-anything": {
+      "version": "3.0.5",
+      "resolved": "https://registry.npmmirror.com/copy-anything/-/copy-anything-3.0.5.tgz",
+      "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==",
+      "requires": {
+        "is-what": "^4.1.8"
+      }
+    },
+    "cross-spawn": {
+      "version": "7.0.6",
+      "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.6.tgz",
+      "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+      "dev": true,
+      "requires": {
+        "path-key": "^3.1.0",
+        "shebang-command": "^2.0.0",
+        "which": "^2.0.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=="
+    },
+    "debug": {
+      "version": "4.4.1",
+      "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.1.tgz",
+      "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
+      "dev": true,
+      "requires": {
+        "ms": "^2.1.3"
+      }
+    },
+    "default-browser": {
+      "version": "5.2.1",
+      "resolved": "https://registry.npmmirror.com/default-browser/-/default-browser-5.2.1.tgz",
+      "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==",
+      "dev": true,
+      "requires": {
+        "bundle-name": "^4.1.0",
+        "default-browser-id": "^5.0.0"
+      }
+    },
+    "default-browser-id": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmmirror.com/default-browser-id/-/default-browser-id-5.0.0.tgz",
+      "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==",
+      "dev": true
+    },
+    "define-lazy-prop": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz",
+      "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==",
+      "dev": true
+    },
+    "delayed-stream": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz",
+      "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
+    },
+    "dunder-proto": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz",
+      "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+      "requires": {
+        "call-bind-apply-helpers": "^1.0.1",
+        "es-errors": "^1.3.0",
+        "gopd": "^1.2.0"
+      }
+    },
+    "electron-to-chromium": {
+      "version": "1.5.201",
+      "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.201.tgz",
+      "integrity": "sha512-ZG65vsrLClodGqywuigc+7m0gr4ISoTQttfVh7nfpLv0M7SIwF4WbFNEOywcqTiujs12AUeeXbFyQieDICAIxg==",
+      "dev": true
+    },
+    "element-plus": {
+      "version": "2.10.7",
+      "resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.10.7.tgz",
+      "integrity": "sha512-bL4yhepL8/0NEQA5+N2Q6ZVKLipIDkiQjK2mqtSmGh6CxJk1yaBMdG5HXfYkbk1htNcT3ULk9g23lzT323JGcA==",
+      "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==",
+      "optional": true,
+      "requires": {
+        "prr": "~1.0.1"
+      }
+    },
+    "error-stack-parser-es": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmmirror.com/error-stack-parser-es/-/error-stack-parser-es-1.0.5.tgz",
+      "integrity": "sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==",
+      "dev": true
+    },
+    "es-define-property": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz",
+      "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="
+    },
+    "es-errors": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz",
+      "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="
+    },
+    "es-object-atoms": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
+      "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
+      "requires": {
+        "es-errors": "^1.3.0"
+      }
+    },
+    "es-set-tostringtag": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
+      "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
+      "requires": {
+        "es-errors": "^1.3.0",
+        "get-intrinsic": "^1.2.6",
+        "has-tostringtag": "^1.0.2",
+        "hasown": "^2.0.2"
+      }
+    },
+    "esbuild": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.25.9.tgz",
+      "integrity": "sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==",
+      "dev": true,
+      "requires": {
+        "@esbuild/aix-ppc64": "0.25.9",
+        "@esbuild/android-arm": "0.25.9",
+        "@esbuild/android-arm64": "0.25.9",
+        "@esbuild/android-x64": "0.25.9",
+        "@esbuild/darwin-arm64": "0.25.9",
+        "@esbuild/darwin-x64": "0.25.9",
+        "@esbuild/freebsd-arm64": "0.25.9",
+        "@esbuild/freebsd-x64": "0.25.9",
+        "@esbuild/linux-arm": "0.25.9",
+        "@esbuild/linux-arm64": "0.25.9",
+        "@esbuild/linux-ia32": "0.25.9",
+        "@esbuild/linux-loong64": "0.25.9",
+        "@esbuild/linux-mips64el": "0.25.9",
+        "@esbuild/linux-ppc64": "0.25.9",
+        "@esbuild/linux-riscv64": "0.25.9",
+        "@esbuild/linux-s390x": "0.25.9",
+        "@esbuild/linux-x64": "0.25.9",
+        "@esbuild/netbsd-arm64": "0.25.9",
+        "@esbuild/netbsd-x64": "0.25.9",
+        "@esbuild/openbsd-arm64": "0.25.9",
+        "@esbuild/openbsd-x64": "0.25.9",
+        "@esbuild/openharmony-arm64": "0.25.9",
+        "@esbuild/sunos-x64": "0.25.9",
+        "@esbuild/win32-arm64": "0.25.9",
+        "@esbuild/win32-ia32": "0.25.9",
+        "@esbuild/win32-x64": "0.25.9"
+      }
+    },
+    "escalade": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz",
+      "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+      "dev": true
+    },
+    "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=="
+    },
+    "execa": {
+      "version": "9.6.0",
+      "resolved": "https://registry.npmmirror.com/execa/-/execa-9.6.0.tgz",
+      "integrity": "sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw==",
+      "dev": true,
+      "requires": {
+        "@sindresorhus/merge-streams": "^4.0.0",
+        "cross-spawn": "^7.0.6",
+        "figures": "^6.1.0",
+        "get-stream": "^9.0.0",
+        "human-signals": "^8.0.1",
+        "is-plain-obj": "^4.1.0",
+        "is-stream": "^4.0.1",
+        "npm-run-path": "^6.0.0",
+        "pretty-ms": "^9.2.0",
+        "signal-exit": "^4.1.0",
+        "strip-final-newline": "^4.0.0",
+        "yoctocolors": "^2.1.1"
+      }
+    },
+    "fdir": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/fdir/-/fdir-6.5.0.tgz",
+      "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+      "dev": true,
+      "requires": {}
+    },
+    "figures": {
+      "version": "6.1.0",
+      "resolved": "https://registry.npmmirror.com/figures/-/figures-6.1.0.tgz",
+      "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==",
+      "dev": true,
+      "requires": {
+        "is-unicode-supported": "^2.0.0"
+      }
+    },
+    "follow-redirects": {
+      "version": "1.15.11",
+      "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.11.tgz",
+      "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ=="
+    },
+    "form-data": {
+      "version": "4.0.4",
+      "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.4.tgz",
+      "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
+      "requires": {
+        "asynckit": "^0.4.0",
+        "combined-stream": "^1.0.8",
+        "es-set-tostringtag": "^2.1.0",
+        "hasown": "^2.0.2",
+        "mime-types": "^2.1.12"
+      }
+    },
+    "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
+    },
+    "function-bind": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz",
+      "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="
+    },
+    "gensync": {
+      "version": "1.0.0-beta.2",
+      "resolved": "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz",
+      "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+      "dev": true
+    },
+    "get-intrinsic": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
+      "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
+      "requires": {
+        "call-bind-apply-helpers": "^1.0.2",
+        "es-define-property": "^1.0.1",
+        "es-errors": "^1.3.0",
+        "es-object-atoms": "^1.1.1",
+        "function-bind": "^1.1.2",
+        "get-proto": "^1.0.1",
+        "gopd": "^1.2.0",
+        "has-symbols": "^1.1.0",
+        "hasown": "^2.0.2",
+        "math-intrinsics": "^1.1.0"
+      }
+    },
+    "get-proto": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz",
+      "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+      "requires": {
+        "dunder-proto": "^1.0.1",
+        "es-object-atoms": "^1.0.0"
+      }
+    },
+    "get-stream": {
+      "version": "9.0.1",
+      "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-9.0.1.tgz",
+      "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==",
+      "dev": true,
+      "requires": {
+        "@sec-ant/readable-stream": "^0.4.1",
+        "is-stream": "^4.0.1"
+      }
+    },
+    "gopd": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz",
+      "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="
+    },
+    "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==",
+      "optional": true
+    },
+    "has-symbols": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz",
+      "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="
+    },
+    "has-tostringtag": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+      "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+      "requires": {
+        "has-symbols": "^1.0.3"
+      }
+    },
+    "hasown": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz",
+      "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+      "requires": {
+        "function-bind": "^1.1.2"
+      }
+    },
+    "hookable": {
+      "version": "5.5.3",
+      "resolved": "https://registry.npmmirror.com/hookable/-/hookable-5.5.3.tgz",
+      "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ=="
+    },
+    "human-signals": {
+      "version": "8.0.1",
+      "resolved": "https://registry.npmmirror.com/human-signals/-/human-signals-8.0.1.tgz",
+      "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==",
+      "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==",
+      "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==",
+      "optional": true
+    },
+    "is-docker": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/is-docker/-/is-docker-3.0.0.tgz",
+      "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==",
+      "dev": true
+    },
+    "is-inside-container": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/is-inside-container/-/is-inside-container-1.0.0.tgz",
+      "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==",
+      "dev": true,
+      "requires": {
+        "is-docker": "^3.0.0"
+      }
+    },
+    "is-plain-obj": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
+      "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
+      "dev": true
+    },
+    "is-stream": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-4.0.1.tgz",
+      "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==",
+      "dev": true
+    },
+    "is-unicode-supported": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz",
+      "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==",
+      "dev": true
+    },
+    "is-what": {
+      "version": "4.1.16",
+      "resolved": "https://registry.npmmirror.com/is-what/-/is-what-4.1.16.tgz",
+      "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A=="
+    },
+    "is-wsl": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-3.1.0.tgz",
+      "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==",
+      "dev": true,
+      "requires": {
+        "is-inside-container": "^1.0.0"
+      }
+    },
+    "isexe": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz",
+      "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+      "dev": true
+    },
+    "js-tokens": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz",
+      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+      "dev": true
+    },
+    "jsesc": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-3.1.0.tgz",
+      "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
+      "dev": true
+    },
+    "json5": {
+      "version": "2.2.3",
+      "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz",
+      "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+      "dev": true
+    },
+    "kolorist": {
+      "version": "1.8.0",
+      "resolved": "https://registry.npmmirror.com/kolorist/-/kolorist-1.8.0.tgz",
+      "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==",
+      "dev": true
+    },
+    "less": {
+      "version": "4.4.0",
+      "resolved": "https://registry.npmmirror.com/less/-/less-4.4.0.tgz",
+      "integrity": "sha512-kdTwsyRuncDfjEs0DlRILWNvxhDG/Zij4YLO4TMJgDLW+8OzpfkdPnRgrsRuY1o+oaxJGWsps5f/RVBgGmmN0w==",
+      "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"
+      },
+      "dependencies": {
+        "copy-anything": {
+          "version": "2.0.6",
+          "resolved": "https://registry.npmmirror.com/copy-anything/-/copy-anything-2.0.6.tgz",
+          "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==",
+          "requires": {
+            "is-what": "^3.14.1"
+          }
+        },
+        "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=="
+        }
+      }
+    },
+    "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": {}
+    },
+    "lru-cache": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz",
+      "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+      "dev": true,
+      "requires": {
+        "yallist": "^3.0.2"
+      }
+    },
+    "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==",
+      "optional": true,
+      "requires": {
+        "pify": "^4.0.1",
+        "semver": "^5.6.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "5.7.2",
+          "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz",
+          "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+          "optional": true
+        }
+      }
+    },
+    "math-intrinsics": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+      "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="
+    },
+    "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==",
+      "optional": true
+    },
+    "mime-db": {
+      "version": "1.52.0",
+      "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz",
+      "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+    },
+    "mime-types": {
+      "version": "2.1.35",
+      "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz",
+      "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+      "requires": {
+        "mime-db": "1.52.0"
+      }
+    },
+    "mitt": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmmirror.com/mitt/-/mitt-3.0.1.tgz",
+      "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw=="
+    },
+    "moment": {
+      "version": "2.30.1",
+      "resolved": "https://registry.npmmirror.com/moment/-/moment-2.30.1.tgz",
+      "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how=="
+    },
+    "mrmime": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/mrmime/-/mrmime-2.0.1.tgz",
+      "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==",
+      "dev": true
+    },
+    "ms": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz",
+      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+      "dev": true
+    },
+    "nanoid": {
+      "version": "3.3.11",
+      "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.11.tgz",
+      "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="
+    },
+    "needle": {
+      "version": "3.3.1",
+      "resolved": "https://registry.npmmirror.com/needle/-/needle-3.3.1.tgz",
+      "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==",
+      "optional": true,
+      "requires": {
+        "iconv-lite": "^0.6.3",
+        "sax": "^1.2.4"
+      }
+    },
+    "node-releases": {
+      "version": "2.0.19",
+      "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.19.tgz",
+      "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==",
+      "dev": true
+    },
+    "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=="
+    },
+    "npm-run-path": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-6.0.0.tgz",
+      "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==",
+      "dev": true,
+      "requires": {
+        "path-key": "^4.0.0",
+        "unicorn-magic": "^0.3.0"
+      },
+      "dependencies": {
+        "path-key": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/path-key/-/path-key-4.0.0.tgz",
+          "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
+          "dev": true
+        }
+      }
+    },
+    "ohash": {
+      "version": "2.0.11",
+      "resolved": "https://registry.npmmirror.com/ohash/-/ohash-2.0.11.tgz",
+      "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==",
+      "dev": true
+    },
+    "open": {
+      "version": "10.2.0",
+      "resolved": "https://registry.npmmirror.com/open/-/open-10.2.0.tgz",
+      "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==",
+      "dev": true,
+      "requires": {
+        "default-browser": "^5.2.1",
+        "define-lazy-prop": "^3.0.0",
+        "is-inside-container": "^1.0.0",
+        "wsl-utils": "^0.1.0"
+      }
+    },
+    "parse-ms": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/parse-ms/-/parse-ms-4.0.0.tgz",
+      "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==",
+      "dev": true
+    },
+    "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=="
+    },
+    "path-key": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz",
+      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+      "dev": true
+    },
+    "pathe": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmmirror.com/pathe/-/pathe-2.0.3.tgz",
+      "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
+      "dev": true
+    },
+    "perfect-debounce": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/perfect-debounce/-/perfect-debounce-1.0.0.tgz",
+      "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA=="
+    },
+    "picocolors": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz",
+      "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
+    },
+    "picomatch": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.3.tgz",
+      "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+      "dev": true
+    },
+    "pify": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz",
+      "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+      "optional": true
+    },
+    "pinia": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmmirror.com/pinia/-/pinia-3.0.3.tgz",
+      "integrity": "sha512-ttXO/InUULUXkMHpTdp9Fj4hLpD/2AoJdmAbAeW2yu1iy1k+pkFekQXw5VpC0/5p51IOR/jDaDRfRWRnMMsGOA==",
+      "requires": {
+        "@vue/devtools-api": "^7.7.2"
+      }
+    },
+    "postcss": {
+      "version": "8.5.6",
+      "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.6.tgz",
+      "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
+      "requires": {
+        "nanoid": "^3.3.11",
+        "picocolors": "^1.1.1",
+        "source-map-js": "^1.2.1"
+      }
+    },
+    "prettier": {
+      "version": "3.6.2",
+      "resolved": "https://registry.npmmirror.com/prettier/-/prettier-3.6.2.tgz",
+      "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==",
+      "dev": true
+    },
+    "pretty-ms": {
+      "version": "9.2.0",
+      "resolved": "https://registry.npmmirror.com/pretty-ms/-/pretty-ms-9.2.0.tgz",
+      "integrity": "sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==",
+      "dev": true,
+      "requires": {
+        "parse-ms": "^4.0.0"
+      }
+    },
+    "proxy-from-env": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+      "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+    },
+    "prr": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/prr/-/prr-1.0.1.tgz",
+      "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==",
+      "optional": true
+    },
+    "rfdc": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmmirror.com/rfdc/-/rfdc-1.4.1.tgz",
+      "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA=="
+    },
+    "rollup": {
+      "version": "4.46.2",
+      "resolved": "https://registry.npmmirror.com/rollup/-/rollup-4.46.2.tgz",
+      "integrity": "sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg==",
+      "dev": true,
+      "requires": {
+        "@rollup/rollup-android-arm-eabi": "4.46.2",
+        "@rollup/rollup-android-arm64": "4.46.2",
+        "@rollup/rollup-darwin-arm64": "4.46.2",
+        "@rollup/rollup-darwin-x64": "4.46.2",
+        "@rollup/rollup-freebsd-arm64": "4.46.2",
+        "@rollup/rollup-freebsd-x64": "4.46.2",
+        "@rollup/rollup-linux-arm-gnueabihf": "4.46.2",
+        "@rollup/rollup-linux-arm-musleabihf": "4.46.2",
+        "@rollup/rollup-linux-arm64-gnu": "4.46.2",
+        "@rollup/rollup-linux-arm64-musl": "4.46.2",
+        "@rollup/rollup-linux-loongarch64-gnu": "4.46.2",
+        "@rollup/rollup-linux-ppc64-gnu": "4.46.2",
+        "@rollup/rollup-linux-riscv64-gnu": "4.46.2",
+        "@rollup/rollup-linux-riscv64-musl": "4.46.2",
+        "@rollup/rollup-linux-s390x-gnu": "4.46.2",
+        "@rollup/rollup-linux-x64-gnu": "4.46.2",
+        "@rollup/rollup-linux-x64-musl": "4.46.2",
+        "@rollup/rollup-win32-arm64-msvc": "4.46.2",
+        "@rollup/rollup-win32-ia32-msvc": "4.46.2",
+        "@rollup/rollup-win32-x64-msvc": "4.46.2",
+        "@types/estree": "1.0.8",
+        "fsevents": "~2.3.2"
+      }
+    },
+    "run-applescript": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmmirror.com/run-applescript/-/run-applescript-7.0.0.tgz",
+      "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==",
+      "dev": true
+    },
+    "safer-buffer": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz",
+      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+      "optional": true
+    },
+    "sax": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmmirror.com/sax/-/sax-1.4.1.tgz",
+      "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==",
+      "optional": true
+    },
+    "semver": {
+      "version": "6.3.1",
+      "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz",
+      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+      "dev": true
+    },
+    "shebang-command": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz",
+      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+      "dev": true,
+      "requires": {
+        "shebang-regex": "^3.0.0"
+      }
+    },
+    "shebang-regex": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz",
+      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+      "dev": true
+    },
+    "signal-exit": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-4.1.0.tgz",
+      "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+      "dev": true
+    },
+    "sirv": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmmirror.com/sirv/-/sirv-3.0.1.tgz",
+      "integrity": "sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==",
+      "dev": true,
+      "requires": {
+        "@polka/url": "^1.0.0-next.24",
+        "mrmime": "^2.0.0",
+        "totalist": "^3.0.0"
+      }
+    },
+    "source-map": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz",
+      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+      "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=="
+    },
+    "spark-md5": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmmirror.com/spark-md5/-/spark-md5-3.0.2.tgz",
+      "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw=="
+    },
+    "speakingurl": {
+      "version": "14.0.1",
+      "resolved": "https://registry.npmmirror.com/speakingurl/-/speakingurl-14.0.1.tgz",
+      "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ=="
+    },
+    "strip-final-newline": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-4.0.0.tgz",
+      "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==",
+      "dev": true
+    },
+    "superjson": {
+      "version": "2.2.2",
+      "resolved": "https://registry.npmmirror.com/superjson/-/superjson-2.2.2.tgz",
+      "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==",
+      "requires": {
+        "copy-anything": "^3.0.2"
+      }
+    },
+    "tinyglobby": {
+      "version": "0.2.14",
+      "resolved": "https://registry.npmmirror.com/tinyglobby/-/tinyglobby-0.2.14.tgz",
+      "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==",
+      "dev": true,
+      "requires": {
+        "fdir": "^6.4.4",
+        "picomatch": "^4.0.2"
+      }
+    },
+    "totalist": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmmirror.com/totalist/-/totalist-3.0.1.tgz",
+      "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==",
+      "dev": true
+    },
+    "tslib": {
+      "version": "2.8.1",
+      "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz",
+      "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="
+    },
+    "unicorn-magic": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmmirror.com/unicorn-magic/-/unicorn-magic-0.3.0.tgz",
+      "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==",
+      "dev": true
+    },
+    "unplugin-utils": {
+      "version": "0.2.5",
+      "resolved": "https://registry.npmmirror.com/unplugin-utils/-/unplugin-utils-0.2.5.tgz",
+      "integrity": "sha512-gwXJnPRewT4rT7sBi/IvxKTjsms7jX7QIDLOClApuZwR49SXbrB1z2NLUZ+vDHyqCj/n58OzRRqaW+B8OZi8vg==",
+      "dev": true,
+      "requires": {
+        "pathe": "^2.0.3",
+        "picomatch": "^4.0.3"
+      }
+    },
+    "update-browserslist-db": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz",
+      "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==",
+      "dev": true,
+      "requires": {
+        "escalade": "^3.2.0",
+        "picocolors": "^1.1.1"
+      }
+    },
+    "vite": {
+      "version": "7.1.2",
+      "resolved": "https://registry.npmmirror.com/vite/-/vite-7.1.2.tgz",
+      "integrity": "sha512-J0SQBPlQiEXAF7tajiH+rUooJPo0l8KQgyg4/aMunNtrOa7bwuZJsJbDWzeljqQpgftxuq5yNJxQ91O9ts29UQ==",
+      "dev": true,
+      "requires": {
+        "esbuild": "^0.25.0",
+        "fdir": "^6.4.6",
+        "fsevents": "~2.3.3",
+        "picomatch": "^4.0.3",
+        "postcss": "^8.5.6",
+        "rollup": "^4.43.0",
+        "tinyglobby": "^0.2.14"
+      }
+    },
+    "vite-dev-rpc": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/vite-dev-rpc/-/vite-dev-rpc-1.1.0.tgz",
+      "integrity": "sha512-pKXZlgoXGoE8sEKiKJSng4hI1sQ4wi5YT24FCrwrLt6opmkjlqPPVmiPWWJn8M8byMxRGzp1CrFuqQs4M/Z39A==",
+      "dev": true,
+      "requires": {
+        "birpc": "^2.4.0",
+        "vite-hot-client": "^2.1.0"
+      }
+    },
+    "vite-hot-client": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/vite-hot-client/-/vite-hot-client-2.1.0.tgz",
+      "integrity": "sha512-7SpgZmU7R+dDnSmvXE1mfDtnHLHQSisdySVR7lO8ceAXvM0otZeuQQ6C8LrS5d/aYyP/QZ0hI0L+dIPrm4YlFQ==",
+      "dev": true,
+      "requires": {}
+    },
+    "vite-plugin-inspect": {
+      "version": "11.3.2",
+      "resolved": "https://registry.npmmirror.com/vite-plugin-inspect/-/vite-plugin-inspect-11.3.2.tgz",
+      "integrity": "sha512-nzwvyFQg58XSMAmKVLr2uekAxNYvAbz1lyPmCAFVIBncCgN9S/HPM+2UM9Q9cvc4JEbC5ZBgwLAdaE2onmQuKg==",
+      "dev": true,
+      "requires": {
+        "ansis": "^4.1.0",
+        "debug": "^4.4.1",
+        "error-stack-parser-es": "^1.0.5",
+        "ohash": "^2.0.11",
+        "open": "^10.2.0",
+        "perfect-debounce": "^1.0.0",
+        "sirv": "^3.0.1",
+        "unplugin-utils": "^0.2.4",
+        "vite-dev-rpc": "^1.1.0"
+      }
+    },
+    "vite-plugin-vue-devtools": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmmirror.com/vite-plugin-vue-devtools/-/vite-plugin-vue-devtools-8.0.0.tgz",
+      "integrity": "sha512-9bWQig8UMu3nPbxX86NJv56aelpFYoBHxB5+pxuQz3pa3Tajc1ezRidj/0dnADA4/UHuVIfwIVYHOvMXYcPshg==",
+      "dev": true,
+      "requires": {
+        "@vue/devtools-core": "^8.0.0",
+        "@vue/devtools-kit": "^8.0.0",
+        "@vue/devtools-shared": "^8.0.0",
+        "execa": "^9.6.0",
+        "sirv": "^3.0.1",
+        "vite-plugin-inspect": "^11.3.0",
+        "vite-plugin-vue-inspector": "^5.3.2"
+      },
+      "dependencies": {
+        "@vue/devtools-kit": {
+          "version": "8.0.0",
+          "resolved": "https://registry.npmmirror.com/@vue/devtools-kit/-/devtools-kit-8.0.0.tgz",
+          "integrity": "sha512-b11OeQODkE0bctdT0RhL684pEV2DPXJ80bjpywVCbFn1PxuL3bmMPDoJKjbMnnoWbrnUYXYzFfmMWBZAMhORkQ==",
+          "dev": true,
+          "requires": {
+            "@vue/devtools-shared": "^8.0.0",
+            "birpc": "^2.5.0",
+            "hookable": "^5.5.3",
+            "mitt": "^3.0.1",
+            "perfect-debounce": "^1.0.0",
+            "speakingurl": "^14.0.1",
+            "superjson": "^2.2.2"
+          }
+        },
+        "@vue/devtools-shared": {
+          "version": "8.0.0",
+          "resolved": "https://registry.npmmirror.com/@vue/devtools-shared/-/devtools-shared-8.0.0.tgz",
+          "integrity": "sha512-jrKnbjshQCiOAJanoeJjTU7WaCg0Dz2BUal6SaR6VM/P3hiFdX5Q6Pxl73ZMnrhCxNK9nAg5hvvRGqs+6dtU1g==",
+          "dev": true,
+          "requires": {
+            "rfdc": "^1.4.1"
+          }
+        }
+      }
+    },
+    "vite-plugin-vue-inspector": {
+      "version": "5.3.2",
+      "resolved": "https://registry.npmmirror.com/vite-plugin-vue-inspector/-/vite-plugin-vue-inspector-5.3.2.tgz",
+      "integrity": "sha512-YvEKooQcSiBTAs0DoYLfefNja9bLgkFM7NI2b07bE2SruuvX0MEa9cMaxjKVMkeCp5Nz9FRIdcN1rOdFVBeL6Q==",
+      "dev": true,
+      "requires": {
+        "@babel/core": "^7.23.0",
+        "@babel/plugin-proposal-decorators": "^7.23.0",
+        "@babel/plugin-syntax-import-attributes": "^7.22.5",
+        "@babel/plugin-syntax-import-meta": "^7.10.4",
+        "@babel/plugin-transform-typescript": "^7.22.15",
+        "@vue/babel-plugin-jsx": "^1.1.5",
+        "@vue/compiler-dom": "^3.3.4",
+        "kolorist": "^1.8.0",
+        "magic-string": "^0.30.4"
+      }
+    },
+    "vue": {
+      "version": "3.5.18",
+      "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.18.tgz",
+      "integrity": "sha512-7W4Y4ZbMiQ3SEo+m9lnoNpV9xG7QVMLa+/0RFwwiAVkeYoyGXqWE85jabU4pllJNUzqfLShJ5YLptewhCWUgNA==",
+      "requires": {
+        "@vue/compiler-dom": "3.5.18",
+        "@vue/compiler-sfc": "3.5.18",
+        "@vue/runtime-dom": "3.5.18",
+        "@vue/server-renderer": "3.5.18",
+        "@vue/shared": "3.5.18"
+      }
+    },
+    "vue-router": {
+      "version": "4.5.1",
+      "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.5.1.tgz",
+      "integrity": "sha512-ogAF3P97NPm8fJsE4by9dwSYtDwXIY1nFY9T6DyQnGHd1E2Da94w9JIolpe42LJGIl0DwOHBi8TcRPlPGwbTtw==",
+      "requires": {
+        "@vue/devtools-api": "^6.6.4"
+      },
+      "dependencies": {
+        "@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=="
+        }
+      }
+    },
+    "which": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz",
+      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+      "dev": true,
+      "requires": {
+        "isexe": "^2.0.0"
+      }
+    },
+    "wsl-utils": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmmirror.com/wsl-utils/-/wsl-utils-0.1.0.tgz",
+      "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==",
+      "dev": true,
+      "requires": {
+        "is-wsl": "^3.1.0"
+      }
+    },
+    "yallist": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz",
+      "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+      "dev": true
+    },
+    "yoctocolors": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/yoctocolors/-/yoctocolors-2.1.1.tgz",
+      "integrity": "sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==",
+      "dev": true
+    }
+  }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..a25d83a
--- /dev/null
+++ b/package.json
@@ -0,0 +1,31 @@
+{
+  "name": "xiehe",
+  "version": "0.0.0",
+  "private": true,
+  "type": "module",
+  "engines": {
+    "node": "^20.19.0 || >=22.12.0"
+  },
+  "scripts": {
+    "dev": "vite",
+    "build": "vite build",
+    "preview": "vite preview",
+    "format": "prettier --write src/"
+  },
+  "dependencies": {
+    "axios": "^1.11.0",
+    "element-plus": "^2.10.7",
+    "less": "^4.4.0",
+    "moment": "^2.30.1",
+    "pinia": "^3.0.3",
+    "spark-md5": "^3.0.2",
+    "vue": "^3.5.18",
+    "vue-router": "^4.5.1"
+  },
+  "devDependencies": {
+    "@vitejs/plugin-vue": "^6.0.1",
+    "prettier": "3.6.2",
+    "vite": "^7.0.6",
+    "vite-plugin-vue-devtools": "^8.0.0"
+  }
+}
diff --git a/public/favicon.ico b/public/favicon.ico
new file mode 100644
index 0000000..df36fcf
--- /dev/null
+++ b/public/favicon.ico
Binary files differ
diff --git a/src/App.vue b/src/App.vue
new file mode 100644
index 0000000..24f73b1
--- /dev/null
+++ b/src/App.vue
@@ -0,0 +1,13 @@
+<script setup>
+import { RouterView } from 'vue-router'
+</script>
+
+<template>
+  <RouterView />
+</template>
+
+<style scoped>
+#app {
+  width: 100%;
+}
+</style>
diff --git a/src/assets/base.css b/src/assets/base.css
new file mode 100644
index 0000000..8816868
--- /dev/null
+++ b/src/assets/base.css
@@ -0,0 +1,86 @@
+/* color palette from <https://github.com/vuejs/theme> */
+:root {
+  --vt-c-white: #ffffff;
+  --vt-c-white-soft: #f8f8f8;
+  --vt-c-white-mute: #f2f2f2;
+
+  --vt-c-black: #181818;
+  --vt-c-black-soft: #222222;
+  --vt-c-black-mute: #282828;
+
+  --vt-c-indigo: #2c3e50;
+
+  --vt-c-divider-light-1: rgba(60, 60, 60, 0.29);
+  --vt-c-divider-light-2: rgba(60, 60, 60, 0.12);
+  --vt-c-divider-dark-1: rgba(84, 84, 84, 0.65);
+  --vt-c-divider-dark-2: rgba(84, 84, 84, 0.48);
+
+  --vt-c-text-light-1: var(--vt-c-indigo);
+  --vt-c-text-light-2: rgba(60, 60, 60, 0.66);
+  --vt-c-text-dark-1: var(--vt-c-white);
+  --vt-c-text-dark-2: rgba(235, 235, 235, 0.64);
+}
+
+/* semantic color variables for this project */
+:root {
+  --color-background: var(--vt-c-white);
+  --color-background-soft: var(--vt-c-white-soft);
+  --color-background-mute: var(--vt-c-white-mute);
+
+  --color-border: var(--vt-c-divider-light-2);
+  --color-border-hover: var(--vt-c-divider-light-1);
+
+  --color-heading: var(--vt-c-text-light-1);
+  --color-text: var(--vt-c-text-light-1);
+
+  --section-gap: 160px;
+}
+
+@media (prefers-color-scheme: dark) {
+  :root {
+    --color-background: var(--vt-c-black);
+    --color-background-soft: var(--vt-c-black-soft);
+    --color-background-mute: var(--vt-c-black-mute);
+
+    --color-border: var(--vt-c-divider-dark-2);
+    --color-border-hover: var(--vt-c-divider-dark-1);
+
+    --color-heading: var(--vt-c-text-dark-1);
+    --color-text: var(--vt-c-text-dark-2);
+  }
+}
+
+*,
+*::before,
+*::after {
+  box-sizing: border-box;
+  margin: 0;
+  font-weight: normal;
+}
+
+body {
+  min-height: 100vh;
+  color: var(--color-text);
+  background: var(--color-background);
+  transition:
+    color 0.5s,
+    background-color 0.5s;
+  line-height: 1.6;
+  font-family:
+    Inter,
+    -apple-system,
+    BlinkMacSystemFont,
+    'Segoe UI',
+    Roboto,
+    Oxygen,
+    Ubuntu,
+    Cantarell,
+    'Fira Sans',
+    'Droid Sans',
+    'Helvetica Neue',
+    sans-serif;
+  font-size: 15px;
+  text-rendering: optimizeLegibility;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
diff --git a/src/assets/images/bookStore/shoucang.svg b/src/assets/images/bookStore/shoucang.svg
new file mode 100644
index 0000000..242ec9a
--- /dev/null
+++ b/src/assets/images/bookStore/shoucang.svg
@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1669360744685" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1168" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M766.976 692.224h-190.464c-14.336 0-26.112-11.776-26.112-26.112s11.776-26.112 26.112-26.112h190.464c14.336 0 26.112 11.776 26.112 26.112s-11.776 26.112-26.112 26.112z" fill="#009A44" p-id="1169"></path><path d="M645.632 761.344v-190.464c0-14.336 11.776-26.112 26.112-26.112s26.112 11.776 26.112 26.112v190.464c0 14.336-11.776 26.112-26.112 26.112s-26.112-11.776-26.112-26.112zM508.928 855.552c-6.656 0-12.8-2.56-17.92-7.168l-299.008-299.008c-43.008-43.008-67.072-100.864-67.072-161.792s24.064-118.784 67.072-161.792c42.496-42.496 103.424-58.368 171.008-45.056 57.856 11.264 116.736 43.52 161.28 88.064 9.728 9.728 9.728 26.112 0 35.84-9.728 9.728-26.112 9.728-35.84 0C415.232 231.424 294.912 194.048 227.84 261.12c-33.792 33.792-52.224 78.336-52.224 125.952s18.432 92.672 52.224 125.952l299.008 299.008c9.728 9.728 9.728 26.112 0 35.84-5.12 5.632-11.264 7.68-17.92 7.68z" fill="#009A44" p-id="1170"></path><path d="M812.544 556.544c-6.656 0-12.8-2.56-17.92-7.168-9.728-9.728-9.728-26.112 0-35.84 33.792-33.792 52.224-78.336 52.224-125.952s-18.432-92.672-52.224-125.952c-41.472-41.472-98.816-38.4-129.536-33.28-50.176 8.704-101.888 35.84-138.24 72.192-9.728 9.728-26.112 9.728-35.84 0-9.728-9.728-9.728-26.112 0-35.84 44.032-44.032 104.448-75.776 165.376-86.016 69.632-12.288 131.584 4.608 174.08 47.104 43.008 43.008 67.072 100.864 67.072 161.792 0 60.928-23.552 118.784-67.072 161.792-5.12 4.608-11.776 7.168-17.92 7.168z" fill="#009A44" p-id="1171"></path></svg>
\ No newline at end of file
diff --git a/src/assets/images/bookStore/testImg.png b/src/assets/images/bookStore/testImg.png
new file mode 100644
index 0000000..66e5237
--- /dev/null
+++ b/src/assets/images/bookStore/testImg.png
Binary files differ
diff --git a/src/assets/images/bookStore/tianmaologo2.svg b/src/assets/images/bookStore/tianmaologo2.svg
new file mode 100644
index 0000000..faf3318
--- /dev/null
+++ b/src/assets/images/bookStore/tianmaologo2.svg
@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1679558961529" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3002" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M461.842647 631.286804l22.067598-39.22128c-100.392478-56.483432-154.764829-113.929796-170.871669-182.065616l169.512718 0 0-45.008077-174.657902 0-0.050142-17.422811 0-77.797877 156.564825 0 0-44.99989L106.133226 224.771253l0 44.99989 156.709111 0 0 77.738525-0.042979 17.482163L88.473007 364.991832l0 45.008077 169.181167 0c-16.114003 68.13582-70.487378 125.583207-170.879855 182.065616l22.075785 39.22128c61.946864-34.853809 139.065266-86.675058 176.499853-165.742858 9.695826 20.555152 22.449291 40.244586 38.34226 58.924018C355.600951 561.991578 400.796292 596.934414 461.842647 631.286804z" fill="#DA1726" p-id="3003"></path><path d="M640.32976 432.744935c0.144286-50.42546 0.296759-98.048083-0.152473-132.307352-0.288572-21.99085-7.302313-39.795355-20.85191-52.950979-25.157983-24.414039-64.714907-23.735587-85.975117-23.378453-2.181689 0.041956-4.177136 0.076748-5.943362 0.076748l0 45.01217c1.995447 0 4.245697-0.047072 6.707772-0.089028 14.721283-0.25071 42.129516-0.713244 53.862745 10.68127 1.732457 1.681292 7.004531 6.7968 7.190773 21.22644 0.067538 4.924149 0.119727 10.163477 0.161682 15.631002l-69.910233 41.692564 23.059182 38.644135 46.986127-28.018124c-0.00921 15.945157-0.050142 32.81129-0.102331 50.127677l-69.944002 41.72224 23.059182 38.657438 46.731324-27.883047c-0.025583 12.905938-0.042979 25.735128-0.042979 38.300304 0 10.31595-6.070252 26.736944-13.270235 35.846416-20.886703 26.447349-56.478316 46.867424-56.809867 47.062875l22.159696 39.167045c1.765203-1.001817 43.522236-24.852014 69.969585-58.337663 13.525038-17.116843 22.957875-43.326784 22.957875-63.73765C640.176264 484.715587 640.253012 458.462666 640.32976 432.744935z" fill="#DA1726" p-id="3004"></path><path d="M708.015326 333.907882 753.032612 333.907882 753.032612 297.712519 848.710718 297.712519 848.710718 333.907882 893.719818 333.907882 893.719818 297.712519 937.080372 297.712519 937.080372 252.704442 893.719818 252.704442 893.719818 223.412302 848.710718 223.412302 848.710718 252.704442 753.032612 252.704442 753.032612 223.412302 708.015326 223.412302 708.015326 252.704442 665.621796 252.704442 665.621796 297.712519 708.015326 297.712519Z" fill="#DA1726" p-id="3005"></path><path d="M732.450854 633.655757l137.800459 0c36.763298 0 66.829058-30.072923 66.829058-66.833151L937.080372 391.660214l0-27.865651L665.621796 363.794563l0 45.008077L665.621796 566.822606C665.621796 603.582835 695.687556 633.655757 732.450854 633.655757zM823.851541 408.80264l68.220754 0 0 67.082838-68.220754 0L823.851541 408.80264zM823.851541 520.889461l68.220754 0 0 45.933145c0 11.831466-9.993608 21.820981-21.819958 21.820981l-46.400796 0L823.851541 520.889461zM710.639083 408.79343l68.212568 0 0 67.082838L710.639083 475.876268 710.639083 408.79343zM710.630896 520.889461l68.220754 0 0 67.754127-46.400796 0c-11.827373 0-21.820981-9.989515-21.820981-21.820981L710.629873 520.889461z" fill="#DA1726" p-id="3006"></path><path d="M392.713196 689.854711c-17.32969 0-23.51967 18.356067-23.51967 18.356067l-36.814464 92.37692 19.044752 0 15.341407-39.115879 50.544163 0 15.105023 39.115879 20.623713 0-36.797068-92.37692C416.241053 708.210777 410.092006 689.854711 392.713196 689.854711zM374.017392 743.5394l10.714016-26.091238c0 0 2.12336-5.866614 7.981788-5.866614 6.053879 0 7.997138 5.866614 7.997138 5.866614l9.399067 24.957415 0.424672 1.133823L374.017392 743.5394z" fill="#DA1726" p-id="3007"></path><path d="M88.201831 707.030905 132.99706 707.030905 132.99706 800.527322 133.00627 800.527322 151.642722 800.527322 151.642722 707.030905 196.447161 707.030905 196.447161 689.582511 88.201831 689.582511Z" fill="#DA1726" p-id="3008"></path><path d="M478.178707 763.26772l0-73.446779-18.525935 0 0 18.415418 0 63.628156c0 16.650215 11.538801 28.621874 29.079292 28.621874l22.534226 0 0-18.314111c0 0-4.168949 0.025583-13.71128 0.025583C485.123886 782.196839 478.178707 779.916912 478.178707 763.26772z" fill="#DA1726" p-id="3009"></path><path d="M541.924543 763.26772l0-73.446779-18.526959 0 0 18.415418 0 63.628156c0 16.650215 11.54801 28.621874 29.096688 28.621874l22.51683 0 0-18.314111c0 0-4.15974 0.025583-13.721513 0.025583C548.869722 782.196839 541.924543 779.916912 541.924543 763.26772z" fill="#DA1726" p-id="3010"></path><path d="M309.921585 690.321338c-6.180769-2.505054-11.92868 2.105964-13.066597 3.001357-8.126075 6.39771-16.887622 15.923668-32.815383 15.923668l-0.629333 0-0.194428 0-0.620124 0c-15.936971 0-24.698518-9.525957-32.815383-15.923668-1.137916-0.895393-6.894014-5.506411-13.075807-3.001357-5.782703 2.335185-6.691399 7.879458-6.691399 12.277628 0 8.468882 0.017396 57.319473 0.017396 97.836259l18.500353 0 0-83.249029c6.121418 3.378957 18.891256 11.759835 34.275641 11.759835l1.019213 0c14.629185 0 28.146037-8.379854 34.259268-11.759835l0 83.249029 18.517749 0c0.016373-40.516786 0.024559-89.366354 0.024559-97.836259C316.629357 698.200796 315.696102 692.656523 309.921585 690.321338z" fill="#DA1726" p-id="3011"></path><path d="M930.508699 690.321338c-6.180769-2.505054-11.92868 2.105964-13.066597 3.001357-8.117888 6.39771-16.879436 15.923668-32.807197 15.923668l-0.62831 0-0.203638 0-0.610914 0c-15.935947 0-24.707728-9.525957-32.816406-15.923668-1.136893-0.895393-6.894014-5.506411-13.075807-3.001357-5.78168 2.335185-6.690376 7.879458-6.690376 12.277628 0 8.468882 0.017396 57.319473 0.017396 97.836259l18.500353 0 0-83.249029c6.121418 3.378957 18.891256 11.759835 34.267455 11.759835l1.019213 0c14.637372 0 28.154223-8.379854 34.267455-11.759835l0 83.249029L937.199075 800.435225c0.016373-40.516786 0.025583-89.366354 0.025583-97.836259C937.224658 698.200796 936.282193 692.656523 930.508699 690.321338z" fill="#DA1726" p-id="3012"></path><path d="M603.888803 782.018783c-5.111414 0-9.271154 4.139274-9.271154 9.246595 0 5.111414 4.15974 9.254781 9.271154 9.254781 5.111414 0 9.254781-4.143367 9.254781-9.254781C613.142561 786.158057 609.000218 782.018783 603.888803 782.018783z" fill="#DA1726" p-id="3013"></path><path d="M766.642584 689.922249c-13.338796 0-24.800849 3.981684-34.097586 11.835559-11.114129 9.432837-16.759709 24.062022-16.759709 43.462884 0 17.685801 4.728698 31.465642 14.018272 40.941458 9.314133 9.517771 21.701255 14.366196 36.840046 14.366196 9.373485 0 18.178011-2.194992 26.158776-6.504134 7.964392-4.325515 14.119579-10.489912 18.331507-18.339694 4.13518-7.79043 6.214539-18.535145 6.214539-31.907711 0-16.666588-4.762467-29.946033-14.178931-39.455617C793.743826 694.774767 781.449825 689.922249 766.642584 689.922249zM789.829679 773.761726c-6.231935 6.049786-14.043854 9.122775-23.187095 9.122775-9.43386 0-17.057491-2.954285-23.331381-9.051143-6.376221-6.245238-9.628288-15.860223-9.628288-28.612665 0-12.744255 3.252067-22.338774 9.628288-28.53694 6.180769-5.985318 14.042831-9.025561 23.331381-9.025561 9.136078 0 16.921391 3.043313 23.13593 9.067516 6.4192 6.198166 9.679453 15.597233 9.679453 27.925003C799.457967 757.727541 796.222273 767.529791 789.829679 773.761726z" fill="#DA1726" p-id="3014"></path><path d="M675.395394 706.776102c9.136078 0 16.912182 3.039219 23.12672 9.05933 0.432859 0.424672 0.849344 0.865717 1.264806 1.324158l10.384511-15.401782c-9.16166-8.439206-20.862143-12.718673-34.777061-12.718673-13.338796 0-24.801872 3.973498-34.098609 11.831466-11.122315 9.42465-16.760732 24.066115-16.760732 43.454698 0 17.689894 4.720511 31.473829 14.018272 40.941458 9.305947 9.531074 21.693068 14.370289 36.84107 14.370289 9.364275 0 18.168802-2.199085 26.15059-6.512321 1.952468-1.061169 3.795443-2.232854 5.536087-3.510964l-8.277524-16.968463c-0.076748 0.076748-0.144286 0.152473-0.230244 0.229221-6.223748 6.053879-14.026458 9.126868-23.178909 9.126868-9.43386 0-17.066701-2.963495-23.332405-9.05933-6.376221-6.249331-9.627265-15.852036-9.627265-28.616758 0-12.740162 3.251044-22.334681 9.627265-28.523637C658.244782 709.797925 666.097634 706.776102 675.395394 706.776102z" fill="#DA1726" p-id="3015"></path></svg>
\ No newline at end of file
diff --git "a/src/assets/images/bookStore/\344\272\254\344\270\234icon-01.svg" "b/src/assets/images/bookStore/\344\272\254\344\270\234icon-01.svg"
new file mode 100644
index 0000000..19ccab4
--- /dev/null
+++ "b/src/assets/images/bookStore/\344\272\254\344\270\234icon-01.svg"
@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1666837514634" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1889" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M442.5 699.7H285.8v21.4h156.7v-21.4zM663.6 220c-3.5-0.3-7.1-0.7-10.6-0.9-4-0.4-7.9-0.8-11.8-1.4 3.9 0.6 7.9 1 11.8 1.4 3.5 0.2 7 0.7 10.6 0.9z" fill="#E12319" p-id="1890"></path><path d="M767.2 83.4H213.1c-78.7 0-142.5 63.8-142.5 142.5V780c0 78.7 63.8 142.5 142.5 142.5h554.1c78.7 0 142.5-63.8 142.5-142.5V225.9c0-78.7-63.8-142.5-142.5-142.5zM228 323.3c1.8-4.8 3.3-9.6 5.5-14.2 2.8-5.8 6.3-11.2 10.4-16.2 10.2-12.4 17.2-26.6 23.1-41.5 3.4-8.4 7.1-16.7 10.5-25.2 3.9-9.7 12.4-11.4 21-8.8 4.2 1.3 8 3.6 11.3 6.4 6.4 5.4 13.7 9.6 20.7 14.3 1.2 0.8 2.1 1.2 3.4-0.2 13.4-14.5 30.1-24.2 47.9-32 35.1-15.6 71.9-25.7 109.7-32 30.8-5.1 61.8-6.1 93-4.6 0.6 0 1.2-0.1 1.8-0.1 1.8-1.7 3.4-1 5.1 0.2 1.2 0.4 2.4 0.5 3.6 0.3 0.8-0.7 1.5-0.7 2.2 0.2 4.4 0.4 8.7 0.9 13.1 1.3 0.8-0.7 1.5-0.6 2.1 0.2 1.5 0.2 2.9 0.3 4.4 0.5 0.6-0.6 1-0.5 1.4 0.2 0.9 0.4 1.9 0.6 2.9 0.4 1.2-1 2.2-0.7 3.1 0.5 7.3 1.6 14.7 3 22 4.8 19.9 4.9 39.1 11.5 55.4 24.7 13.1 10.6 18.2 23.9 15.5 40.9-3.7 22.9-11.7 44-23 64.1-1.4 2.5-3.9 3.8-5.6 5.9 0.8 3.9-3 5.8-3.9 9-0.8 2.7-3.2 4.4-4.9 6.5-0.1 0.4-0.2 0.9-0.8 0.6 0 0.5 0.2 1.3-0.7 0.7 0.6 1.6-1 2.3-1.7 3.2-10.5 13.9-23.5 25.2-37.2 35.8-28.5 22.1-61.1 35.1-96.5 41.2-8.8 1.5-17.7 0-26.5-1-6.5-0.7-13-1.5-19.5-2.8-1.2-0.2-2.6-1.2-3.8 0.1-0.1 0.1-0.4 0.2-0.5 0.3-0.7-4.6-4.8-2.7-7.1-3.2-20.3-4.7-38.9-13.6-57-23.5-23.5-13-46.3-27.1-65.9-45.9-15.1-14.5-28.3-30.4-36.5-50-1.6-3.9-3.1-8-3.7-12.2-0.4-3-1.6-4.8-4.7-5.7 0.6 6.8 1 13.6 0.4 20.3-2.1 27.1-15.2 46.2-41.1 55.6-8.6 3.1-16.9 7.1-26.3 8-12.5 1.3-28.2-12.2-22.6-27.1z m68.1 473.4c-6.2 11.1-14.9 20.9-22.5 31.2-6.1 8.2-14.1 10.8-25.4 7.4 3.6-6.4 7.8-12.1 10.2-18.5 6.9-18.3 13.5-36.8 19.3-55.5 1.9-6 3.5-9.2 10.3-8.8 8.2 0.5 16.4 0.1 28.3 0.1-7.4 16.5-12.7 30.9-20.2 44.1z m84.2-8c-0.5 32.8-19.2 49.6-53.4 47.3v-13.9c20-7.1 21-8.6 21-30.6v-51.4h-93.1v-57.7h218.5v57h-93v35.8c0 4.4 0.1 9 0 13.5z m75.7 40.6c-20-21.5-33.7-46.3-41.9-76.2h31.4c10.9 28.2 21.4 55.5 32 82.9-7.3 2-14.5 0.8-21.5-6.7z m25.2-162.6H246.9v-16.5h100.6c0.5-4.8 0.8-8.5 1.3-13h30.8c0.6 4.1 1.2 8.1 2 13.2h75.1c3.8 0 7.6-0.1 11.4-0.1 14.8-0.2 14.9-0.1 13.1 16.4z m26.7-172.5c-4.4 9.6-6.8 20-9.8 30.1-0.7 2.3-1.5 3.5-4.1 3.4-3 0-6.9 1.8-8.8 0.1-2-1.8-0.2-5.7 0-8.6 0.9-11.5 1.4-23 0.7-34.8-3.8 1.2-6.8 3.5-9.6 5.9-10.9 9.1-19.9 20-30.1 29.7-1.7 1.6-3.4 3.1-4.9 4.9-2.2 2.8-5.2 3.1-8.4 3.4-2.9 0.3-3.5-0.6-2-3.3 5.5-9.2 10.8-18.5 16.2-27.7 2.9-5 5.7-10.2 8.9-15.1 1.6-2.5 0.5-3-1.5-3.5-3.7-0.9-7-2.7-10-5-7.2-5.5-10.6-16.8-7.3-25.1 1.1 3.8 2.4 7.3 4.7 10.3 7.1 9.6 17.5 7.9 25.1 3.6 0.9-0.5 1.4-1.6 2-2.6 9-15 17.9-30 26.8-45.1 1.4-2.4 2.7-2.9 5.5-2.4 12 2.2 24 4 36.2 2.5 5.8-0.7 11.4-2 17.2-5.3v6c-0.3 36.2-0.6 72.5-0.7 108.7 0 3.4-1 4-4.1 3.7-7.6-0.7-7.5-0.6-9.4-8.1-2.2-8.4-3.3-17.2-6.4-25.4-1.7-4.3-3.6-8.5-6.9-11.9-4.3-4.3-7.5-4.3-11.9 0-3.4 3.4-5.5 7.5-7.4 11.6z m31.4 339c-4 3.5-11.6 2.9-18.5 4.4 8.2-18.6 15.7-35 22.6-51.6 2.6-6.2 5.3-13 5.4-19.6 0.2-12.7 6.8-15 17.5-13.9 6.2 0.6 12.6 0.1 20.4 0.1-9.5 32.3-23.6 59.5-47.4 80.6z m187.8-4.8c-19.7-21.3-32.9-45.8-40.9-74.1 2.1-0.9 2.4-1.1 2.8-1.1 29.8-3 29.5-2.9 37.6 25.3 2.9 10.2 6.8 20.1 11.1 29.8 4.1 9.2 9.4 17.9 14.3 27.2-10.3 2.7-17.8 0.6-24.9-7.1zM753.5 667c-3.5 0.2-7.5 0.6-11.5 0.6-45.9 0.1-91.9 0.3-137.8-0.1-8.8-0.1-13.8 2.2-17.1 10.8-5.5 14-12.4 27.5-19.8 43.6 17.9 0 33.9 0.3 50-0.4 1.8-0.1 4.7-5.1 4.9-8 0.6-9.7 0.2-19.5 0.2-30.1h31.7v38.3h90.7v17.8h-90.5c0 17.4 0.1 33.2 0 49-0.2 32.8-18.6 49.6-52.7 47.8-2.5-8.7-3.3-15.3 8.8-18.2 4.5-1.1 10.4-8 10.6-12.6 1.1-21.4 0.5-43 0.5-65.9h-95.1c11.2-24.4 21.6-46.9 33-71.8h-40.7v-17.5c13.6 0 27.2 0.2 40.8-0.1 3.2-0.1 8.4-0.8 9.1-2.6 7.7-19.4 23.5-8.5 37.3-11.9-1.8 5.5-3 8.9-4.7 14h152.2c0.1 6.4 0.1 11.1 0.1 17.3z" fill="#E12319" p-id="1891"></path><path d="M678 329.8c0.8 1.8-0.9 2.4-1.6 3.4-10.5 13.9-23.5 25.2-37.2 35.8-28.5 22.1-61.1 35.1-96.5 41.2-8.8 1.5-17.7 0-26.5-1-6.5-0.7-13-1.5-19.5-2.8-1.2-0.2-2.6-1.2-3.8 0.1-0.1 0.1-0.4 0.2-0.5 0.3-0.7-4.6-4.8-2.7-7.1-3.2-20.3-4.7-38.9-13.6-57-23.5-23.5-13-46.3-27.1-65.9-45.9-15.1-14.5-28.3-30.4-36.5-50-1.6-3.9-3.1-8-3.7-12.2-0.4-3-1.6-4.8-4.7-5.7 0.6 6.8 1 13.6 0.4 20.3-2.1 27.1-15.2 46.2-41.1 55.6-8.6 3.1-16.9 7.1-26.3 8-12.5 1.2-28.1-12.2-22.5-27.1 1.8-4.8 3.3-9.6 5.5-14.2 2.8-5.8 6.3-11.2 10.4-16.2 10.2-12.4 17.2-26.6 23.1-41.5 3.4-8.4 7.1-16.7 10.5-25.2 3.9-9.7 12.4-11.4 21-8.8 4.2 1.3 8 3.6 11.3 6.4 6.4 5.4 13.7 9.6 20.7 14.3 1.2 0.8 2.1 1.2 3.4-0.2 13.4-14.5 30.1-24.2 47.9-32 35.1-15.6 71.9-25.7 109.7-32 30.8-5.1 61.8-6.1 93-4.6 0.6 0 1.2-0.1 1.8-0.1 1.7 0.1 3.4 0.1 5.1 0.2 1.2 0.4 2.4 0.5 3.6 0.3 0.7 0.1 1.4 0.1 2.2 0.2 4.4 0.4 8.7 0.9 13.1 1.3 0.7 0.1 1.4 0.1 2.1 0.2 1.5 0.2 2.9 0.3 4.4 0.5 0.5 0.1 1 0.1 1.4 0.2 0.9 0.4 1.9 0.6 2.9 0.4 1 0.2 2.1 0.3 3.1 0.5 7.3 1.6 14.7 3 22 4.8 19.9 4.9 39.1 11.5 55.4 24.7 13.1 10.6 18.2 23.9 15.5 40.9-3.7 22.9-11.7 44-23 64.1-1.4 2.5-3.9 3.8-5.6 5.9-1.5 0.5-3 0.8-4.4 1.5-7.6 3.6-15.7 6-23.9 7.4-31.5 5.3-62.5 3-92.8-7.2-28.5-9.6-51.1-27.4-69-51.4-1.8-2.5-5.2-3.4-7.3-2-2 1.3-2.9 6.4-1.3 8.6 5.6 7.9 12 15.3 18.9 22.1 24.1 23.5 53.6 36.2 86.3 42 20.7 3.7 41.6 3.6 62.4 0.7 7-1 13.8-3.1 20.6-5.1z m-25-110.7c6.3 0.3 12.5 1.5 18.9 0.9 8.1-0.7 15.9-2 22.7-6.9 4.4-3.2 5-8.2 1.6-12.4-1.3-1.6-2.9-3-4.7-4-6.9-3.9-14.2-6.8-22-7.8-8-1-16-1.5-24.2-0.6-6.5 0.7-12.7 1.6-18.4 4.7-4.3 2.4-8.2 5.8-8.2 10.8 0 5.3 4.8 7.8 9.1 9.9 7.9 3.9 16.6 4.5 25.2 5.4z m-161.9-0.4c-0.7 6.7 5.1 13.4 12.1 14.2 6.2 0.7 14.6-5.4 15.3-11.1 0.8-6.1-5.6-13.4-12.3-14-8-0.7-14.3 3.9-15.1 10.9z" fill="#EEEEEE" p-id="1892"></path><path d="M437.2 448.7c1.1 3.8 2.4 7.3 4.7 10.3 7.1 9.6 17.5 7.9 25.1 3.6 0.9-0.5 1.4-1.6 2-2.6 9-15 17.9-30 26.8-45.1 1.4-2.4 2.7-2.9 5.5-2.4 12 2.2 24 4 36.2 2.5 5.8-0.7 11.4-2 17.2-5.3v6c-0.3 36.2-0.6 72.5-0.7 108.7 0 3.4-1 4-4.1 3.7-7.6-0.7-7.5-0.6-9.4-8.1-2.2-8.4-3.3-17.2-6.4-25.4-1.7-4.3-3.6-8.5-6.9-11.9-4.3-4.3-7.5-4.3-11.9 0-3.2 3.2-5.3 7.2-7.2 11.3-4.4 9.6-6.8 20-9.8 30.1-0.7 2.3-1.5 3.5-4.1 3.4-3 0-6.9 1.8-8.8 0.1-2-1.8-0.2-5.7 0-8.6 0.9-11.5 1.4-23 0.7-34.8-3.8 1.2-6.8 3.5-9.6 5.9-10.9 9.1-19.9 20-30.1 29.7-1.7 1.6-3.4 3.1-4.9 4.9-2.2 2.8-5.2 3.1-8.4 3.4-2.9 0.3-3.5-0.6-2-3.3 5.5-9.2 10.8-18.5 16.2-27.7 2.9-5 5.7-10.2 8.9-15.1 1.6-2.5 0.5-3-1.5-3.5-3.7-0.9-7-2.7-10-5-7.4-5.2-10.7-16.6-7.5-24.8z" fill="#EEEEEE" p-id="1893"></path><path d="M678 329.8c-6.8 2-13.6 4-20.7 5-20.9 2.9-41.7 3-62.4-0.7-32.7-5.8-62.1-18.5-86.3-42-7-6.8-13.3-14.1-18.9-22.1-1.6-2.2-0.7-7.2 1.3-8.6 2.2-1.4 5.5-0.5 7.3 2 17.9 24 40.5 41.8 69 51.4 30.2 10.2 61.3 12.4 92.8 7.2 8.3-1.4 16.3-3.8 23.9-7.4 1.4-0.6 2.9-1 4.4-1.5 0.8 3.9-3 5.8-3.9 9-0.8 2.7-3.2 4.4-4.9 6.5-0.5-0.1-0.8 0.1-0.8 0.6l0.1-0.1c-0.6 0.1-1.1 0.1-0.9 0.7zM591.3 169.5c-1.7-0.1-3.4-0.1-5.1-0.2 1.8-1.7 3.5-1 5.1 0.2zM624.2 172.9c-1-0.2-2.1-0.3-3.1-0.5 1.2-0.9 2.2-0.6 3.1 0.5zM597.1 169.9c-0.7-0.1-1.4-0.1-2.2-0.2 0.8-0.7 1.6-0.6 2.2 0.2zM612.4 171.4c-0.7-0.1-1.4-0.1-2.1-0.2 0.7-0.7 1.4-0.6 2.1 0.2zM618.2 172.1c-0.5-0.1-1-0.1-1.4-0.2 0.5-0.6 1-0.5 1.4 0.2z" fill="#282526" p-id="1894"></path><path d="M678.7 329.3c0.1-0.5 0.4-0.6 0.8-0.6-0.1 0.4-0.1 0.9-0.8 0.6z" fill="#EEEEEE" p-id="1895"></path><path d="M677.9 329.9c-0.1-0.7 0.4-0.7 0.9-0.7-0.1 0.5 0.3 1.6-0.9 0.7z" fill="#EEEEEE" p-id="1896"></path><path d="M653 219.1c-8.6-0.9-17.2-1.6-25.2-5.3-4.4-2.1-9.1-4.6-9.1-9.9 0-5 3.9-8.5 8.2-10.8 5.7-3.1 11.9-4 18.4-4.7 8.2-0.9 16.2-0.4 24.2 0.6 7.8 1 15.1 4 22 7.8 1.8 1 3.4 2.4 4.7 4 3.4 4.2 2.8 9.2-1.6 12.4-6.8 4.9-14.6 6.1-22.7 6.9-6.4 0.6-12.6-0.7-18.9-1z" fill="#282526" p-id="1897"></path><path d="M491.1 218.7c0.8-7 7.1-11.6 15.2-10.9 6.7 0.6 13 7.9 12.3 14-0.7 5.6-9.1 11.7-15.3 11.1-7.1-0.7-12.9-7.5-12.2-14.2z" fill="#444243" p-id="1898"></path><path d="M559.6 667.8h-40.7v-17.5c13.6 0 27.2 0.2 40.8-0.1 3.2-0.1 8.4-0.8 9.1-2.6 7.7-19.4 23.5-8.5 37.3-11.9-1.8 5.5-3 8.9-4.7 14h152.2V667c-3.5 0.2-7.5 0.6-11.5 0.6-45.9 0.1-91.9 0.3-137.8-0.1-8.8-0.1-13.8 2.2-17.1 10.8-5.5 14-12.4 27.5-19.8 43.6 17.9 0 33.9 0.3 50-0.4 1.8-0.1 4.7-5.1 4.9-8 0.6-9.7 0.2-19.5 0.2-30.1h31.7v38.3h90.7v17.8h-90.5c0 17.4 0.1 33.2 0 49-0.2 32.8-18.6 49.6-52.7 47.8-2.5-8.7-3.3-15.3 8.8-18.2 4.5-1.1 10.4-8 10.6-12.6 1.1-21.4 0.5-43 0.5-65.9h-95.1c11.3-24.4 21.7-47 33.1-71.8zM326.9 836v-13.9c20-7.1 21-8.6 21-30.6v-51.4h-93.1v-57.7h218.5v57h-93v49.5c-0.5 32.6-19.1 49.5-53.4 47.1z m-41.1-114.9h156.7v-21.4H285.8v21.4zM246.8 666.7v-16.5h100.6c0.5-4.8 0.8-8.5 1.3-13h30.8c0.6 4.1 1.2 8.1 2 13.2h75.1c3.8 0 7.6-0.1 11.4-0.1 15-0.1 15 0 13.2 16.5-77.7-0.1-155.5-0.1-234.4-0.1z" fill="#FFFFFF" p-id="1899"></path><path d="M686.2 754.2c2.1-0.9 2.4-1.1 2.8-1.1 29.8-3 29.5-2.9 37.6 25.3 2.9 10.2 6.8 20.1 11.1 29.8 4.1 9.2 9.4 17.9 14.3 27.2-10.3 2.8-17.8 0.7-24.9-7-19.7-21.3-33-45.9-40.9-74.2zM414.1 753.1h31.4c10.9 28.2 21.4 55.5 32 82.9-7.2 2.1-14.5 0.8-21.4-6.6-20.1-21.6-33.7-46.3-42-76.3zM316.4 752.6c-7.4 16.5-12.8 30.9-20.3 44.2-6.2 11.1-14.9 20.9-22.5 31.2-6.1 8.2-14.1 10.8-25.4 7.4 3.6-6.4 7.8-12.1 10.2-18.5 6.9-18.3 13.5-36.8 19.3-55.5 1.9-6 3.5-9.2 10.3-8.8 8.2 0.4 16.4 0 28.4 0zM586.6 752.5c-9.4 32.4-23.5 59.5-47.4 80.6-4 3.5-11.6 2.9-18.5 4.4 8.2-18.6 15.7-35 22.6-51.6 2.6-6.2 5.3-13 5.4-19.6 0.2-12.7 6.8-15 17.5-13.9 6.2 0.6 12.6 0.1 20.4 0.1z" fill="#FFFFFF" p-id="1900"></path></svg>
\ No newline at end of file
diff --git "a/src/assets/images/bookStore/\345\275\223\345\275\223\347\275\221.svg" "b/src/assets/images/bookStore/\345\275\223\345\275\223\347\275\221.svg"
new file mode 100644
index 0000000..468ad68
--- /dev/null
+++ "b/src/assets/images/bookStore/\345\275\223\345\275\223\347\275\221.svg"
@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1666837543425" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2096" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M83.168188 519.487531c17.535375-0.12689 35.071773-0.031722 52.608172-0.031722 17.198707 0.005117 34.398438-0.093121 51.596122 0.037862M115.494431 414.897452c-0.060375-11.618619-9.787924-21.146623-21.386076-20.948101-11.92868 0.204661-20.784372 9.349949-20.748556 21.428032 0.035816 11.970636 9.128915 20.87647 21.194718 20.756743C106.512872 436.015422 115.556852 426.843528 115.494431 414.897452zM289.782919 553.038672c16.989953 0 33.81413 0.290619 50.620911-0.121773 8.516977-0.208754 14.848173-7.466042 15.283078-15.975856 0.415462-8.111748-5.850242-16.909112-13.930267-17.206894-17.071817-0.629333-34.18252-0.191358-51.973722-0.191358C289.782919 530.900465 289.782919 541.259394 289.782919 553.038672zM187.373505 519.493671c-17.197684-0.130983-34.397415-0.032746-51.596122-0.035816-17.536398-0.002047-35.072797-0.097214-52.608172 0.029676M83.168188 519.487531c-12.458753 0.090051-19.564591 6.367011-19.522636 16.84669 0.039909 10.083659 6.940063 16.535605 18.760273 16.59291 35.071773 0.170892 70.14457 0.159636 105.216343 0.007163 11.793604-0.051165 18.978237-6.505158 19.142989-16.361643 0.173962-10.440793-7.086395-16.98586-19.392676-17.080004M84.947717 598.183871c24.419156 28.183899 55.475476 40.190351 92.771917 36.478819 47.625694-4.739954 86.159312-40.048111 91.570555-84.472903 6.16235-50.594305-20.676925-93.489254-68.474534-109.435435-18.427698-6.148024-18.427698-6.148024-18.46249-25.237801 0-4.723581 0.229221-9.460466-0.046049-14.167674-0.623193-10.627035-7.377014-17.526165-16.97665-17.672498-9.419534-0.143263-16.169261 5.803169-17.104563 16.244986-0.74906 8.372691-0.848321 16.874319-0.358157 25.267477 0.462534 7.91425-1.571798 11.656481-10.215666 13.803377-21.809725 5.415336-40.137139 17.253966-54.259788 35.004235-5.771447 7.254218-5.374404 16.502859 0.49221 21.914102 6.594185 6.082532 15.428388 5.467525 22.453385-1.62808 3.083222-3.114944 5.903453-6.505158 9.116635-9.474792 35.971259-33.253358 99.613742-21.217231 118.365828 22.680559 10.670014 24.978904 8.162914 49.242518-9.119705 70.372767-19.277042 23.568788-45.342698 30.407544-74.640977 25.463951-17.675568-2.982938-31.243585-13.151531-43.420929-26.048259-3.51301-3.719718-10.662851-6.179746-15.71696-5.583159-4.046153 0.477884-9.851369 6.060019-10.523681 10.100032C79.539544 586.947969 81.489966 594.192977 84.947717 598.183871zM257.008468 619.286492c23.107277 13.903661 47.164183 18.198477 73.251328 15.07637 60.35767-7.224542 100.997252-65.930595 85.044932-124.519991-10.425444-38.290071-36.285414-61.467957-74.200956-71.071685-8.639774-2.187829-11.669784-5.595438-10.839883-14.198374 0.709151-7.354502 0.26299-14.83487 0.101307-22.25384-0.25071-11.538801-6.647397-18.517749-16.845667-18.653849-10.204409-0.1361-16.756639 6.811126-16.983813 18.290575-0.160659 8.094352-0.469698 16.22452 0.083911 24.284079 0.50756 7.381108-2.189875 10.463306-9.461489 12.490475-10.384511 2.894933-20.227694 7.730055-30.834262 11.9471 6.991228 9.400091 12.596899 16.936741 18.73162 25.184589 37.731346-20.057825 77.543074-7.537673 97.270371 15.760962 18.804275 22.209838 21.172205 56.387241 4.752234 81.044828-8.879228 13.334703-21.12718 22.574135-36.33351 27.701922-22.774703 7.679913-44.886303 5.598508-65.754586-5.548366C268.717138 603.353614 263.006066 611.124602 257.008468 619.286492zM403.465075 415.390685c0.090051-12.009522-8.852622-21.298072-20.644179-21.443381-11.720949-0.144286-21.296025 9.224082-21.376866 20.917402-0.082888 11.992125 8.90788 21.169135 20.860097 21.291932C394.440537 436.281481 403.374 427.514817 403.465075 415.390685zM261.482363 415.359986c0.177032-11.543917-9.41851-21.366633-20.921495-21.417799-12.117992-0.053212-20.944008 8.718569-21.10262 20.971637-0.159636 12.251022 8.544607 21.204951 20.630876 21.222347C252.221442 436.154591 261.298168 427.338808 261.482363 415.359986z" p-id="2097" fill="#d81e06"></path><path d="M512.135076 497.649154l-10.077519 0 0-9.461489-0.205685 0c-4.149507 7.198959-10.593266 10.797927-19.334347 10.797927-7.198959 0-12.923334-2.562359-17.174148-7.687076-4.250814-5.123694-6.375198-12.040221-6.375198-20.747533 0-9.391904 2.39863-16.924461 7.197936-22.597671 4.799306-5.67321 11.072173-8.509814 18.819624-8.509814 7.746428 0 13.368472 3.016707 16.866133 9.049097l0.205685 0 0-35.015491 10.077519 0L512.135076 497.649154zM502.107699 463.815581c0-4.558829-1.499144-8.372691-4.498454-11.440563-2.99931-3.067872-6.693446-4.601808-11.08036-4.601808-5.347798 0-9.56382 1.997494-12.649088 5.990434-3.085268 3.993964-4.627391 9.435906-4.627391 16.325827 0 6.342452 1.481747 11.355629 4.447289 15.039531 2.964518 3.685949 6.915503 5.5279 11.851932 5.5279 4.866844 0 8.844435-1.808182 11.929704-5.424546 3.084245-3.616364 4.626367-8.114818 4.626367-13.497409L502.107699 463.815581zM531.467377 444.74013c5.655813-3.530406 12.186554-5.29561 19.591197-5.29561 13.710256 0 20.567431 7.198959 20.567431 21.595854l0 36.609803-9.975189 0 0-8.792247-0.25685 0c-3.942799 6.753821-9.752108 10.129708-17.430998 10.129708-5.519714 0-9.906627-1.49198-13.162788-4.473895-3.257184-2.982938-4.88424-7.009647-4.88424-12.0832 0-10.626012 6.28924-16.813944 18.87079-18.562774l16.864086-2.364861c0-9.289574-3.839445-13.934361-11.517311-13.934361-6.822382 0-13.044084 2.297322-18.665105 6.889921L531.4684 444.74013zM548.33351 470.91221c-4.663206 0.617054-7.875365 1.782599-9.641591 3.496637-1.766226 1.715061-2.648316 4.113691-2.648316 7.198959 0 2.707668 0.959861 4.919033 2.879584 6.633071 1.918699 1.714038 4.455475 2.570545 7.610328 2.570545 4.386914 0 8.003278-1.542122 10.850116-4.627391 2.843768-3.085268 4.267187-6.958482 4.267187-11.620665l0-5.450129L548.33351 470.91221zM636.412544 497.649154l-10.026354 0 0-32.341592c0-11.689227-4.26821-17.533328-12.803607-17.533328-4.421706 0-8.055466 1.645476-10.900258 4.936429-2.845815 3.290953-4.26821 7.455809-4.26821 12.494569l0 32.444946-10.078543 0 0-56.869219 10.078543 0 0 9.4093 0.205685 0c4.284583-7.164167 10.506285-10.745738 18.665105-10.745738 6.238075 0 10.985192 1.997494 14.242376 5.990434 3.257184 3.993964 4.88424 9.812483 4.88424 17.45658L636.411521 497.649154zM702.58771 492.867244c0 21.046339-10.214642 31.571043-30.644951 31.571043-7.060813 0-13.196557-1.320065-18.407232-3.959172l0-9.718339c6.341429 3.530406 12.426007 5.296633 18.253736 5.296633 13.81361 0 20.721951-7.268544 20.721951-21.801539l0-6.016017-0.205685 0c-4.319375 7.164167-10.765181 10.746762-19.334347 10.746762-7.130398 0-12.837376-2.553149-17.121959-7.661494-4.285606-5.107321-6.426363-11.877515-6.426363-20.310581 0-9.699919 2.365884-17.386996 7.095605-23.061228 4.730745-5.67321 11.037381-8.509814 18.921955-8.509814 7.575536 0 13.196557 3.016707 16.865109 9.049097l0.205685 0 0-7.712659 10.077519 0L702.588733 492.867244zM692.51019 463.815581c0.032746-4.386914-1.439792-8.157797-4.421706-11.311627-2.982938-3.15383-6.65149-4.730745-11.003612-4.730745-5.484921 0-9.753131 2.013867-12.803607 6.0416-3.051499 4.028757-4.577249 9.555633-4.577249 16.582677 0 6.033413 1.473561 10.917654 4.421706 14.653745 2.948145 3.736091 6.856152 5.604648 11.724019 5.604648 4.901637 0 8.911974-1.782599 12.032034-5.347798 3.119037-3.564175 4.66116-8.089235 4.627391-13.574157L692.509167 463.815581zM769.945817 497.649154l-10.077519 0 0-9.461489-0.205685 0c-4.148483 7.198959-10.593266 10.797927-19.334347 10.797927-7.197936 0-12.923334-2.562359-17.173125-7.687076-4.250814-5.123694-6.375198-12.040221-6.375198-20.747533 0-9.391904 2.39863-16.924461 7.197936-22.597671 4.798283-5.67321 11.072173-8.509814 18.819624-8.509814s13.368472 3.016707 16.865109 9.049097l0.205685 0 0-35.015491 10.077519 0L769.945817 497.649154zM759.919463 463.815581c0-4.558829-1.500167-8.372691-4.498454-11.440563-3.000334-3.067872-6.693446-4.601808-11.08036-4.601808-5.347798 0-9.564843 1.997494-12.649088 5.990434-3.085268 3.993964-4.627391 9.435906-4.627391 16.325827 0 6.342452 1.482771 11.355629 4.448312 15.039531 2.964518 3.685949 6.916527 5.5279 11.851932 5.5279 4.866844 0 8.844435-1.808182 11.92868-5.424546 3.085268-3.616364 4.627391-8.114818 4.627391-13.497409L759.920486 463.815581zM789.280164 444.74013c5.655813-3.530406 12.186554-5.29561 19.591197-5.29561 13.710256 0 20.567431 7.198959 20.567431 21.595854l0 36.609803-9.975189 0 0-8.792247-0.25685 0c-3.942799 6.753821-9.752108 10.129708-17.430998 10.129708-5.519714 0-9.906627-1.49198-13.162788-4.473895-3.257184-2.982938-4.88424-7.009647-4.88424-12.0832 0-10.626012 6.28924-16.813944 18.87079-18.562774l16.864086-2.364861c0-9.289574-3.839445-13.934361-11.517311-13.934361-6.822382 0-13.044084 2.297322-18.665105 6.889921L789.281187 444.74013zM806.145274 470.91221c-4.663206 0.617054-7.875365 1.782599-9.641591 3.496637-1.766226 1.715061-2.648316 4.113691-2.648316 7.198959 0 2.707668 0.959861 4.919033 2.879584 6.633071 1.918699 1.714038 4.455475 2.570545 7.610328 2.570545 4.386914 0 8.003278-1.542122 10.850116-4.627391 2.843768-3.085268 4.267187-6.958482 4.267187-11.620665l0-5.450129L806.145274 470.91221zM894.224308 497.649154l-10.026354 0 0-32.341592c0-11.689227-4.26821-17.533328-12.803607-17.533328-4.421706 0-8.055466 1.645476-10.900258 4.936429-2.845815 3.290953-4.26821 7.455809-4.26821 12.494569l0 32.444946-10.078543 0 0-56.869219 10.078543 0 0 9.4093 0.205685 0c4.284583-7.164167 10.506285-10.745738 18.665105-10.745738 6.238075 0 10.985192 1.997494 14.242376 5.990434 3.257184 3.993964 4.88424 9.812483 4.88424 17.45658L894.223285 497.649154zM960.399473 492.867244c0 21.046339-10.214642 31.571043-30.644951 31.571043-7.060813 0-13.196557-1.320065-18.407232-3.959172l0-9.718339c6.341429 3.530406 12.426007 5.296633 18.253736 5.296633 13.81361 0 20.721951-7.268544 20.721951-21.801539l0-6.016017-0.205685 0c-4.319375 7.164167-10.765181 10.746762-19.334347 10.746762-7.130398 0-12.837376-2.553149-17.121959-7.661494-4.285606-5.107321-6.426363-11.877515-6.426363-20.310581 0-9.699919 2.365884-17.386996 7.095605-23.061228 4.730745-5.67321 11.037381-8.509814 18.921955-8.509814 7.575536 0 13.196557 3.016707 16.865109 9.049097l0.205685 0 0-7.712659 10.077519 0L960.400496 492.867244zM950.322977 463.815581c0.032746-4.386914-1.439792-8.157797-4.421706-11.311627-2.982938-3.15383-6.65149-4.730745-11.003612-4.730745-5.484921 0-9.753131 2.013867-12.803607 6.0416-3.051499 4.028757-4.577249 9.555633-4.577249 16.582677 0 6.033413 1.473561 10.917654 4.421706 14.653745 2.948145 3.736091 6.856152 5.604648 11.724019 5.604648 4.901637 0 8.911974-1.782599 12.032034-5.347798 3.119037-3.564175 4.66116-8.089235 4.627391-13.574157L950.321954 463.815581z" p-id="2098" fill="#d81e06"></path><path d="M427.967118 627.373681c0-2.77623 0.950651-5.115508 2.854001-7.017834 1.901303-1.901303 4.267187-2.854001 7.095605-2.854001 2.87856 0 5.270027 0.963954 7.173376 2.892887 1.901303 1.927909 2.854001 4.254907 2.854001 6.978948 0 2.673899-0.951675 4.975315-2.854001 6.903224-1.90335 1.928932-4.319375 2.891863-7.250124 2.891863-2.828418 0-5.180999-0.962931-7.05672-2.891863C428.904467 632.350019 427.967118 630.04758 427.967118 627.373681zM529.235546 631.461789c-6.53074 3.906983-14.396895 5.862521-23.600511 5.862521-12.341073 0-22.265096-3.959172-29.771047-11.877515-7.507998-7.91732-11.260461-18.175965-11.260461-30.773887 0-13.985526 4.049223-25.25929 12.147668-33.82027s18.934235-12.842493 32.509415-12.842493c7.816013 0 14.500249 1.388627 20.053732 4.164856l0 14.962783c-6.016017-4.421706-12.700253-6.633071-20.053732-6.633071-8.637728 0-15.669888 2.996241-21.094434 8.985652-5.425569 5.990434-8.137331 13.973246-8.137331 23.947412 0 9.822716 2.557242 17.507746 7.674796 23.061228 5.116531 5.553483 12.018731 8.330736 20.708648 8.330736 7.353478 0 14.294564-2.416026 20.825304-7.250124L529.237593 631.461789zM543.812543 593.592296c0-14.08888 3.933589-25.208125 11.800767-33.358759 7.867178-8.148587 18.535145-12.224416 32.006971-12.224416 12.803607 0 22.842241 3.921309 30.118971 11.761881 7.274684 7.841595 10.913561 18.678408 10.913561 32.510438 0 13.471826-3.882424 24.346501-11.646248 32.625048-7.764847 8.278547-18.176988 12.417821-31.236422 12.417821-12.752442 0-22.933315-4.01136-30.54262-12.032034C547.616172 617.270579 543.812543 606.703919 543.812543 593.592296zM559.237861 593.129762c0 9.821693 2.480494 17.558911 7.442506 23.215748 4.962012 5.655813 11.632945 8.484232 20.014846 8.484232 8.637728 0 15.219633-2.76395 19.744693-8.29185 4.524037-5.526877 6.78759-13.458523 6.78759-23.793916 0-10.385535-2.263553-18.356067-6.78759-23.909549-4.52506-5.553483-11.106965-8.330736-19.744693-8.330736-8.484232 0-15.181771 2.90619-20.091594 8.716522C561.692772 575.031569 559.237861 583.001077 559.237861 593.129762zM772.727163 635.31863l-15.116279 0 0-48.975435c0-9.255805-1.439792-15.875572-4.319375-19.860327-2.880607-3.984754-7.611352-5.978155-14.192234-5.978155-5.552459 0-10.308787 2.597151-14.267958 7.79043-3.960195 5.193279-5.939269 11.337209-5.939269 18.433838l0 48.589648-15.116279 0 0-50.51858c0-16.196891-6.247284-24.295336-18.741853-24.295336-5.759167 0-10.527774 2.468215-14.306844 7.404644-3.778046 4.935406-5.668093 11.234879-5.668093 18.896372l0 48.5129-15.117302 0 0-85.302805 15.117302 0 0 13.497409 0.308015 0c6.067182-10.336416 14.937201-15.503089 26.610054-15.503089 5.706979 0 10.745738 1.568728 15.116279 4.705162 4.370541 3.136433 7.40362 7.379061 9.101285 12.726859 6.325056-11.619642 15.784498-17.430998 28.382421-17.430998 18.767436 0 28.152177 11.5695 28.152177 34.707476L772.72921 635.31863z" p-id="2099" fill="#d81e06"></path></svg>
\ No newline at end of file
diff --git a/src/assets/images/default-book-img.png b/src/assets/images/default-book-img.png
new file mode 100644
index 0000000..dba380b
--- /dev/null
+++ b/src/assets/images/default-book-img.png
Binary files differ
diff --git a/src/assets/images/default_avatar.png b/src/assets/images/default_avatar.png
new file mode 100644
index 0000000..87827d2
--- /dev/null
+++ b/src/assets/images/default_avatar.png
Binary files differ
diff --git a/src/assets/images/delete.png b/src/assets/images/delete.png
new file mode 100644
index 0000000..9ae0c4e
--- /dev/null
+++ b/src/assets/images/delete.png
Binary files differ
diff --git a/src/assets/images/index/bookListBg.png b/src/assets/images/index/bookListBg.png
new file mode 100644
index 0000000..016fb3a
--- /dev/null
+++ b/src/assets/images/index/bookListBg.png
Binary files differ
diff --git a/src/assets/images/login/boxBg.png b/src/assets/images/login/boxBg.png
new file mode 100644
index 0000000..2a01bc5
--- /dev/null
+++ b/src/assets/images/login/boxBg.png
Binary files differ
diff --git a/src/assets/images/login/pageBg.png b/src/assets/images/login/pageBg.png
new file mode 100644
index 0000000..1f88680
--- /dev/null
+++ b/src/assets/images/login/pageBg.png
Binary files differ
diff --git a/src/assets/images/login/weChartIcon.png b/src/assets/images/login/weChartIcon.png
new file mode 100644
index 0000000..3abd498
--- /dev/null
+++ b/src/assets/images/login/weChartIcon.png
Binary files differ
diff --git a/src/assets/images/officialAccount.jpg b/src/assets/images/officialAccount.jpg
new file mode 100644
index 0000000..bcbe166
--- /dev/null
+++ b/src/assets/images/officialAccount.jpg
Binary files differ
diff --git a/src/assets/images/packDown.png b/src/assets/images/packDown.png
new file mode 100644
index 0000000..67988fc
--- /dev/null
+++ b/src/assets/images/packDown.png
Binary files differ
diff --git a/src/assets/images/packUp.png b/src/assets/images/packUp.png
new file mode 100644
index 0000000..8a00ae9
--- /dev/null
+++ b/src/assets/images/packUp.png
Binary files differ
diff --git a/src/assets/images/pageFooter/logo.png b/src/assets/images/pageFooter/logo.png
new file mode 100644
index 0000000..8f55e1b
--- /dev/null
+++ b/src/assets/images/pageFooter/logo.png
Binary files differ
diff --git a/src/assets/images/pageFooter/wechatCode.png b/src/assets/images/pageFooter/wechatCode.png
new file mode 100644
index 0000000..ac08dd5
--- /dev/null
+++ b/src/assets/images/pageFooter/wechatCode.png
Binary files differ
diff --git a/src/assets/images/pageFooter/weiboCode.png b/src/assets/images/pageFooter/weiboCode.png
new file mode 100644
index 0000000..4a977e9
--- /dev/null
+++ b/src/assets/images/pageFooter/weiboCode.png
Binary files differ
diff --git a/src/assets/images/pageHeader/logo.png b/src/assets/images/pageHeader/logo.png
new file mode 100644
index 0000000..af40fdd
--- /dev/null
+++ b/src/assets/images/pageHeader/logo.png
Binary files differ
diff --git a/src/assets/images/personalCenter/choose.png b/src/assets/images/personalCenter/choose.png
new file mode 100644
index 0000000..40e86b8
--- /dev/null
+++ b/src/assets/images/personalCenter/choose.png
Binary files differ
diff --git a/src/assets/images/personalCenter/examine.png b/src/assets/images/personalCenter/examine.png
new file mode 100644
index 0000000..44782cb
--- /dev/null
+++ b/src/assets/images/personalCenter/examine.png
Binary files differ
diff --git a/src/assets/images/personalCenter/noPass.png b/src/assets/images/personalCenter/noPass.png
new file mode 100644
index 0000000..3a16beb
--- /dev/null
+++ b/src/assets/images/personalCenter/noPass.png
Binary files differ
diff --git a/src/assets/images/personalCenter/pass.png b/src/assets/images/personalCenter/pass.png
new file mode 100644
index 0000000..7b262c2
--- /dev/null
+++ b/src/assets/images/personalCenter/pass.png
Binary files differ
diff --git a/src/assets/images/teaching/arrow.png b/src/assets/images/teaching/arrow.png
new file mode 100644
index 0000000..c688ebe
--- /dev/null
+++ b/src/assets/images/teaching/arrow.png
Binary files differ
diff --git a/src/assets/images/teaching/electronicBooks.png b/src/assets/images/teaching/electronicBooks.png
new file mode 100644
index 0000000..c11c6d5
--- /dev/null
+++ b/src/assets/images/teaching/electronicBooks.png
Binary files differ
diff --git a/src/assets/images/teaching/paperCopies.png b/src/assets/images/teaching/paperCopies.png
new file mode 100644
index 0000000..def1021
--- /dev/null
+++ b/src/assets/images/teaching/paperCopies.png
Binary files differ
diff --git a/src/assets/images/teaching/sample.png b/src/assets/images/teaching/sample.png
new file mode 100644
index 0000000..3f5228b
--- /dev/null
+++ b/src/assets/images/teaching/sample.png
Binary files differ
diff --git a/src/assets/images/teaching/teacher.png b/src/assets/images/teaching/teacher.png
new file mode 100644
index 0000000..c79d103
--- /dev/null
+++ b/src/assets/images/teaching/teacher.png
Binary files differ
diff --git a/src/assets/images/tuijian-bg.png b/src/assets/images/tuijian-bg.png
new file mode 100644
index 0000000..79b9e3a
--- /dev/null
+++ b/src/assets/images/tuijian-bg.png
Binary files differ
diff --git a/src/assets/images/xiehe/about/about_bg.png b/src/assets/images/xiehe/about/about_bg.png
new file mode 100644
index 0000000..57cfe5e
--- /dev/null
+++ b/src/assets/images/xiehe/about/about_bg.png
Binary files differ
diff --git a/src/assets/images/xiehe/about/about_bg@2x.png b/src/assets/images/xiehe/about/about_bg@2x.png
new file mode 100644
index 0000000..a4a6731
--- /dev/null
+++ b/src/assets/images/xiehe/about/about_bg@2x.png
Binary files differ
diff --git a/src/assets/images/xiehe/about/beijing.png b/src/assets/images/xiehe/about/beijing.png
new file mode 100644
index 0000000..ad8b69a
--- /dev/null
+++ b/src/assets/images/xiehe/about/beijing.png
Binary files differ
diff --git a/src/assets/images/xiehe/about/beijing@2x.png b/src/assets/images/xiehe/about/beijing@2x.png
new file mode 100644
index 0000000..6957a79
--- /dev/null
+++ b/src/assets/images/xiehe/about/beijing@2x.png
Binary files differ
diff --git a/src/assets/images/xiehe/about/dizhi.png b/src/assets/images/xiehe/about/dizhi.png
new file mode 100644
index 0000000..1a5575b
--- /dev/null
+++ b/src/assets/images/xiehe/about/dizhi.png
Binary files differ
diff --git a/src/assets/images/xiehe/about/dizhi@2x.png b/src/assets/images/xiehe/about/dizhi@2x.png
new file mode 100644
index 0000000..7b9434e
--- /dev/null
+++ b/src/assets/images/xiehe/about/dizhi@2x.png
Binary files differ
diff --git "a/src/assets/images/xiehe/about/email\0501\051.png" "b/src/assets/images/xiehe/about/email\0501\051.png"
new file mode 100644
index 0000000..c23f555
--- /dev/null
+++ "b/src/assets/images/xiehe/about/email\0501\051.png"
Binary files differ
diff --git a/src/assets/images/xiehe/about/email.png b/src/assets/images/xiehe/about/email.png
new file mode 100644
index 0000000..2428ac1
--- /dev/null
+++ b/src/assets/images/xiehe/about/email.png
Binary files differ
diff --git "a/src/assets/images/xiehe/about/email@2x\0501\051.png" "b/src/assets/images/xiehe/about/email@2x\0501\051.png"
new file mode 100644
index 0000000..b78e528
--- /dev/null
+++ "b/src/assets/images/xiehe/about/email@2x\0501\051.png"
Binary files differ
diff --git a/src/assets/images/xiehe/about/email@2x.png b/src/assets/images/xiehe/about/email@2x.png
new file mode 100644
index 0000000..18e418e
--- /dev/null
+++ b/src/assets/images/xiehe/about/email@2x.png
Binary files differ
diff --git a/src/assets/images/xiehe/about/fazhan.png b/src/assets/images/xiehe/about/fazhan.png
new file mode 100644
index 0000000..c1f4563
--- /dev/null
+++ b/src/assets/images/xiehe/about/fazhan.png
Binary files differ
diff --git a/src/assets/images/xiehe/about/fazhan@2x.png b/src/assets/images/xiehe/about/fazhan@2x.png
new file mode 100644
index 0000000..eee79ba
--- /dev/null
+++ b/src/assets/images/xiehe/about/fazhan@2x.png
Binary files differ
diff --git a/src/assets/images/xiehe/about/footer-bg.png b/src/assets/images/xiehe/about/footer-bg.png
new file mode 100644
index 0000000..aaf2eb2
--- /dev/null
+++ b/src/assets/images/xiehe/about/footer-bg.png
Binary files differ
diff --git a/src/assets/images/xiehe/about/footer-bg@2x.png b/src/assets/images/xiehe/about/footer-bg@2x.png
new file mode 100644
index 0000000..9ac890b
--- /dev/null
+++ b/src/assets/images/xiehe/about/footer-bg@2x.png
Binary files differ
diff --git a/src/assets/images/xiehe/about/phone.png b/src/assets/images/xiehe/about/phone.png
new file mode 100644
index 0000000..7a693fa
--- /dev/null
+++ b/src/assets/images/xiehe/about/phone.png
Binary files differ
diff --git a/src/assets/images/xiehe/about/phone@2x.png b/src/assets/images/xiehe/about/phone@2x.png
new file mode 100644
index 0000000..c9f01b6
--- /dev/null
+++ b/src/assets/images/xiehe/about/phone@2x.png
Binary files differ
diff --git a/src/assets/images/xiehe/about/website.png b/src/assets/images/xiehe/about/website.png
new file mode 100644
index 0000000..43fac7f
--- /dev/null
+++ b/src/assets/images/xiehe/about/website.png
Binary files differ
diff --git a/src/assets/images/xiehe/about/website@2x.png b/src/assets/images/xiehe/about/website@2x.png
new file mode 100644
index 0000000..81dc51d
--- /dev/null
+++ b/src/assets/images/xiehe/about/website@2x.png
Binary files differ
diff --git a/src/assets/images/xiehe/about/wenhua_bg.png b/src/assets/images/xiehe/about/wenhua_bg.png
new file mode 100644
index 0000000..baed22a
--- /dev/null
+++ b/src/assets/images/xiehe/about/wenhua_bg.png
Binary files differ
diff --git a/src/assets/images/xiehe/about/wenhua_bg@2x.png b/src/assets/images/xiehe/about/wenhua_bg@2x.png
new file mode 100644
index 0000000..fdd7283
--- /dev/null
+++ b/src/assets/images/xiehe/about/wenhua_bg@2x.png
Binary files differ
diff --git a/src/assets/images/xiehe/about/yinhao.png b/src/assets/images/xiehe/about/yinhao.png
new file mode 100644
index 0000000..b6fde4b
--- /dev/null
+++ b/src/assets/images/xiehe/about/yinhao.png
Binary files differ
diff --git a/src/assets/images/xiehe/about/zizhi.png b/src/assets/images/xiehe/about/zizhi.png
new file mode 100644
index 0000000..82f2009
--- /dev/null
+++ b/src/assets/images/xiehe/about/zizhi.png
Binary files differ
diff --git a/src/assets/images/xiehe/about/zizhi@2x.png b/src/assets/images/xiehe/about/zizhi@2x.png
new file mode 100644
index 0000000..cfbc472
--- /dev/null
+++ b/src/assets/images/xiehe/about/zizhi@2x.png
Binary files differ
diff --git a/src/assets/images/xiehe/about/zongzhi.png b/src/assets/images/xiehe/about/zongzhi.png
new file mode 100644
index 0000000..75d6b08
--- /dev/null
+++ b/src/assets/images/xiehe/about/zongzhi.png
Binary files differ
diff --git a/src/assets/images/xiehe/about/zongzhi@2x.png b/src/assets/images/xiehe/about/zongzhi@2x.png
new file mode 100644
index 0000000..d6eece3
--- /dev/null
+++ b/src/assets/images/xiehe/about/zongzhi@2x.png
Binary files differ
diff --git "a/src/assets/images/xiehe/about/\342\200\234@2x.png" "b/src/assets/images/xiehe/about/\342\200\234@2x.png"
new file mode 100644
index 0000000..d1b32e4
--- /dev/null
+++ "b/src/assets/images/xiehe/about/\342\200\234@2x.png"
Binary files differ
diff --git "a/src/assets/images/xiehe/about/\345\205\263\344\272\216\346\210\221\344\273\254_slices.zip" "b/src/assets/images/xiehe/about/\345\205\263\344\272\216\346\210\221\344\273\254_slices.zip"
new file mode 100644
index 0000000..a102d9d
--- /dev/null
+++ "b/src/assets/images/xiehe/about/\345\205\263\344\272\216\346\210\221\344\273\254_slices.zip"
Binary files differ
diff --git a/src/assets/images/xiehe/detail/Audio.png b/src/assets/images/xiehe/detail/Audio.png
new file mode 100644
index 0000000..d7c938d
--- /dev/null
+++ b/src/assets/images/xiehe/detail/Audio.png
Binary files differ
diff --git a/src/assets/images/xiehe/detail/Audio@2x.png b/src/assets/images/xiehe/detail/Audio@2x.png
new file mode 100644
index 0000000..f84f787
--- /dev/null
+++ b/src/assets/images/xiehe/detail/Audio@2x.png
Binary files differ
diff --git a/src/assets/images/xiehe/detail/PPT.png b/src/assets/images/xiehe/detail/PPT.png
new file mode 100644
index 0000000..895106c
--- /dev/null
+++ b/src/assets/images/xiehe/detail/PPT.png
Binary files differ
diff --git a/src/assets/images/xiehe/detail/PPT@2x.png b/src/assets/images/xiehe/detail/PPT@2x.png
new file mode 100644
index 0000000..22486ac
--- /dev/null
+++ b/src/assets/images/xiehe/detail/PPT@2x.png
Binary files differ
diff --git a/src/assets/images/xiehe/detail/details_bg.png b/src/assets/images/xiehe/detail/details_bg.png
new file mode 100644
index 0000000..b94134d
--- /dev/null
+++ b/src/assets/images/xiehe/detail/details_bg.png
Binary files differ
diff --git a/src/assets/images/xiehe/detail/details_bg@2x.png b/src/assets/images/xiehe/detail/details_bg@2x.png
new file mode 100644
index 0000000..c3d8203
--- /dev/null
+++ b/src/assets/images/xiehe/detail/details_bg@2x.png
Binary files differ
diff --git a/src/assets/images/xiehe/detail/img.png b/src/assets/images/xiehe/detail/img.png
new file mode 100644
index 0000000..3502a50
--- /dev/null
+++ b/src/assets/images/xiehe/detail/img.png
Binary files differ
diff --git a/src/assets/images/xiehe/detail/img@2x.png b/src/assets/images/xiehe/detail/img@2x.png
new file mode 100644
index 0000000..57cee0d
--- /dev/null
+++ b/src/assets/images/xiehe/detail/img@2x.png
Binary files differ
diff --git a/src/assets/images/xiehe/detail/shijuan.png b/src/assets/images/xiehe/detail/shijuan.png
new file mode 100644
index 0000000..dfe225f
--- /dev/null
+++ b/src/assets/images/xiehe/detail/shijuan.png
Binary files differ
diff --git a/src/assets/images/xiehe/detail/shijuan@2x.png b/src/assets/images/xiehe/detail/shijuan@2x.png
new file mode 100644
index 0000000..140e276
--- /dev/null
+++ b/src/assets/images/xiehe/detail/shijuan@2x.png
Binary files differ
diff --git a/src/assets/images/xiehe/detail/shixun.png b/src/assets/images/xiehe/detail/shixun.png
new file mode 100644
index 0000000..a824f00
--- /dev/null
+++ b/src/assets/images/xiehe/detail/shixun.png
Binary files differ
diff --git a/src/assets/images/xiehe/detail/shixun@2x.png b/src/assets/images/xiehe/detail/shixun@2x.png
new file mode 100644
index 0000000..97999f4
--- /dev/null
+++ b/src/assets/images/xiehe/detail/shixun@2x.png
Binary files differ
diff --git a/src/assets/images/xiehe/detail/tuozhan.png b/src/assets/images/xiehe/detail/tuozhan.png
new file mode 100644
index 0000000..7b80f8a
--- /dev/null
+++ b/src/assets/images/xiehe/detail/tuozhan.png
Binary files differ
diff --git a/src/assets/images/xiehe/detail/tuozhan@2x.png b/src/assets/images/xiehe/detail/tuozhan@2x.png
new file mode 100644
index 0000000..cf5a722
--- /dev/null
+++ b/src/assets/images/xiehe/detail/tuozhan@2x.png
Binary files differ
diff --git a/src/assets/images/xiehe/detail/video.png b/src/assets/images/xiehe/detail/video.png
new file mode 100644
index 0000000..34498dc
--- /dev/null
+++ b/src/assets/images/xiehe/detail/video.png
Binary files differ
diff --git a/src/assets/images/xiehe/detail/video@2x.png b/src/assets/images/xiehe/detail/video@2x.png
new file mode 100644
index 0000000..5ec6a83
--- /dev/null
+++ b/src/assets/images/xiehe/detail/video@2x.png
Binary files differ
diff --git a/src/assets/images/xiehe/detail/ziliao.png b/src/assets/images/xiehe/detail/ziliao.png
new file mode 100644
index 0000000..a1b3249
--- /dev/null
+++ b/src/assets/images/xiehe/detail/ziliao.png
Binary files differ
diff --git a/src/assets/images/xiehe/detail/ziliao@2x.png b/src/assets/images/xiehe/detail/ziliao@2x.png
new file mode 100644
index 0000000..bf269a0
--- /dev/null
+++ b/src/assets/images/xiehe/detail/ziliao@2x.png
Binary files differ
diff --git "a/src/assets/images/xiehe/detail/\346\225\260\345\255\227\346\225\231\346\235\220\350\257\246\346\203\205_slices.zip" "b/src/assets/images/xiehe/detail/\346\225\260\345\255\227\346\225\231\346\235\220\350\257\246\346\203\205_slices.zip"
new file mode 100644
index 0000000..2b9eb3c
--- /dev/null
+++ "b/src/assets/images/xiehe/detail/\346\225\260\345\255\227\346\225\231\346\235\220\350\257\246\346\203\205_slices.zip"
Binary files differ
diff --git a/src/assets/images/xiehe/home/Chevron_Circle Right _ undefined _ Glyph_ undefined.png b/src/assets/images/xiehe/home/Chevron_Circle Right _ undefined _ Glyph_ undefined.png
new file mode 100644
index 0000000..dc1bfc6
--- /dev/null
+++ b/src/assets/images/xiehe/home/Chevron_Circle Right _ undefined _ Glyph_ undefined.png
Binary files differ
diff --git a/src/assets/images/xiehe/home/Chevron_Circle Right _ undefined _ Glyph_ undefined@2x.png b/src/assets/images/xiehe/home/Chevron_Circle Right _ undefined _ Glyph_ undefined@2x.png
new file mode 100644
index 0000000..8477f44
--- /dev/null
+++ b/src/assets/images/xiehe/home/Chevron_Circle Right _ undefined _ Glyph_ undefined@2x.png
Binary files differ
diff --git "a/src/assets/images/xiehe/home/Frame\0501\051.png" "b/src/assets/images/xiehe/home/Frame\0501\051.png"
new file mode 100644
index 0000000..27c295b
--- /dev/null
+++ "b/src/assets/images/xiehe/home/Frame\0501\051.png"
Binary files differ
diff --git "a/src/assets/images/xiehe/home/Frame\0502\051.png" "b/src/assets/images/xiehe/home/Frame\0502\051.png"
new file mode 100644
index 0000000..37c5394
--- /dev/null
+++ "b/src/assets/images/xiehe/home/Frame\0502\051.png"
Binary files differ
diff --git a/src/assets/images/xiehe/home/Frame.png b/src/assets/images/xiehe/home/Frame.png
new file mode 100644
index 0000000..2760fea
--- /dev/null
+++ b/src/assets/images/xiehe/home/Frame.png
Binary files differ
diff --git "a/src/assets/images/xiehe/home/Frame@2x\0501\051.png" "b/src/assets/images/xiehe/home/Frame@2x\0501\051.png"
new file mode 100644
index 0000000..6a8a9e2
--- /dev/null
+++ "b/src/assets/images/xiehe/home/Frame@2x\0501\051.png"
Binary files differ
diff --git "a/src/assets/images/xiehe/home/Frame@2x\0502\051.png" "b/src/assets/images/xiehe/home/Frame@2x\0502\051.png"
new file mode 100644
index 0000000..dc71cd3
--- /dev/null
+++ "b/src/assets/images/xiehe/home/Frame@2x\0502\051.png"
Binary files differ
diff --git a/src/assets/images/xiehe/home/Frame@2x.png b/src/assets/images/xiehe/home/Frame@2x.png
new file mode 100644
index 0000000..76d9224
--- /dev/null
+++ b/src/assets/images/xiehe/home/Frame@2x.png
Binary files differ
diff --git a/src/assets/images/xiehe/home/Group_302.png b/src/assets/images/xiehe/home/Group_302.png
new file mode 100644
index 0000000..83c82ff
--- /dev/null
+++ b/src/assets/images/xiehe/home/Group_302.png
Binary files differ
diff --git a/src/assets/images/xiehe/home/Group_302@2x.png b/src/assets/images/xiehe/home/Group_302@2x.png
new file mode 100644
index 0000000..9e6b5b3
--- /dev/null
+++ b/src/assets/images/xiehe/home/Group_302@2x.png
Binary files differ
diff --git a/src/assets/images/xiehe/home/Group_303.png b/src/assets/images/xiehe/home/Group_303.png
new file mode 100644
index 0000000..9112f56
--- /dev/null
+++ b/src/assets/images/xiehe/home/Group_303.png
Binary files differ
diff --git a/src/assets/images/xiehe/home/Group_303@2x.png b/src/assets/images/xiehe/home/Group_303@2x.png
new file mode 100644
index 0000000..d5b40a0
--- /dev/null
+++ b/src/assets/images/xiehe/home/Group_303@2x.png
Binary files differ
diff --git a/src/assets/images/xiehe/home/banner.png b/src/assets/images/xiehe/home/banner.png
new file mode 100644
index 0000000..c82210f
--- /dev/null
+++ b/src/assets/images/xiehe/home/banner.png
Binary files differ
diff --git a/src/assets/images/xiehe/home/banner@2x.png b/src/assets/images/xiehe/home/banner@2x.png
new file mode 100644
index 0000000..bfa84d9
--- /dev/null
+++ b/src/assets/images/xiehe/home/banner@2x.png
Binary files differ
diff --git a/src/assets/images/xiehe/home/caozuoshouce.png b/src/assets/images/xiehe/home/caozuoshouce.png
new file mode 100644
index 0000000..cf0b5d2
--- /dev/null
+++ b/src/assets/images/xiehe/home/caozuoshouce.png
Binary files differ
diff --git a/src/assets/images/xiehe/home/caozuoshouce@2x.png b/src/assets/images/xiehe/home/caozuoshouce@2x.png
new file mode 100644
index 0000000..aa0fb9a
--- /dev/null
+++ b/src/assets/images/xiehe/home/caozuoshouce@2x.png
Binary files differ
diff --git a/src/assets/images/xiehe/home/footer-bg.png b/src/assets/images/xiehe/home/footer-bg.png
new file mode 100644
index 0000000..aaf2eb2
--- /dev/null
+++ b/src/assets/images/xiehe/home/footer-bg.png
Binary files differ
diff --git a/src/assets/images/xiehe/home/footer-bg@2x.png b/src/assets/images/xiehe/home/footer-bg@2x.png
new file mode 100644
index 0000000..9ac890b
--- /dev/null
+++ b/src/assets/images/xiehe/home/footer-bg@2x.png
Binary files differ
diff --git a/src/assets/images/xiehe/home/jiaoshirenzheng.png b/src/assets/images/xiehe/home/jiaoshirenzheng.png
new file mode 100644
index 0000000..57c76b9
--- /dev/null
+++ b/src/assets/images/xiehe/home/jiaoshirenzheng.png
Binary files differ
diff --git a/src/assets/images/xiehe/home/jiaoshirenzheng@2x.png b/src/assets/images/xiehe/home/jiaoshirenzheng@2x.png
new file mode 100644
index 0000000..611ad1f
--- /dev/null
+++ b/src/assets/images/xiehe/home/jiaoshirenzheng@2x.png
Binary files differ
diff --git a/src/assets/images/xiehe/home/tuijian-bg.png b/src/assets/images/xiehe/home/tuijian-bg.png
new file mode 100644
index 0000000..b7343cf
--- /dev/null
+++ b/src/assets/images/xiehe/home/tuijian-bg.png
Binary files differ
diff --git a/src/assets/js/config.js b/src/assets/js/config.js
new file mode 100644
index 0000000..f100767
--- /dev/null
+++ b/src/assets/js/config.js
@@ -0,0 +1,84 @@
+export const requestCtx = 'http://182.92.203.7:5001' // 璇锋眰鍦板潃
+// export const appId = 1051;
+
+// export const requestCtx = 'http://172.31.31.145' // 璇锋眰鍦板潃
+// export const requestCtx = 'http://172.0.0.1' // 璇锋眰鍦板潃
+export const appId = 1
+
+export const requestTimeOut = 300000 // 璇锋眰瓒呮椂鏃堕棿
+export const tokenKey = 'jilin-token'
+export const userInfoKey = 'jilin-userInfo' // 鐢ㄦ埛淇℃伅key
+export const appRefCode = 'jilinWebsite'
+export const goodsStore = `defaultGoodsStore${appId}` // 榛樿鍟嗗搧搴�(涔﹀煄)
+export const publicStore = `defaultPublicStore${appId}` // 榛樿璧勬簮寮�鏀句粨鍌�
+export const publicRepository = `defaultPublicRepository${appId}` // 榛樿璧勬簮寮�鏀惧簱
+
+export const reg_tel =
+  /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/ // 鐢佃瘽鍙锋鍒�
+
+// refcode
+const refCode = {
+  // 鏀惰棌璧勬簮搴�
+  FavoriteMathVideo: 'FavoriteMathVideo',
+  FavoriteMathPicture: 'FavoriteMathPicture',
+  FavoriteMathAudio: 'FavoriteMathAudio',
+  FavoriteMathModel: 'FavoriteMathModel',
+  // 杞挱鍥�
+  bannerCode: 'jilin_banner\\jilin_digitalResource',
+  // 鏍囧噯
+  criterion: 'jilin_criterion',
+  // 璧勮
+  information: 'jilin_information',
+  // 鍏充簬鎴戜滑
+  aboutUs: 'jilin_aboutUs',
+  // 鑽h獕濂栧姳
+  honorAwards: 'jilin_honorAwards',
+  // 鑱旂郴鎴戜滑
+  contactUs: 'jilin_contactUs',
+  // 浠撳簱搴�
+  pictureCode: 'jilin_imgResourceLibrary',
+  audioCode: 'jilin_audiosResourceLibrary',
+  videoCode: 'jilin_videosResourceLibrary',
+  modelCode: 'jilin_modelsResourceLibrary',
+  // 鍟嗗搧搴�
+  imageStore: 'jilin_imgLibrary\\jilin_imageStore',
+  videoStore: 'jilin_videosLibrary\\jilin_videosStore',
+  audiosStore: 'jilin_audiosLibrary\\jilin_audiosStore',
+  modelStore: 'jilin_modelsLibrary\\jilin_modelsStore',
+  // 浼氬憳鍟嗗搧搴�
+  memberImage: 'jilin_imgLibrary\\jilin_memberImage',
+  memberAudios: 'jilin_audiosLibrary\\jilin_memberAudios',
+  memberVideos: 'jilin_videosLibrary\\jilin_memberVideos',
+  memberModels: 'jilin_modelsLibrary\\jilin_memberModels',
+  // 鏈�鏂拌祫婧愬簱
+  newImageStore: 'jilin_imgLibrary\\jilin_newImageStore',
+  newaudiosStore: 'jilin_audiosLibrary\\jilin_newaudiosStore',
+  newVideosStore: 'jilin_videosLibrary\\jilin_newVideosStore',
+  newModelsStore: 'jilin_modelsLibrary\\jilin_newModelsStore',
+  // 棣栭〉鎺ㄨ崘璧勬簮
+  recommendImgStore:'jilin_imgLibrary\\jilin_recommendedImage',
+  recommendAudioStore:'jilin_audiosLibrary\\jilin_recommendedAudio',
+  recommendVideoStore:'jilin_videosLibrary\\jilin_recommendedVideo',
+  recommendModelStore:'jilin_modelsLibrary\\jilin_recommendedModel',
+}
+
+const wxLogin = {
+  appid: 'wx2b9d4a6308fd03d6',
+  scope: 'snsapi_login',
+  logInRedirectURL: encodeURIComponent(requestCtx + '/website'),
+  authenRedirectURL:encodeURIComponent(requestCtx + '/website/#/userInfo')
+}
+
+const config = {
+  requestCtx,
+  requestTimeOut,
+  tokenKey,
+  userInfoKey,
+  appRefCode,
+  goodsStore,
+  reg_tel,
+  appId,
+  refCode,
+  wxLogin
+}
+export default config
diff --git a/src/assets/js/iframe.js b/src/assets/js/iframe.js
new file mode 100644
index 0000000..0e84de9
--- /dev/null
+++ b/src/assets/js/iframe.js
@@ -0,0 +1,32 @@
+let isSelect = false;
+let move = false;
+
+
+document.addEventListener('mousedown', () => {
+    isSelect = true;
+});
+
+document.addEventListener('mousemove', () => {
+    if (isSelect) {
+        move = true;
+    }
+});
+
+document.addEventListener('mouseup', (e) => {
+    isSelect = false;
+    if (move) {
+        const selection = window.getSelection();
+        if (selection && selection.toString().length != 0) {
+            parent.window.selectChange(e)
+        }
+    }
+    move = false;
+    e.preventDefault();
+});
+parent.window.document.getElementsByClassName("epub-container")[0].addEventListener("scroll", function (e) {
+    parent.window.scroll(e); // 璋冪敤澶勭悊鍑芥暟骞朵紶鍏ュ弬鏁�
+})
+
+
+
+
diff --git a/src/assets/js/middleGround/WebMiddleGroundApi.js b/src/assets/js/middleGround/WebMiddleGroundApi.js
new file mode 100644
index 0000000..77aa2f0
--- /dev/null
+++ b/src/assets/js/middleGround/WebMiddleGroundApi.js
@@ -0,0 +1,24 @@
+// 鍙栨秷鎺ュ彛璋冪敤鑳藉姏锛�
+// 闃熷垪鐨勫繀瑕佹�э紵锛�
+
+import resource from "./api/resource.js";
+import store from "./api/store.js";
+import identity from "./api/identity.js";
+import ugc from "./api/ugc.js";
+import app from "./api/app.js";
+import file from "./api/file.js";
+import job from "./api/job.js";
+import edu from "./api/edu.js";
+
+const WebMiddleGroundApi = {
+  resource,
+  store,
+  identity,
+  ugc,
+  app,
+  file,
+  job,
+  edu,
+};
+
+export default WebMiddleGroundApi;
\ No newline at end of file
diff --git a/src/assets/js/middleGround/api/app.js b/src/assets/js/middleGround/api/app.js
new file mode 100644
index 0000000..98821c3
--- /dev/null
+++ b/src/assets/js/middleGround/api/app.js
@@ -0,0 +1,57 @@
+import request from "@/plugin/axios/index.ts";
+const appApi = {
+  // 鑾峰彇鐢ㄦ埛娑堟伅鍒楄〃
+  getAppMessageList(data) {
+    return request({
+      url: "/app/api/ApiGetAppMessageList",
+      method: "post",
+      data
+    });
+  },
+  // 鑾峰彇鐢ㄦ埛娑堟伅璇︽儏
+  getMessage(data) {
+    return request({
+      url: "/app/api/ApiGetMessage",
+      method: "post",
+      data
+    });
+  },
+
+  //鑾峰彇鍑瘉
+  getTicketResult(data) {
+    return request({
+      url: "/app/api/ApiGetTicketResult",
+      method: "post",
+      data
+    });
+  },
+  
+  //浣跨敤鍑瘉
+  useTicket(data) {
+    return request({
+      url:   "/app/api/ApiUseTicket",
+      method: "post",
+      data
+    });
+  },
+
+  // 鑾峰彇CmsItem鎸夌収Event缁熻
+  getEventRankList(data) {
+    return request({
+      url: "/app/api/ApiGetEventRankList",
+      method: "post",
+      data
+    });
+  },
+
+  // 鑾峰彇瀛︿範鏃堕暱鎸夌収Event缁熻
+  getStaticsSum(data) {
+    return request({
+      url: "/app/api/ApiGetUserStaticsSum",
+      method: "post",
+      data
+    });
+  },
+};
+
+export default appApi;
diff --git a/src/assets/js/middleGround/api/edu.js b/src/assets/js/middleGround/api/edu.js
new file mode 100644
index 0000000..1ed71f2
--- /dev/null
+++ b/src/assets/js/middleGround/api/edu.js
@@ -0,0 +1,166 @@
+import request from '@/plugin/axios/index.ts'
+import { handleQueryResourceListData } from '../tool'
+const eduApi = {
+  // 鑾峰彇鍟嗗搧涓嬬殑缁勫嵎绛栫暐
+  getQuizConfigListByProduct(data) {
+    return request({
+      url: '/edu/api/ApiGetQuizConfigListByProduct',
+      method: 'post',
+      data,
+    })
+  },
+  // 鑾峰彇缁勫嵎缁撴灉
+  getEduQuizConfigResult(data) {
+    return request({
+      url: '/edu/api/ApiGetEduQuizConfigResult',
+      method: 'post',
+      data,
+    })
+  },
+
+  //鐢宠璇剧▼
+  applyNewCourse(data) {
+    return request({
+      url: '/edu/api/ApiApplyNewCourse',
+      method: 'post',
+      data,
+    })
+  },
+
+  //鏇存柊璇剧▼鐢宠淇℃伅
+  updateCourseApply(data) {
+    return request({
+      url: '/edu/api/ApiUpdateCourseApply',
+      method: 'post',
+      data,
+    })
+  },
+
+  //鑾峰彇鎴戠殑璇剧▼
+  getAppCourseList(data) {
+    return request({
+      url: '/edu/api/ApiGetAppCourseList',
+      method: 'post',
+      data,
+    })
+  },
+
+  //鑾峰彇宸茬敵璇风殑璇剧▼璇︽儏
+  getCourseById(data) {
+    return request({
+      url: '/edu/api/ApiGetCourseById',
+      method: 'post',
+      data,
+    })
+  },
+
+  //鑾峰彇鍒涘缓璇剧▼涓殑鐝骇鍒楄〃
+  getCourseClassList(data) {
+    return request({
+      url: '/edu/api/ApiGetCourseClassList',
+      method: 'post',
+      data,
+    })
+  },
+
+  //鍒涘缓鐝骇淇℃伅
+  newCourseClass(data) {
+    return request({
+      url: '/edu/api/ApiNewCourseClass',
+      method: 'post',
+      data,
+    })
+  },
+
+  //鍒犻櫎鐝骇淇℃伅
+  delCourseClass(data) {
+    return request({
+      url: '/edu/api/ApiDelCourseClass',
+      method: 'post',
+      data,
+    })
+  },
+
+  // 鏇存柊鐝骇淇℃伅
+  updateCourseClass(data) {
+    return request({
+      url: '/edu/api/ApiUpdateCourseClass',
+      method: 'post',
+      data,
+    })
+  },
+
+  //鍒涘缓璇剧▼璁㈠崟
+  createCourseOrder(data) {
+    return request({
+      url: '/store/api/CreateCourseOrder',
+      method: 'post',
+      data,
+    })
+  },
+
+  // 鍏嶈垂棰嗗彇璇剧▼
+  makeFreeOrderPay(data) {
+    return request({
+      url: '/store/api/MakeFreeOrderPay',
+      method: 'post',
+      data,
+    })
+  },
+
+  // 鑾峰彇鎺掑悕缁撴灉
+  getRankingList(data) {
+    return request({
+      url: '/edu/api/ApiGetRankingList',
+      method: 'post',
+      data,
+    })
+  },
+
+  //鑾峰彇涓汉鎺掑悕
+  getRanking(data) {
+    return request({
+      url: '/edu/api/ApiGetTopRanking',
+      method: 'post',
+      data,
+    })
+  },
+
+  // 鏂板缓鎺掑悕璁板綍
+  newRanking(data) {
+    return request({
+      url: '/edu/api/ApiNewRanking',
+      method: 'post',
+      data,
+    })
+  },
+
+  // 鍒犻櫎缁勫嵎瑙勫垯
+  delQuizConfig(data) {
+    return request({
+      url: '/edu/admin/DelQuizConfig',
+      method: 'post',
+      data,
+    })
+  },
+
+  // 鏇存柊缁勫嵎瑙勫垯
+  updateQuizConfig(data) {
+    return request({
+      url: '/edu/admin/UpdateQuizConfig',
+      method: 'post',
+      data,
+    })
+  },
+
+  // 鏍规嵁ID鑾峰彇缁勫嵎閰嶇疆
+  getQuizConfig(data) {
+    return request({
+      url: '/edu/admin/GetQuizConfig',
+      method: 'post',
+      data,
+    })
+  },
+}
+
+export default eduApi
diff --git a/src/assets/js/middleGround/api/file.js b/src/assets/js/middleGround/api/file.js
new file mode 100644
index 0000000..7564f80
--- /dev/null
+++ b/src/assets/js/middleGround/api/file.js
@@ -0,0 +1,94 @@
+import request from "@/plugin/axios/index.ts";
+const fileApi = {
+  // 鑾峰彇pdf鎬婚〉鏁�
+  getPdfTotalPage(data) {
+    return request({
+      url: "/file/GetPdfTotalPage",
+      method: "post",
+      data
+    });
+  },
+
+  // 鑾峰彇pdf銆亀ord銆乸pt绛夎浆鍥剧墖棰勮
+  getPdfInfo(data) {
+    return request({
+      url: "/file/GetPdfInfo",
+      method: "post",
+      data
+    });
+  },
+  //鑾峰彇pdf鐩綍
+  GetPdfToc(data) {
+    return request({
+      url: "/file/GetPdfToc",
+      method: "post",
+      data
+    });
+  },
+  //鑾峰彇鏂囦欢
+  getPdfPageImage(params) {
+    return request({
+      url: '/file/GetPdfPageImage',
+      method: 'get',
+      responseType: 'blob',
+      params
+    });
+  },
+  //涓婁紶鏂囦欢
+  upload(data) {
+    return request({
+      url: "/file/api/ApiUpload",
+      method: "post",
+      data
+    });
+  },
+
+  // 鑾峰彇闃块噷浜戝姞閫熷湴鍧�
+  getAliVod(data) {
+    return request({
+      url: "/file/GetAliVod",
+      method: "post",
+      data,
+    });
+  },
+
+  downloadForAuthorize(params) {
+    return request({
+      url: '/file/api/ApiDownloadForAuthorize',
+      method: 'GET',
+      responseType: 'blob',
+      params
+    });
+  },
+  // 鎵归噺涓嬭浇
+  downloadFiles(data) {
+    return request({
+      url: '/file/api/ApiDownloadFiles',
+      method: 'post',
+      responseType: 'blob',
+      data
+    });
+  },
+
+  // 鎵归噺涓嬭浇get
+  getDownloadFiles (params) {
+    return request({
+      url: '/file/api/ApiGetDownloadFiles',
+      method: 'GET',
+      responseType: 'blob',
+      headers:{
+        'md5s':params
+      }
+    });
+  },
+  // 鍙戦�佷笅杞介偖浠�
+  sendFileEmail (data) {
+    return request({
+      url:'/file/api/ApiSendFileWithEmail',
+      method:'post',
+      data
+    })
+  }
+}
+
+export default fileApi;
\ No newline at end of file
diff --git a/src/assets/js/middleGround/api/identity.js b/src/assets/js/middleGround/api/identity.js
new file mode 100644
index 0000000..bdd37e4
--- /dev/null
+++ b/src/assets/js/middleGround/api/identity.js
@@ -0,0 +1,181 @@
+import request from "@/plugin/axios/index.ts";
+const identityApi = {
+  // 鑾峰彇鍥惧舰楠岃瘉鐮�
+  getImgCode() {
+    return request({
+      url: "/identity/NewCaptcha",
+      method: "post",
+    });
+  },
+
+  // 楠岃瘉鍥惧舰楠岃瘉鐮�
+  verificationImgCode(data) {
+    return request({
+      url: "/identity/ValidCaptcha",
+      method: "post",
+      data,
+    });
+  },
+
+  // 鑾峰彇鐭俊楠岃瘉鐮�
+  getPhoneCode(data) {
+    return request({
+      url: "/identity/NewSms",
+      method: "post",
+      data,
+    });
+  },
+  // 楠岃瘉鐭俊楠岃瘉鐮�
+  verificationPhoneCode(data) {
+    return request({
+      url: "/identity/api/ApiValidMobilePhone",
+      method: "post",
+      data,
+    });
+  },
+
+  // 閫氳繃鎵嬫満鍙锋敞鍐岀敤鎴�
+  registerAppUserWithPhone(data) {
+    return request({
+      url: "/identity/api/RegisterAppUserWithPhone",
+      method: "post",
+      data,
+    });
+  },
+
+  // 璐﹀彿瀵嗙爜鐧诲綍
+  loginByPassword(data) {
+    return request({
+      url: "/identity/api/LoginByPassword",
+      method: "post",
+      data,
+    });
+  },
+
+  // 鐭俊楠岃瘉鐮佺櫥褰�
+  loginByMobilePhone(data) {
+    return request({
+      url: "/identity/api/LoginByMobilePhone",
+      method: "post",
+      data,
+    });
+  },
+
+  // 璁剧疆鐢ㄦ埛key
+  setUserKey(data) {
+    return request({
+      url: "/identity/api/ApiAppUserSetKey",
+      method: "post",
+      data,
+    });
+  },
+
+  // 鑾峰彇鐢ㄦ埛key
+  getUserKey(data) {
+    return request({
+      url: "/identity/api/ApiGetAppUserKey",
+      method: "post",
+      data,
+    });
+  },
+
+  // 鍒犻櫎鐢ㄦ埛key
+  delUserKey(data) {
+    return request({
+      url: "/identity/api/ApiDelAppUserKey",
+      method: "post",
+      data,
+    });
+  },
+
+  // 鑾峰彇鍘诲綋鍓嶇敤鎴蜂俊鎭�
+  getCurrentAppUser() {
+    return request({
+      url: "/identity/api/GetCurrentAppUser",
+      method: "post",
+    });
+  },
+
+  // 娣诲姞鐢ㄦ埛淇℃伅
+  setAppUserInfo(data) {
+    return request({
+      url: "/identity/api/SetAppUserInfoRequest",
+      method: "post",
+      data,
+    });
+  },
+
+  // 鐢ㄦ埛鏇存崲缁戝畾鎵嬫満鍙凤紝濡傛病鏈夌粦瀹氭墜鏈哄垯鑷姩鍒涘缓
+  userSetPhoneNumber(data) {
+    return request({
+      url: "/identity/api/ApiUserSetPhoneNumber",
+      method: "post",
+      data,
+    });
+  },
+
+  // 妫�娴嬬敤鎴锋槸鍚︾粦瀹氬井淇�
+  checkBuildingWeChat(data) {
+    return request({
+      url: "/identity/api/ApiCheckBuildingWeChat",
+      method: "post",
+      data,
+    });
+  },
+
+
+  // 閫氳繃鎵嬫満鍙烽噸缃瘑鐮�
+  changePasswordByMobilePhone(data) {
+    return request({
+      url: "/identity/api/ChangePasswordByMobilePhone",
+      method: "post",
+      data,
+    });
+  },
+
+  // 寰俊寮�鏀惧钩鍙版壂鐮佺櫥褰�
+  loginByWeChatOpenCode(data) {
+    return request({
+      url: "/identity/api/LoginByWeChatOpenCode",
+      method: "post",
+      data,
+    });
+  },
+
+  // 鐢ㄦ埛缁戝畾寰俊鍙�
+  bindingWeChat(data) {
+    return request({
+      url: "/identity/api/ApiBindingWeChat",
+      method: "post",
+      data,
+    });
+  },
+
+  // 璁剧疆鐧诲綍鐨勭敤鎴峰悕鍜屽瘑鐮侊紝鐢ㄦ埛鍚嶅拰瀵嗙爜鑷冲皯6浣�
+  setLoginNameAndPassword(data) {
+    return request({
+      url: "/identity/api/ApiUserSetLoginNameAndPassword",
+      method: "post",
+      data,
+    });
+  },
+
+  // 鑾峰彇閭楠岃瘉鐮�
+  getEmailCode(data) {
+    return request({
+      url: "/identity/api/SendVerifyEMail",
+      method: "post",
+      data,
+    });
+  },
+  // 鐢ㄦ埛缁戝畾閭
+  bindingEmail(data) {
+    return request({
+      url: "/identity/api/ApiBindEMail",
+      method: "post",
+      data,
+    });
+  },
+};
+
+export default identityApi;
\ No newline at end of file
diff --git a/src/assets/js/middleGround/api/job.js b/src/assets/js/middleGround/api/job.js
new file mode 100644
index 0000000..c05d32d
--- /dev/null
+++ b/src/assets/js/middleGround/api/job.js
@@ -0,0 +1,34 @@
+import request from "@/plugin/axios/index.ts";
+import { tokenKey } from "@/assets/js/config";
+import toolClass from "@/assets/js/toolClass";
+
+
+const jobApi = {
+  // 缁熻
+  newJobWithNewView(data) {
+    return request({
+      url: "/job/api/NewJobWithNewView",
+      method: "post",
+      data
+    });
+  },
+
+  newSession(data) {
+    let token = toolClass.getCookie(tokenKey);
+    return request({
+      url: token ? "/job/api/AppUserNewSession" : "/job/api/NewSession",
+      method: "post",
+      data
+    });
+  },
+
+  newJobWithApiNewEvent(data){
+    return request({
+      url: "/job/api/NewJobWithApiNewEvent",
+      method: "post",
+      data
+    });
+  }
+};
+
+export default jobApi;
diff --git a/src/assets/js/middleGround/api/resource.js b/src/assets/js/middleGround/api/resource.js
new file mode 100644
index 0000000..e9f9213
--- /dev/null
+++ b/src/assets/js/middleGround/api/resource.js
@@ -0,0 +1,223 @@
+import request from "@/plugin/axios/index.ts";
+import { publicStore, publicRepository } from "@/assets/js/config";
+import { tokenKey } from "@/assets/js/config";
+import { handleQueryResourceListData } from "../tool";
+import toolClass from "@/assets/js/toolClass";
+const resourceApi = {
+  /*
+    **鑾峰彇璧勬簮鍒楄〃&璇︽儏**
+    path: 鏁版嵁璺緞
+    storeInfo: 浠撳偍
+    repositoryInfo: 浠撳簱
+    queryType: 妫�绱㈢被鍨�
+    paging: 鍒嗛〉
+    sort: 鎺掑簭
+    fields: 鑷畾涔夊瓧娈�
+    itemId: 鑾峰彇璇︽儏鏃剁殑璧勬簮ID
+  */
+  getItem: ({
+    path,
+    storeInfo = publicStore,
+    repositoryInfo = publicRepository,
+    queryType,
+    linkType,
+    paging,
+    sort,
+    fields,
+    itemId,
+    itemIds,
+    itemType,
+    coverSize,
+    itemIdArr,
+    SysType,
+    tourism_isHighQualityResources,
+  }) => {
+    if (!path) return Promise.reject("鎺ュ彛璇锋眰蹇呰鍙傛暟涓嶈兘涓虹┖锛�");
+
+
+
+
+    
+    const query = {
+      AccessControl: {
+        Path: path,
+        StoreRefCode: storeInfo + "",
+        RepositoryRefCode: repositoryInfo + "",
+        Type: queryType || "\\",
+        LinkType: linkType || "",
+      },
+      PageQuery: {
+        Start: paging?.start || "0",
+        Size: paging?.size || "10",
+      },
+      SortQuery: sort ? [sort] : [{
+        LinkOrder: "Desc"
+      }],
+      CreateDate: [],
+      Description: [],
+      Name: [],
+      Icon: [],
+      RefCode: [],
+      Type: [],
+      TypeId: [],
+      State: [],
+      Tag: [],
+      LinkInfo: [],
+      LinkFile: [],
+      CmsItemType: [],
+      ChildrenFolderCount: [],
+      ChildrenCount: [],
+      ...fields,
+    };
+    if (itemIdArr) query["Id"] = itemIdArr;
+    if (SysType) query["SysType="] = [`${SysType}`];
+    if (tourism_isHighQualityResources)
+      query["tourism_isHighQualityResources="] = [
+        `${tourism_isHighQualityResources}`,
+      ];
+    if (itemId) query["Id="] = [`${itemId}`];
+    if (itemIds) query["Id="] = itemIds;
+    if (itemType) query["Type="] = [`${itemType}`];
+    const body = { query: JSON.stringify({ Query: [{ Q1: query }] }) };
+    let token = localStorage.getItem(tokenKey);
+    return request({
+      url: token ? "/resource/api/ApiAppUserQuery" : "/resource/api/ApiQuery",
+      method: "post",
+      data: body,
+    }).then((resp) => {
+      if (resp.length > 0) {
+        const data = resp[0];
+        const datas = handleQueryResourceListData({
+          datas: data.datas,
+          fields,
+          path,
+          storeInfo,
+          repositoryInfo,
+          coverSize,
+        });
+        return { datas, total: data.totalCount };
+      }
+      return { datas: [], total: 0 };
+    });
+  },
+  // 妯$硦鎼滅储
+  EsQuery(query) {
+    let { params, path, paging } = query;
+    let queryBody = {
+      Type: "*",
+      Store: [],
+      ItemType: [],
+      CmsType: [],
+      SysType: ["CmsItem"],
+      LinkInfo: [],
+      PageQuery: {
+        Start: paging?.start || "0",
+        Size: paging?.size || "10",
+      },
+    };
+    // 璁剧疆涓嶅悓鐨凱ath
+
+    // 濡傛灉娌℃湁鎼滅储鍏抽敭瀛楋紝鍒欏彧鐢ㄨ幏鍙栧悕绉�
+    if (params.length > 0) {
+      let data = {
+        "||Name": [...params],
+        "||tourism_content*": [...params],
+        "||tourism_workflow*": [...params],
+        "||tourism_notes*": [...params],
+        "||tourism_caseIndex*": [...params],
+        "||tourism_basicCase*": [...params],
+        "||tourism_judgmentAndReasons*": [...params],
+        "||tourism_legalIssuesInvolvedInThisCase*": [...params],
+        "||tourism_referenceAnswerAndLegalAnalysis*": [...params],
+        "||tourism_case*": [...params],
+        "||tourism_clause*": [...params],
+        "||tourism_unscramble*": [...params],
+        "||tourism_specialRemind*": [...params],
+        "||tourism_fiction*": [...params],
+        "||tourism_authorityNature*": [...params],
+        "||tourism_authorityGist*": [...params],
+        "||tourism_penaltyGist*": [...params],
+        "||tourism_penaltyTerms*": [...params],
+        "||tourism_penaltyType*": [...params],
+        "||tourism_remarksNote*": [...params],
+        "||tourism_keyword*": [...params],
+      };
+      Object.assign(queryBody, data);
+    } else {
+      let data = {
+        Name: [],
+      };
+      Object.assign(queryBody, data);
+    }
+
+    // 鍏ㄩ儴鎼滅储  - 鍗曠嫭鐨勬煇涓簱
+    if (path != "All") {
+      let data = {
+        Path: [
+          {
+            Repository: "tourism_tourismLawsAndRegulationsDatabase",
+            Path: path,
+          },
+        ],
+      };
+      Object.assign(queryBody, data);
+    }
+    const body = { query: JSON.stringify({ Query: [{ Q1: queryBody }] }) };
+
+    return request({
+      url: "/resource/api/ApiEsQuery",
+      method: "post",
+      data: body,
+    }).then((res) => {
+      if (res.length > 0) {
+        const data = res[0];
+
+        const datas = handleQueryResourceListData({
+          datas: data.datas,
+          path,
+        });
+        return { datas, total: data.totalCount };
+      }
+      return { data: [], total: 0 };
+    });
+  },
+
+  //鑾峰彇璧勬簮绫诲瀷
+  getCmsTypeByRefCode(data) {
+    return request({
+      url: "resource/api/ApiGetCmsTypeByRefCode",
+      method: "post",
+      data,
+    });
+  },
+
+  //鍙栨秷cms鏀惰棌
+  delCmsItemLink(data) {
+    return request({
+      url: "/resource/api/ApiDelCmsItemLink",
+      method: "post",
+      data,
+    });
+  },
+
+  //cms鏀惰棌
+  collectCmsItem(data) {
+    return request({
+      url: "/resource/api/ApiAddCmsItemLink",
+      method: "post",
+      data,
+    });
+  },
+
+  // 鑾峰彇cms鏀惰棌鍒楄〃
+  getCmsCollectList(data) {
+    const body = { query: JSON.stringify({ Query: [{ Q1: data }] }) };
+    return request({
+      url: "/resource/api/ApiAppUserQuery",
+      method: "post",
+      data: body,
+    });
+  },
+};
+
+export default resourceApi;
diff --git a/src/assets/js/middleGround/api/store.js b/src/assets/js/middleGround/api/store.js
new file mode 100644
index 0000000..bbe8f32
--- /dev/null
+++ b/src/assets/js/middleGround/api/store.js
@@ -0,0 +1,879 @@
+import request from '@/plugin/axios/index.ts'
+import { tokenKey, goodsStore } from '@/assets/js/config'
+import { handleQueryResourceListData, handleDetailQueryRequestData } from '../tool'
+const storeApi = {
+  /*
+    **鑾峰彇鍟嗗搧鍒楄〃**
+    path: 鏁版嵁璺緞
+    storeInfo: 浠撳偍
+    channelInfo: 棰戦亾
+    subAccess: 
+    queryType: 妫�绱㈢被鍨�
+    paging: 鍒嗛〉
+    sort: 鎺掑簭
+    fields: 鑷畾涔夊瓧娈�
+  */
+  getProductList: ({
+    path = '',
+    storeInfo = goodsStore,
+    storeEventIdOrRefCode = '',
+    favoriteTypes = '',
+    queryType,
+    linkType,
+    subAccess = [],
+    paging = {},
+    sort,
+    fields,
+    filterList,
+    coverSize,
+    mainProductId,
+    handelEBooK
+  }) => {
+    const query = {
+      AccessControl: {
+        Path: path,
+        StoreRefCode: storeInfo + '',
+        Type: queryType || '\\',
+        LinkType: linkType || ''
+      },
+      FavoriteTypes: favoriteTypes ? [favoriteTypes] : [],
+      SubAccess: subAccess.length > 0 ? subAccess : [],
+      PageQuery: {
+        Start: paging.start || '0',
+        Size: paging.size || '10'
+      },
+      SortQuery:
+        sort?.length == 0
+          ? []
+          : sort
+            ? [sort]
+            : [
+                {
+                  LinkOrder: 'Desc'
+                }
+              ],
+      CreateDate: [],
+      Description: [],
+      Name: [],
+      Icon: [],
+      RefCode: [],
+      TypeId: [],
+      SysType: [],
+      State: [],
+      Tag: [],
+      BeginDate: [],
+      EndDate: [],
+      ProductLinkInfo: [],
+      AllowDonate: [],
+      // DonatePriceList: [],
+      StoreEvent: [],
+      SubProductCount: [],
+      SaleMethod: [],
+      SaleMethodValid: [],
+      StoreEventIdOrRefCode: storeEventIdOrRefCode,
+      ...fields,
+      ...filterList
+    }
+    if (mainProductId) {
+      query.AccessControl.MainProductId = mainProductId
+    }
+    if (handelEBooK) {
+      query.ProductCmsQuery = [
+        {
+          QueryCms: {
+            Path: '*',
+            Type: '\\',
+            Name: [],
+            Icon: [],
+            TypeId: [],
+            RefCode: [],
+            ChildrenCount: [],
+            ChildrenFolderCount: [],
+            CreateDate: [],
+            SysType: [],
+            SaleMethod: [],
+            PageQuery: {
+              Start: 0,
+              Size: 9999
+            },
+            ProductLinkInfo: []
+          }
+        }
+      ]
+    }
+    const body = {
+      query: JSON.stringify({
+        Query: [
+          {
+            Q1: query
+          }
+        ]
+      })
+    }
+    let token = localStorage.getItem(tokenKey)
+    let url = token ? '/store/api/ApiQueryProductByAppUser' : '/store/api/ApiQueryProduct'
+    return request({
+      url: url,
+      method: 'post',
+      data: body
+    }).then((resp) => {
+      if (resp.length > 0) {
+        const data = resp[0]
+        const datas = handleQueryResourceListData({
+          datas: data.datas,
+          fields,
+          path,
+          storeInfo,
+          coverSize,
+          handelEBooK
+        })
+        return {
+          datas,
+          total: data.totalCount,
+          extraInfos: data.extraInfos?.StoreEvent
+        }
+      }
+      return {
+        datas: [],
+        total: 0
+      }
+    })
+  },
+  /*
+    **鑾峰彇鍟嗗搧璇︽儏**
+    path: 鏁版嵁璺緞
+    storeInfo: 浠撳偍
+    channelInfo: 棰戦亾
+    subAccess: 
+    fields: 鑷畾涔夊瓧娈�
+    productId: 鍟嗗搧ID
+    cmsPath锛歝msPath
+  */
+  getProductDetail: ({
+    path = '',
+    storeInfo = goodsStore,
+    channelInfo = '',
+    favoriteTypes = '',
+    queryType,
+    subAccess = [],
+    fields,
+    productId,
+    cmsPath,
+    cmsType,
+    coverSize,
+    itemId,
+    itemIds,
+    itemFields,
+    linkTypes,
+    filterList,
+    handelEBooK,
+    sort,
+    cmsSort,
+    source
+  }) => {
+    const subQuery = {}
+    if (cmsPath) {
+      subQuery['QueryCms'] = {
+        Path: cmsPath + '',
+        Type: cmsType || '\\',
+        Name: [],
+        Icon: [],
+        TypeId: [],
+        RefCode: [],
+        Description:[],
+        ChildrenCount: [],
+        ChildrenFolderCount: [],
+        CreateDate: [],
+        SysType: [],
+        SaleMethod: [],
+        PageQuery: {
+          Start: 0,
+          Size: 9999
+        },
+        SortQuery: cmsSort
+          ? [cmsSort]
+          : [
+              {
+                ProductLinkOrder: 'Asc'
+              }
+            ],
+        ProductLinkInfo: [],
+        ...itemFields
+      }
+      if (itemId) subQuery['QueryCms']['Id='] = [`${itemId}`]
+      if (itemIds) subQuery['QueryCms']['Id='] = itemIds
+    } else {
+      subQuery['QueryCms'] = {
+        Path: '*',
+        Type: '\\',
+        Name: [],
+        Icon: [],
+        TypeId: [],
+        RefCode: [],
+        Description:[],
+        ChildrenCount: [],
+        ChildrenFolderCount: [],
+        CreateDate: [],
+        SysType: [],
+        SaleMethod: [],
+        PageQuery: {
+          Start: 0,
+          Size: 9999
+        },
+        ProductLinkInfo: []
+      }
+    }
+    // 鑾峰彇鍏宠仈璧勬簮
+    let linkFields = {}
+    if (linkTypes && linkTypes.length) {
+      for (let i = 0; i < linkTypes.length; i++) {
+        const linkType = linkTypes[i]
+        subQuery['QueryLink_' + linkType.linkType] = {
+          Path: cmsPath + '',
+          Type: '\\',
+          Name: [],
+          Icon: [],
+          TypeId: [],
+          RefCode: [],
+          Description:[],
+          LinkTypes: [linkType.linkType],
+          PageQuery: {
+            Start: 0,
+            Size: 100
+          },
+          ProductLinkInfo: [],
+          ...linkType.fields
+        }
+        linkFields = {
+          ...linkFields,
+          ...linkType.fields
+        }
+      }
+    }
+    const query = {
+      AccessControl: {
+        Path: path,
+        StoreRefCode: storeInfo + '',
+        ChannelRefCode: channelInfo + '',
+        Type: queryType || '\\'
+      },
+      FavoriteTypes: favoriteTypes ? [favoriteTypes] : [],
+      SubAccess: subAccess.length > 0 ? subAccess : [],
+      PageQuery: {
+        Start: '0',
+        Size: '1'
+      },
+      'Id=': [`${productId}`],
+      SortQuery: sort
+        ? [sort]
+        : [
+            {
+              LinkOrder: 'Desc'
+            }
+          ],
+      CreateDate: [],
+      Description: [],
+      Name: [],
+      Icon: [],
+      RefCode: [],
+      Description:[],
+      TypeId: [],
+      SysType: [],
+      State: [],
+      Tag: [],
+      BeginDate: [],
+      EndDate: [],
+      ProductLinkInfo: [],
+      AllowDonate: [],
+      DonatePriceList: [],
+      StoreEvent: [],
+      SaleMethod: [],
+      SaleMethodValid: [],
+      CmsItemValid: [],
+      ProductCmsQuery: [subQuery],
+      ...fields,
+      ...filterList
+    }
+    if (productId) query['Id='] = [`${productId}`]
+
+    const body = {
+      query: JSON.stringify({
+        Query: [
+          {
+            Q1: query
+          }
+        ]
+      })
+    }
+    let token = localStorage.getItem(tokenKey)
+    let url = token ? '/store/api/ApiQueryProductByAppUser' : '/store/api/ApiQueryProduct'
+    return request({
+      url: url,
+      method: 'post',
+      data: body,
+      cancelToken: source?.token
+    })
+      .then((resp) => {
+        if (resp.length > 0) {
+          const data = resp[0]
+          if (data.datas.length) {
+            data.datas[0].subDatas = data.datas[0].cmsDatas
+            const datas = handleDetailQueryRequestData({
+              item: data.datas[0],
+              fields,
+              itemFields: {
+                ...itemFields,
+                ...linkFields
+              },
+              path,
+              coverSize,
+              handelEBooK,
+
+            })
+            return {
+              datas,
+              total: data.totalCount
+            }
+          } else {
+            return {
+              datas: [],
+              total: 0
+            }
+          }
+        }
+        return {
+          datas: [],
+          total: 0
+        }
+      })
+  },
+  // 鑾峰彇鍟嗗搧璇︽儏锛屼笉杩斿洖 ChildrenCount,ChildrenFolderCount  
+  // (姝ゆ帴鍙d负浜嗘弧瓒充笉杩斿洖 ChildrenCount,ChildrenFolderCount鑰屽悗缁坊鍔犵殑) 涓嶆槸涓彴鍘熸湁鐨�
+  getProductDetailNoChildren:({
+    path = '',
+    storeInfo = goodsStore,
+    channelInfo = '',
+    favoriteTypes = '',
+    queryType,
+    subAccess = [],
+    fields,
+    productId,
+    cmsPath,
+    cmsType,
+    coverSize,
+    itemId,
+    itemIds,
+    itemFields,
+    linkTypes,
+    filterList,
+    handelEBooK,
+    sort,
+    cmsSort,
+    source
+  }) => {
+    const subQuery = {}
+    if (cmsPath) {
+      subQuery['QueryCms'] = {
+        Path: cmsPath + '',
+        Type: cmsType || '\\',
+        Name: [],
+        Icon: [],
+        TypeId: [],
+        RefCode: [],
+        Description:[],
+        // ChildrenCount: [],
+        // ChildrenFolderCount: [],
+        CreateDate: [],
+        SysType: [],
+        SaleMethod: [],
+        PageQuery: {
+          Start: 0,
+          Size: 9999
+        },
+        SortQuery: cmsSort
+          ? [cmsSort]
+          : [
+              {
+                ProductLinkOrder: 'Asc'
+              }
+            ],
+        ProductLinkInfo: [],
+        ...itemFields
+      }
+      if (itemId) subQuery['QueryCms']['Id='] = [`${itemId}`]
+      if (itemIds) subQuery['QueryCms']['Id='] = itemIds
+    } else {
+      subQuery['QueryCms'] = {
+        Path: '*',
+        Type: '\\',
+        Name: [],
+        Icon: [],
+        TypeId: [],
+        RefCode: [],
+        Description:[],
+        ChildrenCount: [],
+        ChildrenFolderCount: [],
+        CreateDate: [],
+        SysType: [],
+        SaleMethod: [],
+        PageQuery: {
+          Start: 0,
+          Size: 9999
+        },
+        ProductLinkInfo: []
+      }
+    }
+    // 鑾峰彇鍏宠仈璧勬簮
+    let linkFields = {}
+    if (linkTypes && linkTypes.length) {
+      for (let i = 0; i < linkTypes.length; i++) {
+        const linkType = linkTypes[i]
+        subQuery['QueryLink_' + linkType.linkType] = {
+          Path: cmsPath + '',
+          Type: '\\',
+          Name: [],
+          Icon: [],
+          TypeId: [],
+          RefCode: [],
+          Description:[],
+          LinkTypes: [linkType.linkType],
+          PageQuery: {
+            Start: 0,
+            Size: 100
+          },
+          ProductLinkInfo: [],
+          ...linkType.fields
+        }
+        linkFields = {
+          ...linkFields,
+          ...linkType.fields
+        }
+      }
+    }
+    const query = {
+      AccessControl: {
+        Path: path,
+        StoreRefCode: storeInfo + '',
+        ChannelRefCode: channelInfo + '',
+        Type: queryType || '\\'
+      },
+      FavoriteTypes: favoriteTypes ? [favoriteTypes] : [],
+      SubAccess: subAccess.length > 0 ? subAccess : [],
+      PageQuery: {
+        Start: '0',
+        Size: '1'
+      },
+      'Id=': [`${productId}`],
+      SortQuery: sort
+        ? [sort]
+        : [
+            {
+              LinkOrder: 'Desc'
+            }
+          ],
+      CreateDate: [],
+      Description: [],
+      Name: [],
+      Icon: [],
+      RefCode: [],
+      Description:[],
+      TypeId: [],
+      SysType: [],
+      State: [],
+      Tag: [],
+      BeginDate: [],
+      EndDate: [],
+      ProductLinkInfo: [],
+      AllowDonate: [],
+      DonatePriceList: [],
+      StoreEvent: [],
+      SaleMethod: [],
+      SaleMethodValid: [],
+      CmsItemValid: [],
+      ProductCmsQuery: [subQuery],
+      ...fields,
+      ...filterList
+    }
+    if (productId) query['Id='] = [`${productId}`]
+
+    const body = {
+      query: JSON.stringify({
+        Query: [
+          {
+            Q1: query
+          }
+        ]
+      })
+    }
+    let token = localStorage.getItem(tokenKey)
+    let url = token ? '/store/api/ApiQueryProductByAppUser' : '/store/api/ApiQueryProduct'
+    return request({
+      url: url,
+      method: 'post',
+      data: body,
+      cancelToken: source?.token
+    })
+      .then((resp) => {
+        if (resp.length > 0) {
+          const data = resp[0]
+          if (data.datas.length) {
+            data.datas[0].subDatas = data.datas[0].cmsDatas
+            const datas = handleDetailQueryRequestData({
+              item: data.datas[0],
+              fields,
+              itemFields: {
+                ...itemFields,
+                ...linkFields
+              },
+              path,
+              coverSize,
+              handelEBooK,
+
+            })
+            return {
+              datas,
+              total: data.totalCount
+            }
+          } else {
+            return {
+              datas: [],
+              total: 0
+            }
+          }
+        }
+        return {
+          datas: [],
+          total: 0
+        }
+      })
+  },
+  // 鑾峰彇浼樻儬鍒稿垪琛�
+  getChannelPromoteCodeList(data) {
+    return request({
+      url: '/store/api/ApiGetChannelPromoteCodeList',
+      method: 'post',
+      data
+    })
+  },
+
+  // 鑾峰彇鐢ㄦ埛宸查鍙栫殑浼樻儬鍒稿垪琛�
+  getPromoteCodeList(data) {
+    return request({
+      url: '/store/api/ApiGetPromoteCodeList',
+      method: 'post',
+      data
+    })
+  },
+
+  // 鑾峰彇鐢ㄦ埛娴忚鎺掕
+  getProductViewRank(data) {
+    return request({
+      url: '/store/api/ApiGetProductViewRank',
+      method: 'post',
+      data
+    })
+  },
+
+  // 鑾峰彇鐢ㄦ埛閿�鍞帓琛�
+  getProductSaleRank(data) {
+    return request({
+      url: '/store/api/ApiGetProductSaleRank',
+      method: 'post',
+      data
+    })
+  },
+
+  // 鑾峰彇鍟嗗搧鍙敤浼樻儬鍒�
+  getProductPromoteCodeList(data) {
+    return request({
+      url: '/store/api/ApiGetProductPromoteCodeList',
+      method: 'post',
+      data
+    })
+  },
+
+  // 鑾峰彇璁㈠崟鍙敤浼樻儬鍒�
+  getOrderPromoteCodeList(data) {
+    return request({
+      url: '/store/api/GetOrderPromoteCodeList',
+      method: 'post',
+      data
+    })
+  },
+
+  // 鑾峰彇閿�鍞柟寮忓彲鐢ㄤ紭鎯犲埜
+  getSaleMethodPromoteCodeList(data) {
+    return request({
+      url: '/store/api/GetSaleMethodPromoteCodeList',
+      method: 'post',
+      data
+    })
+  },
+
+  // 棰嗗彇浼樻儬鍗�
+  getPromoteCode(data) {
+    return request({
+      url: '/store/api/ApiGetPromoteCode',
+      method: 'post',
+      data
+    })
+  },
+
+  // 涓鸿鍗曚娇鐢ㄤ紭鎯犲埜
+  updateOrderPromoteCode(data) {
+    return request({
+      url: '/store/api/UpdateOrderPromoteCode',
+      method: 'post',
+      data
+    })
+  },
+
+  // 涓洪攢鍞柟寮忎娇鐢ㄤ紭鎯犲埜
+  updateSaleMethodPromoteCode(data) {
+    return request({
+      url: '/store/api/UpdateSaleMethodPromoteCode',
+      method: 'post',
+      data
+    })
+  },
+
+  // 閫氳繃璁㈠崟鍙疯幏鍙栬鍗�
+  getOrderByOrderNum(data) {
+    return request({
+      url: '/store/api/GetOrderByOrderNum',
+      method: 'post',
+      data
+    })
+  },
+
+  // 鍒涘缓璁㈠崟
+  initOrder(data) {
+    return request({
+      url: '/store/api/InitOrder',
+      method: 'post',
+      data
+    })
+  },
+
+  // 纭璁㈠崟
+  confirmOrder(data) {
+    return request({
+      url: '/store/api/ConfirmOrder',
+      method: 'post',
+      data
+    })
+  },
+
+  // 鍙栨秷璁㈠崟
+  cancelOrder(data) {
+    return request({
+      url: '/store/api/CancelOrder',
+      method: 'post',
+      data
+    })
+  },
+
+  // 璧炶祻
+  CreateDonateOrder(data) {
+    return request({
+      url: '/store/api/CreateDonateOrder',
+      method: 'post',
+      data
+    })
+  },
+
+  //鑾峰彇鐢ㄦ埛璁㈠崟鍒楄〃
+  getUserOrderList(data) {
+    return request({
+      url: '/store/api/GetUserOrderList',
+      method: 'post',
+      data
+    })
+  },
+
+  //鑾峰彇棰戦亾涓嬬殑鍒楄〃
+  getStoreChannelList(data) {
+    return request({
+      url: '/store/api/ApiGetStoreChannelList',
+      method: 'post',
+      data
+    })
+  },
+
+  //鑾峰彇璐墿杞�
+  getShoppingCartProductList(data) {
+    return request({
+      url: '/store/api/ApiGetShoppingCartProductList',
+      method: 'post',
+      data
+    })
+  },
+
+  //娣诲姞鍒拌喘鐗╄溅
+  addShoppingCart(data) {
+    return request({
+      url: '/store/api/ApiAddShoppingCart',
+      method: 'post',
+      data
+    })
+  },
+
+  //璐墿杞﹀垹闄ゅ晢鍝�
+  delShoppingCart(data) {
+    return request({
+      url: '/store/api/ApiDelShoppingCart',
+      method: 'post',
+      data
+    })
+  },
+
+  //浠庤喘鐗╄溅鍒涘缓璁㈠崟
+  shoppingCartCreateOrder(data) {
+    return request({
+      url: '/store/api/ApiShoppingCartCreateOrder',
+      method: 'post',
+      data
+    })
+  },
+
+  //鑾峰彇宸茶喘涔扮殑鍟嗗搧鍒楄〃
+  getPurchasedProductList(data) {
+    return request({
+      url: '/store/api/ApiGetPurchasedProductList',
+      method: 'post',
+      data
+    })
+  },
+
+  //璋冨彇寰俊鏀粯
+  makeWeChatPay(data) {
+    return request({
+      url: '/store/api/MakeWeChatPay',
+      method: 'post',
+      data
+    })
+  },
+
+  //璋冨彇寰俊浜岀淮鐮佹敮浠�
+  makeWeChatQrPay(data) {
+    return request({
+      url: '/store/api/MakeWeChatQrPay',
+      method: 'post',
+      data
+    })
+  },
+
+  // 鑾峰彇婵�娲荤爜璇︽儏
+  getActiveCode(data) {
+    return request({
+      url: '/store/api/ApiGetActiveCode',
+      method: 'post',
+      data
+    })
+  },
+
+  // 浣跨敤婵�娲荤爜
+  userActiveCode(data) {
+    return request({
+      url: '/store/api/ApiUseActiveCode',
+      method: 'post',
+      data
+    })
+  },
+  // 浣跨敤婵�娲荤爜浣跨敤璁板綍
+  userActiveCodeList(data) {
+    return request({
+      url: '/store/api/ApiGetUsedActiveCodeList',
+      method: 'post',
+      data
+    })
+  },
+
+  // 鍟嗗搧鏌ヨ绫诲瀷瀛楁鎺ュ彛
+  getProductTypeField(data) {
+    return request({
+      url: '/store/api/ApiGetProductTypeField',
+      method: 'post',
+      data
+    })
+  },
+
+  // 鏀惰棌鎴栧姞鍏ヤ功鏋�
+  addProductLink(data) {
+    return request({
+      url: '/store/api/ApiAddProductLink',
+      method: 'post',
+      data
+    })
+  },
+
+  // 鍙栨秷鏀惰棌鎴栫Щ闄や功鏋�
+  delProductLink(data) {
+    return request({
+      url: '/store/api/ApiDelProductLink',
+      method: 'post',
+      data
+    })
+  },
+
+  //璐拱鍏嶈垂鍟嗗搧
+  MakeFreeOrderPay(data) {
+    return request({
+      url: '/store/api/MakeFreeOrderPay',
+      method: 'post',
+      data
+    })
+  },
+
+  // 鐢宠璁㈠崟寮�绁�
+  requestOrderInvoice(data) {
+    return request({
+      url: '/store/api/RequestOrderInvoice',
+      method: 'post',
+      data
+    })
+  },
+
+  // 鑾峰彇鐢ㄦ埛閽卞寘
+  getUserWallet(data) {
+    return request({
+      url: '/store/api/GetWallet',
+      method: 'post',
+      data
+    })
+  },
+  // 鑾峰彇鐢ㄦ埛閽卞寘璁板綍
+  getWalletHistory(data) {
+    return request({
+      url: '/store/api/GetWalletHistory',
+      method: 'post',
+      data
+    })
+  },
+  // 閫氳繃閽卞寘鑷姩璐拱
+  autoPayWithWallet(data) {
+    return request({
+      url: '/store/api/AutoPayWithWallet',
+      method: 'post',
+      data
+    })
+  },
+  // 鏌ヨ鍟嗗搧鎵�鍦⊿tore
+  getProductStore(data) {
+    return request({
+      url: '/store/api/ApiGetProductStore',
+      method: 'post',
+      data
+    })
+  },
+  //鏍规嵁閿�鍞柟寮忔煡璇㈠晢鍝佷俊鎭�
+  getProductBySaleMethod(data) {
+    return request({
+      url: '/store/api/ApiGetProductBySaleMethod',
+      method: 'post',
+      data
+    })
+  }
+}
+
+export default storeApi
diff --git a/src/assets/js/middleGround/api/ugc.js b/src/assets/js/middleGround/api/ugc.js
new file mode 100644
index 0000000..a277fe6
--- /dev/null
+++ b/src/assets/js/middleGround/api/ugc.js
@@ -0,0 +1,98 @@
+import request from "@/plugin/axios/index.ts";
+import { tokenKey } from "@/assets/js/config.js";
+import toolClass from "@/assets/js/toolClass.js";
+const ugcApi = {
+  // 鑾峰彇鍟嗗搧鐐硅禐Topic
+  getProductLikesTopic(data) {
+    return request({
+      url: localStorage.getItem(tokenKey)
+        ? "/ugc/api/ApiAppUserGetProductLikesTopic"
+        : "/ugc/api/ApiGetProductLikesTopic",
+      method: "post",
+      data,
+    });
+  },
+
+  // 鑾峰彇鍟嗗搧璇勮Topic
+  getProductCommentTopic(data) {
+    return request({
+      url: localStorage.getItem(tokenKey)
+        ? "/ugc/api/ApiAppUserGetProductCommentTopic"
+        : "/ugc/api/ApiGetProductCommentTopic",
+      method: "post",
+      data,
+    });
+  },
+
+  // 鑾峰彇MessageList
+  getTopicMessageList(data) {
+    return request({
+      url: localStorage.getItem(tokenKey)
+        ? "/ugc/api/ApiAppUserGetTopicMessageList"
+        : "/ugc/api/ApiGetTopicMessageList",
+      method: "post",
+      data,
+    });
+  },
+  // 鐢ㄦ埛鏍规嵁娑堟伅绫诲瀷鑾峰彇鍒楄〃
+  getMessageList(data) {
+    return request({
+      url: "/ugc/api/ApiGetMessageList",
+      method: "post",
+      data,
+    });
+  },
+
+  // 鏂板缓Message
+  newTopicMessage(data) {
+    return request({
+      url: "/ugc/api/ApiNewTopicMessage",
+      method: "post",
+      data,
+    });
+  },
+
+  // 鍒犻櫎Message
+  delTopicMessage(data) {
+    return request({
+      url: "/ugc/api/ApiDelTopicMessage",
+      method: "post",
+      data,
+    });
+  },
+  // 鏇存柊message
+  updateTopicMessage(data) {
+    return request({
+      url:'/ugc/api/ApiUpdateTopicMessage',
+      method:'post',
+      data
+    })
+  },
+  // 鑾峰彇cms璇勮
+  getCmsItemCommentTopic(data) {
+    return request({
+      url: "/ugc/api/ApiGetCmsItemCommentTopic",
+      method: "post",
+      data,
+    });
+  },
+  // 鑾峰彇鐢ㄦ埛鎻愪氦鐨勬暀瀛﹁祫婧�
+  getProductUserSubmitTopic(data) {
+    return request({
+      url: "/ugc/api/ApiGetProductUserSubmitTopic",
+      method: "post",
+      data,
+    });
+  },
+
+  //鏇存柊TOPICMESSAGE
+  // updateTopicMessage(data) {
+  //   return request({
+  //     url: "/ugc/api/ApiUpdateTopicMessage",
+  //     method: "post",
+  //     data,
+  //   });
+  // },
+};
+
+export default ugcApi;
diff --git a/src/assets/js/middleGround/tool.js b/src/assets/js/middleGround/tool.js
new file mode 100644
index 0000000..44e3985
--- /dev/null
+++ b/src/assets/js/middleGround/tool.js
@@ -0,0 +1,423 @@
+import { requestCtx, appId } from '@/assets/js/config.js'
+// import defaultImg from '@/assets/images/default-book-img.png'
+// import defaultBookFair from '@/assets/images/default-bookFair.png'
+// import bookCover from '@/assets/images/book-cover.png'
+// import defaultPub from '@/assets/images/math/default-pub.png'
+// import defaultAudio from '@/assets/images/math/default-audio.png'
+import moment from 'moment'
+// 澶勭悊鍒楄〃鏌ヨ缁撴灉
+export function handleQueryResourceListData({
+  datas,
+  fields,
+  path,
+  storeInfo,
+  repositoryInfo,
+  coverSize,
+  handelEBooK
+}) {
+  const dataList = []
+  for (let i = 0; i < datas.length; i++) {
+    const item = datas[i]
+    // 澶勭悊瀛楁
+    const _fields = {}
+    if (fields != null) {
+      for (let fieldKey in fields) {
+        if (item.datas[fieldKey]) {
+          const values = JSON.parse(item.datas[fieldKey])
+          if (values.length > 0) {
+            // 鐢ㄥ瓧娈靛悕澶勭悊杩斿洖鐨勫瓧娈靛��
+            if (values[0].Value) {
+              _fields[fieldKey] = values[0].Value
+            } else if (values[0].Data) {
+              _fields[fieldKey] = values[0].Data.Value
+            }
+            item.datas[fieldKey] = values[0]
+          }
+        }
+      }
+    }
+    const subDatas = {}
+    if (item.subDatas) {
+      for (let subData of item.subDatas) {
+        const tag = subData.queryTag.replace('Query', '')
+        subDatas[tag] = subData.datas
+      }
+    }
+
+    let obj = {
+      ...item,
+      id: item.id,
+      name: item.datas.Name,
+      icon: getPublicImage(item.datas.Icon, coverSize?.width, coverSize?.height, storeInfo),
+      repositoryInfo: repositoryInfo,
+      refCode: item.datas.RefCode === '[]' ? null : item.datas.RefCode,
+      state: item.datas.State,
+      type: item.datas.Type,
+      tag: item.datas.Tag,
+      creator: item.datas.Creator ? JSON.parse(item.datas.Creator) : undefined,
+      storeInfo: storeInfo,
+      linkType: item.datas.LinkType,
+      childrenCount: parseInt(item.datas.ChildrenCount ?? '0'),
+      childrenFolderCount: parseInt(item.datas.ChildrenFolderCount ?? '0'),
+      childrenChannelCount: parseInt(item.datas.ChildrenChannelCount ?? '0'),
+      createDate: moment(item.datas.CreateDate).format('YYYY-MM-DD'),
+      beginDate: moment(item.datas.BeginDate).format('YYYY-MM-DD'),
+      endDate: moment(item.datas.EndDate).format('YYYY-MM-DD'),
+      description: item.datas.Description,
+      sysType: item.datas.SysType,
+      idPath: path + '\\' + item.id,
+      typeId: parseInt(item.datas.TypeId),
+      linkFile: JSON.parse(item.datas.LinkFile ?? '[]'),
+      cmsItemType: item.datas.CmsItemType,
+      allowDonate: item.datas.AllowDonate == 'True',
+      // donatePriceList: JSON.parse(item.datas.DonatePriceList ?? "[]"),
+      productLinkInfo: item.datas.ProductLinkInfo ?? '[]',
+      storeEvent: JSON.parse(item.datas.StoreEvent ?? '[]'),
+      linkInfo: JSON.parse(item.datas.LinkInfo ?? '[]'),
+      saleMethod: JSON.parse(item.datas.SaleMethod ?? '[]'),
+      subProductCount: parseInt(item.datas.SubProductCount),
+      ..._fields,
+      datas: item.datas,
+      subDatas
+    }
+
+    // 缁熶竴澶勭悊浠锋牸
+    if (obj.defaultSaleMethod) {
+      if (handelEBooK) {
+        // 鑾峰彇闅忎功璧勬簮鐨勯攢鍞柟寮�
+        let saleMethod = []
+        try {
+          saleMethod = obj.cmsDatas[0].datas.find(
+            (item) => item.datas.RefCode == 'tourism_accompanyingResources'
+          ).datas.SaleMethod
+          saleMethod = JSON.parse(saleMethod)
+        } catch (error) {
+          saleMethod = []
+        }
+        if (saleMethod.length) {
+          Object.keys(saleMethod[0]).map((key) => {
+            let newKey = key.replace(key[0], key[0].toLowerCase())
+            saleMethod[0][newKey] = saleMethod[0][key]
+            delete saleMethod[0][key]
+          })
+          obj.defaultSaleMethod = saleMethod[0]
+          obj.defaultSaleMethodId = saleMethod[0].id
+          obj.alreadyBuy = obj.purchasedSaleMethodIdList.indexOf(obj.defaultSaleMethodId) > -1
+        }
+      }
+      if (obj.defaultSaleMethod.allowEvent && obj.storeEvent.length) {
+        // 宸插弬鍔犳椿鍔紝鑾峰彇鏈夋晥娲诲姩骞惰绠椾环鏍�
+        let time = new Date().getTime()
+        // 杩囨护杩囨湡娲诲姩
+        let event = obj.storeEvent.filter((item) => {
+          let endTime = new Date(item.EndDate).getTime()
+          return endTime > time
+        })
+
+        // 鍙鐞嗕竴鏉℃湁鏁堟椿鍔�
+        if (event.length) {
+          obj.price = (obj.defaultSaleMethod.price * event[0].Value).toFixed(2)
+          obj.oldPrice = obj.defaultSaleMethod.price
+          obj.storeEventId = event[0].Id
+          if (
+            moment().format('YYYY-MM-DD') <
+            moment(obj.defaultSaleMethod.endDate).format('YYYY-MM-DD')
+          ) {
+            obj.defaultSaleMethodState = 'Normal'
+          } else {
+            obj.defaultSaleMethodState = 'Beyond'
+          }
+        }
+      } else {
+        if (
+          moment().format('YYYY-MM-DD') < moment(obj.defaultSaleMethod.endDate).format('YYYY-MM-DD')
+        ) {
+          obj.defaultSaleMethodState = 'Normal'
+        } else {
+          obj.defaultSaleMethodState = 'Beyond'
+        }
+        obj.price = obj.defaultSaleMethod.price
+        obj.oldPrice = obj.defaultSaleMethod.virtualPrice
+      }
+    }
+    dataList.push(obj)
+  }
+  return dataList
+}
+
+// 澶勭悊璇︽儏鏌ヨ缁撴灉
+export function handleDetailQueryRequestData({
+  item,
+  fields,
+  path,
+  coverSize,
+  itemFields,
+  handelEBooK,
+}) {
+  item.fileMap = {};
+  let itemFieldsData = [];
+  for (const key in itemFields) {
+    itemFieldsData.push(key);
+  }
+  let fieldsData = [];
+  for (const key in fields) {
+    fieldsData.push(key);
+  }
+  for (let i = 0; i < fieldsData.length; i++) {
+    const field = fieldsData[i];
+    item.datas[field] = JSON.parse(item.datas[field]);
+    const datas = item.datas[field];
+    if (datas.length > 0) {
+      if (datas[0].Value) {
+        item[field] = datas[0].Value;
+        if (datas[0].Data.FileLinkList && datas[0].Data.FileLinkList.length) {
+          item.fileMap = {
+            ...item.fileMap,
+            ...handleLinkFileInfo(
+              datas[0].Data.FileLinkList.map((item) => {
+                return {
+                  ...item.File,
+                  ...item,
+                };
+              })
+            ),
+          };
+        }
+      } else if (datas[0].Data) {
+        item[field] = datas[0].Data.Value;
+        if (datas[0].Data.FileLinkList && datas[0].Data.FileLinkList.length) {
+          item.fileMap = {
+            ...item.fileMap,
+            ...handleLinkFileInfo(
+              datas[0].Data.FileLinkList.map((item) => {
+                return {
+                  ...item.File,
+                  ...item,
+                };
+              })
+            ),
+          };
+        }
+      }
+    }
+  }
+
+  // 澶勭悊cms璧勬簮
+  const subDatas = item.subDatas;
+  const linkItemsMap = {};
+  if (subDatas) {
+    for (const sdata of subDatas) {
+      const tag = sdata.queryTag;
+      for (const subItem of sdata.datas) {
+        convertCmsItemBase(subItem, coverSize, handelEBooK);
+        subItem.fileMap = {};
+        for (let i = 0; i < itemFieldsData.length; i++) {
+          const itemField = itemFieldsData[i];
+          try {
+            subItem.datas[itemField] = JSON.parse(subItem.datas[itemField]);
+          } catch (error) {
+            subItem.datas[itemField] = [];
+          }
+          const itemDatas = subItem.datas[itemField];
+          if (itemDatas.length > 0) {
+            if (itemDatas[0].Value) {
+              subItem[itemField] = itemDatas[0].Value;
+              if (itemDatas[0].FileList && itemDatas[0].FileList.length) {
+                subItem.fileMap = {
+                  ...subItem.fileMap,
+                  ...handleLinkFileInfo(itemDatas[0].FileList),
+                };
+              }
+            } else if (itemDatas[0].Data) {
+              subItem[itemField] = itemDatas[0].Data.Value;
+              if (
+                itemDatas[0].Data.FileList &&
+                itemDatas[0].Data.FileList.length
+              ) {
+                subItem.fileMap = {
+                  ...subItem.fileMap,
+                  ...handleLinkFileInfo(itemDatas[0].Data.FileList),
+                };
+              }
+            } else if (itemDatas[0].CmsItemData) {
+              subItem[itemField] = itemDatas[0].CmsItemData.Value;
+              if (
+                itemDatas[0].CmsItemData.FileList &&
+                itemDatas[0].CmsItemData.FileList.length
+              ) {
+                subItem.fileMap = {
+                  ...subItem.fileMap,
+                  ...handleLinkFileInfo(itemDatas[0].CmsItemData.FileList),
+                };
+              }
+            }
+          }
+        }
+        if (subItem.productLinkInfo && subItem.productLinkInfo.length) {
+          let itemProductLinkInfo = subItem.productLinkInfo.find(citem => citem.Name == item.datas.Name)
+          subItem.productLinkPath =
+            itemProductLinkInfo.LinkPath +
+            "\\" +
+            itemProductLinkInfo.CmsItemId;
+        }
+        if (subItem.linkInfo && subItem.linkInfo.length)
+          subItem.linkPath =
+            subItem.linkInfo[0].LinkPath + "\\" + subItem.linkInfo[0].CmsItemId;
+      }
+      linkItemsMap[tag] = sdata.datas;
+    }
+  }
+  convertCmsItemBase(item, coverSize, handelEBooK);
+  item.idPath = path + "\\" + item.id;
+  item.subItems = linkItemsMap;
+  return item;
+}
+
+const handleLinkFileInfo = (linkList) => {
+  let linkFileMap = {}
+  for (let z = 0; z < linkList.length; z++) {
+    const linkItem = linkList[z]
+    linkFileMap[linkItem.Md5] = {
+      linkType: linkItem.LinkType,
+      extension: linkItem.Extension,
+      fileName: linkItem.FileName,
+      fileType: linkItem.Type,
+      md5: linkItem.Md5,
+      icon: linkItem.Icon,
+      size: linkItem.Size,
+      // metaData: JSON.parse(linkItem.MetaData ?? "{}"),
+      order: linkItem.Order,
+      protectType: linkItem.ProtectType
+    }
+  }
+  return linkFileMap
+}
+
+const convertCmsItemBase = (item, coverSize, handelEBooK) => {
+  item.name = item.datas.Name
+  item.description = item.datas.Description
+  item.refCode = item.datas.RefCode
+  item.state = item.datas.State
+  item.type = item.datas.Type
+  item.tag = item.datas.Tag
+  item.typeId = parseInt(item.datas.TypeId)
+  item.icon = getPublicImage(item.datas.Icon, coverSize?.width, coverSize?.height)
+  item.sysType = item.datas.SysType
+  item.linkFile = JSON.parse(item.datas.LinkFile ?? '[]')
+  item.linkType = item.datas.LinkType
+  item.linkAppId = parseInt(item.datas.LinkAppId)
+  item.linkStoreId = parseInt(item.datas.LinkStore)
+  item.linkRepoId = item.datas.LinkRepository
+  item.childrenCount = parseInt(item.datas.ChildrenCount ?? '0')
+  ;(item.childrenFolderCount = parseInt(item.datas.ChildrenFolderCount ?? '0')),
+    (item.childrenChannelCount = parseInt(item.datas.ChildrenChannelCount ?? '0')),
+    (item.linkId = parseInt(item.datas.LinkId))
+  item.linkOrg = JSON.parse(item.datas.LinkOrg ?? '[]')[0]
+  item.linkDepartment = JSON.parse(item.datas.LinkDepartment ?? '[]')[0]
+  item.linkInfo = JSON.parse(item.datas.LinkInfo ?? '[]')
+  item.productLinkInfo = JSON.parse(item.datas.ProductLinkInfo ?? '[]')
+  item.saleMethod = JSON.parse(item.datas.SaleMethod ?? '[]')
+  item.allowDonate = item.datas.AllowDonate == 'True'
+  // item.donatePriceList = JSON.parse(item.datas.DonatePriceList ?? "[]");
+  item.createDate = moment(item.datas.CreateDate).format('YYYY-MM-DD')
+  item.beginDate = moment(item.datas.BeginDate).format('YYYY-MM-DD')
+  item.endDate = moment(item.datas.EndDate).format('YYYY-MM-DD')
+  item.storeEvent = JSON.parse(item.datas.StoreEvent ?? '[]')
+  // 缁熶竴澶勭悊浠锋牸
+  if (item.defaultSaleMethod) {
+    if (handelEBooK) {
+      // 鑾峰彇闅忎功璧勬簮鐨勯攢鍞柟寮�
+      let saleMethod = item.cmsDatas[0].datas.find(
+        (item) => item.refCode == 'tourism_accompanyingResources'
+      ).saleMethod
+      if (saleMethod && saleMethod.length > 0) {
+        Object.keys(saleMethod[0]).map((key) => {
+          let newKey = key.replace(key[0], key[0].toLowerCase())
+          saleMethod[0][newKey] = saleMethod[0][key]
+          delete saleMethod[0][key]
+        })
+        item.defaultSaleMethod = saleMethod[0]
+        item.defaultSaleMethodId = saleMethod[0].id
+        item.alreadyBuy = item.purchasedSaleMethodIdList.indexOf(item.defaultSaleMethodId) > -1
+      }
+    }
+    if (item.defaultSaleMethod.allowEvent && item.storeEvent.length) {
+      // 宸插弬鍔犳椿鍔紝鑾峰彇鏈夋晥娲诲姩骞惰绠椾环鏍�
+      let time = new Date().getTime()
+      // 杩囨护杩囨湡娲诲姩
+      let event = item.storeEvent.filter((item) => {
+        let endTime = new Date(item.EndDate).getTime()
+        return endTime > time
+      })
+      // 鍙鐞嗕竴鏉℃湁鏁堟椿鍔�
+      if (event.length) {
+        item.price = (item.defaultSaleMethod.price * event[0].Value).toFixed(2)
+        item.oldPrice = item.defaultSaleMethod.price
+        if (
+          moment().format('YYYY-MM-DD') <
+          moment(item.defaultSaleMethod.endDate).format('YYYY-MM-DD')
+        ) {
+          item.defaultSaleMethodState = 'Normal'
+        } else {
+          item.defaultSaleMethodState = 'Beyond'
+        }
+        item.storeEventId = event[0].Id
+      }
+    } else {
+      item.price = item.defaultSaleMethod.price
+      item.oldPrice = item.defaultSaleMethod.virtualPrice
+      if (
+        moment().format('YYYY-MM-DD') < moment(item.defaultSaleMethod.endDate).format('YYYY-MM-DD')
+      ) {
+        item.defaultSaleMethodState = 'Normal'
+      } else {
+        item.defaultSaleMethodState = 'Beyond'
+      }
+    }
+  }
+}
+
+export function getTopicMsgCmsItemFile(fileType, fileList) {
+  let obj = {}
+  fileType.forEach((item) => {
+    item.sequenceNum = item.config ? JSON.parse(item.config).uuid : ''
+    fileList.forEach((e) => {
+      if (item.sequenceNum == e.sequenceNum) {
+        try {
+          if (e.fileLinkList.length > 0) {
+            for (let i = 0; i < e.fileLinkList.length; i++) {
+              const ele = e.fileLinkList[i]
+              ele.name = ele.file.fileName
+              ele.md5 = ele.file.md5
+              ele.status = 'success'
+            }
+            obj[item.typeField.refCode] = e.fileLinkList
+          } else {
+            const val = JSON.parse(e.value)
+            obj[item.typeField.refCode] = val
+          }
+        } catch (error) {
+          obj[item.typeField.refCode] = e.value
+        }
+      }
+    })
+  })
+  return obj
+}
+
+// 鑾峰彇涓嶅彈淇濇姢鐨勫浘鐗�
+export function getPublicImage(md5, width, height, storeInfo) {
+  let src = null
+  if (md5) {
+    src = requestCtx + `/file/GetPreViewImage?md5=${md5}`
+  } else {
+    if(storeInfo == `defaultGoodsStore${appId}`){
+      return bookCover;
+    }else{
+      return ""
+    }
+  }
+  if (width && src) src += `&width=${width}`
+  if (height && src) src += `&height=${height}`
+  return src
+}
diff --git a/src/assets/js/toolClass.js b/src/assets/js/toolClass.js
new file mode 100644
index 0000000..3f993b3
--- /dev/null
+++ b/src/assets/js/toolClass.js
@@ -0,0 +1,567 @@
+import SparkMD5 from 'spark-md5'
+import {
+  getPublicImage
+} from '@/assets/js/middleGround/tool.js'
+import config from './config'
+import moment from "moment";
+
+
+
+
+var tool = {
+  secondToTime(second) {
+    var minute = Math.floor(second / 60)
+    var sec = second % 60
+    var time
+    if (second < 60) {
+      time = second + '"'
+    } else {
+      time = sec === 0 ? minute + "'" : minute + "'" + sec + '"'
+    }
+    return time
+  },
+  setCookie: function (c_name, value, expiredays, path) {
+    var exdate = new Date()
+    exdate.setDate(exdate.getDate() + expiredays)
+    document.cookie =
+      c_name +
+      '=' +
+      escape(value) +
+      (expiredays == null ? '' : ';expires=' + exdate.toGMTString()) +
+      (path ? ';path=' + path : '')
+  },
+  getCookie: function (c_name) {
+    if (document.cookie.length > 0) {
+      var c_start = document.cookie.indexOf(c_name + '=')
+      if (c_start != -1) {
+        c_start = c_start + c_name.length + 1
+        var c_end = document.cookie.indexOf(';', c_start)
+        if (c_end == -1) c_end = document.cookie.length
+        return unescape(document.cookie.substring(c_start, c_end))
+      }
+    }
+    return ''
+  },
+  delCookie: function (name) {
+    var exp = new Date()
+    exp.setTime(exp.getTime() - 1)
+    var cval = tool.getCookie(name)
+    if (cval != null) document.cookie = name + '=' + cval + ';expires=' + exp.toGMTString()
+  },
+  // 寮哄埗淇濈暀2浣嶅皬鏁帮紝濡傦細2锛屼細鍦�2鍚庨潰琛ヤ笂00.鍗�2.00
+  toDecimal2(x) {
+    var f
+    f = parseFloat(x)
+    if (isNaN(f)) {
+      return false
+    }
+    f = Math.round(x * 100) / 100
+    var s = f.toString()
+    var rs = s.indexOf('.')
+    if (rs < 0) {
+      rs = s.length
+      s += '.'
+    }
+    while (s.length <= rs + 2) {
+      s += '0'
+    }
+    return s
+  },
+  formateTime(date) {
+    var newDate = new Date(+new Date(date) + 8 * 3600 * 1000)
+      .toISOString()
+      .replace(/T/g, ' ')
+      .replace(/\.[\d]{3}Z/, '')
+    var time = new Date(newDate)
+    return time.getTime()
+  }
+}
+
+
+//澶勭悊琛ㄥ崟鎻愪氦鏁版嵁
+export function worksData(res) {
+  let arr = []
+  for (let i = 0; i < res.length; i++) {
+    const item = res[i]
+    if (item.typeField) {
+      if (item.typeField.config) {
+        item.typeField.options = JSON.parse(item.typeField.config).option
+      }
+      arr.push(item.typeField)
+    }
+  }
+  return arr
+}
+
+export function worksDataBytool(res, value, linkList) {
+  let arr = []
+  let nrr = []
+  if (linkList && linkList.length > 0) {
+    linkList.forEach((e) =>
+      nrr.push({
+        linkProtectType: e.linkProtectType,
+        linkType: e.linkType,
+        md5: e.md5
+      })
+    )
+  }
+  res.forEach((item) => {
+    const obj = {
+      baseType: item.typeField.baseType,
+      order: 0,
+      typeFieldId: item.typeField.id,
+      sequenceNum: item.config ? JSON.parse(item.config).uuid : '',
+      newDataAndFileLinkListRequest: []
+    }
+    for (let k in value) {
+      if (item.typeField.refCode === k) {
+        if (item.typeField.type == 'File') {
+          try {
+            obj.strValue = JSON.stringify(value[k].map((citem) => citem.md5))
+          } catch (error) {
+            obj.strValue = ''
+          }
+          obj.newDataAndFileLinkListRequest = nrr
+        } else {
+          if (typeof value[k] == 'object') {
+            obj.strValue = JSON.stringify(value[k])
+          } else {
+            if (obj.baseType === 'String') {
+              obj.strValue = value[k] + ''
+            } else if (obj.baseType === 'Text') {
+              obj.textValue = value[k] + ''
+            } else {
+              obj.strValue = value[k] + ''
+            }
+          }
+        }
+      }
+    }
+    // if (obj.strValue || obj.textValue) {
+    arr.push(obj)
+    // }
+  })
+  return arr
+}
+
+export function UpdateworksDataBytool(initData, res, value, linkList) {
+  let arr = []
+  let newArr = []
+  for (let i = 0; i < initData.length; i++) {
+    const ele = initData[i]
+    for (let j = 0; j < res.length; j++) {
+      const item = res[j]
+      if (item.sequenceNum == ele.sequenceNum) {
+        item.refCode = ele.typeField.refCode
+      }
+    }
+  }
+  initData.forEach((citem) => {
+    const updateOldData = res.find((f) => f.sequenceNum == citem.sequenceNum)
+    if (updateOldData) {
+      const obj = {
+        baseType: citem.typeField.baseType,
+        order: 0,
+        id: updateOldData.id,
+        typeFieldId: citem.typeField.id,
+        sequenceNum: citem.sequenceNum,
+        setDataAndFileLinkListRequest: []
+      }
+      for (let k in value) {
+        if (citem.typeField.refCode === k) {
+          if (typeof value[k] == 'object' && k != 'region') {
+            obj.strValue = JSON.stringify(linkList)
+            obj.setDataAndFileLinkListRequest = linkList
+          } else if (typeof value[k] == 'object' && k == 'region') {
+            obj.strValue = value[k]?.join('/')
+            obj.setDataAndFileLinkListRequest = [{
+              area: value[k]
+            }]
+          } else {
+            obj.strValue = value[k].toString()
+          }
+        }
+      }
+      if (obj.strValue) {
+        arr.push(obj)
+      }
+    } else {
+      const newObj = {
+        baseType: citem.typeField.baseType,
+        order: 0,
+        typeFieldId: citem.typeField.id,
+        sequenceNum: citem.sequenceNum,
+        setDataAndFileLinkListRequest: []
+      }
+      for (let k in value) {
+        if (citem.typeField.refCode === k) {
+          if (typeof value[k] == 'object') {
+            newObj.strValue = JSON.stringify(linkList)
+            newObj.setDataAndFileLinkListRequest = linkList
+          } else {
+            newObj.strValue = value[k].toString()
+          }
+        }
+      }
+      if (newObj.strValue) {
+        newArr.push(newObj)
+      }
+    }
+  })
+  return {
+    updateData: arr,
+    newData: newArr
+  }
+}
+
+export function download(url) {
+  const iframe = document.createElement('iframe')
+  iframe.setAttribute('hidden', 'hidden')
+  document.body.appendChild(iframe)
+  iframe.onload = () => {
+    if (iframe) {
+      iframe.setAttribute('src', 'about:blank')
+    }
+  }
+
+  iframe.setAttribute('src', url)
+}
+
+/**
+ * 鑾峰彇涓�涓猆UID
+ * @param len
+ * @param radix
+ * @returns {string}
+ */
+export function uuid(len = 32, radix = 16) {
+  const chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('')
+  let uuid = [],
+    i
+  radix = radix || chars.length
+
+  if (len) {
+    // Compact form
+    for (i = 0; i < len; i++) uuid[i] = chars[0 | (Math.random() * radix)]
+  } else {
+    // rfc4122, version 4 form
+    let r
+
+    // rfc4122 requires these characters
+    uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-'
+    uuid[14] = '4'
+
+    // Fill in random data.  At i==19 set the high bits of clock sequence as
+    // per rfc4122, sec. 4.1.5
+    for (i = 0; i < 36; i++) {
+      if (!uuid[i]) {
+        r = 0 | (Math.random() * 16)
+        uuid[i] = chars[i === 19 ? (r & 0x3) | 0x8 : r]
+      }
+    }
+  }
+
+  return uuid.join('')
+}
+
+export function getFileMd5(file, chunkSize) {
+  return new Promise((resolve, reject) => {
+    let blobSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice
+    let chunks = Math.ceil(file.size / chunkSize)
+    let currentChunk = 0
+    let spark = new SparkMD5.ArrayBuffer()
+    let fileReader = new FileReader()
+    fileReader.onload = function (e) {
+      spark.append(e.target.result)
+      currentChunk++
+      if (currentChunk < chunks) {
+        loadNext()
+      } else {
+        const md5 = spark.end()
+        resolve(md5)
+      }
+    }
+    fileReader.onerror = function (e) {
+      reject(e)
+    }
+
+    function loadNext() {
+      let start = currentChunk * chunkSize
+      let end = start + chunkSize
+      if (end > file.size) {
+        end = file.size
+      }
+      fileReader.readAsArrayBuffer(blobSlice.call(file, start, end))
+    }
+    loadNext()
+  })
+}
+
+// 鑾峰彇鏂囦欢
+export function getPublicFile(md5, isToken) {
+  const {
+    tokenKey,
+    requestCtx
+  } = config
+  let src = null
+  let token = localStorage.getItem(tokenKey)
+  if (md5) {
+    if (isToken) {
+      src = requestCtx + `/file/api/ApiDownloadForAuthorize?md5=${md5}&token=${token}`
+    } else {
+      src = requestCtx + `/file/api/ApiDownload?md5=${md5}`
+    }
+  } else {
+    return ''
+  }
+  return src
+}
+
+
+
+
+
+
+export const handleCmsItemListRequestData = (datas, fields, path, storeId, repositoryId) => {
+  const dataList = [];
+  for (let i = 0; i < datas.length; i++) {
+    const item = datas[i];
+    const _fields = {};
+    const _datas = [];
+    if (fields != null) {
+      for (let fieldKey in fields) {
+        // 鍏煎绛涢�夋潯浠剁殑瀛楁鍊艰幏鍙栵紝鍥犱负鍚庡彴绛涢�夊拰鍙栧�煎彧鑳戒紶涓�涓紝閮戒細杩斿洖鍊�
+        fieldKey = fieldKey.replace(/[!=<>*]/g, '');
+        if (item.datas[fieldKey]) {
+          let values = [];
+          if (typeof item.datas[fieldKey] == 'string') {
+            values = JSON.parse(item.datas[fieldKey]);
+          } else {
+            values = item.datas[fieldKey];
+          }
+          if (values ?.length > 0) {
+            // 鐢ㄥ瓧娈靛悕澶勭悊杩斿洖鐨勫瓧娈靛��
+            if (values[0].Value) {
+              _fields[fieldKey] = values[0].Value;
+              values[0].sequenceNum = values[0].SequenceNum;
+            }
+            // 鍏煎澶勭悊鏁版嵁杩斿洖鐨刱ey鏄疌msItemData
+            // if (values[0].CmsItemData) {
+            //   _fields[fieldKey] = values[0].CmsItemData.Value;
+            //   values[0].sequenceNum = values[0].CmsItemData.SequenceNum;
+            // }
+
+            item.datas[fieldKey] = values[0];
+            if (values ?.length > 1) {
+              const isFile = values.find((citem) => citem.FileList ?.length > 0);
+              const dataItems = deduplicateArray(values, 'FieldId');
+              if (!isFile) {
+                _datas.push(dataItems[0]);
+              } else {
+                const customFile = {
+                  customFileList: values,
+                  name: fieldKey,
+                  md5: _fields[fieldKey],
+                  FieldId: values[0].FieldId,
+                  SequenceNum: values[0].SequenceNum
+                };
+                _datas.push(customFile);
+              }
+            } else {
+              _datas.push(values[0]);
+            }
+          }
+        }
+      }
+    }
+
+    if (item.datas.LogQuery) {
+      item.datas.LogQuery = JSON.parse(item.datas.LogQuery);
+    }
+
+    const subDatas = {};
+    if (item.subDatas) {
+      for (let subData of item.subDatas) {
+        const tag = subData.queryTag.replace('Query', '');
+        subDatas[tag] = subData.datas;
+      }
+    }
+    dataList.push({
+      ...item,
+      id: item.id,
+      name: item.datas.Name ? item.datas.Name : item.name,
+      icon: item.datas.Icon,
+      storeId: storeId,
+      repositoryId: repositoryId,
+      refCode: item.datas.RefCode === '[]' ? null : item.datas.RefCode,
+      state: item.datas.State,
+      type: item.datas.Type,
+      tag: item.datas.Tag,
+      creator: item.datas.Creator ? JSON.parse(item.datas.Creator) : undefined,
+      linkType: item.datas.LinkType,
+      childrenCount: parseInt(item.datas.ChildrenCount ?? '0'),
+      childrenFolderCount: parseInt(item.datas.ChildrenFolderCount ?? '0'),
+      childrenChannelCount: parseInt(item.datas.ChildrenChannelCount ?? '0'),
+      childrenCmsItemCount: parseInt(item.datas.ChildrenCmsItemCount ?? '0'),
+      childrenFileCount: parseInt(item.datas.ChildrenFileCount ?? '0'),
+      createDate: moment(item.datas.CreateDate).format('YYYY-MM-DD HH:mm:ss'),
+      description: item.datas.Description,
+      sysType: item.datas.SysType,
+      idPath: path + '\\' + item.id,
+      typeId: parseInt(item.datas.TypeId),
+      linkAppId: item.datas.linkAppId,
+      linkFile: JSON.parse(item.datas.LinkFile ?? '[]'),
+      PublishInfo: JSON.parse(item.datas.PublishInfo ?? '[]'),
+      linkInfo: item.datas.LinkInfo ? JSON.parse(item.datas.LinkInfo) : [],
+      linkPath: item.datas.LinkPath ?? null,
+      linkOrg: item.datas.LinkOrg ? JSON.parse(item.datas.LinkOrg) : [],
+      linkDepartment: item.datas.LinkDepartment? JSON.parse(item.datas.LinkDepartment) : [],
+      ..._fields,
+      datas: item.datas,
+      fieldList: _datas,
+      subDatas
+    });
+  }
+  return dataList;
+};
+
+// type缁撴瀯澶勭悊
+export const handleTypeList = (list) => {
+  for (let i = 0; i < list.length; i++) {
+    const type = list[i];
+    try {
+      type.cfg = JSON.parse(type.config);
+    } catch (error) {
+      type.cfg = null;
+    }
+    const fieldRefcodeMap = {};
+    const tableHeaderFieldList = [];
+    const isSearchFieldList = [];
+    const isAdvSearchFieldList = [];
+    const isFilterFieldList = [];
+    handleType({
+      typeFieldList: type.typeLinkList,
+      fieldRefcodeMap,
+      tableHeaderFieldList,
+      isSearchFieldList,
+      isAdvSearchFieldList,
+      isFilterFieldList
+    });
+    type.fieldRefcodeMap = fieldRefcodeMap;
+    type.tableHeaderFieldList = tableHeaderFieldList;
+    type.isSearchFieldList = isSearchFieldList;
+    type.isAdvSearchFieldList = isAdvSearchFieldList;
+    type.isFilterFieldList = isFilterFieldList;
+  }
+
+  return list;
+};
+
+const handleType = ({
+  typeFieldList,
+  fieldRefcodeMap,
+  tableHeaderFieldList,
+  isSearchFieldList,
+  isAdvSearchFieldList,
+  isFilterFieldList
+}) => {
+  for (let i = 0; i < typeFieldList.length; i++) {
+    const item = typeFieldList[i];
+    try {
+      item.cfg = JSON.parse(item.config);
+    } catch (error) {
+      item.cfg = null;
+    }
+    if (item.typeField) {
+      try {
+        item.typeField.cfg = JSON.parse(item.typeField.config);
+      } catch (error) {
+        item.typeField.cfg = null;
+      }
+      fieldRefcodeMap[item.typeField.refCode] = item;
+    }
+    if (item.cfg && item.cfg.isColHeader) {
+      tableHeaderFieldList.push(item);
+    }
+    if (item.cfg && item.cfg.isSearch) {
+      isSearchFieldList.push(item);
+    }
+    if (item.cfg && item.cfg.isAdvSearch) {
+      isAdvSearchFieldList.push(item);
+    }
+    if (item.cfg && item.cfg.isFilter) {
+      isFilterFieldList.push(item);
+    }
+    if (item.children && item.children.length) {
+      handleType({
+        typeFieldList: item.children,
+        fieldRefcodeMap,
+        tableHeaderFieldList,
+        isSearchFieldList,
+        isAdvSearchFieldList,
+        isFilterFieldList
+      });
+    }
+  }
+};
+
+
+//澶勭悊鏍戝舰缁撴瀯
+const handleTreeData = (datas, parent, noTriggerSelect = false) => {
+  let parentData = {};
+  if (parent) {
+    parentData = { ...parent, parent: null };
+  } else {
+    parentData = null;
+  }
+  const list = [];
+  for (let i = 0; i < datas.length; i++) {
+    const data = datas[i];
+    const obj = {
+      label: data.name,
+      key: parentData ? parentData.key + "_" + i : i + "",
+      namePath: parentData ? parentData.namePath + "\\" + data.name : data.name,
+      icon: data.icon,
+      data: data,
+      parent: parentData,
+      leaf: false,
+      children: [],
+    };
+    if (data["children"] && data["children"].length) {
+      obj.leaf = false;
+      obj.children = handleTreeData(
+        data["children"],
+        {
+          ...data,
+          key: obj.key,
+          namePath: obj.namePath,
+        },
+        i == 0 ? false : true // 濡傛灉鏈夊瓙鏁版嵁澶勭悊锛屽彧鏈夌涓�鏉℃暟鎹渶瑕佸睍寮�鍜屽洖璋�
+      );
+    } else {
+      obj.leaf =
+        !data["childrenChannelCount"] || data["childrenChannelCount"] == 0;
+    }
+    list.push(obj);
+  }
+  console.log(list, "list");
+  return list;
+};
+
+
+//鑾峰彇璧勬簮
+
+
+
+export default {
+  ...tool,
+  uuid,
+  getFileMd5,
+  worksDataBytool,
+  UpdateworksDataBytool,
+  getPublicImage,
+  worksData,
+  getPublicFile,
+  handleTypeList,
+  handleTreeData,
+  // parseHtml,
+}
\ No newline at end of file
diff --git a/src/assets/js/userAction.js b/src/assets/js/userAction.js
new file mode 100644
index 0000000..8ecf23a
--- /dev/null
+++ b/src/assets/js/userAction.js
@@ -0,0 +1,135 @@
+import config from "@/assets/js/config.js";
+
+import jobApi from "./middleGround/api/job"; // newJobWithNewView // newSession,
+
+export function setSessionGuid(type, id) {
+  var cityCode = null;
+  var SnIp = null;
+  try {
+    // eslint-disable-next-line
+    SnIp = window.returnCitySN;
+  } catch (error) {
+    SnIp = null;
+    console.log(error);
+  }
+  if (SnIp != undefined && SnIp != null) {
+    cityCode = SnIp;
+  } else {
+    cityCode = {
+      cip: "0.0.0.0",
+      cname: "鏈煡",
+    };
+  }
+  const _city = cityCode.cname.substring(3);
+  const _province = cityCode.cname.substring(0, 3);
+  const params = {
+    appRefCode: config.appRefCode,
+    hostName: config.requestCtx,
+    ipAddress: cityCode.cip,
+    browser: myBrowser(),
+    os: navigator.platform,
+    device: "pc",
+    province: _province,
+    city: _city ? _city : _province,
+  };
+
+  jobApi.newSession(params).then(res => {
+    storage.set("sessionGuid", res, 30);
+    setNewView(type, id);
+  });
+}
+
+export const storage = {
+  /*
+   * set 瀛樺偍鏂规硶
+   * @ param {String} 	key 閿�
+   * @ param {String} 	value 鍊硷紝
+   * @ param {String} 	expired 杩囨湡鏃堕棿锛屼互鍒嗛挓涓哄崟浣嶏紝闈炲繀椤�
+   */
+  set(key, val, expired) {
+    if (typeof val !== "string") {
+      val = JSON.stringify(val);
+    }
+    window.sessionStorage.setItem(key, val);
+    if (expired) {
+      window.sessionStorage.setItem(
+        `${key}__expires__`,
+        `${Date.now() + 1000 * 60 * expired}`
+      );
+    }
+  },
+  /*
+   * get 鑾峰彇鏂规硶
+   * @ param {String} 	key 閿�
+   * @ param {String} 	expired 瀛樺偍鏃朵负闈炲繀椤诲瓧娈碉紝鎵�浠ユ湁鍙兘鍙栦笉鍒帮紝榛樿涓� Date.now+1
+   */
+  get(key) {
+    const expired =
+      window.sessionStorage.getItem(`${key}__expires__`) || Date.now + 1;
+    const now = Date.now();
+
+    if (now >= expired) {
+      window.sessionStorage.removeItem(key);
+      return;
+    }
+    let val = window.sessionStorage.getItem(key);
+    try {
+      val = JSON.parse(val);
+    } catch (e) {
+      return e;
+    }
+    return val;
+  },
+};
+
+function myBrowser() {
+  const userAgent = navigator.userAgent; //鍙栧緱娴忚鍣ㄧ殑userAgent瀛楃涓�
+  const isOpera = userAgent.indexOf("Opera") > -1;
+  if (isOpera) {
+    //鍒ゆ柇鏄惁Opera娴忚鍣�
+    return "Opera";
+  }
+  if (userAgent.indexOf("Firefox") > -1) {
+    //鍒ゆ柇鏄惁Firefox娴忚鍣�
+    return "Firefox";
+  }
+  if (userAgent.indexOf("Chrome") > -1) {
+    return "Chrome";
+  }
+  if (userAgent.indexOf("Safari") > -1) {
+    //鍒ゆ柇鏄惁Safari娴忚鍣�
+    return "Safari";
+  }
+  if (
+    userAgent.indexOf("compatible") > -1 &&
+    userAgent.indexOf("MSIE") > -1 &&
+    !isOpera
+  ) {
+    //鍒ゆ柇鏄惁IE娴忚鍣�
+    return "IE";
+  }
+  return "";
+}
+
+export function setNewView(type, id) {
+  if (!sessionStorage.getItem("sessionGuid")) {
+    setSessionGuid(type, id);
+  }
+
+  const sessionGuid = sessionStorage.getItem("sessionGuid");
+  const fromPath = sessionStorage.getItem("fromPath");
+  const toPath = sessionStorage.getItem("toPath");
+  if (sessionGuid) {
+    let params = {
+      sessionGuid: sessionGuid,
+      appRefCode: config.appRefCode,
+      type: "View",
+      url: toPath == null ? "/" : toPath,
+      ref: fromPath == null ? "/" : fromPath,
+    };
+    if (id) {
+      params[type] = id;
+    }
+    jobApi.newJobWithNewView(params).then(res => {});
+  }
+}
\ No newline at end of file
diff --git a/src/assets/logo.svg b/src/assets/logo.svg
new file mode 100644
index 0000000..7565660
--- /dev/null
+++ b/src/assets/logo.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 261.76 226.69"><path d="M161.096.001l-30.225 52.351L100.647.001H-.005l130.877 226.688L261.749.001z" fill="#41b883"/><path d="M161.096.001l-30.225 52.351L100.647.001H52.346l78.526 136.01L209.398.001z" fill="#34495e"/></svg>
diff --git a/src/assets/main.css b/src/assets/main.css
new file mode 100644
index 0000000..480a2ae
--- /dev/null
+++ b/src/assets/main.css
@@ -0,0 +1,15 @@
+@import './base.css';
+
+#app {
+  width: 100%;
+
+}
+
+a,
+.green {
+  text-decoration: none;
+  color: hsla(160, 100%, 37%, 1);
+  transition: 0.4s;
+  padding: 3px;
+}
+
diff --git a/src/layout/baseLayout.vue b/src/layout/baseLayout.vue
new file mode 100644
index 0000000..eed2949
--- /dev/null
+++ b/src/layout/baseLayout.vue
@@ -0,0 +1,41 @@
+<template>
+  <div class="layoutBox">
+    <Header class="header"></Header>
+    <div class="layoutContentBox" id="layout">
+      <RouterView />
+      <Footer class="footer"></Footer>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import Header from './components/headerPage.vue'
+import Footer from './components/footerPage.vue'
+</script>
+
+<style lang="less" scoped>
+.layoutBox {
+  width: 100%;
+  height: 100vh;
+  display: flex;
+  flex-direction: column;
+  background-color: #fff;
+
+  .layoutContentBox {
+    flex: 1;
+    height: auto;
+  }
+
+  .header {
+    flex-shrink: 0;
+    width: 100%;
+  }
+}
+
+@media screen and (min-width: 1200px) {
+  .layoutContentBox {
+    flex: 1;
+    overflow: auto;
+  }
+}
+</style>
diff --git a/src/layout/components/footerPage.vue b/src/layout/components/footerPage.vue
new file mode 100644
index 0000000..15aaa44
--- /dev/null
+++ b/src/layout/components/footerPage.vue
@@ -0,0 +1,16 @@
+<template>
+  <div class="footerBox">FOOT</div>
+</template>
+
+<script setup lang="ts"></script>
+
+<style scoped>
+.footerBox {
+  width: 100%;
+  height: 240px;
+  min-width: 1200px;
+  color: #fff;
+  background-color: #f0f0f0;
+  text-align: center;
+}
+</style>
diff --git a/src/layout/components/headerPage.vue b/src/layout/components/headerPage.vue
new file mode 100644
index 0000000..c1664cb
--- /dev/null
+++ b/src/layout/components/headerPage.vue
@@ -0,0 +1,184 @@
+<template>
+  <div class="pageHeader">
+    <div class="contentBox logoBox">
+      <div class="logo">
+        <img
+          @click="
+            () => {
+              $router.push({
+                path: '/home',
+              })
+            }
+          "
+          src="@/assets/images/xiehe/home/Group_303.png"
+        />
+      </div>
+      <div class="searchBox" v-show="!hideSerch">
+        <el-input
+          style="width: 500px"
+          placeholder="璇疯緭鍏ュ唴瀹�"
+          @change="gotoSearch"
+          v-model="searchKey"
+          :suffix-icon="Search"
+        >
+        </el-input>
+        <div class="loginInfoBox">
+          <div v-if="!userInfo" class="loginBtnBox">
+            <a
+              @click="
+                () => {
+                  $router.push({
+                    path: '/register',
+                  })
+                }
+              "
+              >娉ㄥ唽</a
+            >
+            |
+            <a
+              @click="
+                () => {
+                  $router.push({
+                    path: '/login',
+                    query: {
+                      redirectPath: $route.fullPath,
+                    },
+                  })
+                }
+              "
+              >鐧诲綍</a
+            >
+          </div>
+          <div v-else class="userInfoBox">
+            <el-dropdown @command="handleCommand">
+              <span style="cursor: pointer">娆㈣繋鎮紝{{ userInfo.name }}锛�</span>
+              <el-dropdown-menu slot="dropdown">
+                <el-dropdown-item icon="el-icon-user" command="gotoPersonalCenter"
+                  >涓汉涓績</el-dropdown-item
+                >
+                <el-dropdown-item icon="el-icon-switch-button" command="logout"
+                  >閫�鍑虹櫥褰�</el-dropdown-item
+                >
+              </el-dropdown-menu>
+            </el-dropdown>
+          </div>
+        </div>
+      </div>
+    </div>
+    <div class="contentBox navBox" v-show="!hideNav">
+      <div
+        :class="{
+          navItem: true,
+          active: $route.fullPath.indexOf(item.path) > -1,
+        }"
+        v-for="(item, index) in navData"
+        :key="index"
+        @click="gotoPage(item)"
+      >
+        {{ item.name }}
+      </div>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { ref } from 'vue'
+
+const props = defineProps({
+  hideSerch: {
+    type: Boolean,
+    default: false,
+  },
+  hideNav: {
+    type: Boolean,
+    default: false,
+  },
+})
+
+let searchKey = ref('')
+let userInfo = ref('')
+
+const gotoSearch = () => {}
+const handleCommand = () => {}
+</script>
+
+<style lang="less" scoped>
+.pageHeader {
+  width: 100%;
+  background-color: #fff;
+  border-bottom: 1px solid #e6e6e6;
+  .topBar {
+    background: #e6e6e6;
+    color: #808080;
+    overflow: hidden;
+    padding: 14px 0;
+    p {
+      float: left;
+    }
+    .loginInfoBox {
+      float: right;
+      .loginBtnBox {
+        a {
+          cursor: pointer;
+          text-decoration: none;
+          color: inherit;
+          margin: 0 4px;
+        }
+      }
+    }
+  }
+  .logoBox {
+    padding: 25px 0;
+    overflow: hidden;
+    max-width: 1200px !important;
+    .logo {
+      float: left;
+      height: 66px;
+      img {
+        height: 100%;
+        cursor: pointer;
+      }
+    }
+    .searchBox {
+      width: 670px;
+      float: right;
+      padding-right: 10px;
+      line-height: 66px;
+      display: flex;
+      justify-content: space-between;
+      .searchItem {
+        width: 120px;
+        vertical-align: initial;
+      }
+      .searchBtn {
+        width: auto;
+        background: #144941;
+        color: #fff;
+        padding: 0 20px;
+        height: 40px;
+      }
+    }
+  }
+  .navBox {
+    .navItem {
+      display: inline-block;
+      width: 120px;
+      height: 50px;
+      text-align: center;
+      line-height: 50px;
+      font-size: 16px;
+      cursor: pointer;
+      &.active {
+        background: #144941;
+        color: #fff;
+      }
+    }
+  }
+}
+</style>
+<style>
+.pageHeader .searchBox .el-input-group__prepend {
+  background: #fff;
+  color: #444;
+}
+</style>
diff --git a/src/main.js b/src/main.js
new file mode 100644
index 0000000..4ffb08e
--- /dev/null
+++ b/src/main.js
@@ -0,0 +1,30 @@
+import './assets/main.css'
+
+import { createApp } from 'vue'
+import { createPinia } from 'pinia'
+
+import App from './App.vue'
+// 瀹屾暣寮曞叆 Element Plus
+import ElementPlus from 'element-plus'
+import 'element-plus/dist/index.css'
+import * as ElementPlusIconsVue from '@element-plus/icons-vue'
+import router from './router'
+import MG from '@/assets/js/middleGround/WebMiddleGroundApi.js'
+import toolClass from '@/assets/js/toolClass.js'
+import config from '@/assets/js/config.js'
+
+const app = createApp(App)
+
+app.provide('config', config)
+app.provide('MG', MG)
+app.provide('toolClass', toolClass)
+
+// 娉ㄥ唽鎵�鏈夊浘鏍�
+for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
+  app.component(key, component)
+}
+app.use(ElementPlus)
+app.use(createPinia())
+app.use(router)
+
+app.mount('#app')
diff --git a/src/plugin/axios/index.ts b/src/plugin/axios/index.ts
new file mode 100644
index 0000000..4c1e09f
--- /dev/null
+++ b/src/plugin/axios/index.ts
@@ -0,0 +1,69 @@
+import axios from "axios";
+import myConfig from "@/assets/js/config.js";
+import toolClass from "@/assets/js/toolClass.js";
+import router from "@/router";
+// 鍒涘缓 axios 瀹炰緥
+const service = axios.create({
+  baseURL: myConfig.requestCtx,
+  timeout: myConfig.requestTimeOut, // 璇锋眰瓒呮椂鏃堕棿
+});
+
+// 璇锋眰鎷︽埅鍣�
+service.interceptors.request.use(
+  (config) => {
+    let token = localStorage.getItem(myConfig.tokenKey);
+    if (token) config.headers["Authorization"] = `bearer ${token}`;
+    return config;
+  },
+  (error) => {
+    // 鍙戦�佸け璐�
+    Promise.reject(error);
+  }
+);
+
+// 鍝嶅簲鎷︽埅鍣�
+service.interceptors.response.use(
+  (response) => {
+    // dataAxios 鏄� axios 杩斿洖鏁版嵁涓殑 data
+    const dataAxios = response.data;
+    if (typeof dataAxios.data === "boolean") {
+      return dataAxios.data;
+    }
+    if (response.config.responseType == "blob") {
+      return dataAxios;
+    }
+    const { success } = dataAxios;
+    if (dataAxios.currentDate) {
+      sessionStorage.currentDate = new Date(dataAxios.currentDate).getTime();
+    }
+    // 鏍规嵁 code 杩涜鍒ゆ柇
+    if (response.status == 200 && response.statusText == "OK") {
+      return dataAxios.data ? dataAxios.data : dataAxios;
+    } else {
+      // 鎻愮ず閿欒
+    }
+  },
+  (error) => {
+    if (
+      (error.response && error.response.status == 401) ||
+      error.code == "ERR_NETWORK"
+    ) {
+      console.log(router, "router");
+
+      localStorage.removeItem(myConfig.tokenKey);
+      localStorage.removeItem("jesk-userInfo");
+      router.push({
+        name: "login",
+      });
+    } else {
+      if (error.response && error.response.data && error.response.data.error) {
+        console.error(error.response.data.error.msg);
+      } else {
+        console.error("璇锋眰鍙戠敓閿欒");
+      }
+    }
+    return Promise.reject(error);
+  }
+);
+
+export default service;
diff --git a/src/router/index.js b/src/router/index.js
new file mode 100644
index 0000000..9b039b4
--- /dev/null
+++ b/src/router/index.js
@@ -0,0 +1,23 @@
+import { createRouter, createWebHashHistory, createWebHistory } from 'vue-router'
+import HomeView from '../views/home/index.vue'
+import PageLayout from '../layout/baseLayout.vue'
+const router = createRouter({
+  history: createWebHashHistory(import.meta.env.BASE_URL),
+  routes: [
+    {
+      path: '/',
+      name: 'layout',
+      component: PageLayout,
+      redirect: { name: 'home' },
+      children: [
+        {
+          path: '/',
+          name: 'home',
+          component: HomeView,
+        },
+      ],
+    },
+  ],
+})
+
+export default router
diff --git a/src/stores/counter.js b/src/stores/counter.js
new file mode 100644
index 0000000..b6757ba
--- /dev/null
+++ b/src/stores/counter.js
@@ -0,0 +1,12 @@
+import { ref, computed } from 'vue'
+import { defineStore } from 'pinia'
+
+export const useCounterStore = defineStore('counter', () => {
+  const count = ref(0)
+  const doubleCount = computed(() => count.value * 2)
+  function increment() {
+    count.value++
+  }
+
+  return { count, doubleCount, increment }
+})
diff --git a/src/views/home/index.vue b/src/views/home/index.vue
new file mode 100644
index 0000000..69936ea
--- /dev/null
+++ b/src/views/home/index.vue
@@ -0,0 +1,36 @@
+<template>
+  <div class="homePage">
+    <el-carousel :height="screenheight">
+      <el-carousel-item v-for="item in 4" :key="item">
+        <h3 class="small justify-center" text="2xl">{{ item }}</h3>
+      </el-carousel-item>
+    </el-carousel>
+  </div>
+</template>
+
+<script setup>
+import { ref } from 'vue'
+let screenheight = ref(document.documentElement.clientHeight / 4)
+</script>
+
+<style lang="less" scoped>
+.homePage {
+  min-width: 1220px;
+  background-color: #fff;
+}
+.el-carousel__item h3 {
+  color: #475669;
+  opacity: 0.75;
+  line-height: 150px;
+  margin: 0;
+  text-align: center;
+}
+
+.el-carousel__item:nth-child(2n) {
+  background-color: #99a9bf;
+}
+
+.el-carousel__item:nth-child(2n + 1) {
+  background-color: #d3dce6;
+}
+</style>
diff --git a/vite.config.js b/vite.config.js
new file mode 100644
index 0000000..7c84695
--- /dev/null
+++ b/vite.config.js
@@ -0,0 +1,18 @@
+import { fileURLToPath, URL } from 'node:url'
+
+import { defineConfig } from 'vite'
+import vue from '@vitejs/plugin-vue'
+
+// https://vite.dev/config/
+export default defineConfig({
+  plugins: [vue()],
+  base: './',
+  server: {
+    host: '0.0.0.0',
+  },
+  resolve: {
+    alias: {
+      '@': fileURLToPath(new URL('./src', import.meta.url)),
+    },
+  },
+})

--
Gitblit v1.9.1