Jelajahi Sumber

首次提交,初始化项目

yanxh 2 minggu lalu
melakukan
c6cb9b0b8c
78 mengubah file dengan 14399 tambahan dan 0 penghapusan
  1. 2 0
      .env.development
  2. 1 0
      .env.production
  3. 3 0
      .gitignore
  4. 35 0
      README.md
  5. 1 0
      index.html
  6. 9407 0
      package-lock.json
  7. 36 0
      package.json
  8. 73 0
      scripts/gen-tabbar-icons.mjs
  9. 41 0
      src/App.vue
  10. 2 0
      src/api/index.ts
  11. 23 0
      src/api/modules/address.ts
  12. 17 0
      src/api/modules/homeBanners.ts
  13. 155 0
      src/api/modules/marketing.ts
  14. 24 0
      src/api/modules/member.ts
  15. 42 0
      src/api/modules/memberAuth.ts
  16. 23 0
      src/api/modules/order.ts
  17. 26 0
      src/components/EmptyState.vue
  18. 190 0
      src/components/MealMenuItemCard.vue
  19. 133 0
      src/components/MkCouponCard.vue
  20. 225 0
      src/components/MkScanPanel.vue
  21. 29 0
      src/components/OrderStatusTag.vue
  22. 27 0
      src/components/PriceSummary.vue
  23. 6 0
      src/config/api.ts
  24. 3 0
      src/config/env.ts
  25. 2 0
      src/config/index.ts
  26. 4 0
      src/constants/routes.ts
  27. 4 0
      src/constants/storage.ts
  28. 12 0
      src/env.d.ts
  29. 12 0
      src/main.ts
  30. 17 0
      src/manifest.json
  31. 221 0
      src/package-views/pages/login/index.vue
  32. 86 0
      src/package-views/pages/marketing/clerk-home.vue
  33. 188 0
      src/package-views/pages/marketing/clerk-records.vue
  34. 104 0
      src/package-views/pages/marketing/clerk-verify.vue
  35. 159 0
      src/package-views/pages/marketing/verify-code.vue
  36. 112 0
      src/pages.json
  37. 600 0
      src/pages/coupon/index.vue
  38. 322 0
      src/pages/home/index.vue
  39. 485 0
      src/pages/profile/index.vue
  40. TEMPAT SAMPAH
      src/static/tabbar/coupon-active.png
  41. TEMPAT SAMPAH
      src/static/tabbar/coupon.png
  42. TEMPAT SAMPAH
      src/static/tabbar/home-active.png
  43. TEMPAT SAMPAH
      src/static/tabbar/home.png
  44. TEMPAT SAMPAH
      src/static/tabbar/profile-active.png
  45. TEMPAT SAMPAH
      src/static/tabbar/profile.png
  46. TEMPAT SAMPAH
      src/static/tabbar/scan-active.png
  47. TEMPAT SAMPAH
      src/static/tabbar/scan.png
  48. 3 0
      src/store/index.ts
  49. 34 0
      src/store/modules/auth.ts
  50. 33 0
      src/store/modules/company.ts
  51. 70 0
      src/store/modules/meal.ts
  52. 25 0
      src/store/modules/tenant.ts
  53. 111 0
      src/styles/common.scss
  54. 10 0
      src/styles/variables.scss
  55. 26 0
      src/types/address.ts
  56. 12 0
      src/types/common.ts
  57. 170 0
      src/types/companyMeal.ts
  58. 4 0
      src/types/index.ts
  59. 184 0
      src/types/meal.ts
  60. 72 0
      src/types/order.ts
  61. 7 0
      src/types/pay.ts
  62. 10 0
      src/uni.scss
  63. 52 0
      src/utils/auth.ts
  64. 168 0
      src/utils/device.ts
  65. 34 0
      src/utils/mealDisplay.ts
  66. 8 0
      src/utils/money.ts
  67. 54 0
      src/utils/needLoginError.ts
  68. 15 0
      src/utils/orderCancelActions.ts
  69. 28 0
      src/utils/pay.ts
  70. 108 0
      src/utils/request.ts
  71. 20 0
      src/utils/scanScene.ts
  72. 83 0
      src/utils/tenantLanding.ts
  73. 28 0
      src/utils/tenantScan.ts
  74. 29 0
      src/utils/tenantStorage.ts
  75. 54 0
      src/utils/tokenStorage.ts
  76. 18 0
      src/utils/unifiedOrderWechatPay.ts
  77. 45 0
      tsconfig.json
  78. 32 0
      vite.config.ts

+ 2 - 0
.env.development

@@ -0,0 +1,2 @@
+VITE_API_BASE_URL=http://127.0.0.1:8086/mobile
+VITE_DEV_API_TARGET=http://127.0.0.1:8086

+ 1 - 0
.env.production

@@ -0,0 +1 @@
+VITE_API_BASE_URL=https://your-api-domain.com/mobile

+ 3 - 0
.gitignore

@@ -0,0 +1,3 @@
+.trae/
+dist/
+node_modules/

+ 35 - 0
README.md

@@ -0,0 +1,35 @@
+# 会员营销小程序
+
+独立 UniApp 项目,承载店铺会员营销能力(与用户端旅游小程序分离):
+
+- 扫码入会 / 切换店铺
+- **底部 Tab「扫码」**:扫描店内推广码关注店铺
+- 店铺券领取与「我的优惠券」
+- 顾客到店核销码
+- 店员扫码核销与核销记录
+
+## 开发
+
+```bash
+npm install
+npm run dev:mp-weixin
+```
+
+TabBar 图标位于 `src/static/tabbar/`,如需重新生成:
+
+```bash
+npm run gen:tabbar-icons
+```
+
+开发端口:`9011`(见 `vite.config.ts`)
+
+## 配置
+
+1. 在 `src/manifest.json` 填写独立微信小程序 `appid`
+2. `.env.development` / `.env.production` 配置 `VITE_API_BASE_URL`(默认 `/mobile` 前缀接口)
+
+## 扫码落地
+
+店铺推广小程序码应指向**本小程序**,scene 由后端 `/mobile/noAuth/marketing/tenant/landing` 解析。
+
+Token 存储前缀为 `marketing_*`,与用户端、订餐小程序互不冲突。

+ 1 - 0
index.html

@@ -0,0 +1 @@
+<!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8" /><script>var coverSupport='CSS' in window&&typeof CSS.supports==='function'&&(CSS.supports('top: env(a)')||CSS.supports('top: constant(a)'));document.write('<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0'+(coverSupport?', viewport-fit=cover':'')+'" />')</script><title>会员营销</title></head><body><div id="app"></div><script type="module" src="/src/main.ts"></script></body></html>

+ 9407 - 0
package-lock.json

@@ -0,0 +1,9407 @@
+{
+  "name": "xinghuacun_travel_marketing_mini_app",
+  "version": "1.0.0",
+  "lockfileVersion": 3,
+  "requires": true,
+  "packages": {
+    "": {
+      "name": "xinghuacun_travel_marketing_mini_app",
+      "version": "1.0.0",
+      "dependencies": {
+        "@dcloudio/uni-app": "3.0.0-4080420251103001",
+        "@dcloudio/uni-components": "3.0.0-4080420251103001",
+        "@dcloudio/uni-mp-weixin": "3.0.0-4080420251103001",
+        "pinia": "^2.1.7",
+        "uview-plus": "^3.7.36",
+        "vue": "^3.4.21"
+      },
+      "devDependencies": {
+        "@dcloudio/types": "^3.4.8",
+        "@dcloudio/uni-cli-shared": "3.0.0-4080420251103001",
+        "@dcloudio/vite-plugin-uni": "3.0.0-4080420251103001",
+        "@types/node": "^20.10.0",
+        "@vue/runtime-core": "^3.4.21",
+        "@vue/tsconfig": "^0.1.3",
+        "sass": "^1.69.5",
+        "sharp": "^0.35.2",
+        "typescript": "^4.9.4",
+        "vite": "5.2.8",
+        "vue-tsc": "^1.0.24"
+      }
+    },
+    "node_modules/@ampproject/remapping": {
+      "version": "2.3.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@ampproject/remapping/-/remapping-2.3.0.tgz",
+      "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@jridgewell/gen-mapping": "^0.3.5",
+        "@jridgewell/trace-mapping": "^0.3.24"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@babel/code-frame": {
+      "version": "7.24.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/code-frame/-/code-frame-7.24.7.tgz",
+      "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/highlight": "^7.24.7",
+        "picocolors": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/compat-data": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/compat-data/-/compat-data-7.29.7.tgz",
+      "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/core": {
+      "version": "7.25.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/core/-/core-7.25.2.tgz",
+      "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==",
+      "license": "MIT",
+      "dependencies": {
+        "@ampproject/remapping": "^2.2.0",
+        "@babel/code-frame": "^7.24.7",
+        "@babel/generator": "^7.25.0",
+        "@babel/helper-compilation-targets": "^7.25.2",
+        "@babel/helper-module-transforms": "^7.25.2",
+        "@babel/helpers": "^7.25.0",
+        "@babel/parser": "^7.25.0",
+        "@babel/template": "^7.25.0",
+        "@babel/traverse": "^7.25.2",
+        "@babel/types": "^7.25.2",
+        "convert-source-map": "^2.0.0",
+        "debug": "^4.1.0",
+        "gensync": "^1.0.0-beta.2",
+        "json5": "^2.2.3",
+        "semver": "^6.3.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/babel"
+      }
+    },
+    "node_modules/@babel/generator": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/generator/-/generator-7.29.7.tgz",
+      "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/parser": "^7.29.7",
+        "@babel/types": "^7.29.7",
+        "@jridgewell/gen-mapping": "^0.3.12",
+        "@jridgewell/trace-mapping": "^0.3.28",
+        "jsesc": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/generator/node_modules/@babel/parser": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/parser/-/parser-7.29.7.tgz",
+      "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.29.7"
+      },
+      "bin": {
+        "parser": "bin/babel-parser.js"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@babel/generator/node_modules/@babel/types": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/types/-/types-7.29.7.tgz",
+      "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-string-parser": "^7.29.7",
+        "@babel/helper-validator-identifier": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-annotate-as-pure": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.29.7.tgz",
+      "integrity": "sha512-OoK6239jHPuSQOoS0kfTVKn0b/rVTk0seKq4Gd2UMLtmOVLjDC0ki3e+c90Trqv2gMfvJFqkiljrr568+qddiw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-annotate-as-pure/node_modules/@babel/types": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/types/-/types-7.29.7.tgz",
+      "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-string-parser": "^7.29.7",
+        "@babel/helper-validator-identifier": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-compilation-targets": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz",
+      "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/compat-data": "^7.29.7",
+        "@babel/helper-validator-option": "^7.29.7",
+        "browserslist": "^4.24.0",
+        "lru-cache": "^5.1.1",
+        "semver": "^6.3.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-create-class-features-plugin": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.29.7.tgz",
+      "integrity": "sha512-IY3ZD9Tmooqr3TUhc3DUWxiuo8xx1DWLhd5M7hQ+ZWJamqM2BbalrBJb2MisSLoYorOj75U03qULCxQTY9r3hg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-annotate-as-pure": "^7.29.7",
+        "@babel/helper-member-expression-to-functions": "^7.29.7",
+        "@babel/helper-optimise-call-expression": "^7.29.7",
+        "@babel/helper-replace-supers": "^7.29.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7",
+        "@babel/traverse": "^7.29.7",
+        "semver": "^6.3.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/helper-create-regexp-features-plugin": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.29.7.tgz",
+      "integrity": "sha512-907Uymvqgg1dwUA+7IGwFAOSYzQOuzPXKNJ1yxzwPffzkYFg2q2eHi1fIOs6sXkG9NbIUMunnUlkYsfRFNvomg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-annotate-as-pure": "^7.29.7",
+        "regexpu-core": "^6.3.1",
+        "semver": "^6.3.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/helper-define-polyfill-provider": {
+      "version": "0.6.8",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.8.tgz",
+      "integrity": "sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-compilation-targets": "^7.28.6",
+        "@babel/helper-plugin-utils": "^7.28.6",
+        "debug": "^4.4.3",
+        "lodash.debounce": "^4.0.8",
+        "resolve": "^1.22.11"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
+      }
+    },
+    "node_modules/@babel/helper-define-polyfill-provider/node_modules/debug": {
+      "version": "4.4.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/debug/-/debug-4.4.3.tgz",
+      "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ms": "^2.1.3"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "peerDependenciesMeta": {
+        "supports-color": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@babel/helper-define-polyfill-provider/node_modules/resolve": {
+      "version": "1.22.12",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/resolve/-/resolve-1.22.12.tgz",
+      "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "es-errors": "^1.3.0",
+        "is-core-module": "^2.16.1",
+        "path-parse": "^1.0.7",
+        "supports-preserve-symlinks-flag": "^1.0.0"
+      },
+      "bin": {
+        "resolve": "bin/resolve"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/@babel/helper-globals": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/helper-globals/-/helper-globals-7.29.7.tgz",
+      "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-member-expression-to-functions": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.29.7.tgz",
+      "integrity": "sha512-j+7JYmk1JYDtACIGj0QJqqWZjoUpMoEikQGADMaHgCMCSDqd2+P32rfcibUNrGOMWrlzK1WJBdxrB3JJQZwWtg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/traverse": "^7.29.7",
+        "@babel/types": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-member-expression-to-functions/node_modules/@babel/types": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/types/-/types-7.29.7.tgz",
+      "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-string-parser": "^7.29.7",
+        "@babel/helper-validator-identifier": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-module-imports": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz",
+      "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/traverse": "^7.29.7",
+        "@babel/types": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-module-imports/node_modules/@babel/types": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/types/-/types-7.29.7.tgz",
+      "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-string-parser": "^7.29.7",
+        "@babel/helper-validator-identifier": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-module-transforms": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz",
+      "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-module-imports": "^7.29.7",
+        "@babel/helper-validator-identifier": "^7.29.7",
+        "@babel/traverse": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/helper-optimise-call-expression": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.29.7.tgz",
+      "integrity": "sha512-+kmGVjcT9RGYzoDwdwEqEvGgKe3BYq+O1iGzjFubaNgZHwYHP6lsF2Yghf4kEuv9BV7tYDZ913aBW9am6YKong==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-optimise-call-expression/node_modules/@babel/types": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/types/-/types-7.29.7.tgz",
+      "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-string-parser": "^7.29.7",
+        "@babel/helper-validator-identifier": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-plugin-utils": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz",
+      "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-remap-async-to-generator": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.29.7.tgz",
+      "integrity": "sha512-16AMiW26DbXWBbr3B8wNozKM0ydMLB892vaOaJW/fPJdnT8vJk5sdkQcU/isqUxyCE0cEoa8wZOcbgDuC4b6Og==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-annotate-as-pure": "^7.29.7",
+        "@babel/helper-wrap-function": "^7.29.7",
+        "@babel/traverse": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/helper-replace-supers": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/helper-replace-supers/-/helper-replace-supers-7.29.7.tgz",
+      "integrity": "sha512-atfGXWSeCiF4DnKZIfmJfQRkSw9b9gNNXR1kqKjbhG4pGYCOnkp8OcTB8E3NXjBu8NpheSnOeNKz8KT7UNFTmQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-member-expression-to-functions": "^7.29.7",
+        "@babel/helper-optimise-call-expression": "^7.29.7",
+        "@babel/traverse": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.29.7.tgz",
+      "integrity": "sha512-brcMGQaVzIeUb+6/bs1Av0f8YuNNjKY2JyvfRCsFuFsdKccEQ5Ges2y74D74NZ1Rz8lKJ9ksJkfqwQFJ/iNEyQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/traverse": "^7.29.7",
+        "@babel/types": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-skip-transparent-expression-wrappers/node_modules/@babel/types": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/types/-/types-7.29.7.tgz",
+      "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-string-parser": "^7.29.7",
+        "@babel/helper-validator-identifier": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-string-parser": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz",
+      "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-validator-identifier": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz",
+      "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-validator-option": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz",
+      "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-wrap-function": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/helper-wrap-function/-/helper-wrap-function-7.29.7.tgz",
+      "integrity": "sha512-iES0Skag9ERIF68aXadpO6dbXa03mNWK3sEqJaMnLNs/eC3l0lkImdfoy6Y09/SfkpawdAB4RjQ7PVA7TcVGdw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/template": "^7.29.7",
+        "@babel/traverse": "^7.29.7",
+        "@babel/types": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-wrap-function/node_modules/@babel/types": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/types/-/types-7.29.7.tgz",
+      "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-string-parser": "^7.29.7",
+        "@babel/helper-validator-identifier": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helpers": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/helpers/-/helpers-7.29.7.tgz",
+      "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/template": "^7.29.7",
+        "@babel/types": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helpers/node_modules/@babel/types": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/types/-/types-7.29.7.tgz",
+      "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-string-parser": "^7.29.7",
+        "@babel/helper-validator-identifier": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/highlight": {
+      "version": "7.25.9",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/highlight/-/highlight-7.25.9.tgz",
+      "integrity": "sha512-llL88JShoCsth8fF8R4SJnIn+WLvR6ccFxu1H3FlMhDontdcmZWf2HgIZ7AIqV3Xcck1idlohrN4EUBQz6klbw==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-validator-identifier": "^7.25.9",
+        "chalk": "^2.4.2",
+        "js-tokens": "^4.0.0",
+        "picocolors": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/parser": {
+      "version": "7.25.6",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/parser/-/parser-7.25.6.tgz",
+      "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.25.6"
+      },
+      "bin": {
+        "parser": "bin/babel-parser.js"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.29.7.tgz",
+      "integrity": "sha512-j8SrR0zLZrRsC09DlszEx8FpMiwukKffYXMK0d5LmOglO7vGG6sz/BR/20yHqWH+Lnn31JTt2PE3hIWNgM2J6w==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.29.7",
+        "@babel/traverse": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.29.7.tgz",
+      "integrity": "sha512-r8j8escF+U2FUHo0KOhPUdMzUO+jp9fInva6+ACVAF3Y97Ev+5iNZwiqTghmzNeWwDkOPlYuTcfb1vDaoZKmAQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.29.7.tgz",
+      "integrity": "sha512-GE1TFSiuFeGsCxmYXZl8HwoPrVlwe4rHPFE8weieGKZqnDORK+Ar3vgWMgW+AOxQ6/2TgLSKx9p6W7O4rC6qgQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/plugin-bugfix-safari-rest-destructuring-rhs-array": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-bugfix-safari-rest-destructuring-rhs-array/-/plugin-bugfix-safari-rest-destructuring-rhs-array-7.29.7.tgz",
+      "integrity": "sha512-oBNVCvnO5tND+xSopWvV8WNGfpTfgP4Zr/YXXSj8zfmcPktp5Ku/aZlsIowgSD4fjmgHn6sGmB9APVsU5zOdhA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.29.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.29.7.tgz",
+      "integrity": "sha512-QQt9qKHZ2sg/kivaLr7lnQr8HVrQDdBNSfCsTjiDxRuX/K5ORyKq+Bu8Xr0cDE3Dfkv0cw28Ve0EKyKMvulkOw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.29.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7",
+        "@babel/plugin-transform-optional-chaining": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.13.0"
+      }
+    },
+    "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.29.7.tgz",
+      "integrity": "sha512-pn6QacGLgvCcwc+syUhKE/qSjV2D1IHDB84RNxWYSt1mW3K/SCtjinZ2p0cETJxAWBjPy3K/1lHwG5BjjPxNlw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.29.7",
+        "@babel/traverse": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/plugin-proposal-private-property-in-object": {
+      "version": "7.21.0-placeholder-for-preset-env.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz",
+      "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-import-assertions": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.29.7.tgz",
+      "integrity": "sha512-/An1OCBN93thpBAGyfsK2pcf0jvju1SAtKkL2Ny++B5Sy6sqgzXDQH1cZxWbF96Wuk+bn41MDA9bLd4VVAw6rw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-import-attributes": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.29.7.tgz",
+      "integrity": "sha512-zGYcYfq/WmZ4V+kBIXQon9dSSc8ircGZqw9ZaNhhGj9nZkeBu1jHLBDQqYYi5WA9uawvA2sIMbry2nCFhf5Djg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-import-meta": {
+      "version": "7.10.4",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
+      "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.10.4"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-jsx": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.29.7.tgz",
+      "integrity": "sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-typescript": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.29.7.tgz",
+      "integrity": "sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-unicode-sets-regex": {
+      "version": "7.18.6",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz",
+      "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-create-regexp-features-plugin": "^7.18.6",
+        "@babel/helper-plugin-utils": "^7.18.6"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-arrow-functions": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.29.7.tgz",
+      "integrity": "sha512-N7zArUXWzAMzm+/N0uPBeVB3Fam5lMxtUwMmDK5f/IBBS7a7p1qeUoxd/6CckXoxUdgsntq1Dh8xNW06maZbDQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-async-generator-functions": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.7.tgz",
+      "integrity": "sha512-d98gXZkgswvkyohMBABkhm3GeXhYj8psWfwQ2C7gtfrKGTykQa/iOIi+JJhwMjPlZ6Vm2XN+DCf3Es1EoG4ZLA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.29.7",
+        "@babel/helper-remap-async-to-generator": "^7.29.7",
+        "@babel/traverse": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-async-to-generator": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.29.7.tgz",
+      "integrity": "sha512-pcUb2SS+RMo9TWVBwKGI5ShtoG7R+zBsFmCKDa6fe8c+hPr3XJlZgoE5j6i8W7gDjhyvy+85vmYexanvXh3d1w==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-module-imports": "^7.29.7",
+        "@babel/helper-plugin-utils": "^7.29.7",
+        "@babel/helper-remap-async-to-generator": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-block-scoped-functions": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.29.7.tgz",
+      "integrity": "sha512-cUSmjh72N+rN4PrkFlN1dJwNCwjVp5d38/CQrEsFggkD10UiFlBFgdH3tv5dNsLuHY+3S8db2xCHjhZcv5WgvA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-block-scoping": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.29.7.tgz",
+      "integrity": "sha512-ONyr4+AZhKh8yKWInVxU9AXA9EbsyeLcL6V0dJy6M2/62vuvpGm29zzuymbTpdc451GEpDIdAyPLP3r+P61yKQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-class-properties": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.29.7.tgz",
+      "integrity": "sha512-GtcpjFvanPfzNQi3eTitsCqtRRmmqzpy/A+yhTR1HaZo1Ly3EA8ZXxlPyHdR8/IuRMYc3E4wdGBewB2QKQjAaA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-create-class-features-plugin": "^7.29.7",
+        "@babel/helper-plugin-utils": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-class-static-block": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.29.7.tgz",
+      "integrity": "sha512-kibJgmEdX2iMwsHY2tSZNDgj8PwIlCQz7FK9KuGKO8zsuoUwSEhoNnNVp/emKWrbY4HeO6kkXfdMqRKKKXBm2A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-create-class-features-plugin": "^7.29.7",
+        "@babel/helper-plugin-utils": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.12.0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-classes": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-classes/-/plugin-transform-classes-7.29.7.tgz",
+      "integrity": "sha512-qV0OGGBVacduzQHE649JyCneOFI/maT+YKsO+K4Yi3xv2wTPNjM/W2o2gdzMwEAZz7fXNTHAe0NcSg30bIN69g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-annotate-as-pure": "^7.29.7",
+        "@babel/helper-compilation-targets": "^7.29.7",
+        "@babel/helper-globals": "^7.29.7",
+        "@babel/helper-plugin-utils": "^7.29.7",
+        "@babel/helper-replace-supers": "^7.29.7",
+        "@babel/traverse": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-computed-properties": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.29.7.tgz",
+      "integrity": "sha512-RK7/IyU5phpuCdBAuig5VkzG/EnbDaui5SQGdU9BFrHdV+mV4cUjLMQ9lJDjLNtWHsqtiefpGZUXQP2BiTYMsA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.29.7",
+        "@babel/template": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-destructuring": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.29.7.tgz",
+      "integrity": "sha512-iPX8aD6H9zV5s7ZsqTdNocPN/MGQ5sSMnElKrktxjJRMnB2jN/1p2+R7GkfD6CAYoVFqy5A4XnSIUeGgJzIWpg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.29.7",
+        "@babel/traverse": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-dotall-regex": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.29.7.tgz",
+      "integrity": "sha512-3qc18hsD2RdZiyJNDNc7HQpv6xbncwh8FYtxNFFzclSyh/trPD9KkVR9BDECUjDLvb7yJVF15GfYUuC+LMkkiQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-create-regexp-features-plugin": "^7.29.7",
+        "@babel/helper-plugin-utils": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-duplicate-keys": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.29.7.tgz",
+      "integrity": "sha512-6IvRRriEMqnBwD6chtxdLpMYCHWEzN+oL5cyQtjykya19UgzbmKhxmhZgKC/LHxS2nYr9Q/qYPZ5Lr6jOL9+yQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.7.tgz",
+      "integrity": "sha512-2wiIyo2BjtgU7HufSeDnL9L2O7zr8jmhFKuSr65VpRkUiRKRNpb0mdlk56+XPPKoIrfHqzbMuglDvZun0RISsA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-create-regexp-features-plugin": "^7.29.7",
+        "@babel/helper-plugin-utils": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-dynamic-import": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.29.7.tgz",
+      "integrity": "sha512-giOlEm/EFjfjr+te9NsdjkUo2v4f8rS/SXPumRVHAtbNcyNlvtREkU1dZzaIDclNpnaVhlCqRdFKhJBjBikzLg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-explicit-resource-management": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.29.7.tgz",
+      "integrity": "sha512-Rstj7coNz8sE+7Ju7ihpHLI564lsK5pUpNNlvptCIC/16E/S5hbl6n3kESPKdNRmqEWlpn5xpS5Q2dvXBsySLw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.29.7",
+        "@babel/plugin-transform-destructuring": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-exponentiation-operator": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.29.7.tgz",
+      "integrity": "sha512-zFpMOTLZBdW5LfObqcSbL6kefg4R4eLdmvS0wbN9M6D5Mym/sKm9toOoWyVOa+xDjvCnuWcHls2YonXwHvH3CQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-export-namespace-from": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.29.7.tgz",
+      "integrity": "sha512-24B2nOy2TeJSMheqwPD4DDQOV/elLSIlKxjZt4i05H5AgdPdWR3n18HnNrcJ+j76WJd9gbwb9jPjNYUy6RautA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-for-of": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.29.7.tgz",
+      "integrity": "sha512-zeSIHh0+E1Um1WJRXCFlHQYu2ieJNdivLLjlBEp+dIBu3S51n+SZZmIXjxnItw6pz56Cn+KvK68BIBVsxq2JiQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.29.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-function-name": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.29.7.tgz",
+      "integrity": "sha512-otRWaHXE6fbAGkePvaj/kvs3HsqXfPhlnzwSOlnFgbqCPMd975dW+4wZ00WFBt+/YlBGcJwNrARQTOJOb4ZrIg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-compilation-targets": "^7.29.7",
+        "@babel/helper-plugin-utils": "^7.29.7",
+        "@babel/traverse": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-json-strings": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.29.7.tgz",
+      "integrity": "sha512-RRnE2+eon1rJAq8MnoF1b5kTpY1vU88twHcvcKMrsqP/jxIRqDVs9iJB5fqPuqyeFAW0wJo4MlUIPpQCq/aRsg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-literals": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-literals/-/plugin-transform-literals-7.29.7.tgz",
+      "integrity": "sha512-DZ/oLP21ZuWx1vKqnoNv6/tvEK48AQOBRai40CX9dTjGluvT/YZCyY3rryDtyUqCEoyNroy5KKPwX2iQCiRvyw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-logical-assignment-operators": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.29.7.tgz",
+      "integrity": "sha512-A0H91hh6W8MFRkp5TqJmMr39jzGD1A1E1Ysiv2O06Sfbhkapm+XyIzxWCEh5kqwOZ1/8QZ0dY3SeQ7XBqfJd5Q==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-member-expression-literals": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.29.7.tgz",
+      "integrity": "sha512-hl1kwFZCCiDyfH25Xmco9jTrkPgnS9pmOzSG7W5I4SaGbLeqKv417hcU2RKmaxoPEgsoJh7ZPOrnPGq99bHoUg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-modules-amd": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.29.7.tgz",
+      "integrity": "sha512-fxtQoH3m5ywUSIfaH0FGCzWu4McsYon5bD3K4XnskC7f+OyQMj7rsOMi4NvvmJ83WwBAg4UCe+ov4VZlqEvyew==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-module-transforms": "^7.29.7",
+        "@babel/helper-plugin-utils": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-modules-commonjs": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.29.7.tgz",
+      "integrity": "sha512-j0vCldybPC5b5dwCQOJ21uKtHzt7hxLygJTg9eF1ScfaikEDNfzn94XoW5Fi+seBR0nCyL23xaBFFkq7dTM8XQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-module-transforms": "^7.29.7",
+        "@babel/helper-plugin-utils": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-modules-systemjs": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.7.tgz",
+      "integrity": "sha512-TM2ZcQLoG2/y4HODiStCo10DibYhWhGWAwVv+EQKmG/7GFl0N+AAmUiXOMKM+aiJ9XBJ9AHVZBvTzMnJ2sM3cQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-module-transforms": "^7.29.7",
+        "@babel/helper-plugin-utils": "^7.29.7",
+        "@babel/helper-validator-identifier": "^7.29.7",
+        "@babel/traverse": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-modules-umd": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.29.7.tgz",
+      "integrity": "sha512-B4UkaTK3QpgCwJnrxKfMPKdo92CN7OKXAlpAAnM3UPu0Q0lCCk57ylA9AJbRy2v8dDKOPAAWcoR6CMyeoHwRCA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-module-transforms": "^7.29.7",
+        "@babel/helper-plugin-utils": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.7.tgz",
+      "integrity": "sha512-vuFoLwr4qnv2xbZ16SQd6uPcH5FNrLHhk/Jzo++0XJFcaDsr4gjJVg6j398oMHiC+83k/GiBzviwF5KBJkPUtQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-create-regexp-features-plugin": "^7.29.7",
+        "@babel/helper-plugin-utils": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-new-target": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.29.7.tgz",
+      "integrity": "sha512-fEo41GmsOUhOBlw8ioo6zvjX5Xc2Lqkzlyfqbpsk3eB6TReV18uhxZ0esfEokVbY2+PVJAQHNKxER6lGrzNd3A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.29.7.tgz",
+      "integrity": "sha512-idmp1dFaekP9GbcMvG24Kvw2BfhFZjHnNJCkV4WuIY4PskJzwI3f1N5OdgYke38T7rftO6ERulFRn2cFeZwRkg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-numeric-separator": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.29.7.tgz",
+      "integrity": "sha512-zR7fv/z14OjgHl4AgRtkDBvBMhIzCxqV/qN/2BCRC7LjFwvuzjYe7gDWxC4Wl/SNsLM6SE1IWvRPYMgSJaUvNw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-object-rest-spread": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.29.7.tgz",
+      "integrity": "sha512-Ld98jn4c0smUywL57m7SgsHq3OpThOa6LqZJif3G6jYOovPleoFhVrBJ1WegRApSFB2wu4+RelAj9AC9G08Z4A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-compilation-targets": "^7.29.7",
+        "@babel/helper-plugin-utils": "^7.29.7",
+        "@babel/plugin-transform-destructuring": "^7.29.7",
+        "@babel/plugin-transform-parameters": "^7.29.7",
+        "@babel/traverse": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-object-super": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.29.7.tgz",
+      "integrity": "sha512-Ea/diGcw0twB5IlZPO5sgET6fJsLJqPABqTuFWIR+iMPGPZJkATEIWx0wa+aEQ5UY1CBQyP/gkAiLEqn1vBiQA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.29.7",
+        "@babel/helper-replace-supers": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-optional-catch-binding": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.29.7.tgz",
+      "integrity": "sha512-sLsyndxK2VwX6yNUOakMb7Sh553ZTe/vVM1XJ+9Z5aW1ytsc8xOIwmyk05NNjN60vkc5/KqoTH6hB4V41LJhng==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-optional-chaining": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.29.7.tgz",
+      "integrity": "sha512-6GM1dhvK3gNODkXcEcMCOLEDCLSoZ/sBbro2Ax8HURyasQ4NshagQixkRFdh5niI6E4gmA/jYI/4aT7rRos3ZQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.29.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-parameters": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.29.7.tgz",
+      "integrity": "sha512-ZDOBqV/qLYJI0YElr8DcENEyARsFQeESqWXH6gZlghYXuPPjvweuDhP4VyEi4BlUBlLRFZVjxoZDMjxhLW766g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-private-methods": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.29.7.tgz",
+      "integrity": "sha512-/6Rz4DK1ETDEM/bWHsPHcaEe7ZaT1EqSXjtSP/L0DijOYuaUhiRiOKcwpZ8P7zR4xXEHc2ITdiCgBm9Tpyv9ug==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-create-class-features-plugin": "^7.29.7",
+        "@babel/helper-plugin-utils": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-private-property-in-object": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.29.7.tgz",
+      "integrity": "sha512-+BNo06dnrzdNNqCm1X6YUaVv0DKk8Q+JYcoZfOkLhYWNCXzlwTSRq8zGWayT1csjcpNXV9CQTBRRbmTLZac5cA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-annotate-as-pure": "^7.29.7",
+        "@babel/helper-create-class-features-plugin": "^7.29.7",
+        "@babel/helper-plugin-utils": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-property-literals": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.29.7.tgz",
+      "integrity": "sha512-bOMRLQuI0A5ZqHq3OWJ89/rXpJ/NJrbVhXiP4zwPGMs6kpcVsuTUNjwoE30K0Qm3mf48a/TnRYYD6vPNqcg6jA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-regenerator": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.7.tgz",
+      "integrity": "sha512-rNNFV0DBAJp988xW2DOntfDoYn1eR8GGF5AT5vYc+rjyfaQkM242c9tZUHHPe7KYaiJizXPWhQTzzdbXySyhBw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-regexp-modifiers": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.29.7.tgz",
+      "integrity": "sha512-mB5Fs0VWrJ42ZCmc8114v60qetdaUVNkj9PmSZRmanCZM3S9hm0CFRLjRmYIsuXav14l2jvZ+4T8iiCGnhj3nQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-create-regexp-features-plugin": "^7.29.7",
+        "@babel/helper-plugin-utils": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-reserved-words": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.29.7.tgz",
+      "integrity": "sha512-5+YhdpVgmfSmwZyLMftfaiffLRMHjzIRHFHHLdibcSyJm2pasMrKHrO3Ptrt2DRshjvpgjEJJ1zVW14WPq/6QA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-shorthand-properties": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.29.7.tgz",
+      "integrity": "sha512-I+WYbGBAiCn7nA6xBrlgPH+MB7HWb4u8pv5S0Pv7OtwNvIFvCCb24YlttKEeUFVurfBCEaOTnuhlqsb7f0Z5Dg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-spread": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-spread/-/plugin-transform-spread-7.29.7.tgz",
+      "integrity": "sha512-/u5K1QWada7tbYNqTjMh96718g9NTwh9tfPJMsSmVsQwGT447FskV+KcfeXkXq2GWki4EM/MuTdmBec+hOuVTQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.29.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-sticky-regex": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.29.7.tgz",
+      "integrity": "sha512-BCHzNYJGe9l7EpwwDBN/ztlL2NYFFq8hp9ddjtUEM9f2O7S7kKV/lL6Fwo7IF7NSkYhPK2vO+86nIGltA90MsA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-template-literals": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.29.7.tgz",
+      "integrity": "sha512-NCSEJ4sLFU2gqAub45HYh4fus2yQ36rr6ei6vpU7NdoJqCpxvEG8E6eJpscGyXP3VHD2Ny+fSXr04k1hoUrFqA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-typeof-symbol": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.29.7.tgz",
+      "integrity": "sha512-223mNGoTkBiTEWFoK+Q6Go3tueMRclO8vxxxxquNCYuNI4jWOofFKJRRDu6SDrB8Sgo1UEGW9T4GAQ8ZyRso1A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-typescript": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.29.7.tgz",
+      "integrity": "sha512-jK52h8LaLc7JarhQV2ofeFMts4H7vnOXnqZNA6fYglBTZewRBE51KWt3BUltW1P+KoPsYkHoJeXePuz4zo2LMw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-annotate-as-pure": "^7.29.7",
+        "@babel/helper-create-class-features-plugin": "^7.29.7",
+        "@babel/helper-plugin-utils": "^7.29.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7",
+        "@babel/plugin-syntax-typescript": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-unicode-escapes": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.29.7.tgz",
+      "integrity": "sha512-jCfXxSjf94lf4E0hKE0AByxF6F3/pVFqRdUUNkDJhsY0m1ZKjnN6ZYyMeHNpzflxb/0q5b7t3p+BE+SLF1WOtA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-unicode-property-regex": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.29.7.tgz",
+      "integrity": "sha512-OgZ+zoAJgZLUCunsTRQ5LAjOywDv5zzZ2/hQ5aMw1pGXyY2rtE8/chXYUmu3AlVHKpm10KEdG9aMwbI/K76ZGw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-create-regexp-features-plugin": "^7.29.7",
+        "@babel/helper-plugin-utils": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-unicode-regex": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.29.7.tgz",
+      "integrity": "sha512-7D/x/23/d/3VqZ0QA+LGbZMlGwZjztBygSWWWsfTPoQ1oQ6Q1P6Mr3d0kk42XabyUVw+fha3LqdRsFqeKqvCyA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-create-regexp-features-plugin": "^7.29.7",
+        "@babel/helper-plugin-utils": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-unicode-sets-regex": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.29.7.tgz",
+      "integrity": "sha512-BLOhLht9DOJwIxlmp91wHvkXv1lguuHS3/FwUO8HL1H0u8s4hR1gASVFyilu9iGtcTRYqjTZmlsFFeQletntEg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-create-regexp-features-plugin": "^7.29.7",
+        "@babel/helper-plugin-utils": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/preset-env": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/preset-env/-/preset-env-7.29.7.tgz",
+      "integrity": "sha512-GYzX36n1nsciIb0uyH0GHwxwtNwPQIcpxSeiVLDtG/B7jB5xXgchnmL1f/jCX5o+pwnaDBtO60ONSJhEBJfxYA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/compat-data": "^7.29.7",
+        "@babel/helper-compilation-targets": "^7.29.7",
+        "@babel/helper-plugin-utils": "^7.29.7",
+        "@babel/helper-validator-option": "^7.29.7",
+        "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.29.7",
+        "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.29.7",
+        "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.29.7",
+        "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array": "^7.29.7",
+        "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.29.7",
+        "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.29.7",
+        "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
+        "@babel/plugin-syntax-import-assertions": "^7.29.7",
+        "@babel/plugin-syntax-import-attributes": "^7.29.7",
+        "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
+        "@babel/plugin-transform-arrow-functions": "^7.29.7",
+        "@babel/plugin-transform-async-generator-functions": "^7.29.7",
+        "@babel/plugin-transform-async-to-generator": "^7.29.7",
+        "@babel/plugin-transform-block-scoped-functions": "^7.29.7",
+        "@babel/plugin-transform-block-scoping": "^7.29.7",
+        "@babel/plugin-transform-class-properties": "^7.29.7",
+        "@babel/plugin-transform-class-static-block": "^7.29.7",
+        "@babel/plugin-transform-classes": "^7.29.7",
+        "@babel/plugin-transform-computed-properties": "^7.29.7",
+        "@babel/plugin-transform-destructuring": "^7.29.7",
+        "@babel/plugin-transform-dotall-regex": "^7.29.7",
+        "@babel/plugin-transform-duplicate-keys": "^7.29.7",
+        "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.29.7",
+        "@babel/plugin-transform-dynamic-import": "^7.29.7",
+        "@babel/plugin-transform-explicit-resource-management": "^7.29.7",
+        "@babel/plugin-transform-exponentiation-operator": "^7.29.7",
+        "@babel/plugin-transform-export-namespace-from": "^7.29.7",
+        "@babel/plugin-transform-for-of": "^7.29.7",
+        "@babel/plugin-transform-function-name": "^7.29.7",
+        "@babel/plugin-transform-json-strings": "^7.29.7",
+        "@babel/plugin-transform-literals": "^7.29.7",
+        "@babel/plugin-transform-logical-assignment-operators": "^7.29.7",
+        "@babel/plugin-transform-member-expression-literals": "^7.29.7",
+        "@babel/plugin-transform-modules-amd": "^7.29.7",
+        "@babel/plugin-transform-modules-commonjs": "^7.29.7",
+        "@babel/plugin-transform-modules-systemjs": "^7.29.7",
+        "@babel/plugin-transform-modules-umd": "^7.29.7",
+        "@babel/plugin-transform-named-capturing-groups-regex": "^7.29.7",
+        "@babel/plugin-transform-new-target": "^7.29.7",
+        "@babel/plugin-transform-nullish-coalescing-operator": "^7.29.7",
+        "@babel/plugin-transform-numeric-separator": "^7.29.7",
+        "@babel/plugin-transform-object-rest-spread": "^7.29.7",
+        "@babel/plugin-transform-object-super": "^7.29.7",
+        "@babel/plugin-transform-optional-catch-binding": "^7.29.7",
+        "@babel/plugin-transform-optional-chaining": "^7.29.7",
+        "@babel/plugin-transform-parameters": "^7.29.7",
+        "@babel/plugin-transform-private-methods": "^7.29.7",
+        "@babel/plugin-transform-private-property-in-object": "^7.29.7",
+        "@babel/plugin-transform-property-literals": "^7.29.7",
+        "@babel/plugin-transform-regenerator": "^7.29.7",
+        "@babel/plugin-transform-regexp-modifiers": "^7.29.7",
+        "@babel/plugin-transform-reserved-words": "^7.29.7",
+        "@babel/plugin-transform-shorthand-properties": "^7.29.7",
+        "@babel/plugin-transform-spread": "^7.29.7",
+        "@babel/plugin-transform-sticky-regex": "^7.29.7",
+        "@babel/plugin-transform-template-literals": "^7.29.7",
+        "@babel/plugin-transform-typeof-symbol": "^7.29.7",
+        "@babel/plugin-transform-unicode-escapes": "^7.29.7",
+        "@babel/plugin-transform-unicode-property-regex": "^7.29.7",
+        "@babel/plugin-transform-unicode-regex": "^7.29.7",
+        "@babel/plugin-transform-unicode-sets-regex": "^7.29.7",
+        "@babel/preset-modules": "0.1.6-no-external-plugins",
+        "babel-plugin-polyfill-corejs2": "^0.4.15",
+        "babel-plugin-polyfill-corejs3": "^0.14.0",
+        "babel-plugin-polyfill-regenerator": "^0.6.6",
+        "core-js-compat": "^3.48.0",
+        "semver": "^6.3.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/preset-modules": {
+      "version": "0.1.6-no-external-plugins",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz",
+      "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/types": "^7.4.4",
+        "esutils": "^2.0.2"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0"
+      }
+    },
+    "node_modules/@babel/runtime": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/runtime/-/runtime-7.29.7.tgz",
+      "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/template": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/template/-/template-7.29.7.tgz",
+      "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/code-frame": "^7.29.7",
+        "@babel/parser": "^7.29.7",
+        "@babel/types": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/template/node_modules/@babel/code-frame": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/code-frame/-/code-frame-7.29.7.tgz",
+      "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-validator-identifier": "^7.29.7",
+        "js-tokens": "^4.0.0",
+        "picocolors": "^1.1.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/template/node_modules/@babel/parser": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/parser/-/parser-7.29.7.tgz",
+      "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.29.7"
+      },
+      "bin": {
+        "parser": "bin/babel-parser.js"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@babel/template/node_modules/@babel/types": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/types/-/types-7.29.7.tgz",
+      "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-string-parser": "^7.29.7",
+        "@babel/helper-validator-identifier": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/template/node_modules/picocolors": {
+      "version": "1.1.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/picocolors/-/picocolors-1.1.1.tgz",
+      "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+      "license": "ISC"
+    },
+    "node_modules/@babel/traverse": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/traverse/-/traverse-7.29.7.tgz",
+      "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/code-frame": "^7.29.7",
+        "@babel/generator": "^7.29.7",
+        "@babel/helper-globals": "^7.29.7",
+        "@babel/parser": "^7.29.7",
+        "@babel/template": "^7.29.7",
+        "@babel/types": "^7.29.7",
+        "debug": "^4.3.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/traverse/node_modules/@babel/code-frame": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/code-frame/-/code-frame-7.29.7.tgz",
+      "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-validator-identifier": "^7.29.7",
+        "js-tokens": "^4.0.0",
+        "picocolors": "^1.1.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/traverse/node_modules/@babel/parser": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/parser/-/parser-7.29.7.tgz",
+      "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.29.7"
+      },
+      "bin": {
+        "parser": "bin/babel-parser.js"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@babel/traverse/node_modules/@babel/types": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/types/-/types-7.29.7.tgz",
+      "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-string-parser": "^7.29.7",
+        "@babel/helper-validator-identifier": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/traverse/node_modules/picocolors": {
+      "version": "1.1.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/picocolors/-/picocolors-1.1.1.tgz",
+      "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+      "license": "ISC"
+    },
+    "node_modules/@babel/types": {
+      "version": "7.25.6",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/types/-/types-7.25.6.tgz",
+      "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-string-parser": "^7.24.8",
+        "@babel/helper-validator-identifier": "^7.24.7",
+        "to-fast-properties": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@dcloudio/types": {
+      "version": "3.4.19",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@dcloudio/types/-/types-3.4.19.tgz",
+      "integrity": "sha512-1foayOFEAQ+jnQLt3ACsovCNjer3/fXn1I2VBpmDOzs2nk/n4UHwRLAxZV/RpxRqaGOPEvKrO/Pq+VI6sAmuRw==",
+      "license": "Apache-2.0"
+    },
+    "node_modules/@dcloudio/uni-app": {
+      "version": "3.0.0-4080420251103001",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@dcloudio/uni-app/-/uni-app-3.0.0-4080420251103001.tgz",
+      "integrity": "sha512-pzBWZiICfMmAxzBvAoXlTcDYoVNrV+ztsUyDouUxZJShpquQdVqHJqHxAlvGLR7c5gHCVtnKilCKwmu6zjNGrA==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@dcloudio/uni-cloud": "3.0.0-4080420251103001",
+        "@dcloudio/uni-components": "3.0.0-4080420251103001",
+        "@dcloudio/uni-console": "3.0.0-4080420251103001",
+        "@dcloudio/uni-i18n": "3.0.0-4080420251103001",
+        "@dcloudio/uni-push": "3.0.0-4080420251103001",
+        "@dcloudio/uni-shared": "3.0.0-4080420251103001",
+        "@dcloudio/uni-stat": "3.0.0-4080420251103001",
+        "@vue/shared": "3.4.21"
+      },
+      "peerDependencies": {
+        "@dcloudio/types": "3.4.19"
+      }
+    },
+    "node_modules/@dcloudio/uni-cli-shared": {
+      "version": "3.0.0-4080420251103001",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@dcloudio/uni-cli-shared/-/uni-cli-shared-3.0.0-4080420251103001.tgz",
+      "integrity": "sha512-CI9gfUSrneTJFp52CBpAwDE9vsaxdwg4uA7n2ehKB+WLXgP2zmLp+0QoSQoFYISYll6MnfQK6Pcl8Oj1c7mKUA==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@ampproject/remapping": "^2.1.2",
+        "@babel/code-frame": "7.24.7",
+        "@babel/core": "7.25.2",
+        "@babel/parser": "7.25.6",
+        "@babel/types": "7.25.6",
+        "@dcloudio/uni-i18n": "3.0.0-4080420251103001",
+        "@dcloudio/uni-shared": "3.0.0-4080420251103001",
+        "@intlify/core-base": "9.1.9",
+        "@intlify/shared": "9.1.9",
+        "@intlify/vue-devtools": "9.1.9",
+        "@rollup/pluginutils": "5.1.0",
+        "@vue/compiler-core": "3.4.21",
+        "@vue/compiler-dom": "3.4.21",
+        "@vue/compiler-sfc": "3.4.21",
+        "@vue/compiler-ssr": "3.4.21",
+        "@vue/server-renderer": "3.4.21",
+        "@vue/shared": "3.4.21",
+        "adm-zip": "0.5.16",
+        "autoprefixer": "10.4.20",
+        "base64url": "^3.0.1",
+        "chokidar": "3.6.0",
+        "compare-versions": "^3.6.0",
+        "debug": "4.3.7",
+        "entities": "^4.5.0",
+        "es-module-lexer": "1.5.4",
+        "esbuild": "0.20.2",
+        "estree-walker": "2.0.2",
+        "fast-glob": "3.3.3",
+        "fs-extra": "10.1.0",
+        "hash-sum": "2.0.0",
+        "isbinaryfile": "5.0.2",
+        "jsonc-parser": "3.3.1",
+        "lines-and-columns": "^2.0.4",
+        "magic-string": "0.30.11",
+        "merge": "2.1.1",
+        "mime": "3.0.0",
+        "module-alias": "2.2.3",
+        "os-locale-s-fix": "^1.0.8-fix-1",
+        "picocolors": "1.1.0",
+        "postcss-import": "^14.0.2",
+        "postcss-load-config": "^3.1.1",
+        "postcss-modules": "^4.3.0",
+        "postcss-selector-parser": "6.1.2",
+        "resolve": "1.22.8",
+        "source-map-js": "1.2.1",
+        "tapable": "^2.2.0",
+        "unimport": "4.1.1",
+        "unplugin-auto-import": "19.1.0",
+        "xregexp": "3.1.0"
+      },
+      "engines": {
+        "node": "^14.18.0 || >=16.0.0"
+      }
+    },
+    "node_modules/@dcloudio/uni-cli-shared/node_modules/@vue/reactivity": {
+      "version": "3.4.21",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/reactivity/-/reactivity-3.4.21.tgz",
+      "integrity": "sha512-UhenImdc0L0/4ahGCyEzc/pZNwVgcglGy9HVzJ1Bq2Mm9qXOpP8RyNTjookw/gOCUlXSEtuZ2fUg5nrHcoqJcw==",
+      "license": "MIT",
+      "peer": true,
+      "dependencies": {
+        "@vue/shared": "3.4.21"
+      }
+    },
+    "node_modules/@dcloudio/uni-cli-shared/node_modules/@vue/runtime-core": {
+      "version": "3.4.21",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/runtime-core/-/runtime-core-3.4.21.tgz",
+      "integrity": "sha512-pQthsuYzE1XcGZznTKn73G0s14eCJcjaLvp3/DKeYWoFacD9glJoqlNBxt3W2c5S40t6CCcpPf+jG01N3ULyrA==",
+      "license": "MIT",
+      "peer": true,
+      "dependencies": {
+        "@vue/reactivity": "3.4.21",
+        "@vue/shared": "3.4.21"
+      }
+    },
+    "node_modules/@dcloudio/uni-cli-shared/node_modules/@vue/runtime-dom": {
+      "version": "3.4.21",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/runtime-dom/-/runtime-dom-3.4.21.tgz",
+      "integrity": "sha512-gvf+C9cFpevsQxbkRBS1NpU8CqxKw0ebqMvLwcGQrNpx6gqRDodqKqA+A2VZZpQ9RpK2f9yfg8VbW/EpdFUOJw==",
+      "license": "MIT",
+      "peer": true,
+      "dependencies": {
+        "@vue/runtime-core": "3.4.21",
+        "@vue/shared": "3.4.21",
+        "csstype": "^3.1.3"
+      }
+    },
+    "node_modules/@dcloudio/uni-cli-shared/node_modules/@vue/server-renderer": {
+      "version": "3.4.21",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/server-renderer/-/server-renderer-3.4.21.tgz",
+      "integrity": "sha512-aV1gXyKSN6Rz+6kZ6kr5+Ll14YzmIbeuWe7ryJl5muJ4uwSwY/aStXTixx76TwkZFJLm1aAlA/HSWEJ4EyiMkg==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/compiler-ssr": "3.4.21",
+        "@vue/shared": "3.4.21"
+      },
+      "peerDependencies": {
+        "vue": "3.4.21"
+      }
+    },
+    "node_modules/@dcloudio/uni-cli-shared/node_modules/vue": {
+      "version": "3.4.21",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/vue/-/vue-3.4.21.tgz",
+      "integrity": "sha512-5hjyV/jLEIKD/jYl4cavMcnzKwjMKohureP8ejn3hhEjwhWIhWeuzL2kJAjzl/WyVsgPY56Sy4Z40C3lVshxXA==",
+      "license": "MIT",
+      "peer": true,
+      "dependencies": {
+        "@vue/compiler-dom": "3.4.21",
+        "@vue/compiler-sfc": "3.4.21",
+        "@vue/runtime-dom": "3.4.21",
+        "@vue/server-renderer": "3.4.21",
+        "@vue/shared": "3.4.21"
+      },
+      "peerDependencies": {
+        "typescript": "*"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@dcloudio/uni-cloud": {
+      "version": "3.0.0-4080420251103001",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@dcloudio/uni-cloud/-/uni-cloud-3.0.0-4080420251103001.tgz",
+      "integrity": "sha512-RQp+MkmrW/OxfaTbN1ohNnCcj7q55ub2F0pMAr5OCKHOV/sB4NhnwTKzB7C4B1Ha1oR8ulTAfmwUiBP89dSEmg==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@dcloudio/uni-cli-shared": "3.0.0-4080420251103001",
+        "@dcloudio/uni-i18n": "3.0.0-4080420251103001",
+        "@dcloudio/uni-shared": "3.0.0-4080420251103001",
+        "@vue/shared": "3.4.21",
+        "fast-glob": "3.3.3"
+      }
+    },
+    "node_modules/@dcloudio/uni-components": {
+      "version": "3.0.0-4080420251103001",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@dcloudio/uni-components/-/uni-components-3.0.0-4080420251103001.tgz",
+      "integrity": "sha512-YBsUWVx6OrJVR/59QU9H6QX+ulEB5GK+Fp3xZPU3NiVKczSAEsE2eBU3+xSYSyndUrP4BDqV1qhjt5cgpFJcsA==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@dcloudio/uni-cloud": "3.0.0-4080420251103001",
+        "@dcloudio/uni-h5": "3.0.0-4080420251103001",
+        "@dcloudio/uni-i18n": "3.0.0-4080420251103001"
+      }
+    },
+    "node_modules/@dcloudio/uni-console": {
+      "version": "3.0.0-4080420251103001",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@dcloudio/uni-console/-/uni-console-3.0.0-4080420251103001.tgz",
+      "integrity": "sha512-bVdk8iVfld8mTUX8tB6keRm54htGMLOeJhuG1Cx8R8aOJfqTU8yuowf8ZIxIRsqs2dXV/5fHNGcbd/uFosDwDA==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@dcloudio/uni-cli-shared": "3.0.0-4080420251103001",
+        "fs-extra": "10.1.0"
+      }
+    },
+    "node_modules/@dcloudio/uni-h5": {
+      "version": "3.0.0-4080420251103001",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@dcloudio/uni-h5/-/uni-h5-3.0.0-4080420251103001.tgz",
+      "integrity": "sha512-Xl4bR2znjF6QJ2IHPen5eQiISpSWFZZaXXpFa0IyTf93xSBcSvsg9Nq5izBYPxkH4YXD/hiVHdbgwyHciq/cog==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@dcloudio/uni-h5-vite": "3.0.0-4080420251103001",
+        "@dcloudio/uni-h5-vue": "3.0.0-4080420251103001",
+        "@dcloudio/uni-i18n": "3.0.0-4080420251103001",
+        "@dcloudio/uni-shared": "3.0.0-4080420251103001",
+        "@vue/server-renderer": "3.4.21",
+        "@vue/shared": "3.4.21",
+        "debug": "4.3.7",
+        "localstorage-polyfill": "^1.0.1",
+        "postcss-selector-parser": "6.1.2",
+        "safe-area-insets": "1.4.1",
+        "vue-router": "4.4.4",
+        "xmlhttprequest": "^1.8.0"
+      }
+    },
+    "node_modules/@dcloudio/uni-h5-vite": {
+      "version": "3.0.0-4080420251103001",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@dcloudio/uni-h5-vite/-/uni-h5-vite-3.0.0-4080420251103001.tgz",
+      "integrity": "sha512-Z9wMRSI+v9aDVlvQYHPnv1gggYJk6WVMINvty/tg01bFXMkBs99TyjaT4XShPM46q8TVySd3lDRQOcY6cfUY1A==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@dcloudio/uni-cli-shared": "3.0.0-4080420251103001",
+        "@dcloudio/uni-shared": "3.0.0-4080420251103001",
+        "@rollup/pluginutils": "5.1.0",
+        "@vue/compiler-dom": "3.4.21",
+        "@vue/compiler-sfc": "3.4.21",
+        "@vue/server-renderer": "3.4.21",
+        "@vue/shared": "3.4.21",
+        "debug": "4.3.7",
+        "fs-extra": "10.1.0",
+        "mime": "3.0.0",
+        "module-alias": "2.2.3"
+      }
+    },
+    "node_modules/@dcloudio/uni-h5-vite/node_modules/@vue/reactivity": {
+      "version": "3.4.21",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/reactivity/-/reactivity-3.4.21.tgz",
+      "integrity": "sha512-UhenImdc0L0/4ahGCyEzc/pZNwVgcglGy9HVzJ1Bq2Mm9qXOpP8RyNTjookw/gOCUlXSEtuZ2fUg5nrHcoqJcw==",
+      "license": "MIT",
+      "peer": true,
+      "dependencies": {
+        "@vue/shared": "3.4.21"
+      }
+    },
+    "node_modules/@dcloudio/uni-h5-vite/node_modules/@vue/runtime-core": {
+      "version": "3.4.21",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/runtime-core/-/runtime-core-3.4.21.tgz",
+      "integrity": "sha512-pQthsuYzE1XcGZznTKn73G0s14eCJcjaLvp3/DKeYWoFacD9glJoqlNBxt3W2c5S40t6CCcpPf+jG01N3ULyrA==",
+      "license": "MIT",
+      "peer": true,
+      "dependencies": {
+        "@vue/reactivity": "3.4.21",
+        "@vue/shared": "3.4.21"
+      }
+    },
+    "node_modules/@dcloudio/uni-h5-vite/node_modules/@vue/runtime-dom": {
+      "version": "3.4.21",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/runtime-dom/-/runtime-dom-3.4.21.tgz",
+      "integrity": "sha512-gvf+C9cFpevsQxbkRBS1NpU8CqxKw0ebqMvLwcGQrNpx6gqRDodqKqA+A2VZZpQ9RpK2f9yfg8VbW/EpdFUOJw==",
+      "license": "MIT",
+      "peer": true,
+      "dependencies": {
+        "@vue/runtime-core": "3.4.21",
+        "@vue/shared": "3.4.21",
+        "csstype": "^3.1.3"
+      }
+    },
+    "node_modules/@dcloudio/uni-h5-vite/node_modules/@vue/server-renderer": {
+      "version": "3.4.21",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/server-renderer/-/server-renderer-3.4.21.tgz",
+      "integrity": "sha512-aV1gXyKSN6Rz+6kZ6kr5+Ll14YzmIbeuWe7ryJl5muJ4uwSwY/aStXTixx76TwkZFJLm1aAlA/HSWEJ4EyiMkg==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/compiler-ssr": "3.4.21",
+        "@vue/shared": "3.4.21"
+      },
+      "peerDependencies": {
+        "vue": "3.4.21"
+      }
+    },
+    "node_modules/@dcloudio/uni-h5-vite/node_modules/vue": {
+      "version": "3.4.21",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/vue/-/vue-3.4.21.tgz",
+      "integrity": "sha512-5hjyV/jLEIKD/jYl4cavMcnzKwjMKohureP8ejn3hhEjwhWIhWeuzL2kJAjzl/WyVsgPY56Sy4Z40C3lVshxXA==",
+      "license": "MIT",
+      "peer": true,
+      "dependencies": {
+        "@vue/compiler-dom": "3.4.21",
+        "@vue/compiler-sfc": "3.4.21",
+        "@vue/runtime-dom": "3.4.21",
+        "@vue/server-renderer": "3.4.21",
+        "@vue/shared": "3.4.21"
+      },
+      "peerDependencies": {
+        "typescript": "*"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@dcloudio/uni-h5-vue": {
+      "version": "3.0.0-4080420251103001",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@dcloudio/uni-h5-vue/-/uni-h5-vue-3.0.0-4080420251103001.tgz",
+      "integrity": "sha512-NbQCQFbnXIOKdek/ntwh1NslnmrZbuYRrfbe2ZVZOz8gXKfaR7GEO/GPPbTpI7mw3+iM906msksBh9HBzsD5TA==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@dcloudio/uni-shared": "3.0.0-4080420251103001",
+        "@vue/server-renderer": "3.4.21"
+      }
+    },
+    "node_modules/@dcloudio/uni-h5-vue/node_modules/@vue/reactivity": {
+      "version": "3.4.21",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/reactivity/-/reactivity-3.4.21.tgz",
+      "integrity": "sha512-UhenImdc0L0/4ahGCyEzc/pZNwVgcglGy9HVzJ1Bq2Mm9qXOpP8RyNTjookw/gOCUlXSEtuZ2fUg5nrHcoqJcw==",
+      "license": "MIT",
+      "peer": true,
+      "dependencies": {
+        "@vue/shared": "3.4.21"
+      }
+    },
+    "node_modules/@dcloudio/uni-h5-vue/node_modules/@vue/runtime-core": {
+      "version": "3.4.21",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/runtime-core/-/runtime-core-3.4.21.tgz",
+      "integrity": "sha512-pQthsuYzE1XcGZznTKn73G0s14eCJcjaLvp3/DKeYWoFacD9glJoqlNBxt3W2c5S40t6CCcpPf+jG01N3ULyrA==",
+      "license": "MIT",
+      "peer": true,
+      "dependencies": {
+        "@vue/reactivity": "3.4.21",
+        "@vue/shared": "3.4.21"
+      }
+    },
+    "node_modules/@dcloudio/uni-h5-vue/node_modules/@vue/runtime-dom": {
+      "version": "3.4.21",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/runtime-dom/-/runtime-dom-3.4.21.tgz",
+      "integrity": "sha512-gvf+C9cFpevsQxbkRBS1NpU8CqxKw0ebqMvLwcGQrNpx6gqRDodqKqA+A2VZZpQ9RpK2f9yfg8VbW/EpdFUOJw==",
+      "license": "MIT",
+      "peer": true,
+      "dependencies": {
+        "@vue/runtime-core": "3.4.21",
+        "@vue/shared": "3.4.21",
+        "csstype": "^3.1.3"
+      }
+    },
+    "node_modules/@dcloudio/uni-h5-vue/node_modules/@vue/server-renderer": {
+      "version": "3.4.21",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/server-renderer/-/server-renderer-3.4.21.tgz",
+      "integrity": "sha512-aV1gXyKSN6Rz+6kZ6kr5+Ll14YzmIbeuWe7ryJl5muJ4uwSwY/aStXTixx76TwkZFJLm1aAlA/HSWEJ4EyiMkg==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/compiler-ssr": "3.4.21",
+        "@vue/shared": "3.4.21"
+      },
+      "peerDependencies": {
+        "vue": "3.4.21"
+      }
+    },
+    "node_modules/@dcloudio/uni-h5-vue/node_modules/vue": {
+      "version": "3.4.21",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/vue/-/vue-3.4.21.tgz",
+      "integrity": "sha512-5hjyV/jLEIKD/jYl4cavMcnzKwjMKohureP8ejn3hhEjwhWIhWeuzL2kJAjzl/WyVsgPY56Sy4Z40C3lVshxXA==",
+      "license": "MIT",
+      "peer": true,
+      "dependencies": {
+        "@vue/compiler-dom": "3.4.21",
+        "@vue/compiler-sfc": "3.4.21",
+        "@vue/runtime-dom": "3.4.21",
+        "@vue/server-renderer": "3.4.21",
+        "@vue/shared": "3.4.21"
+      },
+      "peerDependencies": {
+        "typescript": "*"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@dcloudio/uni-h5/node_modules/@vue/reactivity": {
+      "version": "3.4.21",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/reactivity/-/reactivity-3.4.21.tgz",
+      "integrity": "sha512-UhenImdc0L0/4ahGCyEzc/pZNwVgcglGy9HVzJ1Bq2Mm9qXOpP8RyNTjookw/gOCUlXSEtuZ2fUg5nrHcoqJcw==",
+      "license": "MIT",
+      "peer": true,
+      "dependencies": {
+        "@vue/shared": "3.4.21"
+      }
+    },
+    "node_modules/@dcloudio/uni-h5/node_modules/@vue/runtime-core": {
+      "version": "3.4.21",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/runtime-core/-/runtime-core-3.4.21.tgz",
+      "integrity": "sha512-pQthsuYzE1XcGZznTKn73G0s14eCJcjaLvp3/DKeYWoFacD9glJoqlNBxt3W2c5S40t6CCcpPf+jG01N3ULyrA==",
+      "license": "MIT",
+      "peer": true,
+      "dependencies": {
+        "@vue/reactivity": "3.4.21",
+        "@vue/shared": "3.4.21"
+      }
+    },
+    "node_modules/@dcloudio/uni-h5/node_modules/@vue/runtime-dom": {
+      "version": "3.4.21",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/runtime-dom/-/runtime-dom-3.4.21.tgz",
+      "integrity": "sha512-gvf+C9cFpevsQxbkRBS1NpU8CqxKw0ebqMvLwcGQrNpx6gqRDodqKqA+A2VZZpQ9RpK2f9yfg8VbW/EpdFUOJw==",
+      "license": "MIT",
+      "peer": true,
+      "dependencies": {
+        "@vue/runtime-core": "3.4.21",
+        "@vue/shared": "3.4.21",
+        "csstype": "^3.1.3"
+      }
+    },
+    "node_modules/@dcloudio/uni-h5/node_modules/@vue/server-renderer": {
+      "version": "3.4.21",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/server-renderer/-/server-renderer-3.4.21.tgz",
+      "integrity": "sha512-aV1gXyKSN6Rz+6kZ6kr5+Ll14YzmIbeuWe7ryJl5muJ4uwSwY/aStXTixx76TwkZFJLm1aAlA/HSWEJ4EyiMkg==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/compiler-ssr": "3.4.21",
+        "@vue/shared": "3.4.21"
+      },
+      "peerDependencies": {
+        "vue": "3.4.21"
+      }
+    },
+    "node_modules/@dcloudio/uni-h5/node_modules/vue": {
+      "version": "3.4.21",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/vue/-/vue-3.4.21.tgz",
+      "integrity": "sha512-5hjyV/jLEIKD/jYl4cavMcnzKwjMKohureP8ejn3hhEjwhWIhWeuzL2kJAjzl/WyVsgPY56Sy4Z40C3lVshxXA==",
+      "license": "MIT",
+      "peer": true,
+      "dependencies": {
+        "@vue/compiler-dom": "3.4.21",
+        "@vue/compiler-sfc": "3.4.21",
+        "@vue/runtime-dom": "3.4.21",
+        "@vue/server-renderer": "3.4.21",
+        "@vue/shared": "3.4.21"
+      },
+      "peerDependencies": {
+        "typescript": "*"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@dcloudio/uni-i18n": {
+      "version": "3.0.0-4080420251103001",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@dcloudio/uni-i18n/-/uni-i18n-3.0.0-4080420251103001.tgz",
+      "integrity": "sha512-FHUQ8Ex0GbJsYxVZR1CrUoRc9Rm2OnfudCxpXIJSxpd1tp4sje8QhIeXwRIMEXcATc00hngTSgQrnuMuu5g72Q==",
+      "license": "Apache-2.0"
+    },
+    "node_modules/@dcloudio/uni-mp-compiler": {
+      "version": "3.0.0-4080420251103001",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@dcloudio/uni-mp-compiler/-/uni-mp-compiler-3.0.0-4080420251103001.tgz",
+      "integrity": "sha512-tMyKHyUyNl/yy/6D7M66IVxJhkaieimL2F/ZprNP8fl1QWBZqBBxokxAVeFeGbX7f9Sd1Vi+HdAowQkMCNfdDw==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@babel/generator": "7.25.6",
+        "@babel/parser": "7.25.6",
+        "@babel/types": "7.25.6",
+        "@dcloudio/uni-cli-shared": "3.0.0-4080420251103001",
+        "@dcloudio/uni-shared": "3.0.0-4080420251103001",
+        "@vue/compiler-core": "3.4.21",
+        "@vue/compiler-dom": "3.4.21",
+        "@vue/shared": "3.4.21",
+        "estree-walker": "2.0.2"
+      }
+    },
+    "node_modules/@dcloudio/uni-mp-compiler/node_modules/@babel/generator": {
+      "version": "7.25.6",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/generator/-/generator-7.25.6.tgz",
+      "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.25.6",
+        "@jridgewell/gen-mapping": "^0.3.5",
+        "@jridgewell/trace-mapping": "^0.3.25",
+        "jsesc": "^2.5.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@dcloudio/uni-mp-compiler/node_modules/jsesc": {
+      "version": "2.5.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/jsesc/-/jsesc-2.5.2.tgz",
+      "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+      "license": "MIT",
+      "bin": {
+        "jsesc": "bin/jsesc"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/@dcloudio/uni-mp-vite": {
+      "version": "3.0.0-4080420251103001",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@dcloudio/uni-mp-vite/-/uni-mp-vite-3.0.0-4080420251103001.tgz",
+      "integrity": "sha512-/MQElW4cWS0nL1gofvpY0xV1XjAcF7zVrjYIFoiht1rEwW6ec64umKOI9YGMUKi+Gx8o2Qa4XTsqChlE/MzSFg==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@dcloudio/uni-cli-shared": "3.0.0-4080420251103001",
+        "@dcloudio/uni-i18n": "3.0.0-4080420251103001",
+        "@dcloudio/uni-mp-compiler": "3.0.0-4080420251103001",
+        "@dcloudio/uni-mp-vue": "3.0.0-4080420251103001",
+        "@dcloudio/uni-shared": "3.0.0-4080420251103001",
+        "@vue/compiler-dom": "3.4.21",
+        "@vue/compiler-sfc": "3.4.21",
+        "@vue/shared": "3.4.21",
+        "debug": "4.3.7"
+      }
+    },
+    "node_modules/@dcloudio/uni-mp-vue": {
+      "version": "3.0.0-4080420251103001",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@dcloudio/uni-mp-vue/-/uni-mp-vue-3.0.0-4080420251103001.tgz",
+      "integrity": "sha512-H1xF0jLrN3WnN/xCWKy+74bSt7AHa8grz3Nw75u+77vmkuIzxiGpauUQ4FG6l2zBtiW3EM+gfcfFUMunTlHM4A==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@dcloudio/uni-shared": "3.0.0-4080420251103001",
+        "@vue/shared": "3.4.21"
+      }
+    },
+    "node_modules/@dcloudio/uni-mp-weixin": {
+      "version": "3.0.0-4080420251103001",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@dcloudio/uni-mp-weixin/-/uni-mp-weixin-3.0.0-4080420251103001.tgz",
+      "integrity": "sha512-AoaXYxNngQBjNQ6hJJ4Jzz6KDDEjYeEUs8idhX+dujUO1JgBGpWbE9gP66VdaPNmD7+aZ/1tK1fZG6JjuHW+8w==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@dcloudio/uni-cli-shared": "3.0.0-4080420251103001",
+        "@dcloudio/uni-mp-vite": "3.0.0-4080420251103001",
+        "@dcloudio/uni-mp-vue": "3.0.0-4080420251103001",
+        "@dcloudio/uni-shared": "3.0.0-4080420251103001",
+        "@vue/shared": "3.4.21",
+        "jimp": "0.10.3",
+        "licia": "1.41.1",
+        "qrcode-reader": "1.0.4",
+        "qrcode-terminal": "0.12.0",
+        "ws": "8.18.0"
+      }
+    },
+    "node_modules/@dcloudio/uni-nvue-styler": {
+      "version": "3.0.0-4080420251103001",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@dcloudio/uni-nvue-styler/-/uni-nvue-styler-3.0.0-4080420251103001.tgz",
+      "integrity": "sha512-LXwlJyfusm/bIC2qceJuJm72XNQtRXt5REG/6p+mtEYum8l4qloFJ5za1TdQXRsECXPGz6rS8YqU8iDTe70vdw==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "parse-css-font": "^4.0.0",
+        "postcss": "8.4.45"
+      }
+    },
+    "node_modules/@dcloudio/uni-nvue-styler/node_modules/postcss": {
+      "version": "8.4.45",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/postcss/-/postcss-8.4.45.tgz",
+      "integrity": "sha512-7KTLTdzdZZYscUc65XmjFiB73vBhBfbPztCYdUNvlaso9PrzjzcmjqBPR0lNGkcVlcO4BjiO5rK/qNz+XAen1Q==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/postcss/"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/postcss"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "nanoid": "^3.3.7",
+        "picocolors": "^1.0.1",
+        "source-map-js": "^1.2.0"
+      },
+      "engines": {
+        "node": "^10 || ^12 || >=14"
+      }
+    },
+    "node_modules/@dcloudio/uni-push": {
+      "version": "3.0.0-4080420251103001",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@dcloudio/uni-push/-/uni-push-3.0.0-4080420251103001.tgz",
+      "integrity": "sha512-PZ766hB4OBRuHLNJ6umNNGo8WljC67LMFgpD7ORHa6+SmS+JfncMqXufWGsuh/Q/1/QPqe4Pcm8w1zG5Bke1vw==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@dcloudio/uni-cli-shared": "3.0.0-4080420251103001"
+      }
+    },
+    "node_modules/@dcloudio/uni-shared": {
+      "version": "3.0.0-4080420251103001",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@dcloudio/uni-shared/-/uni-shared-3.0.0-4080420251103001.tgz",
+      "integrity": "sha512-+EfZmMVToYOaKBkzXix/LMGosZaFiFUyZ1vnGg3giLEcr5r8EYQ/NQ3GfthcD6pC9A114imv5Az+4HeKhcKZiw==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@vue/shared": "3.4.21"
+      }
+    },
+    "node_modules/@dcloudio/uni-stat": {
+      "version": "3.0.0-4080420251103001",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@dcloudio/uni-stat/-/uni-stat-3.0.0-4080420251103001.tgz",
+      "integrity": "sha512-CCADC5plW/etPbhORExii2pJ6m337YeHB+V1R7w6JBmFdGqqYj7+3Vq24wWSSECc4hpiZFLk3dNzu5/NNw2p1Q==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@dcloudio/uni-cli-shared": "3.0.0-4080420251103001",
+        "@dcloudio/uni-shared": "3.0.0-4080420251103001",
+        "debug": "4.3.7"
+      }
+    },
+    "node_modules/@dcloudio/vite-plugin-uni": {
+      "version": "3.0.0-4080420251103001",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@dcloudio/vite-plugin-uni/-/vite-plugin-uni-3.0.0-4080420251103001.tgz",
+      "integrity": "sha512-r9UOGDrHqvOV2p9IW+4wql8BJJjKgPRWH9Y0rkztp7GjvtUqCkkoVwlh5sJXYwqPNZL5JWPuj0Cl+ZtTg1njyw==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@babel/core": "7.25.2",
+        "@babel/plugin-syntax-import-meta": "^7.10.4",
+        "@babel/plugin-transform-typescript": "^7.23.3",
+        "@dcloudio/uni-cli-shared": "3.0.0-4080420251103001",
+        "@dcloudio/uni-nvue-styler": "3.0.0-4080420251103001",
+        "@dcloudio/uni-shared": "3.0.0-4080420251103001",
+        "@rollup/pluginutils": "5.1.0",
+        "@vitejs/plugin-legacy": "5.3.2",
+        "@vitejs/plugin-vue": "5.2.4",
+        "@vitejs/plugin-vue-jsx": "3.1.0",
+        "@vue/compiler-core": "3.4.21",
+        "@vue/compiler-dom": "3.4.21",
+        "@vue/compiler-sfc": "3.4.21",
+        "@vue/shared": "3.4.21",
+        "cac": "6.7.9",
+        "debug": "4.3.7",
+        "estree-walker": "2.0.2",
+        "express": "4.20.0",
+        "fast-glob": "3.3.3",
+        "fs-extra": "10.1.0",
+        "hash-sum": "2.0.0",
+        "jsonc-parser": "3.3.1",
+        "magic-string": "0.30.11",
+        "picocolors": "1.1.0",
+        "terser": "^5.4.0",
+        "unplugin-auto-import": "19.1.0"
+      },
+      "bin": {
+        "uni": "bin/uni.js"
+      },
+      "engines": {
+        "node": "^14.18.0 || >=16.0.0"
+      },
+      "peerDependencies": {
+        "vite": "5.2.8"
+      }
+    },
+    "node_modules/@emnapi/runtime": {
+      "version": "1.11.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@emnapi/runtime/-/runtime-1.11.1.tgz",
+      "integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==",
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "tslib": "^2.4.0"
+      }
+    },
+    "node_modules/@esbuild/aix-ppc64": {
+      "version": "0.20.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz",
+      "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==",
+      "cpu": [
+        "ppc64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "aix"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/android-arm": {
+      "version": "0.20.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@esbuild/android-arm/-/android-arm-0.20.2.tgz",
+      "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==",
+      "cpu": [
+        "arm"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/android-arm64": {
+      "version": "0.20.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz",
+      "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/android-x64": {
+      "version": "0.20.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@esbuild/android-x64/-/android-x64-0.20.2.tgz",
+      "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/darwin-arm64": {
+      "version": "0.20.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz",
+      "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/darwin-x64": {
+      "version": "0.20.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz",
+      "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/freebsd-arm64": {
+      "version": "0.20.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz",
+      "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/freebsd-x64": {
+      "version": "0.20.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz",
+      "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/linux-arm": {
+      "version": "0.20.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz",
+      "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==",
+      "cpu": [
+        "arm"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/linux-arm64": {
+      "version": "0.20.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz",
+      "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/linux-ia32": {
+      "version": "0.20.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz",
+      "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==",
+      "cpu": [
+        "ia32"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/linux-loong64": {
+      "version": "0.20.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz",
+      "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==",
+      "cpu": [
+        "loong64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/linux-mips64el": {
+      "version": "0.20.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz",
+      "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==",
+      "cpu": [
+        "mips64el"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/linux-ppc64": {
+      "version": "0.20.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz",
+      "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==",
+      "cpu": [
+        "ppc64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/linux-riscv64": {
+      "version": "0.20.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz",
+      "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==",
+      "cpu": [
+        "riscv64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/linux-s390x": {
+      "version": "0.20.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz",
+      "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==",
+      "cpu": [
+        "s390x"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/linux-x64": {
+      "version": "0.20.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz",
+      "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/netbsd-x64": {
+      "version": "0.20.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz",
+      "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "netbsd"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/openbsd-x64": {
+      "version": "0.20.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz",
+      "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "openbsd"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/sunos-x64": {
+      "version": "0.20.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz",
+      "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "sunos"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/win32-arm64": {
+      "version": "0.20.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz",
+      "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/win32-ia32": {
+      "version": "0.20.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz",
+      "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==",
+      "cpu": [
+        "ia32"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/win32-x64": {
+      "version": "0.20.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz",
+      "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@img/colour": {
+      "version": "1.1.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@img/colour/-/colour-1.1.0.tgz",
+      "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@img/sharp-darwin-arm64": {
+      "version": "0.35.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.35.2.tgz",
+      "integrity": "sha512-eEieHsMksAW4IiO5NzauESRl2D2qz3J/kwUxUrSfV06A93eEaRfMpHXyUb1mAqrR7i8U9A0GRqE9pjn6u1Jjpg==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">=20.9.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      },
+      "optionalDependencies": {
+        "@img/sharp-libvips-darwin-arm64": "1.3.1"
+      }
+    },
+    "node_modules/@img/sharp-darwin-x64": {
+      "version": "0.35.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.35.2.tgz",
+      "integrity": "sha512-BaktuGPCeHJMARpodR8jK4uKiZrPAy9WrfQW0sdI37clracq8Bp01AYS3SZgi5FS/y5twa9t4+LIuuxQjqRrWw==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">=20.9.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      },
+      "optionalDependencies": {
+        "@img/sharp-libvips-darwin-x64": "1.3.1"
+      }
+    },
+    "node_modules/@img/sharp-freebsd-wasm32": {
+      "version": "0.35.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@img/sharp-freebsd-wasm32/-/sharp-freebsd-wasm32-0.35.2.tgz",
+      "integrity": "sha512-YoAxdnd8hPUkvLHd3bWY+YA8nw3xM/RyRopYucNsWHVSan8NLVM3X2volsfoRDcXdUJPg6tXahSd7HXPK7lRnw==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "dependencies": {
+        "@img/sharp-wasm32": "0.35.2"
+      },
+      "engines": {
+        "node": ">=20.9.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      }
+    },
+    "node_modules/@img/sharp-libvips-darwin-arm64": {
+      "version": "1.3.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.3.1.tgz",
+      "integrity": "sha512-4V/M3roRMTYjiwZY9IOVQOE8OyeCxFAkYmyZDrZl51uOKjibm3oeEJ4WAmLxutAfzFbC9jqUiPs2gbnGflH+7g==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "LGPL-3.0-or-later",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      }
+    },
+    "node_modules/@img/sharp-libvips-darwin-x64": {
+      "version": "1.3.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.3.1.tgz",
+      "integrity": "sha512-c0/DxItpJv2+dGhgycJBBgotdqruGYDvA79drdh0MD1dFpy7JzJ/PlXwi1H4rFf0eTy8tgbI91aHDnZIceY3jQ==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "LGPL-3.0-or-later",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      }
+    },
+    "node_modules/@img/sharp-libvips-linux-arm": {
+      "version": "1.3.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.3.1.tgz",
+      "integrity": "sha512-aGGy9aWzXgHBG7HNyQPWorZthlp7+x6fDRoPAQbGO3ThcttuTyKIx3NuSHb6zb4gBNq6/yNn9f1cy9nFKS/Vmg==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "license": "LGPL-3.0-or-later",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      }
+    },
+    "node_modules/@img/sharp-libvips-linux-arm64": {
+      "version": "1.3.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.3.1.tgz",
+      "integrity": "sha512-JznefmcK9j1JKPz8AkQDh89kjojubyfOasWBPKfzMIhPwsgDy9evpE/naJTXXXmghS1iFwR8u/kTwh/I2/+GCw==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "LGPL-3.0-or-later",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      }
+    },
+    "node_modules/@img/sharp-libvips-linux-ppc64": {
+      "version": "1.3.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.3.1.tgz",
+      "integrity": "sha512-1EkwGNCZk6iWNCMWqrvdJ+r1j0PT1zIz60CNPhYnJlK/zyeWqlsPZIe+ocBVqPF8k/Ssee/NCk+tE9Ryrko6ng==",
+      "cpu": [
+        "ppc64"
+      ],
+      "dev": true,
+      "license": "LGPL-3.0-or-later",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      }
+    },
+    "node_modules/@img/sharp-libvips-linux-riscv64": {
+      "version": "1.3.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.3.1.tgz",
+      "integrity": "sha512-Ilays+w2bXdnxzxtQdmXR62u8o8GYa3eL4+Gr+1KiE4xperMZUslRaVPJwwPkzlHEjGfXAfRVAa/7CYCtSqsBw==",
+      "cpu": [
+        "riscv64"
+      ],
+      "dev": true,
+      "license": "LGPL-3.0-or-later",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      }
+    },
+    "node_modules/@img/sharp-libvips-linux-s390x": {
+      "version": "1.3.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.3.1.tgz",
+      "integrity": "sha512-VfBwVHQTbRoj4XlpA/KLZ7ltgMpz+4WSejFzQ+GnoImjo1PtEJ59QB2qR1xQEeRPYIkNrPIm2L4cICMvz4C2ew==",
+      "cpu": [
+        "s390x"
+      ],
+      "dev": true,
+      "license": "LGPL-3.0-or-later",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      }
+    },
+    "node_modules/@img/sharp-libvips-linux-x64": {
+      "version": "1.3.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.3.1.tgz",
+      "integrity": "sha512-+c8ukgwU62DS54nCAjw7keOfHUkmr0B5QHEdcOqRnodF/MNXJbVI8Eopoj4B/0H8Asr65I+A4Amrn7a85/md6A==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "LGPL-3.0-or-later",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      }
+    },
+    "node_modules/@img/sharp-libvips-linuxmusl-arm64": {
+      "version": "1.3.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.3.1.tgz",
+      "integrity": "sha512-qlKb/pwbkAi1WMsJrYHk7CuDrd12s27U2QnRhFYUoJNrRCmkosMTttuRFat/DDB3IlDm5qE1TJgZ4JDnHX8Ldw==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "LGPL-3.0-or-later",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      }
+    },
+    "node_modules/@img/sharp-libvips-linuxmusl-x64": {
+      "version": "1.3.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.3.1.tgz",
+      "integrity": "sha512-yO21HwoUVLN8Qa+/SBjQLMYwBWAVJjeGPNe+hc0OUeMeifEtJqu5a1c4HayE1nNpDih9y3/KkoltfkDodmKAlg==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "LGPL-3.0-or-later",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      }
+    },
+    "node_modules/@img/sharp-linux-arm": {
+      "version": "0.35.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@img/sharp-linux-arm/-/sharp-linux-arm-0.35.2.tgz",
+      "integrity": "sha512-SE4kzF2mepn6z+6E7L6lsV8FzuLL6IPQdyX8ZiwROAG/G8td+hP/m7FsFPwidtrF19gvajuC9l6TxAVcsA4S7A==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=20.9.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      },
+      "optionalDependencies": {
+        "@img/sharp-libvips-linux-arm": "1.3.1"
+      }
+    },
+    "node_modules/@img/sharp-linux-arm64": {
+      "version": "0.35.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.35.2.tgz",
+      "integrity": "sha512-af12Pnd0ZGu2HfP8NayB0kk6eC/lrfbQE6HlR4jD+34wdJ1Vw9TF6TMn6ZvffT+WgqVsl0hRbmNvz2u/23VmwA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=20.9.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      },
+      "optionalDependencies": {
+        "@img/sharp-libvips-linux-arm64": "1.3.1"
+      }
+    },
+    "node_modules/@img/sharp-linux-ppc64": {
+      "version": "0.35.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.35.2.tgz",
+      "integrity": "sha512-hYSBm7zcNtDCozCxQHYZJiu63b/bXsgRZuOxCIBZsStMM9Vap47iFHdbX4kCvQsblPB/k+clhELpdQJHQLSHvg==",
+      "cpu": [
+        "ppc64"
+      ],
+      "dev": true,
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=20.9.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      },
+      "optionalDependencies": {
+        "@img/sharp-libvips-linux-ppc64": "1.3.1"
+      }
+    },
+    "node_modules/@img/sharp-linux-riscv64": {
+      "version": "0.35.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.35.2.tgz",
+      "integrity": "sha512-qQt0Kc13+Hoan/Awq/qMSQw3L+RI1NCRPgD5cUJ/1WSSmIoysLOc72jlRM3E0OHN9Yr313jgeQ2T+zW+F03QFA==",
+      "cpu": [
+        "riscv64"
+      ],
+      "dev": true,
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=20.9.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      },
+      "optionalDependencies": {
+        "@img/sharp-libvips-linux-riscv64": "1.3.1"
+      }
+    },
+    "node_modules/@img/sharp-linux-s390x": {
+      "version": "0.35.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.35.2.tgz",
+      "integrity": "sha512-E4fLLfRPzDLlEeDaTzI98OFLcv++WL5ChLLMwPoVd0CIoZQqupBSNbOisPL5am9XsbQ9T84+iiMpUvbFtkunbA==",
+      "cpu": [
+        "s390x"
+      ],
+      "dev": true,
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=20.9.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      },
+      "optionalDependencies": {
+        "@img/sharp-libvips-linux-s390x": "1.3.1"
+      }
+    },
+    "node_modules/@img/sharp-linux-x64": {
+      "version": "0.35.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@img/sharp-linux-x64/-/sharp-linux-x64-0.35.2.tgz",
+      "integrity": "sha512-gi0zFJJRLswfCZmHtJdikXPOc5u7qamSOS3NHedLqLd4W8Q0NqjdBr6TTRIgsfFjqfTsHFgdfvJ9LwqSgcHiAA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=20.9.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      },
+      "optionalDependencies": {
+        "@img/sharp-libvips-linux-x64": "1.3.1"
+      }
+    },
+    "node_modules/@img/sharp-linuxmusl-arm64": {
+      "version": "0.35.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.35.2.tgz",
+      "integrity": "sha512-siWbOW1u6HFnFLrp0waKyW7VEf7jYvcDWdrXEFa8AkdAQgEvuu5Fz8/Y70w9EeqAdwDtfU012BhEHHaDqvQNzg==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=20.9.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      },
+      "optionalDependencies": {
+        "@img/sharp-libvips-linuxmusl-arm64": "1.3.1"
+      }
+    },
+    "node_modules/@img/sharp-linuxmusl-x64": {
+      "version": "0.35.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.35.2.tgz",
+      "integrity": "sha512-YBqMMcjDi4QGYiSn4vNOYBhmlC4z5AXqkOUUqI2e0AFA4urNv4ESgOgwNl3K+4etQhha0twXlzeF20bbULm9Yg==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=20.9.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      },
+      "optionalDependencies": {
+        "@img/sharp-libvips-linuxmusl-x64": "1.3.1"
+      }
+    },
+    "node_modules/@img/sharp-wasm32": {
+      "version": "0.35.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@img/sharp-wasm32/-/sharp-wasm32-0.35.2.tgz",
+      "integrity": "sha512-Mrv4JQNYVQ94xH+jzZ9r+gowleN8mv2FTgKT+PI6bx5C0G8TdNYndu161pg2i7uoBwxy2ImPMHrJOM2LZef7Bw==",
+      "dev": true,
+      "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT",
+      "optional": true,
+      "dependencies": {
+        "@emnapi/runtime": "^1.11.1"
+      },
+      "engines": {
+        "node": ">=20.9.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      }
+    },
+    "node_modules/@img/sharp-webcontainers-wasm32": {
+      "version": "0.35.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@img/sharp-webcontainers-wasm32/-/sharp-webcontainers-wasm32-0.35.2.tgz",
+      "integrity": "sha512-QNV27pxs9wpApEiCfvHM1RDoP1w1+2KrUWWDPEhEwg+latvOrfuhWrHWZKwdSFwU6jh3myjw/yOCRsUIuOft3g==",
+      "cpu": [
+        "wasm32"
+      ],
+      "dev": true,
+      "license": "Apache-2.0",
+      "optional": true,
+      "dependencies": {
+        "@img/sharp-wasm32": "0.35.2"
+      },
+      "engines": {
+        "node": ">=20.9.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      }
+    },
+    "node_modules/@img/sharp-win32-arm64": {
+      "version": "0.35.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.35.2.tgz",
+      "integrity": "sha512-BiVRYc/t6/Vl3e1hBx0hugG4oN9Pydf4fgMSpxTQJmwGUg/YoXTWHiFeRymHfCZzifxu4F4rpk/I67D0LQ20wQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "Apache-2.0 AND LGPL-3.0-or-later",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=20.9.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      }
+    },
+    "node_modules/@img/sharp-win32-ia32": {
+      "version": "0.35.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.35.2.tgz",
+      "integrity": "sha512-YYEhx9PImCC7T0tI8JDMi4DB9LwLCXCU5OWNYEXAxh5Q1ShKkyC6byxzoBJ3gEFDnH2lQckWuDe70G7mB2XJog==",
+      "cpu": [
+        "ia32"
+      ],
+      "dev": true,
+      "license": "Apache-2.0 AND LGPL-3.0-or-later",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": "^20.9.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      }
+    },
+    "node_modules/@img/sharp-win32-x64": {
+      "version": "0.35.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@img/sharp-win32-x64/-/sharp-win32-x64-0.35.2.tgz",
+      "integrity": "sha512-imoOyBcoM/iiUr4J6VPpCNjPnjvP/Gks95898yB8YqoGGYmHYbOyCuNv9FMhFgtaiHFGbHW8bxKqRV6VjtXThQ==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "Apache-2.0 AND LGPL-3.0-or-later",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=20.9.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      }
+    },
+    "node_modules/@intlify/core-base": {
+      "version": "9.1.9",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@intlify/core-base/-/core-base-9.1.9.tgz",
+      "integrity": "sha512-x5T0p/Ja0S8hs5xs+ImKyYckVkL4CzcEXykVYYV6rcbXxJTe2o58IquSqX9bdncVKbRZP7GlBU1EcRaQEEJ+vw==",
+      "license": "MIT",
+      "dependencies": {
+        "@intlify/devtools-if": "9.1.9",
+        "@intlify/message-compiler": "9.1.9",
+        "@intlify/message-resolver": "9.1.9",
+        "@intlify/runtime": "9.1.9",
+        "@intlify/shared": "9.1.9",
+        "@intlify/vue-devtools": "9.1.9"
+      },
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@intlify/devtools-if": {
+      "version": "9.1.9",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@intlify/devtools-if/-/devtools-if-9.1.9.tgz",
+      "integrity": "sha512-oKSMKjttG3Ut/1UGEZjSdghuP3fwA15zpDPcjkf/1FjlOIm6uIBGMNS5jXzsZy593u+P/YcnrZD6cD3IVFz9vQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@intlify/shared": "9.1.9"
+      },
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@intlify/message-compiler": {
+      "version": "9.1.9",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@intlify/message-compiler/-/message-compiler-9.1.9.tgz",
+      "integrity": "sha512-6YgCMF46Xd0IH2hMRLCssZI3gFG4aywidoWQ3QP4RGYQXQYYfFC54DxhSgfIPpVoPLQ+4AD29eoYmhiHZ+qLFQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@intlify/message-resolver": "9.1.9",
+        "@intlify/shared": "9.1.9",
+        "source-map": "0.6.1"
+      },
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@intlify/message-resolver": {
+      "version": "9.1.9",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@intlify/message-resolver/-/message-resolver-9.1.9.tgz",
+      "integrity": "sha512-Lx/DBpigeK0sz2BBbzv5mu9/dAlt98HxwbG7xLawC3O2xMF9MNWU5FtOziwYG6TDIjNq0O/3ZbOJAxwITIWXEA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@intlify/runtime": {
+      "version": "9.1.9",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@intlify/runtime/-/runtime-9.1.9.tgz",
+      "integrity": "sha512-XgPw8+UlHCiie3fI41HPVa/VDJb3/aSH7bLhY1hJvlvNV713PFtb4p4Jo+rlE0gAoMsMCGcsiT982fImolSltg==",
+      "license": "MIT",
+      "dependencies": {
+        "@intlify/message-compiler": "9.1.9",
+        "@intlify/message-resolver": "9.1.9",
+        "@intlify/shared": "9.1.9"
+      },
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@intlify/shared": {
+      "version": "9.1.9",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@intlify/shared/-/shared-9.1.9.tgz",
+      "integrity": "sha512-xKGM1d0EAxdDFCWedcYXOm6V5Pfw/TMudd6/qCdEb4tv0hk9EKeg7lwQF1azE0dP2phvx0yXxrt7UQK+IZjNdw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@intlify/vue-devtools": {
+      "version": "9.1.9",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@intlify/vue-devtools/-/vue-devtools-9.1.9.tgz",
+      "integrity": "sha512-YPehH9uL4vZcGXky4Ev5qQIITnHKIvsD2GKGXgqf+05osMUI6WSEQHaN9USRa318Rs8RyyPCiDfmA0hRu3k7og==",
+      "license": "MIT",
+      "dependencies": {
+        "@intlify/message-resolver": "9.1.9",
+        "@intlify/runtime": "9.1.9",
+        "@intlify/shared": "9.1.9"
+      },
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@jimp/bmp": {
+      "version": "0.10.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@jimp/bmp/-/bmp-0.10.3.tgz",
+      "integrity": "sha512-keMOc5woiDmONXsB/6aXLR4Z5Q+v8lFq3EY2rcj2FmstbDMhRuGbmcBxlEgOqfRjwvtf/wOtJ3Of37oAWtVfLg==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "bmp-js": "^0.1.0",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/core": {
+      "version": "0.10.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@jimp/core/-/core-0.10.3.tgz",
+      "integrity": "sha512-Gd5IpL3U2bFIO57Fh/OA3HCpWm4uW/pU01E75rI03BXfTdz3T+J7TwvyG1XaqsQ7/DSlS99GXtLQPlfFIe28UA==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "any-base": "^1.1.0",
+        "buffer": "^5.2.0",
+        "core-js": "^3.4.1",
+        "exif-parser": "^0.1.12",
+        "file-type": "^9.0.0",
+        "load-bmfont": "^1.3.1",
+        "mkdirp": "^0.5.1",
+        "phin": "^2.9.1",
+        "pixelmatch": "^4.0.2",
+        "tinycolor2": "^1.4.1"
+      }
+    },
+    "node_modules/@jimp/custom": {
+      "version": "0.10.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@jimp/custom/-/custom-0.10.3.tgz",
+      "integrity": "sha512-nZmSI+jwTi5IRyNLbKSXQovoeqsw+D0Jn0SxW08wYQvdkiWA8bTlDQFgQ7HVwCAKBm8oKkDB/ZEo9qvHJ+1gAQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/core": "^0.10.3",
+        "core-js": "^3.4.1"
+      }
+    },
+    "node_modules/@jimp/gif": {
+      "version": "0.10.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@jimp/gif/-/gif-0.10.3.tgz",
+      "integrity": "sha512-vjlRodSfz1CrUvvrnUuD/DsLK1GHB/yDZXHthVdZu23zYJIW7/WrIiD1IgQ5wOMV7NocfrvPn2iqUfBP81/WWA==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1",
+        "omggif": "^1.0.9"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/jpeg": {
+      "version": "0.10.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@jimp/jpeg/-/jpeg-0.10.3.tgz",
+      "integrity": "sha512-AAANwgUZOt6f6P7LZxY9lyJ9xclqutYJlsxt3JbriXUGJgrrFAIkcKcqv1nObgmQASSAQKYaMV9KdHjMlWFKlQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1",
+        "jpeg-js": "^0.3.4"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-blit": {
+      "version": "0.10.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@jimp/plugin-blit/-/plugin-blit-0.10.3.tgz",
+      "integrity": "sha512-5zlKlCfx4JWw9qUVC7GI4DzXyxDWyFvgZLaoGFoT00mlXlN75SarlDwc9iZ/2e2kp4bJWxz3cGgG4G/WXrbg3Q==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-blur": {
+      "version": "0.10.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@jimp/plugin-blur/-/plugin-blur-0.10.3.tgz",
+      "integrity": "sha512-cTOK3rjh1Yjh23jSfA6EHCHjsPJDEGLC8K2y9gM7dnTUK1y9NNmkFS23uHpyjgsWFIoH9oRh2SpEs3INjCpZhQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-circle": {
+      "version": "0.10.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@jimp/plugin-circle/-/plugin-circle-0.10.3.tgz",
+      "integrity": "sha512-51GAPIVelqAcfuUpaM5JWJ0iWl4vEjNXB7p4P7SX5udugK5bxXUjO6KA2qgWmdpHuCKtoNgkzWU9fNSuYp7tCA==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-color": {
+      "version": "0.10.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@jimp/plugin-color/-/plugin-color-0.10.3.tgz",
+      "integrity": "sha512-RgeHUElmlTH7vpI4WyQrz6u59spiKfVQbsG/XUzfWGamFSixa24ZDwX/yV/Ts+eNaz7pZeIuv533qmKPvw2ujg==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1",
+        "tinycolor2": "^1.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-contain": {
+      "version": "0.10.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@jimp/plugin-contain/-/plugin-contain-0.10.3.tgz",
+      "integrity": "sha512-bYJKW9dqzcB0Ihc6u7jSyKa3juStzbLs2LFr6fu8TzA2WkMS/R8h+ddkiO36+F9ILTWHP0CIA3HFe5OdOGcigw==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5",
+        "@jimp/plugin-blit": ">=0.3.5",
+        "@jimp/plugin-resize": ">=0.3.5",
+        "@jimp/plugin-scale": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-cover": {
+      "version": "0.10.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@jimp/plugin-cover/-/plugin-cover-0.10.3.tgz",
+      "integrity": "sha512-pOxu0cM0BRPzdV468n4dMocJXoMbTnARDY/EpC3ZW15SpMuc/dr1KhWQHgoQX5kVW1Wt8zgqREAJJCQ5KuPKDA==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5",
+        "@jimp/plugin-crop": ">=0.3.5",
+        "@jimp/plugin-resize": ">=0.3.5",
+        "@jimp/plugin-scale": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-crop": {
+      "version": "0.10.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@jimp/plugin-crop/-/plugin-crop-0.10.3.tgz",
+      "integrity": "sha512-nB7HgOjjl9PgdHr076xZ3Sr6qHYzeBYBs9qvs3tfEEUeYMNnvzgCCGtUl6eMakazZFCMk3mhKmcB9zQuHFOvkg==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-displace": {
+      "version": "0.10.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@jimp/plugin-displace/-/plugin-displace-0.10.3.tgz",
+      "integrity": "sha512-8t3fVKCH5IVqI4lewe4lFFjpxxr69SQCz5/tlpDLQZsrNScNJivHdQ09zljTrVTCSgeCqQJIKgH2Q7Sk/pAZ0w==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-dither": {
+      "version": "0.10.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@jimp/plugin-dither/-/plugin-dither-0.10.3.tgz",
+      "integrity": "sha512-JCX/oNSnEg1kGQ8ffZ66bEgQOLCY3Rn+lrd6v1jjLy/mn9YVZTMsxLtGCXpiCDC2wG/KTmi4862ysmP9do9dAQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-fisheye": {
+      "version": "0.10.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@jimp/plugin-fisheye/-/plugin-fisheye-0.10.3.tgz",
+      "integrity": "sha512-RRZb1wqe+xdocGcFtj2xHU7sF7xmEZmIa6BmrfSchjyA2b32TGPWKnP3qyj7p6LWEsXn+19hRYbjfyzyebPElQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-flip": {
+      "version": "0.10.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@jimp/plugin-flip/-/plugin-flip-0.10.3.tgz",
+      "integrity": "sha512-0epbi8XEzp0wmSjoW9IB0iMu0yNF17aZOxLdURCN3Zr+8nWPs5VNIMqSVa1Y62GSyiMDpVpKF/ITiXre+EqrPg==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5",
+        "@jimp/plugin-rotate": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-gaussian": {
+      "version": "0.10.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@jimp/plugin-gaussian/-/plugin-gaussian-0.10.3.tgz",
+      "integrity": "sha512-25eHlFbHUDnMMGpgRBBeQ2AMI4wsqCg46sue0KklI+c2BaZ+dGXmJA5uT8RTOrt64/K9Wz5E+2n7eBnny4dfpQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-invert": {
+      "version": "0.10.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@jimp/plugin-invert/-/plugin-invert-0.10.3.tgz",
+      "integrity": "sha512-effYSApWY/FbtlzqsKXlTLkgloKUiHBKjkQnqh5RL4oQxh/33j6aX+HFdDyQKtsXb8CMd4xd7wyiD2YYabTa0g==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-mask": {
+      "version": "0.10.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@jimp/plugin-mask/-/plugin-mask-0.10.3.tgz",
+      "integrity": "sha512-twrg8q8TIhM9Z6Jcu9/5f+OCAPaECb0eKrrbbIajJqJ3bCUlj5zbfgIhiQIzjPJ6KjpnFPSqHQfHkU1Vvk/nVw==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-normalize": {
+      "version": "0.10.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@jimp/plugin-normalize/-/plugin-normalize-0.10.3.tgz",
+      "integrity": "sha512-xkb5eZI/mMlbwKkDN79+1/t/+DBo8bBXZUMsT4gkFgMRKNRZ6NQPxlv1d3QpRzlocsl6UMxrHnhgnXdLAcgrXw==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-print": {
+      "version": "0.10.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@jimp/plugin-print/-/plugin-print-0.10.3.tgz",
+      "integrity": "sha512-wjRiI6yjXsAgMe6kVjizP+RgleUCLkH256dskjoNvJzmzbEfO7xQw9g6M02VET+emnbY0CO83IkrGm2q43VRyg==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1",
+        "load-bmfont": "^1.4.0"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5",
+        "@jimp/plugin-blit": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-resize": {
+      "version": "0.10.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@jimp/plugin-resize/-/plugin-resize-0.10.3.tgz",
+      "integrity": "sha512-rf8YmEB1d7Sg+g4LpqF0Mp+dfXfb6JFJkwlAIWPUOR7lGsPWALavEwTW91c0etEdnp0+JB9AFpy6zqq7Lwkq6w==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-rotate": {
+      "version": "0.10.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@jimp/plugin-rotate/-/plugin-rotate-0.10.3.tgz",
+      "integrity": "sha512-YXLlRjm18fkW9MOHUaVAxWjvgZM851ofOipytz5FyKp4KZWDLk+dZK1JNmVmK7MyVmAzZ5jsgSLhIgj+GgN0Eg==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5",
+        "@jimp/plugin-blit": ">=0.3.5",
+        "@jimp/plugin-crop": ">=0.3.5",
+        "@jimp/plugin-resize": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-scale": {
+      "version": "0.10.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@jimp/plugin-scale/-/plugin-scale-0.10.3.tgz",
+      "integrity": "sha512-5DXD7x7WVcX1gUgnlFXQa8F+Q3ThRYwJm+aesgrYvDOY+xzRoRSdQvhmdd4JEEue3lyX44DvBSgCIHPtGcEPaw==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5",
+        "@jimp/plugin-resize": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-shadow": {
+      "version": "0.10.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@jimp/plugin-shadow/-/plugin-shadow-0.10.3.tgz",
+      "integrity": "sha512-/nkFXpt2zVcdP4ETdkAUL0fSzyrC5ZFxdcphbYBodqD7fXNqChS/Un1eD4xCXWEpW8cnG9dixZgQgStjywH0Mg==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5",
+        "@jimp/plugin-blur": ">=0.3.5",
+        "@jimp/plugin-resize": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-threshold": {
+      "version": "0.10.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@jimp/plugin-threshold/-/plugin-threshold-0.10.3.tgz",
+      "integrity": "sha512-Dzh0Yq2wXP2SOnxcbbiyA4LJ2luwrdf1MghNIt9H+NX7B+IWw/N8qA2GuSm9n4BPGSLluuhdAWJqHcTiREriVA==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5",
+        "@jimp/plugin-color": ">=0.8.0",
+        "@jimp/plugin-resize": ">=0.8.0"
+      }
+    },
+    "node_modules/@jimp/plugins": {
+      "version": "0.10.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@jimp/plugins/-/plugins-0.10.3.tgz",
+      "integrity": "sha512-jTT3/7hOScf0EIKiAXmxwayHhryhc1wWuIe3FrchjDjr9wgIGNN2a7XwCgPl3fML17DXK1x8EzDneCdh261bkw==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/plugin-blit": "^0.10.3",
+        "@jimp/plugin-blur": "^0.10.3",
+        "@jimp/plugin-circle": "^0.10.3",
+        "@jimp/plugin-color": "^0.10.3",
+        "@jimp/plugin-contain": "^0.10.3",
+        "@jimp/plugin-cover": "^0.10.3",
+        "@jimp/plugin-crop": "^0.10.3",
+        "@jimp/plugin-displace": "^0.10.3",
+        "@jimp/plugin-dither": "^0.10.3",
+        "@jimp/plugin-fisheye": "^0.10.3",
+        "@jimp/plugin-flip": "^0.10.3",
+        "@jimp/plugin-gaussian": "^0.10.3",
+        "@jimp/plugin-invert": "^0.10.3",
+        "@jimp/plugin-mask": "^0.10.3",
+        "@jimp/plugin-normalize": "^0.10.3",
+        "@jimp/plugin-print": "^0.10.3",
+        "@jimp/plugin-resize": "^0.10.3",
+        "@jimp/plugin-rotate": "^0.10.3",
+        "@jimp/plugin-scale": "^0.10.3",
+        "@jimp/plugin-shadow": "^0.10.3",
+        "@jimp/plugin-threshold": "^0.10.3",
+        "core-js": "^3.4.1",
+        "timm": "^1.6.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/png": {
+      "version": "0.10.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@jimp/png/-/png-0.10.3.tgz",
+      "integrity": "sha512-YKqk/dkl+nGZxSYIDQrqhmaP8tC3IK8H7dFPnnzFVvbhDnyYunqBZZO3SaZUKTichClRw8k/CjBhbc+hifSGWg==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1",
+        "pngjs": "^3.3.3"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/tiff": {
+      "version": "0.10.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@jimp/tiff/-/tiff-0.10.3.tgz",
+      "integrity": "sha512-7EsJzZ5Y/EtinkBGuwX3Bi4S+zgbKouxjt9c82VJTRJOQgLWsE/RHqcyRCOQBhHAZ9QexYmDz34medfLKdoX0g==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "core-js": "^3.4.1",
+        "utif": "^2.0.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/types": {
+      "version": "0.10.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@jimp/types/-/types-0.10.3.tgz",
+      "integrity": "sha512-XGmBakiHZqseSWr/puGN+CHzx0IKBSpsKlmEmsNV96HKDiP6eu8NSnwdGCEq2mmIHe0JNcg1hqg59hpwtQ7Tiw==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/bmp": "^0.10.3",
+        "@jimp/gif": "^0.10.3",
+        "@jimp/jpeg": "^0.10.3",
+        "@jimp/png": "^0.10.3",
+        "@jimp/tiff": "^0.10.3",
+        "core-js": "^3.4.1",
+        "timm": "^1.6.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/utils": {
+      "version": "0.10.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@jimp/utils/-/utils-0.10.3.tgz",
+      "integrity": "sha512-VcSlQhkil4ReYmg1KkN+WqHyYfZ2XfZxDsKAHSfST1GEz/RQHxKZbX+KhFKtKflnL0F4e6DlNQj3vznMNXCR2w==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "core-js": "^3.4.1",
+        "regenerator-runtime": "^0.13.3"
+      }
+    },
+    "node_modules/@jimp/utils/node_modules/regenerator-runtime": {
+      "version": "0.13.11",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
+      "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==",
+      "license": "MIT"
+    },
+    "node_modules/@jridgewell/gen-mapping": {
+      "version": "0.3.13",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
+      "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/sourcemap-codec": "^1.5.0",
+        "@jridgewell/trace-mapping": "^0.3.24"
+      }
+    },
+    "node_modules/@jridgewell/remapping": {
+      "version": "2.3.5",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@jridgewell/remapping/-/remapping-2.3.5.tgz",
+      "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/gen-mapping": "^0.3.5",
+        "@jridgewell/trace-mapping": "^0.3.24"
+      }
+    },
+    "node_modules/@jridgewell/resolve-uri": {
+      "version": "3.1.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+      "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@jridgewell/source-map": {
+      "version": "0.3.11",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@jridgewell/source-map/-/source-map-0.3.11.tgz",
+      "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/gen-mapping": "^0.3.5",
+        "@jridgewell/trace-mapping": "^0.3.25"
+      }
+    },
+    "node_modules/@jridgewell/sourcemap-codec": {
+      "version": "1.5.5",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+      "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
+      "license": "MIT"
+    },
+    "node_modules/@jridgewell/trace-mapping": {
+      "version": "0.3.31",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
+      "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/resolve-uri": "^3.1.0",
+        "@jridgewell/sourcemap-codec": "^1.4.14"
+      }
+    },
+    "node_modules/@nodelib/fs.scandir": {
+      "version": "2.1.5",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+      "license": "MIT",
+      "dependencies": {
+        "@nodelib/fs.stat": "2.0.5",
+        "run-parallel": "^1.1.9"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@nodelib/fs.stat": {
+      "version": "2.0.5",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@nodelib/fs.walk": {
+      "version": "1.2.8",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+      "license": "MIT",
+      "dependencies": {
+        "@nodelib/fs.scandir": "2.1.5",
+        "fastq": "^1.6.0"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@parcel/watcher": {
+      "version": "2.5.6",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@parcel/watcher/-/watcher-2.5.6.tgz",
+      "integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==",
+      "dev": true,
+      "hasInstallScript": true,
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "detect-libc": "^2.0.3",
+        "is-glob": "^4.0.3",
+        "node-addon-api": "^7.0.0",
+        "picomatch": "^4.0.3"
+      },
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      },
+      "optionalDependencies": {
+        "@parcel/watcher-android-arm64": "2.5.6",
+        "@parcel/watcher-darwin-arm64": "2.5.6",
+        "@parcel/watcher-darwin-x64": "2.5.6",
+        "@parcel/watcher-freebsd-x64": "2.5.6",
+        "@parcel/watcher-linux-arm-glibc": "2.5.6",
+        "@parcel/watcher-linux-arm-musl": "2.5.6",
+        "@parcel/watcher-linux-arm64-glibc": "2.5.6",
+        "@parcel/watcher-linux-arm64-musl": "2.5.6",
+        "@parcel/watcher-linux-x64-glibc": "2.5.6",
+        "@parcel/watcher-linux-x64-musl": "2.5.6",
+        "@parcel/watcher-win32-arm64": "2.5.6",
+        "@parcel/watcher-win32-ia32": "2.5.6",
+        "@parcel/watcher-win32-x64": "2.5.6"
+      }
+    },
+    "node_modules/@parcel/watcher-android-arm64": {
+      "version": "2.5.6",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.6.tgz",
+      "integrity": "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-darwin-arm64": {
+      "version": "2.5.6",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.6.tgz",
+      "integrity": "sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-darwin-x64": {
+      "version": "2.5.6",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.6.tgz",
+      "integrity": "sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-freebsd-x64": {
+      "version": "2.5.6",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.6.tgz",
+      "integrity": "sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-linux-arm-glibc": {
+      "version": "2.5.6",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.6.tgz",
+      "integrity": "sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-linux-arm-musl": {
+      "version": "2.5.6",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.6.tgz",
+      "integrity": "sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-linux-arm64-glibc": {
+      "version": "2.5.6",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.6.tgz",
+      "integrity": "sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-linux-arm64-musl": {
+      "version": "2.5.6",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.6.tgz",
+      "integrity": "sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-linux-x64-glibc": {
+      "version": "2.5.6",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.6.tgz",
+      "integrity": "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-linux-x64-musl": {
+      "version": "2.5.6",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.6.tgz",
+      "integrity": "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-win32-arm64": {
+      "version": "2.5.6",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.6.tgz",
+      "integrity": "sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-win32-ia32": {
+      "version": "2.5.6",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.6.tgz",
+      "integrity": "sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==",
+      "cpu": [
+        "ia32"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-win32-x64": {
+      "version": "2.5.6",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.6.tgz",
+      "integrity": "sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher/node_modules/picomatch": {
+      "version": "4.0.4",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/picomatch/-/picomatch-4.0.4.tgz",
+      "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/jonschlinkert"
+      }
+    },
+    "node_modules/@rollup/pluginutils": {
+      "version": "5.1.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@rollup/pluginutils/-/pluginutils-5.1.0.tgz",
+      "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/estree": "^1.0.0",
+        "estree-walker": "^2.0.2",
+        "picomatch": "^2.3.1"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      },
+      "peerDependencies": {
+        "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
+      },
+      "peerDependenciesMeta": {
+        "rollup": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@rollup/rollup-android-arm-eabi": {
+      "version": "4.62.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.2.tgz",
+      "integrity": "sha512-6o7ZLZK+BeenkZCFNDXqpbjw9bD6nuWonvS/lwQJp7NoVVxm6p3qE7qQ5jGuBjiFsgvqjD8mZAU5oWxTmbOeOg==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ]
+    },
+    "node_modules/@rollup/rollup-android-arm64": {
+      "version": "4.62.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.2.tgz",
+      "integrity": "sha512-BaH7BllCACHoH1LguOU56UItGfUWjujlO65kS9LAodViaN4bwIKd7oeW/ZHJ/4ljr/7MIiENnNy3HJ0zXv8Zkw==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ]
+    },
+    "node_modules/@rollup/rollup-darwin-arm64": {
+      "version": "4.62.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.2.tgz",
+      "integrity": "sha512-v39RCCvj4He82I9sFmk+M1VZ0PLM9sfsLVikjfx2hYBNALhrrOR2D3JjQA6AhlaSOgcR+RzrKY7e1+bT6SUO/A==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ]
+    },
+    "node_modules/@rollup/rollup-darwin-x64": {
+      "version": "4.62.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.2.tgz",
+      "integrity": "sha512-yl0y2vq3S3lHeuXhEdss6TWfKW8vkujImO12tn4ZkG/4oghr09LvdYm2RElVjokTQiUvDUGXLGsYeLqUMCKpGA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ]
+    },
+    "node_modules/@rollup/rollup-freebsd-arm64": {
+      "version": "4.62.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.2.tgz",
+      "integrity": "sha512-tT4pvt4qXD+vEoezupCWi+a1F0vvDiksiHc+PxRlYTOH1I6/X4id9jPxTP+Fg+545euaFT1jJVs4CEdHZAU1vw==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ]
+    },
+    "node_modules/@rollup/rollup-freebsd-x64": {
+      "version": "4.62.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.2.tgz",
+      "integrity": "sha512-6nU5F2wCW+qvCBhTn1pdIU3bzsIoF7EUwsCDRxilWGprQR6yd508YnH9+OKFCwpfS8pjZqDUmnCAr7exax0XCg==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+      "version": "4.62.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.2.tgz",
+      "integrity": "sha512-n1GJHPOvpIfhi3TmrCeh6S6URt9BFCt0KQE3qvexyGCTAKpR4Lg+eWvNZEqu7epxwus/8ElT3hacYEucm49SZg==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+      "version": "4.62.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.2.tgz",
+      "integrity": "sha512-JqgflS8wEB+UXV/vS1RpRbifGBeN4D5lz8D8oOFbFZw4vedvdOgCFAjfBmIMdW3yL10XpQQ0Ambepw6MXrhOnA==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-arm64-gnu": {
+      "version": "4.62.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.2.tgz",
+      "integrity": "sha512-wnFJkogWvN4jm/hQRF2UBaeUmk20j5+DmHvoyWii2b8HJDyvz1MF2OU/6ynXt2KR63rbZLWkFpoytpdc/yBuSA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-arm64-musl": {
+      "version": "4.62.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.2.tgz",
+      "integrity": "sha512-HVu2bp0zhvJ8xHEV9+UUs7S90VadmBSY3LcIMvozbPo4AuMGDWlz3ymHLHZPX4hR67TKTt8Qp5PJ5RBg/i+RMQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-loong64-gnu": {
+      "version": "4.62.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.2.tgz",
+      "integrity": "sha512-mQqqAV8QaoSgr9I2fKDLY2BAVvmKjWoGiu/cSYQonsLvtqwEn1E4QYfnCOcp5zoEqNhsDYin1s6jx/VJmrxlZg==",
+      "cpu": [
+        "loong64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-loong64-musl": {
+      "version": "4.62.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.2.tgz",
+      "integrity": "sha512-IxKLoxCQ2IWi6bT2akyDUBGsOImDKB+sPp4EsTmwFQ/fMwpCKm8uLSSgP/Kx/QYUgKis6SEZ5/Nlhup0DIA0PQ==",
+      "cpu": [
+        "loong64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-ppc64-gnu": {
+      "version": "4.62.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.2.tgz",
+      "integrity": "sha512-Mk5ha2RQSgyFfmYYLkBpPnUk8D8FriBxesO1u9O75X0mHgXL1UQcH5Itl2lurWL2tj0RxV9b9tJgipac0hRY9A==",
+      "cpu": [
+        "ppc64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-ppc64-musl": {
+      "version": "4.62.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.2.tgz",
+      "integrity": "sha512-CjvEnqJL/0/TQ3TXX3OPIJ/kmBellrWd4heXUmHeJlTnmwjKpSJzoehLaL6Xk0ZnMHBu9dZuFADNOrtjF4v+2w==",
+      "cpu": [
+        "ppc64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+      "version": "4.62.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.2.tgz",
+      "integrity": "sha512-1SiZbzwdkaDURsew/tSOrooKiYy7EQGT6m8ufavAi9NEyQb/6VuIxFXAL1fqa4iZe3g4NbNk4P7J32z2tw5Mgg==",
+      "cpu": [
+        "riscv64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-riscv64-musl": {
+      "version": "4.62.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.2.tgz",
+      "integrity": "sha512-nQts12zJ3NQRoE6uYljOH89v7szzLDvG2JD/vsX+vGXU8w/At1GowTZ5/7qeFQ8m7L55rpR8Okugnuo5bgjy2Q==",
+      "cpu": [
+        "riscv64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-s390x-gnu": {
+      "version": "4.62.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.2.tgz",
+      "integrity": "sha512-E9/ll019jhPIJgpzfZoIkBGhcz+kKNgVWYRY0zr9srBdPPFVpvOKW8VaJKUbeK+eZXyQF9ltME+Kk6affeaPgg==",
+      "cpu": [
+        "s390x"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-x64-gnu": {
+      "version": "4.62.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.2.tgz",
+      "integrity": "sha512-5BqxR/pshjey51iliyzTD5Xi3EN0aLmQ2lZ3lvefVV9c82BvrLo2/6OT55iifpWBufs6kdwWbuOKS841DrmK9A==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-x64-musl": {
+      "version": "4.62.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.2.tgz",
+      "integrity": "sha512-uNN83XxQrRAh/w0/pmAfibcwyb6YWt4gP+dpnQKPVJshAloQ785ii8CT8ZCIxkGg9opVsvAlGhFitSm6D1Jjpg==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-openbsd-x64": {
+      "version": "4.62.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.2.tgz",
+      "integrity": "sha512-srjEIxSH3LRnJN6THczDHWQplqEMFiAJrTab0msUryh9kwNpkICf3Ea6q6MN/2cZwRFUNx5w+h6Hpi4QuHS6Zg==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "openbsd"
+      ]
+    },
+    "node_modules/@rollup/rollup-openharmony-arm64": {
+      "version": "4.62.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.2.tgz",
+      "integrity": "sha512-8hOJnxgbyObnCm5AlRA3A931xX19xq80RjVTKgJOvEKWqJruP/Uf12IbAOaDjjEXYRewwHLfmF0YRIdK3OwKWA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "openharmony"
+      ]
+    },
+    "node_modules/@rollup/rollup-win32-arm64-msvc": {
+      "version": "4.62.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.2.tgz",
+      "integrity": "sha512-mmF4AY1i0hG/bLWUctUq59gtmgaSIRa3cu/A3JFRp/sCNEme2bgDEiDS22P9FbnJB8NJNF4jPJiSP5RHQpUTDg==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ]
+    },
+    "node_modules/@rollup/rollup-win32-ia32-msvc": {
+      "version": "4.62.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.2.tgz",
+      "integrity": "sha512-DZgkknc6jhHrk46V25vbAM0zZkyP0nSDkJB8/dRkLTxv470dOmWDqGoEJl/9A0dFfS7yE3REOwNDxpHwSLSt0Q==",
+      "cpu": [
+        "ia32"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ]
+    },
+    "node_modules/@rollup/rollup-win32-x64-gnu": {
+      "version": "4.62.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.2.tgz",
+      "integrity": "sha512-T6xr6ucWSFto+VGajA8YH26LdpHRuP4YLHEKAtCWvJDOlnmWcDZVCI2Jmjr+IFHDlt2zRaTAKE4tfjTaWLgJBg==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ]
+    },
+    "node_modules/@rollup/rollup-win32-x64-msvc": {
+      "version": "4.62.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.2.tgz",
+      "integrity": "sha512-BfzEnDJOt9T8M989/lA37EcJgat01wLRnoi5dQf3QzOH7jzpqTAzdDbVfRljVr5r+jzKqpbHeyOfAaXxAd0PAA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ]
+    },
+    "node_modules/@types/estree": {
+      "version": "1.0.9",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@types/estree/-/estree-1.0.9.tgz",
+      "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==",
+      "license": "MIT"
+    },
+    "node_modules/@types/node": {
+      "version": "20.19.43",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@types/node/-/node-20.19.43.tgz",
+      "integrity": "sha512-6oYBAi5ikg4Pl+kGsoYtawUMBT2zZMCvPNF7pVLnHZfd1zf38DRiWn/gT01RYCdUqkv7Fhr+C9ot4/tb+2sVvA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "undici-types": "~6.21.0"
+      }
+    },
+    "node_modules/@vitejs/plugin-legacy": {
+      "version": "5.3.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vitejs/plugin-legacy/-/plugin-legacy-5.3.2.tgz",
+      "integrity": "sha512-8moCOrIMaZ/Rjln0Q6GsH6s8fAt1JOI3k8nmfX4tXUxE5KAExVctSyOBk+A25GClsdSWqIk2yaUthH3KJ2X4tg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/core": "^7.23.9",
+        "@babel/preset-env": "^7.23.9",
+        "browserslist": "^4.23.0",
+        "browserslist-to-esbuild": "^2.1.1",
+        "core-js": "^3.36.0",
+        "magic-string": "^0.30.7",
+        "regenerator-runtime": "^0.14.1",
+        "systemjs": "^6.14.3"
+      },
+      "engines": {
+        "node": "^18.0.0 || >=20.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/vitejs/vite?sponsor=1"
+      },
+      "peerDependencies": {
+        "terser": "^5.4.0",
+        "vite": "^5.0.0"
+      }
+    },
+    "node_modules/@vitejs/plugin-vue": {
+      "version": "5.2.4",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz",
+      "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^18.0.0 || >=20.0.0"
+      },
+      "peerDependencies": {
+        "vite": "^5.0.0 || ^6.0.0",
+        "vue": "^3.2.25"
+      }
+    },
+    "node_modules/@vitejs/plugin-vue-jsx": {
+      "version": "3.1.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-3.1.0.tgz",
+      "integrity": "sha512-w9M6F3LSEU5kszVb9An2/MmXNxocAnUb3WhRr8bHlimhDrXNt6n6D2nJQR3UXpGlZHh/EsgouOHCsM8V3Ln+WA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/core": "^7.23.3",
+        "@babel/plugin-transform-typescript": "^7.23.3",
+        "@vue/babel-plugin-jsx": "^1.1.5"
+      },
+      "engines": {
+        "node": "^14.18.0 || >=16.0.0"
+      },
+      "peerDependencies": {
+        "vite": "^4.0.0 || ^5.0.0",
+        "vue": "^3.0.0"
+      }
+    },
+    "node_modules/@volar/language-core": {
+      "version": "1.11.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@volar/language-core/-/language-core-1.11.1.tgz",
+      "integrity": "sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@volar/source-map": "1.11.1"
+      }
+    },
+    "node_modules/@volar/source-map": {
+      "version": "1.11.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@volar/source-map/-/source-map-1.11.1.tgz",
+      "integrity": "sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "muggle-string": "^0.3.1"
+      }
+    },
+    "node_modules/@volar/typescript": {
+      "version": "1.11.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@volar/typescript/-/typescript-1.11.1.tgz",
+      "integrity": "sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@volar/language-core": "1.11.1",
+        "path-browserify": "^1.0.1"
+      }
+    },
+    "node_modules/@vue/babel-helper-vue-transform-on": {
+      "version": "1.5.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.5.0.tgz",
+      "integrity": "sha512-0dAYkerNhhHutHZ34JtTl2czVQHUNWv6xEbkdF5W+Yrv5pCWsqjeORdOgbtW2I9gWlt+wBmVn+ttqN9ZxR5tzA==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@vue/babel-plugin-jsx": {
+      "version": "1.5.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.5.0.tgz",
+      "integrity": "sha512-mneBhw1oOqCd2247O0Yw/mRwC9jIGACAJUlawkmMBiNmL4dGA2eMzuNZVNqOUfYTa6vqmND4CtOPzmEEEqLKFw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-module-imports": "^7.27.1",
+        "@babel/helper-plugin-utils": "^7.27.1",
+        "@babel/plugin-syntax-jsx": "^7.27.1",
+        "@babel/template": "^7.27.2",
+        "@babel/traverse": "^7.28.0",
+        "@babel/types": "^7.28.2",
+        "@vue/babel-helper-vue-transform-on": "1.5.0",
+        "@vue/babel-plugin-resolve-type": "1.5.0",
+        "@vue/shared": "^3.5.18"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      },
+      "peerDependenciesMeta": {
+        "@babel/core": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@vue/babel-plugin-jsx/node_modules/@babel/types": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/types/-/types-7.29.7.tgz",
+      "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-string-parser": "^7.29.7",
+        "@babel/helper-validator-identifier": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@vue/babel-plugin-jsx/node_modules/@vue/shared": {
+      "version": "3.5.39",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/shared/-/shared-3.5.39.tgz",
+      "integrity": "sha512-l1rrBtBfTnmxvtsvdQDXltUUy8S1Y+ZaqdfUzmAnJkTd8Z8rv5v/ytW+TKiqEOWyHPoqtPlNFSs0lhRmYVSHVA==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@vue/babel-plugin-resolve-type": {
+      "version": "1.5.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.5.0.tgz",
+      "integrity": "sha512-Wm/60o+53JwJODm4Knz47dxJnLDJ9FnKnGZJbUUf8nQRAtt6P+undLUAVU3Ha33LxOJe6IPoifRQ6F/0RrU31w==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/code-frame": "^7.27.1",
+        "@babel/helper-module-imports": "^7.27.1",
+        "@babel/helper-plugin-utils": "^7.27.1",
+        "@babel/parser": "^7.28.0",
+        "@vue/compiler-sfc": "^3.5.18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sxzz"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@vue/babel-plugin-resolve-type/node_modules/@babel/code-frame": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/code-frame/-/code-frame-7.29.7.tgz",
+      "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-validator-identifier": "^7.29.7",
+        "js-tokens": "^4.0.0",
+        "picocolors": "^1.1.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@vue/babel-plugin-resolve-type/node_modules/@babel/parser": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/parser/-/parser-7.29.7.tgz",
+      "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.29.7"
+      },
+      "bin": {
+        "parser": "bin/babel-parser.js"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@vue/babel-plugin-resolve-type/node_modules/@babel/types": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/types/-/types-7.29.7.tgz",
+      "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-string-parser": "^7.29.7",
+        "@babel/helper-validator-identifier": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@vue/babel-plugin-resolve-type/node_modules/@vue/compiler-core": {
+      "version": "3.5.39",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/compiler-core/-/compiler-core-3.5.39.tgz",
+      "integrity": "sha512-16KBTEXAJCpDr0mwlw+AZyhu8iyC7R3S2vBwsI7QnWJU6X3WKc9VKeNEZpiMdZ569qWhz9574L3vV55qRL0Vtw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/parser": "^7.29.7",
+        "@vue/shared": "3.5.39",
+        "entities": "^7.0.1",
+        "estree-walker": "^2.0.2",
+        "source-map-js": "^1.2.1"
+      }
+    },
+    "node_modules/@vue/babel-plugin-resolve-type/node_modules/@vue/compiler-dom": {
+      "version": "3.5.39",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/compiler-dom/-/compiler-dom-3.5.39.tgz",
+      "integrity": "sha512-oQPigALqYbNxTNPvNgSOe+czwVExfbVF02lz8jP0S3AXJiu3jxYDygNUiqSep4ezzW8XgnubqH63My2A7JR/vg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@vue/compiler-core": "3.5.39",
+        "@vue/shared": "3.5.39"
+      }
+    },
+    "node_modules/@vue/babel-plugin-resolve-type/node_modules/@vue/compiler-sfc": {
+      "version": "3.5.39",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/compiler-sfc/-/compiler-sfc-3.5.39.tgz",
+      "integrity": "sha512-d0ki86iOyN8LoZPBmk5SJWNwHP19CnDDCfuo//+2WJa2g5Ke0Jay983PIBIcSSzldC68I8DrD5GrHV3OSDfodg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/parser": "^7.29.7",
+        "@vue/compiler-core": "3.5.39",
+        "@vue/compiler-dom": "3.5.39",
+        "@vue/compiler-ssr": "3.5.39",
+        "@vue/shared": "3.5.39",
+        "estree-walker": "^2.0.2",
+        "magic-string": "^0.30.21",
+        "postcss": "^8.5.15",
+        "source-map-js": "^1.2.1"
+      }
+    },
+    "node_modules/@vue/babel-plugin-resolve-type/node_modules/@vue/compiler-ssr": {
+      "version": "3.5.39",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/compiler-ssr/-/compiler-ssr-3.5.39.tgz",
+      "integrity": "sha512-Ce7/wvwMHai74bdszfXExdazFigYnlF9zgCmEQUcM1j0fOymlouZ7XilTYNo8oUjhlnjYOZbGrcYKuqjz89Ucw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@vue/compiler-dom": "3.5.39",
+        "@vue/shared": "3.5.39"
+      }
+    },
+    "node_modules/@vue/babel-plugin-resolve-type/node_modules/@vue/shared": {
+      "version": "3.5.39",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/shared/-/shared-3.5.39.tgz",
+      "integrity": "sha512-l1rrBtBfTnmxvtsvdQDXltUUy8S1Y+ZaqdfUzmAnJkTd8Z8rv5v/ytW+TKiqEOWyHPoqtPlNFSs0lhRmYVSHVA==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@vue/babel-plugin-resolve-type/node_modules/entities": {
+      "version": "7.0.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/entities/-/entities-7.0.1.tgz",
+      "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=0.12"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/entities?sponsor=1"
+      }
+    },
+    "node_modules/@vue/babel-plugin-resolve-type/node_modules/magic-string": {
+      "version": "0.30.21",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/magic-string/-/magic-string-0.30.21.tgz",
+      "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/sourcemap-codec": "^1.5.5"
+      }
+    },
+    "node_modules/@vue/babel-plugin-resolve-type/node_modules/picocolors": {
+      "version": "1.1.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/picocolors/-/picocolors-1.1.1.tgz",
+      "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/@vue/compiler-core": {
+      "version": "3.4.21",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/compiler-core/-/compiler-core-3.4.21.tgz",
+      "integrity": "sha512-MjXawxZf2SbZszLPYxaFCjxfibYrzr3eYbKxwpLR9EQN+oaziSu3qKVbwBERj1IFIB8OLUewxB5m/BFzi613og==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/parser": "^7.23.9",
+        "@vue/shared": "3.4.21",
+        "entities": "^4.5.0",
+        "estree-walker": "^2.0.2",
+        "source-map-js": "^1.0.2"
+      }
+    },
+    "node_modules/@vue/compiler-dom": {
+      "version": "3.4.21",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/compiler-dom/-/compiler-dom-3.4.21.tgz",
+      "integrity": "sha512-IZC6FKowtT1sl0CR5DpXSiEB5ayw75oT2bma1BEhV7RRR1+cfwLrxc2Z8Zq/RGFzJ8w5r9QtCOvTjQgdn0IKmA==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/compiler-core": "3.4.21",
+        "@vue/shared": "3.4.21"
+      }
+    },
+    "node_modules/@vue/compiler-sfc": {
+      "version": "3.4.21",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/compiler-sfc/-/compiler-sfc-3.4.21.tgz",
+      "integrity": "sha512-me7epoTxYlY+2CUM7hy9PCDdpMPfIwrOvAXud2Upk10g4YLv9UBW7kL798TvMeDhPthkZ0CONNrK2GoeI1ODiQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/parser": "^7.23.9",
+        "@vue/compiler-core": "3.4.21",
+        "@vue/compiler-dom": "3.4.21",
+        "@vue/compiler-ssr": "3.4.21",
+        "@vue/shared": "3.4.21",
+        "estree-walker": "^2.0.2",
+        "magic-string": "^0.30.7",
+        "postcss": "^8.4.35",
+        "source-map-js": "^1.0.2"
+      }
+    },
+    "node_modules/@vue/compiler-ssr": {
+      "version": "3.4.21",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/compiler-ssr/-/compiler-ssr-3.4.21.tgz",
+      "integrity": "sha512-M5+9nI2lPpAsgXOGQobnIueVqc9sisBFexh5yMIMRAPYLa7+5wEJs8iqOZc1WAa9WQbx9GR2twgznU8LTIiZ4Q==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/compiler-dom": "3.4.21",
+        "@vue/shared": "3.4.21"
+      }
+    },
+    "node_modules/@vue/devtools-api": {
+      "version": "6.6.4",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/devtools-api/-/devtools-api-6.6.4.tgz",
+      "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==",
+      "license": "MIT"
+    },
+    "node_modules/@vue/language-core": {
+      "version": "1.8.27",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/language-core/-/language-core-1.8.27.tgz",
+      "integrity": "sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@volar/language-core": "~1.11.1",
+        "@volar/source-map": "~1.11.1",
+        "@vue/compiler-dom": "^3.3.0",
+        "@vue/shared": "^3.3.0",
+        "computeds": "^0.0.1",
+        "minimatch": "^9.0.3",
+        "muggle-string": "^0.3.1",
+        "path-browserify": "^1.0.1",
+        "vue-template-compiler": "^2.7.14"
+      },
+      "peerDependencies": {
+        "typescript": "*"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@vue/reactivity": {
+      "version": "3.5.39",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/reactivity/-/reactivity-3.5.39.tgz",
+      "integrity": "sha512-TpsuBJ9gGlZa5d23XcM2y8EXanz9dZeVDQBXRwzy46ItgvM+rWpzs+UVM0wcRLxGvcav0HE5jz2gNL53xlRAog==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/shared": "3.5.39"
+      }
+    },
+    "node_modules/@vue/reactivity/node_modules/@vue/shared": {
+      "version": "3.5.39",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/shared/-/shared-3.5.39.tgz",
+      "integrity": "sha512-l1rrBtBfTnmxvtsvdQDXltUUy8S1Y+ZaqdfUzmAnJkTd8Z8rv5v/ytW+TKiqEOWyHPoqtPlNFSs0lhRmYVSHVA==",
+      "license": "MIT"
+    },
+    "node_modules/@vue/runtime-core": {
+      "version": "3.5.39",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/runtime-core/-/runtime-core-3.5.39.tgz",
+      "integrity": "sha512-9GLtNyRvPAUMbX+7ono0RC2j0guo2LXVi8LvcmAooImACUKm0oFf0jjwbX8/H0AE/t1nxhAkn8RSl9PMCzzxZw==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/reactivity": "3.5.39",
+        "@vue/shared": "3.5.39"
+      }
+    },
+    "node_modules/@vue/runtime-core/node_modules/@vue/shared": {
+      "version": "3.5.39",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/shared/-/shared-3.5.39.tgz",
+      "integrity": "sha512-l1rrBtBfTnmxvtsvdQDXltUUy8S1Y+ZaqdfUzmAnJkTd8Z8rv5v/ytW+TKiqEOWyHPoqtPlNFSs0lhRmYVSHVA==",
+      "license": "MIT"
+    },
+    "node_modules/@vue/runtime-dom": {
+      "version": "3.5.39",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/runtime-dom/-/runtime-dom-3.5.39.tgz",
+      "integrity": "sha512-7Y6aAGboKcXAZ3ECuUy7RrS5yy2r47dhTp2SKaJmYxjopImaVFaNa5Ne66NwGovsrxVAl5S5rwc7m22UG7Lmww==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/reactivity": "3.5.39",
+        "@vue/runtime-core": "3.5.39",
+        "@vue/shared": "3.5.39",
+        "csstype": "^3.2.3"
+      }
+    },
+    "node_modules/@vue/runtime-dom/node_modules/@vue/shared": {
+      "version": "3.5.39",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/shared/-/shared-3.5.39.tgz",
+      "integrity": "sha512-l1rrBtBfTnmxvtsvdQDXltUUy8S1Y+ZaqdfUzmAnJkTd8Z8rv5v/ytW+TKiqEOWyHPoqtPlNFSs0lhRmYVSHVA==",
+      "license": "MIT"
+    },
+    "node_modules/@vue/server-renderer": {
+      "version": "3.5.39",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/server-renderer/-/server-renderer-3.5.39.tgz",
+      "integrity": "sha512-yZSakiAGw85rZfG7UM8akMnIF+FmeiNk47uvHf2nVBBSe+dIKUhZuZq9+XgJhbV3nS5Z4ALH23/MpXofW+mbcw==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/compiler-ssr": "3.5.39",
+        "@vue/shared": "3.5.39"
+      },
+      "peerDependencies": {
+        "vue": "3.5.39"
+      }
+    },
+    "node_modules/@vue/server-renderer/node_modules/@babel/parser": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/parser/-/parser-7.29.7.tgz",
+      "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.29.7"
+      },
+      "bin": {
+        "parser": "bin/babel-parser.js"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@vue/server-renderer/node_modules/@babel/types": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/types/-/types-7.29.7.tgz",
+      "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-string-parser": "^7.29.7",
+        "@babel/helper-validator-identifier": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@vue/server-renderer/node_modules/@vue/compiler-core": {
+      "version": "3.5.39",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/compiler-core/-/compiler-core-3.5.39.tgz",
+      "integrity": "sha512-16KBTEXAJCpDr0mwlw+AZyhu8iyC7R3S2vBwsI7QnWJU6X3WKc9VKeNEZpiMdZ569qWhz9574L3vV55qRL0Vtw==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/parser": "^7.29.7",
+        "@vue/shared": "3.5.39",
+        "entities": "^7.0.1",
+        "estree-walker": "^2.0.2",
+        "source-map-js": "^1.2.1"
+      }
+    },
+    "node_modules/@vue/server-renderer/node_modules/@vue/compiler-dom": {
+      "version": "3.5.39",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/compiler-dom/-/compiler-dom-3.5.39.tgz",
+      "integrity": "sha512-oQPigALqYbNxTNPvNgSOe+czwVExfbVF02lz8jP0S3AXJiu3jxYDygNUiqSep4ezzW8XgnubqH63My2A7JR/vg==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/compiler-core": "3.5.39",
+        "@vue/shared": "3.5.39"
+      }
+    },
+    "node_modules/@vue/server-renderer/node_modules/@vue/compiler-ssr": {
+      "version": "3.5.39",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/compiler-ssr/-/compiler-ssr-3.5.39.tgz",
+      "integrity": "sha512-Ce7/wvwMHai74bdszfXExdazFigYnlF9zgCmEQUcM1j0fOymlouZ7XilTYNo8oUjhlnjYOZbGrcYKuqjz89Ucw==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/compiler-dom": "3.5.39",
+        "@vue/shared": "3.5.39"
+      }
+    },
+    "node_modules/@vue/server-renderer/node_modules/@vue/shared": {
+      "version": "3.5.39",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/shared/-/shared-3.5.39.tgz",
+      "integrity": "sha512-l1rrBtBfTnmxvtsvdQDXltUUy8S1Y+ZaqdfUzmAnJkTd8Z8rv5v/ytW+TKiqEOWyHPoqtPlNFSs0lhRmYVSHVA==",
+      "license": "MIT"
+    },
+    "node_modules/@vue/server-renderer/node_modules/entities": {
+      "version": "7.0.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/entities/-/entities-7.0.1.tgz",
+      "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==",
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=0.12"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/entities?sponsor=1"
+      }
+    },
+    "node_modules/@vue/shared": {
+      "version": "3.4.21",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/shared/-/shared-3.4.21.tgz",
+      "integrity": "sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==",
+      "license": "MIT"
+    },
+    "node_modules/@vue/tsconfig": {
+      "version": "0.1.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/tsconfig/-/tsconfig-0.1.3.tgz",
+      "integrity": "sha512-kQVsh8yyWPvHpb8gIc9l/HIDiiVUy1amynLNpCy8p+FoCiZXCo6fQos5/097MmnNZc9AtseDsCrfkhqCrJ8Olg==",
+      "dev": true,
+      "license": "MIT",
+      "peerDependencies": {
+        "@types/node": "*"
+      },
+      "peerDependenciesMeta": {
+        "@types/node": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/accepts": {
+      "version": "1.3.8",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/accepts/-/accepts-1.3.8.tgz",
+      "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "mime-types": "~2.1.34",
+        "negotiator": "0.6.3"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/acorn": {
+      "version": "8.17.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/acorn/-/acorn-8.17.0.tgz",
+      "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==",
+      "license": "MIT",
+      "bin": {
+        "acorn": "bin/acorn"
+      },
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/adm-zip": {
+      "version": "0.5.16",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/adm-zip/-/adm-zip-0.5.16.tgz",
+      "integrity": "sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=12.0"
+      }
+    },
+    "node_modules/ansi-styles": {
+      "version": "3.2.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/ansi-styles/-/ansi-styles-3.2.1.tgz",
+      "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+      "license": "MIT",
+      "dependencies": {
+        "color-convert": "^1.9.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/any-base": {
+      "version": "1.1.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/any-base/-/any-base-1.1.0.tgz",
+      "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==",
+      "license": "MIT"
+    },
+    "node_modules/anymatch": {
+      "version": "3.1.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/anymatch/-/anymatch-3.1.3.tgz",
+      "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+      "license": "ISC",
+      "dependencies": {
+        "normalize-path": "^3.0.0",
+        "picomatch": "^2.0.4"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/array-flatten": {
+      "version": "1.1.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/array-flatten/-/array-flatten-1.1.1.tgz",
+      "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/autoprefixer": {
+      "version": "10.4.20",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/autoprefixer/-/autoprefixer-10.4.20.tgz",
+      "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==",
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/postcss/"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/autoprefixer"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "browserslist": "^4.23.3",
+        "caniuse-lite": "^1.0.30001646",
+        "fraction.js": "^4.3.7",
+        "normalize-range": "^0.1.2",
+        "picocolors": "^1.0.1",
+        "postcss-value-parser": "^4.2.0"
+      },
+      "bin": {
+        "autoprefixer": "bin/autoprefixer"
+      },
+      "engines": {
+        "node": "^10 || ^12 || >=14"
+      },
+      "peerDependencies": {
+        "postcss": "^8.1.0"
+      }
+    },
+    "node_modules/babel-plugin-polyfill-corejs2": {
+      "version": "0.4.17",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.17.tgz",
+      "integrity": "sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/compat-data": "^7.28.6",
+        "@babel/helper-define-polyfill-provider": "^0.6.8",
+        "semver": "^6.3.1"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
+      }
+    },
+    "node_modules/babel-plugin-polyfill-corejs3": {
+      "version": "0.14.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.2.tgz",
+      "integrity": "sha512-coWpDLJ410R781Npmn/SIBZEsAetR4xVi0SxLMXPaMO4lSf1MwnkGYMtkFxew0Dn8B3/CpbpYxN0JCgg8mn67g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-define-polyfill-provider": "^0.6.8",
+        "core-js-compat": "^3.48.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
+      }
+    },
+    "node_modules/babel-plugin-polyfill-regenerator": {
+      "version": "0.6.8",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.8.tgz",
+      "integrity": "sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-define-polyfill-provider": "^0.6.8"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
+      }
+    },
+    "node_modules/balanced-match": {
+      "version": "1.0.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/balanced-match/-/balanced-match-1.0.2.tgz",
+      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/base64-js": {
+      "version": "1.5.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/base64-js/-/base64-js-1.5.1.tgz",
+      "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "MIT"
+    },
+    "node_modules/base64url": {
+      "version": "3.0.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/base64url/-/base64url-3.0.1.tgz",
+      "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/baseline-browser-mapping": {
+      "version": "2.10.38",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/baseline-browser-mapping/-/baseline-browser-mapping-2.10.38.tgz",
+      "integrity": "sha512-31/02mVB4yuQU6adKk5SlY6m+mxDwUq5KZkyYgnLrrKl7TEm1+3PyDtDBz2kOv/wxZz41GHsvV1A/u6RmiyBvw==",
+      "license": "Apache-2.0",
+      "bin": {
+        "baseline-browser-mapping": "dist/cli.cjs"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/binary-extensions": {
+      "version": "2.3.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/binary-extensions/-/binary-extensions-2.3.0.tgz",
+      "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/bmp-js": {
+      "version": "0.1.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/bmp-js/-/bmp-js-0.1.0.tgz",
+      "integrity": "sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==",
+      "license": "MIT"
+    },
+    "node_modules/body-parser": {
+      "version": "1.20.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/body-parser/-/body-parser-1.20.3.tgz",
+      "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "bytes": "3.1.2",
+        "content-type": "~1.0.5",
+        "debug": "2.6.9",
+        "depd": "2.0.0",
+        "destroy": "1.2.0",
+        "http-errors": "2.0.0",
+        "iconv-lite": "0.4.24",
+        "on-finished": "2.4.1",
+        "qs": "6.13.0",
+        "raw-body": "2.5.2",
+        "type-is": "~1.6.18",
+        "unpipe": "1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.8",
+        "npm": "1.2.8000 || >= 1.4.16"
+      }
+    },
+    "node_modules/body-parser/node_modules/debug": {
+      "version": "2.6.9",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ms": "2.0.0"
+      }
+    },
+    "node_modules/body-parser/node_modules/ms": {
+      "version": "2.0.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/body-parser/node_modules/qs": {
+      "version": "6.13.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/qs/-/qs-6.13.0.tgz",
+      "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "side-channel": "^1.0.6"
+      },
+      "engines": {
+        "node": ">=0.6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/brace-expansion": {
+      "version": "2.1.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/brace-expansion/-/brace-expansion-2.1.1.tgz",
+      "integrity": "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "balanced-match": "^1.0.0"
+      }
+    },
+    "node_modules/braces": {
+      "version": "3.0.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/braces/-/braces-3.0.3.tgz",
+      "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+      "license": "MIT",
+      "dependencies": {
+        "fill-range": "^7.1.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/browserslist": {
+      "version": "4.28.4",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/browserslist/-/browserslist-4.28.4.tgz",
+      "integrity": "sha512-MTc8i/x9jBQd1iMw2CFGS+rwMa07eYjLR0CCTLDACl9xhxy+nIs3KeML/biicXtk9JrZ6dnnTatmc7ErPXIxqw==",
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/browserslist"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/browserslist"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "baseline-browser-mapping": "^2.10.38",
+        "caniuse-lite": "^1.0.30001799",
+        "electron-to-chromium": "^1.5.376",
+        "node-releases": "^2.0.48",
+        "update-browserslist-db": "^1.2.3"
+      },
+      "bin": {
+        "browserslist": "cli.js"
+      },
+      "engines": {
+        "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+      }
+    },
+    "node_modules/browserslist-to-esbuild": {
+      "version": "2.1.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/browserslist-to-esbuild/-/browserslist-to-esbuild-2.1.1.tgz",
+      "integrity": "sha512-KN+mty6C3e9AN8Z5dI1xeN15ExcRNeISoC3g7V0Kax/MMF9MSoYA2G7lkTTcVUFntiEjkpI0HNgqJC1NjdyNUw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "meow": "^13.0.0"
+      },
+      "bin": {
+        "browserslist-to-esbuild": "cli/index.js"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "peerDependencies": {
+        "browserslist": "*"
+      }
+    },
+    "node_modules/buffer": {
+      "version": "5.7.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/buffer/-/buffer-5.7.1.tgz",
+      "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "base64-js": "^1.3.1",
+        "ieee754": "^1.1.13"
+      }
+    },
+    "node_modules/buffer-equal": {
+      "version": "0.0.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/buffer-equal/-/buffer-equal-0.0.1.tgz",
+      "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/buffer-from": {
+      "version": "1.1.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/buffer-from/-/buffer-from-1.1.2.tgz",
+      "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/bytes": {
+      "version": "3.1.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/bytes/-/bytes-3.1.2.tgz",
+      "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/cac": {
+      "version": "6.7.9",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/cac/-/cac-6.7.9.tgz",
+      "integrity": "sha512-XN5qEpfNQCJ8jRaZgitSkkukjMRCGio+X3Ks5KUbGGlPbV+pSem1l9VuzooCBXOiMFshUZgyYqg6rgN8rjkb/w==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/call-bind-apply-helpers": {
+      "version": "1.0.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
+      "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "es-errors": "^1.3.0",
+        "function-bind": "^1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/call-bound": {
+      "version": "1.0.4",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/call-bound/-/call-bound-1.0.4.tgz",
+      "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind-apply-helpers": "^1.0.2",
+        "get-intrinsic": "^1.3.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/caniuse-lite": {
+      "version": "1.0.30001799",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/caniuse-lite/-/caniuse-lite-1.0.30001799.tgz",
+      "integrity": "sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw==",
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/browserslist"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "CC-BY-4.0"
+    },
+    "node_modules/centra": {
+      "version": "2.7.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/centra/-/centra-2.7.0.tgz",
+      "integrity": "sha512-PbFMgMSrmgx6uxCdm57RUos9Tc3fclMvhLSATYN39XsDV29B89zZ3KA89jmY0vwSGazyU+uerqwa6t+KaodPcg==",
+      "license": "MIT",
+      "dependencies": {
+        "follow-redirects": "^1.15.6"
+      }
+    },
+    "node_modules/chalk": {
+      "version": "2.4.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/chalk/-/chalk-2.4.2.tgz",
+      "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^3.2.1",
+        "escape-string-regexp": "^1.0.5",
+        "supports-color": "^5.3.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/chokidar": {
+      "version": "3.6.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/chokidar/-/chokidar-3.6.0.tgz",
+      "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+      "license": "MIT",
+      "dependencies": {
+        "anymatch": "~3.1.2",
+        "braces": "~3.0.2",
+        "glob-parent": "~5.1.2",
+        "is-binary-path": "~2.1.0",
+        "is-glob": "~4.0.1",
+        "normalize-path": "~3.0.0",
+        "readdirp": "~3.6.0"
+      },
+      "engines": {
+        "node": ">= 8.10.0"
+      },
+      "funding": {
+        "url": "https://paulmillr.com/funding/"
+      },
+      "optionalDependencies": {
+        "fsevents": "~2.3.2"
+      }
+    },
+    "node_modules/color-convert": {
+      "version": "1.9.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/color-convert/-/color-convert-1.9.3.tgz",
+      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+      "license": "MIT",
+      "dependencies": {
+        "color-name": "1.1.3"
+      }
+    },
+    "node_modules/color-name": {
+      "version": "1.1.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/color-name/-/color-name-1.1.3.tgz",
+      "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+      "license": "MIT"
+    },
+    "node_modules/commander": {
+      "version": "2.20.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/commander/-/commander-2.20.3.tgz",
+      "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/compare-versions": {
+      "version": "3.6.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/compare-versions/-/compare-versions-3.6.0.tgz",
+      "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==",
+      "license": "MIT"
+    },
+    "node_modules/computeds": {
+      "version": "0.0.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/computeds/-/computeds-0.0.1.tgz",
+      "integrity": "sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/confbox": {
+      "version": "0.1.8",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/confbox/-/confbox-0.1.8.tgz",
+      "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==",
+      "license": "MIT"
+    },
+    "node_modules/content-disposition": {
+      "version": "0.5.4",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/content-disposition/-/content-disposition-0.5.4.tgz",
+      "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "safe-buffer": "5.2.1"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/content-type": {
+      "version": "1.0.5",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/content-type/-/content-type-1.0.5.tgz",
+      "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/convert-source-map": {
+      "version": "2.0.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/convert-source-map/-/convert-source-map-2.0.0.tgz",
+      "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+      "license": "MIT"
+    },
+    "node_modules/cookie": {
+      "version": "0.6.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/cookie/-/cookie-0.6.0.tgz",
+      "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/cookie-signature": {
+      "version": "1.0.6",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/cookie-signature/-/cookie-signature-1.0.6.tgz",
+      "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/core-js": {
+      "version": "3.49.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/core-js/-/core-js-3.49.0.tgz",
+      "integrity": "sha512-es1U2+YTtzpwkxVLwAFdSpaIMyQaq0PBgm3YD1W3Qpsn1NAmO3KSgZfu+oGSWVu6NvLHoHCV/aYcsE5wiB7ALg==",
+      "hasInstallScript": true,
+      "license": "MIT",
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/core-js"
+      }
+    },
+    "node_modules/core-js-compat": {
+      "version": "3.49.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/core-js-compat/-/core-js-compat-3.49.0.tgz",
+      "integrity": "sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "browserslist": "^4.28.1"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/core-js"
+      }
+    },
+    "node_modules/css-font-size-keywords": {
+      "version": "1.0.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/css-font-size-keywords/-/css-font-size-keywords-1.0.0.tgz",
+      "integrity": "sha512-Q+svMDbMlelgCfH/RVDKtTDaf5021O486ZThQPIpahnIjUkMUslC+WuOQSWTgGSrNCH08Y7tYNEmmy0hkfMI8Q==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/css-font-stretch-keywords": {
+      "version": "1.0.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/css-font-stretch-keywords/-/css-font-stretch-keywords-1.0.1.tgz",
+      "integrity": "sha512-KmugPO2BNqoyp9zmBIUGwt58UQSfyk1X5DbOlkb2pckDXFSAfjsD5wenb88fNrD6fvS+vu90a/tsPpb9vb0SLg==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/css-font-style-keywords": {
+      "version": "1.0.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/css-font-style-keywords/-/css-font-style-keywords-1.0.1.tgz",
+      "integrity": "sha512-0Fn0aTpcDktnR1RzaBYorIxQily85M2KXRpzmxQPgh8pxUN9Fcn00I8u9I3grNr1QXVgCl9T5Imx0ZwKU973Vg==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/css-font-weight-keywords": {
+      "version": "1.0.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/css-font-weight-keywords/-/css-font-weight-keywords-1.0.0.tgz",
+      "integrity": "sha512-5So8/NH+oDD+EzsnF4iaG4ZFHQ3vaViePkL1ZbZ5iC/KrsCY+WHq/lvOgrtmuOQ9pBBZ1ADGpaf+A4lj1Z9eYA==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/css-list-helpers": {
+      "version": "2.0.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/css-list-helpers/-/css-list-helpers-2.0.0.tgz",
+      "integrity": "sha512-9Bj8tZ0jWbAM3u/U6m/boAzAwLPwtjzFvwivr2piSvyVa3K3rChJzQy4RIHkNkKiZCHrEMWDJWtTR8UyVhdDnQ==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/css-system-font-keywords": {
+      "version": "1.0.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/css-system-font-keywords/-/css-system-font-keywords-1.0.0.tgz",
+      "integrity": "sha512-1umTtVd/fXS25ftfjB71eASCrYhilmEsvDEI6wG/QplnmlfmVM5HkZ/ZX46DT5K3eblFPgLUHt5BRCb0YXkSFA==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/cssesc": {
+      "version": "3.0.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/cssesc/-/cssesc-3.0.0.tgz",
+      "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+      "license": "MIT",
+      "bin": {
+        "cssesc": "bin/cssesc"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/csstype": {
+      "version": "3.2.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/csstype/-/csstype-3.2.3.tgz",
+      "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
+      "license": "MIT"
+    },
+    "node_modules/de-indent": {
+      "version": "1.0.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/de-indent/-/de-indent-1.0.2.tgz",
+      "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/debug": {
+      "version": "4.3.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/debug/-/debug-4.3.7.tgz",
+      "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
+      "license": "MIT",
+      "dependencies": {
+        "ms": "^2.1.3"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "peerDependenciesMeta": {
+        "supports-color": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/depd": {
+      "version": "2.0.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/depd/-/depd-2.0.0.tgz",
+      "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/destroy": {
+      "version": "1.2.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/destroy/-/destroy-1.2.0.tgz",
+      "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8",
+        "npm": "1.2.8000 || >= 1.4.16"
+      }
+    },
+    "node_modules/detect-libc": {
+      "version": "2.1.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/detect-libc/-/detect-libc-2.1.2.tgz",
+      "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/dom-walk": {
+      "version": "0.1.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/dom-walk/-/dom-walk-0.1.2.tgz",
+      "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w=="
+    },
+    "node_modules/dunder-proto": {
+      "version": "1.0.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/dunder-proto/-/dunder-proto-1.0.1.tgz",
+      "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind-apply-helpers": "^1.0.1",
+        "es-errors": "^1.3.0",
+        "gopd": "^1.2.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/ee-first": {
+      "version": "1.1.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/ee-first/-/ee-first-1.1.1.tgz",
+      "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/electron-to-chromium": {
+      "version": "1.5.378",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/electron-to-chromium/-/electron-to-chromium-1.5.378.tgz",
+      "integrity": "sha512-VinvOAuuPmdD1guEgGv5f2Qp7/vlfqOrUOMYNnOD4wj3pit8kRsQHzfIf6teyUGWo15Tg5+bOJaRunvyltpVWQ==",
+      "license": "ISC"
+    },
+    "node_modules/encodeurl": {
+      "version": "2.0.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/encodeurl/-/encodeurl-2.0.0.tgz",
+      "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/entities": {
+      "version": "4.5.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/entities/-/entities-4.5.0.tgz",
+      "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=0.12"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/entities?sponsor=1"
+      }
+    },
+    "node_modules/es-define-property": {
+      "version": "1.0.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/es-define-property/-/es-define-property-1.0.1.tgz",
+      "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es-errors": {
+      "version": "1.3.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/es-errors/-/es-errors-1.3.0.tgz",
+      "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es-module-lexer": {
+      "version": "1.5.4",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/es-module-lexer/-/es-module-lexer-1.5.4.tgz",
+      "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==",
+      "license": "MIT"
+    },
+    "node_modules/es-object-atoms": {
+      "version": "1.1.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/es-object-atoms/-/es-object-atoms-1.1.2.tgz",
+      "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "es-errors": "^1.3.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/esbuild": {
+      "version": "0.20.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/esbuild/-/esbuild-0.20.2.tgz",
+      "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==",
+      "hasInstallScript": true,
+      "license": "MIT",
+      "bin": {
+        "esbuild": "bin/esbuild"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "optionalDependencies": {
+        "@esbuild/aix-ppc64": "0.20.2",
+        "@esbuild/android-arm": "0.20.2",
+        "@esbuild/android-arm64": "0.20.2",
+        "@esbuild/android-x64": "0.20.2",
+        "@esbuild/darwin-arm64": "0.20.2",
+        "@esbuild/darwin-x64": "0.20.2",
+        "@esbuild/freebsd-arm64": "0.20.2",
+        "@esbuild/freebsd-x64": "0.20.2",
+        "@esbuild/linux-arm": "0.20.2",
+        "@esbuild/linux-arm64": "0.20.2",
+        "@esbuild/linux-ia32": "0.20.2",
+        "@esbuild/linux-loong64": "0.20.2",
+        "@esbuild/linux-mips64el": "0.20.2",
+        "@esbuild/linux-ppc64": "0.20.2",
+        "@esbuild/linux-riscv64": "0.20.2",
+        "@esbuild/linux-s390x": "0.20.2",
+        "@esbuild/linux-x64": "0.20.2",
+        "@esbuild/netbsd-x64": "0.20.2",
+        "@esbuild/openbsd-x64": "0.20.2",
+        "@esbuild/sunos-x64": "0.20.2",
+        "@esbuild/win32-arm64": "0.20.2",
+        "@esbuild/win32-ia32": "0.20.2",
+        "@esbuild/win32-x64": "0.20.2"
+      }
+    },
+    "node_modules/escalade": {
+      "version": "3.2.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/escalade/-/escalade-3.2.0.tgz",
+      "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/escape-html": {
+      "version": "1.0.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/escape-html/-/escape-html-1.0.3.tgz",
+      "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/escape-string-regexp": {
+      "version": "1.0.5",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+      "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.8.0"
+      }
+    },
+    "node_modules/estree-walker": {
+      "version": "2.0.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/estree-walker/-/estree-walker-2.0.2.tgz",
+      "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+      "license": "MIT"
+    },
+    "node_modules/esutils": {
+      "version": "2.0.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/esutils/-/esutils-2.0.3.tgz",
+      "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/etag": {
+      "version": "1.8.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/etag/-/etag-1.8.1.tgz",
+      "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/exif-parser": {
+      "version": "0.1.12",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/exif-parser/-/exif-parser-0.1.12.tgz",
+      "integrity": "sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw=="
+    },
+    "node_modules/express": {
+      "version": "4.20.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/express/-/express-4.20.0.tgz",
+      "integrity": "sha512-pLdae7I6QqShF5PnNTCVn4hI91Dx0Grkn2+IAsMTgMIKuQVte2dN9PeGSSAME2FR8anOhVA62QDIUaWVfEXVLw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "accepts": "~1.3.8",
+        "array-flatten": "1.1.1",
+        "body-parser": "1.20.3",
+        "content-disposition": "0.5.4",
+        "content-type": "~1.0.4",
+        "cookie": "0.6.0",
+        "cookie-signature": "1.0.6",
+        "debug": "2.6.9",
+        "depd": "2.0.0",
+        "encodeurl": "~2.0.0",
+        "escape-html": "~1.0.3",
+        "etag": "~1.8.1",
+        "finalhandler": "1.2.0",
+        "fresh": "0.5.2",
+        "http-errors": "2.0.0",
+        "merge-descriptors": "1.0.3",
+        "methods": "~1.1.2",
+        "on-finished": "2.4.1",
+        "parseurl": "~1.3.3",
+        "path-to-regexp": "0.1.10",
+        "proxy-addr": "~2.0.7",
+        "qs": "6.11.0",
+        "range-parser": "~1.2.1",
+        "safe-buffer": "5.2.1",
+        "send": "0.19.0",
+        "serve-static": "1.16.0",
+        "setprototypeof": "1.2.0",
+        "statuses": "2.0.1",
+        "type-is": "~1.6.18",
+        "utils-merge": "1.0.1",
+        "vary": "~1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.10.0"
+      }
+    },
+    "node_modules/express/node_modules/debug": {
+      "version": "2.6.9",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ms": "2.0.0"
+      }
+    },
+    "node_modules/express/node_modules/ms": {
+      "version": "2.0.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/exsolve": {
+      "version": "1.1.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/exsolve/-/exsolve-1.1.0.tgz",
+      "integrity": "sha512-D+42+T12DdIlJM3uepa55qGiL3sYdLBOxIl2ifQCzCHz4c7eiolaHsi3BIqEr7JxBzxv2pYZQX9kw16ziMcEmw==",
+      "license": "MIT"
+    },
+    "node_modules/fast-glob": {
+      "version": "3.3.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/fast-glob/-/fast-glob-3.3.3.tgz",
+      "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
+      "license": "MIT",
+      "dependencies": {
+        "@nodelib/fs.stat": "^2.0.2",
+        "@nodelib/fs.walk": "^1.2.3",
+        "glob-parent": "^5.1.2",
+        "merge2": "^1.3.0",
+        "micromatch": "^4.0.8"
+      },
+      "engines": {
+        "node": ">=8.6.0"
+      }
+    },
+    "node_modules/fastq": {
+      "version": "1.20.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/fastq/-/fastq-1.20.1.tgz",
+      "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==",
+      "license": "ISC",
+      "dependencies": {
+        "reusify": "^1.0.4"
+      }
+    },
+    "node_modules/file-type": {
+      "version": "9.0.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/file-type/-/file-type-9.0.0.tgz",
+      "integrity": "sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/fill-range": {
+      "version": "7.1.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/fill-range/-/fill-range-7.1.1.tgz",
+      "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+      "license": "MIT",
+      "dependencies": {
+        "to-regex-range": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/finalhandler": {
+      "version": "1.2.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/finalhandler/-/finalhandler-1.2.0.tgz",
+      "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "debug": "2.6.9",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "on-finished": "2.4.1",
+        "parseurl": "~1.3.3",
+        "statuses": "2.0.1",
+        "unpipe": "~1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/finalhandler/node_modules/debug": {
+      "version": "2.6.9",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ms": "2.0.0"
+      }
+    },
+    "node_modules/finalhandler/node_modules/encodeurl": {
+      "version": "1.0.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/encodeurl/-/encodeurl-1.0.2.tgz",
+      "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/finalhandler/node_modules/ms": {
+      "version": "2.0.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/follow-redirects": {
+      "version": "1.16.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/follow-redirects/-/follow-redirects-1.16.0.tgz",
+      "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==",
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://github.com/sponsors/RubenVerborgh"
+        }
+      ],
+      "license": "MIT",
+      "engines": {
+        "node": ">=4.0"
+      },
+      "peerDependenciesMeta": {
+        "debug": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/forwarded": {
+      "version": "0.2.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/forwarded/-/forwarded-0.2.0.tgz",
+      "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/fraction.js": {
+      "version": "4.3.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/fraction.js/-/fraction.js-4.3.7.tgz",
+      "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==",
+      "license": "MIT",
+      "engines": {
+        "node": "*"
+      },
+      "funding": {
+        "type": "patreon",
+        "url": "https://github.com/sponsors/rawify"
+      }
+    },
+    "node_modules/fresh": {
+      "version": "0.5.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/fresh/-/fresh-0.5.2.tgz",
+      "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/fs-extra": {
+      "version": "10.1.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/fs-extra/-/fs-extra-10.1.0.tgz",
+      "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
+      "license": "MIT",
+      "dependencies": {
+        "graceful-fs": "^4.2.0",
+        "jsonfile": "^6.0.1",
+        "universalify": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/fsevents": {
+      "version": "2.3.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/fsevents/-/fsevents-2.3.3.tgz",
+      "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+      "hasInstallScript": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+      }
+    },
+    "node_modules/function-bind": {
+      "version": "1.1.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/function-bind/-/function-bind-1.1.2.tgz",
+      "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/generic-names": {
+      "version": "4.0.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/generic-names/-/generic-names-4.0.0.tgz",
+      "integrity": "sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==",
+      "license": "MIT",
+      "dependencies": {
+        "loader-utils": "^3.2.0"
+      }
+    },
+    "node_modules/gensync": {
+      "version": "1.0.0-beta.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/gensync/-/gensync-1.0.0-beta.2.tgz",
+      "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/get-intrinsic": {
+      "version": "1.3.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
+      "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind-apply-helpers": "^1.0.2",
+        "es-define-property": "^1.0.1",
+        "es-errors": "^1.3.0",
+        "es-object-atoms": "^1.1.1",
+        "function-bind": "^1.1.2",
+        "get-proto": "^1.0.1",
+        "gopd": "^1.2.0",
+        "has-symbols": "^1.1.0",
+        "hasown": "^2.0.2",
+        "math-intrinsics": "^1.1.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/get-proto": {
+      "version": "1.0.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/get-proto/-/get-proto-1.0.1.tgz",
+      "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "dunder-proto": "^1.0.1",
+        "es-object-atoms": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/glob-parent": {
+      "version": "5.1.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/glob-parent/-/glob-parent-5.1.2.tgz",
+      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+      "license": "ISC",
+      "dependencies": {
+        "is-glob": "^4.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/global": {
+      "version": "4.4.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/global/-/global-4.4.0.tgz",
+      "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==",
+      "license": "MIT",
+      "dependencies": {
+        "min-document": "^2.19.0",
+        "process": "^0.11.10"
+      }
+    },
+    "node_modules/gopd": {
+      "version": "1.2.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/gopd/-/gopd-1.2.0.tgz",
+      "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/graceful-fs": {
+      "version": "4.2.11",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/graceful-fs/-/graceful-fs-4.2.11.tgz",
+      "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+      "license": "ISC"
+    },
+    "node_modules/has-flag": {
+      "version": "3.0.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/has-flag/-/has-flag-3.0.0.tgz",
+      "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/has-symbols": {
+      "version": "1.1.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/has-symbols/-/has-symbols-1.1.0.tgz",
+      "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/hash-sum": {
+      "version": "2.0.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/hash-sum/-/hash-sum-2.0.0.tgz",
+      "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==",
+      "license": "MIT"
+    },
+    "node_modules/hasown": {
+      "version": "2.0.4",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/hasown/-/hasown-2.0.4.tgz",
+      "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==",
+      "license": "MIT",
+      "dependencies": {
+        "function-bind": "^1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/he": {
+      "version": "1.2.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/he/-/he-1.2.0.tgz",
+      "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "he": "bin/he"
+      }
+    },
+    "node_modules/http-errors": {
+      "version": "2.0.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/http-errors/-/http-errors-2.0.0.tgz",
+      "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "depd": "2.0.0",
+        "inherits": "2.0.4",
+        "setprototypeof": "1.2.0",
+        "statuses": "2.0.1",
+        "toidentifier": "1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/iconv-lite": {
+      "version": "0.4.24",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/iconv-lite/-/iconv-lite-0.4.24.tgz",
+      "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "safer-buffer": ">= 2.1.2 < 3"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/icss-replace-symbols": {
+      "version": "1.1.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz",
+      "integrity": "sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==",
+      "license": "ISC"
+    },
+    "node_modules/icss-utils": {
+      "version": "5.1.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/icss-utils/-/icss-utils-5.1.0.tgz",
+      "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==",
+      "license": "ISC",
+      "engines": {
+        "node": "^10 || ^12 || >= 14"
+      },
+      "peerDependencies": {
+        "postcss": "^8.1.0"
+      }
+    },
+    "node_modules/ieee754": {
+      "version": "1.2.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/ieee754/-/ieee754-1.2.1.tgz",
+      "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/immutable": {
+      "version": "5.1.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/immutable/-/immutable-5.1.7.tgz",
+      "integrity": "sha512-47Xb+LFbZ/ZIjQMj6Q5J3IfK7PJFuqRdFOC9FpGgRTK6U2dAEVmkR9hp58qU4FpYux5YXpneDwkj2EP6lppzFA==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/inherits": {
+      "version": "2.0.4",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/inherits/-/inherits-2.0.4.tgz",
+      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/invert-kv": {
+      "version": "3.0.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/invert-kv/-/invert-kv-3.0.1.tgz",
+      "integrity": "sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sindresorhus/invert-kv?sponsor=1"
+      }
+    },
+    "node_modules/ipaddr.js": {
+      "version": "1.9.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+      "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.10"
+      }
+    },
+    "node_modules/is-binary-path": {
+      "version": "2.1.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/is-binary-path/-/is-binary-path-2.1.0.tgz",
+      "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+      "license": "MIT",
+      "dependencies": {
+        "binary-extensions": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/is-core-module": {
+      "version": "2.16.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/is-core-module/-/is-core-module-2.16.2.tgz",
+      "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==",
+      "license": "MIT",
+      "dependencies": {
+        "hasown": "^2.0.3"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-extglob": {
+      "version": "2.1.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/is-extglob/-/is-extglob-2.1.1.tgz",
+      "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-function": {
+      "version": "1.0.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/is-function/-/is-function-1.0.2.tgz",
+      "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==",
+      "license": "MIT"
+    },
+    "node_modules/is-glob": {
+      "version": "4.0.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/is-glob/-/is-glob-4.0.3.tgz",
+      "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+      "license": "MIT",
+      "dependencies": {
+        "is-extglob": "^2.1.1"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-number": {
+      "version": "7.0.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/is-number/-/is-number-7.0.0.tgz",
+      "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.12.0"
+      }
+    },
+    "node_modules/isbinaryfile": {
+      "version": "5.0.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/isbinaryfile/-/isbinaryfile-5.0.2.tgz",
+      "integrity": "sha512-GvcjojwonMjWbTkfMpnVHVqXW/wKMYDfEpY94/8zy8HFMOqb/VL6oeONq9v87q4ttVlaTLnGXnJD4B5B1OTGIg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 18.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/gjtorikian/"
+      }
+    },
+    "node_modules/jimp": {
+      "version": "0.10.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/jimp/-/jimp-0.10.3.tgz",
+      "integrity": "sha512-meVWmDMtyUG5uYjFkmzu0zBgnCvvxwWNi27c4cg55vWNVC9ES4Lcwb+ogx+uBBQE3Q+dLKjXaLl0JVW+nUNwbQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/custom": "^0.10.3",
+        "@jimp/plugins": "^0.10.3",
+        "@jimp/types": "^0.10.3",
+        "core-js": "^3.4.1",
+        "regenerator-runtime": "^0.13.3"
+      }
+    },
+    "node_modules/jimp/node_modules/regenerator-runtime": {
+      "version": "0.13.11",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
+      "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==",
+      "license": "MIT"
+    },
+    "node_modules/jpeg-js": {
+      "version": "0.3.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/jpeg-js/-/jpeg-js-0.3.7.tgz",
+      "integrity": "sha512-9IXdWudL61npZjvLuVe/ktHiA41iE8qFyLB+4VDTblEsWBzeg8WQTlktdUK4CdncUqtUgUg0bbOmTE2bKBKaBQ==",
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/js-tokens": {
+      "version": "4.0.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/js-tokens/-/js-tokens-4.0.0.tgz",
+      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+      "license": "MIT"
+    },
+    "node_modules/jsesc": {
+      "version": "3.1.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/jsesc/-/jsesc-3.1.0.tgz",
+      "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
+      "license": "MIT",
+      "bin": {
+        "jsesc": "bin/jsesc"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/json5": {
+      "version": "2.2.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/json5/-/json5-2.2.3.tgz",
+      "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+      "license": "MIT",
+      "bin": {
+        "json5": "lib/cli.js"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/jsonc-parser": {
+      "version": "3.3.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/jsonc-parser/-/jsonc-parser-3.3.1.tgz",
+      "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==",
+      "license": "MIT"
+    },
+    "node_modules/jsonfile": {
+      "version": "6.2.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/jsonfile/-/jsonfile-6.2.1.tgz",
+      "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==",
+      "license": "MIT",
+      "dependencies": {
+        "universalify": "^2.0.0"
+      },
+      "optionalDependencies": {
+        "graceful-fs": "^4.1.6"
+      }
+    },
+    "node_modules/lcid": {
+      "version": "3.1.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/lcid/-/lcid-3.1.1.tgz",
+      "integrity": "sha512-M6T051+5QCGLBQb8id3hdvIW8+zeFV2FyBGFS9IEK5H9Wt4MueD4bW1eWikpHgZp+5xR3l5c8pZUkQsIA0BFZg==",
+      "license": "MIT",
+      "dependencies": {
+        "invert-kv": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/licia": {
+      "version": "1.41.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/licia/-/licia-1.41.1.tgz",
+      "integrity": "sha512-XqObV8u1KEMdYWaNK0leRrTwhzKnLQEkhbnuUu7qGNH3zJoN7l9sfvF6PfHstSCuUOmpEP+0SBjRrk0I9uZs8g==",
+      "license": "MIT"
+    },
+    "node_modules/lilconfig": {
+      "version": "2.1.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/lilconfig/-/lilconfig-2.1.0.tgz",
+      "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/lines-and-columns": {
+      "version": "2.0.4",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/lines-and-columns/-/lines-and-columns-2.0.4.tgz",
+      "integrity": "sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==",
+      "license": "MIT",
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      }
+    },
+    "node_modules/load-bmfont": {
+      "version": "1.4.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/load-bmfont/-/load-bmfont-1.4.2.tgz",
+      "integrity": "sha512-qElWkmjW9Oq1F9EI5Gt7aD9zcdHb9spJCW1L/dmPf7KzCCEJxq8nhHz5eCgI9aMf7vrG/wyaCqdsI+Iy9ZTlog==",
+      "license": "MIT",
+      "dependencies": {
+        "buffer-equal": "0.0.1",
+        "mime": "^1.3.4",
+        "parse-bmfont-ascii": "^1.0.3",
+        "parse-bmfont-binary": "^1.0.5",
+        "parse-bmfont-xml": "^1.1.4",
+        "phin": "^3.7.1",
+        "xhr": "^2.0.1",
+        "xtend": "^4.0.0"
+      }
+    },
+    "node_modules/load-bmfont/node_modules/mime": {
+      "version": "1.6.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/mime/-/mime-1.6.0.tgz",
+      "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+      "license": "MIT",
+      "bin": {
+        "mime": "cli.js"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/load-bmfont/node_modules/phin": {
+      "version": "3.7.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/phin/-/phin-3.7.1.tgz",
+      "integrity": "sha512-GEazpTWwTZaEQ9RhL7Nyz0WwqilbqgLahDM3D0hxWwmVDI52nXEybHqiN6/elwpkJBhcuj+WbBu+QfT0uhPGfQ==",
+      "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.",
+      "license": "MIT",
+      "dependencies": {
+        "centra": "^2.7.0"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/loader-utils": {
+      "version": "3.3.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/loader-utils/-/loader-utils-3.3.1.tgz",
+      "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 12.13.0"
+      }
+    },
+    "node_modules/local-pkg": {
+      "version": "1.2.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/local-pkg/-/local-pkg-1.2.1.tgz",
+      "integrity": "sha512-++gUqRDEvcnN6Zhqrr+y/CkVEHhlrR96vZn3nZZPYzMcBUyBtTKzB9NadClFIsIVSsu+3i9tfk/erqy9kAmt7Q==",
+      "license": "MIT",
+      "dependencies": {
+        "mlly": "^1.7.4",
+        "pkg-types": "^2.3.0",
+        "quansync": "^0.2.11"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
+      }
+    },
+    "node_modules/local-pkg/node_modules/confbox": {
+      "version": "0.2.4",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/confbox/-/confbox-0.2.4.tgz",
+      "integrity": "sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==",
+      "license": "MIT"
+    },
+    "node_modules/local-pkg/node_modules/pkg-types": {
+      "version": "2.3.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/pkg-types/-/pkg-types-2.3.1.tgz",
+      "integrity": "sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg==",
+      "license": "MIT",
+      "dependencies": {
+        "confbox": "^0.2.4",
+        "exsolve": "^1.0.8",
+        "pathe": "^2.0.3"
+      }
+    },
+    "node_modules/localstorage-polyfill": {
+      "version": "1.0.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/localstorage-polyfill/-/localstorage-polyfill-1.0.1.tgz",
+      "integrity": "sha512-m4iHVZxFH5734oQcPKU08025gIz2+4bjWR9lulP8ZYxEJR0BpA0w32oJmkzh8y3UI9ci7xCBehQDc3oA1X+VHw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/lodash.camelcase": {
+      "version": "4.3.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+      "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==",
+      "license": "MIT"
+    },
+    "node_modules/lodash.debounce": {
+      "version": "4.0.8",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+      "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/lru-cache": {
+      "version": "5.1.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/lru-cache/-/lru-cache-5.1.1.tgz",
+      "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+      "license": "ISC",
+      "dependencies": {
+        "yallist": "^3.0.2"
+      }
+    },
+    "node_modules/magic-string": {
+      "version": "0.30.11",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/magic-string/-/magic-string-0.30.11.tgz",
+      "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==",
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/sourcemap-codec": "^1.5.0"
+      }
+    },
+    "node_modules/math-intrinsics": {
+      "version": "1.1.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+      "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/media-typer": {
+      "version": "0.3.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/media-typer/-/media-typer-0.3.0.tgz",
+      "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/meow": {
+      "version": "13.2.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/meow/-/meow-13.2.0.tgz",
+      "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/merge": {
+      "version": "2.1.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/merge/-/merge-2.1.1.tgz",
+      "integrity": "sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==",
+      "license": "MIT"
+    },
+    "node_modules/merge-descriptors": {
+      "version": "1.0.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
+      "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
+      "dev": true,
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/merge2": {
+      "version": "1.4.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/merge2/-/merge2-1.4.1.tgz",
+      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/methods": {
+      "version": "1.1.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/methods/-/methods-1.1.2.tgz",
+      "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/micromatch": {
+      "version": "4.0.8",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/micromatch/-/micromatch-4.0.8.tgz",
+      "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+      "license": "MIT",
+      "dependencies": {
+        "braces": "^3.0.3",
+        "picomatch": "^2.3.1"
+      },
+      "engines": {
+        "node": ">=8.6"
+      }
+    },
+    "node_modules/mime": {
+      "version": "3.0.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/mime/-/mime-3.0.0.tgz",
+      "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==",
+      "license": "MIT",
+      "bin": {
+        "mime": "cli.js"
+      },
+      "engines": {
+        "node": ">=10.0.0"
+      }
+    },
+    "node_modules/mime-db": {
+      "version": "1.52.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/mime-db/-/mime-db-1.52.0.tgz",
+      "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/mime-types": {
+      "version": "2.1.35",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/mime-types/-/mime-types-2.1.35.tgz",
+      "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "mime-db": "1.52.0"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/min-document": {
+      "version": "2.19.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/min-document/-/min-document-2.19.2.tgz",
+      "integrity": "sha512-8S5I8db/uZN8r9HSLFVWPdJCvYOejMcEC82VIzNUc6Zkklf/d1gg2psfE79/vyhWOj4+J8MtwmoOz3TmvaGu5A==",
+      "license": "MIT",
+      "dependencies": {
+        "dom-walk": "^0.1.0"
+      }
+    },
+    "node_modules/minimatch": {
+      "version": "9.0.9",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/minimatch/-/minimatch-9.0.9.tgz",
+      "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "brace-expansion": "^2.0.2"
+      },
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/minimist": {
+      "version": "1.2.8",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/minimist/-/minimist-1.2.8.tgz",
+      "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/mkdirp": {
+      "version": "0.5.6",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/mkdirp/-/mkdirp-0.5.6.tgz",
+      "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+      "license": "MIT",
+      "dependencies": {
+        "minimist": "^1.2.6"
+      },
+      "bin": {
+        "mkdirp": "bin/cmd.js"
+      }
+    },
+    "node_modules/mlly": {
+      "version": "1.8.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/mlly/-/mlly-1.8.2.tgz",
+      "integrity": "sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==",
+      "license": "MIT",
+      "dependencies": {
+        "acorn": "^8.16.0",
+        "pathe": "^2.0.3",
+        "pkg-types": "^1.3.1",
+        "ufo": "^1.6.3"
+      }
+    },
+    "node_modules/module-alias": {
+      "version": "2.2.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/module-alias/-/module-alias-2.2.3.tgz",
+      "integrity": "sha512-23g5BFj4zdQL/b6tor7Ji+QY4pEfNH784BMslY9Qb0UnJWRAt+lQGLYmRaM0KDBwIG23ffEBELhZDP2rhi9f/Q==",
+      "license": "MIT"
+    },
+    "node_modules/ms": {
+      "version": "2.1.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/ms/-/ms-2.1.3.tgz",
+      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+      "license": "MIT"
+    },
+    "node_modules/muggle-string": {
+      "version": "0.3.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/muggle-string/-/muggle-string-0.3.1.tgz",
+      "integrity": "sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/nanoid": {
+      "version": "3.3.15",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/nanoid/-/nanoid-3.3.15.tgz",
+      "integrity": "sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "MIT",
+      "bin": {
+        "nanoid": "bin/nanoid.cjs"
+      },
+      "engines": {
+        "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+      }
+    },
+    "node_modules/negotiator": {
+      "version": "0.6.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/negotiator/-/negotiator-0.6.3.tgz",
+      "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/node-addon-api": {
+      "version": "7.1.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/node-addon-api/-/node-addon-api-7.1.1.tgz",
+      "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==",
+      "dev": true,
+      "license": "MIT",
+      "optional": true
+    },
+    "node_modules/node-releases": {
+      "version": "2.0.50",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/node-releases/-/node-releases-2.0.50.tgz",
+      "integrity": "sha512-J6l92tKHX6w8Jy5nO1Vuc01NoIiRGi/d6qBKVxh+IQ8Cr3b6HbVNfKiF8ZpFKufTwpwxMmce2W3iQZ861ZRyTg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/normalize-path": {
+      "version": "3.0.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/normalize-path/-/normalize-path-3.0.0.tgz",
+      "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/normalize-range": {
+      "version": "0.1.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/normalize-range/-/normalize-range-0.1.2.tgz",
+      "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/object-inspect": {
+      "version": "1.13.4",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/object-inspect/-/object-inspect-1.13.4.tgz",
+      "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/omggif": {
+      "version": "1.0.10",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/omggif/-/omggif-1.0.10.tgz",
+      "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==",
+      "license": "MIT"
+    },
+    "node_modules/on-finished": {
+      "version": "2.4.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/on-finished/-/on-finished-2.4.1.tgz",
+      "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ee-first": "1.1.1"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/os-locale-s-fix": {
+      "version": "1.0.8-fix-1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/os-locale-s-fix/-/os-locale-s-fix-1.0.8-fix-1.tgz",
+      "integrity": "sha512-Sv0OvhPiMutICiwORAUefv02DCPb62IelBmo8ZsSrRHyI3FStqIWZvjqDkvtjU+lcujo7UNir+dCwKSqlEQ/5w==",
+      "license": "MIT",
+      "dependencies": {
+        "lcid": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=10",
+        "yarn": "^1.22.4"
+      }
+    },
+    "node_modules/pako": {
+      "version": "1.0.11",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/pako/-/pako-1.0.11.tgz",
+      "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
+      "license": "(MIT AND Zlib)"
+    },
+    "node_modules/parse-bmfont-ascii": {
+      "version": "1.0.6",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz",
+      "integrity": "sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA==",
+      "license": "MIT"
+    },
+    "node_modules/parse-bmfont-binary": {
+      "version": "1.0.6",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz",
+      "integrity": "sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA==",
+      "license": "MIT"
+    },
+    "node_modules/parse-bmfont-xml": {
+      "version": "1.1.6",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/parse-bmfont-xml/-/parse-bmfont-xml-1.1.6.tgz",
+      "integrity": "sha512-0cEliVMZEhrFDwMh4SxIyVJpqYoOWDJ9P895tFuS+XuNzI5UBmBk5U5O4KuJdTnZpSBI4LFA2+ZiJaiwfSwlMA==",
+      "license": "MIT",
+      "dependencies": {
+        "xml-parse-from-string": "^1.0.0",
+        "xml2js": "^0.5.0"
+      }
+    },
+    "node_modules/parse-css-font": {
+      "version": "4.0.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/parse-css-font/-/parse-css-font-4.0.0.tgz",
+      "integrity": "sha512-lnY7dTUfjRXsSo5G5C639L8RaBBaVSgL+5hacIFKsNHzeCJQ5SFSZv1DZmc7+wZv/22PFGOq2YbaEHLdaCS/mQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "css-font-size-keywords": "^1.0.0",
+        "css-font-stretch-keywords": "^1.0.1",
+        "css-font-style-keywords": "^1.0.1",
+        "css-font-weight-keywords": "^1.0.0",
+        "css-list-helpers": "^2.0.0",
+        "css-system-font-keywords": "^1.0.0",
+        "unquote": "^1.1.1"
+      }
+    },
+    "node_modules/parse-headers": {
+      "version": "2.0.6",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/parse-headers/-/parse-headers-2.0.6.tgz",
+      "integrity": "sha512-Tz11t3uKztEW5FEVZnj1ox8GKblWn+PvHY9TmJV5Mll2uHEwRdR/5Li1OlXoECjLYkApdhWy44ocONwXLiKO5A==",
+      "license": "MIT"
+    },
+    "node_modules/parseurl": {
+      "version": "1.3.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/parseurl/-/parseurl-1.3.3.tgz",
+      "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/path-browserify": {
+      "version": "1.0.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/path-browserify/-/path-browserify-1.0.1.tgz",
+      "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/path-parse": {
+      "version": "1.0.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/path-parse/-/path-parse-1.0.7.tgz",
+      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+      "license": "MIT"
+    },
+    "node_modules/path-to-regexp": {
+      "version": "0.1.10",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/path-to-regexp/-/path-to-regexp-0.1.10.tgz",
+      "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/pathe": {
+      "version": "2.0.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/pathe/-/pathe-2.0.3.tgz",
+      "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
+      "license": "MIT"
+    },
+    "node_modules/phin": {
+      "version": "2.9.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/phin/-/phin-2.9.3.tgz",
+      "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==",
+      "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.",
+      "license": "MIT"
+    },
+    "node_modules/picocolors": {
+      "version": "1.1.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/picocolors/-/picocolors-1.1.0.tgz",
+      "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==",
+      "license": "ISC"
+    },
+    "node_modules/picomatch": {
+      "version": "2.3.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/picomatch/-/picomatch-2.3.2.tgz",
+      "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=8.6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/jonschlinkert"
+      }
+    },
+    "node_modules/pify": {
+      "version": "2.3.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/pify/-/pify-2.3.0.tgz",
+      "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/pinia": {
+      "version": "2.3.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/pinia/-/pinia-2.3.1.tgz",
+      "integrity": "sha512-khUlZSwt9xXCaTbbxFYBKDc/bWAGWJjOgvxETwkTN7KRm66EeT1ZdZj6i2ceh9sP2Pzqsbc704r2yngBrxBVug==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/devtools-api": "^6.6.3",
+        "vue-demi": "^0.14.10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/posva"
+      },
+      "peerDependencies": {
+        "typescript": ">=4.4.4",
+        "vue": "^2.7.0 || ^3.5.11"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/pixelmatch": {
+      "version": "4.0.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/pixelmatch/-/pixelmatch-4.0.2.tgz",
+      "integrity": "sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA==",
+      "license": "ISC",
+      "dependencies": {
+        "pngjs": "^3.0.0"
+      },
+      "bin": {
+        "pixelmatch": "bin/pixelmatch"
+      }
+    },
+    "node_modules/pkg-types": {
+      "version": "1.3.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/pkg-types/-/pkg-types-1.3.1.tgz",
+      "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==",
+      "license": "MIT",
+      "dependencies": {
+        "confbox": "^0.1.8",
+        "mlly": "^1.7.4",
+        "pathe": "^2.0.1"
+      }
+    },
+    "node_modules/pngjs": {
+      "version": "3.4.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/pngjs/-/pngjs-3.4.0.tgz",
+      "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=4.0.0"
+      }
+    },
+    "node_modules/postcss": {
+      "version": "8.5.15",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/postcss/-/postcss-8.5.15.tgz",
+      "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==",
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/postcss/"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/postcss"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "nanoid": "^3.3.12",
+        "picocolors": "^1.1.1",
+        "source-map-js": "^1.2.1"
+      },
+      "engines": {
+        "node": "^10 || ^12 || >=14"
+      }
+    },
+    "node_modules/postcss-import": {
+      "version": "14.1.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/postcss-import/-/postcss-import-14.1.0.tgz",
+      "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==",
+      "license": "MIT",
+      "dependencies": {
+        "postcss-value-parser": "^4.0.0",
+        "read-cache": "^1.0.0",
+        "resolve": "^1.1.7"
+      },
+      "engines": {
+        "node": ">=10.0.0"
+      },
+      "peerDependencies": {
+        "postcss": "^8.0.0"
+      }
+    },
+    "node_modules/postcss-load-config": {
+      "version": "3.1.4",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/postcss-load-config/-/postcss-load-config-3.1.4.tgz",
+      "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==",
+      "license": "MIT",
+      "dependencies": {
+        "lilconfig": "^2.0.5",
+        "yaml": "^1.10.2"
+      },
+      "engines": {
+        "node": ">= 10"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/postcss/"
+      },
+      "peerDependencies": {
+        "postcss": ">=8.0.9",
+        "ts-node": ">=9.0.0"
+      },
+      "peerDependenciesMeta": {
+        "postcss": {
+          "optional": true
+        },
+        "ts-node": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/postcss-modules": {
+      "version": "4.3.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/postcss-modules/-/postcss-modules-4.3.1.tgz",
+      "integrity": "sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q==",
+      "license": "MIT",
+      "dependencies": {
+        "generic-names": "^4.0.0",
+        "icss-replace-symbols": "^1.1.0",
+        "lodash.camelcase": "^4.3.0",
+        "postcss-modules-extract-imports": "^3.0.0",
+        "postcss-modules-local-by-default": "^4.0.0",
+        "postcss-modules-scope": "^3.0.0",
+        "postcss-modules-values": "^4.0.0",
+        "string-hash": "^1.1.1"
+      },
+      "peerDependencies": {
+        "postcss": "^8.0.0"
+      }
+    },
+    "node_modules/postcss-modules-extract-imports": {
+      "version": "3.1.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz",
+      "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==",
+      "license": "ISC",
+      "engines": {
+        "node": "^10 || ^12 || >= 14"
+      },
+      "peerDependencies": {
+        "postcss": "^8.1.0"
+      }
+    },
+    "node_modules/postcss-modules-local-by-default": {
+      "version": "4.2.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz",
+      "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==",
+      "license": "MIT",
+      "dependencies": {
+        "icss-utils": "^5.0.0",
+        "postcss-selector-parser": "^7.0.0",
+        "postcss-value-parser": "^4.1.0"
+      },
+      "engines": {
+        "node": "^10 || ^12 || >= 14"
+      },
+      "peerDependencies": {
+        "postcss": "^8.1.0"
+      }
+    },
+    "node_modules/postcss-modules-local-by-default/node_modules/postcss-selector-parser": {
+      "version": "7.1.4",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz",
+      "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==",
+      "license": "MIT",
+      "dependencies": {
+        "cssesc": "^3.0.0",
+        "util-deprecate": "^1.0.2"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/postcss-modules-scope": {
+      "version": "3.2.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz",
+      "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==",
+      "license": "ISC",
+      "dependencies": {
+        "postcss-selector-parser": "^7.0.0"
+      },
+      "engines": {
+        "node": "^10 || ^12 || >= 14"
+      },
+      "peerDependencies": {
+        "postcss": "^8.1.0"
+      }
+    },
+    "node_modules/postcss-modules-scope/node_modules/postcss-selector-parser": {
+      "version": "7.1.4",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz",
+      "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==",
+      "license": "MIT",
+      "dependencies": {
+        "cssesc": "^3.0.0",
+        "util-deprecate": "^1.0.2"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/postcss-modules-values": {
+      "version": "4.0.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz",
+      "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==",
+      "license": "ISC",
+      "dependencies": {
+        "icss-utils": "^5.0.0"
+      },
+      "engines": {
+        "node": "^10 || ^12 || >= 14"
+      },
+      "peerDependencies": {
+        "postcss": "^8.1.0"
+      }
+    },
+    "node_modules/postcss-selector-parser": {
+      "version": "6.1.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+      "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
+      "license": "MIT",
+      "dependencies": {
+        "cssesc": "^3.0.0",
+        "util-deprecate": "^1.0.2"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/postcss-value-parser": {
+      "version": "4.2.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+      "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
+      "license": "MIT"
+    },
+    "node_modules/postcss/node_modules/picocolors": {
+      "version": "1.1.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/picocolors/-/picocolors-1.1.1.tgz",
+      "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+      "license": "ISC"
+    },
+    "node_modules/process": {
+      "version": "0.11.10",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/process/-/process-0.11.10.tgz",
+      "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6.0"
+      }
+    },
+    "node_modules/proxy-addr": {
+      "version": "2.0.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/proxy-addr/-/proxy-addr-2.0.7.tgz",
+      "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "forwarded": "0.2.0",
+        "ipaddr.js": "1.9.1"
+      },
+      "engines": {
+        "node": ">= 0.10"
+      }
+    },
+    "node_modules/qrcode-reader": {
+      "version": "1.0.4",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/qrcode-reader/-/qrcode-reader-1.0.4.tgz",
+      "integrity": "sha512-rRjALGNh9zVqvweg1j5OKIQKNsw3bLC+7qwlnead5K/9cb1cEIAGkwikt/09U0K+2IDWGD9CC6SP7tHAjUeqvQ==",
+      "license": "Apache-2.0"
+    },
+    "node_modules/qrcode-terminal": {
+      "version": "0.12.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz",
+      "integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==",
+      "bin": {
+        "qrcode-terminal": "bin/qrcode-terminal.js"
+      }
+    },
+    "node_modules/qs": {
+      "version": "6.11.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/qs/-/qs-6.11.0.tgz",
+      "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "side-channel": "^1.0.4"
+      },
+      "engines": {
+        "node": ">=0.6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/quansync": {
+      "version": "0.2.11",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/quansync/-/quansync-0.2.11.tgz",
+      "integrity": "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==",
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://github.com/sponsors/antfu"
+        },
+        {
+          "type": "individual",
+          "url": "https://github.com/sponsors/sxzz"
+        }
+      ],
+      "license": "MIT"
+    },
+    "node_modules/queue-microtask": {
+      "version": "1.2.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/queue-microtask/-/queue-microtask-1.2.3.tgz",
+      "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "MIT"
+    },
+    "node_modules/range-parser": {
+      "version": "1.2.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/range-parser/-/range-parser-1.2.1.tgz",
+      "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/raw-body": {
+      "version": "2.5.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/raw-body/-/raw-body-2.5.2.tgz",
+      "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "bytes": "3.1.2",
+        "http-errors": "2.0.0",
+        "iconv-lite": "0.4.24",
+        "unpipe": "1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/read-cache": {
+      "version": "1.0.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/read-cache/-/read-cache-1.0.0.tgz",
+      "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
+      "license": "MIT",
+      "dependencies": {
+        "pify": "^2.3.0"
+      }
+    },
+    "node_modules/readdirp": {
+      "version": "3.6.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/readdirp/-/readdirp-3.6.0.tgz",
+      "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+      "license": "MIT",
+      "dependencies": {
+        "picomatch": "^2.2.1"
+      },
+      "engines": {
+        "node": ">=8.10.0"
+      }
+    },
+    "node_modules/regenerate": {
+      "version": "1.4.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/regenerate/-/regenerate-1.4.2.tgz",
+      "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/regenerate-unicode-properties": {
+      "version": "10.2.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz",
+      "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "regenerate": "^1.4.2"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/regenerator-runtime": {
+      "version": "0.14.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
+      "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/regexpu-core": {
+      "version": "6.4.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/regexpu-core/-/regexpu-core-6.4.0.tgz",
+      "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "regenerate": "^1.4.2",
+        "regenerate-unicode-properties": "^10.2.2",
+        "regjsgen": "^0.8.0",
+        "regjsparser": "^0.13.0",
+        "unicode-match-property-ecmascript": "^2.0.0",
+        "unicode-match-property-value-ecmascript": "^2.2.1"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/regjsgen": {
+      "version": "0.8.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/regjsgen/-/regjsgen-0.8.0.tgz",
+      "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/regjsparser": {
+      "version": "0.13.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/regjsparser/-/regjsparser-0.13.2.tgz",
+      "integrity": "sha512-NgRBy2Nx/bE+9F27nVHnqcN5HjyLmecqsqx2PJHu3/IEtADD4WuxuXIVExD5PoSDFVrl78dOonfcOe5O+5nbzQ==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "jsesc": "~3.1.0"
+      },
+      "bin": {
+        "regjsparser": "bin/parser"
+      }
+    },
+    "node_modules/resolve": {
+      "version": "1.22.8",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/resolve/-/resolve-1.22.8.tgz",
+      "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
+      "license": "MIT",
+      "dependencies": {
+        "is-core-module": "^2.13.0",
+        "path-parse": "^1.0.7",
+        "supports-preserve-symlinks-flag": "^1.0.0"
+      },
+      "bin": {
+        "resolve": "bin/resolve"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/reusify": {
+      "version": "1.1.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/reusify/-/reusify-1.1.0.tgz",
+      "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
+      "license": "MIT",
+      "engines": {
+        "iojs": ">=1.0.0",
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/rollup": {
+      "version": "4.62.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/rollup/-/rollup-4.62.2.tgz",
+      "integrity": "sha512-RFnrW4lhXA3s3eqHDZvN654g8OTjzRfqpIRJYczCGB6HzphckVAi/Qh4tbPUbRuDi7s1Llv8g/NspLkttY3gTA==",
+      "devOptional": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/estree": "1.0.9"
+      },
+      "bin": {
+        "rollup": "dist/bin/rollup"
+      },
+      "engines": {
+        "node": ">=18.0.0",
+        "npm": ">=8.0.0"
+      },
+      "optionalDependencies": {
+        "@rollup/rollup-android-arm-eabi": "4.62.2",
+        "@rollup/rollup-android-arm64": "4.62.2",
+        "@rollup/rollup-darwin-arm64": "4.62.2",
+        "@rollup/rollup-darwin-x64": "4.62.2",
+        "@rollup/rollup-freebsd-arm64": "4.62.2",
+        "@rollup/rollup-freebsd-x64": "4.62.2",
+        "@rollup/rollup-linux-arm-gnueabihf": "4.62.2",
+        "@rollup/rollup-linux-arm-musleabihf": "4.62.2",
+        "@rollup/rollup-linux-arm64-gnu": "4.62.2",
+        "@rollup/rollup-linux-arm64-musl": "4.62.2",
+        "@rollup/rollup-linux-loong64-gnu": "4.62.2",
+        "@rollup/rollup-linux-loong64-musl": "4.62.2",
+        "@rollup/rollup-linux-ppc64-gnu": "4.62.2",
+        "@rollup/rollup-linux-ppc64-musl": "4.62.2",
+        "@rollup/rollup-linux-riscv64-gnu": "4.62.2",
+        "@rollup/rollup-linux-riscv64-musl": "4.62.2",
+        "@rollup/rollup-linux-s390x-gnu": "4.62.2",
+        "@rollup/rollup-linux-x64-gnu": "4.62.2",
+        "@rollup/rollup-linux-x64-musl": "4.62.2",
+        "@rollup/rollup-openbsd-x64": "4.62.2",
+        "@rollup/rollup-openharmony-arm64": "4.62.2",
+        "@rollup/rollup-win32-arm64-msvc": "4.62.2",
+        "@rollup/rollup-win32-ia32-msvc": "4.62.2",
+        "@rollup/rollup-win32-x64-gnu": "4.62.2",
+        "@rollup/rollup-win32-x64-msvc": "4.62.2",
+        "fsevents": "~2.3.2"
+      }
+    },
+    "node_modules/run-parallel": {
+      "version": "1.2.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/run-parallel/-/run-parallel-1.2.0.tgz",
+      "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "queue-microtask": "^1.2.2"
+      }
+    },
+    "node_modules/safe-area-insets": {
+      "version": "1.4.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/safe-area-insets/-/safe-area-insets-1.4.1.tgz",
+      "integrity": "sha512-r/nRWTjFGhhm3w1Z6Kd/jY11srN+lHt2mNl1E/emQGW8ic7n3Avu4noibklfSM+Y34peNphHD/BSZecav0sXYQ==",
+      "license": "ISC"
+    },
+    "node_modules/safe-buffer": {
+      "version": "5.2.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/safe-buffer/-/safe-buffer-5.2.1.tgz",
+      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "MIT"
+    },
+    "node_modules/safer-buffer": {
+      "version": "2.1.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/safer-buffer/-/safer-buffer-2.1.2.tgz",
+      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/sass": {
+      "version": "1.101.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/sass/-/sass-1.101.0.tgz",
+      "integrity": "sha512-OL3GoQyoUdDt843DpVmDO6y2k1sc5IhUDSpu8XucEI+35neq5QivZ1iuegnpraEVTJXlQGK1gl27zKcTLEPbQw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "chokidar": "^5.0.0",
+        "immutable": "^5.1.5",
+        "source-map-js": ">=0.6.2 <2.0.0"
+      },
+      "bin": {
+        "sass": "sass.js"
+      },
+      "engines": {
+        "node": ">=20.19.0"
+      },
+      "optionalDependencies": {
+        "@parcel/watcher": "^2.4.1"
+      }
+    },
+    "node_modules/sass/node_modules/chokidar": {
+      "version": "5.0.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/chokidar/-/chokidar-5.0.0.tgz",
+      "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "readdirp": "^5.0.0"
+      },
+      "engines": {
+        "node": ">= 20.19.0"
+      },
+      "funding": {
+        "url": "https://paulmillr.com/funding/"
+      }
+    },
+    "node_modules/sass/node_modules/readdirp": {
+      "version": "5.0.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/readdirp/-/readdirp-5.0.0.tgz",
+      "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 20.19.0"
+      },
+      "funding": {
+        "type": "individual",
+        "url": "https://paulmillr.com/funding/"
+      }
+    },
+    "node_modules/sax": {
+      "version": "1.6.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/sax/-/sax-1.6.0.tgz",
+      "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==",
+      "license": "BlueOak-1.0.0",
+      "engines": {
+        "node": ">=11.0.0"
+      }
+    },
+    "node_modules/scule": {
+      "version": "1.3.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/scule/-/scule-1.3.0.tgz",
+      "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==",
+      "license": "MIT"
+    },
+    "node_modules/semver": {
+      "version": "6.3.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/semver/-/semver-6.3.1.tgz",
+      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+      "license": "ISC",
+      "bin": {
+        "semver": "bin/semver.js"
+      }
+    },
+    "node_modules/send": {
+      "version": "0.19.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/send/-/send-0.19.0.tgz",
+      "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "debug": "2.6.9",
+        "depd": "2.0.0",
+        "destroy": "1.2.0",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "etag": "~1.8.1",
+        "fresh": "0.5.2",
+        "http-errors": "2.0.0",
+        "mime": "1.6.0",
+        "ms": "2.1.3",
+        "on-finished": "2.4.1",
+        "range-parser": "~1.2.1",
+        "statuses": "2.0.1"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/send/node_modules/debug": {
+      "version": "2.6.9",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ms": "2.0.0"
+      }
+    },
+    "node_modules/send/node_modules/debug/node_modules/ms": {
+      "version": "2.0.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/send/node_modules/encodeurl": {
+      "version": "1.0.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/encodeurl/-/encodeurl-1.0.2.tgz",
+      "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/send/node_modules/mime": {
+      "version": "1.6.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/mime/-/mime-1.6.0.tgz",
+      "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "mime": "cli.js"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/serve-static": {
+      "version": "1.16.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/serve-static/-/serve-static-1.16.0.tgz",
+      "integrity": "sha512-pDLK8zwl2eKaYrs8mrPZBJua4hMplRWJ1tIFksVC3FtBEBnl8dxgeHtsaMS8DhS9i4fLObaon6ABoc4/hQGdPA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "parseurl": "~1.3.3",
+        "send": "0.18.0"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/serve-static/node_modules/debug": {
+      "version": "2.6.9",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ms": "2.0.0"
+      }
+    },
+    "node_modules/serve-static/node_modules/debug/node_modules/ms": {
+      "version": "2.0.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/serve-static/node_modules/encodeurl": {
+      "version": "1.0.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/encodeurl/-/encodeurl-1.0.2.tgz",
+      "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/serve-static/node_modules/mime": {
+      "version": "1.6.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/mime/-/mime-1.6.0.tgz",
+      "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "mime": "cli.js"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/serve-static/node_modules/send": {
+      "version": "0.18.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/send/-/send-0.18.0.tgz",
+      "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "debug": "2.6.9",
+        "depd": "2.0.0",
+        "destroy": "1.2.0",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "etag": "~1.8.1",
+        "fresh": "0.5.2",
+        "http-errors": "2.0.0",
+        "mime": "1.6.0",
+        "ms": "2.1.3",
+        "on-finished": "2.4.1",
+        "range-parser": "~1.2.1",
+        "statuses": "2.0.1"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/setprototypeof": {
+      "version": "1.2.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/setprototypeof/-/setprototypeof-1.2.0.tgz",
+      "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/sharp": {
+      "version": "0.35.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/sharp/-/sharp-0.35.2.tgz",
+      "integrity": "sha512-FVtFjtBCMiJS6yb5CX7Sop45WFMpeGw6oRKuJnXYgf/f1ms/D7LE/ZUSNxnW7rZ/dbslQWYkoqFHGPaDBtaK4w==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@img/colour": "^1.1.0",
+        "detect-libc": "^2.1.2",
+        "semver": "^7.8.4"
+      },
+      "engines": {
+        "node": ">=20.9.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      },
+      "optionalDependencies": {
+        "@img/sharp-darwin-arm64": "0.35.2",
+        "@img/sharp-darwin-x64": "0.35.2",
+        "@img/sharp-freebsd-wasm32": "0.35.2",
+        "@img/sharp-libvips-darwin-arm64": "1.3.1",
+        "@img/sharp-libvips-darwin-x64": "1.3.1",
+        "@img/sharp-libvips-linux-arm": "1.3.1",
+        "@img/sharp-libvips-linux-arm64": "1.3.1",
+        "@img/sharp-libvips-linux-ppc64": "1.3.1",
+        "@img/sharp-libvips-linux-riscv64": "1.3.1",
+        "@img/sharp-libvips-linux-s390x": "1.3.1",
+        "@img/sharp-libvips-linux-x64": "1.3.1",
+        "@img/sharp-libvips-linuxmusl-arm64": "1.3.1",
+        "@img/sharp-libvips-linuxmusl-x64": "1.3.1",
+        "@img/sharp-linux-arm": "0.35.2",
+        "@img/sharp-linux-arm64": "0.35.2",
+        "@img/sharp-linux-ppc64": "0.35.2",
+        "@img/sharp-linux-riscv64": "0.35.2",
+        "@img/sharp-linux-s390x": "0.35.2",
+        "@img/sharp-linux-x64": "0.35.2",
+        "@img/sharp-linuxmusl-arm64": "0.35.2",
+        "@img/sharp-linuxmusl-x64": "0.35.2",
+        "@img/sharp-webcontainers-wasm32": "0.35.2",
+        "@img/sharp-win32-arm64": "0.35.2",
+        "@img/sharp-win32-ia32": "0.35.2",
+        "@img/sharp-win32-x64": "0.35.2"
+      }
+    },
+    "node_modules/sharp/node_modules/semver": {
+      "version": "7.8.5",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/semver/-/semver-7.8.5.tgz",
+      "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==",
+      "dev": true,
+      "license": "ISC",
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/side-channel": {
+      "version": "1.1.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/side-channel/-/side-channel-1.1.1.tgz",
+      "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "es-errors": "^1.3.0",
+        "object-inspect": "^1.13.4",
+        "side-channel-list": "^1.0.1",
+        "side-channel-map": "^1.0.1",
+        "side-channel-weakmap": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/side-channel-list": {
+      "version": "1.0.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/side-channel-list/-/side-channel-list-1.0.1.tgz",
+      "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "es-errors": "^1.3.0",
+        "object-inspect": "^1.13.4"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/side-channel-map": {
+      "version": "1.0.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/side-channel-map/-/side-channel-map-1.0.1.tgz",
+      "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bound": "^1.0.2",
+        "es-errors": "^1.3.0",
+        "get-intrinsic": "^1.2.5",
+        "object-inspect": "^1.13.3"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/side-channel-weakmap": {
+      "version": "1.0.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
+      "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bound": "^1.0.2",
+        "es-errors": "^1.3.0",
+        "get-intrinsic": "^1.2.5",
+        "object-inspect": "^1.13.3",
+        "side-channel-map": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/source-map": {
+      "version": "0.6.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/source-map/-/source-map-0.6.1.tgz",
+      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/source-map-js": {
+      "version": "1.2.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/source-map-js/-/source-map-js-1.2.1.tgz",
+      "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/source-map-support": {
+      "version": "0.5.21",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/source-map-support/-/source-map-support-0.5.21.tgz",
+      "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "buffer-from": "^1.0.0",
+        "source-map": "^0.6.0"
+      }
+    },
+    "node_modules/statuses": {
+      "version": "2.0.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/statuses/-/statuses-2.0.1.tgz",
+      "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/string-hash": {
+      "version": "1.1.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/string-hash/-/string-hash-1.1.3.tgz",
+      "integrity": "sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==",
+      "license": "CC0-1.0"
+    },
+    "node_modules/strip-literal": {
+      "version": "3.1.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/strip-literal/-/strip-literal-3.1.0.tgz",
+      "integrity": "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==",
+      "license": "MIT",
+      "dependencies": {
+        "js-tokens": "^9.0.1"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
+      }
+    },
+    "node_modules/strip-literal/node_modules/js-tokens": {
+      "version": "9.0.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/js-tokens/-/js-tokens-9.0.1.tgz",
+      "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==",
+      "license": "MIT"
+    },
+    "node_modules/supports-color": {
+      "version": "5.5.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/supports-color/-/supports-color-5.5.0.tgz",
+      "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+      "license": "MIT",
+      "dependencies": {
+        "has-flag": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/supports-preserve-symlinks-flag": {
+      "version": "1.0.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+      "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/systemjs": {
+      "version": "6.15.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/systemjs/-/systemjs-6.15.1.tgz",
+      "integrity": "sha512-Nk8c4lXvMB98MtbmjX7JwJRgJOL8fluecYCfCeYBznwmpOs8Bf15hLM6z4z71EDAhQVrQrI+wt1aLWSXZq+hXA==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/tapable": {
+      "version": "2.3.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/tapable/-/tapable-2.3.3.tgz",
+      "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/webpack"
+      }
+    },
+    "node_modules/terser": {
+      "version": "5.48.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/terser/-/terser-5.48.0.tgz",
+      "integrity": "sha512-J/9An6vs9Us6wKRriSFXBWdRZapREHqFzdNUKk0pmu804EMR6dr6winwo7e5JDxN4xahxQsuysyYFwlwj4XN/Q==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "@jridgewell/source-map": "^0.3.3",
+        "acorn": "^8.15.0",
+        "commander": "^2.20.0",
+        "source-map-support": "~0.5.20"
+      },
+      "bin": {
+        "terser": "bin/terser"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/timm": {
+      "version": "1.7.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/timm/-/timm-1.7.1.tgz",
+      "integrity": "sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==",
+      "license": "MIT"
+    },
+    "node_modules/tinycolor2": {
+      "version": "1.6.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/tinycolor2/-/tinycolor2-1.6.0.tgz",
+      "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==",
+      "license": "MIT"
+    },
+    "node_modules/to-fast-properties": {
+      "version": "2.0.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+      "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/to-regex-range": {
+      "version": "5.0.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/to-regex-range/-/to-regex-range-5.0.1.tgz",
+      "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+      "license": "MIT",
+      "dependencies": {
+        "is-number": "^7.0.0"
+      },
+      "engines": {
+        "node": ">=8.0"
+      }
+    },
+    "node_modules/toidentifier": {
+      "version": "1.0.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/toidentifier/-/toidentifier-1.0.1.tgz",
+      "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.6"
+      }
+    },
+    "node_modules/tslib": {
+      "version": "2.8.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/tslib/-/tslib-2.8.1.tgz",
+      "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+      "dev": true,
+      "license": "0BSD",
+      "optional": true
+    },
+    "node_modules/type-is": {
+      "version": "1.6.18",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/type-is/-/type-is-1.6.18.tgz",
+      "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "media-typer": "0.3.0",
+        "mime-types": "~2.1.24"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/typescript": {
+      "version": "4.9.5",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/typescript/-/typescript-4.9.5.tgz",
+      "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==",
+      "devOptional": true,
+      "license": "Apache-2.0",
+      "bin": {
+        "tsc": "bin/tsc",
+        "tsserver": "bin/tsserver"
+      },
+      "engines": {
+        "node": ">=4.2.0"
+      }
+    },
+    "node_modules/ufo": {
+      "version": "1.6.4",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/ufo/-/ufo-1.6.4.tgz",
+      "integrity": "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==",
+      "license": "MIT"
+    },
+    "node_modules/undici-types": {
+      "version": "6.21.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/undici-types/-/undici-types-6.21.0.tgz",
+      "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/unicode-canonical-property-names-ecmascript": {
+      "version": "2.0.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz",
+      "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/unicode-match-property-ecmascript": {
+      "version": "2.0.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz",
+      "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "unicode-canonical-property-names-ecmascript": "^2.0.0",
+        "unicode-property-aliases-ecmascript": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/unicode-match-property-value-ecmascript": {
+      "version": "2.2.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz",
+      "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/unicode-property-aliases-ecmascript": {
+      "version": "2.2.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz",
+      "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/unimport": {
+      "version": "4.1.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/unimport/-/unimport-4.1.1.tgz",
+      "integrity": "sha512-j9+fijH6aDd05yv1fXlyt7HSxtOWtGtrZeYTVBsSUg57Iuf+Ps2itIZjeyu7bEQ4k0WOgYhHrdW8m/pJgOpl5g==",
+      "license": "MIT",
+      "dependencies": {
+        "acorn": "^8.14.0",
+        "escape-string-regexp": "^5.0.0",
+        "estree-walker": "^3.0.3",
+        "fast-glob": "^3.3.3",
+        "local-pkg": "^1.0.0",
+        "magic-string": "^0.30.17",
+        "mlly": "^1.7.4",
+        "pathe": "^2.0.2",
+        "picomatch": "^4.0.2",
+        "pkg-types": "^1.3.1",
+        "scule": "^1.3.0",
+        "strip-literal": "^3.0.0",
+        "unplugin": "^2.1.2",
+        "unplugin-utils": "^0.2.3"
+      },
+      "engines": {
+        "node": ">=18.12.0"
+      }
+    },
+    "node_modules/unimport/node_modules/escape-string-regexp": {
+      "version": "5.0.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
+      "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/unimport/node_modules/estree-walker": {
+      "version": "3.0.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/estree-walker/-/estree-walker-3.0.3.tgz",
+      "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/estree": "^1.0.0"
+      }
+    },
+    "node_modules/unimport/node_modules/magic-string": {
+      "version": "0.30.21",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/magic-string/-/magic-string-0.30.21.tgz",
+      "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/sourcemap-codec": "^1.5.5"
+      }
+    },
+    "node_modules/unimport/node_modules/picomatch": {
+      "version": "4.0.4",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/picomatch/-/picomatch-4.0.4.tgz",
+      "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/jonschlinkert"
+      }
+    },
+    "node_modules/universalify": {
+      "version": "2.0.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/universalify/-/universalify-2.0.1.tgz",
+      "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 10.0.0"
+      }
+    },
+    "node_modules/unpipe": {
+      "version": "1.0.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/unpipe/-/unpipe-1.0.0.tgz",
+      "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/unplugin": {
+      "version": "2.3.11",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/unplugin/-/unplugin-2.3.11.tgz",
+      "integrity": "sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==",
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/remapping": "^2.3.5",
+        "acorn": "^8.15.0",
+        "picomatch": "^4.0.3",
+        "webpack-virtual-modules": "^0.6.2"
+      },
+      "engines": {
+        "node": ">=18.12.0"
+      }
+    },
+    "node_modules/unplugin-auto-import": {
+      "version": "19.1.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/unplugin-auto-import/-/unplugin-auto-import-19.1.0.tgz",
+      "integrity": "sha512-B+TGBEBHqY9aR+7YfShfLujETOHstzpV+yaqgy5PkfV0QG7Py+TYMX7vJ9W4SrysHR+UzR+gzcx/nuZjmPeclA==",
+      "license": "MIT",
+      "dependencies": {
+        "local-pkg": "^1.0.0",
+        "magic-string": "^0.30.17",
+        "picomatch": "^4.0.2",
+        "unimport": "^4.1.1",
+        "unplugin": "^2.2.0",
+        "unplugin-utils": "^0.2.4"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
+      },
+      "peerDependencies": {
+        "@nuxt/kit": "^3.2.2",
+        "@vueuse/core": "*"
+      },
+      "peerDependenciesMeta": {
+        "@nuxt/kit": {
+          "optional": true
+        },
+        "@vueuse/core": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/unplugin-auto-import/node_modules/magic-string": {
+      "version": "0.30.21",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/magic-string/-/magic-string-0.30.21.tgz",
+      "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/sourcemap-codec": "^1.5.5"
+      }
+    },
+    "node_modules/unplugin-auto-import/node_modules/picomatch": {
+      "version": "4.0.4",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/picomatch/-/picomatch-4.0.4.tgz",
+      "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/jonschlinkert"
+      }
+    },
+    "node_modules/unplugin-utils": {
+      "version": "0.2.5",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/unplugin-utils/-/unplugin-utils-0.2.5.tgz",
+      "integrity": "sha512-gwXJnPRewT4rT7sBi/IvxKTjsms7jX7QIDLOClApuZwR49SXbrB1z2NLUZ+vDHyqCj/n58OzRRqaW+B8OZi8vg==",
+      "license": "MIT",
+      "dependencies": {
+        "pathe": "^2.0.3",
+        "picomatch": "^4.0.3"
+      },
+      "engines": {
+        "node": ">=18.12.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sxzz"
+      }
+    },
+    "node_modules/unplugin-utils/node_modules/picomatch": {
+      "version": "4.0.4",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/picomatch/-/picomatch-4.0.4.tgz",
+      "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/jonschlinkert"
+      }
+    },
+    "node_modules/unplugin/node_modules/picomatch": {
+      "version": "4.0.4",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/picomatch/-/picomatch-4.0.4.tgz",
+      "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/jonschlinkert"
+      }
+    },
+    "node_modules/unquote": {
+      "version": "1.1.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/unquote/-/unquote-1.1.1.tgz",
+      "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/update-browserslist-db": {
+      "version": "1.2.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz",
+      "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==",
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/browserslist"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/browserslist"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "escalade": "^3.2.0",
+        "picocolors": "^1.1.1"
+      },
+      "bin": {
+        "update-browserslist-db": "cli.js"
+      },
+      "peerDependencies": {
+        "browserslist": ">= 4.21.0"
+      }
+    },
+    "node_modules/update-browserslist-db/node_modules/picocolors": {
+      "version": "1.1.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/picocolors/-/picocolors-1.1.1.tgz",
+      "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+      "license": "ISC"
+    },
+    "node_modules/utif": {
+      "version": "2.0.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/utif/-/utif-2.0.1.tgz",
+      "integrity": "sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==",
+      "license": "MIT",
+      "dependencies": {
+        "pako": "^1.0.5"
+      }
+    },
+    "node_modules/util-deprecate": {
+      "version": "1.0.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/util-deprecate/-/util-deprecate-1.0.2.tgz",
+      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+      "license": "MIT"
+    },
+    "node_modules/utils-merge": {
+      "version": "1.0.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/utils-merge/-/utils-merge-1.0.1.tgz",
+      "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4.0"
+      }
+    },
+    "node_modules/uview-plus": {
+      "version": "3.8.55",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/uview-plus/-/uview-plus-3.8.55.tgz",
+      "integrity": "sha512-OcjitgqLWZzMZuq93YSfpvOzyFvOuhGC6Lh4cljX28bNmDImoe14IhOpW8tcLcjLilbEOZJBYxbvpZpGAdiQxQ==",
+      "engines": {
+        "HBuilderX": "^3.1.0",
+        "uni-app": "^4.66",
+        "uni-app-x": ""
+      }
+    },
+    "node_modules/vary": {
+      "version": "1.1.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/vary/-/vary-1.1.2.tgz",
+      "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/vite": {
+      "version": "5.2.8",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/vite/-/vite-5.2.8.tgz",
+      "integrity": "sha512-OyZR+c1CE8yeHw5V5t59aXsUPPVTHMDjEZz8MgguLL/Q7NblxhZUlTu9xSPqlsUO/y+X7dlU05jdhvyycD55DA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "esbuild": "^0.20.1",
+        "postcss": "^8.4.38",
+        "rollup": "^4.13.0"
+      },
+      "bin": {
+        "vite": "bin/vite.js"
+      },
+      "engines": {
+        "node": "^18.0.0 || >=20.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/vitejs/vite?sponsor=1"
+      },
+      "optionalDependencies": {
+        "fsevents": "~2.3.3"
+      },
+      "peerDependencies": {
+        "@types/node": "^18.0.0 || >=20.0.0",
+        "less": "*",
+        "lightningcss": "^1.21.0",
+        "sass": "*",
+        "stylus": "*",
+        "sugarss": "*",
+        "terser": "^5.4.0"
+      },
+      "peerDependenciesMeta": {
+        "@types/node": {
+          "optional": true
+        },
+        "less": {
+          "optional": true
+        },
+        "lightningcss": {
+          "optional": true
+        },
+        "sass": {
+          "optional": true
+        },
+        "stylus": {
+          "optional": true
+        },
+        "sugarss": {
+          "optional": true
+        },
+        "terser": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/vue": {
+      "version": "3.5.39",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/vue/-/vue-3.5.39.tgz",
+      "integrity": "sha512-xmZCYabFGcirU8r0fTuvl/LICc1OU620rnqepaJDL/a141ZigkG7AyaxQLdqJ02ZRYzWe6YPaDHeQx7MfknQfA==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/compiler-dom": "3.5.39",
+        "@vue/compiler-sfc": "3.5.39",
+        "@vue/runtime-dom": "3.5.39",
+        "@vue/server-renderer": "3.5.39",
+        "@vue/shared": "3.5.39"
+      },
+      "peerDependencies": {
+        "typescript": "*"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/vue-demi": {
+      "version": "0.14.10",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/vue-demi/-/vue-demi-0.14.10.tgz",
+      "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",
+      "hasInstallScript": true,
+      "license": "MIT",
+      "bin": {
+        "vue-demi-fix": "bin/vue-demi-fix.js",
+        "vue-demi-switch": "bin/vue-demi-switch.js"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
+      },
+      "peerDependencies": {
+        "@vue/composition-api": "^1.0.0-rc.1",
+        "vue": "^3.0.0-0 || ^2.6.0"
+      },
+      "peerDependenciesMeta": {
+        "@vue/composition-api": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/vue-router": {
+      "version": "4.4.4",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/vue-router/-/vue-router-4.4.4.tgz",
+      "integrity": "sha512-3MlnDqwRwZwCQVbtVfpsU+nrNymNjnXSsQtXName5925NVC1+326VVfYH9vSrA0N13teGEo8z5x7gbRnGjCDiQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/devtools-api": "^6.6.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/posva"
+      },
+      "peerDependencies": {
+        "vue": "^3.2.0"
+      }
+    },
+    "node_modules/vue-template-compiler": {
+      "version": "2.7.16",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz",
+      "integrity": "sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "de-indent": "^1.0.2",
+        "he": "^1.2.0"
+      }
+    },
+    "node_modules/vue-tsc": {
+      "version": "1.8.27",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/vue-tsc/-/vue-tsc-1.8.27.tgz",
+      "integrity": "sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@volar/typescript": "~1.11.1",
+        "@vue/language-core": "1.8.27",
+        "semver": "^7.5.4"
+      },
+      "bin": {
+        "vue-tsc": "bin/vue-tsc.js"
+      },
+      "peerDependencies": {
+        "typescript": "*"
+      }
+    },
+    "node_modules/vue-tsc/node_modules/semver": {
+      "version": "7.8.5",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/semver/-/semver-7.8.5.tgz",
+      "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==",
+      "dev": true,
+      "license": "ISC",
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/vue/node_modules/@babel/parser": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/parser/-/parser-7.29.7.tgz",
+      "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.29.7"
+      },
+      "bin": {
+        "parser": "bin/babel-parser.js"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/vue/node_modules/@babel/types": {
+      "version": "7.29.7",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@babel/types/-/types-7.29.7.tgz",
+      "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-string-parser": "^7.29.7",
+        "@babel/helper-validator-identifier": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/vue/node_modules/@vue/compiler-core": {
+      "version": "3.5.39",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/compiler-core/-/compiler-core-3.5.39.tgz",
+      "integrity": "sha512-16KBTEXAJCpDr0mwlw+AZyhu8iyC7R3S2vBwsI7QnWJU6X3WKc9VKeNEZpiMdZ569qWhz9574L3vV55qRL0Vtw==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/parser": "^7.29.7",
+        "@vue/shared": "3.5.39",
+        "entities": "^7.0.1",
+        "estree-walker": "^2.0.2",
+        "source-map-js": "^1.2.1"
+      }
+    },
+    "node_modules/vue/node_modules/@vue/compiler-dom": {
+      "version": "3.5.39",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/compiler-dom/-/compiler-dom-3.5.39.tgz",
+      "integrity": "sha512-oQPigALqYbNxTNPvNgSOe+czwVExfbVF02lz8jP0S3AXJiu3jxYDygNUiqSep4ezzW8XgnubqH63My2A7JR/vg==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/compiler-core": "3.5.39",
+        "@vue/shared": "3.5.39"
+      }
+    },
+    "node_modules/vue/node_modules/@vue/compiler-sfc": {
+      "version": "3.5.39",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/compiler-sfc/-/compiler-sfc-3.5.39.tgz",
+      "integrity": "sha512-d0ki86iOyN8LoZPBmk5SJWNwHP19CnDDCfuo//+2WJa2g5Ke0Jay983PIBIcSSzldC68I8DrD5GrHV3OSDfodg==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/parser": "^7.29.7",
+        "@vue/compiler-core": "3.5.39",
+        "@vue/compiler-dom": "3.5.39",
+        "@vue/compiler-ssr": "3.5.39",
+        "@vue/shared": "3.5.39",
+        "estree-walker": "^2.0.2",
+        "magic-string": "^0.30.21",
+        "postcss": "^8.5.15",
+        "source-map-js": "^1.2.1"
+      }
+    },
+    "node_modules/vue/node_modules/@vue/compiler-ssr": {
+      "version": "3.5.39",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/compiler-ssr/-/compiler-ssr-3.5.39.tgz",
+      "integrity": "sha512-Ce7/wvwMHai74bdszfXExdazFigYnlF9zgCmEQUcM1j0fOymlouZ7XilTYNo8oUjhlnjYOZbGrcYKuqjz89Ucw==",
+      "license": "MIT",
+      "dependencies": {
+        "@vue/compiler-dom": "3.5.39",
+        "@vue/shared": "3.5.39"
+      }
+    },
+    "node_modules/vue/node_modules/@vue/shared": {
+      "version": "3.5.39",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/@vue/shared/-/shared-3.5.39.tgz",
+      "integrity": "sha512-l1rrBtBfTnmxvtsvdQDXltUUy8S1Y+ZaqdfUzmAnJkTd8Z8rv5v/ytW+TKiqEOWyHPoqtPlNFSs0lhRmYVSHVA==",
+      "license": "MIT"
+    },
+    "node_modules/vue/node_modules/entities": {
+      "version": "7.0.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/entities/-/entities-7.0.1.tgz",
+      "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==",
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=0.12"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/entities?sponsor=1"
+      }
+    },
+    "node_modules/vue/node_modules/magic-string": {
+      "version": "0.30.21",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/magic-string/-/magic-string-0.30.21.tgz",
+      "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/sourcemap-codec": "^1.5.5"
+      }
+    },
+    "node_modules/webpack-virtual-modules": {
+      "version": "0.6.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz",
+      "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==",
+      "license": "MIT"
+    },
+    "node_modules/ws": {
+      "version": "8.18.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/ws/-/ws-8.18.0.tgz",
+      "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=10.0.0"
+      },
+      "peerDependencies": {
+        "bufferutil": "^4.0.1",
+        "utf-8-validate": ">=5.0.2"
+      },
+      "peerDependenciesMeta": {
+        "bufferutil": {
+          "optional": true
+        },
+        "utf-8-validate": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/xhr": {
+      "version": "2.6.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/xhr/-/xhr-2.6.0.tgz",
+      "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==",
+      "license": "MIT",
+      "dependencies": {
+        "global": "~4.4.0",
+        "is-function": "^1.0.1",
+        "parse-headers": "^2.0.0",
+        "xtend": "^4.0.0"
+      }
+    },
+    "node_modules/xml-parse-from-string": {
+      "version": "1.0.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz",
+      "integrity": "sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g==",
+      "license": "MIT"
+    },
+    "node_modules/xml2js": {
+      "version": "0.5.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/xml2js/-/xml2js-0.5.0.tgz",
+      "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==",
+      "license": "MIT",
+      "dependencies": {
+        "sax": ">=0.6.0",
+        "xmlbuilder": "~11.0.0"
+      },
+      "engines": {
+        "node": ">=4.0.0"
+      }
+    },
+    "node_modules/xmlbuilder": {
+      "version": "11.0.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
+      "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=4.0"
+      }
+    },
+    "node_modules/xmlhttprequest": {
+      "version": "1.8.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz",
+      "integrity": "sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/xregexp": {
+      "version": "3.1.0",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/xregexp/-/xregexp-3.1.0.tgz",
+      "integrity": "sha512-4Y1x6DyB8xRoxosooa6PlGWqmmSKatbzhrftZ7Purmm4B8R4qIEJG1A2hZsdz5DhmIqS0msC0I7KEq93GphEVg==",
+      "license": "MIT"
+    },
+    "node_modules/xtend": {
+      "version": "4.0.2",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/xtend/-/xtend-4.0.2.tgz",
+      "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.4"
+      }
+    },
+    "node_modules/yallist": {
+      "version": "3.1.1",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/yallist/-/yallist-3.1.1.tgz",
+      "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+      "license": "ISC"
+    },
+    "node_modules/yaml": {
+      "version": "1.10.3",
+      "resolved": "https://packages.aliyun.com/6051be3dff5718e91a64e9da/npm/npm-registry/yaml/-/yaml-1.10.3.tgz",
+      "integrity": "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==",
+      "license": "ISC",
+      "engines": {
+        "node": ">= 6"
+      }
+    }
+  }
+}

+ 36 - 0
package.json

@@ -0,0 +1,36 @@
+{
+  "name": "marketing_mini_app",
+  "version": "1.0.0",
+  "description": "会员小程序",
+  "main": "main.ts",
+  "scripts": {
+    "dev:mp-weixin": "uni -p mp-weixin",
+    "build:mp-weixin": "uni build -p mp-weixin",
+    "gen:tabbar-icons": "node scripts/gen-tabbar-icons.mjs",
+    "type-check": "vue-tsc --noEmit"
+  },
+  "dependencies": {
+    "@dcloudio/uni-app": "3.0.0-4080420251103001",
+    "@dcloudio/uni-components": "3.0.0-4080420251103001",
+    "@dcloudio/uni-mp-weixin": "3.0.0-4080420251103001",
+    "pinia": "^2.1.7",
+    "uview-plus": "^3.7.36",
+    "vue": "^3.4.21"
+  },
+  "devDependencies": {
+    "@dcloudio/types": "^3.4.8",
+    "@dcloudio/uni-cli-shared": "3.0.0-4080420251103001",
+    "@dcloudio/vite-plugin-uni": "3.0.0-4080420251103001",
+    "@types/node": "^20.10.0",
+    "@vue/runtime-core": "^3.4.21",
+    "@vue/tsconfig": "^0.1.3",
+    "sass": "^1.69.5",
+    "sharp": "^0.35.2",
+    "typescript": "^4.9.4",
+    "vite": "5.2.8",
+    "vue-tsc": "^1.0.24"
+  },
+  "uni-app": {
+    "scripts": {}
+  }
+}

+ 73 - 0
scripts/gen-tabbar-icons.mjs

@@ -0,0 +1,73 @@
+/**
+ * 生成 81×81 TabBar PNG 图标(透明底,适合微信小程序)
+ * 用法:node scripts/gen-tabbar-icons.mjs
+ */
+import fs from 'node:fs'
+import path from 'node:path'
+import { fileURLToPath } from 'node:url'
+import sharp from 'sharp'
+
+const __dirname = path.dirname(fileURLToPath(import.meta.url))
+const outDir = path.resolve(__dirname, '../src/static/tabbar')
+
+const GRAY = '#8C7B6A'
+const ORANGE = '#FF6B35'
+
+function svgIcon(type, color) {
+  if (type === 'home') {
+    return `<svg width="81" height="81" xmlns="http://www.w3.org/2000/svg">
+      <path d="M40.5 18 L62 34 V62 H52 V44 H29 V62 H19 V34 Z" fill="none" stroke="${color}" stroke-width="4" stroke-linejoin="round"/>
+    </svg>`
+  }
+  if (type === 'scan') {
+    return `<svg width="81" height="81" xmlns="http://www.w3.org/2000/svg">
+      <rect x="18" y="18" width="45" height="45" rx="6" fill="none" stroke="${color}" stroke-width="4"/>
+      <rect x="24" y="24" width="10" height="10" fill="${color}"/>
+      <rect x="47" y="24" width="10" height="10" fill="${color}"/>
+      <rect x="24" y="47" width="10" height="10" fill="${color}"/>
+      <rect x="41" y="41" width="8" height="8" fill="${color}"/>
+      <rect x="47" y="47" width="10" height="10" fill="${color}"/>
+    </svg>`
+  }
+  if (type === 'coupon') {
+    return `<svg width="81" height="81" xmlns="http://www.w3.org/2000/svg">
+      <rect x="16" y="24" width="49" height="33" rx="6" fill="none" stroke="${color}" stroke-width="4"/>
+      <circle cx="16" cy="40.5" r="5" fill="#FFF9F3" stroke="${color}" stroke-width="3"/>
+      <circle cx="65" cy="40.5" r="5" fill="#FFF9F3" stroke="${color}" stroke-width="3"/>
+      <line x1="28" y1="40" x2="53" y2="40" stroke="${color}" stroke-width="3" stroke-linecap="round"/>
+    </svg>`
+  }
+  return `<svg width="81" height="81" xmlns="http://www.w3.org/2000/svg">
+    <circle cx="40.5" cy="32" r="12" fill="none" stroke="${color}" stroke-width="4"/>
+    <path d="M20 62 C20 50 58 50 61 62" fill="none" stroke="${color}" stroke-width="4" stroke-linecap="round"/>
+  </svg>`
+}
+
+async function writeIcon(name, type, color) {
+  const svg = svgIcon(type, color)
+  const buf = await sharp(Buffer.from(svg)).png().toBuffer()
+  fs.writeFileSync(path.join(outDir, name), buf)
+}
+
+async function main() {
+  fs.mkdirSync(outDir, { recursive: true })
+  const items = [
+    ['home.png', 'home', GRAY],
+    ['home-active.png', 'home', ORANGE],
+    ['scan.png', 'scan', GRAY],
+    ['scan-active.png', 'scan', ORANGE],
+    ['coupon.png', 'coupon', GRAY],
+    ['coupon-active.png', 'coupon', ORANGE],
+    ['profile.png', 'profile', GRAY],
+    ['profile-active.png', 'profile', ORANGE]
+  ]
+  for (const [file, type, color] of items) {
+    await writeIcon(file, type, color)
+    console.log('wrote', file)
+  }
+}
+
+main().catch(err => {
+  console.error(err)
+  process.exit(1)
+})

+ 41 - 0
src/App.vue

@@ -0,0 +1,41 @@
+<template>
+  <view id="app" />
+</template>
+
+<script setup lang="ts">
+import { onLaunch, onShow } from '@dcloudio/uni-app'
+import { useAuthStore } from '@/store/modules/auth'
+import { useTenantStore } from '@/store/modules/tenant'
+import { resolveLandingByScene, handlePendingSceneOnLaunch } from '@/utils/tenantLanding'
+
+async function handleScene(scene: string) {
+  const text = String(scene || '').trim()
+  if (!text) return
+  try {
+    await resolveLandingByScene(text, { showToast: false, autoJoin: true })
+  } catch {
+    /* pending 由 handlePendingSceneOnLaunch 处理 */
+  }
+}
+
+onLaunch(options => {
+  useAuthStore().initAuth()
+  useTenantStore().initTenant()
+  const scene = options?.query?.scene || options?.scene
+  if (scene) {
+    handleScene(String(scene))
+  } else {
+    handlePendingSceneOnLaunch()
+  }
+})
+
+onShow(options => {
+  const scene = options?.query?.scene || options?.scene
+  if (scene) handleScene(String(scene))
+})
+</script>
+
+<style lang="scss">
+@import 'uview-plus/index.scss';
+@import './styles/common.scss';
+</style>

+ 2 - 0
src/api/index.ts

@@ -0,0 +1,2 @@
+export * from './modules/marketing'
+export * from './modules/memberAuth'

+ 23 - 0
src/api/modules/address.ts

@@ -0,0 +1,23 @@
+import { del, get, post, put } from '@/utils/request'
+import type { ApiResponse } from '@/types/common'
+import type { MemberAddress, MemberAddressSaveParams } from '@/types/address'
+
+export function fetchAddressList(): Promise<ApiResponse<MemberAddress[]>> {
+  return get<MemberAddress[]>('/address/list', undefined, { showLoading: false })
+}
+
+export function createAddress(data: MemberAddressSaveParams): Promise<ApiResponse<{ id: string }>> {
+  return post<{ id: string }>('/address/create', data)
+}
+
+export function updateAddress(id: string, data: MemberAddressSaveParams): Promise<ApiResponse<void>> {
+  return put<void>(`/address/update/${encodeURIComponent(id)}`, data)
+}
+
+export function deleteAddress(id: string): Promise<ApiResponse<void>> {
+  return del<void>(`/address/delete/${encodeURIComponent(id)}`)
+}
+
+export function setDefaultAddress(id: string): Promise<ApiResponse<void>> {
+  return post<void>(`/address/default/${encodeURIComponent(id)}`)
+}

+ 17 - 0
src/api/modules/homeBanners.ts

@@ -0,0 +1,17 @@
+import { get } from '@/utils/request'
+import type { ApiResponse } from '@/types/common'
+
+export type MiniHomeBannerItem = {
+  id?: string
+  title?: string
+  imageUrl?: string
+  image?: string
+  picUrl?: string
+  linkUrl?: string
+  linkType?: string
+  sort?: number
+}
+
+export function fetchHomeBanners(): Promise<ApiResponse<MiniHomeBannerItem[]>> {
+  return get<MiniHomeBannerItem[]>('/home/banners', { _ts: Date.now() }, { showLoading: false, skipAuth: true })
+}

+ 155 - 0
src/api/modules/marketing.ts

@@ -0,0 +1,155 @@
+/**
+ * 店铺会员营销接口(扫码入会、店铺券、店员核销)
+ */
+import { get, post } from '@/utils/request'
+import type { ApiResponse, PageResp } from '@/types/common'
+import type { RequestConfig } from '@/utils/request'
+
+export type MarketingTenantBrief = {
+  id: string
+  tenantId: string
+  tenantCode: string
+  tenantName?: string
+  memberRole?: string
+  memberRoleName?: string
+}
+
+export type MarketingTenantLanding = {
+  tenantId?: string
+  tenantCode?: string
+  tenantName?: string
+  marketingEnabled?: number
+  autoJoinOnQr?: number
+  welcomeTitle?: string
+  welcomeSubtitle?: string
+  logoUrl?: string
+  channelCode?: string
+  pagePath?: string
+}
+
+export type MarketingCouponItem = {
+  id?: string
+  memberCouponId?: string
+  couponId?: string
+  couponName?: string
+  couponType?: string
+  discountAmount?: number
+  discountValue?: number
+  minOrderAmount?: number
+  minConsumeAmount?: number
+  status?: number | string
+  statusName?: string
+  expireDate?: string
+  validEndDate?: string
+  useDate?: string
+  [key: string]: unknown
+}
+
+export type MarketingVerifyCode = {
+  verifyToken: string
+  expireAt: string
+  qrcodeContent: string
+}
+
+export type MarketingVerifyResult = {
+  memberCouponId: string
+  couponName?: string
+  verifyTime?: string
+  verifyToken?: string
+  memberNo?: string
+  memberNickname?: string
+  memberMobile?: string
+}
+
+export type MarketingVerifyRecord = {
+  id: string
+  memberCouponId?: string
+  couponName?: string
+  memberNo?: string
+  memberNickname?: string
+  memberMobile?: string
+  verifyType?: string
+  verifyTypeName?: string
+  verifyTime?: string
+  operatorId?: string
+  operatorName?: string
+  verifyTenantCode?: string
+}
+
+/** 解析扫码 scene(免登录) */
+export function fetchMarketingLanding(scene: string) {
+  return get<MarketingTenantLanding>(
+    `/noAuth/marketing/tenant/landing?scene=${encodeURIComponent(scene)}`,
+    undefined,
+    { skipAuth: true, showLoading: false }
+  )
+}
+
+/** 扫码入会 */
+export function joinMarketingTenant(payload: { tenantCode: string; channelCode?: string }) {
+  return post<MarketingTenantBrief>('/marketing/memberTenant/join', payload)
+}
+
+/** 我的店铺列表 */
+export function fetchMyMarketingTenants() {
+  return get<MarketingTenantBrief[]>('/marketing/memberTenant/myTenants')
+}
+
+/** 我可核销的店铺列表(店员/店长) */
+export function fetchMyClerkTenants() {
+  return get<MarketingTenantBrief[]>('/marketing/memberTenant/myClerkTenants')
+}
+
+/** 可领券列表 */
+export function fetchAvailableCoupons(payload: { tenantCode: string; pageNo?: number; pageSize?: number }) {
+  return post<PageResp<MarketingCouponItem>>('/marketing/coupon/available', {
+    pageNo: payload.pageNo ?? 1,
+    pageSize: payload.pageSize ?? 20,
+    tenantCode: payload.tenantCode
+  })
+}
+
+/** 领取优惠券 */
+export function receiveMarketingCoupon(payload: { tenantCode: string; templateId: string }) {
+  return post<Record<string, unknown>>('/marketing/coupon/receive', payload)
+}
+
+/** 我的店铺券列表(status:0 未用 1 已用 2 过期 3 冻结 4 作废) */
+export function fetchMyStoreCoupons(payload: {
+  tenantCode: string
+  pageNo?: number
+  pageSize?: number
+  status?: number
+}) {
+  return post<PageResp<MarketingCouponItem>>('/marketing/coupon/myList', {
+    pageNo: payload.pageNo ?? 1,
+    pageSize: payload.pageSize ?? 100,
+    tenantCode: payload.tenantCode,
+    ...(payload.status != null ? { status: payload.status } : {})
+  })
+}
+
+/** 生成到店核销动态码 */
+export function fetchMarketingVerifyCode(memberCouponId: string, tenantCode: string) {
+  return get<MarketingVerifyCode>('/marketing/coupon/verifyCode', { memberCouponId, tenantCode })
+}
+
+/** 店员扫码核销 */
+export function verifyMarketingCoupon(payload: { tenantCode: string; verifyToken: string }) {
+  return post<MarketingVerifyResult>('/marketing/clerk/coupon/verify', payload)
+}
+
+/** 店员核销记录 */
+export function fetchMarketingVerifyRecords(payload: {
+  tenantCode: string
+  pageNo?: number
+  pageSize?: number
+}) {
+  return post<PageResp<MarketingVerifyRecord>>('/marketing/clerk/coupon/verifyRecords', {
+    pageNo: payload.pageNo ?? 1,
+    pageSize: payload.pageSize ?? 10,
+    tenantCode: payload.tenantCode
+  })
+}
+
+export type { ApiResponse }

+ 24 - 0
src/api/modules/member.ts

@@ -0,0 +1,24 @@
+import { get } from '@/utils/request'
+
+export type MemberInfo = {
+  id?: string
+  memberNo?: string
+  nickname?: string
+  avatar?: string
+  mobile?: string
+  phone?: string
+}
+
+export type MemberCodeCard = {
+  memberNo: string
+  displayNo?: string
+  qrcodeContent: string
+}
+
+export function fetchMemberInfo() {
+  return get<MemberInfo>('/member/member/info', undefined, { showLoading: false })
+}
+
+export function fetchMemberCodeCard() {
+  return get<MemberCodeCard>('/member/member/codeCard', undefined, { showLoading: false })
+}

+ 42 - 0
src/api/modules/memberAuth.ts

@@ -0,0 +1,42 @@
+import { post } from '@/utils/request'
+import type { ApiResponse } from '@/types/common'
+
+export type LoginResult = {
+  accessToken?: string
+  token?: string
+  satoken?: string
+  memberId?: string
+  nickname?: string
+  avatar?: string
+  phone?: string
+}
+
+export interface MemberLoginResultVO {
+  accessToken: string
+  tokenType?: string
+  expiresIn?: number
+  refreshToken?: string
+  isNewUser?: boolean
+  needBindMobile?: boolean
+  memberId: string
+  memberNo?: string
+  nickname?: string
+  avatar?: string
+  mobile?: string
+}
+
+export function mockLogin(params: { token: string; nickname?: string }): Promise<ApiResponse<LoginResult>> {
+  return Promise.resolve({ code: 200, msg: 'ok', data: { accessToken: params.token, nickname: params.nickname || '体验用户' } })
+}
+
+export function loginByWechatCode(params: { code: string; phoneCode?: string }): Promise<ApiResponse<LoginResult>> {
+  return post<LoginResult>('/member/auth/wechatLogin', params, { showErrorToast: false })
+}
+
+export function loginByWechatMiniPhone(payload: {
+  code: string
+  phoneCode: string
+  inviteCode?: string
+}): Promise<ApiResponse<MemberLoginResultVO>> {
+  return post<MemberLoginResultVO>('/member/auth/loginByWechatMiniPhone', payload, { showLoading: false, skipAuth: true })
+}

+ 23 - 0
src/api/modules/order.ts

@@ -0,0 +1,23 @@
+import { get, post } from '@/utils/request'
+import type { ApiResponse } from '@/types/common'
+import type { OrderBizType, OrderInfo } from '@/types/order'
+import type { RequestConfig } from '@/utils/request'
+
+export type TradeOrderListQueryBody = {
+  pageNo?: number
+  pageSize?: number
+  bizType?: OrderBizType
+  status?: number
+  orderBy?: string
+}
+
+export function getUnifiedTradeOrderList(
+  data?: TradeOrderListQueryBody,
+  config?: Partial<RequestConfig>
+): Promise<ApiResponse<OrderInfo[]>> {
+  return post<OrderInfo[]>('/tradeOrder/list', { pageNo: 1, pageSize: 20, ...data }, { showLoading: false, ...config })
+}
+
+export function getTradeOrderDetail(id: string): Promise<ApiResponse<OrderInfo>> {
+  return get<OrderInfo>(`/tradeOrder/${encodeURIComponent(id)}`)
+}

+ 26 - 0
src/components/EmptyState.vue

@@ -0,0 +1,26 @@
+<template>
+  <view class="empty">
+    <view class="empty-title">{{ title }}</view>
+    <view v-if="description" class="empty-desc">{{ description }}</view>
+  </view>
+</template>
+
+<script setup lang="ts">
+defineProps<{ title: string; description?: string }>()
+</script>
+
+<style scoped lang="scss">
+.empty {
+  padding: 80rpx 32rpx;
+  text-align: center;
+  color: #8a94a6;
+}
+.empty-title {
+  font-size: 30rpx;
+  color: #4b5563;
+}
+.empty-desc {
+  margin-top: 12rpx;
+  font-size: 24rpx;
+}
+</style>

+ 190 - 0
src/components/MealMenuItemCard.vue

@@ -0,0 +1,190 @@
+<template>
+  <view :class="['card', 'menu-item', disabled && 'disabled']" @click="emit('detail')">
+    <view class="thumb-wrap">
+      <image v-if="item.itemImage" class="thumb" :src="item.itemImage" mode="aspectFill" />
+      <view v-else class="thumb empty-thumb">订餐</view>
+      <view v-if="soldOut" class="sold-out-stamp">已售罄</view>
+    </view>
+    <view class="info">
+      <view class="name">{{ item.itemName }}</view>
+      <view v-if="item.tags?.length" class="tags">
+        <text v-for="tag in item.tags" :key="tag" class="tag">{{ tag }}</text>
+      </view>
+      <view :class="['muted', 'stock', disabled && 'danger']">{{ stockText }}</view>
+      <view v-if="item.limitQuantityPerUser != null" class="muted limit">每人限购 {{ item.limitQuantityPerUser }} 份</view>
+      <view class="bottom">
+        <text class="price">¥{{ formatMoney(item.salePrice) }}</text>
+        <view class="stepper" @click.stop>
+          <button class="mini" :disabled="disabled || quantity <= 0" @click="change(-1)">-</button>
+          <text>{{ quantity }}</text>
+          <button v-if="hasSpecs" class="spec-btn" :disabled="disabled" @click="emit('detail')">{{ soldOut ? '售罄' : '选规格' }}</button>
+          <button v-else-if="soldOut" class="sold-out-btn" disabled>售罄</button>
+          <button v-else class="mini" :disabled="disabled || maxQuantity <= 0" @click="change(1)">+</button>
+        </view>
+      </view>
+    </view>
+  </view>
+</template>
+
+<script setup lang="ts">
+import { computed } from 'vue'
+import type { FoodMealMenuItem } from '@/types/meal'
+import { formatMoney } from '@/utils/money'
+
+const props = defineProps<{ item: FoodMealMenuItem; quantity: number; disabled?: boolean; disabledReason?: string }>()
+const emit = defineEmits<{ (e: 'change', value: number): void; (e: 'detail'): void }>()
+
+const hasSpecs = computed(() => Boolean(props.item.specs?.length))
+const remainQuantity = computed(() => {
+  if (props.item.remainingQuantity != null) return props.item.remainingQuantity
+  if (props.item.stockQuantity == null) return null
+  return Math.max(props.item.stockQuantity - (props.item.soldQuantity || 0), 0)
+})
+const maxQuantity = computed(() => {
+  const stock = remainQuantity.value == null ? 999 : remainQuantity.value
+  const limit = props.item.limitQuantityPerUser == null ? 999 : props.item.limitQuantityPerUser
+  return Math.min(stock, limit)
+})
+const soldOut = computed(() => props.item.soldOut === true || (remainQuantity.value != null && remainQuantity.value <= 0))
+const disabled = computed(() => props.disabled || soldOut.value || maxQuantity.value <= 0)
+const stockText = computed(() => {
+  if (props.disabledReason) return props.disabledReason
+  if (soldOut.value) return '仅剩 0,已售罄'
+  if (remainQuantity.value == null) return '库存充足'
+  return `仅剩 ${remainQuantity.value} 份`
+})
+
+function change(delta: number) {
+  if (hasSpecs.value && delta > 0) {
+    emit('detail')
+    return
+  }
+  if (disabled.value) {
+    uni.showToast({ title: stockText.value, icon: 'none' })
+    return
+  }
+  const next = Math.max(0, Math.min(props.quantity + delta, maxQuantity.value))
+  if (next === props.quantity && delta > 0) {
+    uni.showToast({ title: '已达可选上限', icon: 'none' })
+  }
+  emit('change', next)
+}
+</script>
+
+<style scoped lang="scss">
+.menu-item {
+  display: flex;
+  gap: 20rpx;
+}
+.disabled {
+  opacity: 0.58;
+}
+.thumb-wrap {
+  position: relative;
+  width: 150rpx;
+  height: 150rpx;
+  overflow: hidden;
+  border-radius: 16rpx;
+}
+.thumb {
+  width: 150rpx;
+  height: 150rpx;
+  background: #eef2f7;
+}
+.empty-thumb {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  color: #00838f;
+  background: #e0f7fa;
+  font-weight: 700;
+}
+.sold-out-stamp {
+  position: absolute;
+  left: -22rpx;
+  top: 50rpx;
+  width: 198rpx;
+  height: 42rpx;
+  line-height: 42rpx;
+  transform: rotate(-28deg);
+  text-align: center;
+  color: #ef4444;
+  border: 4rpx solid #ef4444;
+  background: rgba(255, 255, 255, 0.82);
+  font-weight: 800;
+  font-size: 26rpx;
+}
+.info {
+  flex: 1;
+}
+.name {
+  font-weight: 600;
+  font-size: 30rpx;
+}
+.tags {
+  margin-top: 10rpx;
+  display: flex;
+  flex-wrap: wrap;
+  gap: 8rpx;
+}
+.tag {
+  padding: 3rpx 12rpx;
+  border-radius: 999rpx;
+  background: #fff7ed;
+  color: #f97316;
+  font-size: 21rpx;
+}
+.stock {
+  margin-top: 12rpx;
+  font-size: 24rpx;
+}
+.limit {
+  margin-top: 6rpx;
+  font-size: 22rpx;
+}
+.danger {
+  color: #ef4444;
+}
+.bottom {
+  margin-top: 22rpx;
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+}
+.stepper {
+  display: flex;
+  align-items: center;
+  gap: 18rpx;
+}
+.mini {
+  width: 52rpx;
+  height: 52rpx;
+  line-height: 48rpx;
+  padding: 0;
+  border-radius: 50%;
+  font-size: 32rpx;
+}
+.spec-btn {
+  height: 52rpx;
+  line-height: 48rpx;
+  padding: 0 18rpx;
+  border-radius: 999rpx;
+  font-size: 24rpx;
+  color: #fff;
+  background: #00bcd4;
+}
+.spec-btn[disabled],
+.sold-out-btn {
+  opacity: 0.45;
+}
+.sold-out-btn {
+  height: 52rpx;
+  line-height: 48rpx;
+  padding: 0 18rpx;
+  border-radius: 999rpx;
+  font-size: 24rpx;
+}
+.mini[disabled] {
+  opacity: 0.45;
+}
+</style>

+ 133 - 0
src/components/MkCouponCard.vue

@@ -0,0 +1,133 @@
+<template>
+  <view class="coupon-card" :class="{ 'coupon-card--dimmed': dimmed }">
+    <view class="coupon-card__left">
+      <text class="coupon-card__amount">{{ amountText }}</text>
+      <text class="coupon-card__unit">{{ unitText }}</text>
+    </view>
+    <view class="coupon-card__divider" />
+    <view class="coupon-card__body">
+      <text class="coupon-card__name">{{ name }}</text>
+      <text class="coupon-card__meta">{{ meta }}</text>
+      <view v-if="tag" class="coupon-card__tag">{{ tag }}</view>
+    </view>
+    <view v-if="$slots.action" class="coupon-card__action">
+      <slot name="action" />
+    </view>
+  </view>
+</template>
+
+<script setup lang="ts">
+withDefaults(
+  defineProps<{
+    name?: string
+    meta?: string
+    amountText?: string
+    unitText?: string
+    tag?: string
+    dimmed?: boolean
+  }>(),
+  {
+    name: '优惠券',
+    meta: '店铺线下券',
+    amountText: '惠',
+    unitText: '券',
+    tag: '',
+    dimmed: false
+  }
+)
+</script>
+
+<style scoped lang="scss">
+.coupon-card {
+  display: flex;
+  align-items: stretch;
+  background: #fff;
+  border-radius: 24rpx;
+  overflow: hidden;
+  box-shadow: 0 10rpx 32rpx rgba(255, 107, 53, 0.1);
+  margin-bottom: 24rpx;
+
+  &--dimmed {
+    box-shadow: 0 8rpx 24rpx rgba(44, 24, 16, 0.06);
+
+    .coupon-card__left {
+      background: linear-gradient(160deg, #c4b5a5, #a89888);
+    }
+
+    .coupon-card__name {
+      color: #8c7b6a;
+    }
+
+    .coupon-card__tag {
+      background: #f5f0ea;
+      color: #a89888;
+    }
+  }
+}
+
+.coupon-card__left {
+  width: 168rpx;
+  background: linear-gradient(160deg, #ff9a3c, #ff5722);
+  color: #fff;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+  padding: 24rpx 12rpx;
+}
+
+.coupon-card__amount {
+  font-size: 44rpx;
+  font-weight: 800;
+  line-height: 1.1;
+}
+
+.coupon-card__unit {
+  margin-top: 6rpx;
+  font-size: 22rpx;
+  opacity: 0.92;
+}
+
+.coupon-card__divider {
+  width: 0;
+  border-left: 2rpx dashed rgba(255, 107, 53, 0.25);
+  margin: 16rpx 0;
+}
+
+.coupon-card__body {
+  flex: 1;
+  padding: 24rpx 20rpx;
+  min-width: 0;
+}
+
+.coupon-card__name {
+  display: block;
+  font-size: 30rpx;
+  font-weight: 700;
+  color: #2c1810;
+}
+
+.coupon-card__meta {
+  display: block;
+  margin-top: 10rpx;
+  font-size: 24rpx;
+  color: #8c7b6a;
+  line-height: 1.5;
+}
+
+.coupon-card__tag {
+  display: inline-block;
+  margin-top: 12rpx;
+  padding: 4rpx 14rpx;
+  border-radius: 999rpx;
+  background: #fff3e6;
+  color: #ff7a1a;
+  font-size: 22rpx;
+}
+
+.coupon-card__action {
+  display: flex;
+  align-items: center;
+  padding-right: 20rpx;
+}
+</style>

+ 225 - 0
src/components/MkScanPanel.vue

@@ -0,0 +1,225 @@
+<template>
+  <view class="scan-panel" :class="{ compact }">
+    <view v-if="!compact" class="scan-panel__hero">
+      <text class="scan-panel__title">{{ title }}</text>
+      <text class="scan-panel__desc">{{ desc }}</text>
+    </view>
+
+    <view class="scan-panel__ring" @click="emitScan">
+      <view class="scan-panel__btn">
+        <view class="scan-panel__icon">
+          <view class="corner tl" />
+          <view class="corner tr" />
+          <view class="corner bl" />
+          <view class="corner br" />
+          <view class="scan-line" />
+        </view>
+        <text class="scan-panel__btn-text">{{ scanning ? '识别中…' : buttonText }}</text>
+      </view>
+    </view>
+
+    <view v-if="!compact" class="scan-panel__steps">
+      <view v-for="(step, index) in steps" :key="step" class="step">
+        <view class="step-no">{{ index + 1 }}</view>
+        <text class="step-text">{{ step }}</text>
+      </view>
+    </view>
+  </view>
+</template>
+
+<script setup lang="ts">
+withDefaults(
+  defineProps<{
+    title?: string
+    desc?: string
+    buttonText?: string
+    scanning?: boolean
+    compact?: boolean
+  }>(),
+  {
+    title: '扫码关注店铺',
+    desc: '扫描店内推广码,成为会员并领取专属优惠',
+    buttonText: '点击扫码',
+    scanning: false,
+    compact: false
+  }
+)
+
+const emit = defineEmits<{ scan: [] }>()
+
+function emitScan() {
+  emit('scan')
+}
+</script>
+
+<style scoped lang="scss">
+.scan-panel {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+}
+
+.scan-panel__hero {
+  text-align: center;
+  margin-bottom: 40rpx;
+}
+
+.scan-panel__title {
+  display: block;
+  font-size: 40rpx;
+  font-weight: 800;
+  color: #2c1810;
+}
+
+.scan-panel__desc {
+  display: block;
+  margin-top: 12rpx;
+  font-size: 26rpx;
+  color: #8c7b6a;
+  line-height: 1.6;
+}
+
+.scan-panel__ring {
+  width: 360rpx;
+  height: 360rpx;
+  border-radius: 50%;
+  background: rgba(255, 154, 60, 0.12);
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  margin-bottom: 36rpx;
+}
+
+.compact .scan-panel__ring {
+  width: 280rpx;
+  height: 280rpx;
+  margin-bottom: 0;
+}
+
+.scan-panel__btn {
+  width: 280rpx;
+  height: 280rpx;
+  border-radius: 50%;
+  background: linear-gradient(145deg, #ff9a3c, #ff5722);
+  box-shadow: 0 20rpx 48rpx rgba(255, 87, 34, 0.35);
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+  gap: 16rpx;
+}
+
+.compact .scan-panel__btn {
+  width: 220rpx;
+  height: 220rpx;
+}
+
+.scan-panel__icon {
+  position: relative;
+  width: 88rpx;
+  height: 88rpx;
+}
+
+.corner {
+  position: absolute;
+  width: 22rpx;
+  height: 22rpx;
+  border: 4rpx solid rgba(255, 255, 255, 0.95);
+}
+
+.tl {
+  top: 0;
+  left: 0;
+  border-right: none;
+  border-bottom: none;
+  border-radius: 6rpx 0 0 0;
+}
+
+.tr {
+  top: 0;
+  right: 0;
+  border-left: none;
+  border-bottom: none;
+  border-radius: 0 6rpx 0 0;
+}
+
+.bl {
+  bottom: 0;
+  left: 0;
+  border-right: none;
+  border-top: none;
+  border-radius: 0 0 0 6rpx;
+}
+
+.br {
+  bottom: 0;
+  right: 0;
+  border-left: none;
+  top: auto;
+  border-top: none;
+  border-radius: 0 0 6rpx 0;
+}
+
+.scan-line {
+  position: absolute;
+  left: 8rpx;
+  right: 8rpx;
+  top: 50%;
+  height: 4rpx;
+  background: rgba(255, 255, 255, 0.85);
+  border-radius: 4rpx;
+  animation: scan-move 2s ease-in-out infinite;
+}
+
+@keyframes scan-move {
+  0%,
+  100% {
+    transform: translateY(-28rpx);
+    opacity: 0.4;
+  }
+  50% {
+    transform: translateY(28rpx);
+    opacity: 1;
+  }
+}
+
+.scan-panel__btn-text {
+  font-size: 28rpx;
+  font-weight: 700;
+  color: #fff;
+}
+
+.scan-panel__steps {
+  width: 100%;
+  display: flex;
+  justify-content: space-between;
+  gap: 12rpx;
+}
+
+.step {
+  flex: 1;
+  background: rgba(255, 255, 255, 0.85);
+  border-radius: 20rpx;
+  padding: 20rpx 12rpx;
+  text-align: center;
+  box-shadow: 0 6rpx 20rpx rgba(44, 24, 16, 0.05);
+}
+
+.step-no {
+  width: 40rpx;
+  height: 40rpx;
+  line-height: 40rpx;
+  margin: 0 auto 10rpx;
+  border-radius: 50%;
+  background: linear-gradient(135deg, #ff9a3c, #ff6b35);
+  color: #fff;
+  font-size: 22rpx;
+  font-weight: 700;
+}
+
+.step-text {
+  font-size: 22rpx;
+  color: #5c4a3a;
+  line-height: 1.4;
+}
+</style>

+ 29 - 0
src/components/OrderStatusTag.vue

@@ -0,0 +1,29 @@
+<template>
+  <view class="tag" :class="status">{{ orderStatusLabel(status) }}</view>
+</template>
+
+<script setup lang="ts">
+import { orderStatusLabel } from '@/utils/mealDisplay'
+
+defineProps<{ status: string }>()
+</script>
+
+<style scoped lang="scss">
+.tag {
+  display: inline-flex;
+  padding: 6rpx 18rpx;
+  border-radius: 999rpx;
+  background: #e0f7fa;
+  color: #00838f;
+  font-size: 24rpx;
+}
+.refunded,
+.cancelled {
+  background: #f3f4f6;
+  color: #6b7280;
+}
+.refunding {
+  background: #fff7ed;
+  color: #ea580c;
+}
+</style>

+ 27 - 0
src/components/PriceSummary.vue

@@ -0,0 +1,27 @@
+<template>
+  <view class="card price-summary">
+    <view v-for="item in items" :key="item.label" class="row">
+      <text>{{ item.label }}</text>
+      <text :class="item.strong ? 'price' : ''">¥{{ formatMoney(item.value) }}</text>
+    </view>
+  </view>
+</template>
+
+<script setup lang="ts">
+import { formatMoney } from '@/utils/money'
+
+defineProps<{ items: { label: string; value: number | undefined; strong?: boolean }[] }>()
+</script>
+
+<style scoped lang="scss">
+.price-summary {
+  display: flex;
+  flex-direction: column;
+  gap: 18rpx;
+}
+.row {
+  display: flex;
+  justify-content: space-between;
+  color: #4b5563;
+}
+</style>

+ 6 - 0
src/config/api.ts

@@ -0,0 +1,6 @@
+import { envConfig } from './env'
+
+export const apiConfig = {
+  baseURL: envConfig.apiBaseURL.replace(/\/$/, ''),
+  timeout: 15000
+}

+ 3 - 0
src/config/env.ts

@@ -0,0 +1,3 @@
+export const envConfig = {
+  apiBaseURL: import.meta.env.VITE_API_BASE_URL || 'http://127.0.0.1:8086/mobile'
+}

+ 2 - 0
src/config/index.ts

@@ -0,0 +1,2 @@
+export * from './api'
+export * from './env'

+ 4 - 0
src/constants/routes.ts

@@ -0,0 +1,4 @@
+/**
+ * 小程序内固定路由。
+ */
+export const ROUTE_LOGIN_INDEX = '/package-views/pages/login/index'

+ 4 - 0
src/constants/storage.ts

@@ -0,0 +1,4 @@
+export const TENANT_CODE_KEY = 'marketing_tenant_code'
+export const TENANT_NAME_KEY = 'marketing_tenant_name'
+export const CHANNEL_CODE_KEY = 'marketing_channel_code'
+export const PENDING_SCENE_KEY = 'marketing_pending_scene'

+ 12 - 0
src/env.d.ts

@@ -0,0 +1,12 @@
+/// <reference types="@dcloudio/types" />
+
+interface ImportMetaEnv {
+  readonly VITE_API_BASE_URL?: string
+  readonly VITE_DEV_API_TARGET?: string
+}
+
+interface ImportMeta {
+  readonly env: ImportMetaEnv
+}
+
+declare module 'uview-plus'

+ 12 - 0
src/main.ts

@@ -0,0 +1,12 @@
+import { createSSRApp } from 'vue'
+import { createPinia } from 'pinia'
+import uviewPlus from 'uview-plus'
+import App from './App.vue'
+
+export function createApp() {
+  const app = createSSRApp(App)
+  const pinia = createPinia()
+  app.use(pinia)
+  app.use(uviewPlus)
+  return { app, pinia }
+}

+ 17 - 0
src/manifest.json

@@ -0,0 +1,17 @@
+{
+  "name": "会员管理系统",
+  "appid": "wx2aa33e1b0f13463e",
+  "description": "会员小程序",
+  "versionName": "1.0.0",
+  "versionCode": "100",
+  "transformPx": false,
+  "mp-weixin": {
+    "appid": "wx2aa33e1b0f13463e",
+    "setting": {
+      "urlCheck": false,
+      "es6": true,
+      "minified": true
+    },
+    "usingComponents": true
+  }
+}

+ 221 - 0
src/package-views/pages/login/index.vue

@@ -0,0 +1,221 @@
+<template>
+  <view class="page-gradient login">
+    <view class="hero">
+      <view class="brand">会员营销</view>
+      <view class="subtitle">授权本机号码,一键登录店铺会员服务</view>
+    </view>
+
+    <view class="card box">
+      <!-- #ifdef MP-WEIXIN -->
+      <button class="phone-btn" open-type="getPhoneNumber" :loading="logging" @getphonenumber="onGetPhoneNumber">
+        授权本机号码一键登录
+      </button>
+      <!-- #endif -->
+
+      <!-- #ifndef MP-WEIXIN -->
+      <view class="tip-box">一键登录仅支持微信小程序,请在微信中打开本小程序。</view>
+      <!-- #endif -->
+
+      <view class="agreement-section">
+        <view class="checkbox-hit" @click="agreed = !agreed">
+          <view class="checkbox" :class="{ checked: agreed }">
+            <text v-if="agreed" class="checkbox-check">✓</text>
+          </view>
+        </view>
+        <view class="agreement-text">
+          我已阅读
+          <text class="agreement-link" @click.stop="openAgreement('service')">用户协议</text>
+          和
+          <text class="agreement-link" @click.stop="openAgreement('privacy')">隐私政策</text>
+        </view>
+      </view>
+    </view>
+  </view>
+</template>
+
+<script setup lang="ts">
+import { onLoad } from '@dcloudio/uni-app'
+import { ref } from 'vue'
+import { loginByWechatMiniPhone } from '@/api/modules/memberAuth'
+import { useAuthStore } from '@/store/modules/auth'
+import { isTabBarPage } from '@/utils/auth'
+import { removeSsoToken } from '@/utils/tokenStorage'
+
+const auth = useAuthStore()
+const redirect = ref('')
+const agreed = ref(false)
+const logging = ref(false)
+
+onLoad(query => {
+  redirect.value = decodeURIComponent(String(query?.redirect || ''))
+})
+
+function openAgreement(type: 'service' | 'privacy') {
+  uni.showToast({ title: type === 'service' ? '用户协议页面待配置' : '隐私政策页面待配置', icon: 'none' })
+}
+
+async function onGetPhoneNumber(e: { detail?: { errMsg?: string; code?: string } }) {
+  if (logging.value) return
+  if (!agreed.value) {
+    uni.showToast({ title: '请先阅读并同意用户协议与隐私政策', icon: 'none' })
+    return
+  }
+  const detail = e.detail || {}
+  if (detail.errMsg !== 'getPhoneNumber:ok') {
+    uni.showToast({ title: '需要授权手机号才能完成登录', icon: 'none' })
+    return
+  }
+  const phoneCode = detail.code
+  if (!phoneCode) {
+    uni.showToast({ title: '未取得手机号授权,请使用较新版本微信后重试', icon: 'none' })
+    return
+  }
+
+  logging.value = true
+  uni.showLoading({ title: '登录中...', mask: true })
+  try {
+    const loginRes = await new Promise<UniApp.LoginRes>((resolve, reject) => {
+      uni.login({ provider: 'weixin', success: resolve, fail: reject })
+    })
+    const jsCode = loginRes.code
+    if (!jsCode) throw new Error('获取微信登录凭证失败')
+
+    const res = await loginByWechatMiniPhone({ code: jsCode, phoneCode })
+    const data = res.data
+    auth.setToken(data.accessToken)
+    if (data.refreshToken) {
+      auth.setSsoToken(data.refreshToken)
+    } else {
+      removeSsoToken()
+    }
+    auth.setUser({
+      id: data.memberId,
+      nickname: (data.nickname || '会员').trim(),
+      loginName: data.memberNo?.trim(),
+      memberNo: data.memberNo?.trim(),
+      avatar: data.avatar || '',
+      phone: (data.mobile || '').trim()
+    })
+
+    uni.hideLoading()
+    uni.showToast({ title: '登录成功', icon: 'none' })
+    setTimeout(goAfterLogin, 300)
+  } catch (error) {
+    uni.hideLoading()
+    uni.showToast({ title: (error as Error).message || '登录失败', icon: 'none' })
+  } finally {
+    logging.value = false
+  }
+}
+
+function goAfterLogin() {
+  const fallbackUrl = '/pages/home/index'
+  const url = redirect.value || fallbackUrl
+  if (isTabBarPage(url)) {
+    uni.switchTab({
+      url,
+      fail: () => uni.reLaunch({ url })
+    })
+    return
+  }
+  uni.redirectTo({
+    url,
+    fail: () => {
+      uni.navigateTo({
+        url,
+        fail: () => uni.switchTab({ url: fallbackUrl })
+      })
+    }
+  })
+}
+</script>
+
+<style scoped lang="scss">
+.login {
+  min-height: 100vh;
+  padding: 24rpx;
+  box-sizing: border-box;
+  background: linear-gradient(180deg, #ffe8cc 0%, #fff9f3 45%, #ffffff 100%);
+}
+.hero {
+  padding: 96rpx 32rpx 28rpx;
+  text-align: center;
+}
+.brand {
+  font-size: 44rpx;
+  font-weight: 800;
+  color: #2c1810;
+}
+.subtitle {
+  margin-top: 16rpx;
+  font-size: 26rpx;
+  color: #8c7b6a;
+}
+.box {
+  margin: 40rpx 24rpx 0;
+  padding: 40rpx 32rpx;
+}
+.phone-btn {
+  width: 100%;
+  height: 96rpx;
+  line-height: 96rpx;
+  border-radius: 999rpx;
+  background: linear-gradient(135deg, #ff9a3c, #ff6b35);
+  color: #fff;
+  font-size: 32rpx;
+  font-weight: 700;
+  border: none;
+  box-shadow: 0 14rpx 32rpx rgba(255, 107, 53, 0.25);
+
+  &::after {
+    border: none;
+  }
+}
+.tip-box {
+  padding: 28rpx;
+  border-radius: 18rpx;
+  background: #fff8e6;
+  color: #8a6d3b;
+  font-size: 26rpx;
+  line-height: 1.5;
+}
+.agreement-section {
+  display: flex;
+  align-items: flex-start;
+  gap: 14rpx;
+  margin-top: 32rpx;
+}
+.checkbox-hit {
+  padding-top: 4rpx;
+}
+.checkbox {
+  width: 34rpx;
+  height: 34rpx;
+  border: 2rpx solid #d4c4a8;
+  border-radius: 50%;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  background: #fff;
+
+  &.checked {
+    background: #e6a23c;
+    border-color: #e6a23c;
+  }
+}
+.checkbox-check {
+  font-size: 22rpx;
+  color: #fff;
+  line-height: 1;
+}
+.agreement-text {
+  flex: 1;
+  font-size: 24rpx;
+  color: #7a8b90;
+  line-height: 1.65;
+}
+.agreement-link {
+  color: #c8872a;
+  padding: 0 4rpx;
+}
+</style>

+ 86 - 0
src/package-views/pages/marketing/clerk-home.vue

@@ -0,0 +1,86 @@
+<template>
+  <view class="page">
+    <text class="title">店员工作台</text>
+    <text class="sub">选择店铺后扫码核销线下券</text>
+    <view v-if="tenants.length === 0 && !loading" class="empty">暂无店员权限店铺,请联系店长开通</view>
+    <view v-for="item in tenants" :key="item.id" class="card" @click="openClerk(item)">
+      <text class="name">{{ item.tenantName || item.tenantCode }}</text>
+      <text class="role">{{ item.memberRoleName || item.memberRole || '店员' }}</text>
+    </view>
+  </view>
+</template>
+
+<script setup lang="ts">
+import { onShow } from '@dcloudio/uni-app'
+import { ref } from 'vue'
+import { fetchMyClerkTenants, type MarketingTenantBrief } from '@/api/modules/marketing'
+import { getAccessToken } from '@/utils/tokenStorage'
+
+const tenants = ref<MarketingTenantBrief[]>([])
+const loading = ref(false)
+
+async function loadTenants() {
+  if (!getAccessToken()) {
+    uni.showToast({ title: '请先登录', icon: 'none' })
+    return
+  }
+  loading.value = true
+  try {
+    const res = await fetchMyClerkTenants()
+    tenants.value = res.data ?? []
+  } catch (e) {
+    uni.showToast({ title: (e as Error).message || '加载失败', icon: 'none' })
+  } finally {
+    loading.value = false
+  }
+}
+
+function openClerk(item: MarketingTenantBrief) {
+  uni.navigateTo({
+    url: `/package-views/pages/marketing/clerk-verify?tenantCode=${encodeURIComponent(item.tenantCode)}&tenantName=${encodeURIComponent(item.tenantName || '')}`
+  })
+}
+
+onShow(() => {
+  loadTenants()
+})
+</script>
+
+<style scoped>
+.page {
+  min-height: 100vh;
+  padding: 32rpx;
+  background: #f5f6f8;
+}
+.title {
+  font-size: 40rpx;
+  font-weight: 600;
+}
+.sub {
+  display: block;
+  margin: 12rpx 0 32rpx;
+  color: #666;
+  font-size: 26rpx;
+}
+.empty {
+  text-align: center;
+  color: #999;
+  padding: 80rpx 0;
+}
+.card {
+  background: #fff;
+  border-radius: 16rpx;
+  padding: 28rpx;
+  margin-bottom: 20rpx;
+}
+.name {
+  display: block;
+  font-size: 32rpx;
+}
+.role {
+  display: block;
+  margin-top: 8rpx;
+  color: #888;
+  font-size: 24rpx;
+}
+</style>

+ 188 - 0
src/package-views/pages/marketing/clerk-records.vue

@@ -0,0 +1,188 @@
+<template>
+  <view class="page-gradient records-page">
+    <view class="records-page__head">
+      <text class="section-title">核销记录</text>
+      <text class="section-sub">{{ tenantName || tenantCode }}</text>
+    </view>
+
+    <view v-if="loading && records.length === 0" class="card empty-card">
+      <text class="muted">加载中…</text>
+    </view>
+    <view v-else-if="records.length === 0" class="card empty-card">
+      <view class="empty-block">
+        <text class="muted">暂无核销记录</text>
+      </view>
+    </view>
+
+    <view v-for="item in records" :key="item.id" class="record-card">
+      <view class="record-card__top">
+        <text class="record-card__name">{{ item.couponName || '优惠券' }}</text>
+        <text class="record-card__type">{{ item.verifyTypeName || '线下扫码' }}</text>
+      </view>
+      <view class="record-card__row">
+        <text class="record-card__label">会员</text>
+        <text class="record-card__value">
+          {{ memberText(item) }}
+        </text>
+      </view>
+      <view class="record-card__row">
+        <text class="record-card__label">核销时间</text>
+        <text class="record-card__value">{{ formatTime(item.verifyTime) }}</text>
+      </view>
+      <view class="record-card__row">
+        <text class="record-card__label">操作人</text>
+        <text class="record-card__value">{{ item.operatorName || '-' }}</text>
+      </view>
+    </view>
+
+    <view v-if="hasMore" class="more-wrap">
+      <button class="outline-btn more-btn" size="mini" :loading="loading" @click="loadMore">加载更多</button>
+    </view>
+  </view>
+</template>
+
+<script setup lang="ts">
+import { onLoad, onReachBottom } from '@dcloudio/uni-app'
+import { ref } from 'vue'
+import { fetchMarketingVerifyRecords, type MarketingVerifyRecord } from '@/api/modules/marketing'
+
+const tenantCode = ref('')
+const tenantName = ref('')
+const records = ref<MarketingVerifyRecord[]>([])
+const pageNo = ref(1)
+const total = ref(0)
+const loading = ref(false)
+const pageSize = 10
+const hasMore = ref(false)
+
+function formatTime(value?: string) {
+  if (!value) return '-'
+  return value.length >= 16 ? value.slice(0, 16).replace('T', ' ') : value.replace('T', ' ')
+}
+
+function memberText(item: MarketingVerifyRecord) {
+  const parts: string[] = []
+  if (item.memberNickname) parts.push(item.memberNickname)
+  if (item.memberNo) parts.push(item.memberNo)
+  if (item.memberMobile) parts.push(item.memberMobile)
+  return parts.join(' · ') || '-'
+}
+
+async function loadList(reset = false) {
+  if (!tenantCode.value || loading.value) return
+  if (reset) {
+    pageNo.value = 1
+    records.value = []
+  }
+  loading.value = true
+  try {
+    const res = await fetchMarketingVerifyRecords({
+      tenantCode: tenantCode.value,
+      pageNo: pageNo.value,
+      pageSize
+    })
+    const list = res.data?.records ?? []
+    total.value = res.data?.total ?? 0
+    records.value = reset ? list : records.value.concat(list)
+    hasMore.value = records.value.length < total.value
+  } catch (e) {
+    uni.showToast({ title: (e as Error).message || '加载失败', icon: 'none' })
+  } finally {
+    loading.value = false
+  }
+}
+
+function loadMore() {
+  if (!hasMore.value) return
+  pageNo.value += 1
+  loadList(false)
+}
+
+onLoad(query => {
+  tenantCode.value = String(query?.tenantCode || '')
+  tenantName.value = decodeURIComponent(String(query?.tenantName || ''))
+  loadList(true)
+})
+
+onReachBottom(() => {
+  loadMore()
+})
+</script>
+
+<style scoped lang="scss">
+.records-page {
+  min-height: 100vh;
+  padding: 24rpx 24rpx 48rpx;
+}
+
+.records-page__head {
+  padding: 8rpx 8rpx 24rpx;
+}
+
+.empty-card {
+  margin-bottom: 24rpx;
+}
+
+.record-card {
+  background: #fff;
+  border-radius: 24rpx;
+  padding: 28rpx;
+  margin-bottom: 20rpx;
+  box-shadow: 0 10rpx 32rpx rgba(255, 107, 53, 0.08);
+}
+
+.record-card__top {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  gap: 16rpx;
+  margin-bottom: 20rpx;
+}
+
+.record-card__name {
+  flex: 1;
+  font-size: 30rpx;
+  font-weight: 700;
+  color: #2c1810;
+}
+
+.record-card__type {
+  padding: 4rpx 14rpx;
+  border-radius: 999rpx;
+  background: #fff3e6;
+  color: #ff7a1a;
+  font-size: 22rpx;
+}
+
+.record-card__row {
+  display: flex;
+  gap: 16rpx;
+  margin-top: 12rpx;
+  font-size: 24rpx;
+  line-height: 1.5;
+}
+
+.record-card__label {
+  width: 120rpx;
+  color: #8c7b6a;
+  flex-shrink: 0;
+}
+
+.record-card__value {
+  flex: 1;
+  color: #2c1810;
+}
+
+.more-wrap {
+  padding: 16rpx 0 8rpx;
+  text-align: center;
+}
+
+.more-btn {
+  display: inline-flex;
+  min-width: 220rpx;
+  height: 72rpx;
+  line-height: 72rpx;
+  padding: 0 32rpx;
+}
+</style>

+ 104 - 0
src/package-views/pages/marketing/clerk-verify.vue

@@ -0,0 +1,104 @@
+<template>
+  <view class="page">
+    <view class="header">
+      <text class="shop">{{ tenantName || tenantCode }}</text>
+      <text class="hint">扫描顾客核销码完成核销</text>
+    </view>
+    <button class="scan-btn" type="primary" :loading="loading" @click="scanVerify">扫码核销</button>
+    <button class="link-btn" @click="goRecords">核销记录</button>
+  </view>
+</template>
+
+<script setup lang="ts">
+import { onLoad } from '@dcloudio/uni-app'
+import { ref } from 'vue'
+import { verifyMarketingCoupon } from '@/api/modules/marketing'
+
+const tenantCode = ref('')
+const tenantName = ref('')
+const loading = ref(false)
+
+function parseVerifyToken(raw: string) {
+  const text = String(raw || '').trim()
+  if (!text) return ''
+  if (text.includes('|')) {
+    const parts = text.split('|')
+    return parts[parts.length - 1] || text
+  }
+  return text
+}
+
+async function doVerify(token: string) {
+  loading.value = true
+  try {
+    const res = await verifyMarketingCoupon({ tenantCode: tenantCode.value, verifyToken: token })
+    const data = res.data
+    uni.showModal({
+      title: '核销成功',
+      content: `${data?.couponName || '优惠券'}\n会员:${data?.memberNickname || '-'} ${data?.memberMobile || ''}`,
+      showCancel: false
+    })
+  } catch (e) {
+    uni.showToast({ title: (e as Error).message || '核销失败', icon: 'none' })
+  } finally {
+    loading.value = false
+  }
+}
+
+function scanVerify() {
+  if (!tenantCode.value) {
+    uni.showToast({ title: '缺少店铺编码', icon: 'none' })
+    return
+  }
+  uni.scanCode({
+    onlyFromCamera: true,
+    success: res => {
+      const token = parseVerifyToken(res.result)
+      if (!token) {
+        uni.showToast({ title: '无效核销码', icon: 'none' })
+        return
+      }
+      doVerify(token)
+    }
+  })
+}
+
+function goRecords() {
+  uni.navigateTo({
+    url: `/package-views/pages/marketing/clerk-records?tenantCode=${encodeURIComponent(tenantCode.value)}&tenantName=${encodeURIComponent(tenantName.value)}`
+  })
+}
+
+onLoad(query => {
+  tenantCode.value = String(query?.tenantCode || '')
+  tenantName.value = String(query?.tenantName || '')
+})
+</script>
+
+<style scoped>
+.page {
+  min-height: 100vh;
+  padding: 32rpx;
+  background: #f5f6f8;
+}
+.header {
+  margin-bottom: 48rpx;
+}
+.shop {
+  display: block;
+  font-size: 36rpx;
+  font-weight: 600;
+}
+.hint {
+  display: block;
+  margin-top: 12rpx;
+  color: #666;
+  font-size: 26rpx;
+}
+.scan-btn {
+  margin-bottom: 24rpx;
+}
+.link-btn {
+  background: #fff;
+}
+</style>

+ 159 - 0
src/package-views/pages/marketing/verify-code.vue

@@ -0,0 +1,159 @@
+<template>
+  <view class="page-gradient verify-page">
+    <view class="card-soft verify-card">
+      <text class="verify-card__title">到店核销码</text>
+      <text class="verify-card__sub muted">向店员出示下方二维码,约 60 秒内有效</text>
+
+      <view class="qr-panel">
+        <view v-if="loading && !qrcodeContent" class="qr-panel__loading muted">生成中…</view>
+        <up-qrcode
+          v-else-if="qrcodeContent"
+          :key="qrKey"
+          :cid="qrCanvasId"
+          :val="qrcodeContent"
+          :size="qrSize"
+          unit="px"
+          foreground="#2c1810"
+          background="#ffffff"
+          :onval="true"
+          :load-make="true"
+          :show-loading="true"
+          loading-text="生成二维码"
+        />
+        <view v-else class="qr-panel__loading muted">暂无核销码</view>
+      </view>
+
+      <view class="expire-row">
+        <text class="expire-label muted">过期时间</text>
+        <text class="expire-value">{{ expireText }}</text>
+      </view>
+
+      <text class="token-tip muted">核销码:{{ shortToken }}</text>
+
+      <button class="primary-btn" :loading="loading" @click="refreshCode">刷新核销码</button>
+    </view>
+  </view>
+</template>
+
+<script setup lang="ts">
+import { onLoad, onUnload } from '@dcloudio/uni-app'
+import { computed, ref } from 'vue'
+import { fetchMarketingVerifyCode } from '@/api/modules/marketing'
+
+const memberCouponId = ref('')
+const tenantCode = ref('')
+const qrcodeContent = ref('')
+const expireText = ref('-')
+const loading = ref(false)
+const qrKey = ref(0)
+let timer: ReturnType<typeof setInterval> | null = null
+
+const qrSize = 220
+const qrCanvasId = computed(() => `verify-qr-${memberCouponId.value || 'guest'}`)
+
+const shortToken = computed(() => {
+  const text = qrcodeContent.value || ''
+  if (text.length <= 24) return text || '-'
+  return `${text.slice(0, 12)}…${text.slice(-8)}`
+})
+
+function formatExpireAt(raw: string) {
+  if (!raw || raw === '-') return '-'
+  const date = new Date(raw)
+  if (Number.isNaN(date.getTime())) return raw
+  const pad = (n: number) => String(n).padStart(2, '0')
+  return `${pad(date.getMonth() + 1)}-${pad(date.getDate())} ${pad(date.getHours())}:${pad(date.getMinutes())}:${pad(date.getSeconds())}`
+}
+
+async function refreshCode() {
+  if (!memberCouponId.value || !tenantCode.value) {
+    uni.showToast({ title: '参数缺失', icon: 'none' })
+    return
+  }
+  loading.value = true
+  try {
+    const res = await fetchMarketingVerifyCode(memberCouponId.value, tenantCode.value)
+    qrcodeContent.value = res.data?.qrcodeContent || res.data?.verifyToken || ''
+    expireText.value = formatExpireAt(res.data?.expireAt || '-')
+    qrKey.value += 1
+  } catch (e) {
+    uni.showToast({ title: (e as Error).message || '获取失败', icon: 'none' })
+  } finally {
+    loading.value = false
+  }
+}
+
+onLoad(query => {
+  memberCouponId.value = String(query?.memberCouponId || '')
+  tenantCode.value = String(query?.tenantCode || '')
+  refreshCode()
+  timer = setInterval(refreshCode, 55000)
+})
+
+onUnload(() => {
+  if (timer) clearInterval(timer)
+})
+</script>
+
+<style scoped lang="scss">
+.verify-page {
+  padding: 32rpx 24rpx;
+  min-height: 100vh;
+  box-sizing: border-box;
+}
+
+.verify-card__title {
+  display: block;
+  font-size: 40rpx;
+  font-weight: 800;
+  color: #2c1810;
+}
+
+.verify-card__sub {
+  display: block;
+  margin-top: 12rpx;
+  font-size: 26rpx;
+}
+
+.qr-panel {
+  margin: 36rpx auto 28rpx;
+  padding: 24rpx;
+  border-radius: 24rpx;
+  background: #fff;
+  border: 2rpx solid rgba(255, 107, 53, 0.12);
+  width: 480rpx;
+  min-height: 480rpx;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  box-shadow: inset 0 0 0 8rpx #fffaf5;
+}
+
+.qr-panel__loading {
+  font-size: 28rpx;
+  text-align: center;
+}
+
+.expire-row {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  margin-bottom: 16rpx;
+  padding: 0 8rpx;
+}
+
+.expire-value {
+  font-size: 26rpx;
+  color: #ff6b35;
+  font-weight: 600;
+}
+
+.token-tip {
+  display: block;
+  margin-bottom: 28rpx;
+  padding: 0 8rpx;
+  font-size: 22rpx;
+  word-break: break-all;
+  text-align: center;
+}
+</style>

+ 112 - 0
src/pages.json

@@ -0,0 +1,112 @@
+{
+  "easycom": {
+    "autoscan": true,
+    "custom": {
+      "^u--(.*)": "uview-plus/components/u-$1/u-$1.vue",
+      "^up-(.*)": "uview-plus/components/u-$1/u-$1.vue",
+      "^u-([^-].*)": "uview-plus/components/u-$1/u-$1.vue"
+    }
+  },
+  "pages": [
+    {
+      "path": "pages/home/index",
+      "style": {
+        "navigationBarTitleText": "店铺首页",
+        "navigationBarBackgroundColor": "#FFE8CC",
+        "navigationStyle": "default",
+        "enablePullDownRefresh": true
+      }
+    },
+    {
+      "path": "pages/coupon/index",
+      "style": {
+        "navigationBarTitleText": "我的优惠券",
+        "navigationBarBackgroundColor": "#FFE8CC",
+        "enablePullDownRefresh": true
+      }
+    },
+    {
+      "path": "pages/profile/index",
+      "style": {
+        "navigationBarTitleText": "我的",
+        "navigationBarBackgroundColor": "#FFE8CC"
+      }
+    }
+  ],
+  "globalStyle": {
+    "navigationBarTextStyle": "black",
+    "navigationBarTitleText": "会员营销",
+    "navigationBarBackgroundColor": "#FFE8CC",
+    "backgroundColor": "#FFF9F3"
+  },
+  "tabBar": {
+    "color": "#8C7B6A",
+    "selectedColor": "#FF6B35",
+    "borderStyle": "white",
+    "backgroundColor": "#ffffff",
+    "list": [
+      {
+        "pagePath": "pages/home/index",
+        "iconPath": "static/tabbar/home.png",
+        "selectedIconPath": "static/tabbar/home-active.png",
+        "text": "首页"
+      },
+      {
+        "pagePath": "pages/coupon/index",
+        "iconPath": "static/tabbar/coupon.png",
+        "selectedIconPath": "static/tabbar/coupon-active.png",
+        "text": "优惠券"
+      },
+      {
+        "pagePath": "pages/profile/index",
+        "iconPath": "static/tabbar/profile.png",
+        "selectedIconPath": "static/tabbar/profile-active.png",
+        "text": "我的"
+      }
+    ]
+  },
+  "subPackages": [
+    {
+      "root": "package-views",
+      "name": "package-views",
+      "pages": [
+        {
+          "path": "pages/login/index",
+          "style": {
+            "navigationBarTitleText": "登录",
+            "navigationBarBackgroundColor": "#FFE8CC"
+          }
+        },
+        {
+          "path": "pages/marketing/verify-code",
+          "style": {
+            "navigationBarTitleText": "顾客核销码",
+            "navigationBarBackgroundColor": "#FFE8CC"
+          }
+        },
+        {
+          "path": "pages/marketing/clerk-home",
+          "style": {
+            "navigationBarTitleText": "店员工作台",
+            "navigationBarBackgroundColor": "#FFE8CC"
+          }
+        },
+        {
+          "path": "pages/marketing/clerk-verify",
+          "style": {
+            "navigationBarTitleText": "扫码核销",
+            "navigationBarBackgroundColor": "#FFE8CC"
+          }
+        },
+        {
+          "path": "pages/marketing/clerk-records",
+          "style": {
+            "navigationBarTitleText": "核销记录",
+            "navigationBarBackgroundColor": "#FFE8CC",
+            "enablePullDownRefresh": true
+          }
+        }
+      ]
+    }
+  ]
+}

+ 600 - 0
src/pages/coupon/index.vue

@@ -0,0 +1,600 @@
+<template>
+
+  <view class="page-gradient coupon-page">
+
+    <view class="coupon-page__head">
+
+      <text class="section-title">我的优惠券</text>
+
+      <text v-if="tenantCode" class="section-sub">当前店铺:{{ tenantName || tenantCode }}</text>
+
+    </view>
+
+
+
+    <view v-if="!tenantCode" class="card empty-card">
+
+      <view class="empty-block">
+
+        <text class="empty-icon">🎫</text>
+
+        <text class="muted">请先扫码关注店铺</text>
+
+        <button class="primary-btn empty-card__btn" @click="goScan">去扫码</button>
+
+      </view>
+
+    </view>
+
+
+
+    <view v-else-if="!isLoggedIn()" class="card empty-card">
+
+      <view class="empty-block">
+
+        <text class="muted">登录后查看本店优惠券</text>
+
+        <button class="primary-btn empty-card__btn" @click="goLogin">去登录</button>
+
+      </view>
+
+    </view>
+
+
+
+    <template v-else>
+
+      <view class="coupon-tabs">
+
+        <view
+
+          v-for="tab in tabs"
+
+          :key="tab.key"
+
+          class="coupon-tabs__item"
+
+          :class="{ active: activeTab === tab.key }"
+
+          @click="switchTab(tab.key)"
+
+        >
+
+          <text class="coupon-tabs__label">{{ tab.label }}</text>
+
+          <text v-if="tabCounts[tab.key] > 0" class="coupon-tabs__count">{{ tabCounts[tab.key] }}</text>
+
+        </view>
+
+      </view>
+
+
+
+      <view v-if="loading" class="card empty-card">
+
+        <text class="muted">加载中…</text>
+
+      </view>
+
+      <view v-else-if="displayList.length === 0" class="card empty-card">
+
+        <view class="empty-block">
+
+          <text class="muted">{{ emptyText }}</text>
+
+          <button v-if="activeTab === 'unused'" class="outline-btn empty-card__btn" @click="goHome">
+
+            去首页领取
+
+          </button>
+
+        </view>
+
+      </view>
+
+
+
+      <MkCouponCard
+
+        v-for="item in displayList"
+
+        :key="String(item.id || item.memberCouponId)"
+
+        :name="item.couponName || '优惠券'"
+
+        :meta="couponMeta(item)"
+
+        :amount-text="amountText(item)"
+
+        unit-text="元"
+
+        :tag="tabTag(item)"
+
+        :dimmed="activeTab !== 'unused'"
+
+      >
+
+        <template v-if="canShowVerify(item)" #action>
+
+          <button class="verify-btn" size="mini" @click="goVerifyCode(item)">核销码</button>
+
+        </template>
+
+      </MkCouponCard>
+
+    </template>
+
+  </view>
+
+</template>
+
+
+
+<script setup lang="ts">
+
+import { computed, ref } from 'vue'
+
+import { onPullDownRefresh, onShow } from '@dcloudio/uni-app'
+
+import MkCouponCard from '@/components/MkCouponCard.vue'
+
+import { fetchMyStoreCoupons, type MarketingCouponItem } from '@/api/modules/marketing'
+
+import { useTenantStore } from '@/store/modules/tenant'
+
+import { isLoggedIn, requireLoginNavigate } from '@/utils/auth'
+
+import { scanStoreQrCode } from '@/utils/tenantScan'
+
+
+
+type CouponTab = 'unused' | 'used' | 'invalid'
+
+
+
+const INVALID_STATUS = new Set([2, 3, 4])
+
+
+
+const tenantStore = useTenantStore()
+
+const tenantCode = computed(() => tenantStore.tenantCode)
+
+const tenantName = computed(() => tenantStore.tenantName)
+
+const allList = ref<MarketingCouponItem[]>([])
+
+const loading = ref(false)
+
+const scanning = ref(false)
+
+const activeTab = ref<CouponTab>('unused')
+
+
+
+const tabs = [
+
+  { key: 'unused' as const, label: '可使用' },
+
+  { key: 'used' as const, label: '已使用' },
+
+  { key: 'invalid' as const, label: '已失效' }
+
+]
+
+
+
+function normalizeStatus(item: MarketingCouponItem) {
+
+  const raw = item.status
+
+  if (raw === '0' || raw === 0) return 0
+
+  if (raw === '1' || raw === 1) return 1
+
+  if (raw === '2' || raw === 2) return 2
+
+  if (raw === '3' || raw === 3) return 3
+
+  if (raw === '4' || raw === 4) return 4
+
+  if (item.statusName === '未使用') return 0
+
+  if (item.statusName === '已使用') return 1
+
+  return Number(raw)
+
+}
+
+
+
+function isUnused(item: MarketingCouponItem) {
+
+  return normalizeStatus(item) === 0
+
+}
+
+
+
+function isUsed(item: MarketingCouponItem) {
+
+  return normalizeStatus(item) === 1
+
+}
+
+
+
+function isInvalid(item: MarketingCouponItem) {
+
+  return INVALID_STATUS.has(normalizeStatus(item))
+
+}
+
+
+
+const displayList = computed(() => {
+
+  if (activeTab.value === 'unused') return allList.value.filter(isUnused)
+
+  if (activeTab.value === 'used') return allList.value.filter(isUsed)
+
+  return allList.value.filter(isInvalid)
+
+})
+
+
+
+const tabCounts = computed(() => ({
+
+  unused: allList.value.filter(isUnused).length,
+
+  used: allList.value.filter(isUsed).length,
+
+  invalid: allList.value.filter(isInvalid).length
+
+}))
+
+
+
+const emptyText = computed(() => {
+
+  if (activeTab.value === 'used') return '暂无已使用优惠券'
+
+  if (activeTab.value === 'invalid') return '暂无已失效优惠券'
+
+  return '暂无可用优惠券'
+
+})
+
+
+
+function formatDate(value?: string) {
+
+  if (!value) return ''
+
+  return value.length >= 10 ? value.slice(0, 10) : value
+
+}
+
+
+
+function couponMeta(item: MarketingCouponItem) {
+
+  const parts: string[] = []
+
+  const minAmount = item.minConsumeAmount ?? item.minOrderAmount
+
+  if (minAmount != null) parts.push(`满${minAmount}可用`)
+
+  const endDate = item.validEndDate ?? item.expireDate
+
+  if (endDate) parts.push(`有效期至 ${formatDate(String(endDate))}`)
+
+  if (activeTab.value === 'used' && item.useDate) {
+
+    parts.push(`使用时间 ${formatDate(String(item.useDate))}`)
+
+  }
+
+  return parts.join(' · ') || '店铺线下券'
+
+}
+
+
+
+function amountText(item: MarketingCouponItem) {
+
+  const amount = item.discountValue ?? item.discountAmount
+
+  if (amount != null) return String(amount)
+
+  return '惠'
+
+}
+
+
+
+function tabTag(item: MarketingCouponItem) {
+
+  if (activeTab.value === 'unused') return '可使用'
+
+  return String(item.statusName || (activeTab.value === 'used' ? '已使用' : '已失效'))
+
+}
+
+
+
+function canShowVerify(item: MarketingCouponItem) {
+
+  return activeTab.value === 'unused' && isUnused(item)
+
+}
+
+
+
+function switchTab(key: CouponTab) {
+
+  activeTab.value = key
+
+}
+
+
+
+function goVerifyCode(item: MarketingCouponItem) {
+
+  const memberCouponId = String(item.id || item.memberCouponId || '')
+
+  if (!memberCouponId || !tenantCode.value) return
+
+  uni.navigateTo({
+
+    url: `/package-views/pages/marketing/verify-code?memberCouponId=${encodeURIComponent(memberCouponId)}&tenantCode=${encodeURIComponent(tenantCode.value)}`
+
+  })
+
+}
+
+
+
+function goLogin() {
+
+  requireLoginNavigate('/pages/coupon/index')
+
+}
+
+
+
+async function goScan() {
+
+  if (scanning.value) return
+
+  scanning.value = true
+
+  try {
+
+    await scanStoreQrCode({ autoJoin: true })
+
+  } catch {
+
+    /* toast 已在工具内处理 */
+
+  } finally {
+
+    scanning.value = false
+
+  }
+
+}
+
+
+
+function goHome() {
+
+  uni.switchTab({ url: '/pages/home/index' })
+
+}
+
+
+
+async function loadList() {
+
+  if (!tenantCode.value || !isLoggedIn()) {
+
+    allList.value = []
+
+    return
+
+  }
+
+  loading.value = true
+
+  try {
+
+    const res = await fetchMyStoreCoupons({ tenantCode: tenantCode.value })
+
+    allList.value = res.data?.records ?? []
+
+  } catch (e) {
+
+    uni.showToast({ title: (e as Error).message || '加载失败', icon: 'none' })
+
+  } finally {
+
+    loading.value = false
+
+  }
+
+}
+
+
+
+onShow(() => {
+
+  tenantStore.initTenant()
+
+  loadList()
+
+})
+
+
+
+onPullDownRefresh(async () => {
+
+  await loadList()
+
+  uni.stopPullDownRefresh()
+
+})
+
+</script>
+
+
+
+<style scoped lang="scss">
+
+.coupon-page {
+
+  padding: 24rpx 24rpx 40rpx;
+
+}
+
+
+
+.coupon-page__head {
+
+  padding: 8rpx 8rpx 20rpx;
+
+}
+
+
+
+.coupon-tabs {
+
+  display: flex;
+
+  align-items: center;
+
+  gap: 12rpx;
+
+  margin-bottom: 24rpx;
+
+  padding: 8rpx;
+
+  background: rgba(255, 255, 255, 0.75);
+
+  border-radius: 999rpx;
+
+  box-shadow: 0 8rpx 24rpx rgba(255, 107, 53, 0.08);
+
+}
+
+
+
+.coupon-tabs__item {
+
+  flex: 1;
+
+  display: flex;
+
+  align-items: center;
+
+  justify-content: center;
+
+  gap: 8rpx;
+
+  height: 72rpx;
+
+  border-radius: 999rpx;
+
+  color: #8c7b6a;
+
+  font-size: 26rpx;
+
+  font-weight: 600;
+
+  transition: all 0.2s ease;
+
+
+
+  &.active {
+
+    background: linear-gradient(135deg, #ff9a3c, #ff6b35);
+
+    color: #fff;
+
+    box-shadow: 0 8rpx 20rpx rgba(255, 107, 53, 0.25);
+
+
+
+    .coupon-tabs__count {
+
+      background: rgba(255, 255, 255, 0.25);
+
+      color: #fff;
+
+    }
+
+  }
+
+}
+
+
+
+.coupon-tabs__count {
+
+  min-width: 32rpx;
+
+  height: 32rpx;
+
+  line-height: 32rpx;
+
+  padding: 0 8rpx;
+
+  border-radius: 999rpx;
+
+  background: #fff3e6;
+
+  color: #ff7a1a;
+
+  font-size: 20rpx;
+
+  text-align: center;
+
+}
+
+
+
+.empty-card__btn {
+
+  margin-top: 24rpx;
+
+}
+
+
+
+.verify-btn {
+
+  background: #fff3e6;
+
+  color: #ff6b35;
+
+  border: 2rpx solid rgba(255, 107, 53, 0.35);
+
+  border-radius: 999rpx;
+
+  font-size: 24rpx;
+
+  font-weight: 600;
+
+
+
+  &::after {
+
+    border: none;
+
+  }
+
+}
+
+</style>
+

+ 322 - 0
src/pages/home/index.vue

@@ -0,0 +1,322 @@
+<template>
+  <view class="page-gradient home">
+    <view class="home-header">
+      <view class="home-header__top">
+        <view>
+          <text class="home-header__label">当前店铺</text>
+          <text class="home-header__name">{{ tenantName || '尚未关注店铺' }}</text>
+        </view>
+        <view class="home-header__scan" @click="goScan">
+          <text class="home-header__scan-icon">⌁</text>
+          <text>扫码</text>
+        </view>
+      </view>
+      <text v-if="tenantCode" class="home-header__code muted">店铺编码 {{ tenantCode }}</text>
+      <view v-if="tenantCode" class="home-header__status">
+        <text v-if="joined" class="tag tag-success">已关注</text>
+        <button v-else class="join-chip" :loading="joining" @click="handleJoin">+ 关注店铺</button>
+      </view>
+    </view>
+
+    <view v-if="!tenantCode" class="card empty-card">
+      <view class="empty-block">
+        <text class="empty-icon">🏪</text>
+        <text class="section-title">先关注一家店铺</text>
+        <text class="section-sub">扫描店内推广码,即可领取会员专属优惠</text>
+        <button class="primary-btn empty-card__btn" @click="goScan">扫码关注店铺</button>
+      </view>
+    </view>
+
+    <view v-else class="section">
+      <view class="section-head">
+        <text class="section-title">可领优惠券</text>
+        <text class="section-sub">会员专享 · 到店可用</text>
+      </view>
+
+      <view v-if="!isLoggedIn()" class="card empty-card">
+        <text class="muted">登录后可查看并领取优惠券</text>
+        <button class="primary-btn empty-card__btn" @click="goLogin">去登录</button>
+      </view>
+
+      <view v-else-if="loading" class="card empty-card">
+        <text class="muted">加载中…</text>
+      </view>
+
+      <view v-else-if="available.length === 0" class="card empty-card">
+        <text class="muted">暂无可领优惠券</text>
+      </view>
+
+      <MkCouponCard
+        v-for="item in available"
+        :key="String(item.id || item.couponId || item.templateId)"
+        :name="item.couponName || '优惠券'"
+        :meta="couponMeta(item)"
+        :amount-text="amountText(item)"
+        unit-text="元"
+      >
+        <template #action>
+          <button
+            class="receive-btn"
+            size="mini"
+            :loading="receivingId === receiveKey(item)"
+            @click="handleReceive(item)"
+          >
+            领取
+          </button>
+        </template>
+      </MkCouponCard>
+    </view>
+  </view>
+</template>
+
+<script setup lang="ts">
+import { computed, ref } from 'vue'
+import { onPullDownRefresh, onShow } from '@dcloudio/uni-app'
+import MkCouponCard from '@/components/MkCouponCard.vue'
+import {
+  fetchAvailableCoupons,
+  fetchMyMarketingTenants,
+  joinMarketingTenant,
+  receiveMarketingCoupon,
+  type MarketingCouponItem
+} from '@/api/modules/marketing'
+import { useTenantStore } from '@/store/modules/tenant'
+import { isLoggedIn, requireLoginNavigate } from '@/utils/auth'
+import { scanStoreQrCode } from '@/utils/tenantScan'
+
+const tenantStore = useTenantStore()
+const tenantCode = computed(() => tenantStore.tenantCode)
+const tenantName = computed(() => tenantStore.tenantName)
+const available = ref<MarketingCouponItem[]>([])
+const myTenantCodes = ref<string[]>([])
+const loading = ref(false)
+const joining = ref(false)
+const scanning = ref(false)
+const receivingId = ref('')
+
+const joined = computed(() => !!tenantCode.value && myTenantCodes.value.includes(tenantCode.value))
+
+function couponMeta(item: MarketingCouponItem) {
+  const parts: string[] = []
+  if (item.minOrderAmount != null) parts.push(`满${item.minOrderAmount}可用`)
+  if (item.expireDate) parts.push(`至 ${item.expireDate}`)
+  return parts.join(' · ') || '店铺线下券'
+}
+
+function amountText(item: MarketingCouponItem) {
+  if (item.discountAmount != null) return String(item.discountAmount)
+  return '惠'
+}
+
+function receiveKey(item: MarketingCouponItem) {
+  return String(item.templateId || item.couponId || item.id || '')
+}
+
+async function loadMyTenants() {
+  if (!isLoggedIn()) {
+    myTenantCodes.value = []
+    return
+  }
+  try {
+    const res = await fetchMyMarketingTenants()
+    myTenantCodes.value = (res.data ?? []).map(item => item.tenantCode)
+  } catch {
+    myTenantCodes.value = []
+  }
+}
+
+async function loadAvailable() {
+  if (!tenantCode.value || !isLoggedIn()) {
+    available.value = []
+    return
+  }
+  loading.value = true
+  try {
+    const res = await fetchAvailableCoupons({ tenantCode: tenantCode.value })
+    available.value = res.data?.records ?? []
+  } catch (e) {
+    uni.showToast({ title: (e as Error).message || '加载失败', icon: 'none' })
+  } finally {
+    loading.value = false
+  }
+}
+
+async function refresh() {
+  await loadMyTenants()
+  await loadAvailable()
+}
+
+async function goScan() {
+  if (scanning.value) return
+  scanning.value = true
+  try {
+    await scanStoreQrCode({ autoJoin: true })
+    await refresh()
+  } catch {
+    /* toast 已在工具内处理 */
+  } finally {
+    scanning.value = false
+  }
+}
+
+function goLogin() {
+  requireLoginNavigate('/pages/home/index')
+}
+
+async function handleJoin() {
+  if (!requireLoginNavigate('/pages/home/index')) return
+  if (!tenantCode.value) return
+  joining.value = true
+  try {
+    await joinMarketingTenant({
+      tenantCode: tenantCode.value,
+      channelCode: tenantStore.current?.channelCode
+    })
+    uni.showToast({ title: '关注成功', icon: 'none' })
+    await refresh()
+  } catch (e) {
+    uni.showToast({ title: (e as Error).message || '关注失败', icon: 'none' })
+  } finally {
+    joining.value = false
+  }
+}
+
+async function handleReceive(item: MarketingCouponItem) {
+  if (!requireLoginNavigate('/pages/home/index')) return
+  if (!joined.value) {
+    uni.showToast({ title: '请先关注店铺', icon: 'none' })
+    return
+  }
+  const templateId = receiveKey(item)
+  if (!templateId) return
+  receivingId.value = templateId
+  try {
+    await receiveMarketingCoupon({ tenantCode: tenantCode.value, templateId })
+    uni.showToast({ title: '领取成功', icon: 'none' })
+    await loadAvailable()
+  } catch (e) {
+    uni.showToast({ title: (e as Error).message || '领取失败', icon: 'none' })
+  } finally {
+    receivingId.value = ''
+  }
+}
+
+onShow(() => {
+  tenantStore.initTenant()
+  refresh()
+})
+
+onPullDownRefresh(async () => {
+  await refresh()
+  uni.stopPullDownRefresh()
+})
+</script>
+
+<style scoped lang="scss">
+.home {
+  padding: 0 24rpx 40rpx;
+}
+
+.home-header {
+  padding: 32rpx 8rpx 28rpx;
+}
+
+.home-header__top {
+  display: flex;
+  justify-content: space-between;
+  align-items: flex-start;
+  gap: 16rpx;
+}
+
+.home-header__label {
+  display: block;
+  font-size: 24rpx;
+  color: #8c7b6a;
+}
+
+.home-header__name {
+  display: block;
+  margin-top: 8rpx;
+  font-size: 42rpx;
+  font-weight: 800;
+  color: #2c1810;
+}
+
+.home-header__code {
+  display: block;
+  margin-top: 8rpx;
+  font-size: 24rpx;
+}
+
+.home-header__status {
+  margin-top: 16rpx;
+}
+
+.home-header__scan {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+  width: 112rpx;
+  height: 112rpx;
+  border-radius: 28rpx;
+  background: rgba(255, 255, 255, 0.9);
+  box-shadow: 0 8rpx 24rpx rgba(255, 107, 53, 0.15);
+  color: #ff6b35;
+  font-size: 22rpx;
+  font-weight: 600;
+}
+
+.home-header__scan-icon {
+  font-size: 40rpx;
+  line-height: 1;
+  margin-bottom: 4rpx;
+}
+
+.join-chip {
+  display: inline-flex;
+  height: 56rpx;
+  line-height: 56rpx;
+  padding: 0 24rpx;
+  border-radius: 999rpx;
+  background: linear-gradient(135deg, #ff9a3c, #ff6b35);
+  color: #fff;
+  font-size: 24rpx;
+  font-weight: 600;
+  border: none;
+
+  &::after {
+    border: none;
+  }
+}
+
+.section {
+  margin-top: 8rpx;
+}
+
+.section-head {
+  margin-bottom: 20rpx;
+  padding: 0 8rpx;
+}
+
+.empty-card {
+  margin-bottom: 24rpx;
+}
+
+.empty-card__btn {
+  margin-top: 28rpx;
+}
+
+.receive-btn {
+  background: linear-gradient(135deg, #ff9a3c, #ff6b35);
+  color: #fff;
+  border: none;
+  border-radius: 999rpx;
+  padding: 0 24rpx;
+  font-size: 24rpx;
+
+  &::after {
+    border: none;
+  }
+}
+</style>

+ 485 - 0
src/pages/profile/index.vue

@@ -0,0 +1,485 @@
+<template>
+  <view class="page-gradient profile">
+    <view class="profile-hero">
+      <view class="profile-hero__avatar">{{ avatarText }}</view>
+      <view class="profile-hero__info">
+        <text class="profile-hero__name">{{ userName }}</text>
+        <text class="profile-hero__phone muted">{{ userPhone || '登录后享受会员权益' }}</text>
+      </view>
+    </view>
+
+    <view v-if="loggedIn" class="card member-code-card">
+      <view class="member-code-card__head">
+        <text class="member-code-card__title">我的会员码</text>
+        <text class="member-code-card__hint muted">到店出示,便于店员识别</text>
+      </view>
+      <view class="member-code-card__body">
+        <view class="member-code-card__qr">
+          <view v-if="codeLoading && !qrcodeContent" class="member-code-card__loading muted">加载中…</view>
+          <up-qrcode
+            v-else-if="qrcodeContent"
+            :key="qrKey"
+            cid="profile-member-code-qr"
+            :val="qrcodeContent"
+            :size="qrSize"
+            unit="px"
+            foreground="#2c1810"
+            background="#ffffff"
+            :onval="true"
+            :load-make="true"
+            :show-loading="true"
+            loading-text="生成二维码"
+          />
+          <view v-else class="member-code-card__loading muted">暂无会员码</view>
+        </view>
+        <view class="member-code-card__info">
+          <text class="member-code-card__no">{{ displayMemberNo || '—' }}</text>
+          <button class="copy-btn" :disabled="!memberNo" @click="copyMemberNo">复制会员码</button>
+        </view>
+      </view>
+    </view>
+
+    <view class="card action-card" @click="goScan">
+      <view class="action-card__icon scan">⌁</view>
+      <view class="action-card__body">
+        <text class="action-card__title">扫码关注店铺</text>
+        <text class="action-card__desc muted">扫描店内推广码,快速成为会员</text>
+      </view>
+      <text class="action-card__arrow">›</text>
+    </view>
+
+    <view class="card menu-card">
+      <view v-if="hasClerkAccess" class="menu-item" @click="goClerk">
+        <view class="menu-item__left">
+          <text class="menu-item__icon clerk">✓</text>
+          <text>店员工作台</text>
+        </view>
+        <text class="arrow muted">扫码核销</text>
+      </view>
+      <view class="menu-item" @click="showTenants = !showTenants">
+        <view class="menu-item__left">
+          <text class="menu-item__icon">♡</text>
+          <text>我的店铺</text>
+        </view>
+        <text class="arrow muted">{{ myTenants.length }} 家</text>
+      </view>
+    </view>
+
+    <view v-if="showTenants" class="card tenant-list">
+      <view v-if="myTenants.length === 0" class="empty-block">
+        <text class="muted">暂无关注的店铺</text>
+        <button class="primary-btn empty-btn" @click="goScan">扫码关注</button>
+      </view>
+      <view
+        v-for="item in myTenants"
+        :key="item.id"
+        class="tenant-row"
+        :class="{ active: item.tenantCode === tenantCode }"
+        @click="switchTenant(item)"
+      >
+        <view class="tenant-row__logo">{{ (item.tenantName || item.tenantCode).slice(0, 1) }}</view>
+        <view class="tenant-row__body">
+          <text class="tenant-name">{{ item.tenantName || item.tenantCode }}</text>
+          <text class="tenant-role muted">{{ item.memberRoleName || item.memberRole || '会员' }}</text>
+        </view>
+        <text v-if="item.tenantCode === tenantCode" class="tag tag-success">当前</text>
+      </view>
+    </view>
+
+    <view class="auth-wrap">
+      <button v-if="!loggedIn" class="primary-btn" @click="goLogin">登录 / 注册</button>
+      <button v-else class="outline-btn" @click="handleLogout">退出登录</button>
+    </view>
+  </view>
+</template>
+
+<script setup lang="ts">
+import { computed, ref } from 'vue'
+import { onShow } from '@dcloudio/uni-app'
+import { fetchMemberCodeCard } from '@/api/modules/member'
+import { fetchMyClerkTenants, fetchMyMarketingTenants, type MarketingTenantBrief } from '@/api/modules/marketing'
+import { useAuthStore } from '@/store/modules/auth'
+import { useTenantStore } from '@/store/modules/tenant'
+import { isLoggedIn, requireLoginNavigate } from '@/utils/auth'
+import { scanStoreQrCode } from '@/utils/tenantScan'
+
+const auth = useAuthStore()
+const tenantStore = useTenantStore()
+const myTenants = ref<MarketingTenantBrief[]>([])
+const clerkTenants = ref<MarketingTenantBrief[]>([])
+const showTenants = ref(false)
+const scanning = ref(false)
+const memberNo = ref('')
+const displayMemberNo = ref('')
+const qrcodeContent = ref('')
+const codeLoading = ref(false)
+const qrKey = ref(0)
+const qrSize = 160
+
+const hasClerkAccess = computed(() => clerkTenants.value.length > 0)
+
+const loggedIn = computed(() => auth.loggedIn)
+const userName = computed(() => auth.userInfo?.nickname || '游客')
+const userPhone = computed(() => auth.userInfo?.phone || '')
+const tenantCode = computed(() => tenantStore.tenantCode)
+const avatarText = computed(() => (userName.value || '游').slice(0, 1))
+
+function goLogin() {
+  requireLoginNavigate('/pages/profile/index')
+}
+
+function handleLogout() {
+  auth.logout()
+  uni.showToast({ title: '已退出', icon: 'none' })
+}
+
+async function goScan() {
+  if (scanning.value) return
+  scanning.value = true
+  try {
+    await scanStoreQrCode({ autoJoin: true })
+    await loadTenants()
+    uni.switchTab({ url: '/pages/home/index' })
+  } catch {
+    /* toast 已在工具内处理 */
+  } finally {
+    scanning.value = false
+  }
+}
+
+function goClerk() {
+  if (!requireLoginNavigate('/package-views/pages/marketing/clerk-home')) return
+  uni.navigateTo({ url: '/package-views/pages/marketing/clerk-home' })
+}
+
+function switchTenant(item: MarketingTenantBrief) {
+  tenantStore.setTenant({
+    tenantCode: item.tenantCode,
+    tenantName: item.tenantName || item.tenantCode
+  })
+  uni.showToast({ title: '已切换店铺', icon: 'none' })
+  uni.switchTab({ url: '/pages/home/index' })
+}
+
+async function loadTenants() {
+  if (!isLoggedIn()) {
+    myTenants.value = []
+    clerkTenants.value = []
+    memberNo.value = ''
+    displayMemberNo.value = ''
+    qrcodeContent.value = ''
+    return
+  }
+  try {
+    const [mine, clerk] = await Promise.all([fetchMyMarketingTenants(), fetchMyClerkTenants()])
+    myTenants.value = mine.data ?? []
+    clerkTenants.value = clerk.data ?? []
+  } catch {
+    myTenants.value = []
+    clerkTenants.value = []
+  }
+}
+
+async function loadMemberCodeCard() {
+  if (!isLoggedIn()) {
+    memberNo.value = ''
+    displayMemberNo.value = ''
+    qrcodeContent.value = ''
+    return
+  }
+  codeLoading.value = true
+  try {
+    const res = await fetchMemberCodeCard()
+    const data = res.data
+    memberNo.value = data?.memberNo || auth.userInfo?.memberNo || auth.userInfo?.loginName || ''
+    displayMemberNo.value = data?.displayNo || memberNo.value
+    qrcodeContent.value = data?.qrcodeContent || ''
+    qrKey.value += 1
+    if (memberNo.value) {
+      auth.setUser({
+        ...(auth.userInfo || {}),
+        memberNo: memberNo.value,
+        loginName: memberNo.value
+      })
+    }
+  } catch {
+    memberNo.value = auth.userInfo?.memberNo || auth.userInfo?.loginName || ''
+    displayMemberNo.value = memberNo.value
+    qrcodeContent.value = ''
+  } finally {
+    codeLoading.value = false
+  }
+}
+
+function copyMemberNo() {
+  const text = memberNo.value
+  if (!text) {
+    uni.showToast({ title: '暂无会员码', icon: 'none' })
+    return
+  }
+  uni.setClipboardData({
+    data: text,
+    success: () => uni.showToast({ title: '已复制会员码', icon: 'none' })
+  })
+}
+
+onShow(() => {
+  auth.initAuth()
+  tenantStore.initTenant()
+  loadTenants()
+  loadMemberCodeCard()
+})
+</script>
+
+<style scoped lang="scss">
+.profile {
+  padding: 24rpx 24rpx 48rpx;
+}
+
+.profile-hero {
+  display: flex;
+  align-items: center;
+  gap: 24rpx;
+  padding: 16rpx 8rpx 32rpx;
+}
+
+.profile-hero__avatar {
+  width: 112rpx;
+  height: 112rpx;
+  border-radius: 50%;
+  background: linear-gradient(145deg, #ff9a3c, #ff5722);
+  color: #fff;
+  font-size: 44rpx;
+  font-weight: 800;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  box-shadow: 0 12rpx 28rpx rgba(255, 87, 34, 0.25);
+}
+
+.profile-hero__name {
+  display: block;
+  font-size: 38rpx;
+  font-weight: 800;
+}
+
+.profile-hero__phone {
+  display: block;
+  margin-top: 8rpx;
+  font-size: 26rpx;
+}
+
+.member-code-card {
+  margin-bottom: 24rpx;
+}
+
+.member-code-card__head {
+  margin-bottom: 20rpx;
+}
+
+.member-code-card__title {
+  display: block;
+  font-size: 30rpx;
+  font-weight: 700;
+}
+
+.member-code-card__hint {
+  display: block;
+  margin-top: 6rpx;
+  font-size: 24rpx;
+}
+
+.member-code-card__body {
+  display: flex;
+  align-items: center;
+  gap: 24rpx;
+}
+
+.member-code-card__qr {
+  width: 160px;
+  height: 160px;
+  flex-shrink: 0;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  background: #fff;
+  border-radius: 16rpx;
+  border: 1px solid #f0e6dc;
+}
+
+.member-code-card__loading {
+  font-size: 24rpx;
+}
+
+.member-code-card__info {
+  flex: 1;
+  min-width: 0;
+}
+
+.member-code-card__no {
+  display: block;
+  font-size: 40rpx;
+  font-weight: 800;
+  letter-spacing: 2rpx;
+  color: #2c1810;
+  word-break: break-all;
+}
+
+.copy-btn {
+  margin-top: 20rpx;
+  padding: 0 28rpx;
+  height: 64rpx;
+  line-height: 64rpx;
+  font-size: 26rpx;
+  color: #ff6b35;
+  background: #fff7ed;
+  border: 1px solid rgba(255, 107, 53, 0.25);
+  border-radius: 999rpx;
+
+  &::after {
+    border: none;
+  }
+
+  &[disabled] {
+    opacity: 0.5;
+  }
+}
+
+.action-card {
+  display: flex;
+  align-items: center;
+  gap: 20rpx;
+  margin-bottom: 24rpx;
+  background: linear-gradient(135deg, #fff7ed, #fff);
+}
+
+.action-card__icon {
+  width: 72rpx;
+  height: 72rpx;
+  border-radius: 20rpx;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  font-size: 36rpx;
+  font-weight: 700;
+}
+
+.action-card__icon.scan {
+  background: rgba(255, 107, 53, 0.12);
+  color: #ff6b35;
+}
+
+.action-card__body {
+  flex: 1;
+}
+
+.action-card__title {
+  display: block;
+  font-size: 30rpx;
+  font-weight: 700;
+}
+
+.action-card__desc {
+  display: block;
+  margin-top: 6rpx;
+  font-size: 24rpx;
+}
+
+.action-card__arrow {
+  font-size: 40rpx;
+  color: #c4b5a5;
+}
+
+.menu-item {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  padding: 24rpx 0;
+  border-bottom: 1px solid #f5ebe0;
+
+  &:last-child {
+    border-bottom: none;
+  }
+}
+
+.menu-item__left {
+  display: flex;
+  align-items: center;
+  gap: 16rpx;
+  font-size: 30rpx;
+}
+
+.menu-item__icon.clerk {
+  background: #e8f8ef;
+  color: #2e9b57;
+}
+
+.menu-item__icon {
+  width: 48rpx;
+  height: 48rpx;
+  border-radius: 14rpx;
+  background: #fff3e6;
+  color: #ff7a1a;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  font-size: 24rpx;
+}
+
+.tenant-list {
+  margin-top: 16rpx;
+}
+
+.tenant-row {
+  display: flex;
+  align-items: center;
+  gap: 16rpx;
+  padding: 20rpx 0;
+  border-bottom: 1px solid #f5ebe0;
+
+  &.active {
+    background: #fff8f0;
+    margin: 0 -28rpx;
+    padding-left: 28rpx;
+    padding-right: 28rpx;
+    border-radius: 16rpx;
+  }
+}
+
+.tenant-row__logo {
+  width: 64rpx;
+  height: 64rpx;
+  border-radius: 18rpx;
+  background: linear-gradient(145deg, #ff9a3c, #ff5722);
+  color: #fff;
+  font-size: 28rpx;
+  font-weight: 700;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+
+.tenant-row__body {
+  flex: 1;
+}
+
+.tenant-name {
+  display: block;
+  font-size: 30rpx;
+  font-weight: 600;
+}
+
+.tenant-role {
+  display: block;
+  margin-top: 6rpx;
+  font-size: 24rpx;
+}
+
+.empty-btn {
+  margin-top: 24rpx;
+}
+
+.auth-wrap {
+  margin-top: 40rpx;
+}
+</style>

TEMPAT SAMPAH
src/static/tabbar/coupon-active.png


TEMPAT SAMPAH
src/static/tabbar/coupon.png


TEMPAT SAMPAH
src/static/tabbar/home-active.png


TEMPAT SAMPAH
src/static/tabbar/home.png


TEMPAT SAMPAH
src/static/tabbar/profile-active.png


TEMPAT SAMPAH
src/static/tabbar/profile.png


TEMPAT SAMPAH
src/static/tabbar/scan-active.png


TEMPAT SAMPAH
src/static/tabbar/scan.png


+ 3 - 0
src/store/index.ts

@@ -0,0 +1,3 @@
+import { createPinia } from 'pinia'
+
+export const pinia = createPinia()

+ 34 - 0
src/store/modules/auth.ts

@@ -0,0 +1,34 @@
+import { defineStore } from 'pinia'
+import { clearAuthState, getAccessToken, getUserInfo, setAccessToken, setSsoToken, setUserInfo, type StoredUserInfo } from '@/utils/tokenStorage'
+
+export const useAuthStore = defineStore('auth', {
+  state: () => ({
+    token: '',
+    userInfo: null as StoredUserInfo | null
+  }),
+  getters: {
+    loggedIn: state => !!state.token
+  },
+  actions: {
+    initAuth() {
+      this.token = getAccessToken()
+      this.userInfo = getUserInfo()
+    },
+    setToken(token: string) {
+      this.token = token
+      setAccessToken(token)
+    },
+    setSsoToken(token: string) {
+      setSsoToken(token)
+    },
+    setUser(user: StoredUserInfo) {
+      this.userInfo = user
+      setUserInfo(user)
+    },
+    logout() {
+      this.token = ''
+      this.userInfo = null
+      clearAuthState()
+    }
+  }
+})

+ 33 - 0
src/store/modules/company.ts

@@ -0,0 +1,33 @@
+import { defineStore } from 'pinia'
+import type { FoodCompanyEmployeeCompany } from '@/types/companyMeal'
+
+const CURRENT_COMPANY_ID_KEY = 'meal_current_company_id'
+
+export const useCompanyStore = defineStore('company', {
+  state: () => ({
+    companies: [] as FoodCompanyEmployeeCompany[],
+    currentCompany: null as FoodCompanyEmployeeCompany | null,
+    currentCompanyId: uni.getStorageSync(CURRENT_COMPANY_ID_KEY) || ''
+  }),
+  actions: {
+    setCompanies(companies: FoodCompanyEmployeeCompany[]) {
+      this.companies = companies
+      const preferredCompanyId = this.currentCompanyId || this.currentCompany?.companyId || ''
+      const validCurrentCompany = companies.find(company => company.companyId === preferredCompanyId)
+      this.currentCompany = validCurrentCompany || companies[0] || null
+      this.currentCompanyId = this.currentCompany?.companyId || ''
+      if (this.currentCompanyId) uni.setStorageSync(CURRENT_COMPANY_ID_KEY, this.currentCompanyId)
+      else uni.removeStorageSync(CURRENT_COMPANY_ID_KEY)
+    },
+    setCurrentCompany(company: FoodCompanyEmployeeCompany) {
+      this.currentCompany = company
+      this.currentCompanyId = company.companyId
+      uni.setStorageSync(CURRENT_COMPANY_ID_KEY, this.currentCompanyId)
+    },
+    clearCurrentCompany() {
+      this.currentCompany = null
+      this.currentCompanyId = ''
+      uni.removeStorageSync(CURRENT_COMPANY_ID_KEY)
+    }
+  }
+})

+ 70 - 0
src/store/modules/meal.ts

@@ -0,0 +1,70 @@
+import { defineStore } from 'pinia'
+import type { FoodMealMenu, FoodMealServiceArea } from '@/types/meal'
+
+const CURRENT_SERVICE_AREA_ID_KEY = 'meal_current_service_area_id'
+const LEGACY_CURRENT_RESTAURANT_ID_KEY = 'meal_current_restaurant_id'
+
+export const useMealStore = defineStore('meal', {
+  state: () => ({
+    selectedDate: '',
+    selectedMealType: '',
+    menu: null as FoodMealMenu | null,
+    quantities: {} as Record<string, number>,
+    serviceAreas: [] as FoodMealServiceArea[],
+    currentServiceArea: null as FoodMealServiceArea | null
+  }),
+  getters: {
+    selectedItems: state => Object.entries(state.quantities).filter(([, quantity]) => quantity > 0),
+    currentServiceAreaId: state => state.currentServiceArea?.id || '',
+    restaurants: state => state.serviceAreas,
+    currentRestaurant: state => state.currentServiceArea,
+    currentRestaurantId: state => state.currentServiceArea?.id || ''
+  },
+  actions: {
+    setServiceAreas(serviceAreas: FoodMealServiceArea[]) {
+      this.serviceAreas = serviceAreas
+      const savedId = uni.getStorageSync(CURRENT_SERVICE_AREA_ID_KEY) || uni.getStorageSync(LEGACY_CURRENT_RESTAURANT_ID_KEY)
+      const saved = savedId ? serviceAreas.find(item => item.id === savedId) : null
+      const currentStillExists = this.currentServiceArea ? serviceAreas.find(item => item.id === this.currentServiceArea?.id) : null
+      this.currentServiceArea = saved || currentStillExists || serviceAreas[0] || null
+      if (this.currentServiceArea?.id) uni.setStorageSync(CURRENT_SERVICE_AREA_ID_KEY, this.currentServiceArea.id)
+    },
+    setRestaurants(serviceAreas: FoodMealServiceArea[]) {
+      this.setServiceAreas(serviceAreas)
+    },
+    setCurrentServiceArea(serviceArea: FoodMealServiceArea) {
+      if (this.currentServiceArea?.id !== serviceArea.id) this.clearServiceAreaRelatedState()
+      this.currentServiceArea = serviceArea
+      uni.setStorageSync(CURRENT_SERVICE_AREA_ID_KEY, serviceArea.id)
+    },
+    setCurrentRestaurant(serviceArea: FoodMealServiceArea) {
+      this.setCurrentServiceArea(serviceArea)
+    },
+    setDate(date: string) {
+      this.selectedDate = date
+    },
+    setMealType(mealType: string) {
+      this.selectedMealType = mealType
+    },
+    setMenu(menu: FoodMealMenu | null) {
+      this.menu = menu
+      this.quantities = {}
+    },
+    setQuantity(menuItemId: string, quantity: number) {
+      if (quantity <= 0) delete this.quantities[menuItemId]
+      else this.quantities[menuItemId] = quantity
+    },
+    clearCart() {
+      this.quantities = {}
+    },
+    clearServiceAreaRelatedState() {
+      this.selectedDate = ''
+      this.selectedMealType = ''
+      this.menu = null
+      this.quantities = {}
+    },
+    clearRestaurantRelatedState() {
+      this.clearServiceAreaRelatedState()
+    }
+  }
+})

+ 25 - 0
src/store/modules/tenant.ts

@@ -0,0 +1,25 @@
+import { defineStore } from 'pinia'
+import { clearCurrentTenant, getCurrentTenant, setCurrentTenant, type CurrentTenant } from '@/utils/tenantStorage'
+
+export const useTenantStore = defineStore('tenant', {
+  state: () => ({
+    current: null as CurrentTenant | null
+  }),
+  getters: {
+    tenantCode: state => state.current?.tenantCode || '',
+    tenantName: state => state.current?.tenantName || ''
+  },
+  actions: {
+    initTenant() {
+      this.current = getCurrentTenant()
+    },
+    setTenant(tenant: CurrentTenant) {
+      this.current = tenant
+      setCurrentTenant(tenant)
+    },
+    clearTenant() {
+      this.current = null
+      clearCurrentTenant()
+    }
+  }
+})

+ 111 - 0
src/styles/common.scss

@@ -0,0 +1,111 @@
+page {
+  min-height: 100%;
+  background: #fff9f3;
+  color: #2c1810;
+  font-size: 28rpx;
+}
+
+.safe-page {
+  min-height: 100vh;
+  padding: 24rpx;
+  box-sizing: border-box;
+}
+
+.page-gradient {
+  min-height: 100vh;
+  background: linear-gradient(180deg, #ffe8cc 0%, #fff9f3 38%, #fff9f3 100%);
+}
+
+.card {
+  background: #fff;
+  border-radius: 28rpx;
+  padding: 28rpx;
+  box-shadow: 0 12rpx 40rpx rgba(255, 107, 53, 0.1);
+}
+
+.card-soft {
+  background: rgba(255, 255, 255, 0.92);
+  border-radius: 28rpx;
+  padding: 28rpx;
+  box-shadow: 0 8rpx 32rpx rgba(44, 24, 16, 0.06);
+  backdrop-filter: blur(8px);
+}
+
+.primary-btn {
+  height: 88rpx;
+  border-radius: 999rpx;
+  background: linear-gradient(135deg, #ff9a3c, #ff6b35);
+  color: #fff;
+  font-weight: 600;
+  font-size: 30rpx;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  border: none;
+  box-shadow: 0 12rpx 28rpx rgba(255, 107, 53, 0.28);
+
+  &::after {
+    border: none;
+  }
+}
+
+.outline-btn {
+  height: 88rpx;
+  line-height: 88rpx;
+  border-radius: 999rpx;
+  background: #fff;
+  color: #ff6b35;
+  font-weight: 600;
+  font-size: 30rpx;
+  border: 2rpx solid rgba(255, 107, 53, 0.35);
+
+  &::after {
+    border: none;
+  }
+}
+
+.tag {
+  display: inline-flex;
+  align-items: center;
+  padding: 6rpx 18rpx;
+  border-radius: 999rpx;
+  font-size: 22rpx;
+  font-weight: 500;
+}
+
+.tag-success {
+  background: #e8f8ef;
+  color: #1f9d55;
+}
+
+.tag-warn {
+  background: #fff3e6;
+  color: #ff7a1a;
+}
+
+.muted {
+  color: #8c7b6a;
+}
+
+.section-title {
+  font-size: 34rpx;
+  font-weight: 700;
+  color: #2c1810;
+}
+
+.section-sub {
+  margin-top: 8rpx;
+  font-size: 24rpx;
+  color: #8c7b6a;
+}
+
+.empty-block {
+  padding: 64rpx 32rpx;
+  text-align: center;
+}
+
+.empty-icon {
+  font-size: 72rpx;
+  line-height: 1;
+  margin-bottom: 16rpx;
+}

+ 10 - 0
src/styles/variables.scss

@@ -0,0 +1,10 @@
+$mk-primary: #ff7a1a;
+$mk-primary-dark: #ff5722;
+$mk-primary-light: #ffb347;
+$mk-bg: #fff9f3;
+$mk-bg-gradient: linear-gradient(145deg, #ff9a3c 0%, #ff6b35 55%, #ff5722 100%);
+$mk-text: #2c1810;
+$mk-text-muted: #8c7b6a;
+$mk-card-shadow: 0 12rpx 40rpx rgba(255, 107, 53, 0.12);
+$mk-radius-lg: 28rpx;
+$mk-radius-md: 20rpx;

+ 26 - 0
src/types/address.ts

@@ -0,0 +1,26 @@
+export type MemberAddress = {
+  id: string
+  name: string
+  phone: string
+  province: string
+  provinceCode?: string
+  city: string
+  cityCode?: string
+  district: string
+  districtCode?: string
+  detail: string
+  isDefault?: boolean
+}
+
+export type MemberAddressSaveParams = {
+  receiverName: string
+  receiverMobile: string
+  province: string
+  provinceCode?: string
+  city: string
+  cityCode?: string
+  district: string
+  districtCode?: string
+  detailAddress: string
+  isDefault?: number
+}

+ 12 - 0
src/types/common.ts

@@ -0,0 +1,12 @@
+export type ApiResponse<T = unknown> = {
+  code: number
+  msg: string
+  data: T
+}
+
+export type PageResp<T> = {
+  records: T[]
+  total: number
+  pageNo: number
+  pageSize: number
+}

+ 170 - 0
src/types/companyMeal.ts

@@ -0,0 +1,170 @@
+import type { PageResp } from './common'
+import type { FoodMealMenuItem, FoodMealRestaurant, FoodMealServiceArea } from './meal'
+
+export type FoodCompanyEmployeeCompany = {
+  companyId: string
+  companyCode?: string
+  companyName: string
+  employeeId: string
+  employeeNo?: string
+  employeeName?: string
+  mobile?: string
+  memberId?: string
+  accountId?: string
+  availableBalance?: number
+  frozenBalance?: number
+}
+
+export type FoodCompanySearch = {
+  id?: string
+  companyId: string
+  companyCode?: string
+  companyName: string
+  contactName?: string
+  contactPhone?: string
+  status?: number
+}
+
+export type FoodCompanyJoinApplyStatus = 'pending' | 'approved' | 'rejected'
+
+export type FoodCompanyJoinApply = {
+  id: string
+  createDate?: string
+  companyId: string
+  companyCode?: string
+  companyName: string
+  memberId?: string
+  memberNo?: string
+  employeeId?: string
+  employeeNo?: string
+  employeeName: string
+  mobile: string
+  applyReason?: string
+  applyTime?: string
+  status: FoodCompanyJoinApplyStatus
+  auditUserId?: string
+  auditUserName?: string
+  auditTime?: string
+  auditRemark?: string
+}
+
+export type FoodCompanyJoinApplyCreateParams = {
+  companyId: string
+  employeeName: string
+  mobile: string
+  employeeNo?: string
+  applyReason?: string
+  memberNo?: string
+}
+
+export type FoodCompanySubsidyRuleSummary = {
+  id: string
+  ruleName: string
+  subsidyMode: string
+  subsidyAmount?: number
+  mealType?: string
+}
+
+export type FoodCompanyMealBenefit = {
+  companyId: string
+  companyName: string
+  employeeId: string
+  employeeName: string
+  accountAvailableBalance?: number
+  accountFrozenBalance?: number
+  rules?: FoodCompanySubsidyRuleSummary[]
+}
+
+export type FoodCompanyMealTrialItem = FoodMealMenuItem & {
+  specId?: string
+  specName?: string
+  specDescription?: string
+  quantity: number
+  totalAmount: number
+  discountAmount: number
+  companyPayAmount: number
+  employeePayAmount: number
+}
+
+export type FoodCompanyMealTrial = {
+  companyId: string
+  companyName: string
+  employeeId: string
+  employeeName: string
+  originalAmount: number
+  discountAmount: number
+  payableAmount: number
+  companyPayAmount: number
+  employeePayAmount: number
+  accountAvailableBalance?: number
+  items: FoodCompanyMealTrialItem[]
+}
+
+export type FoodCompanyMealOrderItem = {
+  id: string
+  menuItemId: string
+  specId?: string
+  specName?: string
+  specDescription?: string
+  itemName: string
+  itemImage?: string
+  salePrice: number
+  quantity: number
+  totalAmount: number
+  discountAmount: number
+  companyPayAmount: number
+  employeePayAmount: number
+}
+
+export type FoodCompanyMealOrder = {
+  id: string
+  orderNo: string
+  companyId: string
+  companyName?: string
+  employeeId?: string
+  employeeName?: string
+  serviceAreaId?: string
+  serviceAreaName?: string
+  serviceArea?: FoodMealServiceArea
+  pickupLocation?: string
+  restaurantId?: string
+  restaurantName?: string
+  restaurant?: FoodMealRestaurant
+  menuId: string
+  mealDate: string
+  mealType: string
+  totalAmount: number
+  discountAmount: number
+  companyPayAmount: number
+  employeePayAmount: number
+  companyNetPayAmount: number
+  employeeNetPayAmount: number
+  orderStatus: string
+  payStatus: string
+  pickupCode?: string
+  payTime?: string
+  createDate?: string
+  cancelTime?: string
+  refundAmount?: number
+  refundTime?: string
+  payOrderId?: string
+  payOrderNo?: string
+  deliveryType?: string
+  addressId?: string
+  receiverName?: string
+  receiverMobile?: string
+  province?: string
+  provinceCode?: string
+  city?: string
+  cityCode?: string
+  district?: string
+  districtCode?: string
+  detailAddress?: string
+  fullAddress?: string
+  longitude?: number
+  latitude?: number
+  remark?: string
+  items?: FoodCompanyMealOrderItem[]
+}
+
+export type FoodCompanyMealOrderPage = PageResp<FoodCompanyMealOrder>

+ 4 - 0
src/types/index.ts

@@ -0,0 +1,4 @@
+export * from './common'
+export * from './meal'
+export * from './companyMeal'
+export * from './pay'

+ 184 - 0
src/types/meal.ts

@@ -0,0 +1,184 @@
+import type { PageResp } from './common'
+
+export type FoodMealType = { value: string; label: string }
+
+export type FoodMealServiceArea = {
+  id: string
+  name: string
+  icon?: string
+  locationLabel?: string
+  address?: string
+  floorLabel?: string
+  phone?: string
+  openHours?: string
+  openStatus?: string
+  openStatusText?: string
+  pickupLocation?: string
+  restaurantId?: string
+  restaurantName?: string
+}
+
+export type FoodMealRestaurant = FoodMealServiceArea
+
+export type FoodMealMenuItemSpec = {
+  id?: string
+  name: string
+  description?: string
+  salePrice?: number
+  stockQuantity?: number | null
+  soldQuantity?: number | null
+  remainingQuantity?: number | null
+  soldOut?: boolean
+  limitQuantityPerUser?: number | null
+  sortNo?: number | null
+}
+
+export type FoodMealMenuItem = {
+  id: string
+  menuId: string
+  itemName: string
+  itemImage?: string
+  salePrice: number
+  stockQuantity?: number | null
+  soldQuantity?: number | null
+  remainingQuantity?: number | null
+  soldOut?: boolean
+  tags?: string[]
+  images?: string[]
+  descriptionHtml?: string
+  specs?: FoodMealMenuItemSpec[]
+  limitQuantityPerUser?: number | null
+}
+
+export type FoodMealMenu = {
+  id: string
+  serviceAreaId?: string
+  serviceAreaName?: string
+  restaurantId?: string
+  restaurantName?: string
+  menuDate: string
+  mealType: string
+  orderable?: boolean
+  notOrderableReason?: string
+  deadlineTime?: string
+  serverTime?: string
+  deadlineRemainSeconds?: number | null
+  pickupType?: 'pickup' | 'delivery'
+  pickupDate?: string
+  pickupLocation?: string
+  serviceArea?: FoodMealServiceArea
+  restaurant?: FoodMealRestaurant
+  items: FoodMealMenuItem[]
+}
+
+export type FoodMealMenuItemDetail = FoodMealMenuItem & {
+  serviceAreaId?: string
+  serviceAreaName?: string
+  serviceArea?: FoodMealServiceArea
+  restaurantId?: string
+  restaurantName?: string
+  restaurant?: FoodMealRestaurant
+  menuDate?: string
+  mealType?: string
+  orderable?: boolean
+  notOrderableReason?: string
+  deadlineTime?: string
+  deadlineRemainSeconds?: number | null
+  pickupType?: 'pickup' | 'delivery'
+  pickupDate?: string
+  pickupLocation?: string
+}
+
+export type FoodMealTrialItem = {
+  menuItemId: string
+  specId?: string
+  specName?: string
+  specDescription?: string
+  itemName: string
+  salePrice: number
+  quantity: number
+  totalAmount: number
+  stockQuantity?: number | null
+  soldQuantity?: number | null
+  remainingQuantity?: number | null
+  limitQuantityPerUser?: number | null
+}
+
+export type FoodMealTrial = {
+  menuId: string
+  mealDate: string
+  mealType: string
+  totalAmount: number
+  items: FoodMealTrialItem[]
+}
+
+export type FoodMealOrderItem = {
+  id: string
+  menuItemId: string
+  specId?: string
+  specName?: string
+  specDescription?: string
+  itemName: string
+  itemImage?: string
+  salePrice: number
+  quantity: number
+  totalAmount: number
+}
+
+export type FoodMealOrder = {
+  id: string
+  orderNo: string
+  serviceAreaId?: string
+  serviceAreaName?: string
+  serviceArea?: FoodMealServiceArea
+  pickupLocation?: string
+  restaurantId?: string
+  restaurantName?: string
+  restaurant?: FoodMealRestaurant
+  menuId: string
+  mealDate: string
+  mealType: string
+  totalAmount: number
+  userPayAmount: number
+  orderStatus: string
+  payStatus: string
+  pickupCode?: string
+  payTime?: string
+  createDate?: string
+  cancelTime?: string
+  cancelReason?: string
+  refundAmount?: number
+  refundApplyTime?: string
+  refundReason?: string
+  refundTime?: string
+  verifyTime?: string
+  deliveryType?: string
+  addressId?: string
+  receiverName?: string
+  receiverMobile?: string
+  province?: string
+  provinceCode?: string
+  city?: string
+  cityCode?: string
+  district?: string
+  districtCode?: string
+  detailAddress?: string
+  fullAddress?: string
+  longitude?: number
+  latitude?: number
+  remark?: string
+  items: FoodMealOrderItem[]
+}
+
+export type FoodMealOrderPage = PageResp<FoodMealOrder>
+
+export type FoodMealPayPrepare = Record<string, unknown> & {
+  orderId: string
+  payOrderId?: string
+  outTradeNo?: string
+  timeStamp?: string
+  nonceStr?: string
+  packageValue?: string
+  signType?: string
+  paySign?: string
+}

+ 72 - 0
src/types/order.ts

@@ -0,0 +1,72 @@
+export type OrderBizType = 'foodMeal' | 'companyMeal'
+
+export type OrderStatus =
+  | 'pending_pay'
+  | 'pending_ship'
+  | 'pending_receive'
+  | 'completed'
+  | 'cancelled'
+  | 'refunding'
+  | 'refunded'
+  | string
+
+export type OrderMerchant = {
+  id?: string
+  merchantId?: string
+  serviceAreaId?: string
+  serviceAreaName?: string
+  serviceArea?: {
+    id?: string
+    name?: string
+    pickupLocation?: string
+  }
+  pickupLocation?: string
+  name?: string
+  merchantName?: string
+  title?: string
+  logo?: string
+  image?: string
+  goods?: OrderGoods[]
+  products?: OrderGoods[]
+  subtotal?: number | string
+}
+
+export type OrderGoods = {
+  id?: string | number
+  spuId?: string
+  title?: string
+  name?: string
+  image?: string
+  price?: number | string
+  quantity?: number
+  specText?: string
+}
+
+export type OrderInfo = {
+  id: string
+  unifiedOrderId?: string
+  orderNo?: string
+  bizType: OrderBizType
+  status: OrderStatus
+  statusText?: string
+  serviceAreaId?: string
+  serviceAreaName?: string
+  serviceArea?: {
+    id?: string
+    name?: string
+    pickupLocation?: string
+  }
+  pickupLocation?: string
+  restaurantName?: string
+  restaurant?: {
+    id?: string
+    name?: string
+    pickupLocation?: string
+  }
+  title?: string
+  totalAmount?: number | string
+  payAmount?: number | string
+  createTime?: string
+  createDate?: string
+  merchants?: OrderMerchant[] | OrderMerchant
+}

+ 7 - 0
src/types/pay.ts

@@ -0,0 +1,7 @@
+export type WechatPayParams = {
+  timeStamp?: string
+  nonceStr?: string
+  packageValue?: string
+  signType?: string
+  paySign?: string
+}

+ 10 - 0
src/uni.scss

@@ -0,0 +1,10 @@
+/**
+ * uni-app 全局 SCSS 变量入口;uview-plus 主题变量须在此引入(勿把 index.scss 放进来)。
+ */
+@import 'uview-plus/theme.scss';
+
+/* 会员营销主色 */
+$u-primary: #ff6b35;
+$u-primary-dark: #e85a24;
+$u-primary-disabled: rgba(255, 107, 53, 0.35);
+$u-primary-light: rgba(255, 107, 53, 0.12);

+ 52 - 0
src/utils/auth.ts

@@ -0,0 +1,52 @@
+import { getAccessToken } from './tokenStorage'
+import { useAuthStore } from '@/store/modules/auth'
+import { ROUTE_LOGIN_INDEX } from '@/constants/routes'
+
+const TAB_BAR_PAGES = ['/pages/home/index', '/pages/scan/index', '/pages/coupon/index', '/pages/profile/index']
+
+const DEFAULT_LOGIN_PROMPT = {
+  title: '需要登录',
+  content: '该功能需登录后使用,是否前往登录?',
+  confirmText: '去登录',
+  cancelText: '稍后再说'
+}
+
+export function getToken() {
+  return getAccessToken()
+}
+
+export function isLoggedIn() {
+  const auth = useAuthStore()
+  if (!auth.token) auth.initAuth()
+  return auth.loggedIn
+}
+
+export function isTabBarPage(url: string) {
+  const path = url.split('?')[0]
+  return TAB_BAR_PAGES.includes(path)
+}
+
+function goLogin(redirect?: string) {
+  const target = `${ROUTE_LOGIN_INDEX}${redirect ? `?redirect=${encodeURIComponent(redirect)}` : ''}`
+  uni.navigateTo({
+    url: target,
+    fail: () => uni.reLaunch({ url: target })
+  })
+}
+
+export function requireLogin() {
+  if (isLoggedIn()) return true
+  uni.showModal({
+    ...DEFAULT_LOGIN_PROMPT,
+    success: res => {
+      if (res.confirm) goLogin()
+    }
+  })
+  return false
+}
+
+export function requireLoginNavigate(redirect?: string) {
+  if (isLoggedIn()) return true
+  goLogin(redirect)
+  return false
+}

+ 168 - 0
src/utils/device.ts

@@ -0,0 +1,168 @@
+/**
+ * 设备信息工具
+ */
+
+const DEVICE_ID_KEY = 'marketing_device_id'
+
+/**
+ * 生成设备ID
+ */
+function generateDeviceId(): string {
+  return `device_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`
+}
+
+/**
+ * 获取设备ID
+ */
+export function getDeviceId(): string {
+  let deviceId = uni.getStorageSync(DEVICE_ID_KEY) || ''
+  if (!deviceId) {
+    deviceId = generateDeviceId()
+    uni.setStorageSync(DEVICE_ID_KEY, deviceId)
+  }
+  return deviceId
+}
+
+/**
+ * 获取平台类型
+ */
+export function getPlatform(): 'android' | 'ios' | 'h5' | 'mp-weixin' | 'mp-alipay' {
+  // #ifdef APP-PLUS
+  // @ts-ignore
+  const platform = plus.os.name.toLowerCase()
+  return platform === 'ios' ? 'ios' : 'android'
+  // #endif
+
+  // #ifdef H5
+  return 'h5'
+  // #endif
+
+  // #ifdef MP-WEIXIN
+  return 'mp-weixin'
+  // #endif
+
+  // #ifdef MP-ALIPAY
+  return 'mp-alipay'
+  // #endif
+
+  return 'h5'
+}
+
+/**
+ * 获取APP类型
+ */
+export function getAppType(): string {
+  const platform = getPlatform()
+  return platform === 'android' || platform === 'ios' ? 'app' : platform
+}
+
+/**
+ * 获取运行时小程序 appid
+ */
+export function getRuntimeMiniAppId(): string {
+  // #ifdef MP-WEIXIN
+  try {
+    const accountInfo = uni.getAccountInfoSync()
+    return accountInfo?.miniProgram?.appId || ''
+  } catch {
+    return ''
+  }
+  // #endif
+  return ''
+}
+
+/**
+ * 与《移动端接口规范》对齐的请求头:X-Platform、X-Version(上传/普通请求统一带上,避免网关或统计侧拦截)。
+ */
+export function getMobileClientHeaders(): Record<string, string> {
+  const platform = getPlatform()
+  let xPlatform = 'H5'
+  if (platform === 'mp-weixin' || platform === 'mp-alipay') {
+    xPlatform = 'MINI'
+  } else if (platform === 'android' || platform === 'ios') {
+    xPlatform = 'APP'
+  }
+  const { version } = getRuntimeClientVersion()
+  const headers: Record<string, string> = {
+    'X-Platform': xPlatform,
+    'X-Version': version || '1.0.0'
+  }
+  const miniAppId = getRuntimeMiniAppId()
+  if (miniAppId) {
+    headers.APPID = miniAppId
+  }
+  return headers
+}
+
+/**
+ * 获取系统信息
+ */
+export function getSystemInfo(): UniApp.GetSystemInfoResult {
+  return uni.getSystemInfoSync()
+}
+
+/**
+ * 获取应用版本
+ */
+export function getAppVersion(): string {
+  // #ifdef APP-PLUS
+  // @ts-ignore
+  return plus.runtime.version
+  // #endif
+
+  // #ifndef APP-PLUS
+  return ''
+  // #endif
+}
+
+/**
+ * 小程序 / App 运行时版本号与整型构建号(非 H5 静态写死;与 manifest 发布配置、微信审核版本一致)。
+ */
+export function getRuntimeClientVersion(): { version: string; versionCode: number } {
+  let version = ''
+  let versionCode = 0
+
+  // #ifdef MP-WEIXIN
+  try {
+    const ac = uni.getAccountInfoSync()
+    const mp = ac?.miniProgram as { version?: string; versionCode?: number | string } | undefined
+    if (mp?.version) version = String(mp.version).trim()
+    const raw = mp?.versionCode
+    if (raw !== undefined && raw !== null && raw !== '') {
+      const n = typeof raw === 'number' ? raw : parseInt(String(raw), 10)
+      if (!Number.isNaN(n)) versionCode = n
+    }
+  } catch {
+    /* ignore */
+  }
+  // #endif
+
+  // #ifdef APP-PLUS
+  try {
+    // @ts-ignore
+    const v = plus.runtime.version
+    if (v) version = String(v).trim()
+    // @ts-ignore
+    const c = plus.runtime.versionCode
+    if (typeof c === 'number' && !Number.isNaN(c)) versionCode = c
+  } catch {
+    /* ignore */
+  }
+  // #endif
+
+  return { version, versionCode }
+}
+
+/**
+ * 获取网络类型
+ */
+export function getNetworkType(): Promise<string> {
+  return new Promise((resolve, reject) => {
+    uni.getNetworkType({
+      success: (res) => {
+        resolve(res.networkType)
+      },
+      fail: reject
+    })
+  })
+}

+ 34 - 0
src/utils/mealDisplay.ts

@@ -0,0 +1,34 @@
+const mealTypeMap: Record<string, string> = {
+  BREAKFAST: '早餐',
+  LUNCH: '午餐',
+  DINNER: '晚餐',
+  SNACK: '加餐'
+}
+
+const orderStatusMap: Record<string, string> = {
+  pending_pay: '待支付',
+  paid: '已支付',
+  cancelled: '已取消',
+  refunding: '退款中',
+  refunded: '已退款',
+  picked: '已取餐'
+}
+
+const payStatusMap: Record<string, string> = {
+  unpaid: '未支付',
+  paid: '已支付',
+  refunded: '已退款'
+}
+
+export function mealTypeLabel(value?: string) {
+  if (!value) return '-'
+  return mealTypeMap[value.toUpperCase()] || value
+}
+
+export function orderStatusLabel(value?: string) {
+  return value ? orderStatusMap[value] || value : '-'
+}
+
+export function payStatusLabel(value?: string) {
+  return value ? payStatusMap[value] || value : '-'
+}

+ 8 - 0
src/utils/money.ts

@@ -0,0 +1,8 @@
+export function toNumber(value: unknown) {
+  const n = Number(value ?? 0)
+  return Number.isFinite(n) ? n : 0
+}
+
+export function formatMoney(value: unknown) {
+  return toNumber(value).toFixed(2)
+}

+ 54 - 0
src/utils/needLoginError.ts

@@ -0,0 +1,54 @@
+import { ROUTE_LOGIN_INDEX } from '@/constants/routes'
+
+export const RELOGIN_MODAL_CONTENT = '登录已失效,请重新登录'
+
+export class NeedLoginError extends Error {
+  readonly needLogin = true
+
+  constructor(message?: string) {
+    super(message || RELOGIN_MODAL_CONTENT)
+    this.name = 'NeedLoginError'
+  }
+}
+
+export function isNeedLoginError(error: unknown): boolean {
+  return Boolean(
+    error &&
+      typeof error === 'object' &&
+      (error as NeedLoginError).needLogin === true
+  )
+}
+
+export function shouldSuppressAuthErrorToast(errorOrMessage: unknown): boolean {
+  if (isNeedLoginError(errorOrMessage)) return true
+  const msg =
+    typeof errorOrMessage === 'string'
+      ? errorOrMessage
+      : errorOrMessage instanceof Error
+        ? errorOrMessage.message
+        : ''
+  if (!msg) return false
+  return /未能读取到有效Token|请重新登录|登录已失效|登录超时|Token/i.test(msg)
+}
+
+let lastTokenExpirePromptAt = 0
+
+export function promptReLoginModal(): void {
+  const now = Date.now()
+  if (now - lastTokenExpirePromptAt < 3000) return
+  lastTokenExpirePromptAt = now
+  uni.showModal({
+    title: '提示',
+    content: RELOGIN_MODAL_CONTENT,
+    confirmText: '登录',
+    cancelText: '关闭',
+    success: res => {
+      if (res.confirm) {
+        uni.navigateTo({
+          url: ROUTE_LOGIN_INDEX,
+          fail: () => uni.reLaunch({ url: ROUTE_LOGIN_INDEX })
+        })
+      }
+    }
+  })
+}

+ 15 - 0
src/utils/orderCancelActions.ts

@@ -0,0 +1,15 @@
+import { cancelCompanyMealOrder } from '@/api/modules/companyMeal'
+import { cancelMealOrder } from '@/api/modules/meal'
+import type { OrderInfo } from '@/types/order'
+
+export async function cancelMealUnifiedOrder(order: OrderInfo, cancelReason = '用户取消') {
+  if (order.bizType === 'foodMeal') {
+    await cancelMealOrder({ orderId: order.id, cancelReason })
+    return
+  }
+  if (order.bizType === 'companyMeal') {
+    await cancelCompanyMealOrder({ orderId: order.id, cancelReason })
+    return
+  }
+  throw new Error('暂不支持该订单取消')
+}

+ 28 - 0
src/utils/pay.ts

@@ -0,0 +1,28 @@
+import type { WechatPayParams } from '@/types/pay'
+
+function normalizePayError(error: UniApp.GeneralCallbackResult) {
+  const errMsg = error.errMsg || ''
+  if (errMsg.includes('cancel')) return new Error('支付已取消,可在订单详情中继续支付')
+  return new Error('支付失败,可在订单详情中继续处理')
+}
+
+export function requestWechatPay(params: WechatPayParams) {
+  return new Promise<void>((resolve, reject) => {
+    // #ifdef MP-WEIXIN
+    uni.requestPayment({
+      provider: 'wxpay',
+      orderInfo: {},
+      timeStamp: params.timeStamp || '',
+      nonceStr: params.nonceStr || '',
+      package: params.packageValue || '',
+      signType: params.signType || 'RSA',
+      paySign: params.paySign || '',
+      success: () => resolve(),
+      fail: error => reject(normalizePayError(error))
+    } as UniApp.RequestPaymentOptions)
+    // #endif
+    // #ifndef MP-WEIXIN
+    reject(new Error('当前环境不支持微信支付,请在微信小程序中完成支付'))
+    // #endif
+  })
+}

+ 108 - 0
src/utils/request.ts

@@ -0,0 +1,108 @@
+import { apiConfig } from '@/config/api'
+import type { ApiResponse } from '@/types/common'
+import { clearAuthState, getAccessToken, getSsoToken } from './tokenStorage'
+import { getAppType, getDeviceId, getMobileClientHeaders } from './device'
+import { NeedLoginError, promptReLoginModal, shouldSuppressAuthErrorToast } from './needLoginError'
+
+export interface RequestConfig {
+  url: string
+  method?: 'GET' | 'POST' | 'PUT' | 'DELETE'
+  data?: unknown
+  params?: Record<string, unknown>
+  header?: Record<string, string>
+  showLoading?: boolean
+  loadingText?: string
+  showErrorToast?: boolean
+  skipAuth?: boolean
+}
+
+function buildConfig(config: RequestConfig): RequestConfig {
+  const token = config.skipAuth ? '' : getAccessToken()
+  const header: Record<string, string> = {
+    ...config.header,
+    ...getMobileClientHeaders(),
+    'X-Device-Id': getDeviceId(),
+    'X-App-Type': getAppType(),
+    'Content-Type': 'application/json'
+  }
+  if (token) {
+    const satoken = getSsoToken()
+    header.access_token = token
+    header.Authorization = `Bearer ${token}`
+    if (satoken) header.satoken = satoken
+  }
+  return { ...config, header }
+}
+
+function sanitizeRequestData(data: unknown) {
+  if (!data || typeof data !== 'object' || Array.isArray(data)) return data
+  return Object.fromEntries(
+    Object.entries(data as Record<string, unknown>).filter(([, value]) => value !== undefined && value !== null && value !== '')
+  )
+}
+
+function handleResponse<T>(response: UniApp.RequestSuccessCallbackResult, skipAuth?: boolean): ApiResponse<T> {
+  const res = response.data as ApiResponse<T>
+  if (res.code === 201) {
+    if (!skipAuth) {
+      clearAuthState()
+      promptReLoginModal()
+    }
+    throw new NeedLoginError(res.msg)
+  }
+  if (res.code !== 200) {
+    throw new Error(res.msg || '请求失败')
+  }
+  return res
+}
+
+export function request<T = unknown>(config: RequestConfig): Promise<ApiResponse<T>> {
+  return new Promise((resolve, reject) => {
+    const finalConfig = buildConfig(config)
+    if (finalConfig.showLoading) {
+      uni.showLoading({ title: finalConfig.loadingText || '加载中...', mask: true })
+    }
+    const method = finalConfig.method || 'GET'
+    const data = method === 'GET' ? sanitizeRequestData(finalConfig.params ?? finalConfig.data) : finalConfig.data
+    uni.request({
+      url: finalConfig.url.startsWith('http') ? finalConfig.url : `${apiConfig.baseURL}${finalConfig.url}`,
+      method,
+      data: data as string | AnyObject | ArrayBuffer | undefined,
+      header: finalConfig.header,
+      timeout: apiConfig.timeout,
+      success: res => {
+        if (finalConfig.showLoading) uni.hideLoading()
+        try {
+          resolve(handleResponse<T>(res, finalConfig.skipAuth))
+        } catch (error) {
+          if (finalConfig.showErrorToast !== false && !shouldSuppressAuthErrorToast(error)) {
+            uni.showToast({ title: (error as Error).message || '请求失败', icon: 'none' })
+          }
+          reject(error)
+        }
+      },
+      fail: error => {
+        if (finalConfig.showLoading) uni.hideLoading()
+        const msg = error.errMsg || '网络请求失败'
+        if (finalConfig.showErrorToast !== false) uni.showToast({ title: msg, icon: 'none' })
+        reject(new Error(msg))
+      }
+    })
+  })
+}
+
+export function get<T = unknown>(url: string, params?: Record<string, unknown>, config?: Partial<RequestConfig>) {
+  return request<T>({ url, method: 'GET', params, ...config })
+}
+
+export function post<T = unknown>(url: string, data?: unknown, config?: Partial<RequestConfig>) {
+  return request<T>({ url, method: 'POST', data, ...config })
+}
+
+export function put<T = unknown>(url: string, data?: unknown, config?: Partial<RequestConfig>) {
+  return request<T>({ url, method: 'PUT', data, ...config })
+}
+
+export function del<T = unknown>(url: string, config?: Partial<RequestConfig>) {
+  return request<T>({ url, method: 'DELETE', ...config })
+}

+ 20 - 0
src/utils/scanScene.ts

@@ -0,0 +1,20 @@
+/**
+ * 从扫码结果中解析微信小程序 scene 参数。
+ */
+export function parseSceneFromScanResult(raw: string): string {
+  const text = String(raw || '').trim()
+  if (!text) return ''
+
+  if (text.includes('scene=')) {
+    const matched = text.match(/[?&]scene=([^&]+)/i)
+    if (matched?.[1]) {
+      try {
+        return decodeURIComponent(matched[1]).trim()
+      } catch {
+        return matched[1].trim()
+      }
+    }
+  }
+
+  return text
+}

+ 83 - 0
src/utils/tenantLanding.ts

@@ -0,0 +1,83 @@
+import { fetchMarketingLanding, joinMarketingTenant, type MarketingTenantLanding } from '@/api/modules/marketing'
+import { PENDING_SCENE_KEY } from '@/constants/storage'
+import { useTenantStore } from '@/store/modules/tenant'
+import { isLoggedIn } from '@/utils/auth'
+import { parseSceneFromScanResult } from '@/utils/scanScene'
+
+export type ApplyLandingOptions = {
+  autoJoin?: boolean
+  showToast?: boolean
+}
+
+export type ApplyLandingResult = {
+  landing: MarketingTenantLanding
+  joined: boolean
+}
+
+export function applyLandingData(data: MarketingTenantLanding) {
+  if (!data?.tenantCode) return null
+  const tenantStore = useTenantStore()
+  tenantStore.setTenant({
+    tenantCode: data.tenantCode,
+    tenantName: data.tenantName || data.welcomeTitle || '',
+    channelCode: data.channelCode || ''
+  })
+  uni.removeStorageSync(PENDING_SCENE_KEY)
+  return tenantStore.current
+}
+
+export async function resolveLandingByScene(scene: string, options: ApplyLandingOptions = {}): Promise<ApplyLandingResult> {
+  const text = String(scene || '').trim()
+  if (!text) throw new Error('无效的店铺码')
+
+  try {
+    const res = await fetchMarketingLanding(text)
+    const landing = res.data
+    if (!landing?.tenantCode) throw new Error('未识别到店铺信息')
+    if (landing.marketingEnabled === 0) throw new Error('该店铺暂未开通营销服务')
+
+    applyLandingData(landing)
+
+    let joined = false
+    const shouldAutoJoin = options.autoJoin !== false && (landing.autoJoinOnQr === 1 || options.autoJoin === true)
+    if (shouldAutoJoin && isLoggedIn()) {
+      try {
+        await joinMarketingTenant({
+          tenantCode: landing.tenantCode,
+          channelCode: landing.channelCode
+        })
+        joined = true
+      } catch {
+        joined = false
+      }
+    }
+
+    if (options.showToast !== false) {
+      uni.showToast({
+        title: joined ? '已关注店铺' : `已识别:${landing.tenantName || landing.tenantCode}`,
+        icon: 'none'
+      })
+    }
+
+    return { landing, joined }
+  } catch (error) {
+    uni.setStorageSync(PENDING_SCENE_KEY, text)
+    throw error
+  }
+}
+
+export async function resolveLandingFromScanRaw(raw: string, options?: ApplyLandingOptions) {
+  const scene = parseSceneFromScanResult(raw)
+  if (!scene) throw new Error('无法识别店铺二维码')
+  return resolveLandingByScene(scene, options)
+}
+
+export async function handlePendingSceneOnLaunch() {
+  const pending = uni.getStorageSync(PENDING_SCENE_KEY)
+  if (!pending) return
+  try {
+    await resolveLandingByScene(String(pending), { showToast: false, autoJoin: true })
+  } catch {
+    /* 保留 pending,待用户手动扫码或登录后重试 */
+  }
+}

+ 28 - 0
src/utils/tenantScan.ts

@@ -0,0 +1,28 @@
+import { resolveLandingFromScanRaw, type ApplyLandingOptions } from '@/utils/tenantLanding'
+
+export function scanStoreQrCode(options?: ApplyLandingOptions) {
+  return new Promise((resolve, reject) => {
+    uni.scanCode({
+      onlyFromCamera: false,
+      scanType: ['qrCode', 'wxCode'],
+      success: async res => {
+        uni.showLoading({ title: '识别店铺中...', mask: true })
+        try {
+          const scanRaw = res.path || res.result || ''
+          const result = await resolveLandingFromScanRaw(scanRaw, options)
+          uni.hideLoading()
+          resolve(result)
+        } catch (error) {
+          uni.hideLoading()
+          const msg = (error as Error).message || '识别失败'
+          uni.showToast({ title: msg, icon: 'none' })
+          reject(error)
+        }
+      },
+      fail: () => {
+        uni.showToast({ title: '已取消扫码', icon: 'none' })
+        reject(new Error('cancel'))
+      }
+    })
+  })
+}

+ 29 - 0
src/utils/tenantStorage.ts

@@ -0,0 +1,29 @@
+import { CHANNEL_CODE_KEY, TENANT_CODE_KEY, TENANT_NAME_KEY } from '@/constants/storage'
+
+export type CurrentTenant = {
+  tenantCode: string
+  tenantName?: string
+  channelCode?: string
+}
+
+export function getCurrentTenant(): CurrentTenant | null {
+  const tenantCode = uni.getStorageSync(TENANT_CODE_KEY) || ''
+  if (!tenantCode) return null
+  return {
+    tenantCode,
+    tenantName: uni.getStorageSync(TENANT_NAME_KEY) || '',
+    channelCode: uni.getStorageSync(CHANNEL_CODE_KEY) || ''
+  }
+}
+
+export function setCurrentTenant(tenant: CurrentTenant) {
+  uni.setStorageSync(TENANT_CODE_KEY, tenant.tenantCode)
+  uni.setStorageSync(TENANT_NAME_KEY, tenant.tenantName || '')
+  uni.setStorageSync(CHANNEL_CODE_KEY, tenant.channelCode || '')
+}
+
+export function clearCurrentTenant() {
+  uni.removeStorageSync(TENANT_CODE_KEY)
+  uni.removeStorageSync(TENANT_NAME_KEY)
+  uni.removeStorageSync(CHANNEL_CODE_KEY)
+}

+ 54 - 0
src/utils/tokenStorage.ts

@@ -0,0 +1,54 @@
+const ACCESS_TOKEN_KEY = 'marketing_access_token'
+const SSO_TOKEN_KEY = 'marketing_sso_token'
+const USER_INFO_KEY = 'marketing_user_info'
+
+export type StoredUserInfo = {
+  id?: string
+  nickname?: string
+  loginName?: string
+  memberNo?: string
+  avatar?: string
+  phone?: string
+}
+
+export function getAccessToken() {
+  return uni.getStorageSync(ACCESS_TOKEN_KEY) || ''
+}
+
+export function setAccessToken(token: string) {
+  uni.setStorageSync(ACCESS_TOKEN_KEY, token)
+}
+
+export function removeAccessToken() {
+  uni.removeStorageSync(ACCESS_TOKEN_KEY)
+}
+
+export function getSsoToken() {
+  return uni.getStorageSync(SSO_TOKEN_KEY) || ''
+}
+
+export function setSsoToken(token: string) {
+  uni.setStorageSync(SSO_TOKEN_KEY, token)
+}
+
+export function removeSsoToken() {
+  uni.removeStorageSync(SSO_TOKEN_KEY)
+}
+
+export function getUserInfo(): StoredUserInfo | null {
+  return uni.getStorageSync(USER_INFO_KEY) || null
+}
+
+export function setUserInfo(user: StoredUserInfo) {
+  uni.setStorageSync(USER_INFO_KEY, user)
+}
+
+export function removeUserInfo() {
+  uni.removeStorageSync(USER_INFO_KEY)
+}
+
+export function clearAuthState() {
+  removeAccessToken()
+  removeSsoToken()
+  removeUserInfo()
+}

+ 18 - 0
src/utils/unifiedOrderWechatPay.ts

@@ -0,0 +1,18 @@
+import { prepareCompanyMealPay } from '@/api/modules/companyMeal'
+import { prepareMealPay } from '@/api/modules/meal'
+import type { OrderInfo } from '@/types/order'
+import { requestWechatPay } from './pay'
+
+export async function invokeMealUnifiedOrderWechatPay(order: OrderInfo) {
+  if (order.bizType === 'foodMeal') {
+    const pay = await prepareMealPay({ orderId: order.id })
+    await requestWechatPay(pay.data)
+    return
+  }
+  if (order.bizType === 'companyMeal') {
+    const pay = await prepareCompanyMealPay({ orderId: order.id })
+    await requestWechatPay(pay.data)
+    return
+  }
+  throw new Error('暂不支持该订单支付')
+}

+ 45 - 0
tsconfig.json

@@ -0,0 +1,45 @@
+{
+    "extends": "@vue/tsconfig/tsconfig.json",
+    "compilerOptions": {
+        "verbatimModuleSyntax": true,
+        "target": "ES2020",
+        "module": "ESNext",
+        "lib": [
+            "ES2020",
+            "DOM",
+            "DOM.Iterable"
+        ],
+        "moduleResolution": "node",
+        "strict": true,
+        "jsx": "preserve",
+        "importHelpers": true,
+        "esModuleInterop": true,
+        "allowSyntheticDefaultImports": true,
+        "sourceMap": true,
+        "baseUrl": ".",
+        "types": [
+            "@dcloudio/types",
+            "node"
+        ],
+        "paths": {
+            "@/*": [
+                "./src/*"
+            ]
+        },
+        "skipLibCheck": true,
+        "resolveJsonModule": true,
+        "isolatedModules": true,
+        "noEmit": true
+    },
+    "include": [
+        "src/**/*.ts",
+        "src/**/*.d.ts",
+        "src/**/*.tsx",
+        "src/**/*.vue"
+    ],
+    "exclude": [
+        "node_modules",
+        "dist",
+        "**/*.js"
+    ]
+}

+ 32 - 0
vite.config.ts

@@ -0,0 +1,32 @@
+import { defineConfig } from 'vite'
+import uni from '@dcloudio/vite-plugin-uni'
+import { resolve } from 'node:path'
+
+export default defineConfig({
+  plugins: [uni()],
+  transpileDependencies: ['uview-plus'],
+  css: {
+    preprocessorOptions: {
+      scss: {
+        silenceDeprecations: ['legacy-js-api', 'color-functions', 'import']
+      }
+    }
+  },
+  resolve: {
+    dedupe: ['vue', 'pinia'],
+    alias: {
+      '@': resolve(__dirname, 'src')
+    }
+  },
+  server: {
+    port: 9011,
+    host: '0.0.0.0',
+    proxy: {
+      '/mobile': {
+        target: process.env.VITE_DEV_API_TARGET || 'http://127.0.0.1:8086',
+        changeOrigin: true,
+        secure: false
+      }
+    }
+  }
+})