张含笑
2025-10-13 ca987bfb2dad4b87b931a4bf3e93c030bde63e1d
feat:详情
8 files modified
3 files added
1527 ■■■■■ changed files
package.json 9 ●●●●● patch | view | raw | blame | history
pnpm-lock.yaml 709 ●●●● patch | view | raw | blame | history
src/api/work/index.js 16 ●●●● patch | view | raw | blame | history
src/pages.json 14 ●●●●● patch | view | raw | blame | history
src/pages/droneConsole/index.vue 45 ●●●●● patch | view | raw | blame | history
src/pages/inspectionTask/TaskDetails/TaskDetails.vue 21 ●●●●● patch | view | raw | blame | history
src/pages/login/index.vue 6 ●●●● patch | view | raw | blame | history
src/pages/map/drag.vue 200 ●●●●● patch | view | raw | blame | history
src/pages/map/index.vue 235 ●●●● patch | view | raw | blame | history
src/subPackages/browser/index.vue 39 ●●●●● patch | view | raw | blame | history
src/subPackages/workDetail/index.vue 233 ●●●●● patch | view | raw | blame | history
package.json
@@ -75,16 +75,17 @@
    "@dcloudio/uni-mp-weixin": "3.0.0-4070520250711001",
    "@dcloudio/uni-mp-xhs": "3.0.0-4070520250711001",
    "@dcloudio/uni-quickapp-webview": "3.0.0-4070520250711001",
    "@dcloudio/uni-ui": "^1.5.11",
    "dayjs": "^1.11.18",
    "js-base64": "^3.7.4",
    "js-md5": "^0.7.3",
    "leaflet": "^1.9.4",
    "pinia": "2.2.4",
    "pinia-plugin-persistedstate": "4.1.3",
    "uview-plus": "^3.5.41",
    "vue": "3.4.21",
    "vue-i18n": "9.1.9",
    "z-paging": "^2.8.8",
    "js-md5": "^0.7.3",
    "js-base64": "^3.7.4"
    "z-paging": "^2.8.8"
  },
  "devDependencies": {
    "@antfu/eslint-config": "5.0.0",
@@ -141,4 +142,4 @@
      "stylelint --fix"
    ]
  }
}
}
pnpm-lock.yaml
@@ -10,7 +10,7 @@
dependencies:
  '@dcloudio/uni-app':
    specifier: 3.0.0-4070520250711001
    version: 3.0.0-4070520250711001(@dcloudio/types@3.4.21)(postcss@8.5.6)(vue@3.4.21)
    version: 3.0.0-4070520250711001(@dcloudio/types@3.4.22)(postcss@8.5.6)(vue@3.4.21)
  '@dcloudio/uni-app-harmony':
    specifier: 3.0.0-4070520250711001
    version: 3.0.0-4070520250711001(postcss@8.5.6)(vite@5.2.8)(vue@3.4.21)
@@ -28,7 +28,7 @@
    version: 3.0.0-4070520250711001(postcss@8.5.6)(vue@3.4.21)
  '@dcloudio/uni-mp-baidu':
    specifier: 3.0.0-4070520250711001
    version: 3.0.0-4070520250711001(@dcloudio/types@3.4.21)(postcss@8.5.6)(vue@3.4.21)
    version: 3.0.0-4070520250711001(@dcloudio/types@3.4.22)(postcss@8.5.6)(vue@3.4.21)
  '@dcloudio/uni-mp-harmony':
    specifier: 3.0.0-4070520250711001
    version: 3.0.0-4070520250711001(postcss@8.5.6)(vue@3.4.21)
@@ -56,6 +56,9 @@
  '@dcloudio/uni-quickapp-webview':
    specifier: 3.0.0-4070520250711001
    version: 3.0.0-4070520250711001(postcss@8.5.6)(vue@3.4.21)
  '@dcloudio/uni-ui':
    specifier: ^1.5.11
    version: 1.5.11
  dayjs:
    specifier: ^1.11.18
    version: 1.11.18
@@ -70,7 +73,7 @@
    version: 1.9.4
  pinia:
    specifier: 2.2.4
    version: 2.2.4(typescript@5.9.2)(vue@3.4.21)
    version: 2.2.4(typescript@5.9.3)(vue@3.4.21)
  pinia-plugin-persistedstate:
    specifier: 4.1.3
    version: 4.1.3(pinia@2.2.4)
@@ -79,7 +82,7 @@
    version: 3.5.41
  vue:
    specifier: 3.4.21
    version: 3.4.21(typescript@5.9.2)
    version: 3.4.21(typescript@5.9.3)
  vue-i18n:
    specifier: 9.1.9
    version: 9.1.9(vue@3.4.21)
@@ -90,7 +93,7 @@
devDependencies:
  '@antfu/eslint-config':
    specifier: 5.0.0
    version: 5.0.0(@unocss/eslint-plugin@66.3.3)(@vue/compiler-sfc@3.5.22)(eslint@9.32.0)(typescript@5.9.2)
    version: 5.0.0(@unocss/eslint-plugin@66.3.3)(@vue/compiler-sfc@3.5.22)(eslint@9.32.0)(typescript@5.9.3)
  '@dcloudio/uni-automator':
    specifier: 3.0.0-4070520250711001
    version: 3.0.0-4070520250711001(jest-environment-node@27.5.1)(jest@27.0.4)(postcss@8.5.6)(vue@3.4.21)
@@ -120,7 +123,7 @@
    version: 4.38.0
  '@unocss/eslint-plugin':
    specifier: ^66.3.3
    version: 66.3.3(eslint@9.32.0)(typescript@5.9.2)
    version: 66.3.3(eslint@9.32.0)(typescript@5.9.3)
  '@unocss/preset-icons':
    specifier: ^66.3.3
    version: 66.3.3
@@ -159,7 +162,7 @@
    version: 2.13.1
  stylelint:
    specifier: ^16.23.0
    version: 16.23.0(typescript@5.9.2)
    version: 16.23.0(typescript@5.9.3)
  stylelint-config-recess-order:
    specifier: ^6.1.0
    version: 6.1.0(stylelint@16.23.0)
@@ -206,7 +209,7 @@
      '@jridgewell/gen-mapping': 0.3.13
      '@jridgewell/trace-mapping': 0.3.31
  /@antfu/eslint-config@5.0.0(@unocss/eslint-plugin@66.3.3)(@vue/compiler-sfc@3.5.22)(eslint@9.32.0)(typescript@5.9.2):
  /@antfu/eslint-config@5.0.0(@unocss/eslint-plugin@66.3.3)(@vue/compiler-sfc@3.5.22)(eslint@9.32.0)(typescript@5.9.3):
    resolution: {integrity: sha512-uAMv8PiW9BOAGmIyTDtWXGnNfv6PFV4DmpqmlUpST5k4bue38VRdIfnM4jvgPuny1xnjYX3flN3kB9++6LknMw==}
    hasBin: true
    peerDependencies:
@@ -261,13 +264,13 @@
      '@antfu/install-pkg': 1.1.0
      '@clack/prompts': 0.11.0
      '@eslint-community/eslint-plugin-eslint-comments': 4.5.0(eslint@9.32.0)
      '@eslint/markdown': 7.3.0
      '@eslint/markdown': 7.4.0
      '@stylistic/eslint-plugin': 5.4.0(eslint@9.32.0)
      '@typescript-eslint/eslint-plugin': 8.44.1(@typescript-eslint/parser@8.44.1)(eslint@9.32.0)(typescript@5.9.2)
      '@typescript-eslint/parser': 8.44.1(eslint@9.32.0)(typescript@5.9.2)
      '@unocss/eslint-plugin': 66.3.3(eslint@9.32.0)(typescript@5.9.2)
      '@vitest/eslint-plugin': 1.3.13(eslint@9.32.0)(typescript@5.9.2)
      ansis: 4.1.0
      '@typescript-eslint/eslint-plugin': 8.46.0(@typescript-eslint/parser@8.46.0)(eslint@9.32.0)(typescript@5.9.3)
      '@typescript-eslint/parser': 8.46.0(eslint@9.32.0)(typescript@5.9.3)
      '@unocss/eslint-plugin': 66.3.3(eslint@9.32.0)(typescript@5.9.3)
      '@vitest/eslint-plugin': 1.3.16(eslint@9.32.0)(typescript@5.9.3)
      ansis: 4.2.0
      cac: 6.7.14
      eslint: 9.32.0
      eslint-config-flat-gitignore: 2.1.0(eslint@9.32.0)
@@ -275,19 +278,19 @@
      eslint-merge-processors: 2.0.0(eslint@9.32.0)
      eslint-plugin-antfu: 3.1.1(eslint@9.32.0)
      eslint-plugin-command: 3.3.1(eslint@9.32.0)
      eslint-plugin-import-lite: 0.3.0(eslint@9.32.0)(typescript@5.9.2)
      eslint-plugin-import-lite: 0.3.0(eslint@9.32.0)(typescript@5.9.3)
      eslint-plugin-jsdoc: 51.4.1(eslint@9.32.0)
      eslint-plugin-jsonc: 2.20.1(eslint@9.32.0)
      eslint-plugin-n: 17.23.1(eslint@9.32.0)(typescript@5.9.2)
      eslint-plugin-jsonc: 2.21.0(eslint@9.32.0)
      eslint-plugin-n: 17.23.1(eslint@9.32.0)(typescript@5.9.3)
      eslint-plugin-no-only-tests: 3.3.0
      eslint-plugin-perfectionist: 4.15.0(eslint@9.32.0)(typescript@5.9.2)
      eslint-plugin-pnpm: 1.1.2(eslint@9.32.0)
      eslint-plugin-perfectionist: 4.15.1(eslint@9.32.0)(typescript@5.9.3)
      eslint-plugin-pnpm: 1.2.0(eslint@9.32.0)
      eslint-plugin-regexp: 2.10.0(eslint@9.32.0)
      eslint-plugin-toml: 0.12.0(eslint@9.32.0)
      eslint-plugin-unicorn: 60.0.0(eslint@9.32.0)
      eslint-plugin-unused-imports: 4.2.0(@typescript-eslint/eslint-plugin@8.44.1)(eslint@9.32.0)
      eslint-plugin-vue: 10.5.0(@stylistic/eslint-plugin@5.4.0)(@typescript-eslint/parser@8.44.1)(eslint@9.32.0)(vue-eslint-parser@10.2.0)
      eslint-plugin-yml: 1.18.0(eslint@9.32.0)
      eslint-plugin-unused-imports: 4.2.0(@typescript-eslint/eslint-plugin@8.46.0)(eslint@9.32.0)
      eslint-plugin-vue: 10.5.0(@stylistic/eslint-plugin@5.4.0)(@typescript-eslint/parser@8.46.0)(eslint@9.32.0)(vue-eslint-parser@10.2.0)
      eslint-plugin-yml: 1.19.0(eslint@9.32.0)
      eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.22)(eslint@9.32.0)
      globals: 16.4.0
      jsonc-eslint-parser: 2.4.1
@@ -307,7 +310,7 @@
  /@antfu/install-pkg@1.1.0:
    resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==}
    dependencies:
      package-manager-detector: 1.3.0
      package-manager-detector: 1.4.0
      tinyexec: 1.0.1
    dev: true
@@ -315,8 +318,8 @@
    resolution: {integrity: sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==}
    dev: true
  /@antfu/utils@9.2.1:
    resolution: {integrity: sha512-TMilPqXyii1AsiEii6l6ubRzbo76p6oshUSYPaKsmXDavyMLqjzVDkcp3pHp5ELMUNJHATcEOGxKTTsX9yYhGg==}
  /@antfu/utils@9.3.0:
    resolution: {integrity: sha512-9hFT4RauhcUzqOE4f1+frMKLZrgNog5b06I7VmZQV1BkvwvqrbC8EBZf3L1eEL2AKb6rNKjER0sEvJiSP1FXEA==}
    dev: true
  /@babel/code-frame@7.27.1:
@@ -376,7 +379,7 @@
    dependencies:
      '@babel/compat-data': 7.28.4
      '@babel/helper-validator-option': 7.27.1
      browserslist: 4.26.2
      browserslist: 4.26.3
      lru-cache: 5.1.1
      semver: 6.3.1
@@ -1531,24 +1534,26 @@
    resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
    dev: true
  /@cacheable/memoize@2.0.2:
    resolution: {integrity: sha512-wPrr7FUiq3Qt4yQyda2/NcOLTJCFcQSU3Am2adP+WLy+sz93/fKTokVTHmtz+rjp4PD7ee0AEOeRVNN6IvIfsg==}
  /@cacheable/memoize@2.0.3:
    resolution: {integrity: sha512-hl9wfQgpiydhQEIv7fkjEzTGE+tcosCXLKFDO707wYJ/78FVOlowb36djex5GdbSyeHnG62pomYLMuV/OT8Pbw==}
    dependencies:
      '@cacheable/utils': 2.0.2
      '@cacheable/utils': 2.1.0
    dev: true
  /@cacheable/memory@2.0.2:
    resolution: {integrity: sha512-sJTITLfeCI1rg7P3ssaGmQryq235EGT8dXGcx6oZwX5NRnKq9IE6lddlllcOl+oXW+yaeTRddCjo0xrfU6ZySA==}
  /@cacheable/memory@2.0.3:
    resolution: {integrity: sha512-R3UKy/CKOyb1LZG/VRCTMcpiMDyLH7SH3JrraRdK6kf3GweWCOU3sgvE13W3TiDRbxnDKylzKJvhUAvWl9LQOA==}
    dependencies:
      '@cacheable/memoize': 2.0.2
      '@cacheable/utils': 2.0.2
      '@cacheable/memoize': 2.0.3
      '@cacheable/utils': 2.1.0
      '@keyv/bigmap': 1.0.2
      hookified: 1.12.1
      keyv: 5.5.3
    dev: true
  /@cacheable/utils@2.0.2:
    resolution: {integrity: sha512-JTFM3raFhVv8LH95T7YnZbf2YoE9wEtkPPStuRF9a6ExZ103hFvs+QyCuYJ6r0hA9wRtbzgZtwUCoDWxssZd4Q==}
  /@cacheable/utils@2.1.0:
    resolution: {integrity: sha512-ZdxfOiaarMqMj+H7qwlt5EBKWaeGihSYVHdQv5lUsbn8MJJOTW82OIwirQ39U5tMZkNvy3bQE+ryzC+xTAb9/g==}
    dependencies:
      keyv: 5.5.3
    dev: true
  /@clack/core@0.5.0:
@@ -1600,8 +1605,8 @@
      postcss-selector-parser: 7.1.0
    dev: true
  /@dcloudio/types@3.4.21:
    resolution: {integrity: sha512-rsv3XfAaD/dtuVboPeYh+vPcULnWyozGaGKHWyN0dYRm7L1uypFUM30qNYMj9iNmbAENuBjV177S1gNEBIvdDA==}
  /@dcloudio/types@3.4.22:
    resolution: {integrity: sha512-qVDGe+eZW2ONGbMfVn1XDelculyfcXYk3d/Dos+6Pddc3x9SBlQVY5HYoKzJrnIMjnlLJMbckiF5y1EjTFvWPQ==}
    dev: false
  /@dcloudio/uni-app-harmony@3.0.0-4070520250711001(postcss@8.5.6)(vite@5.2.8)(vue@3.4.21):
@@ -1711,12 +1716,12 @@
    resolution: {integrity: sha512-/ISF+1xrcvUtcote+LfLyk/pyizTjEY6/3HZgBsOfXchkZBz0fkTWgnj5RHYeqwD7aHLsOJX93eaazNMnzD9Zw==}
    dev: false
  /@dcloudio/uni-app@3.0.0-4070520250711001(@dcloudio/types@3.4.21)(postcss@8.5.6)(vue@3.4.21):
  /@dcloudio/uni-app@3.0.0-4070520250711001(@dcloudio/types@3.4.22)(postcss@8.5.6)(vue@3.4.21):
    resolution: {integrity: sha512-rR1SGJknJyDy80vb47yDICXcZrV11KJ5yhNG8aC+kH2ZL338faBrdOQgqqN/XJegVxJdTfv1KqUXuaShMWTZGA==}
    peerDependencies:
      '@dcloudio/types': ^3.4.14
    dependencies:
      '@dcloudio/types': 3.4.21
      '@dcloudio/types': 3.4.22
      '@dcloudio/uni-cloud': 3.0.0-4070520250711001(postcss@8.5.6)(vue@3.4.21)
      '@dcloudio/uni-components': 3.0.0-4070520250711001(postcss@8.5.6)(vue@3.4.21)
      '@dcloudio/uni-console': 3.0.0-4070520250711001(postcss@8.5.6)(vue@3.4.21)
@@ -1816,7 +1821,7 @@
      postcss-selector-parser: 6.1.2
      resolve: 1.22.10
      source-map-js: 1.2.1
      tapable: 2.2.3
      tapable: 2.3.0
      unimport: 4.1.1
      unplugin-auto-import: 19.1.0
      xregexp: 3.1.0
@@ -1958,10 +1963,10 @@
      - vue
    dev: false
  /@dcloudio/uni-mp-baidu@3.0.0-4070520250711001(@dcloudio/types@3.4.21)(postcss@8.5.6)(vue@3.4.21):
  /@dcloudio/uni-mp-baidu@3.0.0-4070520250711001(@dcloudio/types@3.4.22)(postcss@8.5.6)(vue@3.4.21):
    resolution: {integrity: sha512-7YuoKeqZQ5M/q6e9TSuasa3aoHcqFL0+wEGInYXEVPrFfy94/c39E0y39/kirtx7YM3tcIX8/h4KOBnP3V5uhA==}
    dependencies:
      '@dcloudio/uni-app': 3.0.0-4070520250711001(@dcloudio/types@3.4.21)(postcss@8.5.6)(vue@3.4.21)
      '@dcloudio/uni-app': 3.0.0-4070520250711001(@dcloudio/types@3.4.22)(postcss@8.5.6)(vue@3.4.21)
      '@dcloudio/uni-cli-shared': 3.0.0-4070520250711001(postcss@8.5.6)(vue@3.4.21)
      '@dcloudio/uni-mp-compiler': 3.0.0-4070520250711001(postcss@8.5.6)(vue@3.4.21)
      '@dcloudio/uni-mp-vite': 3.0.0-4070520250711001(postcss@8.5.6)(vue@3.4.21)
@@ -2272,6 +2277,10 @@
      - vue
    dev: false
  /@dcloudio/uni-ui@1.5.11:
    resolution: {integrity: sha512-DBtk046ofmeFd82zRI7d89SoEwrAxYzUN3WVPm1DIBkpLPG5F5QDNkHMnZGu2wNrMEmGBjBpUh3vqEY1L3jaMw==}
    dev: false
  /@dcloudio/vite-plugin-uni@3.0.0-4070520250711001(postcss@8.5.6)(vite@5.2.8)(vue@3.4.21):
    resolution: {integrity: sha512-Pcd1YIPP+0hyC64oh0P3EBZGF8YHsScUS7R0wjlDGkRMsGowil0IbBE5DrmqjZ7QE+0Lau77yxfZdkSjY3gbvA==}
    engines: {node: ^14.18.0 || >=16.0.0}
@@ -2324,7 +2333,7 @@
    engines: {node: '>=18'}
    dependencies:
      '@types/estree': 1.0.8
      '@typescript-eslint/types': 8.44.1
      '@typescript-eslint/types': 8.46.0
      comment-parser: 1.4.1
      esquery: 1.6.0
      jsdoc-type-pratt-parser: 4.1.0
@@ -2335,7 +2344,7 @@
    engines: {node: '>=20.11.0'}
    dependencies:
      '@types/estree': 1.0.8
      '@typescript-eslint/types': 8.44.1
      '@typescript-eslint/types': 8.46.0
      comment-parser: 1.4.1
      esquery: 1.6.0
      jsdoc-type-pratt-parser: 4.1.0
@@ -2630,12 +2639,12 @@
    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
    dev: true
  /@eslint/markdown@7.3.0:
    resolution: {integrity: sha512-v9Cpl9IvzGmWMUwDAwSbf1b2GMwjQJiD0TSHegFrIu23mjqGQOvaCwnetzbG3/fjk8x7baKaIbSTBlpCktZRRg==}
  /@eslint/markdown@7.4.0:
    resolution: {integrity: sha512-VQykmMjBb4tQoJOXVWXa+oQbQeCZlE7W3rAsOpmtpKLvJd75saZZ04PVVs7+zgMDJGghd4/gyFV6YlvdJFaeNQ==}
    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
    dependencies:
      '@eslint/core': 0.15.2
      '@eslint/plugin-kit': 0.3.5
      '@eslint/core': 0.16.0
      '@eslint/plugin-kit': 0.4.0
      github-slugger: 2.0.0
      mdast-util-from-markdown: 2.0.2
      mdast-util-frontmatter: 2.0.1
@@ -2657,6 +2666,14 @@
    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
    dependencies:
      '@eslint/core': 0.15.2
      levn: 0.4.1
    dev: true
  /@eslint/plugin-kit@0.4.0:
    resolution: {integrity: sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==}
    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
    dependencies:
      '@eslint/core': 0.16.0
      levn: 0.4.1
    dev: true
@@ -2802,7 +2819,7 @@
    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
    dependencies:
      '@jest/types': 27.5.1
      '@types/node': 24.5.2
      '@types/node': 24.7.0
      chalk: 4.1.2
      jest-message-util: 27.5.1
      jest-util: 27.5.1
@@ -2823,7 +2840,7 @@
      '@jest/test-result': 27.5.1
      '@jest/transform': 27.5.1
      '@jest/types': 27.5.1
      '@types/node': 24.5.2
      '@types/node': 24.7.0
      ansi-escapes: 4.3.2
      chalk: 4.1.2
      emittery: 0.8.1
@@ -2860,7 +2877,7 @@
    dependencies:
      '@jest/fake-timers': 27.5.1
      '@jest/types': 27.5.1
      '@types/node': 24.5.2
      '@types/node': 24.7.0
      jest-mock: 27.5.1
    dev: true
@@ -2870,7 +2887,7 @@
    dependencies:
      '@jest/types': 27.5.1
      '@sinonjs/fake-timers': 8.1.0
      '@types/node': 24.5.2
      '@types/node': 24.7.0
      jest-message-util: 27.5.1
      jest-mock: 27.5.1
      jest-util: 27.5.1
@@ -2899,7 +2916,7 @@
      '@jest/test-result': 27.5.1
      '@jest/transform': 27.5.1
      '@jest/types': 27.5.1
      '@types/node': 24.5.2
      '@types/node': 24.7.0
      chalk: 4.1.2
      collect-v8-coverage: 1.0.2
      exit: 0.1.2
@@ -2983,7 +3000,7 @@
    dependencies:
      '@types/istanbul-lib-coverage': 2.0.6
      '@types/istanbul-reports': 3.0.4
      '@types/node': 24.5.2
      '@types/node': 24.7.0
      '@types/yargs': 16.0.9
      chalk: 4.1.2
    dev: true
@@ -3449,8 +3466,8 @@
      dayjs: 1.11.18
    dev: true
  /@modelcontextprotocol/sdk@1.18.2:
    resolution: {integrity: sha512-beedclIvFcCnPrYgHsylqiYJVJ/CI47Vyc4tY8no1/Li/O8U4BTlJfy6ZwxkYwx+Mx10nrgwSVrA7VBbhh4slg==}
  /@modelcontextprotocol/sdk@1.19.1:
    resolution: {integrity: sha512-3Y2h3MZKjec1eAqSTBclATlX+AbC6n1LgfVzRMJLt3v6w0RCYgwLrjbxPDbhsYHt6Wdqc/aCceNJYgj448ELQQ==}
    engines: {node: '>=18'}
    dependencies:
      ajv: 6.12.6
@@ -3487,8 +3504,8 @@
      '@nodelib/fs.scandir': 2.1.5
      fastq: 1.19.1
  /@nuxt/kit@3.19.2:
    resolution: {integrity: sha512-+QiqO0WcIxsKLUqXdVn3m4rzTRm2fO9MZgd330utCAaagGmHsgiMJp67kE14boJEPutnikfz3qOmrzBnDIHUUg==}
  /@nuxt/kit@3.19.3:
    resolution: {integrity: sha512-ze46EW5xW+UxDvinvPkYt2MzR355Az1lA3bpX8KDialgnCwr+IbkBij/udbUEC6ZFbidPkfK1eKl4ESN7gMY+w==}
    engines: {node: '>=18.12.0'}
    dependencies:
      c12: 3.3.0
@@ -3498,7 +3515,7 @@
      errx: 0.1.0
      exsolve: 1.0.7
      ignore: 7.0.5
      jiti: 2.6.0
      jiti: 2.6.1
      klona: 2.0.6
      knitwork: 1.2.0
      mlly: 1.8.0
@@ -3507,12 +3524,12 @@
      pkg-types: 2.3.0
      rc9: 2.1.2
      scule: 1.3.0
      semver: 7.7.2
      semver: 7.7.3
      std-env: 3.9.0
      tinyglobby: 0.2.15
      ufo: 1.6.1
      unctx: 2.4.1
      unimport: 5.4.0
      unimport: 5.4.1
      untyped: 2.0.0
    transitivePeerDependencies:
      - magicast
@@ -3680,15 +3697,15 @@
      estree-walker: 2.0.2
      picomatch: 4.0.3
  /@rollup/rollup-android-arm-eabi@4.52.3:
    resolution: {integrity: sha512-h6cqHGZ6VdnwliFG1NXvMPTy/9PS3h8oLh7ImwR+kl+oYnQizgjxsONmmPSb2C66RksfkfIxEVtDSEcJiO0tqw==}
  /@rollup/rollup-android-arm-eabi@4.52.4:
    resolution: {integrity: sha512-BTm2qKNnWIQ5auf4deoetINJm2JzvihvGb9R6K/ETwKLql/Bb3Eg2H1FBp1gUb4YGbydMA3jcmQTR73q7J+GAA==}
    cpu: [arm]
    os: [android]
    requiresBuild: true
    optional: true
  /@rollup/rollup-android-arm64@4.52.3:
    resolution: {integrity: sha512-wd+u7SLT/u6knklV/ifG7gr5Qy4GUbH2hMWcDauPFJzmCZUAJ8L2bTkVXC2niOIxp8lk3iH/QX8kSrUxVZrOVw==}
  /@rollup/rollup-android-arm64@4.52.4:
    resolution: {integrity: sha512-P9LDQiC5vpgGFgz7GSM6dKPCiqR3XYN1WwJKA4/BUVDjHpYsf3iBEmVz62uyq20NGYbiGPR5cNHI7T1HqxNs2w==}
    cpu: [arm64]
    os: [android]
    requiresBuild: true
@@ -3700,8 +3717,8 @@
    os: [darwin]
    dev: true
  /@rollup/rollup-darwin-arm64@4.52.3:
    resolution: {integrity: sha512-lj9ViATR1SsqycwFkJCtYfQTheBdvlWJqzqxwc9f2qrcVrQaF/gCuBRTiTolkRWS6KvNxSk4KHZWG7tDktLgjg==}
  /@rollup/rollup-darwin-arm64@4.52.4:
    resolution: {integrity: sha512-QRWSW+bVccAvZF6cbNZBJwAehmvG9NwfWHwMy4GbWi/BQIA/laTIktebT2ipVjNncqE6GLPxOok5hsECgAxGZg==}
    cpu: [arm64]
    os: [darwin]
    requiresBuild: true
@@ -3713,145 +3730,145 @@
    os: [darwin]
    dev: true
  /@rollup/rollup-darwin-x64@4.52.3:
    resolution: {integrity: sha512-+Dyo7O1KUmIsbzx1l+4V4tvEVnVQqMOIYtrxK7ncLSknl1xnMHLgn7gddJVrYPNZfEB8CIi3hK8gq8bDhb3h5A==}
  /@rollup/rollup-darwin-x64@4.52.4:
    resolution: {integrity: sha512-hZgP05pResAkRJxL1b+7yxCnXPGsXU0fG9Yfd6dUaoGk+FhdPKCJ5L1Sumyxn8kvw8Qi5PvQ8ulenUbRjzeCTw==}
    cpu: [x64]
    os: [darwin]
    requiresBuild: true
    optional: true
  /@rollup/rollup-freebsd-arm64@4.52.3:
    resolution: {integrity: sha512-u9Xg2FavYbD30g3DSfNhxgNrxhi6xVG4Y6i9Ur1C7xUuGDW3banRbXj+qgnIrwRN4KeJ396jchwy9bCIzbyBEQ==}
  /@rollup/rollup-freebsd-arm64@4.52.4:
    resolution: {integrity: sha512-xmc30VshuBNUd58Xk4TKAEcRZHaXlV+tCxIXELiE9sQuK3kG8ZFgSPi57UBJt8/ogfhAF5Oz4ZSUBN77weM+mQ==}
    cpu: [arm64]
    os: [freebsd]
    requiresBuild: true
    optional: true
  /@rollup/rollup-freebsd-x64@4.52.3:
    resolution: {integrity: sha512-5M8kyi/OX96wtD5qJR89a/3x5x8x5inXBZO04JWhkQb2JWavOWfjgkdvUqibGJeNNaz1/Z1PPza5/tAPXICI6A==}
  /@rollup/rollup-freebsd-x64@4.52.4:
    resolution: {integrity: sha512-WdSLpZFjOEqNZGmHflxyifolwAiZmDQzuOzIq9L27ButpCVpD7KzTRtEG1I0wMPFyiyUdOO+4t8GvrnBLQSwpw==}
    cpu: [x64]
    os: [freebsd]
    requiresBuild: true
    optional: true
  /@rollup/rollup-linux-arm-gnueabihf@4.52.3:
    resolution: {integrity: sha512-IoerZJ4l1wRMopEHRKOO16e04iXRDyZFZnNZKrWeNquh5d6bucjezgd+OxG03mOMTnS1x7hilzb3uURPkJ0OfA==}
  /@rollup/rollup-linux-arm-gnueabihf@4.52.4:
    resolution: {integrity: sha512-xRiOu9Of1FZ4SxVbB0iEDXc4ddIcjCv2aj03dmW8UrZIW7aIQ9jVJdLBIhxBI+MaTnGAKyvMwPwQnoOEvP7FgQ==}
    cpu: [arm]
    os: [linux]
    libc: [glibc]
    requiresBuild: true
    optional: true
  /@rollup/rollup-linux-arm-musleabihf@4.52.3:
    resolution: {integrity: sha512-ZYdtqgHTDfvrJHSh3W22TvjWxwOgc3ThK/XjgcNGP2DIwFIPeAPNsQxrJO5XqleSlgDux2VAoWQ5iJrtaC1TbA==}
  /@rollup/rollup-linux-arm-musleabihf@4.52.4:
    resolution: {integrity: sha512-FbhM2p9TJAmEIEhIgzR4soUcsW49e9veAQCziwbR+XWB2zqJ12b4i/+hel9yLiD8pLncDH4fKIPIbt5238341Q==}
    cpu: [arm]
    os: [linux]
    libc: [musl]
    requiresBuild: true
    optional: true
  /@rollup/rollup-linux-arm64-gnu@4.52.3:
    resolution: {integrity: sha512-NcViG7A0YtuFDA6xWSgmFb6iPFzHlf5vcqb2p0lGEbT+gjrEEz8nC/EeDHvx6mnGXnGCC1SeVV+8u+smj0CeGQ==}
  /@rollup/rollup-linux-arm64-gnu@4.52.4:
    resolution: {integrity: sha512-4n4gVwhPHR9q/g8lKCyz0yuaD0MvDf7dV4f9tHt0C73Mp8h38UCtSCSE6R9iBlTbXlmA8CjpsZoujhszefqueg==}
    cpu: [arm64]
    os: [linux]
    libc: [glibc]
    requiresBuild: true
    optional: true
  /@rollup/rollup-linux-arm64-musl@4.52.3:
    resolution: {integrity: sha512-d3pY7LWno6SYNXRm6Ebsq0DJGoiLXTb83AIPCXl9fmtIQs/rXoS8SJxxUNtFbJ5MiOvs+7y34np77+9l4nfFMw==}
  /@rollup/rollup-linux-arm64-musl@4.52.4:
    resolution: {integrity: sha512-u0n17nGA0nvi/11gcZKsjkLj1QIpAuPFQbR48Subo7SmZJnGxDpspyw2kbpuoQnyK+9pwf3pAoEXerJs/8Mi9g==}
    cpu: [arm64]
    os: [linux]
    libc: [musl]
    requiresBuild: true
    optional: true
  /@rollup/rollup-linux-loong64-gnu@4.52.3:
    resolution: {integrity: sha512-3y5GA0JkBuirLqmjwAKwB0keDlI6JfGYduMlJD/Rl7fvb4Ni8iKdQs1eiunMZJhwDWdCvrcqXRY++VEBbvk6Eg==}
  /@rollup/rollup-linux-loong64-gnu@4.52.4:
    resolution: {integrity: sha512-0G2c2lpYtbTuXo8KEJkDkClE/+/2AFPdPAbmaHoE870foRFs4pBrDehilMcrSScrN/fB/1HTaWO4bqw+ewBzMQ==}
    cpu: [loong64]
    os: [linux]
    libc: [glibc]
    requiresBuild: true
    optional: true
  /@rollup/rollup-linux-ppc64-gnu@4.52.3:
    resolution: {integrity: sha512-AUUH65a0p3Q0Yfm5oD2KVgzTKgwPyp9DSXc3UA7DtxhEb/WSPfbG4wqXeSN62OG5gSo18em4xv6dbfcUGXcagw==}
  /@rollup/rollup-linux-ppc64-gnu@4.52.4:
    resolution: {integrity: sha512-teSACug1GyZHmPDv14VNbvZFX779UqWTsd7KtTM9JIZRDI5NUwYSIS30kzI8m06gOPB//jtpqlhmraQ68b5X2g==}
    cpu: [ppc64]
    os: [linux]
    libc: [glibc]
    requiresBuild: true
    optional: true
  /@rollup/rollup-linux-riscv64-gnu@4.52.3:
    resolution: {integrity: sha512-1makPhFFVBqZE+XFg3Dkq+IkQ7JvmUrwwqaYBL2CE+ZpxPaqkGaiWFEWVGyvTwZace6WLJHwjVh/+CXbKDGPmg==}
  /@rollup/rollup-linux-riscv64-gnu@4.52.4:
    resolution: {integrity: sha512-/MOEW3aHjjs1p4Pw1Xk4+3egRevx8Ji9N6HUIA1Ifh8Q+cg9dremvFCUbOX2Zebz80BwJIgCBUemjqhU5XI5Eg==}
    cpu: [riscv64]
    os: [linux]
    libc: [glibc]
    requiresBuild: true
    optional: true
  /@rollup/rollup-linux-riscv64-musl@4.52.3:
    resolution: {integrity: sha512-OOFJa28dxfl8kLOPMUOQBCO6z3X2SAfzIE276fwT52uXDWUS178KWq0pL7d6p1kz7pkzA0yQwtqL0dEPoVcRWg==}
  /@rollup/rollup-linux-riscv64-musl@4.52.4:
    resolution: {integrity: sha512-1HHmsRyh845QDpEWzOFtMCph5Ts+9+yllCrREuBR/vg2RogAQGGBRC8lDPrPOMnrdOJ+mt1WLMOC2Kao/UwcvA==}
    cpu: [riscv64]
    os: [linux]
    libc: [musl]
    requiresBuild: true
    optional: true
  /@rollup/rollup-linux-s390x-gnu@4.52.3:
    resolution: {integrity: sha512-jMdsML2VI5l+V7cKfZx3ak+SLlJ8fKvLJ0Eoa4b9/vCUrzXKgoKxvHqvJ/mkWhFiyp88nCkM5S2v6nIwRtPcgg==}
  /@rollup/rollup-linux-s390x-gnu@4.52.4:
    resolution: {integrity: sha512-seoeZp4L/6D1MUyjWkOMRU6/iLmCU2EjbMTyAG4oIOs1/I82Y5lTeaxW0KBfkUdHAWN7j25bpkt0rjnOgAcQcA==}
    cpu: [s390x]
    os: [linux]
    libc: [glibc]
    requiresBuild: true
    optional: true
  /@rollup/rollup-linux-x64-gnu@4.52.3:
    resolution: {integrity: sha512-tPgGd6bY2M2LJTA1uGq8fkSPK8ZLYjDjY+ZLK9WHncCnfIz29LIXIqUgzCR0hIefzy6Hpbe8Th5WOSwTM8E7LA==}
  /@rollup/rollup-linux-x64-gnu@4.52.4:
    resolution: {integrity: sha512-Wi6AXf0k0L7E2gteNsNHUs7UMwCIhsCTs6+tqQ5GPwVRWMaflqGec4Sd8n6+FNFDw9vGcReqk2KzBDhCa1DLYg==}
    cpu: [x64]
    os: [linux]
    libc: [glibc]
    requiresBuild: true
    optional: true
  /@rollup/rollup-linux-x64-musl@4.52.3:
    resolution: {integrity: sha512-BCFkJjgk+WFzP+tcSMXq77ymAPIxsX9lFJWs+2JzuZTLtksJ2o5hvgTdIcZ5+oKzUDMwI0PfWzRBYAydAHF2Mw==}
  /@rollup/rollup-linux-x64-musl@4.52.4:
    resolution: {integrity: sha512-dtBZYjDmCQ9hW+WgEkaffvRRCKm767wWhxsFW3Lw86VXz/uJRuD438/XvbZT//B96Vs8oTA8Q4A0AfHbrxP9zw==}
    cpu: [x64]
    os: [linux]
    libc: [musl]
    requiresBuild: true
    optional: true
  /@rollup/rollup-openharmony-arm64@4.52.3:
    resolution: {integrity: sha512-KTD/EqjZF3yvRaWUJdD1cW+IQBk4fbQaHYJUmP8N4XoKFZilVL8cobFSTDnjTtxWJQ3JYaMgF4nObY/+nYkumA==}
  /@rollup/rollup-openharmony-arm64@4.52.4:
    resolution: {integrity: sha512-1ox+GqgRWqaB1RnyZXL8PD6E5f7YyRUJYnCqKpNzxzP0TkaUh112NDrR9Tt+C8rJ4x5G9Mk8PQR3o7Ku2RKqKA==}
    cpu: [arm64]
    os: [openharmony]
    requiresBuild: true
    optional: true
  /@rollup/rollup-win32-arm64-msvc@4.52.3:
    resolution: {integrity: sha512-+zteHZdoUYLkyYKObGHieibUFLbttX2r+58l27XZauq0tcWYYuKUwY2wjeCN9oK1Um2YgH2ibd6cnX/wFD7DuA==}
  /@rollup/rollup-win32-arm64-msvc@4.52.4:
    resolution: {integrity: sha512-8GKr640PdFNXwzIE0IrkMWUNUomILLkfeHjXBi/nUvFlpZP+FA8BKGKpacjW6OUUHaNI6sUURxR2U2g78FOHWQ==}
    cpu: [arm64]
    os: [win32]
    requiresBuild: true
    optional: true
  /@rollup/rollup-win32-ia32-msvc@4.52.3:
    resolution: {integrity: sha512-of1iHkTQSo3kr6dTIRX6t81uj/c/b15HXVsPcEElN5sS859qHrOepM5p9G41Hah+CTqSh2r8Bm56dL2z9UQQ7g==}
  /@rollup/rollup-win32-ia32-msvc@4.52.4:
    resolution: {integrity: sha512-AIy/jdJ7WtJ/F6EcfOb2GjR9UweO0n43jNObQMb6oGxkYTfLcnN7vYYpG+CN3lLxrQkzWnMOoNSHTW54pgbVxw==}
    cpu: [ia32]
    os: [win32]
    requiresBuild: true
    optional: true
  /@rollup/rollup-win32-x64-gnu@4.52.3:
    resolution: {integrity: sha512-s0hybmlHb56mWVZQj8ra9048/WZTPLILKxcvcq+8awSZmyiSUZjjem1AhU3Tf4ZKpYhK4mg36HtHDOe8QJS5PQ==}
  /@rollup/rollup-win32-x64-gnu@4.52.4:
    resolution: {integrity: sha512-UF9KfsH9yEam0UjTwAgdK0anlQ7c8/pWPU2yVjyWcF1I1thABt6WXE47cI71pGiZ8wGvxohBoLnxM04L/wj8mQ==}
    cpu: [x64]
    os: [win32]
    requiresBuild: true
    optional: true
  /@rollup/rollup-win32-x64-msvc@4.52.3:
    resolution: {integrity: sha512-zGIbEVVXVtauFgl3MRwGWEN36P5ZGenHRMgNw88X5wEhEBpq0XrMEZwOn07+ICrwM17XO5xfMZqh0OldCH5VTA==}
  /@rollup/rollup-win32-x64-msvc@4.52.4:
    resolution: {integrity: sha512-bf9PtUa0u8IXDVxzRToFQKsNCRz9qLYfR/MpECxl4mRoWYjAeFjgxj1XdZr2M/GNVpT05p+LgQOHopYDlUu6/w==}
    cpu: [x64]
    os: [win32]
    requiresBuild: true
@@ -3876,7 +3893,7 @@
      eslint: '>=9.0.0'
    dependencies:
      '@eslint-community/eslint-utils': 4.9.0(eslint@9.32.0)
      '@typescript-eslint/types': 8.44.1
      '@typescript-eslint/types': 8.46.0
      eslint: 9.32.0
      eslint-visitor-keys: 4.2.1
      espree: 10.4.0
@@ -3930,7 +3947,7 @@
  /@types/graceful-fs@4.1.9:
    resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==}
    dependencies:
      '@types/node': 24.5.2
      '@types/node': 24.7.0
    dev: true
  /@types/istanbul-lib-coverage@2.0.6:
@@ -3963,10 +3980,10 @@
    resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
    dev: true
  /@types/node@24.5.2:
    resolution: {integrity: sha512-FYxk1I7wPv3K2XBaoyH2cTnocQEu8AOZ60hPbsyukMPLv5/5qr7V1i8PLHdl6Zf87I+xZXFvPCXYjiTFq+YSDQ==}
  /@types/node@24.7.0:
    resolution: {integrity: sha512-IbKooQVqUBrlzWTi79E8Fw78l8k1RNtlDDNWsFZs7XonuQSJ8oNYfEeclhprUldXISRMLzBpILuKgPlIxm+/Yw==}
    dependencies:
      undici-types: 7.12.0
      undici-types: 7.14.0
    dev: true
  /@types/prettier@2.7.3:
@@ -3991,145 +4008,145 @@
      '@types/yargs-parser': 21.0.3
    dev: true
  /@typescript-eslint/eslint-plugin@8.44.1(@typescript-eslint/parser@8.44.1)(eslint@9.32.0)(typescript@5.9.2):
    resolution: {integrity: sha512-molgphGqOBT7t4YKCSkbasmu1tb1MgrZ2szGzHbclF7PNmOkSTQVHy+2jXOSnxvR3+Xe1yySHFZoqMpz3TfQsw==}
  /@typescript-eslint/eslint-plugin@8.46.0(@typescript-eslint/parser@8.46.0)(eslint@9.32.0)(typescript@5.9.3):
    resolution: {integrity: sha512-hA8gxBq4ukonVXPy0OKhiaUh/68D0E88GSmtC1iAEnGaieuDi38LhS7jdCHRLi6ErJBNDGCzvh5EnzdPwUc0DA==}
    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
    peerDependencies:
      '@typescript-eslint/parser': ^8.44.1
      '@typescript-eslint/parser': ^8.46.0
      eslint: ^8.57.0 || ^9.0.0
      typescript: '>=4.8.4 <6.0.0'
    dependencies:
      '@eslint-community/regexpp': 4.12.1
      '@typescript-eslint/parser': 8.44.1(eslint@9.32.0)(typescript@5.9.2)
      '@typescript-eslint/scope-manager': 8.44.1
      '@typescript-eslint/type-utils': 8.44.1(eslint@9.32.0)(typescript@5.9.2)
      '@typescript-eslint/utils': 8.44.1(eslint@9.32.0)(typescript@5.9.2)
      '@typescript-eslint/visitor-keys': 8.44.1
      '@typescript-eslint/parser': 8.46.0(eslint@9.32.0)(typescript@5.9.3)
      '@typescript-eslint/scope-manager': 8.46.0
      '@typescript-eslint/type-utils': 8.46.0(eslint@9.32.0)(typescript@5.9.3)
      '@typescript-eslint/utils': 8.46.0(eslint@9.32.0)(typescript@5.9.3)
      '@typescript-eslint/visitor-keys': 8.46.0
      eslint: 9.32.0
      graphemer: 1.4.0
      ignore: 7.0.5
      natural-compare: 1.4.0
      ts-api-utils: 2.1.0(typescript@5.9.2)
      typescript: 5.9.2
      ts-api-utils: 2.1.0(typescript@5.9.3)
      typescript: 5.9.3
    transitivePeerDependencies:
      - supports-color
    dev: true
  /@typescript-eslint/parser@8.44.1(eslint@9.32.0)(typescript@5.9.2):
    resolution: {integrity: sha512-EHrrEsyhOhxYt8MTg4zTF+DJMuNBzWwgvvOYNj/zm1vnaD/IC5zCXFehZv94Piqa2cRFfXrTFxIvO95L7Qc/cw==}
  /@typescript-eslint/parser@8.46.0(eslint@9.32.0)(typescript@5.9.3):
    resolution: {integrity: sha512-n1H6IcDhmmUEG7TNVSspGmiHHutt7iVKtZwRppD7e04wha5MrkV1h3pti9xQLcCMt6YWsncpoT0HMjkH1FNwWQ==}
    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
    peerDependencies:
      eslint: ^8.57.0 || ^9.0.0
      typescript: '>=4.8.4 <6.0.0'
    dependencies:
      '@typescript-eslint/scope-manager': 8.44.1
      '@typescript-eslint/types': 8.44.1
      '@typescript-eslint/typescript-estree': 8.44.1(typescript@5.9.2)
      '@typescript-eslint/visitor-keys': 8.44.1
      '@typescript-eslint/scope-manager': 8.46.0
      '@typescript-eslint/types': 8.46.0
      '@typescript-eslint/typescript-estree': 8.46.0(typescript@5.9.3)
      '@typescript-eslint/visitor-keys': 8.46.0
      debug: 4.4.3
      eslint: 9.32.0
      typescript: 5.9.2
      typescript: 5.9.3
    transitivePeerDependencies:
      - supports-color
    dev: true
  /@typescript-eslint/project-service@8.44.1(typescript@5.9.2):
    resolution: {integrity: sha512-ycSa60eGg8GWAkVsKV4E6Nz33h+HjTXbsDT4FILyL8Obk5/mx4tbvCNsLf9zret3ipSumAOG89UcCs/KRaKYrA==}
  /@typescript-eslint/project-service@8.46.0(typescript@5.9.3):
    resolution: {integrity: sha512-OEhec0mH+U5Je2NZOeK1AbVCdm0ChyapAyTeXVIYTPXDJ3F07+cu87PPXcGoYqZ7M9YJVvFnfpGg1UmCIqM+QQ==}
    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
    peerDependencies:
      typescript: '>=4.8.4 <6.0.0'
    dependencies:
      '@typescript-eslint/tsconfig-utils': 8.44.1(typescript@5.9.2)
      '@typescript-eslint/types': 8.44.1
      '@typescript-eslint/tsconfig-utils': 8.46.0(typescript@5.9.3)
      '@typescript-eslint/types': 8.46.0
      debug: 4.4.3
      typescript: 5.9.2
      typescript: 5.9.3
    transitivePeerDependencies:
      - supports-color
    dev: true
  /@typescript-eslint/scope-manager@8.44.1:
    resolution: {integrity: sha512-NdhWHgmynpSvyhchGLXh+w12OMT308Gm25JoRIyTZqEbApiBiQHD/8xgb6LqCWCFcxFtWwaVdFsLPQI3jvhywg==}
  /@typescript-eslint/scope-manager@8.46.0:
    resolution: {integrity: sha512-lWETPa9XGcBes4jqAMYD9fW0j4n6hrPtTJwWDmtqgFO/4HF4jmdH/Q6wggTw5qIT5TXjKzbt7GsZUBnWoO3dqw==}
    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
    dependencies:
      '@typescript-eslint/types': 8.44.1
      '@typescript-eslint/visitor-keys': 8.44.1
      '@typescript-eslint/types': 8.46.0
      '@typescript-eslint/visitor-keys': 8.46.0
    dev: true
  /@typescript-eslint/tsconfig-utils@8.44.1(typescript@5.9.2):
    resolution: {integrity: sha512-B5OyACouEjuIvof3o86lRMvyDsFwZm+4fBOqFHccIctYgBjqR3qT39FBYGN87khcgf0ExpdCBeGKpKRhSFTjKQ==}
  /@typescript-eslint/tsconfig-utils@8.46.0(typescript@5.9.3):
    resolution: {integrity: sha512-WrYXKGAHY836/N7zoK/kzi6p8tXFhasHh8ocFL9VZSAkvH956gfeRfcnhs3xzRy8qQ/dq3q44v1jvQieMFg2cw==}
    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
    peerDependencies:
      typescript: '>=4.8.4 <6.0.0'
    dependencies:
      typescript: 5.9.2
      typescript: 5.9.3
    dev: true
  /@typescript-eslint/type-utils@8.44.1(eslint@9.32.0)(typescript@5.9.2):
    resolution: {integrity: sha512-KdEerZqHWXsRNKjF9NYswNISnFzXfXNDfPxoTh7tqohU/PRIbwTmsjGK6V9/RTYWau7NZvfo52lgVk+sJh0K3g==}
  /@typescript-eslint/type-utils@8.46.0(eslint@9.32.0)(typescript@5.9.3):
    resolution: {integrity: sha512-hy+lvYV1lZpVs2jRaEYvgCblZxUoJiPyCemwbQZ+NGulWkQRy0HRPYAoef/CNSzaLt+MLvMptZsHXHlkEilaeg==}
    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
    peerDependencies:
      eslint: ^8.57.0 || ^9.0.0
      typescript: '>=4.8.4 <6.0.0'
    dependencies:
      '@typescript-eslint/types': 8.44.1
      '@typescript-eslint/typescript-estree': 8.44.1(typescript@5.9.2)
      '@typescript-eslint/utils': 8.44.1(eslint@9.32.0)(typescript@5.9.2)
      '@typescript-eslint/types': 8.46.0
      '@typescript-eslint/typescript-estree': 8.46.0(typescript@5.9.3)
      '@typescript-eslint/utils': 8.46.0(eslint@9.32.0)(typescript@5.9.3)
      debug: 4.4.3
      eslint: 9.32.0
      ts-api-utils: 2.1.0(typescript@5.9.2)
      typescript: 5.9.2
      ts-api-utils: 2.1.0(typescript@5.9.3)
      typescript: 5.9.3
    transitivePeerDependencies:
      - supports-color
    dev: true
  /@typescript-eslint/types@8.44.1:
    resolution: {integrity: sha512-Lk7uj7y9uQUOEguiDIDLYLJOrYHQa7oBiURYVFqIpGxclAFQ78f6VUOM8lI2XEuNOKNB7XuvM2+2cMXAoq4ALQ==}
  /@typescript-eslint/types@8.46.0:
    resolution: {integrity: sha512-bHGGJyVjSE4dJJIO5yyEWt/cHyNwga/zXGJbJJ8TiO01aVREK6gCTu3L+5wrkb1FbDkQ+TKjMNe9R/QQQP9+rA==}
    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
    dev: true
  /@typescript-eslint/typescript-estree@8.44.1(typescript@5.9.2):
    resolution: {integrity: sha512-qnQJ+mVa7szevdEyvfItbO5Vo+GfZ4/GZWWDRRLjrxYPkhM+6zYB2vRYwCsoJLzqFCdZT4mEqyJoyzkunsZ96A==}
  /@typescript-eslint/typescript-estree@8.46.0(typescript@5.9.3):
    resolution: {integrity: sha512-ekDCUfVpAKWJbRfm8T1YRrCot1KFxZn21oV76v5Fj4tr7ELyk84OS+ouvYdcDAwZL89WpEkEj2DKQ+qg//+ucg==}
    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
    peerDependencies:
      typescript: '>=4.8.4 <6.0.0'
    dependencies:
      '@typescript-eslint/project-service': 8.44.1(typescript@5.9.2)
      '@typescript-eslint/tsconfig-utils': 8.44.1(typescript@5.9.2)
      '@typescript-eslint/types': 8.44.1
      '@typescript-eslint/visitor-keys': 8.44.1
      '@typescript-eslint/project-service': 8.46.0(typescript@5.9.3)
      '@typescript-eslint/tsconfig-utils': 8.46.0(typescript@5.9.3)
      '@typescript-eslint/types': 8.46.0
      '@typescript-eslint/visitor-keys': 8.46.0
      debug: 4.4.3
      fast-glob: 3.3.3
      is-glob: 4.0.3
      minimatch: 9.0.5
      semver: 7.7.2
      ts-api-utils: 2.1.0(typescript@5.9.2)
      typescript: 5.9.2
      semver: 7.7.3
      ts-api-utils: 2.1.0(typescript@5.9.3)
      typescript: 5.9.3
    transitivePeerDependencies:
      - supports-color
    dev: true
  /@typescript-eslint/utils@8.44.1(eslint@9.32.0)(typescript@5.9.2):
    resolution: {integrity: sha512-DpX5Fp6edTlocMCwA+mHY8Mra+pPjRZ0TfHkXI8QFelIKcbADQz1LUPNtzOFUriBB2UYqw4Pi9+xV4w9ZczHFg==}
  /@typescript-eslint/utils@8.46.0(eslint@9.32.0)(typescript@5.9.3):
    resolution: {integrity: sha512-nD6yGWPj1xiOm4Gk0k6hLSZz2XkNXhuYmyIrOWcHoPuAhjT9i5bAG+xbWPgFeNR8HPHHtpNKdYUXJl/D3x7f5g==}
    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
    peerDependencies:
      eslint: ^8.57.0 || ^9.0.0
      typescript: '>=4.8.4 <6.0.0'
    dependencies:
      '@eslint-community/eslint-utils': 4.9.0(eslint@9.32.0)
      '@typescript-eslint/scope-manager': 8.44.1
      '@typescript-eslint/types': 8.44.1
      '@typescript-eslint/typescript-estree': 8.44.1(typescript@5.9.2)
      '@typescript-eslint/scope-manager': 8.46.0
      '@typescript-eslint/types': 8.46.0
      '@typescript-eslint/typescript-estree': 8.46.0(typescript@5.9.3)
      eslint: 9.32.0
      typescript: 5.9.2
      typescript: 5.9.3
    transitivePeerDependencies:
      - supports-color
    dev: true
  /@typescript-eslint/visitor-keys@8.44.1:
    resolution: {integrity: sha512-576+u0QD+Jp3tZzvfRfxon0EA2lzcDt3lhUbsC6Lgzy9x2VR4E+JUiNyGHi5T8vk0TV+fpJ5GLG1JsJuWCaKhw==}
  /@typescript-eslint/visitor-keys@8.46.0:
    resolution: {integrity: sha512-FrvMpAK+hTbFy7vH5j1+tMYHMSKLE6RzluFJlkFNKD0p9YsUT75JlBSmr5so3QRzvMwU5/bIEdeNrxm8du8l3Q==}
    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
    dependencies:
      '@typescript-eslint/types': 8.44.1
      '@typescript-eslint/types': 8.46.0
      eslint-visitor-keys: 4.2.1
    dev: true
@@ -4197,11 +4214,11 @@
    resolution: {integrity: sha512-POSEpwj2FJtrDgzSq6nVhAJbnGIYPqtEMTpzQXfeFqPDMidAXjaH/xZUeTdHDbI9Jg700smrRXJtFJrJFXkmiQ==}
    dev: true
  /@unocss/eslint-plugin@66.3.3(eslint@9.32.0)(typescript@5.9.2):
  /@unocss/eslint-plugin@66.3.3(eslint@9.32.0)(typescript@5.9.3):
    resolution: {integrity: sha512-n2Jd22Z5QEAAdXPBzq5i4L8gzYLy7vMF/2N8TE7b8GdIF9kuawyYxTmcjgg+Tp/Sr1HXp/Fcs7Oic2lv5ZvU+A==}
    engines: {node: '>=14'}
    dependencies:
      '@typescript-eslint/utils': 8.44.1(eslint@9.32.0)(typescript@5.9.2)
      '@typescript-eslint/utils': 8.46.0(eslint@9.32.0)(typescript@5.9.3)
      '@unocss/config': 66.3.3
      '@unocss/core': 66.3.3
      '@unocss/rule-utils': 66.3.3
@@ -4405,8 +4422,8 @@
    dependencies:
      '@babel/core': 7.28.4
      '@babel/preset-env': 7.28.3(@babel/core@7.28.4)
      browserslist: 4.26.2
      browserslist-to-esbuild: 2.1.1(browserslist@4.26.2)
      browserslist: 4.26.3
      browserslist-to-esbuild: 2.1.1(browserslist@4.26.3)
      core-js: 3.45.1
      magic-string: 0.30.19
      regenerator-runtime: 0.14.1
@@ -4428,7 +4445,7 @@
      '@babel/plugin-transform-typescript': 7.28.0(@babel/core@7.28.4)
      '@vue/babel-plugin-jsx': 1.5.0(@babel/core@7.28.4)
      vite: 5.2.8(sass@1.79.6)(terser@5.44.0)
      vue: 3.4.21(typescript@5.9.2)
      vue: 3.4.21(typescript@5.9.3)
    transitivePeerDependencies:
      - supports-color
    dev: true
@@ -4441,10 +4458,10 @@
      vue: ^3.2.25
    dependencies:
      vite: 5.2.8(sass@1.79.6)(terser@5.44.0)
      vue: 3.4.21(typescript@5.9.2)
      vue: 3.4.21(typescript@5.9.3)
  /@vitest/eslint-plugin@1.3.13(eslint@9.32.0)(typescript@5.9.2):
    resolution: {integrity: sha512-QfzXd1+lCY3dIqPHOZlagA2bJYoWC5yAU3adv8Gks0rHAL6FpyXKYBiyMCuU6mRrbKUMphGqwDQobinOvYgJig==}
  /@vitest/eslint-plugin@1.3.16(eslint@9.32.0)(typescript@5.9.3):
    resolution: {integrity: sha512-EvXGiZpz3L1G/pmebcmMe61UzqgR8LFwmm+QGgQEHcrTCFkMgl+c0mj2jneo38/CkHhofbK3zc3xafV6/SpzNw==}
    peerDependencies:
      eslint: '>= 8.57.0'
      typescript: '>= 5.0.0'
@@ -4455,10 +4472,10 @@
      vitest:
        optional: true
    dependencies:
      '@typescript-eslint/scope-manager': 8.44.1
      '@typescript-eslint/utils': 8.44.1(eslint@9.32.0)(typescript@5.9.2)
      '@typescript-eslint/scope-manager': 8.46.0
      '@typescript-eslint/utils': 8.46.0(eslint@9.32.0)(typescript@5.9.3)
      eslint: 9.32.0
      typescript: 5.9.2
      typescript: 5.9.3
    transitivePeerDependencies:
      - supports-color
    dev: true
@@ -4596,7 +4613,7 @@
      nanoid: 5.1.6
      pathe: 2.0.3
      vite-hot-client: 2.1.0(vite@5.2.8)
      vue: 3.4.21(typescript@5.9.2)
      vue: 3.4.21(typescript@5.9.3)
    transitivePeerDependencies:
      - vite
    dev: true
@@ -4644,7 +4661,7 @@
    dependencies:
      '@vue/compiler-ssr': 3.4.21
      '@vue/shared': 3.4.21
      vue: 3.4.21(typescript@5.9.2)
      vue: 3.4.21(typescript@5.9.3)
  /@vue/shared@3.4.21:
    resolution: {integrity: sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==}
@@ -4795,8 +4812,8 @@
    engines: {node: '>=14'}
    dev: true
  /ansis@4.1.0:
    resolution: {integrity: sha512-BGcItUBWSMRgOCe+SVZJ+S7yTRG0eGt9cXAHev72yuGcY23hnLA7Bky5L/xLyPINoSN95geovfBkqoTlNZYa7w==}
  /ansis@4.2.0:
    resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==}
    engines: {node: '>=14'}
    dev: true
@@ -4851,8 +4868,8 @@
    peerDependencies:
      postcss: ^8.1.0
    dependencies:
      browserslist: 4.26.2
      caniuse-lite: 1.0.30001745
      browserslist: 4.26.3
      caniuse-lite: 1.0.30001749
      fraction.js: 4.3.7
      normalize-range: 0.1.2
      picocolors: 1.1.1
@@ -4987,8 +5004,8 @@
    resolution: {integrity: sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==}
    engines: {node: '>=6.0.0'}
  /baseline-browser-mapping@2.8.8:
    resolution: {integrity: sha512-be0PUaPsQX/gPWWgFsdD+GFzaoig5PXaUC1xLkQiYdDnANU8sMnHoQd8JhbJQuvTWrWLyeFN9Imb5Qtfvr4RrQ==}
  /baseline-browser-mapping@2.8.14:
    resolution: {integrity: sha512-GM9c0cWWR8Ga7//Ves/9KRgTS8nLausCkP3CGiFLrnwA2CDUluXgaQqvrULoR2Ujrd/mz/lkX87F5BHFsNr5sQ==}
    hasBin: true
  /binary-extensions@2.3.0:
@@ -5067,27 +5084,27 @@
    resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==}
    dev: true
  /browserslist-to-esbuild@2.1.1(browserslist@4.26.2):
  /browserslist-to-esbuild@2.1.1(browserslist@4.26.3):
    resolution: {integrity: sha512-KN+mty6C3e9AN8Z5dI1xeN15ExcRNeISoC3g7V0Kax/MMF9MSoYA2G7lkTTcVUFntiEjkpI0HNgqJC1NjdyNUw==}
    engines: {node: '>=18'}
    hasBin: true
    peerDependencies:
      browserslist: '*'
    dependencies:
      browserslist: 4.26.2
      browserslist: 4.26.3
      meow: 13.2.0
    dev: true
  /browserslist@4.26.2:
    resolution: {integrity: sha512-ECFzp6uFOSB+dcZ5BK/IBaGWssbSYBHvuMeMt3MMFyhI0Z8SqGgEkBLARgpRH3hutIgPVsALcMwbDrJqPxQ65A==}
  /browserslist@4.26.3:
    resolution: {integrity: sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==}
    engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
    hasBin: true
    dependencies:
      baseline-browser-mapping: 2.8.8
      caniuse-lite: 1.0.30001745
      electron-to-chromium: 1.5.226
      node-releases: 2.0.21
      update-browserslist-db: 1.1.3(browserslist@4.26.2)
      baseline-browser-mapping: 2.8.14
      caniuse-lite: 1.0.30001749
      electron-to-chromium: 1.5.233
      node-releases: 2.0.23
      update-browserslist-db: 1.1.3(browserslist@4.26.3)
  /bser@2.1.1:
    resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==}
@@ -5131,10 +5148,10 @@
      chokidar: 4.0.3
      confbox: 0.2.2
      defu: 6.1.4
      dotenv: 17.2.2
      dotenv: 17.2.3
      exsolve: 1.0.7
      giget: 2.0.0
      jiti: 2.6.0
      jiti: 2.6.1
      ohash: 2.0.11
      pathe: 2.0.3
      perfect-debounce: 2.0.0
@@ -5152,14 +5169,15 @@
    engines: {node: '>=8'}
    dev: true
  /cacheable@2.0.2:
    resolution: {integrity: sha512-dWjhLx8RWnPsAWVKwW/wI6OJpQ/hSVb1qS0NUif8TR9vRiSwci7Gey8x04kRU9iAF+Rnbtex5Kjjfg/aB5w8Pg==}
  /cacheable@2.1.0:
    resolution: {integrity: sha512-zzL1BxdnqwD69JRT0dihnawAcLkBMwAH+hZSKjUzeBbPedVhk3qYPjRw9VOMYWwt5xRih5xd8S+3kEdGohZm/g==}
    dependencies:
      '@cacheable/memoize': 2.0.2
      '@cacheable/memory': 2.0.2
      '@cacheable/utils': 2.0.2
      '@cacheable/memoize': 2.0.3
      '@cacheable/memory': 2.0.3
      '@cacheable/utils': 2.1.0
      hookified: 1.12.1
      keyv: 5.5.3
      qified: 0.5.0
    dev: true
  /call-bind-apply-helpers@1.0.2:
@@ -5193,8 +5211,8 @@
    engines: {node: '>=10'}
    dev: true
  /caniuse-lite@1.0.30001745:
    resolution: {integrity: sha512-ywt6i8FzvdgrrrGbr1jZVObnVv6adj+0if2/omv9cmR2oiZs30zL4DIyaptKcbOrBdOIc74QTMoJvSE2QHh5UQ==}
  /caniuse-lite@1.0.30001749:
    resolution: {integrity: sha512-0rw2fJOmLfnzCRbkm8EyHL8SvI2Apu5UbnQuTsJ0ClgrH8hcwFooJ1s5R0EP8o8aVrFu8++ae29Kt9/gZAZp/Q==}
  /ccount@2.0.1:
    resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
@@ -5259,8 +5277,8 @@
    engines: {node: '>=8'}
    dev: true
  /ci-info@4.3.0:
    resolution: {integrity: sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==}
  /ci-info@4.3.1:
    resolution: {integrity: sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==}
    engines: {node: '>=8'}
    dev: true
@@ -5446,7 +5464,7 @@
  /core-js-compat@3.45.1:
    resolution: {integrity: sha512-tqTt5T4PzsMIZ430XGviK4vzYSoeNJ6CXODi6c/voxOT6IZqBht5/EKaSNnYiEjjRYxjVz7DQIsOsY0XNi8PIA==}
    dependencies:
      browserslist: 4.26.2
      browserslist: 4.26.3
    dev: true
  /core-js@3.45.1:
@@ -5461,7 +5479,7 @@
      vary: 1.1.2
    dev: true
  /cosmiconfig@9.0.0(typescript@5.9.2):
  /cosmiconfig@9.0.0(typescript@5.9.3):
    resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==}
    engines: {node: '>=14'}
    peerDependencies:
@@ -5474,7 +5492,7 @@
      import-fresh: 3.3.1
      js-yaml: 4.1.0
      parse-json: 5.2.0
      typescript: 5.9.2
      typescript: 5.9.3
    dev: true
  /cross-env@7.0.3:
@@ -5744,8 +5762,8 @@
      domhandler: 5.0.3
    dev: true
  /dotenv@17.2.2:
    resolution: {integrity: sha512-Sf2LSQP+bOlhKWWyhFsn0UsfdK/kCWRv1iuA2gXAwt3dyNabr6QSj00I2V10pidqz69soatm9ZwZvpQMTIOd5Q==}
  /dotenv@17.2.3:
    resolution: {integrity: sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==}
    engines: {node: '>=12'}
    dev: false
@@ -5770,8 +5788,8 @@
    resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
    dev: true
  /electron-to-chromium@1.5.226:
    resolution: {integrity: sha512-0tS/r72Ze0WUBiDwnqw4X43TxA7gEuZg0kFwLthoCzkshIbNQFjkf6D8xEzBe6tY6Y65fUhZIuNedTugw+11Lw==}
  /electron-to-chromium@1.5.233:
    resolution: {integrity: sha512-iUdTQSf7EFXsDdQsp8MwJz5SVk4APEFqXU/S47OtQ0YLqacSwPXdZ5vRlMX3neb07Cy2vgioNuRnWUXFwuslkg==}
  /emittery@0.8.1:
    resolution: {integrity: sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==}
@@ -5810,7 +5828,7 @@
    engines: {node: '>=10.13.0'}
    dependencies:
      graceful-fs: 4.2.11
      tapable: 2.2.3
      tapable: 2.3.0
    dev: true
  /entities@4.5.0:
@@ -5943,7 +5961,7 @@
      eslint: '>=6.0.0'
    dependencies:
      eslint: 9.32.0
      semver: 7.7.2
      semver: 7.7.3
    dev: true
  /eslint-compat-utils@0.6.5(eslint@9.32.0):
@@ -5953,7 +5971,7 @@
      eslint: '>=6.0.0'
    dependencies:
      eslint: 9.32.0
      semver: 7.7.2
      semver: 7.7.3
    dev: true
  /eslint-config-flat-gitignore@2.1.0(eslint@9.32.0):
@@ -6024,7 +6042,7 @@
      eslint-compat-utils: 0.5.1(eslint@9.32.0)
    dev: true
  /eslint-plugin-import-lite@0.3.0(eslint@9.32.0)(typescript@5.9.2):
  /eslint-plugin-import-lite@0.3.0(eslint@9.32.0)(typescript@5.9.3):
    resolution: {integrity: sha512-dkNBAL6jcoCsXZsQ/Tt2yXmMDoNt5NaBh/U7yvccjiK8cai6Ay+MK77bMykmqQA2bTF6lngaLCDij6MTO3KkvA==}
    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
    peerDependencies:
@@ -6035,9 +6053,9 @@
        optional: true
    dependencies:
      '@eslint-community/eslint-utils': 4.9.0(eslint@9.32.0)
      '@typescript-eslint/types': 8.44.1
      '@typescript-eslint/types': 8.46.0
      eslint: 9.32.0
      typescript: 5.9.2
      typescript: 5.9.3
    dev: true
  /eslint-plugin-jsdoc@51.4.1(eslint@9.32.0):
@@ -6055,19 +6073,20 @@
      espree: 10.4.0
      esquery: 1.6.0
      parse-imports-exports: 0.2.4
      semver: 7.7.2
      semver: 7.7.3
      spdx-expression-parse: 4.0.0
    transitivePeerDependencies:
      - supports-color
    dev: true
  /eslint-plugin-jsonc@2.20.1(eslint@9.32.0):
    resolution: {integrity: sha512-gUzIwQHXx7ZPypUoadcyRi4WbHW2TPixDr0kqQ4miuJBU0emJmyGTlnaT3Og9X2a8R1CDayN9BFSq5weGWbTng==}
  /eslint-plugin-jsonc@2.21.0(eslint@9.32.0):
    resolution: {integrity: sha512-HttlxdNG5ly3YjP1cFMP62R4qKLxJURfBZo2gnMY+yQojZxkLyOpY1H1KRTKBmvQeSG9pIpSGEhDjE17vvYosg==}
    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
    peerDependencies:
      eslint: '>=6.0.0'
    dependencies:
      '@eslint-community/eslint-utils': 4.9.0(eslint@9.32.0)
      diff-sequences: 27.5.1
      eslint: 9.32.0
      eslint-compat-utils: 0.6.5(eslint@9.32.0)
      eslint-json-compat-utils: 0.2.1(eslint@9.32.0)(jsonc-eslint-parser@2.4.1)
@@ -6080,7 +6099,7 @@
      - '@eslint/json'
    dev: true
  /eslint-plugin-n@17.23.1(eslint@9.32.0)(typescript@5.9.2):
  /eslint-plugin-n@17.23.1(eslint@9.32.0)(typescript@5.9.3):
    resolution: {integrity: sha512-68PealUpYoHOBh332JLLD9Sj7OQUDkFpmcfqt8R9sySfFSeuGJjMTJQvCRRB96zO3A/PELRLkPrzsHmzEFQQ5A==}
    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
    peerDependencies:
@@ -6090,12 +6109,12 @@
      enhanced-resolve: 5.18.3
      eslint: 9.32.0
      eslint-plugin-es-x: 7.8.0(eslint@9.32.0)
      get-tsconfig: 4.10.1
      get-tsconfig: 4.12.0
      globals: 15.15.0
      globrex: 0.1.2
      ignore: 5.3.2
      semver: 7.7.2
      ts-declaration-location: 1.0.7(typescript@5.9.2)
      semver: 7.7.3
      ts-declaration-location: 1.0.7(typescript@5.9.3)
    transitivePeerDependencies:
      - typescript
    dev: true
@@ -6105,14 +6124,14 @@
    engines: {node: '>=5.0.0'}
    dev: true
  /eslint-plugin-perfectionist@4.15.0(eslint@9.32.0)(typescript@5.9.2):
    resolution: {integrity: sha512-pC7PgoXyDnEXe14xvRUhBII8A3zRgggKqJFx2a82fjrItDs1BSI7zdZnQtM2yQvcyod6/ujmzb7ejKPx8lZTnw==}
  /eslint-plugin-perfectionist@4.15.1(eslint@9.32.0)(typescript@5.9.3):
    resolution: {integrity: sha512-MHF0cBoOG0XyBf7G0EAFCuJJu4I18wy0zAoT1OHfx2o6EOx1EFTIzr2HGeuZa1kDcusoX0xJ9V7oZmaeFd773Q==}
    engines: {node: ^18.0.0 || >=20.0.0}
    peerDependencies:
      eslint: '>=8.45.0'
    dependencies:
      '@typescript-eslint/types': 8.44.1
      '@typescript-eslint/utils': 8.44.1(eslint@9.32.0)(typescript@5.9.2)
      '@typescript-eslint/types': 8.46.0
      '@typescript-eslint/utils': 8.46.0(eslint@9.32.0)(typescript@5.9.3)
      eslint: 9.32.0
      natural-orderby: 5.0.0
    transitivePeerDependencies:
@@ -6120,8 +6139,8 @@
      - typescript
    dev: true
  /eslint-plugin-pnpm@1.1.2(eslint@9.32.0):
    resolution: {integrity: sha512-WHH09rEiRZ3fjQ8y9LMarCp3uWOTGkbTyC8WCGqyjMVFUwSFjzIeays8ysvqyz7G5vyjr/72Mzq93Kgtp52BOQ==}
  /eslint-plugin-pnpm@1.2.0(eslint@9.32.0):
    resolution: {integrity: sha512-HKIFEmRGVxXvPx/hCpZY0qUGCYoaSYO6EVut4Hf9bckC0qP6F23mBgdoIExRZIWoViHuMznSaDU1FpQmc2xpgw==}
    peerDependencies:
      eslint: ^9.0.0
    dependencies:
@@ -6129,7 +6148,7 @@
      eslint: 9.32.0
      jsonc-eslint-parser: 2.4.1
      pathe: 2.0.3
      pnpm-workspace-yaml: 1.1.2
      pnpm-workspace-yaml: 1.2.0
      tinyglobby: 0.2.15
      yaml-eslint-parser: 1.3.0
    dev: true
@@ -6175,7 +6194,7 @@
      '@eslint-community/eslint-utils': 4.9.0(eslint@9.32.0)
      '@eslint/plugin-kit': 0.3.5
      change-case: 5.4.4
      ci-info: 4.3.0
      ci-info: 4.3.1
      clean-regexp: 1.0.0
      core-js-compat: 3.45.1
      eslint: 9.32.0
@@ -6188,11 +6207,11 @@
      pluralize: 8.0.0
      regexp-tree: 0.1.27
      regjsparser: 0.12.0
      semver: 7.7.2
      semver: 7.7.3
      strip-indent: 4.1.0
    dev: true
  /eslint-plugin-unused-imports@4.2.0(@typescript-eslint/eslint-plugin@8.44.1)(eslint@9.32.0):
  /eslint-plugin-unused-imports@4.2.0(@typescript-eslint/eslint-plugin@8.46.0)(eslint@9.32.0):
    resolution: {integrity: sha512-hLbJ2/wnjKq4kGA9AUaExVFIbNzyxYdVo49QZmKCnhk5pc9wcYRbfgLHvWJ8tnsdcseGhoUAddm9gn/lt+d74w==}
    peerDependencies:
      '@typescript-eslint/eslint-plugin': ^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0
@@ -6201,11 +6220,11 @@
      '@typescript-eslint/eslint-plugin':
        optional: true
    dependencies:
      '@typescript-eslint/eslint-plugin': 8.44.1(@typescript-eslint/parser@8.44.1)(eslint@9.32.0)(typescript@5.9.2)
      '@typescript-eslint/eslint-plugin': 8.46.0(@typescript-eslint/parser@8.46.0)(eslint@9.32.0)(typescript@5.9.3)
      eslint: 9.32.0
    dev: true
  /eslint-plugin-vue@10.5.0(@stylistic/eslint-plugin@5.4.0)(@typescript-eslint/parser@8.44.1)(eslint@9.32.0)(vue-eslint-parser@10.2.0):
  /eslint-plugin-vue@10.5.0(@stylistic/eslint-plugin@5.4.0)(@typescript-eslint/parser@8.46.0)(eslint@9.32.0)(vue-eslint-parser@10.2.0):
    resolution: {integrity: sha512-7BZHsG3kC2vei8F2W8hnfDi9RK+cv5eKPMvzBdrl8Vuc0hR5odGQRli8VVzUkrmUHkxFEm4Iio1r5HOKslO0Aw==}
    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
    peerDependencies:
@@ -6221,23 +6240,24 @@
    dependencies:
      '@eslint-community/eslint-utils': 4.9.0(eslint@9.32.0)
      '@stylistic/eslint-plugin': 5.4.0(eslint@9.32.0)
      '@typescript-eslint/parser': 8.44.1(eslint@9.32.0)(typescript@5.9.2)
      '@typescript-eslint/parser': 8.46.0(eslint@9.32.0)(typescript@5.9.3)
      eslint: 9.32.0
      natural-compare: 1.4.0
      nth-check: 2.1.1
      postcss-selector-parser: 6.1.2
      semver: 7.7.2
      semver: 7.7.3
      vue-eslint-parser: 10.2.0(eslint@9.32.0)
      xml-name-validator: 4.0.0
    dev: true
  /eslint-plugin-yml@1.18.0(eslint@9.32.0):
    resolution: {integrity: sha512-9NtbhHRN2NJa/s3uHchO3qVVZw0vyOIvWlXWGaKCr/6l3Go62wsvJK5byiI6ZoYztDsow4GnS69BZD3GnqH3hA==}
  /eslint-plugin-yml@1.19.0(eslint@9.32.0):
    resolution: {integrity: sha512-S+4GbcCWksFKAvFJtf0vpdiCkZZvDJCV4Zsi9ahmYkYOYcf+LRqqzvzkb/ST7vTYV6sFwXOvawzYyL/jFT2nQA==}
    engines: {node: ^14.17.0 || >=16.0.0}
    peerDependencies:
      eslint: '>=6.0.0'
    dependencies:
      debug: 4.4.3
      diff-sequences: 27.5.1
      escape-string-regexp: 4.0.0
      eslint: 9.32.0
      eslint-compat-utils: 0.6.5(eslint@9.32.0)
@@ -6583,7 +6603,7 @@
  /file-entry-cache@10.1.4:
    resolution: {integrity: sha512-5XRUFc0WTtUbjfGzEwXc42tiGxQHBmtbUG1h9L2apu4SulCGN3Hqm//9D6FAolf8MYNL7f/YlJl9vy08pj5JuA==}
    dependencies:
      flat-cache: 6.1.14
      flat-cache: 6.1.17
    dev: true
  /file-entry-cache@8.0.0:
@@ -6662,10 +6682,10 @@
      keyv: 4.5.4
    dev: true
  /flat-cache@6.1.14:
    resolution: {integrity: sha512-ExZSCSV9e7v/Zt7RzCbX57lY2dnPdxzU/h3UE6WJ6NtEMfwBd8jmi1n4otDEUfz+T/R+zxrFDpICFdjhD3H/zw==}
  /flat-cache@6.1.17:
    resolution: {integrity: sha512-Jzse4YoiUJBVYTwz5Bwl4h/2VQM7e2KK3MVAMlXzX9uamIHAH/TXUlRKU1AQGQOryQhN0EsmufiiF40G057YXA==}
    dependencies:
      cacheable: 2.0.2
      cacheable: 2.1.0
      flatted: 3.3.3
      hookified: 1.12.1
    dev: true
@@ -6801,8 +6821,8 @@
    engines: {node: '>=10'}
    dev: true
  /get-tsconfig@4.10.1:
    resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==}
  /get-tsconfig@4.12.0:
    resolution: {integrity: sha512-LScr2aNr2FbjAjZh2C6X6BxRx1/x+aTDExct/xyq2XKbYOiG5c0aK7pMsSuyc0brz3ibr/lbQiHD9jzt4lccJw==}
    dependencies:
      resolve-pkg-maps: 1.0.0
    dev: true
@@ -7330,7 +7350,7 @@
      '@jest/environment': 27.5.1
      '@jest/test-result': 27.5.1
      '@jest/types': 27.5.1
      '@types/node': 24.5.2
      '@types/node': 24.7.0
      chalk: 4.1.2
      co: 4.6.0
      dedent: 0.7.0
@@ -7455,7 +7475,7 @@
      '@jest/environment': 27.5.1
      '@jest/fake-timers': 27.5.1
      '@jest/types': 27.5.1
      '@types/node': 24.5.2
      '@types/node': 24.7.0
      jest-mock: 27.5.1
      jest-util: 27.5.1
      jsdom: 16.7.0
@@ -7473,7 +7493,7 @@
      '@jest/environment': 27.5.1
      '@jest/fake-timers': 27.5.1
      '@jest/types': 27.5.1
      '@types/node': 24.5.2
      '@types/node': 24.7.0
      jest-mock: 27.5.1
      jest-util: 27.5.1
    dev: true
@@ -7489,7 +7509,7 @@
    dependencies:
      '@jest/types': 27.5.1
      '@types/graceful-fs': 4.1.9
      '@types/node': 24.5.2
      '@types/node': 24.7.0
      anymatch: 3.1.3
      fb-watchman: 2.0.2
      graceful-fs: 4.2.11
@@ -7511,7 +7531,7 @@
      '@jest/source-map': 27.5.1
      '@jest/test-result': 27.5.1
      '@jest/types': 27.5.1
      '@types/node': 24.5.2
      '@types/node': 24.7.0
      chalk: 4.1.2
      co: 4.6.0
      expect: 27.5.1
@@ -7566,7 +7586,7 @@
    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
    dependencies:
      '@jest/types': 27.5.1
      '@types/node': 24.5.2
      '@types/node': 24.7.0
    dev: true
  /jest-pnp-resolver@1.2.3(jest-resolve@27.5.1):
@@ -7622,7 +7642,7 @@
      '@jest/test-result': 27.5.1
      '@jest/transform': 27.5.1
      '@jest/types': 27.5.1
      '@types/node': 24.5.2
      '@types/node': 24.7.0
      chalk: 4.1.2
      emittery: 0.8.1
      graceful-fs: 4.2.11
@@ -7679,7 +7699,7 @@
    resolution: {integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==}
    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
    dependencies:
      '@types/node': 24.5.2
      '@types/node': 24.7.0
      graceful-fs: 4.2.11
    dev: true
@@ -7708,7 +7728,7 @@
      jest-util: 27.5.1
      natural-compare: 1.4.0
      pretty-format: 27.5.1
      semver: 7.7.2
      semver: 7.7.3
    transitivePeerDependencies:
      - supports-color
    dev: true
@@ -7718,7 +7738,7 @@
    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
    dependencies:
      '@jest/types': 27.5.1
      '@types/node': 24.5.2
      '@types/node': 24.7.0
      chalk: 4.1.2
      ci-info: 3.9.0
      graceful-fs: 4.2.11
@@ -7743,7 +7763,7 @@
    dependencies:
      '@jest/test-result': 27.5.1
      '@jest/types': 27.5.1
      '@types/node': 24.5.2
      '@types/node': 24.7.0
      ansi-escapes: 4.3.2
      chalk: 4.1.2
      jest-util: 27.5.1
@@ -7754,7 +7774,7 @@
    resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==}
    engines: {node: '>= 10.13.0'}
    dependencies:
      '@types/node': 24.5.2
      '@types/node': 24.7.0
      merge-stream: 2.0.0
      supports-color: 8.1.1
    dev: true
@@ -7793,8 +7813,8 @@
      - debug
    dev: false
  /jiti@2.6.0:
    resolution: {integrity: sha512-VXe6RjJkBPj0ohtqaO8vSWP3ZhAKo66fKrFNCll4BTcwljPLz03pCbaNKfzGP5MbrCYcbJ7v0nOYYwUzTEIdXQ==}
  /jiti@2.6.1:
    resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==}
    hasBin: true
  /jpeg-js@0.3.7:
@@ -7925,7 +7945,7 @@
      acorn: 8.15.0
      eslint-visitor-keys: 3.4.3
      espree: 9.6.1
      semver: 7.7.2
      semver: 7.7.3
    dev: true
  /jsonc-parser@3.3.1:
@@ -8150,7 +8170,7 @@
    resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==}
    engines: {node: '>=10'}
    dependencies:
      semver: 7.7.2
      semver: 7.7.3
    dev: true
  /makeerror@1.0.12:
@@ -8782,8 +8802,8 @@
    resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==}
    dev: true
  /node-releases@2.0.21:
    resolution: {integrity: sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==}
  /node-releases@2.0.23:
    resolution: {integrity: sha512-cCmFDMSm26S6tQSDpBCg/NR8NENrVPhAJSf+XbxBG4rPFaaonlEoE9wHQmun+cls499TQGSb7ZyPBRlzgKfpeg==}
  /normalize-path@3.0.0:
    resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
@@ -8946,8 +8966,8 @@
    resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
    dev: true
  /package-manager-detector@1.3.0:
    resolution: {integrity: sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ==}
  /package-manager-detector@1.4.0:
    resolution: {integrity: sha512-rRZ+pR1Usc+ND9M2NkmCvE/LYJS+8ORVV9X0KuNSY/gFsp7RBHJM/ADh9LYq4Vvfq6QkKrW6/weuh8SMEtN5gw==}
    dev: true
  /pako@1.0.11:
@@ -9122,16 +9142,16 @@
      pinia:
        optional: true
    dependencies:
      '@nuxt/kit': 3.19.2
      '@nuxt/kit': 3.19.3
      deep-pick-omit: 1.2.1
      defu: 6.1.4
      destr: 2.0.5
      pinia: 2.2.4(typescript@5.9.2)(vue@3.4.21)
      pinia: 2.2.4(typescript@5.9.3)(vue@3.4.21)
    transitivePeerDependencies:
      - magicast
    dev: false
  /pinia@2.2.4(typescript@5.9.2)(vue@3.4.21):
  /pinia@2.2.4(typescript@5.9.3)(vue@3.4.21):
    resolution: {integrity: sha512-K7ZhpMY9iJ9ShTC0cR2+PnxdQRuwVIsXDO/WIEV/RnMC/vmSoKDTKW/exNQYPI+4ij10UjXqdNiEHwn47McANQ==}
    peerDependencies:
      '@vue/composition-api': ^1.4.0
@@ -9144,8 +9164,8 @@
        optional: true
    dependencies:
      '@vue/devtools-api': 6.6.4
      typescript: 5.9.2
      vue: 3.4.21(typescript@5.9.2)
      typescript: 5.9.3
      vue: 3.4.21(typescript@5.9.3)
      vue-demi: 0.14.10(vue@3.4.21)
    dev: false
@@ -9197,8 +9217,8 @@
    engines: {node: '>=4.0.0'}
    dev: false
  /pnpm-workspace-yaml@1.1.2:
    resolution: {integrity: sha512-XgS7j21a+I0dSmUzDUtKp4TAqPfLwJ0kAg0uQ2dveJxFrY14/9ukaD+Mt+4jt67RH4wgRsvNsjNdKbb/7NrMwQ==}
  /pnpm-workspace-yaml@1.2.0:
    resolution: {integrity: sha512-4CnZHmLSaprRnIm2iQ27Zl1cWPRHdX7Ehw7ckRwujoPKCk2QAz4agsA2MbTodg4sgbqYfJ68ULT+Q5A8dU+Mow==}
    dependencies:
      yaml: 2.8.1
    dev: true
@@ -9391,6 +9411,13 @@
  /punycode@2.3.1:
    resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
    engines: {node: '>=6'}
    dev: true
  /qified@0.5.0:
    resolution: {integrity: sha512-Zj6Q/Vc/SQ+Fzc87N90jJUzBzxD7MVQ2ZvGyMmYtnl2u1a07CejAhvtk4ZwASos+SiHKCAIylyGHJKIek75QBw==}
    engines: {node: '>=20'}
    dependencies:
      hookified: 1.12.1
    dev: true
  /qrcode-reader@1.0.4:
@@ -9645,35 +9672,35 @@
      yargs: 17.7.2
    dev: true
  /rollup@4.52.3:
    resolution: {integrity: sha512-RIDh866U8agLgiIcdpB+COKnlCreHJLfIhWC3LVflku5YHfpnsIKigRZeFfMfCc4dVcqNVfQQ5gO/afOck064A==}
  /rollup@4.52.4:
    resolution: {integrity: sha512-CLEVl+MnPAiKh5pl4dEWSyMTpuflgNQiLGhMv8ezD5W/qP8AKvmYpCOKRRNOh7oRKnauBZ4SyeYkMS+1VSyKwQ==}
    engines: {node: '>=18.0.0', npm: '>=8.0.0'}
    hasBin: true
    dependencies:
      '@types/estree': 1.0.8
    optionalDependencies:
      '@rollup/rollup-android-arm-eabi': 4.52.3
      '@rollup/rollup-android-arm64': 4.52.3
      '@rollup/rollup-darwin-arm64': 4.52.3
      '@rollup/rollup-darwin-x64': 4.52.3
      '@rollup/rollup-freebsd-arm64': 4.52.3
      '@rollup/rollup-freebsd-x64': 4.52.3
      '@rollup/rollup-linux-arm-gnueabihf': 4.52.3
      '@rollup/rollup-linux-arm-musleabihf': 4.52.3
      '@rollup/rollup-linux-arm64-gnu': 4.52.3
      '@rollup/rollup-linux-arm64-musl': 4.52.3
      '@rollup/rollup-linux-loong64-gnu': 4.52.3
      '@rollup/rollup-linux-ppc64-gnu': 4.52.3
      '@rollup/rollup-linux-riscv64-gnu': 4.52.3
      '@rollup/rollup-linux-riscv64-musl': 4.52.3
      '@rollup/rollup-linux-s390x-gnu': 4.52.3
      '@rollup/rollup-linux-x64-gnu': 4.52.3
      '@rollup/rollup-linux-x64-musl': 4.52.3
      '@rollup/rollup-openharmony-arm64': 4.52.3
      '@rollup/rollup-win32-arm64-msvc': 4.52.3
      '@rollup/rollup-win32-ia32-msvc': 4.52.3
      '@rollup/rollup-win32-x64-gnu': 4.52.3
      '@rollup/rollup-win32-x64-msvc': 4.52.3
      '@rollup/rollup-android-arm-eabi': 4.52.4
      '@rollup/rollup-android-arm64': 4.52.4
      '@rollup/rollup-darwin-arm64': 4.52.4
      '@rollup/rollup-darwin-x64': 4.52.4
      '@rollup/rollup-freebsd-arm64': 4.52.4
      '@rollup/rollup-freebsd-x64': 4.52.4
      '@rollup/rollup-linux-arm-gnueabihf': 4.52.4
      '@rollup/rollup-linux-arm-musleabihf': 4.52.4
      '@rollup/rollup-linux-arm64-gnu': 4.52.4
      '@rollup/rollup-linux-arm64-musl': 4.52.4
      '@rollup/rollup-linux-loong64-gnu': 4.52.4
      '@rollup/rollup-linux-ppc64-gnu': 4.52.4
      '@rollup/rollup-linux-riscv64-gnu': 4.52.4
      '@rollup/rollup-linux-riscv64-musl': 4.52.4
      '@rollup/rollup-linux-s390x-gnu': 4.52.4
      '@rollup/rollup-linux-x64-gnu': 4.52.4
      '@rollup/rollup-linux-x64-musl': 4.52.4
      '@rollup/rollup-openharmony-arm64': 4.52.4
      '@rollup/rollup-win32-arm64-msvc': 4.52.4
      '@rollup/rollup-win32-ia32-msvc': 4.52.4
      '@rollup/rollup-win32-x64-gnu': 4.52.4
      '@rollup/rollup-win32-x64-msvc': 4.52.4
      fsevents: 2.3.3
  /router@2.2.0:
@@ -9772,8 +9799,8 @@
    resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
    hasBin: true
  /semver@7.7.2:
    resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==}
  /semver@7.7.3:
    resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==}
    engines: {node: '>=10'}
    hasBin: true
@@ -10109,7 +10136,7 @@
      stylelint: '>=14.0.0'
    dependencies:
      postcss-html: 1.8.0
      stylelint: 16.23.0(typescript@5.9.2)
      stylelint: 16.23.0(typescript@5.9.3)
    dev: true
  /stylelint-config-recess-order@6.1.0(stylelint@16.23.0):
@@ -10117,7 +10144,7 @@
    peerDependencies:
      stylelint: '>=16'
    dependencies:
      stylelint: 16.23.0(typescript@5.9.2)
      stylelint: 16.23.0(typescript@5.9.3)
      stylelint-order: 6.0.4(stylelint@16.23.0)
    dev: true
@@ -10129,8 +10156,8 @@
      stylelint: '>=14.0.0'
    dependencies:
      postcss-html: 1.8.0
      semver: 7.7.2
      stylelint: 16.23.0(typescript@5.9.2)
      semver: 7.7.3
      stylelint: 16.23.0(typescript@5.9.3)
      stylelint-config-html: 1.1.0(postcss-html@1.8.0)(stylelint@16.23.0)
      stylelint-config-recommended: 17.0.0(stylelint@16.23.0)
    dev: true
@@ -10141,7 +10168,7 @@
    peerDependencies:
      stylelint: ^16.23.0
    dependencies:
      stylelint: 16.23.0(typescript@5.9.2)
      stylelint: 16.23.0(typescript@5.9.3)
    dev: true
  /stylelint-config-standard-vue@1.0.0(postcss-html@1.8.0)(stylelint@16.23.0):
@@ -10152,7 +10179,7 @@
      stylelint: '>=14.0.0'
    dependencies:
      postcss-html: 1.8.0
      stylelint: 16.23.0(typescript@5.9.2)
      stylelint: 16.23.0(typescript@5.9.3)
      stylelint-config-html: 1.1.0(postcss-html@1.8.0)(stylelint@16.23.0)
      stylelint-config-recommended-vue: 1.6.1(postcss-html@1.8.0)(stylelint@16.23.0)
      stylelint-config-standard: 39.0.0(stylelint@16.23.0)
@@ -10164,7 +10191,7 @@
    peerDependencies:
      stylelint: ^16.23.0
    dependencies:
      stylelint: 16.23.0(typescript@5.9.2)
      stylelint: 16.23.0(typescript@5.9.3)
      stylelint-config-recommended: 17.0.0(stylelint@16.23.0)
    dev: true
@@ -10175,10 +10202,10 @@
    dependencies:
      postcss: 8.5.6
      postcss-sorting: 8.0.2(postcss@8.5.6)
      stylelint: 16.23.0(typescript@5.9.2)
      stylelint: 16.23.0(typescript@5.9.3)
    dev: true
  /stylelint@16.23.0(typescript@5.9.2):
  /stylelint@16.23.0(typescript@5.9.3):
    resolution: {integrity: sha512-69T5aS2LUY306ekt1Q1oaSPwz/jaG9HjyMix3UMrai1iEbuOafBe2Dh8xlyczrxFAy89qcKyZWWtc42XLx3Bbw==}
    engines: {node: '>=18.12.0'}
    hasBin: true
@@ -10190,7 +10217,7 @@
      '@dual-bundle/import-meta-resolve': 4.2.1
      balanced-match: 2.0.0
      colord: 2.9.3
      cosmiconfig: 9.0.0(typescript@5.9.2)
      cosmiconfig: 9.0.0(typescript@5.9.3)
      css-functions-list: 3.2.3
      css-tree: 3.1.0
      debug: 4.4.3
@@ -10297,8 +10324,8 @@
      strip-ansi: 6.0.1
    dev: true
  /tapable@2.2.3:
    resolution: {integrity: sha512-ZL6DDuAlRlLGghwcfmSn9sK3Hr6ArtyudlSAiCqQ6IfE+b+HHbydbYDIG15IfS5do+7XQQBdBiubF/cV2dnDzg==}
  /tapable@2.3.0:
    resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==}
    engines: {node: '>=6'}
  /terminal-link@2.1.1:
@@ -10398,22 +10425,22 @@
      punycode: 2.3.1
    dev: true
  /ts-api-utils@2.1.0(typescript@5.9.2):
  /ts-api-utils@2.1.0(typescript@5.9.3):
    resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==}
    engines: {node: '>=18.12'}
    peerDependencies:
      typescript: '>=4.8.4'
    dependencies:
      typescript: 5.9.2
      typescript: 5.9.3
    dev: true
  /ts-declaration-location@1.0.7(typescript@5.9.2):
  /ts-declaration-location@1.0.7(typescript@5.9.3):
    resolution: {integrity: sha512-EDyGAwH1gO0Ausm9gV6T2nUvBgXT5kGoCMJPllOaooZ+4VvJiKBdZE7wK18N1deEowhcUptS+5GXZK8U/fvpwA==}
    peerDependencies:
      typescript: '>=4.0.0'
    dependencies:
      picomatch: 4.0.3
      typescript: 5.9.2
      typescript: 5.9.3
    dev: true
  /type-check@0.4.0:
@@ -10456,8 +10483,8 @@
      is-typedarray: 1.0.0
    dev: true
  /typescript@5.9.2:
    resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==}
  /typescript@5.9.3:
    resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
    engines: {node: '>=14.17'}
    hasBin: true
@@ -10469,7 +10496,7 @@
    dependencies:
      '@antfu/utils': 8.1.1
      defu: 6.1.4
      jiti: 2.6.0
      jiti: 2.6.1
    dev: true
  /unconfig@7.3.3:
@@ -10477,7 +10504,7 @@
    dependencies:
      '@quansync/fs': 0.1.5
      defu: 6.1.4
      jiti: 2.6.0
      jiti: 2.6.1
      quansync: 0.2.11
    dev: true
@@ -10490,8 +10517,8 @@
      unplugin: 2.3.10
    dev: false
  /undici-types@7.12.0:
    resolution: {integrity: sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ==}
  /undici-types@7.14.0:
    resolution: {integrity: sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==}
    dev: true
  /unicode-canonical-property-names-ecmascript@2.0.1:
@@ -10556,8 +10583,8 @@
      unplugin-utils: 0.2.5
    dev: true
  /unimport@5.4.0:
    resolution: {integrity: sha512-g/OLFZR2mEfqbC6NC9b2225eCJGvufxq34mj6kM3OmI5gdSL0qyqtnv+9qmsGpAmnzSl6x0IWZj4W+8j2hLkMA==}
  /unimport@5.4.1:
    resolution: {integrity: sha512-wMZ2JKUCleCK2zfRHeWcbrUHKXOC3SVBYkyn/wTGzh0THX6sT4hSjuKXxKANN4/WMbT6ZPM4JzcDcnhD2x9Bpg==}
    engines: {node: '>=18.12.0'}
    dependencies:
      acorn: 8.15.0
@@ -10573,7 +10600,7 @@
      strip-literal: 3.1.0
      tinyglobby: 0.2.15
      unplugin: 2.3.10
      unplugin-utils: 0.3.0
      unplugin-utils: 0.3.1
    dev: false
  /unist-util-is@6.0.0:
@@ -10770,8 +10797,8 @@
      pathe: 2.0.3
      picomatch: 4.0.3
  /unplugin-utils@0.3.0:
    resolution: {integrity: sha512-JLoggz+PvLVMJo+jZt97hdIIIZ2yTzGgft9e9q8iMrC4ewufl62ekeW7mixBghonn2gVb/ICjyvlmOCUBnJLQg==}
  /unplugin-utils@0.3.1:
    resolution: {integrity: sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog==}
    engines: {node: '>=20.19.0'}
    dependencies:
      pathe: 2.0.3
@@ -10799,7 +10826,7 @@
      tinyglobby: 0.2.15
      unplugin: 2.3.10
      unplugin-utils: 0.2.5
      vue: 3.4.21(typescript@5.9.2)
      vue: 3.4.21(typescript@5.9.3)
    transitivePeerDependencies:
      - supports-color
    dev: true
@@ -10849,18 +10876,18 @@
    dependencies:
      citty: 0.1.6
      defu: 6.1.4
      jiti: 2.6.0
      jiti: 2.6.1
      knitwork: 1.2.0
      scule: 1.3.0
    dev: false
  /update-browserslist-db@1.1.3(browserslist@4.26.2):
  /update-browserslist-db@1.1.3(browserslist@4.26.3):
    resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
    hasBin: true
    peerDependencies:
      browserslist: '>= 4.21.0'
    dependencies:
      browserslist: 4.26.2
      browserslist: 4.26.3
      escalade: 3.2.0
      picocolors: 1.1.1
@@ -10962,8 +10989,8 @@
    peerDependencies:
      vite: ^3.1.0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0
    dependencies:
      '@antfu/utils': 9.2.1
      '@modelcontextprotocol/sdk': 1.18.2
      '@antfu/utils': 9.3.0
      '@modelcontextprotocol/sdk': 1.19.1
      '@vue/devtools-core': 7.7.7(vite@5.2.8)(vue@3.4.21)
      '@vue/devtools-kit': 7.7.7
      ansis: 3.17.0
@@ -11011,7 +11038,7 @@
    dependencies:
      esbuild: 0.20.2
      postcss: 8.5.6
      rollup: 4.52.3
      rollup: 4.52.4
      sass: 1.79.6
      terser: 5.44.0
    optionalDependencies:
@@ -11029,7 +11056,7 @@
      '@vue/composition-api':
        optional: true
    dependencies:
      vue: 3.4.21(typescript@5.9.2)
      vue: 3.4.21(typescript@5.9.3)
    dev: false
  /vue-eslint-parser@10.2.0(eslint@9.32.0):
@@ -11044,7 +11071,7 @@
      eslint-visitor-keys: 4.2.1
      espree: 10.4.0
      esquery: 1.6.0
      semver: 7.7.2
      semver: 7.7.3
    transitivePeerDependencies:
      - supports-color
    dev: true
@@ -11054,7 +11081,7 @@
    peerDependencies:
      vue: ^3.4.37
    dependencies:
      vue: 3.4.21(typescript@5.9.2)
      vue: 3.4.21(typescript@5.9.3)
    dev: true
  /vue-i18n@9.1.9(vue@3.4.21):
@@ -11067,7 +11094,7 @@
      '@intlify/shared': 9.1.9
      '@intlify/vue-devtools': 9.1.9
      '@vue/devtools-api': 6.6.4
      vue: 3.4.21(typescript@5.9.2)
      vue: 3.4.21(typescript@5.9.3)
    dev: false
  /vue-router@4.5.1(vue@3.4.21):
@@ -11076,10 +11103,10 @@
      vue: ^3.2.0
    dependencies:
      '@vue/devtools-api': 6.6.4
      vue: 3.4.21(typescript@5.9.2)
      vue: 3.4.21(typescript@5.9.3)
    dev: false
  /vue@3.4.21(typescript@5.9.2):
  /vue@3.4.21(typescript@5.9.3):
    resolution: {integrity: sha512-5hjyV/jLEIKD/jYl4cavMcnzKwjMKohureP8ejn3hhEjwhWIhWeuzL2kJAjzl/WyVsgPY56Sy4Z40C3lVshxXA==}
    peerDependencies:
      typescript: '*'
@@ -11092,7 +11119,7 @@
      '@vue/runtime-dom': 3.4.21
      '@vue/server-renderer': 3.4.21(vue@3.4.21)
      '@vue/shared': 3.4.21
      typescript: 5.9.2
      typescript: 5.9.3
  /w3c-hr-time@1.0.2:
    resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==}
src/api/work/index.js
@@ -38,7 +38,10 @@
  if (file) {
    formData.append('file', file)
  }
   for (let [key, value] of formData.entries()) {
      console.log(key, value)
    }
console.log('formData',formData)
  return request({
    url: '/drone-device-core/jobEvent/flowEvent',
    method: 'post',
@@ -47,4 +50,13 @@
      'Content-Type': 'multipart/form-data', // 设置为表单数据格式
    },
  })
}
}
// 新增接口:获取工单详细信息
export const getTicketInfo = (id) => {
  return request({
    url: '/drone-device-core/jobEvent/getTicketInfo',
    method: 'get',
    params: { id }, // 使用工单 ID 查询
  })
}
src/pages.json
@@ -31,6 +31,13 @@
      }
    },
    {
      "path": "pages/droneConsole/index",
      "style": {
        "navigationBarTitleText": "控制台",
        "navigationStyle": "custom"
      }
    },
    {
      "path": "pages/login/index",
      "style": {
        "navigationBarTitleText": "登录页"
@@ -121,6 +128,13 @@
        "style": {
          "navigationBarTitleText": "修改密码"
        }
      },
      {
        "path": "browser/index",
        "style": {
          "navigationBarTitleText": "地图"
        }
      }
    ]
  }],
src/pages/droneConsole/index.vue
New file
@@ -0,0 +1,45 @@
<template>
  <view class="page-wrap">
    <web-view
      ref="sWebViewRef"
      :src='`${viewUrl}?token=${token}&wayLineJodInfoId=${active.id}`'
      @message="onPostMessage"
      @onPostMessage="onPostMessage"
    />
  </view>
</template>
<script setup>
import {onHide, onShow} from "@dcloudio/uni-app";
import {useUserStore} from "@/store/index.js";
const active = defineModel('active')
const sWebViewRef = ref(null)
const viewUrl = 'http://192.168.1.15:5173/drone-app-web-view/#/appTaskDetails'
const userStore = useUserStore()
const token = computed(() => userStore?.userInfo?.access_token)
function onPostMessage(event) {
  if (event.detail.data[0].type === 'back') {
    active.value = null
  }
}
onShow(() => {
  // #ifdef APP-PLUS
  plus.screen.lockOrientation("landscape-primary");
  // #endif
});
onHide(() => {
  // #ifdef APP-PLUS
  plus.screen.lockOrientation("portrait-primary");
  // #endif
});
</script>
<style scoped lang="scss">
</style>
src/pages/inspectionTask/TaskDetails/TaskDetails.vue
@@ -2,7 +2,7 @@
  <view class="page-wrap">
    <web-view
      ref="sWebViewRef"
      src='http://localhost:5173/drone-app-web-view/#/appTaskDetails'
      :src='`${viewUrl}?token=${token}&wayLineJodInfoId=${active.id}`'
      @message="onPostMessage"
      @onPostMessage="onPostMessage"
    />
@@ -10,19 +10,24 @@
</template>
<script setup>
import {onLoad} from "@dcloudio/uni-app";
import {useUserStore} from "@/store/index.js";
const active = defineModel('active')
const sWebViewRef = ref(null)
const viewUrl = 'http://192.168.1.15:5173/drone-app-web-view/#/appTaskDetails'
const userStore = useUserStore()
const token = computed(() => userStore?.userInfo?.access_token)
function onPostMessage(event) {
  if (event.detail.data[0].type === 'back'){
  if (event.detail.data[0].type === 'back') {
    active.value = null
  }
}
onLoad(()=>{
  window.addEventListener('message', function(e) {
    if (e.data.data.type === 'back'){
onLoad(() => {
  window.addEventListener('message', function (e) {
    if (e.data.data.type === 'back') {
      active.value = null
    }
  });
@@ -31,5 +36,7 @@
</script>
<style scoped lang="scss">
.page-wrap {
  font-size: 20px;
}
</style>
src/pages/login/index.vue
@@ -22,8 +22,8 @@
} from "@/router";
const userStore = useUserStore();
const loginForm = ref({
  username: "shuishen",
  password: "Dashabi...."
  username: "zhx",
  password: "123456"
})
const inputStyle = computed(() => {
  const style = {};
@@ -58,7 +58,7 @@
  ).then(res => {
    userStore.setUserInfo(res.data)
    uni.switchTab({
      url: '/'
      url: '/pages/user/index'
    })
  })
}
src/pages/map/drag.vue
New file
@@ -0,0 +1,200 @@
<template>
  <view class="panel-container" :style="{
      transform: `translateY(${translateY}px)`,
      transition: isDragging ? 'none' : 'transform 0.3s ease',
    }" @touchstart="onTouchStart" @touchmove="onTouchMove" @touchend="onTouchEnd">
    <!-- 顶部拖拽提示条 -->
    <view class="drag-bar"></view>
    <!-- 搜索框(带毛玻璃) -->
    <view class="search-box" :style="searchBoxStyle">
      <slot name="searchBox"></slot>
    </view>
    <!-- 内容区 -->
    <scroll-view scroll-y class="panel-content">
      <view class="dummy-content">
        <text>这里可以放搜索结果、推荐地点等内容</text>
      </view>
    </scroll-view>
  </view>
</template>
<script setup>
  import {
    ref,
    computed,
    onMounted,
    watch
  } from 'vue'
  const props = defineProps({
    isSelectInput: {
      type: Boolean,
      default: false
    },
    searchVal: {
      type: String,
      default: ''
    },
  })
  // 获取屏幕高度
  let screenHeight = 0
  // 拖拽状态
  const startY = ref(0)
  const currentY = ref(0)
  const translateY = ref(0)
  const isDragging = ref(false)
  const initialPosition = ref(0.8)
  const oneSlidePosition = ref(0.6)
  const twoSlidePosition = ref(0.1)
  // 毛玻璃效果
  const searchBoxStyle = computed(() => {
    return translateY.value <= screenHeight * oneSlidePosition.value ?
      {
        backdropFilter: 'blur(10px)',
        background: 'rgba(255, 255, 255, 0.7)',
      } :
      {
        background: '#fff',
      }
  })
  watch([
    () => props.isSelectInput,
    () => props.searchVal,
  ], ([newIsSelectInput, newSearchVal]) => {
    if (newIsSelectInput) {
       translateY.value = screenHeight * twoSlidePosition.value
    }
    if (!newIsSelectInput && !newSearchVal) {
      translateY.value = screenHeight * initialPosition.value
    }
  })
  // 获取屏幕高度
  onMounted(() => {
    const info = uni.getSystemInfoSync()
    screenHeight = info.windowHeight
    // #ifdef APP-PLUS
    initialPosition.value = 0.8
    // #endif
    // #ifdef H5
    initialPosition.value = 0.95
    if (screenHeight < 500) {
      initialPosition.value = 0.86
    }
    if (screenHeight > 575) {
      initialPosition.value = 0.85
    }
    if (screenHeight > 642) {
      initialPosition.value = 0.865
    }
    // #endif
    translateY.value = screenHeight * initialPosition.value
  })
  // 拖拽开始
  const onTouchStart = (e) => {
    // 只在拖拽时,阻止页面滚动
    startY.value = e.touches[0].clientY
    currentY.value = translateY.value
    isDragging.value = true
  }
  // 拖拽移动
  const onTouchMove = (e) => {
    // 只在拖拽时,阻止页面滚动
    if (isDragging.value) {
      e.preventDefault() // 阻止滚动行为
      e.stopPropagation() // 阻止事件冒泡
    }
    const delta = e.touches[0].clientY - startY.value
    let nextY = currentY.value + delta
    // 限制拖拽范围 [0, 90% 屏幕高度]
    nextY = Math.min(screenHeight * (1 - twoSlidePosition.value), Math.max(0, nextY))
    translateY.value = nextY
  }
  // 拖拽结束后自动吸附
  const onTouchEnd = () => {
    isDragging.value = false
    const percentFromTop = 100 - (translateY.value / screenHeight) * 100
    if (percentFromTop < 20) translateY.value = screenHeight * initialPosition.value
    else if (percentFromTop < 40) translateY.value = screenHeight * oneSlidePosition.value
    else if (percentFromTop < 75) translateY.value = screenHeight * oneSlidePosition.value
    else if (percentFromTop < 90) translateY.value = screenHeight * twoSlidePosition.value
    else translateY.value = screenHeight * twoSlidePosition.value
  }
</script>
<style scoped>
  .panel-container {
    position: fixed;
    bottom: 0;
    left: 0;
    width: 100%;
    height: 90vh;
    background: #fff;
    border-top-left-radius: 20rpx;
    border-top-right-radius: 20rpx;
    box-shadow: 0 -4rpx 12rpx rgba(0, 0, 0, 0.15);
    display: flex;
    flex-direction: column;
    z-index: 997;
    touch-action: none;
    /* 禁止默认的滚动行为 */
  }
  .drag-bar {
    width: 80rpx;
    height: 8rpx;
    background: #ccc;
    border-radius: 4rpx;
    margin: 16rpx auto;
  }
  .search-box {
    padding: 0 24rpx;
    margin-bottom: 12rpx;
    border-radius: 40rpx;
    transition: backdrop-filter 0.3s ease, background 0.3s ease;
  }
  .search-input {
    width: 100%;
    height: 80rpx;
    border-radius: 40rpx;
    background: #f2f2f2;
    padding: 0 24rpx;
    font-size: 28rpx;
    border: none;
    outline: none;
  }
  .panel-content {
    flex: 1;
    padding: 20rpx;
  }
  .dummy-content {
    text-align: center;
    color: #999;
    margin-top: 100rpx;
  }
</style>
src/pages/map/index.vue
@@ -5,6 +5,10 @@
    <view id="map" class="map" :prop="setSelectMapLayerKey" :location="location" :change:prop="leaflet.initLayer"
      :change:location="leaflet.setView"></view>
    <view class="weather-box">
      <up-icon customPrefix="xyicon" name="tuceng" size="24" color="#000"></up-icon>
    </view>
    <view class="layer-btn" @click="show = true">
      <up-icon customPrefix="xyicon" name="tuceng" size="24" color="#000"></up-icon>
    </view>
@@ -13,19 +17,46 @@
      <up-icon customPrefix="xyicon" name="dingwei" size="24" color="#000"></up-icon>
    </view>
    <u-input placeholder="搜索" border="surround" v-model="value" @change="change" color="#fff">
      <template #prefix>
        <view class="search-left-box">
          <u-icon color="#fff" name="arrow-left"></u-icon> 地址
        </view>
      </template>
    <drag-ele :isSelectInput="isSelectInput" :searchVal="searchVal">
      <template #searchBox>
        <u-input placeholder="搜索" border="surround" v-model="searchVal" @change="change" color="#fff"
         @focus="isSelectInput = true"
         @blur="isSelectInput = false">
          <template #prefix>
            <view class="search-left-box">
              <u-icon color="#fff" name="arrow-left"></u-icon>
      <template #suffix>
        <view class="search-right-box">
          <u-icon color="#fff" name="scan"></u-icon>
              <up-tooltip ref="addressTooltip" text="text5" color="#fff" bgColor="#333" popupBgColor="#333"
                triggerMode="click" :forcePosition="{right: '0px', top: '0px'}" direction="top">
                <template #trigger>
                  <up-button iconColor="transparent" color="transparent" :hairline="false" size="mini" :stop="false"
                    type="text">{{ searchModeTextType === 0 ? '地址' : '机巢'}}</up-button>
                </template>
                <template #content>
                  <view style="padding: 8rpx 0; text-align: right;">
                    <!-- 按钮1 -->
                    <up-button type="text" size="mini" @click="selectAddress"
                      style="margin: 4rpx 0; width: 100%; text-align: center;">{{ searchModeTextType === 0 ? '机巢' : '地址'}}</up-button>
                  </view>
                </template>
              </up-tooltip>
            </view>
          </template>
          <template #suffix>
            <view class="search-right-box">
              <u-icon color="#fff" name="scan" @click="scanCode"></u-icon>
            </view>
          </template>
        </u-input>
      </template>
      <template #content>
        <view class="search-content">
        </view>
      </template>
    </u-input>
    </drag-ele>
    <up-popup v-model:show="show">
      <view class="popup-container">
@@ -50,6 +81,7 @@
</template>
<script setup>
  import DragEle from './drag.vue'
  import {
    useMapStore
  } from "@/store/index.js"
@@ -68,9 +100,11 @@
    }
  ]
  const addressTooltip = ref(null)
  const show = ref(false)
  const isSelectInput = ref(false)
  const value = ref('')
  const searchVal = ref('')
  const change = () => {
@@ -94,13 +128,48 @@
        console.log('定位失败:', err);
      }
    });
  }
  const searchModeTextType = ref(0)
  const selectAddress = () => {
    searchModeTextType.value = searchModeTextType.value === 0 ? 1 : 0
    addressTooltip.value.showTooltip = false
  }
  const scanCode = () => {
    // 只允许通过相机扫码
    uni.scanCode({
      onlyFromCamera: true,
      success: function(res) {
        console.log('条码类型:' + res.scanType);
        console.log('条码内容:' + res.result);
        // 获取扫码结果
        let url = res.result;
        // 跳转到B页面,并传递URL参数
        uni.navigateTo({
          url: '/subPackages/browser/index?url=' + encodeURIComponent(url)
        });
      },
      fail: function(err) {
        console.log('扫码失败:', err);
        uni.showToast({
          title: '扫码失败',
          icon: 'none'
        });
      }
    });
  }
  const createWorkOrder = (id) => {
    console.log(`创建工单:标注 ID 为 ${id}`);
    // 在这里添加工单创建逻辑
  }
  onShow(() => {
    // #ifdef APP-PLUS
    // plus.screen.lockOrientation("landscape-primary");
    // #endif
  });
@@ -117,28 +186,28 @@
  var basemapLayer0 = L.tileLayer(
    'http://t1.tianditu.com/vec_c/wmts?layer=vec&style=default&tilematrixset=c&Service=WMTS&Request=GetTile&Version=1.0.0&Format=tiles&TileMatrix={z}&TileCol={x}&TileRow={y}&tk=e110584a27d506da2740edca951683f4', {
      maxZoom: 18,
      maxZoom: 20,
      minZoom: 1,
      tileSize: 256,
      zoomOffset: 1
    });
  var basemapLayer1 = L.tileLayer(
    'http://t1.tianditu.com/cva_c/wmts?layer=cva&style=default&tilematrixset=c&Service=WMTS&Request=GetTile&Version=1.0.0&Format=tiles&TileMatrix={z}&TileCol={x}&TileRow={y}&tk=e110584a27d506da2740edca951683f4', {
      maxZoom: 18,
      maxZoom: 20,
      minZoom: 1,
      tileSize: 256,
      zoomOffset: 1
    });
  var basemapLayer2 = L.tileLayer(
    'http://t1.tianditu.com/img_c/wmts?layer=img&style=default&tilematrixset=c&Service=WMTS&Request=GetTile&Version=1.0.0&Format=tiles&TileMatrix={z}&TileCol={x}&TileRow={y}&tk=e110584a27d506da2740edca951683f4', {
      maxZoom: 18,
      maxZoom: 20,
      minZoom: 1,
      tileSize: 256,
      zoomOffset: 1
    });
  var basemapLayer3 = L.tileLayer(
    'http://t1.tianditu.com/cia_c/wmts?layer=cia&style=default&tilematrixset=c&Service=WMTS&Request=GetTile&Version=1.0.0&Format=tiles&TileMatrix={z}&TileCol={x}&TileRow={y}&tk=e110584a27d506da2740edca951683f4', {
      maxZoom: 18,
      maxZoom: 20,
      minZoom: 1,
      tileSize: 256,
      zoomOffset: 1
@@ -165,7 +234,7 @@
  export default {
    data() {
      return {
        setSelectMapLayerKey: 1
        curSelectMapLayerKey: 1
      }
    },
@@ -175,6 +244,8 @@
    mounted() {
      this.initMap()
      this.initDronePositions()
    },
    methods: {
@@ -192,15 +263,14 @@
      },
      initLayer(value) {
        this.initMap()
        this.$nextTick(() => {
          map.removeLayer(layers.find(i => i.key === this.setSelectMapLayerKey).map);
          map.removeLayer(layers.find(i => i.key === this.curSelectMapLayerKey).map);
          map.addLayer(layers.find(i => i.key === value).map);
          this.setSelectMapLayerKey = value
          this.curSelectMapLayerKey = value
        })
      },
@@ -214,6 +284,97 @@
            animate: false // 使用动画过渡
          });
        })
      },
      // 初始化无人机位置
      initDronePositions() {
        // 假设你有一个包含多个标注位置的数组
        const markersData = [{
            lat: 25.992338,
            lng: 114.823254,
            id: 1
          },
          {
            lat: 26,
            lng: 114.823255,
            id: 2
          },
          {
            lat: 25.992338,
            lng: 115,
            id: 3
          },
        ];
        // 创建一个自定义的图片图标
        const customIcon = L.icon({
          iconUrl: './static/images/logo.png', // 替换为你的图片路径
          iconSize: [32, 32], // 图标大小
          iconAnchor: [16, 16], // 图标的锚点(设置图片的底部中心)
        });
        // 批量添加标注
        const markersLayer = L.layerGroup().addTo(map); // 创建一个标注层,便于管理和移除
        markersData.forEach((data) => {
          const marker = L.marker([data.lat, data.lng], {
            icon: customIcon
          }).addTo(markersLayer);
          marker.on('click', () => {
            marker.unbindPopup();
            const popupContent = `
              <view>
                <button data-type="addWork">创建工单</button>
              </view>
             `;
            marker.bindPopup(popupContent).openPopup();
            marker.getPopup()._contentNode.addEventListener("click", e => {
              if (e.target.dataset.type === 'addWork') {
                // 跳转到tabBar页面
                uni.switchTab({
                  url: '/pages/work/index', // 需要跳转的tabBar页面的路径
                });
                marker.closePopup();
                marker.unbindPopup();
              }
            })
          });
          // 使用 marker 的 id 作为标识符
          marker.options.id = data.id;
        });
        this.buildCirclePolygon(25.992338, 114.823254, 'rgba(255, 0, 0, 1)').addTo(map)
      },
      buildCirclePolygon(lat, lng, color) {
        var radius = 5000 / 100460; // 5000米转为大约的纬度差(纬度上的1度大约是111km)
        var parts = [];
        for (var i = 0; i < 360; i++) {
          var radians = (i + 1) * Math.PI / 180;
          // 计算新的点
          var circlePoint = [
            Math.cos(radians) * radius + lat, // 纬度偏移
            Math.sin(radians) * radius + lng // 经度偏移,需考虑纬度的影响
          ];
          parts[i] = circlePoint;
        }
        // 生成多边形,近似圆形
        var polygon = L.polygon(parts, {
          color: color
        });
        return polygon;
      }
    }
  }
@@ -226,12 +387,9 @@
    height: 100%;
    .u-input {
      position: absolute;
      left: 16rpx;
      bottom: 16rpx;
      margin-left: 16rpx;
      width: calc(100% - 32rpx);
      height: 64rpx;
      z-index: 999;
      box-sizing: border-box;
      background: rgba(0, 0, 0, .4);
@@ -246,6 +404,27 @@
      }
    }
    .search-content {
      width: 100%;
      height: 360rpx;
      background: #fff;
      box-shadow: 0 -80rpx 80rpx -80rpx #fff;
    }
    .weather-box {
      display: flex;
      justify-content: center;
      align-items: center;
      position: absolute;
      top: 16rpx;
      left: 16rpx;
      width: 64rpx;
      height: 64rpx;
      background: #fff;
      z-index: 996;
      border-radius: 8rpx;
    }
    .location-btn,
    .layer-btn {
      display: flex;
@@ -256,16 +435,16 @@
      width: 64rpx;
      height: 64rpx;
      background: #fff;
      z-index: 999;
      z-index: 996;
      border-radius: 8rpx;
    }
    .layer-btn {
      bottom: 176rpx;
      bottom: 236rpx;
    }
    .location-btn {
      bottom: 96rpx;
      bottom: 156rpx;
    }
  }
src/subPackages/browser/index.vue
New file
@@ -0,0 +1,39 @@
<!-- 跳转第三方应用 -->
<template>
  <view class="content">
    <!-- WebView组件 -->
    <web-view :src="webViewUrl"></web-view>
  </view>
</template>
<script>
export default {
  data() {
    return {
      webViewUrl: '' // WebView要加载的URL
    };
  },
  onLoad(options) {
    // 从导航参数中获取URL
    if (options.url) {
      this.webViewUrl = decodeURIComponent(options.url);
    } else {
      uni.showToast({
        title: '未获取到URL',
        icon: 'none'
      });
      // 如果没有URL,可以返回上一页或做其他处理
      setTimeout(() => {
        uni.navigateBack();
      }, 1500);
    }
  }
};
</script>
<style>
.content {
  width: 100%;
  height: 100%;
}
</style>
src/subPackages/workDetail/index.vue
@@ -15,34 +15,32 @@
        </div>
        <!-- 步骤条 -->
        <div class="stepContainer">
          <up-steps :current="currentStep" direction="column">
              <up-steps-item
                v-for="(step, index) in stepTitles"
                :key="index"
              >
                <template #title>
                  <div class="horizontal-step">
                    <span class="step-title">{{ step.title }}</span>
                    <div class="step-desc" v-if="stepResponse[index]">
                      <span>{{ stepResponse[index].name || '' }}</span>
                      <span>{{ stepResponse[index].create_time || '' }}</span>
                    </div>
                  </div>
                </template>
              </up-steps-item>
            </up-steps>
            <up-steps :current="currentStep" direction="column">
                <up-steps-item v-for="(step, index) in stepTitles" :key="index">
                    <template #title>
                        <div class="horizontal-step">
                            <span class="step-title">{{ step.title }}</span>
                            <div class="step-desc" v-if="stepResponse[index]">
                                <span>{{ stepResponse[index].name || '' }}</span>
                                <span>{{ stepResponse[index].create_time || '' }}</span>
                            </div>
                        </div>
                    </template>
                </up-steps-item>
            </up-steps>
        </div>
        <!-- 工单内容 -->
        <div class="workOrderContent">
            <div class="workOrderTitle">工单内容</div>
            <div class="workOrderContainer">
                <div>工单名称:{{workDetailData.event_name}}</div>
                <div>工单类型:{{workDetailData.type}}</div>
                <div>关联任务:{{workDetailData.job_name}}</div>
                <div>工单创建人:{{workDetailData.event_num?.slice(0, 2) === 'AI' ? 'AI 小飞':workDetailData.creator}}</div>
                <div>事件地址:{{workDetailData.address}}</div>
                <div>关联算法:{{workDetailData.ai_types}}</div>
                <div >关联算法:{{workDetailData.ai_types}}</div>
                <div>发起部门:{{workDetailData.dept_name}}</div>
                <div>发起任务时间:{{workDetailData.create_time}}</div>
                <div>工单内容:{{workDetailData.remark}}</div>
@@ -54,11 +52,11 @@
                上一页
            </div>
            <div class="btngroups" v-if="workDetailData.status===2">
                <up-button type="primary" text="通过"  @click="approveTicket"></up-button>
                <up-button type="primary" text="通过" @click="approveTicket"></up-button>
                <up-button type="error" text="不通过" @click="rejectTicket"></up-button>
            </div>
            <div class="btngroups" v-else-if="workDetailData.status===0">
                <up-button type="primary" text="受理"  @click="approveAndDispatch"></up-button>
                <up-button type="primary" text="受理" @click="approveAndDispatch"></up-button>
                <up-button type="error" text="不受理" @click="rejectTicket"></up-button>
            </div>
            <div class="btngroups" v-else-if="workDetailData.status===3">
@@ -66,7 +64,7 @@
                <up-button type="error" text="取消"></up-button>
            </div>
            <div class="btngroups" v-else="workDetailData.status===4">
                <up-button type="error" text="取消"></up-button>
            </div>
            <div class="leftBtn" @click="rightClick">
@@ -78,17 +76,19 @@
</template>
<script setup>
    import {getStepInfo,getList,flowEvent} from '/src/api/work/index.js'
    import {
        getStepInfo,
        getList,
        flowEvent
    } from '/src/api/work/index.js'
    const eventNum = ref('');
    const currentStatus = ref('')
    const stepResponse = ref([]);
    const currentStep = ref(0);
    // 工单内容
    const workDetailData = ref({})
    const stepTitles  =ref([
        {
    const stepTitles = ref([{
            title: '待审核',
            status: '2'
        },
@@ -96,49 +96,62 @@
            title: '待处理',
            status: '0'
        },
        {
            title: '处理中',
            status: '3'
        },{
        }, {
            title: '已完成',
            status: '4'
        }
    ])
    onLoad(async (options) => {
      eventNum.value = options.eventNum;
      await getDataList(eventNum.value);
      await getStepInfoData(eventNum.value);
        eventNum.value = options.eventNum;
        await getDataList(eventNum.value);
        await getStepInfoData(eventNum.value);
    });
    const getDataList = async (val) => {
      const params = {
        current: 1,
        size: 9999,
        source: 1,
        event_name: val
      }
      const res = await getList(params);
      const response = res.data.data.records;
      workDetailData.value = response[0];
      currentStatus.value = workDetailData.value.status;
      console.log('详情',response);
        const params = {
            current: 1,
            size: 9999,
            source: 1,
            event_name: val
        }
        const res = await getList(params);
        const response = res.data.data.records;
        workDetailData.value = response[0];
        currentStatus.value = workDetailData.value.status;
        // console.log('详情',response);
    }
    // 步骤条
    const calculateCurrentStep = (status) => {
      const statusToStep = {
        '2': 0,  // 待审核 -> 第0步
        '0': 1,  // 待处理 -> 第1步
        '3': 2,  // 处理中 -> 第2步
        '4': 3   // 已完成 -> 第3步
      }
      return statusToStep[String(status)] || 0
        const statusToStep = {
            '2': 0, // 待审核 -> 第0步
            '0': 1, // 待处理 -> 第1步
            '3': 2, // 处理中 -> 第2步
            '4': 3 // 已完成 -> 第3步
        }
        return statusToStep[String(status)] || 0
    }
    const getStepInfoData = async (val) => {
      const res = await getStepInfo(val);
      stepResponse.value = res.data.data;
      console.log('stepResponse',stepResponse.value)
      currentStep.value = calculateCurrentStep(currentStatus.value);
    }
        const res = await getStepInfo(val);
        stepResponse.value = res.data.data;
        currentStep.value = calculateCurrentStep(currentStatus.value);
        // 动态匹配步骤描述
        const matchedSteps = {};
        stepResponse.value.forEach(step => {
            // 找到 stepTitles 中对应的步骤索引
            const stepIndex = stepTitles.value.findIndex(item => item.status === String(step.status));
            if (stepIndex !== -1) {
                matchedSteps[stepIndex] = step;
            }
        });
        // 确保 stepResponse 按 stepTitles 顺序填充
        stepResponse.value = stepTitles.value.map((_, index) => matchedSteps[index] || null);
    };
    // 图片预览
    const previewImage = (url) => {
        uni.previewImage({
@@ -147,11 +160,22 @@
        });
    };
    // 通过
    const approveTicket=()=>{}
    const approveTicket = async () => {
        const data = {
            id: workDetailData.value.id,
            status: workDetailData.value.status,
            isPass: 0, // 0 表示通过
            eventNum: workDetailData.value.event_num,
        };
        console.log('data', data)
        const file = workDetailData.value.file || null;
        const response = await flowEvent(data, file);
        console.log('通过', response)
    }
    // // 不通过
    const rejectTicket=()=>{}
    const rejectTicket = () => {}
    // // 受理
    const approveAndDispatch=()=>{}
    const approveAndDispatch = () => {}
    // // 不受理
    // const rejectTicket=()=>{}
    // // 完成工单
@@ -180,7 +204,7 @@
                    position: absolute;
                    left: 0;
                    bottom: 0;
                        width: 100%;
                    width: 100%;
                }
                .titleText {
@@ -198,69 +222,82 @@
            background-color: antiquewhite;
            border-radius: 5px;
            padding: 10px;
             .horizontal-step {
                display: flex;
                align-items: center;
                gap: 12px;
                .step-title {
                  min-width: 60px;
                }
                .step-desc {
                  display: flex;
                  justify-content: space-between;
                  gap: 8px;
                  // color: #666;
                  font-size: 14px;
                }
              }
            .horizontal-step {
                display: flex;
                align-items: center;
                gap: 12px;
                .step-title {
                    min-width: 60px;
                }
                .step-desc {
                    display: flex;
                    justify-content: space-between;
                    gap: 8px;
                    // color: #666;
                    font-size: 14px;
                }
            }
        }
        .actionButton{
        .actionButton {
            display: flex;
            justify-content: space-between;
            margin-bottom: 10px;
            .btngroups {
                display: flex;
                justify-content: space-between;
                .u-button {
                   padding: 9px 20px;
                     height: 32px;
                     &:last-child {
                         margin-left: 12px;
                         margin-right: 12px;
                       }
                    padding: 9px 20px;
                    height: 32px;
                    &:last-child {
                        margin-left: 12px;
                        margin-right: 12px;
                    }
                }
            }
            .leftBtn {
              width: 70px;
              height: 32px;
              background-color: #999;
              border-radius: 5px;
              text-align: center;
              line-height: 32px;
              color: #fff;
              cursor: pointer;
              opacity: 0.8;
                width: 70px;
                height: 32px;
                background-color: #999;
                border-radius: 5px;
                text-align: center;
                line-height: 32px;
                color: #fff;
                cursor: pointer;
                opacity: 0.8;
            }
            .disableds {
              background: #999 !important;
              cursor: not-allowed !important;
              pointer-events: none;
              opacity: 0.3 !important;
                background: #999 !important;
                cursor: not-allowed !important;
                pointer-events: none;
                opacity: 0.3 !important;
            }
        }
        .workOrderContent {
            margin-top: 15px;
            .workOrderContainer {
                div {
                    margin-bottom: 10px;
                }
                .titketName {
                    display: flex;
                    align-items: center;
                }
            }
        }
    }
</style>
</style>