commit 896d5f63965c1106a31e584c79d768228c9be635 Author: liangzai <2440983361@qq.com> Date: Mon Jan 12 14:00:01 2026 +0800 f diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8ee54e8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,30 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +.DS_Store +dist +dist-ssr +coverage +*.local + +/cypress/videos/ +/cypress/screenshots/ + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +*.tsbuildinfo diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..a7cea0b --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["Vue.volar"] +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..7f7cd20 --- /dev/null +++ b/README.md @@ -0,0 +1,29 @@ +# qnc-website + +This template should help get you started developing with Vue 3 in Vite. + +## Recommended IDE Setup + +[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur). + +## Customize configuration + +See [Vite Configuration Reference](https://vite.dev/config/). + +## Project Setup + +```sh +pnpm install +``` + +### Compile and Hot-Reload for Development + +```sh +pnpm dev +``` + +### Compile and Minify for Production + +```sh +pnpm build +``` diff --git a/SEO_OPTIMIZATION.md b/SEO_OPTIMIZATION.md new file mode 100644 index 0000000..d6a9b10 --- /dev/null +++ b/SEO_OPTIMIZATION.md @@ -0,0 +1,355 @@ +# 智能查网站SEO优化指南 + +## 概述 + +本文档详细记录了智能查网站的SEO优化措施,包括技术实现、最佳实践和维护指南。 + +## 已实施的SEO优化措施 + +### 1. HTML头部优化 + +#### Meta标签优化 +- ✅ 完整的title标签:智能查 - 大数据风险报告 | 婚姻状况查询 | 个人信用 | 企业风险 | 免费代理 +- ✅ 优化的meta description:智能查,大数据风险报告查询与代理管理平台,提供婚姻状况查询、个人信用评估、人事背调、信贷风控、企业风险监测等服务,支持免费开通代理,助力个人与企业全方位风险管理。 +- ✅ 相关关键词:大数据风险报告, 婚姻状况查询, 个人信用, 企业风险, 信贷风控, 人事背调, 大数据分析, 免费代理, 风险管控 +- ✅ robots meta标签,允许搜索引擎索引 +- ✅ viewport meta标签,支持移动端优化 + +#### Open Graph标签 +- ✅ og:title - 社交媒体分享标题 +- ✅ og:description - 社交媒体分享描述 +- ✅ og:url - 页面URL +- ✅ og:type - 内容类型 +- ✅ og:site_name - 网站名称 +- ✅ og:locale - 语言设置 +- ⚠️ og:image - 暂未配置(需要添加分享图片) + +#### Twitter Cards +- ✅ twitter:card - 卡片类型(使用summary而非large_image) +- ✅ twitter:title - Twitter分享标题 +- ✅ twitter:description - Twitter分享描述 +- ✅ twitter:url - 页面URL +- ⚠️ twitter:image - 暂未配置(需要添加分享图片) + +#### 其他重要标签 +- ✅ theme-color - 主题色 +- ✅ msapplication-TileColor - Windows磁贴颜色 +- ✅ application-name - 应用名称 +- ✅ apple-mobile-web-app-title - iOS应用名称 +- ✅ apple-mobile-web-app-capable - iOS应用能力 +- ✅ apple-mobile-web-app-status-bar-style - iOS状态栏样式 + +### 2. 结构化数据 + +#### Schema.org标记 +- ✅ WebSite - 网站基本信息 +- ✅ Organization - 组织信息 +- ✅ WebPage - 页面信息(动态生成) + +#### 结构化数据内容 +```json +{ + "@context": "https://schema.org", + "@type": "WebSite", + "name": "智能查", + "url": "https://www.zhinengcha.cn/", + "description": "大数据风险报告查询与代理管理平台,提供婚姻状况查询、个人信用评估、人事背调、信贷风控、企业风险监测等服务", + "potentialAction": { + "@type": "SearchAction", + "target": "https://www.zhinengcha.cn/search?q={search_term_string}", + "query-input": "required name=search_term_string" + } +} +``` + +### 3. 技术SEO + +#### 网站地图 +- ✅ sitemap.xml - 包含所有重要页面 +- ✅ 合理的更新频率设置 +- ✅ 优先级配置 + +#### Robots.txt +- ✅ 允许搜索引擎访问公开页面 +- ✅ 禁止访问私有页面和API接口 +- ✅ 设置爬取延迟 +- ✅ 指向sitemap.xml + +#### PWA支持 +- ✅ site.webmanifest - 渐进式Web应用清单 +- ✅ 应用图标配置(完整版本,包含所有尺寸) +- ✅ 主题色和显示模式设置 + +### 4. 性能优化 + +#### Vite构建优化 +- ✅ 代码分割策略 +- ✅ 资源压缩和优化 +- ✅ 缓存策略 +- ✅ 依赖预构建 + +#### 资源优化 +- ✅ DNS预解析 +- ✅ 关键资源预连接 +- ✅ 图片优化(已添加所有必要图标) +- ✅ CSS/JS压缩 + +### 5. 动态SEO管理 + +#### SEO组合式函数 +- ✅ useSEO.js - 统一的SEO管理 +- ✅ 动态更新meta标签 +- ✅ 路由级别的SEO配置 +- ✅ 结构化数据动态生成 + +#### 路由SEO +- ✅ 每个路由的SEO配置 +- ✅ 自动标题生成 +- ✅ 描述和关键词管理 + +## 核心SEO信息 + +### 主要关键词 +- 大数据风险报告 +- 婚姻状况查询 +- 个人信用 +- 企业风险 +- 信贷风控 +- 人事背调 +- 大数据分析 +- 免费代理 +- 风险管控 + +### 品牌定位 +智能查 - 大数据风险报告查询与代理管理平台 + +### 核心服务 +- 婚姻状况查询 +- 个人信用评估 +- 人事背调 +- 信贷风控 +- 企业风险监测 +- 免费代理服务 + +## 图片资源说明 + +### 当前状态 +已成功添加以下图片资源: + +1. **favicon.ico** - 网站图标(占位符文件) +2. **favicon-16x16.png** - 小尺寸图标(16x16像素) +3. **favicon-32x32.png** - 标准尺寸图标(32x32像素) +4. **apple-touch-icon.png** - iOS应用图标(180x180像素) +5. **android-chrome-192x192.png** - Android图标(192x192像素) +6. **android-chrome-512x512.png** - Android大尺寸图标(512x512像素) + +### 已配置的图片资源 + +``` +public/ +├── favicon.ico # 网站图标(占位符) +├── favicon-16x16.png # 小尺寸图标 +├── favicon-32x32.png # 标准尺寸图标 +├── apple-touch-icon.png # iOS应用图标 +├── android-chrome-192x192.png # Android图标 +└── android-chrome-512x512.png # Android大尺寸图标 +``` + +### 仍需添加的图片资源 + +#### 可选图片 +``` +public/ +├── og-image.jpg # Open Graph分享图片(1200x630px) +└── logo.png # 网站Logo(建议尺寸:200x200px) +``` + +### 图片优化建议 + +1. **Open Graph图片** + - 尺寸:1200x630像素 + - 格式:JPG或PNG + - 文件大小:小于1MB + - 内容:包含品牌名称"智能查"和主要服务"大数据风险报告" + +2. **Logo图片** + - 尺寸:200x200像素 + - 格式:PNG(支持透明背景) + - 文件大小:小于100KB + +3. **现有图标**(已完成) + - 所有尺寸的图标已配置完成 + - 支持PWA和移动端应用 + - 兼容各种设备和平台 + +## 文件结构 + +``` +├── index.html # 主HTML文件(已优化) +├── public/ +│ ├── favicon.ico # 网站图标(占位符) +│ ├── favicon-16x16.png # 小尺寸图标 +│ ├── favicon-32x32.png # 标准尺寸图标 +│ ├── apple-touch-icon.png # iOS应用图标 +│ ├── android-chrome-192x192.png # Android图标 +│ ├── android-chrome-512x512.png # Android大尺寸图标 +│ ├── sitemap.xml # 网站地图 +│ ├── robots.txt # 爬虫规则 +│ ├── site.webmanifest # PWA清单(完整版) +│ └── image/ # 现有图片资源 +├── src/ +│ ├── composables/ +│ │ └── useSEO.js # SEO管理函数 +│ ├── router/ +│ │ └── index.js # 路由配置(已集成SEO) +│ ├── views/ +│ │ └── NotFound.vue # 404页面(已优化) +│ └── main.js # 主入口(已集成SEO) +├── vite.config.js # Vite配置(已优化) +└── SEO_OPTIMIZATION.md # 本文档 +``` + +## 使用方法 + +### 1. 页面级SEO配置 + +在Vue组件中使用SEO功能: + +```vue + +``` + +### 2. 路由级SEO配置 + +在路由配置中添加meta信息: + +```javascript +{ + path: '/example', + name: 'example', + component: () => import('@/views/Example.vue'), + meta: { + title: '示例页面', + description: '页面描述', + keywords: '关键词1, 关键词2' + } +} +``` + +### 3. 自动SEO更新 + +系统会自动根据路由变化更新SEO信息,无需手动干预。 + +## 维护指南 + +### 1. 定期更新 + +- 每月更新sitemap.xml中的lastmod日期 +- 检查并更新关键词 +- 监控搜索引擎收录情况 + +### 2. 性能监控 + +- 使用Google PageSpeed Insights检查性能 +- 监控Core Web Vitals指标 +- 定期检查移动端优化效果 + +### 3. 内容优化 + +- 定期更新页面内容 +- 添加新的关键词 +- 优化页面标题和描述 + +### 4. 技术维护 + +- 保持依赖包更新 +- 检查结构化数据有效性 +- 验证meta标签正确性 + +### 5. 图片资源维护 + +- ✅ 基础图标资源已完成 +- 可选择性添加Open Graph和Logo图片 +- 确保图片内容与品牌一致 + +## 最佳实践 + +### 1. 标题优化 +- 控制在60字符以内 +- 包含主要关键词 +- 避免重复标题 + +### 2. 描述优化 +- 控制在160字符以内 +- 包含关键词 +- 具有吸引力 + +### 3. 关键词策略 +- 主要关键词放在前面 +- 避免关键词堆砌 +- 使用长尾关键词 + +### 4. 内容优化 +- 使用语义化HTML标签 +- 添加alt属性到图片 +- 优化内部链接结构 + +### 5. 图片优化 +- ✅ 使用适当的图片格式 +- ✅ 压缩图片文件大小 +- ✅ 添加alt属性描述 +- ✅ 配置多种尺寸的图标 + +## 监控工具 + +### 1. 搜索引擎工具 +- Google Search Console +- 百度站长工具 +- 必应网站管理员工具 + +### 2. 分析工具 +- Google Analytics +- 百度统计 +- 热力图分析 + +### 3. SEO工具 +- Screaming Frog +- SEMrush +- Ahrefs + +## 注意事项 + +1. **内容质量**:确保所有SEO优化的内容都是高质量、有价值的 +2. **用户体验**:SEO优化不应影响用户体验 +3. **合规性**:遵守搜索引擎的SEO指南 +4. **持续优化**:SEO是一个持续的过程,需要定期检查和优化 +5. **图片资源**:基础图标资源已完成,可选择性添加分享图片 + +## 下一步计划 + +1. **添加分享图片**:创建Open Graph和Twitter Cards图片(可选) +2. **完善Logo**:添加网站Logo图片(可选) +3. **监控SEO效果**:建立SEO效果监控体系 +4. **性能优化**:持续监控和优化网站性能 + +## 联系信息 + +如有SEO相关问题,请联系技术团队或查看帮助中心。 + +--- + +*最后更新:2024年1月* diff --git a/index.html b/index.html new file mode 100644 index 0000000..36e47a5 --- /dev/null +++ b/index.html @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + 智能查 - 大数据风险报告 | 婚姻状况查询 | 个人信用 | 企业风险 | 免费代理 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
加载中
+
+
+ + + + diff --git a/jsconfig.json b/jsconfig.json new file mode 100644 index 0000000..5a1f2d2 --- /dev/null +++ b/jsconfig.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "paths": { + "@/*": ["./src/*"] + } + }, + "exclude": ["node_modules", "dist"] +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..019db46 --- /dev/null +++ b/package.json @@ -0,0 +1,41 @@ +{ + "name": "qnc-website", + "version": "0.0.0", + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "@vant/area-data": "^2.0.0", + "@vueuse/core": "^11.3.0", + "axios": "^1.7.7", + "crypto-js": "^4.2.0", + "echarts": "^5.5.1", + "lodash": "^4.17.21", + "nprogress": "^0.2.0", + "pinia": "^2.2.6", + "qrcode": "^1.5.4", + "vant": "^4.9.9", + "vue": "^3.5.12", + "vue-echarts": "^7.0.3", + "vue-router": "^4.4.5" + }, + "devDependencies": { + "@vant/auto-import-resolver": "^1.2.1", + "@vitejs/plugin-vue": "^5.1.4", + "@vitejs/plugin-vue-jsx": "^4.0.1", + "autoprefixer": "^10.4.20", + "postcss": "^8.4.49", + "sass-embedded": "^1.81.0", + "tailwindcss": "^3.4.15", + "terser": "^5.43.1", + "unplugin-auto-import": "^0.18.5", + "unplugin-vue-components": "^0.27.5", + "vite": "^5.4.10", + "vite-plugin-vue-devtools": "^7.5.4" + }, + "packageManager": "pnpm@10.9.0+sha512.0486e394640d3c1fb3c9d43d49cf92879ff74f8516959c235308f5a8f62e2e19528a65cdc2a3058f587cde71eba3d5b56327c8c33a97e4c4051ca48a10ca2d5f" +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..a4e40ee --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,3394 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@vant/area-data': + specifier: ^2.0.0 + version: 2.0.0 + '@vueuse/core': + specifier: ^11.3.0 + version: 11.3.0(vue@3.5.13) + axios: + specifier: ^1.7.7 + version: 1.7.7 + crypto-js: + specifier: ^4.2.0 + version: 4.2.0 + echarts: + specifier: ^5.5.1 + version: 5.5.1 + lodash: + specifier: ^4.17.21 + version: 4.17.21 + nprogress: + specifier: ^0.2.0 + version: 0.2.0 + pinia: + specifier: ^2.2.6 + version: 2.2.6(vue@3.5.13) + qrcode: + specifier: ^1.5.4 + version: 1.5.4 + vant: + specifier: ^4.9.9 + version: 4.9.9(vue@3.5.13) + vue: + specifier: ^3.5.12 + version: 3.5.13 + vue-echarts: + specifier: ^7.0.3 + version: 7.0.3(@vue/runtime-core@3.5.13)(echarts@5.5.1)(vue@3.5.13) + vue-router: + specifier: ^4.4.5 + version: 4.4.5(vue@3.5.13) + devDependencies: + '@vant/auto-import-resolver': + specifier: ^1.2.1 + version: 1.2.1 + '@vitejs/plugin-vue': + specifier: ^5.1.4 + version: 5.2.0(vite@5.4.11(sass-embedded@1.81.0)(terser@5.43.1))(vue@3.5.13) + '@vitejs/plugin-vue-jsx': + specifier: ^4.0.1 + version: 4.1.0(vite@5.4.11(sass-embedded@1.81.0)(terser@5.43.1))(vue@3.5.13) + autoprefixer: + specifier: ^10.4.20 + version: 10.4.20(postcss@8.4.49) + postcss: + specifier: ^8.4.49 + version: 8.4.49 + sass-embedded: + specifier: ^1.81.0 + version: 1.81.0 + tailwindcss: + specifier: ^3.4.15 + version: 3.4.15 + terser: + specifier: ^5.43.1 + version: 5.43.1 + unplugin-auto-import: + specifier: ^0.18.5 + version: 0.18.5(@vueuse/core@11.3.0(vue@3.5.13))(rollup@4.27.3) + unplugin-vue-components: + specifier: ^0.27.5 + version: 0.27.5(@babel/parser@7.26.2)(rollup@4.27.3)(vue@3.5.13) + vite: + specifier: ^5.4.10 + version: 5.4.11(sass-embedded@1.81.0)(terser@5.43.1) + vite-plugin-vue-devtools: + specifier: ^7.5.4 + version: 7.6.4(rollup@4.27.3)(vite@5.4.11(sass-embedded@1.81.0)(terser@5.43.1))(vue@3.5.13) + +packages: + + '@alloc/quick-lru@5.2.0': + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@antfu/utils@0.7.10': + resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==} + + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.26.2': + resolution: {integrity: sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.26.0': + resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.26.2': + resolution: {integrity: sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-annotate-as-pure@7.25.9': + resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.25.9': + resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-create-class-features-plugin@7.25.9': + resolution: {integrity: sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-member-expression-to-functions@7.25.9': + resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.25.9': + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.26.0': + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-optimise-call-expression@7.25.9': + resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-plugin-utils@7.25.9': + resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-replace-supers@7.25.9': + resolution: {integrity: sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': + resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.25.9': + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.26.0': + resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.26.2': + resolution: {integrity: sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-proposal-decorators@7.25.9': + resolution: {integrity: sha512-smkNLL/O1ezy9Nhy4CNosc4Va+1wo5w4gzSZeLe6y6dM4mmHfYOCPolXQPHQxonZCF+ZyebxN9vqOolkYrSn5g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-decorators@7.25.9': + resolution: {integrity: sha512-ryzI0McXUPJnRCvMo4lumIKZUzhYUO/ScI+Mz4YVaTLt04DHNSjEUjKVvbzQjZFLuod/cYEc07mJWhzl6v4DPg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-attributes@7.26.0': + resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-meta@7.10.4': + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-jsx@7.25.9': + resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-typescript@7.25.9': + resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typescript@7.25.9': + resolution: {integrity: sha512-7PbZQZP50tzv2KGGnhh82GSyMB01yKY9scIjf1a+GfZCtInOWqUH5+1EBU4t9fyR5Oykkkc9vFTs4OHrhHXljQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/template@7.25.9': + resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.25.9': + resolution: {integrity: sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.26.0': + resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} + engines: {node: '>=6.9.0'} + + '@bufbuild/protobuf@2.2.2': + resolution: {integrity: sha512-UNtPCbrwrenpmrXuRwn9jYpPoweNXj8X5sMvYgsqYyaH8jQ6LfUJSk3dJLnBK+6sfYPrF4iAIo5sd5HQ+tg75A==} + + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@jridgewell/gen-mapping@0.3.5': + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/source-map@0.3.11': + resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@polka/url@1.0.0-next.28': + resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} + + '@rollup/pluginutils@5.1.3': + resolution: {integrity: sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/rollup-android-arm-eabi@4.27.3': + resolution: {integrity: sha512-EzxVSkIvCFxUd4Mgm4xR9YXrcp976qVaHnqom/Tgm+vU79k4vV4eYTjmRvGfeoW8m9LVcsAy/lGjcgVegKEhLQ==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.27.3': + resolution: {integrity: sha512-LJc5pDf1wjlt9o/Giaw9Ofl+k/vLUaYsE2zeQGH85giX2F+wn/Cg8b3c5CDP3qmVmeO5NzwVUzQQxwZvC2eQKw==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.27.3': + resolution: {integrity: sha512-OuRysZ1Mt7wpWJ+aYKblVbJWtVn3Cy52h8nLuNSzTqSesYw1EuN6wKp5NW/4eSre3mp12gqFRXOKTcN3AI3LqA==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.27.3': + resolution: {integrity: sha512-xW//zjJMlJs2sOrCmXdB4d0uiilZsOdlGQIC/jjmMWT47lkLLoB1nsNhPUcnoqyi5YR6I4h+FjBpILxbEy8JRg==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.27.3': + resolution: {integrity: sha512-58E0tIcwZ+12nK1WiLzHOD8I0d0kdrY/+o7yFVPRHuVGY3twBwzwDdTIBGRxLmyjciMYl1B/U515GJy+yn46qw==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.27.3': + resolution: {integrity: sha512-78fohrpcVwTLxg1ZzBMlwEimoAJmY6B+5TsyAZ3Vok7YabRBUvjYTsRXPTjGEvv/mfgVBepbW28OlMEz4w8wGA==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.27.3': + resolution: {integrity: sha512-h2Ay79YFXyQi+QZKo3ISZDyKaVD7uUvukEHTOft7kh00WF9mxAaxZsNs3o/eukbeKuH35jBvQqrT61fzKfAB/Q==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm-musleabihf@4.27.3': + resolution: {integrity: sha512-Sv2GWmrJfRY57urktVLQ0VKZjNZGogVtASAgosDZ1aUB+ykPxSi3X1nWORL5Jk0sTIIwQiPH7iE3BMi9zGWfkg==} + cpu: [arm] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-arm64-gnu@4.27.3': + resolution: {integrity: sha512-FPoJBLsPW2bDNWjSrwNuTPUt30VnfM8GPGRoLCYKZpPx0xiIEdFip3dH6CqgoT0RnoGXptaNziM0WlKgBc+OWQ==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm64-musl@4.27.3': + resolution: {integrity: sha512-TKxiOvBorYq4sUpA0JT+Fkh+l+G9DScnG5Dqx7wiiqVMiRSkzTclP35pE6eQQYjP4Gc8yEkJGea6rz4qyWhp3g==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-powerpc64le-gnu@4.27.3': + resolution: {integrity: sha512-v2M/mPvVUKVOKITa0oCFksnQQ/TqGrT+yD0184/cWHIu0LoIuYHwox0Pm3ccXEz8cEQDLk6FPKd1CCm+PlsISw==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-riscv64-gnu@4.27.3': + resolution: {integrity: sha512-LdrI4Yocb1a/tFVkzmOE5WyYRgEBOyEhWYJe4gsDWDiwnjYKjNs7PS6SGlTDB7maOHF4kxevsuNBl2iOcj3b4A==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-s390x-gnu@4.27.3': + resolution: {integrity: sha512-d4wVu6SXij/jyiwPvI6C4KxdGzuZOvJ6y9VfrcleHTwo68fl8vZC5ZYHsCVPUi4tndCfMlFniWgwonQ5CUpQcA==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-gnu@4.27.3': + resolution: {integrity: sha512-/6bn6pp1fsCGEY5n3yajmzZQAh+mW4QPItbiWxs69zskBzJuheb3tNynEjL+mKOsUSFK11X4LYF2BwwXnzWleA==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-musl@4.27.3': + resolution: {integrity: sha512-nBXOfJds8OzUT1qUreT/en3eyOXd2EH5b0wr2bVB5999qHdGKkzGzIyKYaKj02lXk6wpN71ltLIaQpu58YFBoQ==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rollup/rollup-win32-arm64-msvc@4.27.3': + resolution: {integrity: sha512-ogfbEVQgIZOz5WPWXF2HVb6En+kWzScuxJo/WdQTqEgeyGkaa2ui5sQav9Zkr7bnNCLK48uxmmK0TySm22eiuw==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.27.3': + resolution: {integrity: sha512-ecE36ZBMLINqiTtSNQ1vzWc5pXLQHlf/oqGp/bSbi7iedcjcNb6QbCBNG73Euyy2C+l/fn8qKWEwxr+0SSfs3w==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.27.3': + resolution: {integrity: sha512-vliZLrDmYKyaUoMzEbMTg2JkerfBjn03KmAw9CykO0Zzkzoyd7o3iZNam/TpyWNjNT+Cz2iO3P9Smv2wgrR+Eg==} + cpu: [x64] + os: [win32] + + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + + '@types/web-bluetooth@0.0.20': + resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} + + '@vant/area-data@2.0.0': + resolution: {integrity: sha512-zgP4AA8z09S9QTNgVCCHo9cHjcybrv22RJDYPjuCkecn4SB98T5EoPQh2TwqbQXmUhbaOGgiZGy3OUaUxnY7qg==} + + '@vant/auto-import-resolver@1.2.1': + resolution: {integrity: sha512-czGWW4UolNITkF3qQSQlpHDHAsI3/GHVKbRMmEEpry7NWdnU4p5a5jBi0VApbaLa5g80Hy10XVs3IB+UozoSUw==} + + '@vant/popperjs@1.3.0': + resolution: {integrity: sha512-hB+czUG+aHtjhaEmCJDuXOep0YTZjdlRR+4MSmIFnkCQIxJaXLQdSsR90XWvAI2yvKUI7TCGqR8pQg2RtvkMHw==} + + '@vant/use@1.6.0': + resolution: {integrity: sha512-PHHxeAASgiOpSmMjceweIrv2AxDZIkWXyaczksMoWvKV2YAYEhoizRuk/xFnKF+emUIi46TsQ+rvlm/t2BBCfA==} + peerDependencies: + vue: ^3.0.0 + + '@vitejs/plugin-vue-jsx@4.1.0': + resolution: {integrity: sha512-KuRejz7KAFvhXDzOudlaS2IyygAwoAEEMtHAdcRSy/8cA5iKH043Qudcz48zsC0M0vvN5iKwIwNMuWbBYn6/Yg==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + vite: ^5.0.0 + vue: ^3.0.0 + + '@vitejs/plugin-vue@5.2.0': + resolution: {integrity: sha512-7n7KdUEtx/7Yl7I/WVAMZ1bEb0eVvXF3ummWTeLcs/9gvo9pJhuLdouSXGjdZ/MKD1acf1I272+X0RMua4/R3g==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + vite: ^5.0.0 + vue: ^3.2.25 + + '@vue/babel-helper-vue-transform-on@1.2.5': + resolution: {integrity: sha512-lOz4t39ZdmU4DJAa2hwPYmKc8EsuGa2U0L9KaZaOJUt0UwQNjNA3AZTq6uEivhOKhhG1Wvy96SvYBoFmCg3uuw==} + + '@vue/babel-plugin-jsx@1.2.5': + resolution: {integrity: sha512-zTrNmOd4939H9KsRIGmmzn3q2zvv1mjxkYZHgqHZgDrXz5B1Q3WyGEjO2f+JrmKghvl1JIRcvo63LgM1kH5zFg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + peerDependenciesMeta: + '@babel/core': + optional: true + + '@vue/babel-plugin-resolve-type@1.2.5': + resolution: {integrity: sha512-U/ibkQrf5sx0XXRnUZD1mo5F7PkpKyTbfXM3a3rC4YnUz6crHEz9Jg09jzzL6QYlXNto/9CePdOg/c87O4Nlfg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@vue/compiler-core@3.5.13': + resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==} + + '@vue/compiler-dom@3.5.13': + resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==} + + '@vue/compiler-sfc@3.5.13': + resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==} + + '@vue/compiler-ssr@3.5.13': + resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==} + + '@vue/devtools-api@6.6.4': + resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} + + '@vue/devtools-core@7.6.4': + resolution: {integrity: sha512-blSwGVYpb7b5TALMjjoBiAl5imuBF7WEOAtaJaBMNikR8SQkm6mkUt4YlIKh9874/qoimwmpDOm+GHBZ4Y5m+g==} + peerDependencies: + vue: ^3.0.0 + + '@vue/devtools-kit@7.6.4': + resolution: {integrity: sha512-Zs86qIXXM9icU0PiGY09PQCle4TI750IPLmAJzW5Kf9n9t5HzSYf6Rz6fyzSwmfMPiR51SUKJh9sXVZu78h2QA==} + + '@vue/devtools-shared@7.6.4': + resolution: {integrity: sha512-nD6CUvBEel+y7zpyorjiUocy0nh77DThZJ0k1GRnJeOmY3ATq2fWijEp7wk37gb023Cb0R396uYh5qMSBQ5WFg==} + + '@vue/reactivity@3.5.13': + resolution: {integrity: sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==} + + '@vue/runtime-core@3.5.13': + resolution: {integrity: sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==} + + '@vue/runtime-dom@3.5.13': + resolution: {integrity: sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==} + + '@vue/server-renderer@3.5.13': + resolution: {integrity: sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==} + peerDependencies: + vue: 3.5.13 + + '@vue/shared@3.5.13': + resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==} + + '@vueuse/core@11.3.0': + resolution: {integrity: sha512-7OC4Rl1f9G8IT6rUfi9JrKiXy4bfmHhZ5x2Ceojy0jnd3mHNEvV4JaRygH362ror6/NZ+Nl+n13LPzGiPN8cKA==} + + '@vueuse/metadata@11.3.0': + resolution: {integrity: sha512-pwDnDspTqtTo2HwfLw4Rp6yywuuBdYnPYDq+mO38ZYKGebCUQC/nVj/PXSiK9HX5otxLz8Fn7ECPbjiRz2CC3g==} + + '@vueuse/shared@11.3.0': + resolution: {integrity: sha512-P8gSSWQeucH5821ek2mn/ciCk+MS/zoRKqdQIM3bHq6p7GXDAJLmnRRKmF5F65sAVJIfzQlwR3aDzwCn10s8hA==} + + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + autoprefixer@10.4.20: + resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + + axios@1.7.7: + resolution: {integrity: sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + birpc@0.2.19: + resolution: {integrity: sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.24.2: + resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + buffer-builder@0.2.0: + resolution: {integrity: sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} + + camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + + camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + + caniuse-lite@1.0.30001680: + resolution: {integrity: sha512-rPQy70G6AGUMnbwS1z6Xg+RkHYPAi18ihs47GH0jcxIG7wArmPgY3XbS2sRdBbxJljp3thdT8BIqv9ccCypiPA==} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + cliui@6.0.0: + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + colorjs.io@0.5.2: + resolution: {integrity: sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + copy-anything@3.0.5: + resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} + engines: {node: '>=12.13'} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + crypto-js@4.2.0: + resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + + default-browser-id@5.0.0: + resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} + engines: {node: '>=18'} + + default-browser@5.2.1: + resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} + engines: {node: '>=18'} + + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + + dijkstrajs@1.0.3: + resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==} + + dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + echarts@5.5.1: + resolution: {integrity: sha512-Fce8upazaAXUVUVsjgV6mBnGuqgO+JNDlcgF79Dksy4+wgGpQB2lmYoO4TSweFg/mZITdpGHomw/cNBJZj1icA==} + + electron-to-chromium@1.5.63: + resolution: {integrity: sha512-ddeXKuY9BHo/mw145axlyWjlJ1UBt4WK3AlvkT7W2AbqfRQoacVoRUCF6wL3uIx/8wT9oLKXzI+rFqHHscByaA==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + error-stack-parser-es@0.1.5: + resolution: {integrity: sha512-xHku1X40RO+fO8yJ8Wh2f2rZWVjqyhb1zgq1yZ8aZRQkv6OOKhKWRUaht3eSCUbAOBaKIgM+ykwFLE+QUxgGeg==} + + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + engines: {node: '>=14'} + + form-data@4.0.1: + resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} + engines: {node: '>= 6'} + + fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + + fs-extra@11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + engines: {node: '>=14.14'} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + + html-tags@3.3.1: + resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} + engines: {node: '>=8'} + + human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + + immutable@5.0.3: + resolution: {integrity: sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-core-module@2.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} + engines: {node: '>= 0.4'} + + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-what@4.1.16: + resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} + engines: {node: '>=12.13'} + + is-wsl@3.1.0: + resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} + engines: {node: '>=16'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jiti@1.21.6: + resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} + hasBin: true + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-tokens@9.0.0: + resolution: {integrity: sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==} + + jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + kolorist@1.8.0: + resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} + + lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + + lilconfig@3.1.2: + resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} + engines: {node: '>=14'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + local-pkg@0.5.1: + resolution: {integrity: sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==} + engines: {node: '>=14'} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + magic-string@0.30.13: + resolution: {integrity: sha512-8rYBO+MsWkgjDSOvLomYnzhdwEG51olQ4zL5KXnNJWV5MNmrb4rTZdrtkhxjnD/QyZUqR/Z/XDsUs/4ej2nx0g==} + + magic-string@0.30.14: + resolution: {integrity: sha512-5c99P1WKTed11ZC0HMJOj6CDIue6F8ySu+bJL+85q1zBEIY8IklrJ1eiKC2NDRh3Ct3FcvmJPyQHb9erXMTJNw==} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + + mlly@1.7.3: + resolution: {integrity: sha512-xUsx5n/mN0uQf4V548PKQ+YShA4/IW0KI1dZhrNrPCLG+xizETbHTkOa1f8/xut9JRPp8kQuMnz0oqwkTiLo/A==} + + mrmime@2.0.0: + resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} + engines: {node: '>=10'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + + nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + + npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + nprogress@0.2.0: + resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + + onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + + open@10.1.0: + resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==} + engines: {node: '>=18'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + + perfect-debounce@1.0.0: + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + pinia@2.2.6: + resolution: {integrity: sha512-vIsR8JkDN5Ga2vAxqOE2cJj4VtsHnzpR1Fz30kClxlh0yCHfec6uoMeM3e/ddqmwFUejK3NlrcQa/shnpyT4hA==} + peerDependencies: + '@vue/composition-api': ^1.4.0 + typescript: '>=4.4.4' + vue: ^2.6.14 || ^3.5.11 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + typescript: + optional: true + + pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + + pkg-types@1.2.1: + resolution: {integrity: sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==} + + pngjs@5.0.0: + resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==} + engines: {node: '>=10.13.0'} + + postcss-import@15.1.0: + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + + postcss-js@4.0.1: + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + + postcss-load-config@4.0.2: + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + + postcss-nested@6.2.0: + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.4.49: + resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} + engines: {node: ^10 || ^12 || >=14} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + qrcode@1.5.4: + resolution: {integrity: sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==} + engines: {node: '>=10.13.0'} + hasBin: true + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-main-filename@2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + + rollup@4.27.3: + resolution: {integrity: sha512-SLsCOnlmGt9VoZ9Ek8yBK8tAdmPHeppkw+Xa7yDlCEhDTvwYei03JlWo1fdc7YTfLZ4tD8riJCUyAgTbszk1fQ==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-applescript@7.0.0: + resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} + engines: {node: '>=18'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + + sass-embedded-android-arm64@1.81.0: + resolution: {integrity: sha512-I36P77/PKAHx6sqOmexO2iEY5kpsmQ1VxcgITZSOxPMQhdB6m4t3bTabfDuWQQmCrqqiNFtLQHeytB65bUqwiw==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [android] + + sass-embedded-android-arm@1.81.0: + resolution: {integrity: sha512-NWEmIuaIEsGFNsIRa+5JpIpPJyZ32H15E85CNZqEIhhwWlk9UNw7vlOCmTH8MtabtnACwC/2NG8VyNa3nxKzUQ==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [android] + + sass-embedded-android-ia32@1.81.0: + resolution: {integrity: sha512-k8V1usXw30w1GVxvrteG1RzgYJzYQ9PfL2aeOqGdroBN7zYTD9VGJXTGcxA4IeeRxmRd7szVW2mKXXS472fh8g==} + engines: {node: '>=14.0.0'} + cpu: [ia32] + os: [android] + + sass-embedded-android-riscv64@1.81.0: + resolution: {integrity: sha512-RXlanyLXEpN/DEehXgLuKPsqT//GYlsGFxKXgRiCc8hIPAueFLQXKJmLWlL3BEtHgmFdbsStIu4aZCcb1hOFlQ==} + engines: {node: '>=14.0.0'} + cpu: [riscv64] + os: [android] + + sass-embedded-android-x64@1.81.0: + resolution: {integrity: sha512-RQG0FxGQ1DERNyUDED8+BDVaLIjI+BNg8lVcyqlLZUrWY6NhzjwYEeiN/DNZmMmHtqDucAPNDcsdVUNQqsBy2A==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [android] + + sass-embedded-darwin-arm64@1.81.0: + resolution: {integrity: sha512-gLKbsfII9Ppua76N41ODFnKGutla9qv0OGAas8gxe0jYBeAQFi/1iKQYdNtQtKi4mA9n5TQTqz+HHCKszZCoyA==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [darwin] + + sass-embedded-darwin-x64@1.81.0: + resolution: {integrity: sha512-7uMOlT9hD2KUJCbTN2XcfghDxt/rc50ujjfSjSHjX1SYj7mGplkINUXvVbbvvaV2wt6t9vkGkCo5qNbeBhfwBg==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [darwin] + + sass-embedded-linux-arm64@1.81.0: + resolution: {integrity: sha512-jy4bvhdUmqbyw1jv1f3Uxl+MF8EU/Y/GDx4w6XPJm4Ds+mwH/TwnyAwsxxoBhWfnBnW8q2ADy039DlS5p+9csQ==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [linux] + + sass-embedded-linux-arm@1.81.0: + resolution: {integrity: sha512-REqR9qM4RchCE3cKqzRy9Q4zigIV82SbSpCi/O4O3oK3pg2I1z7vkb3TiJsivusG/li7aqKZGmYOtAXjruGQDA==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [linux] + + sass-embedded-linux-ia32@1.81.0: + resolution: {integrity: sha512-ga/Jk4q5Bn1aC+iHJteDZuLSKnmBUiS3dEg1fnl/Z7GaHIChceKDJOw0zNaILRXI0qT2E1at9MwzoRaRA5Nn/g==} + engines: {node: '>=14.0.0'} + cpu: [ia32] + os: [linux] + + sass-embedded-linux-musl-arm64@1.81.0: + resolution: {integrity: sha512-hpntWf5kjkoxncA1Vh8vhsUOquZ8AROZKx0rQh7ZjSRs4JrYZASz1cfevPKaEM3wIim/nYa6TJqm0VqWsrERlA==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [linux] + + sass-embedded-linux-musl-arm@1.81.0: + resolution: {integrity: sha512-oWVUvQ4d5Kx1Md75YXZl5z1WBjc+uOhfRRqzkJ3nWc8tjszxJN+y/5EOJavhsNI3/2yoTt6eMXRTqDD9b0tWSQ==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [linux] + + sass-embedded-linux-musl-ia32@1.81.0: + resolution: {integrity: sha512-UEXUYkBuqTSwg5JNWiNlfMZ1Jx6SJkaEdx+fsL3Tk099L8cKSoJWH2EPz4ZJjNbyIMymrSdVfymheTeZ8u24xA==} + engines: {node: '>=14.0.0'} + cpu: [ia32] + os: [linux] + + sass-embedded-linux-musl-riscv64@1.81.0: + resolution: {integrity: sha512-1D7OznytbIhx2XDHWi1nuQ8d/uCVR7FGGzELgaU//T8A9DapVTUgPKvB70AF1k4GzChR9IXU/WvFZs2hDTbaJg==} + engines: {node: '>=14.0.0'} + cpu: [riscv64] + os: [linux] + + sass-embedded-linux-musl-x64@1.81.0: + resolution: {integrity: sha512-ia6VCTeVDQtBSMktXRFza1AZCt8/6aUoujot6Ugf4KmdytQqPJIHxkHaGftm5xwi9WdrMGYS7zgolToPijR11A==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [linux] + + sass-embedded-linux-riscv64@1.81.0: + resolution: {integrity: sha512-KbxSsqu4tT1XbhZfJV/5NfW0VtJIGlD58RjqJqJBi8Rnjrx29/upBsuwoDWtsPV/LhoGwwU1XkSa9Q1ifCz4fQ==} + engines: {node: '>=14.0.0'} + cpu: [riscv64] + os: [linux] + + sass-embedded-linux-x64@1.81.0: + resolution: {integrity: sha512-AMDeVY2T9WAnSFkuQcsOn5c29GRs/TuqnCiblKeXfxCSKym5uKdBl/N7GnTV6OjzoxiJBbkYKdVIaS5By7Gj4g==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [linux] + + sass-embedded-win32-arm64@1.81.0: + resolution: {integrity: sha512-YOmBRYnygwWUmCoH14QbMRHjcvCJufeJBAp0m61tOJXIQh64ziwV4mjdqjS/Rx3zhTT4T+nulDUw4d3kLiMncA==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [win32] + + sass-embedded-win32-ia32@1.81.0: + resolution: {integrity: sha512-HFfr/C+uLJGGTENdnssuNTmXI/xnIasUuEHEKqI+2J0FHCWT5cpz3PGAOHymPyJcZVYGUG/7gIxIx/d7t0LFYw==} + engines: {node: '>=14.0.0'} + cpu: [ia32] + os: [win32] + + sass-embedded-win32-x64@1.81.0: + resolution: {integrity: sha512-wxj52jDcIAwWcXb7ShZ7vQYKcVUkJ+04YM9l46jDY+qwHzliGuorAUyujLyKTE9heGD3gShJ3wPPC1lXzq6v9A==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [win32] + + sass-embedded@1.81.0: + resolution: {integrity: sha512-uZQ2Faxb1oWBHpeSSzjxnhClbMb3QadN0ql0ZFNuqWOLUxwaVhrMlMhPq6TDPbbfDUjihuwrMCuy695Bgna5RA==} + engines: {node: '>=16.0.0'} + hasBin: true + + scule@1.3.0: + resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + sirv@3.0.0: + resolution: {integrity: sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg==} + engines: {node: '>=18'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + speakingurl@14.0.1: + resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} + engines: {node: '>=0.10.0'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + + strip-literal@2.1.0: + resolution: {integrity: sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==} + + sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + superjson@2.2.1: + resolution: {integrity: sha512-8iGv75BYOa0xRJHK5vRLEjE2H/i4lulTjzpUXic3Eg8akftYjkmQDa8JARQ42rlczXyFR3IeRoeFCc7RxHsYZA==} + engines: {node: '>=16'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + svg-tags@1.0.0: + resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==} + + sync-child-process@1.0.2: + resolution: {integrity: sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==} + engines: {node: '>=16.0.0'} + + sync-message-port@1.1.3: + resolution: {integrity: sha512-GTt8rSKje5FilG+wEdfCkOcLL7LWqpMlr2c3LRuKt/YXxcJ52aGSbGBAdI4L3aaqfrBt6y711El53ItyH1NWzg==} + engines: {node: '>=16.0.0'} + + tailwindcss@3.4.15: + resolution: {integrity: sha512-r4MeXnfBmSOuKUWmXe6h2CcyfzJCEk4F0pptO5jlnYSIViUkVmsawj80N5h2lO3gwcmSb4n3PuN+e+GC1Guylw==} + engines: {node: '>=14.0.0'} + hasBin: true + + terser@5.43.1: + resolution: {integrity: sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==} + engines: {node: '>=10'} + hasBin: true + + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} + + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + + tslib@2.3.0: + resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + ufo@1.5.4: + resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} + + unimport@3.13.2: + resolution: {integrity: sha512-VKAepeIb6BWLtBl4tmyHY1/7rJgz3ynmZrWf8cU1a+v5Uv/k1gyyAEeGBnYcrwy8bxG5sflxEx4a9VQUqOVHUA==} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + unplugin-auto-import@0.18.5: + resolution: {integrity: sha512-ZUnayBRlOwNuN9hrM1PymSZK5qDEI8heDD0E3U8Tq4FS6bUxd9VMfJ8tCwWTG5ir6g1yThe/4SVHbFUZQwplOw==} + engines: {node: '>=14'} + peerDependencies: + '@nuxt/kit': ^3.2.2 + '@vueuse/core': '*' + peerDependenciesMeta: + '@nuxt/kit': + optional: true + '@vueuse/core': + optional: true + + unplugin-vue-components@0.27.5: + resolution: {integrity: sha512-m9j4goBeNwXyNN8oZHHxvIIYiG8FQ9UfmKWeNllpDvhU7btKNNELGPt+o3mckQKuPwrE7e0PvCsx+IWuDSD9Vg==} + engines: {node: '>=14'} + peerDependencies: + '@babel/parser': ^7.15.8 + '@nuxt/kit': ^3.2.2 + vue: 2 || 3 + peerDependenciesMeta: + '@babel/parser': + optional: true + '@nuxt/kit': + optional: true + + unplugin@1.16.0: + resolution: {integrity: sha512-5liCNPuJW8dqh3+DM6uNM2EI3MLLpCKp/KY+9pB5M2S2SR2qvvDHhKgBOaTWEbZTAws3CXfB0rKTIolWKL05VQ==} + engines: {node: '>=14.0.0'} + + update-browserslist-db@1.1.1: + resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + vant@4.9.9: + resolution: {integrity: sha512-sEw3ljwCza5dazpJqh04b38vCjNr2Id8vb7LOkYQQR/94iERDIm5jcQinhmwlRnwoGCa+JkNwm0jrCafzZJiwA==} + peerDependencies: + vue: ^3.0.0 + + varint@6.0.0: + resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==} + + vite-hot-client@0.2.3: + resolution: {integrity: sha512-rOGAV7rUlUHX89fP2p2v0A2WWvV3QMX2UYq0fRqsWSvFvev4atHWqjwGoKaZT1VTKyLGk533ecu3eyd0o59CAg==} + peerDependencies: + vite: ^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 + + vite-plugin-inspect@0.8.8: + resolution: {integrity: sha512-aZlBuXsWUPJFmMK92GIv6lH7LrwG2POu4KJ+aEdcqnu92OAf+rhBnfMDQvxIJPEB7hE2t5EyY/PMgf5aDLT8EA==} + engines: {node: '>=14'} + peerDependencies: + '@nuxt/kit': '*' + vite: ^3.1.0 || ^4.0.0 || ^5.0.0-0 + peerDependenciesMeta: + '@nuxt/kit': + optional: true + + vite-plugin-vue-devtools@7.6.4: + resolution: {integrity: sha512-jxSsLyuETfmZ1OSrmnDp28BG6rmURrP7lkeyHW2gBFDyo+4dUcqVeQNMhbV7uKZn80mDdv06Mysw/5AdGxDvJQ==} + engines: {node: '>=v14.21.3'} + peerDependencies: + vite: ^3.1.0 || ^4.0.0-0 || ^5.0.0-0 + + vite-plugin-vue-inspector@5.2.0: + resolution: {integrity: sha512-wWxyb9XAtaIvV/Lr7cqB1HIzmHZFVUJsTNm3yAxkS87dgh/Ky4qr2wDEWNxF23fdhVa3jQ8MZREpr4XyiuaRqA==} + peerDependencies: + vite: ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 + + vite@5.4.11: + resolution: {integrity: sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + + vue-demi@0.13.11: + resolution: {integrity: sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==} + engines: {node: '>=12'} + hasBin: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + + vue-demi@0.14.10: + resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==} + engines: {node: '>=12'} + hasBin: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + + vue-echarts@7.0.3: + resolution: {integrity: sha512-/jSxNwOsw5+dYAUcwSfkLwKPuzTQ0Cepz1LxCOpj2QcHrrmUa/Ql0eQqMmc1rTPQVrh2JQ29n2dhq75ZcHvRDw==} + peerDependencies: + '@vue/runtime-core': ^3.0.0 + echarts: ^5.5.1 + vue: ^2.7.0 || ^3.1.1 + peerDependenciesMeta: + '@vue/runtime-core': + optional: true + + vue-router@4.4.5: + resolution: {integrity: sha512-4fKZygS8cH1yCyuabAXGUAsyi1b2/o/OKgu/RUb+znIYOxPRxdkytJEx+0wGcpBE1pX6vUgh5jwWOKRGvuA/7Q==} + peerDependencies: + vue: ^3.2.0 + + vue@3.5.13: + resolution: {integrity: sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + webpack-virtual-modules@0.6.2: + resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} + + which-module@2.0.1: + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + y18n@4.0.3: + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yaml@2.6.1: + resolution: {integrity: sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==} + engines: {node: '>= 14'} + hasBin: true + + yargs-parser@18.1.3: + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} + + yargs@15.4.1: + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} + + zrender@5.6.0: + resolution: {integrity: sha512-uzgraf4njmmHAbEUxMJ8Oxg+P3fT04O+9p7gY+wJRVxo8Ge+KmYv0WJev945EH4wFuc4OY2NLXz46FZrWS9xJg==} + +snapshots: + + '@alloc/quick-lru@5.2.0': {} + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + + '@antfu/utils@0.7.10': {} + + '@babel/code-frame@7.26.2': + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.26.2': {} + + '@babel/core@7.26.0': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.2 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helpers': 7.26.0 + '@babel/parser': 7.26.2 + '@babel/template': 7.25.9 + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 + convert-source-map: 2.0.0 + debug: 4.3.7 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.26.2': + dependencies: + '@babel/parser': 7.26.2 + '@babel/types': 7.26.0 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.0.2 + + '@babel/helper-annotate-as-pure@7.25.9': + dependencies: + '@babel/types': 7.26.0 + + '@babel/helper-compilation-targets@7.25.9': + dependencies: + '@babel/compat-data': 7.26.2 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.2 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0) + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/traverse': 7.25.9 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-member-expression-to-functions@7.25.9': + dependencies: + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-imports@7.25.9': + dependencies: + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/helper-optimise-call-expression@7.25.9': + dependencies: + '@babel/types': 7.26.0 + + '@babel/helper-plugin-utils@7.25.9': {} + + '@babel/helper-replace-supers@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': + dependencies: + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.25.9': {} + + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/helper-validator-option@7.25.9': {} + + '@babel/helpers@7.26.0': + dependencies: + '@babel/template': 7.25.9 + '@babel/types': 7.26.0 + + '@babel/parser@7.26.2': + dependencies: + '@babel/types': 7.26.0 + + '@babel/plugin-proposal-decorators@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-syntax-decorators': 7.25.9(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-syntax-decorators@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-typescript@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + + '@babel/template@7.25.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.26.2 + '@babel/types': 7.26.0 + + '@babel/traverse@7.25.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.2 + '@babel/parser': 7.26.2 + '@babel/template': 7.25.9 + '@babel/types': 7.26.0 + debug: 4.3.7 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.26.0': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + + '@bufbuild/protobuf@2.2.2': {} + + '@esbuild/aix-ppc64@0.21.5': + optional: true + + '@esbuild/android-arm64@0.21.5': + optional: true + + '@esbuild/android-arm@0.21.5': + optional: true + + '@esbuild/android-x64@0.21.5': + optional: true + + '@esbuild/darwin-arm64@0.21.5': + optional: true + + '@esbuild/darwin-x64@0.21.5': + optional: true + + '@esbuild/freebsd-arm64@0.21.5': + optional: true + + '@esbuild/freebsd-x64@0.21.5': + optional: true + + '@esbuild/linux-arm64@0.21.5': + optional: true + + '@esbuild/linux-arm@0.21.5': + optional: true + + '@esbuild/linux-ia32@0.21.5': + optional: true + + '@esbuild/linux-loong64@0.21.5': + optional: true + + '@esbuild/linux-mips64el@0.21.5': + optional: true + + '@esbuild/linux-ppc64@0.21.5': + optional: true + + '@esbuild/linux-riscv64@0.21.5': + optional: true + + '@esbuild/linux-s390x@0.21.5': + optional: true + + '@esbuild/linux-x64@0.21.5': + optional: true + + '@esbuild/netbsd-x64@0.21.5': + optional: true + + '@esbuild/openbsd-x64@0.21.5': + optional: true + + '@esbuild/sunos-x64@0.21.5': + optional: true + + '@esbuild/win32-arm64@0.21.5': + optional: true + + '@esbuild/win32-ia32@0.21.5': + optional: true + + '@esbuild/win32-x64@0.21.5': + optional: true + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@jridgewell/gen-mapping@0.3.5': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/source-map@0.3.11': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@polka/url@1.0.0-next.28': {} + + '@rollup/pluginutils@5.1.3(rollup@4.27.3)': + dependencies: + '@types/estree': 1.0.6 + estree-walker: 2.0.2 + picomatch: 4.0.2 + optionalDependencies: + rollup: 4.27.3 + + '@rollup/rollup-android-arm-eabi@4.27.3': + optional: true + + '@rollup/rollup-android-arm64@4.27.3': + optional: true + + '@rollup/rollup-darwin-arm64@4.27.3': + optional: true + + '@rollup/rollup-darwin-x64@4.27.3': + optional: true + + '@rollup/rollup-freebsd-arm64@4.27.3': + optional: true + + '@rollup/rollup-freebsd-x64@4.27.3': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.27.3': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.27.3': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.27.3': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.27.3': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.27.3': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.27.3': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.27.3': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.27.3': + optional: true + + '@rollup/rollup-linux-x64-musl@4.27.3': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.27.3': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.27.3': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.27.3': + optional: true + + '@types/estree@1.0.6': {} + + '@types/web-bluetooth@0.0.20': {} + + '@vant/area-data@2.0.0': {} + + '@vant/auto-import-resolver@1.2.1': {} + + '@vant/popperjs@1.3.0': {} + + '@vant/use@1.6.0(vue@3.5.13)': + dependencies: + vue: 3.5.13 + + '@vitejs/plugin-vue-jsx@4.1.0(vite@5.4.11(sass-embedded@1.81.0)(terser@5.43.1))(vue@3.5.13)': + dependencies: + '@babel/core': 7.26.0 + '@babel/plugin-transform-typescript': 7.25.9(@babel/core@7.26.0) + '@vue/babel-plugin-jsx': 1.2.5(@babel/core@7.26.0) + vite: 5.4.11(sass-embedded@1.81.0)(terser@5.43.1) + vue: 3.5.13 + transitivePeerDependencies: + - supports-color + + '@vitejs/plugin-vue@5.2.0(vite@5.4.11(sass-embedded@1.81.0)(terser@5.43.1))(vue@3.5.13)': + dependencies: + vite: 5.4.11(sass-embedded@1.81.0)(terser@5.43.1) + vue: 3.5.13 + + '@vue/babel-helper-vue-transform-on@1.2.5': {} + + '@vue/babel-plugin-jsx@1.2.5(@babel/core@7.26.0)': + dependencies: + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) + '@babel/template': 7.25.9 + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 + '@vue/babel-helper-vue-transform-on': 1.2.5 + '@vue/babel-plugin-resolve-type': 1.2.5(@babel/core@7.26.0) + html-tags: 3.3.1 + svg-tags: 1.0.0 + optionalDependencies: + '@babel/core': 7.26.0 + transitivePeerDependencies: + - supports-color + + '@vue/babel-plugin-resolve-type@1.2.5(@babel/core@7.26.0)': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/core': 7.26.0 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/parser': 7.26.2 + '@vue/compiler-sfc': 3.5.13 + transitivePeerDependencies: + - supports-color + + '@vue/compiler-core@3.5.13': + dependencies: + '@babel/parser': 7.26.2 + '@vue/shared': 3.5.13 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + + '@vue/compiler-dom@3.5.13': + dependencies: + '@vue/compiler-core': 3.5.13 + '@vue/shared': 3.5.13 + + '@vue/compiler-sfc@3.5.13': + dependencies: + '@babel/parser': 7.26.2 + '@vue/compiler-core': 3.5.13 + '@vue/compiler-dom': 3.5.13 + '@vue/compiler-ssr': 3.5.13 + '@vue/shared': 3.5.13 + estree-walker: 2.0.2 + magic-string: 0.30.13 + postcss: 8.4.49 + source-map-js: 1.2.1 + + '@vue/compiler-ssr@3.5.13': + dependencies: + '@vue/compiler-dom': 3.5.13 + '@vue/shared': 3.5.13 + + '@vue/devtools-api@6.6.4': {} + + '@vue/devtools-core@7.6.4(vite@5.4.11(sass-embedded@1.81.0)(terser@5.43.1))(vue@3.5.13)': + dependencies: + '@vue/devtools-kit': 7.6.4 + '@vue/devtools-shared': 7.6.4 + mitt: 3.0.1 + nanoid: 3.3.7 + pathe: 1.1.2 + vite-hot-client: 0.2.3(vite@5.4.11(sass-embedded@1.81.0)(terser@5.43.1)) + vue: 3.5.13 + transitivePeerDependencies: + - vite + + '@vue/devtools-kit@7.6.4': + dependencies: + '@vue/devtools-shared': 7.6.4 + birpc: 0.2.19 + hookable: 5.5.3 + mitt: 3.0.1 + perfect-debounce: 1.0.0 + speakingurl: 14.0.1 + superjson: 2.2.1 + + '@vue/devtools-shared@7.6.4': + dependencies: + rfdc: 1.4.1 + + '@vue/reactivity@3.5.13': + dependencies: + '@vue/shared': 3.5.13 + + '@vue/runtime-core@3.5.13': + dependencies: + '@vue/reactivity': 3.5.13 + '@vue/shared': 3.5.13 + + '@vue/runtime-dom@3.5.13': + dependencies: + '@vue/reactivity': 3.5.13 + '@vue/runtime-core': 3.5.13 + '@vue/shared': 3.5.13 + csstype: 3.1.3 + + '@vue/server-renderer@3.5.13(vue@3.5.13)': + dependencies: + '@vue/compiler-ssr': 3.5.13 + '@vue/shared': 3.5.13 + vue: 3.5.13 + + '@vue/shared@3.5.13': {} + + '@vueuse/core@11.3.0(vue@3.5.13)': + dependencies: + '@types/web-bluetooth': 0.0.20 + '@vueuse/metadata': 11.3.0 + '@vueuse/shared': 11.3.0(vue@3.5.13) + vue-demi: 0.14.10(vue@3.5.13) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/metadata@11.3.0': {} + + '@vueuse/shared@11.3.0(vue@3.5.13)': + dependencies: + vue-demi: 0.14.10(vue@3.5.13) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + acorn@8.14.0: {} + + ansi-regex@5.0.1: {} + + ansi-regex@6.1.0: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.1: {} + + any-promise@1.3.0: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + arg@5.0.2: {} + + asynckit@0.4.0: {} + + autoprefixer@10.4.20(postcss@8.4.49): + dependencies: + browserslist: 4.24.2 + caniuse-lite: 1.0.30001680 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.1.1 + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + axios@1.7.7: + dependencies: + follow-redirects: 1.15.9 + form-data: 4.0.1 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + balanced-match@1.0.2: {} + + binary-extensions@2.3.0: {} + + birpc@0.2.19: {} + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.24.2: + dependencies: + caniuse-lite: 1.0.30001680 + electron-to-chromium: 1.5.63 + node-releases: 2.0.18 + update-browserslist-db: 1.1.1(browserslist@4.24.2) + + buffer-builder@0.2.0: {} + + buffer-from@1.1.2: {} + + bundle-name@4.1.0: + dependencies: + run-applescript: 7.0.0 + + camelcase-css@2.0.1: {} + + camelcase@5.3.1: {} + + caniuse-lite@1.0.30001680: {} + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + cliui@6.0.0: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + colorjs.io@0.5.2: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + commander@2.20.3: {} + + commander@4.1.1: {} + + confbox@0.1.8: {} + + convert-source-map@2.0.0: {} + + copy-anything@3.0.5: + dependencies: + is-what: 4.1.16 + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + crypto-js@4.2.0: {} + + cssesc@3.0.0: {} + + csstype@3.1.3: {} + + debug@4.3.7: + dependencies: + ms: 2.1.3 + + decamelize@1.2.0: {} + + default-browser-id@5.0.0: {} + + default-browser@5.2.1: + dependencies: + bundle-name: 4.1.0 + default-browser-id: 5.0.0 + + define-lazy-prop@3.0.0: {} + + delayed-stream@1.0.0: {} + + didyoumean@1.2.2: {} + + dijkstrajs@1.0.3: {} + + dlv@1.1.3: {} + + eastasianwidth@0.2.0: {} + + echarts@5.5.1: + dependencies: + tslib: 2.3.0 + zrender: 5.6.0 + + electron-to-chromium@1.5.63: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + entities@4.5.0: {} + + error-stack-parser-es@0.1.5: {} + + esbuild@0.21.5: + optionalDependencies: + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 + + escalade@3.2.0: {} + + escape-string-regexp@5.0.0: {} + + estree-walker@2.0.2: {} + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.6 + + execa@8.0.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + + fast-glob@3.3.2: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fastq@1.17.1: + dependencies: + reusify: 1.0.4 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@4.1.0: + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + + follow-redirects@1.15.9: {} + + foreground-child@3.3.0: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + form-data@4.0.1: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + fraction.js@4.3.7: {} + + fs-extra@11.2.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + gensync@1.0.0-beta.2: {} + + get-caller-file@2.0.5: {} + + get-stream@8.0.1: {} + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob@10.4.5: + dependencies: + foreground-child: 3.3.0 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + + globals@11.12.0: {} + + graceful-fs@4.2.11: {} + + has-flag@4.0.0: {} + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + hookable@5.5.3: {} + + html-tags@3.3.1: {} + + human-signals@5.0.0: {} + + immutable@5.0.3: {} + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-core-module@2.15.1: + dependencies: + hasown: 2.0.2 + + is-docker@3.0.0: {} + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + + is-number@7.0.0: {} + + is-stream@3.0.0: {} + + is-what@4.1.16: {} + + is-wsl@3.1.0: + dependencies: + is-inside-container: 1.0.0 + + isexe@2.0.0: {} + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jiti@1.21.6: {} + + js-tokens@4.0.0: {} + + js-tokens@9.0.0: {} + + jsesc@3.0.2: {} + + json5@2.2.3: {} + + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + kolorist@1.8.0: {} + + lilconfig@2.1.0: {} + + lilconfig@3.1.2: {} + + lines-and-columns@1.2.4: {} + + local-pkg@0.5.1: + dependencies: + mlly: 1.7.3 + pkg-types: 1.2.1 + + locate-path@5.0.0: + dependencies: + p-locate: 4.1.0 + + lodash@4.17.21: {} + + lru-cache@10.4.3: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + magic-string@0.30.13: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + + magic-string@0.30.14: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mimic-fn@4.0.0: {} + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + + minipass@7.1.2: {} + + mitt@3.0.1: {} + + mlly@1.7.3: + dependencies: + acorn: 8.14.0 + pathe: 1.1.2 + pkg-types: 1.2.1 + ufo: 1.5.4 + + mrmime@2.0.0: {} + + ms@2.1.3: {} + + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + + nanoid@3.3.7: {} + + node-releases@2.0.18: {} + + normalize-path@3.0.0: {} + + normalize-range@0.1.2: {} + + npm-run-path@5.3.0: + dependencies: + path-key: 4.0.0 + + nprogress@0.2.0: {} + + object-assign@4.1.1: {} + + object-hash@3.0.0: {} + + onetime@6.0.0: + dependencies: + mimic-fn: 4.0.0 + + open@10.1.0: + dependencies: + default-browser: 5.2.1 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + is-wsl: 3.1.0 + + p-limit@2.3.0: + dependencies: + p-try: 2.2.0 + + p-locate@4.1.0: + dependencies: + p-limit: 2.3.0 + + p-try@2.2.0: {} + + package-json-from-dist@1.0.1: {} + + path-exists@4.0.0: {} + + path-key@3.1.1: {} + + path-key@4.0.0: {} + + path-parse@1.0.7: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + pathe@1.1.2: {} + + perfect-debounce@1.0.0: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + picomatch@4.0.2: {} + + pify@2.3.0: {} + + pinia@2.2.6(vue@3.5.13): + dependencies: + '@vue/devtools-api': 6.6.4 + vue: 3.5.13 + vue-demi: 0.14.10(vue@3.5.13) + + pirates@4.0.6: {} + + pkg-types@1.2.1: + dependencies: + confbox: 0.1.8 + mlly: 1.7.3 + pathe: 1.1.2 + + pngjs@5.0.0: {} + + postcss-import@15.1.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.8 + + postcss-js@4.0.1(postcss@8.4.49): + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.49 + + postcss-load-config@4.0.2(postcss@8.4.49): + dependencies: + lilconfig: 3.1.2 + yaml: 2.6.1 + optionalDependencies: + postcss: 8.4.49 + + postcss-nested@6.2.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-selector-parser: 6.1.2 + + postcss-selector-parser@6.1.2: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-value-parser@4.2.0: {} + + postcss@8.4.49: + dependencies: + nanoid: 3.3.7 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + proxy-from-env@1.1.0: {} + + qrcode@1.5.4: + dependencies: + dijkstrajs: 1.0.3 + pngjs: 5.0.0 + yargs: 15.4.1 + + queue-microtask@1.2.3: {} + + read-cache@1.0.0: + dependencies: + pify: 2.3.0 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + require-directory@2.1.1: {} + + require-main-filename@2.0.0: {} + + resolve@1.22.8: + dependencies: + is-core-module: 2.15.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + reusify@1.0.4: {} + + rfdc@1.4.1: {} + + rollup@4.27.3: + dependencies: + '@types/estree': 1.0.6 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.27.3 + '@rollup/rollup-android-arm64': 4.27.3 + '@rollup/rollup-darwin-arm64': 4.27.3 + '@rollup/rollup-darwin-x64': 4.27.3 + '@rollup/rollup-freebsd-arm64': 4.27.3 + '@rollup/rollup-freebsd-x64': 4.27.3 + '@rollup/rollup-linux-arm-gnueabihf': 4.27.3 + '@rollup/rollup-linux-arm-musleabihf': 4.27.3 + '@rollup/rollup-linux-arm64-gnu': 4.27.3 + '@rollup/rollup-linux-arm64-musl': 4.27.3 + '@rollup/rollup-linux-powerpc64le-gnu': 4.27.3 + '@rollup/rollup-linux-riscv64-gnu': 4.27.3 + '@rollup/rollup-linux-s390x-gnu': 4.27.3 + '@rollup/rollup-linux-x64-gnu': 4.27.3 + '@rollup/rollup-linux-x64-musl': 4.27.3 + '@rollup/rollup-win32-arm64-msvc': 4.27.3 + '@rollup/rollup-win32-ia32-msvc': 4.27.3 + '@rollup/rollup-win32-x64-msvc': 4.27.3 + fsevents: 2.3.3 + + run-applescript@7.0.0: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + rxjs@7.8.1: + dependencies: + tslib: 2.8.1 + + sass-embedded-android-arm64@1.81.0: + optional: true + + sass-embedded-android-arm@1.81.0: + optional: true + + sass-embedded-android-ia32@1.81.0: + optional: true + + sass-embedded-android-riscv64@1.81.0: + optional: true + + sass-embedded-android-x64@1.81.0: + optional: true + + sass-embedded-darwin-arm64@1.81.0: + optional: true + + sass-embedded-darwin-x64@1.81.0: + optional: true + + sass-embedded-linux-arm64@1.81.0: + optional: true + + sass-embedded-linux-arm@1.81.0: + optional: true + + sass-embedded-linux-ia32@1.81.0: + optional: true + + sass-embedded-linux-musl-arm64@1.81.0: + optional: true + + sass-embedded-linux-musl-arm@1.81.0: + optional: true + + sass-embedded-linux-musl-ia32@1.81.0: + optional: true + + sass-embedded-linux-musl-riscv64@1.81.0: + optional: true + + sass-embedded-linux-musl-x64@1.81.0: + optional: true + + sass-embedded-linux-riscv64@1.81.0: + optional: true + + sass-embedded-linux-x64@1.81.0: + optional: true + + sass-embedded-win32-arm64@1.81.0: + optional: true + + sass-embedded-win32-ia32@1.81.0: + optional: true + + sass-embedded-win32-x64@1.81.0: + optional: true + + sass-embedded@1.81.0: + dependencies: + '@bufbuild/protobuf': 2.2.2 + buffer-builder: 0.2.0 + colorjs.io: 0.5.2 + immutable: 5.0.3 + rxjs: 7.8.1 + supports-color: 8.1.1 + sync-child-process: 1.0.2 + varint: 6.0.0 + optionalDependencies: + sass-embedded-android-arm: 1.81.0 + sass-embedded-android-arm64: 1.81.0 + sass-embedded-android-ia32: 1.81.0 + sass-embedded-android-riscv64: 1.81.0 + sass-embedded-android-x64: 1.81.0 + sass-embedded-darwin-arm64: 1.81.0 + sass-embedded-darwin-x64: 1.81.0 + sass-embedded-linux-arm: 1.81.0 + sass-embedded-linux-arm64: 1.81.0 + sass-embedded-linux-ia32: 1.81.0 + sass-embedded-linux-musl-arm: 1.81.0 + sass-embedded-linux-musl-arm64: 1.81.0 + sass-embedded-linux-musl-ia32: 1.81.0 + sass-embedded-linux-musl-riscv64: 1.81.0 + sass-embedded-linux-musl-x64: 1.81.0 + sass-embedded-linux-riscv64: 1.81.0 + sass-embedded-linux-x64: 1.81.0 + sass-embedded-win32-arm64: 1.81.0 + sass-embedded-win32-ia32: 1.81.0 + sass-embedded-win32-x64: 1.81.0 + + scule@1.3.0: {} + + semver@6.3.1: {} + + set-blocking@2.0.0: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + signal-exit@4.1.0: {} + + sirv@3.0.0: + dependencies: + '@polka/url': 1.0.0-next.28 + mrmime: 2.0.0 + totalist: 3.0.1 + + source-map-js@1.2.1: {} + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + speakingurl@14.0.1: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.1.0 + + strip-final-newline@3.0.0: {} + + strip-literal@2.1.0: + dependencies: + js-tokens: 9.0.0 + + sucrase@3.35.0: + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + commander: 4.1.1 + glob: 10.4.5 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.6 + ts-interface-checker: 0.1.13 + + superjson@2.2.1: + dependencies: + copy-anything: 3.0.5 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + svg-tags@1.0.0: {} + + sync-child-process@1.0.2: + dependencies: + sync-message-port: 1.1.3 + + sync-message-port@1.1.3: {} + + tailwindcss@3.4.15: + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.6.0 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.2 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.6 + lilconfig: 2.1.0 + micromatch: 4.0.8 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.1.1 + postcss: 8.4.49 + postcss-import: 15.1.0(postcss@8.4.49) + postcss-js: 4.0.1(postcss@8.4.49) + postcss-load-config: 4.0.2(postcss@8.4.49) + postcss-nested: 6.2.0(postcss@8.4.49) + postcss-selector-parser: 6.1.2 + resolve: 1.22.8 + sucrase: 3.35.0 + transitivePeerDependencies: + - ts-node + + terser@5.43.1: + dependencies: + '@jridgewell/source-map': 0.3.11 + acorn: 8.14.0 + commander: 2.20.3 + source-map-support: 0.5.21 + + thenify-all@1.6.0: + dependencies: + thenify: 3.3.1 + + thenify@3.3.1: + dependencies: + any-promise: 1.3.0 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + totalist@3.0.1: {} + + ts-interface-checker@0.1.13: {} + + tslib@2.3.0: {} + + tslib@2.8.1: {} + + ufo@1.5.4: {} + + unimport@3.13.2(rollup@4.27.3): + dependencies: + '@rollup/pluginutils': 5.1.3(rollup@4.27.3) + acorn: 8.14.0 + escape-string-regexp: 5.0.0 + estree-walker: 3.0.3 + fast-glob: 3.3.2 + local-pkg: 0.5.1 + magic-string: 0.30.13 + mlly: 1.7.3 + pathe: 1.1.2 + pkg-types: 1.2.1 + scule: 1.3.0 + strip-literal: 2.1.0 + unplugin: 1.16.0 + transitivePeerDependencies: + - rollup + + universalify@2.0.1: {} + + unplugin-auto-import@0.18.5(@vueuse/core@11.3.0(vue@3.5.13))(rollup@4.27.3): + dependencies: + '@antfu/utils': 0.7.10 + '@rollup/pluginutils': 5.1.3(rollup@4.27.3) + fast-glob: 3.3.2 + local-pkg: 0.5.1 + magic-string: 0.30.13 + minimatch: 9.0.5 + unimport: 3.13.2(rollup@4.27.3) + unplugin: 1.16.0 + optionalDependencies: + '@vueuse/core': 11.3.0(vue@3.5.13) + transitivePeerDependencies: + - rollup + + unplugin-vue-components@0.27.5(@babel/parser@7.26.2)(rollup@4.27.3)(vue@3.5.13): + dependencies: + '@antfu/utils': 0.7.10 + '@rollup/pluginutils': 5.1.3(rollup@4.27.3) + chokidar: 3.6.0 + debug: 4.3.7 + fast-glob: 3.3.2 + local-pkg: 0.5.1 + magic-string: 0.30.14 + minimatch: 9.0.5 + mlly: 1.7.3 + unplugin: 1.16.0 + vue: 3.5.13 + optionalDependencies: + '@babel/parser': 7.26.2 + transitivePeerDependencies: + - rollup + - supports-color + + unplugin@1.16.0: + dependencies: + acorn: 8.14.0 + webpack-virtual-modules: 0.6.2 + + update-browserslist-db@1.1.1(browserslist@4.24.2): + dependencies: + browserslist: 4.24.2 + escalade: 3.2.0 + picocolors: 1.1.1 + + util-deprecate@1.0.2: {} + + vant@4.9.9(vue@3.5.13): + dependencies: + '@vant/popperjs': 1.3.0 + '@vant/use': 1.6.0(vue@3.5.13) + '@vue/shared': 3.5.13 + vue: 3.5.13 + + varint@6.0.0: {} + + vite-hot-client@0.2.3(vite@5.4.11(sass-embedded@1.81.0)(terser@5.43.1)): + dependencies: + vite: 5.4.11(sass-embedded@1.81.0)(terser@5.43.1) + + vite-plugin-inspect@0.8.8(rollup@4.27.3)(vite@5.4.11(sass-embedded@1.81.0)(terser@5.43.1)): + dependencies: + '@antfu/utils': 0.7.10 + '@rollup/pluginutils': 5.1.3(rollup@4.27.3) + debug: 4.3.7 + error-stack-parser-es: 0.1.5 + fs-extra: 11.2.0 + open: 10.1.0 + perfect-debounce: 1.0.0 + picocolors: 1.1.1 + sirv: 3.0.0 + vite: 5.4.11(sass-embedded@1.81.0)(terser@5.43.1) + transitivePeerDependencies: + - rollup + - supports-color + + vite-plugin-vue-devtools@7.6.4(rollup@4.27.3)(vite@5.4.11(sass-embedded@1.81.0)(terser@5.43.1))(vue@3.5.13): + dependencies: + '@vue/devtools-core': 7.6.4(vite@5.4.11(sass-embedded@1.81.0)(terser@5.43.1))(vue@3.5.13) + '@vue/devtools-kit': 7.6.4 + '@vue/devtools-shared': 7.6.4 + execa: 8.0.1 + sirv: 3.0.0 + vite: 5.4.11(sass-embedded@1.81.0)(terser@5.43.1) + vite-plugin-inspect: 0.8.8(rollup@4.27.3)(vite@5.4.11(sass-embedded@1.81.0)(terser@5.43.1)) + vite-plugin-vue-inspector: 5.2.0(vite@5.4.11(sass-embedded@1.81.0)(terser@5.43.1)) + transitivePeerDependencies: + - '@nuxt/kit' + - rollup + - supports-color + - vue + + vite-plugin-vue-inspector@5.2.0(vite@5.4.11(sass-embedded@1.81.0)(terser@5.43.1)): + dependencies: + '@babel/core': 7.26.0 + '@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.0) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.26.0) + '@babel/plugin-transform-typescript': 7.25.9(@babel/core@7.26.0) + '@vue/babel-plugin-jsx': 1.2.5(@babel/core@7.26.0) + '@vue/compiler-dom': 3.5.13 + kolorist: 1.8.0 + magic-string: 0.30.13 + vite: 5.4.11(sass-embedded@1.81.0)(terser@5.43.1) + transitivePeerDependencies: + - supports-color + + vite@5.4.11(sass-embedded@1.81.0)(terser@5.43.1): + dependencies: + esbuild: 0.21.5 + postcss: 8.4.49 + rollup: 4.27.3 + optionalDependencies: + fsevents: 2.3.3 + sass-embedded: 1.81.0 + terser: 5.43.1 + + vue-demi@0.13.11(vue@3.5.13): + dependencies: + vue: 3.5.13 + + vue-demi@0.14.10(vue@3.5.13): + dependencies: + vue: 3.5.13 + + vue-echarts@7.0.3(@vue/runtime-core@3.5.13)(echarts@5.5.1)(vue@3.5.13): + dependencies: + echarts: 5.5.1 + vue: 3.5.13 + vue-demi: 0.13.11(vue@3.5.13) + optionalDependencies: + '@vue/runtime-core': 3.5.13 + transitivePeerDependencies: + - '@vue/composition-api' + + vue-router@4.4.5(vue@3.5.13): + dependencies: + '@vue/devtools-api': 6.6.4 + vue: 3.5.13 + + vue@3.5.13: + dependencies: + '@vue/compiler-dom': 3.5.13 + '@vue/compiler-sfc': 3.5.13 + '@vue/runtime-dom': 3.5.13 + '@vue/server-renderer': 3.5.13(vue@3.5.13) + '@vue/shared': 3.5.13 + + webpack-virtual-modules@0.6.2: {} + + which-module@2.0.1: {} + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + + y18n@4.0.3: {} + + yallist@3.1.1: {} + + yaml@2.6.1: {} + + yargs-parser@18.1.3: + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + + yargs@15.4.1: + dependencies: + cliui: 6.0.0 + decamelize: 1.2.0 + find-up: 4.1.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 4.2.3 + which-module: 2.0.1 + y18n: 4.0.3 + yargs-parser: 18.1.3 + + zrender@5.6.0: + dependencies: + tslib: 2.3.0 diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..49c0612 --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; diff --git a/public/android-chrome-192x192.png b/public/android-chrome-192x192.png new file mode 100644 index 0000000..628023f Binary files /dev/null and b/public/android-chrome-192x192.png differ diff --git a/public/android-chrome-512x512.png b/public/android-chrome-512x512.png new file mode 100644 index 0000000..4a89e53 Binary files /dev/null and b/public/android-chrome-512x512.png differ diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png new file mode 100644 index 0000000..33147c6 Binary files /dev/null and b/public/apple-touch-icon.png differ diff --git a/public/favicon-16x16.png b/public/favicon-16x16.png new file mode 100644 index 0000000..38c819d Binary files /dev/null and b/public/favicon-16x16.png differ diff --git a/public/favicon-32x32.png b/public/favicon-32x32.png new file mode 100644 index 0000000..d4b63f8 Binary files /dev/null and b/public/favicon-32x32.png differ diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..bafcf79 Binary files /dev/null and b/public/favicon.ico differ diff --git a/public/image/clickCaptcha.jpg b/public/image/clickCaptcha.jpg new file mode 100644 index 0000000..8846f9a Binary files /dev/null and b/public/image/clickCaptcha.jpg differ diff --git a/public/image/help/13.jpg b/public/image/help/13.jpg new file mode 100644 index 0000000..6241387 Binary files /dev/null and b/public/image/help/13.jpg differ diff --git a/public/image/help/14.jpg b/public/image/help/14.jpg new file mode 100644 index 0000000..7f26b0c Binary files /dev/null and b/public/image/help/14.jpg differ diff --git a/public/image/help/15.jpg b/public/image/help/15.jpg new file mode 100644 index 0000000..1bae74d Binary files /dev/null and b/public/image/help/15.jpg differ diff --git a/public/image/help/18.jpg b/public/image/help/18.jpg new file mode 100644 index 0000000..7e6b530 Binary files /dev/null and b/public/image/help/18.jpg differ diff --git a/public/image/help/19.jpg b/public/image/help/19.jpg new file mode 100644 index 0000000..070d849 Binary files /dev/null and b/public/image/help/19.jpg differ diff --git a/public/image/help/20.jpg b/public/image/help/20.jpg new file mode 100644 index 0000000..2c296cb Binary files /dev/null and b/public/image/help/20.jpg differ diff --git a/public/image/help/21.jpg b/public/image/help/21.jpg new file mode 100644 index 0000000..9615b9d Binary files /dev/null and b/public/image/help/21.jpg differ diff --git a/public/image/help/22.jpg b/public/image/help/22.jpg new file mode 100644 index 0000000..753a147 Binary files /dev/null and b/public/image/help/22.jpg differ diff --git a/public/image/help/23.jpg b/public/image/help/23.jpg new file mode 100644 index 0000000..e093d19 Binary files /dev/null and b/public/image/help/23.jpg differ diff --git a/public/image/help/24.jpg b/public/image/help/24.jpg new file mode 100644 index 0000000..0a53d17 Binary files /dev/null and b/public/image/help/24.jpg differ diff --git a/public/image/help/25.jpg b/public/image/help/25.jpg new file mode 100644 index 0000000..142d87a Binary files /dev/null and b/public/image/help/25.jpg differ diff --git a/public/image/help/direct_earnings.jpg b/public/image/help/direct_earnings.jpg new file mode 100644 index 0000000..853b971 Binary files /dev/null and b/public/image/help/direct_earnings.jpg differ diff --git a/public/image/help/invite-earnings.jpg b/public/image/help/invite-earnings.jpg new file mode 100644 index 0000000..280ef09 Binary files /dev/null and b/public/image/help/invite-earnings.jpg differ diff --git a/public/image/help/invite-step1.jpg b/public/image/help/invite-step1.jpg new file mode 100644 index 0000000..8c5d608 Binary files /dev/null and b/public/image/help/invite-step1.jpg differ diff --git a/public/image/help/invite-step2.jpg b/public/image/help/invite-step2.jpg new file mode 100644 index 0000000..43eaa78 Binary files /dev/null and b/public/image/help/invite-step2.jpg differ diff --git a/public/image/help/invite-step3.jpg b/public/image/help/invite-step3.jpg new file mode 100644 index 0000000..4d965f3 Binary files /dev/null and b/public/image/help/invite-step3.jpg differ diff --git a/public/image/help/report-calculation.jpg b/public/image/help/report-calculation.jpg new file mode 100644 index 0000000..5ddb0e4 Binary files /dev/null and b/public/image/help/report-calculation.jpg differ diff --git a/public/image/help/report-cost.jpg b/public/image/help/report-cost.jpg new file mode 100644 index 0000000..03e3438 Binary files /dev/null and b/public/image/help/report-cost.jpg differ diff --git a/public/image/help/report-efficiency.jpg b/public/image/help/report-efficiency.jpg new file mode 100644 index 0000000..67ac4d5 Binary files /dev/null and b/public/image/help/report-efficiency.jpg differ diff --git a/public/image/help/report-push.jpg b/public/image/help/report-push.jpg new file mode 100644 index 0000000..67b17dd Binary files /dev/null and b/public/image/help/report-push.jpg differ diff --git a/public/image/help/report-secret-1.jpg b/public/image/help/report-secret-1.jpg new file mode 100644 index 0000000..571889f Binary files /dev/null and b/public/image/help/report-secret-1.jpg differ diff --git a/public/image/help/report-secret-2.jpg b/public/image/help/report-secret-2.jpg new file mode 100644 index 0000000..c147691 Binary files /dev/null and b/public/image/help/report-secret-2.jpg differ diff --git a/public/image/help/report-step1.jpg b/public/image/help/report-step1.jpg new file mode 100644 index 0000000..7ae6521 Binary files /dev/null and b/public/image/help/report-step1.jpg differ diff --git a/public/image/help/report-step2.jpg b/public/image/help/report-step2.jpg new file mode 100644 index 0000000..4895c10 Binary files /dev/null and b/public/image/help/report-step2.jpg differ diff --git a/public/image/help/report-step3.jpg b/public/image/help/report-step3.jpg new file mode 100644 index 0000000..32595f7 Binary files /dev/null and b/public/image/help/report-step3.jpg differ diff --git a/public/image/help/report-step4.jpg b/public/image/help/report-step4.jpg new file mode 100644 index 0000000..7200a29 Binary files /dev/null and b/public/image/help/report-step4.jpg differ diff --git a/public/image/help/report-step5.jpg b/public/image/help/report-step5.jpg new file mode 100644 index 0000000..163c528 Binary files /dev/null and b/public/image/help/report-step5.jpg differ diff --git a/public/image/help/report-types.jpg b/public/image/help/report-types.jpg new file mode 100644 index 0000000..e715acc Binary files /dev/null and b/public/image/help/report-types.jpg differ diff --git a/public/image/help/vip-guide.jpg b/public/image/help/vip-guide.jpg new file mode 100644 index 0000000..aac5868 Binary files /dev/null and b/public/image/help/vip-guide.jpg differ diff --git a/public/image/shot_nonal.png b/public/image/shot_nonal.png new file mode 100644 index 0000000..5265a90 Binary files /dev/null and b/public/image/shot_nonal.png differ diff --git a/public/image/shot_svip.png b/public/image/shot_svip.png new file mode 100644 index 0000000..f636ea0 Binary files /dev/null and b/public/image/shot_svip.png differ diff --git a/public/image/shot_vip.png b/public/image/shot_vip.png new file mode 100644 index 0000000..0c15cb3 Binary files /dev/null and b/public/image/shot_vip.png differ diff --git a/public/inquire_icons/beijianguanrenyuan.svg b/public/inquire_icons/beijianguanrenyuan.svg new file mode 100644 index 0000000..5d5f873 --- /dev/null +++ b/public/inquire_icons/beijianguanrenyuan.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/inquire_icons/default.svg b/public/inquire_icons/default.svg new file mode 100644 index 0000000..8ac7949 --- /dev/null +++ b/public/inquire_icons/default.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/public/inquire_icons/fengxianxingwei.svg b/public/inquire_icons/fengxianxingwei.svg new file mode 100644 index 0000000..e2cb3ef --- /dev/null +++ b/public/inquire_icons/fengxianxingwei.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/inquire_icons/huankuanyali.svg b/public/inquire_icons/huankuanyali.svg new file mode 100644 index 0000000..31146ab --- /dev/null +++ b/public/inquire_icons/huankuanyali.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/inquire_icons/hunyinzhuangtai.svg b/public/inquire_icons/hunyinzhuangtai.svg new file mode 100644 index 0000000..eb1a3d1 --- /dev/null +++ b/public/inquire_icons/hunyinzhuangtai.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/inquire_icons/jiedaishenqing.svg b/public/inquire_icons/jiedaishenqing.svg new file mode 100644 index 0000000..4e1224c --- /dev/null +++ b/public/inquire_icons/jiedaishenqing.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/inquire_icons/jiedaiweiyue.svg b/public/inquire_icons/jiedaiweiyue.svg new file mode 100644 index 0000000..7a218f4 --- /dev/null +++ b/public/inquire_icons/jiedaiweiyue.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/inquire_icons/jiedaixingwei.svg b/public/inquire_icons/jiedaixingwei.svg new file mode 100644 index 0000000..948860f --- /dev/null +++ b/public/inquire_icons/jiedaixingwei.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/inquire_icons/mingxiacheliang.svg b/public/inquire_icons/mingxiacheliang.svg new file mode 100644 index 0000000..7b37237 --- /dev/null +++ b/public/inquire_icons/mingxiacheliang.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/inquire_icons/minshianjianguanli.svg b/public/inquire_icons/minshianjianguanli.svg new file mode 100644 index 0000000..da8fbf1 --- /dev/null +++ b/public/inquire_icons/minshianjianguanli.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/inquire_icons/renqiguanxi.svg b/public/inquire_icons/renqiguanxi.svg new file mode 100644 index 0000000..24b3bb5 --- /dev/null +++ b/public/inquire_icons/renqiguanxi.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/inquire_icons/shixinren.svg b/public/inquire_icons/shixinren.svg new file mode 100644 index 0000000..6d1c734 --- /dev/null +++ b/public/inquire_icons/shixinren.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/inquire_icons/sifasheyu.svg b/public/inquire_icons/sifasheyu.svg new file mode 100644 index 0000000..31392f3 --- /dev/null +++ b/public/inquire_icons/sifasheyu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/inquire_icons/xianzhigaoxiaofei.svg b/public/inquire_icons/xianzhigaoxiaofei.svg new file mode 100644 index 0000000..8e2d6e3 --- /dev/null +++ b/public/inquire_icons/xianzhigaoxiaofei.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/inquire_icons/xingshi.svg b/public/inquire_icons/xingshi.svg new file mode 100644 index 0000000..60f2e06 --- /dev/null +++ b/public/inquire_icons/xingshi.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/inquire_icons/xingzhengfuwu.svg b/public/inquire_icons/xingzhengfuwu.svg new file mode 100644 index 0000000..4c31393 --- /dev/null +++ b/public/inquire_icons/xingzhengfuwu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/inquire_icons/yuepeichang.svg b/public/inquire_icons/yuepeichang.svg new file mode 100644 index 0000000..740d0f3 --- /dev/null +++ b/public/inquire_icons/yuepeichang.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/inquire_icons/zhixinganjian.svg b/public/inquire_icons/zhixinganjian.svg new file mode 100644 index 0000000..be32352 --- /dev/null +++ b/public/inquire_icons/zhixinganjian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000..def87e1 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,50 @@ +User-agent: * +Allow: / + +# 允许访问主要页面 +Allow: /agent +Allow: /help +Allow: /help/guide +Allow: /example +Allow: /service +Allow: /privacyPolicy +Allow: /userAgreement +Allow: /agentManageAgreement +Allow: /agentSerivceAgreement +Allow: /authorization + +# 禁止访问私有页面 +Disallow: /login +Disallow: /me +Disallow: /historyQuery +Disallow: /promote +Disallow: /withdraw +Disallow: /report +Disallow: /inquire/ +Disallow: /payment/ +Disallow: /agent/promoteDetails +Disallow: /agent/rewardsDetails +Disallow: /agent/promote +Disallow: /agent/invitation +Disallow: /agent/agentVip +Disallow: /agent/vipApply +Disallow: /agent/vipConfig +Disallow: /agent/withdraw +Disallow: /agent/withdrawDetails +Disallow: /agent/invitationAgentApply/ +Disallow: /agent/subordinateList +Disallow: /agent/subordinateDetail/ + +# 禁止访问API接口 +Disallow: /api/ + +# 禁止访问静态资源目录(可选) +Disallow: /assets/ +Disallow: /js/ +Disallow: /css/ + +# 网站地图 +Sitemap: https://www.zhinengcha.cn/sitemap.xml + +# 爬取延迟(毫秒) +Crawl-delay: 1 diff --git a/public/site.webmanifest b/public/site.webmanifest new file mode 100644 index 0000000..8aba440 --- /dev/null +++ b/public/site.webmanifest @@ -0,0 +1,40 @@ +{ + "name": "智能查 - 大数据风险报告查询与代理管理平台", + "short_name": "智能查", + "description": "大数据风险报告查询与代理管理平台,提供婚姻状况查询、个人信用评估、人事背调、信贷风控、企业风险监测等服务", + "start_url": "/", + "display": "standalone", + "background_color": "#ffffff", + "theme_color": "#3498db", + "orientation": "portrait-primary", + "icons": [ + { + "src": "/favicon-16x16.png", + "sizes": "16x16", + "type": "image/png" + }, + { + "src": "/favicon-32x32.png", + "sizes": "32x32", + "type": "image/png" + }, + { + "src": "/apple-touch-icon.png", + "sizes": "180x180", + "type": "image/png" + }, + { + "src": "/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "categories": ["business", "finance", "utilities"], + "lang": "zh-CN", + "dir": "ltr" +} diff --git a/public/sitemap.xml b/public/sitemap.xml new file mode 100644 index 0000000..261c820 --- /dev/null +++ b/public/sitemap.xml @@ -0,0 +1,69 @@ + + + + https://www.zhinengcha.cn/ + 2025-08-01 + daily + 1.0 + + + https://www.zhinengcha.cn/agent + 2025-08-01 + weekly + 0.8 + + + https://www.zhinengcha.cn/help + 2025-08-01 + monthly + 0.7 + + + https://www.zhinengcha.cn/help/guide + 2025-08-01 + monthly + 0.6 + + + https://www.zhinengcha.cn/example + 2025-08-01 + monthly + 0.6 + + + https://www.zhinengcha.cn/service + 2025-08-01 + monthly + 0.5 + + + https://www.zhinengcha.cn/privacyPolicy + 2025-08-01 + yearly + 0.3 + + + https://www.zhinengcha.cn/userAgreement + 2025-08-01 + yearly + 0.3 + + + https://www.zhinengcha.cn/agentManageAgreement + 2025-08-01 + yearly + 0.3 + + + https://www.zhinengcha.cn/agentSerivceAgreement + 2025-08-01 + yearly + 0.3 + + + https://www.zhinengcha.cn/authorization + 2025-08-01 + yearly + 0.3 + + diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..2cc7212 --- /dev/null +++ b/src/App.vue @@ -0,0 +1,160 @@ + + + + + diff --git a/src/api/user.js b/src/api/user.js new file mode 100644 index 0000000..860ee29 --- /dev/null +++ b/src/api/user.js @@ -0,0 +1,15 @@ +import axios from "axios"; + +// 获取API基础URL +const baseURL = import.meta.env.VITE_API_BASE_URL || ""; + +// 注销账号API +export function cancelAccount() { + return axios({ + method: "post", + url: `${baseURL}/api/user/cancel`, + headers: { + Authorization: `Bearer ${localStorage.getItem("token")}`, + }, + }); +} diff --git a/src/assets/base.css b/src/assets/base.css new file mode 100644 index 0000000..cfe029f --- /dev/null +++ b/src/assets/base.css @@ -0,0 +1,27 @@ +*, +*::before, +*::after { + box-sizing: border-box; + margin: 0; + font-weight: normal; +} +html { + margin: auto !important; + @apply max-w-lg; + /* 确保在缩放时保持响应式 */ + min-width: 320px; + overflow-x: hidden; +} +body { + background-color: #f8f8f8; + min-height: 100vh; + transition: color 0.5s, background-color 0.5s; + line-height: 1.6; + font-family: Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, + Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", + sans-serif; + font-size: 15px; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} diff --git a/src/assets/images/banner.png b/src/assets/images/banner.png new file mode 100644 index 0000000..9c1f1dd Binary files /dev/null and b/src/assets/images/banner.png differ diff --git a/src/assets/images/bg_2.png b/src/assets/images/bg_2.png new file mode 100644 index 0000000..9b3befe Binary files /dev/null and b/src/assets/images/bg_2.png differ diff --git a/src/assets/images/bg_icon.png b/src/assets/images/bg_icon.png new file mode 100644 index 0000000..44bd467 Binary files /dev/null and b/src/assets/images/bg_icon.png differ diff --git a/src/assets/images/empty.svg b/src/assets/images/empty.svg new file mode 100644 index 0000000..fbecc14 --- /dev/null +++ b/src/assets/images/empty.svg @@ -0,0 +1,75 @@ + + 空空如也 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/gdrqgx_icon.svg b/src/assets/images/gdrqgx_icon.svg new file mode 100644 index 0000000..fa64f1a --- /dev/null +++ b/src/assets/images/gdrqgx_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/grbl_icon.svg b/src/assets/images/grbl_icon.svg new file mode 100644 index 0000000..09f3a67 --- /dev/null +++ b/src/assets/images/grbl_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/grss_icon.svg b/src/assets/images/grss_icon.svg new file mode 100644 index 0000000..2c5296e --- /dev/null +++ b/src/assets/images/grss_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/head_shot.webp b/src/assets/images/head_shot.webp new file mode 100644 index 0000000..50a540e Binary files /dev/null and b/src/assets/images/head_shot.webp differ diff --git a/src/assets/images/icon_1.png b/src/assets/images/icon_1.png new file mode 100644 index 0000000..7298238 Binary files /dev/null and b/src/assets/images/icon_1.png differ diff --git a/src/assets/images/icon_2.png b/src/assets/images/icon_2.png new file mode 100644 index 0000000..964afe8 Binary files /dev/null and b/src/assets/images/icon_2.png differ diff --git a/src/assets/images/icon_3.png b/src/assets/images/icon_3.png new file mode 100644 index 0000000..e1419b2 Binary files /dev/null and b/src/assets/images/icon_3.png differ diff --git a/src/assets/images/icon_4.png b/src/assets/images/icon_4.png new file mode 100644 index 0000000..ff225f2 Binary files /dev/null and b/src/assets/images/icon_4.png differ diff --git a/src/assets/images/icon_bg.svg b/src/assets/images/icon_bg.svg new file mode 100644 index 0000000..fcd561c --- /dev/null +++ b/src/assets/images/icon_bg.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/icon_bz.svg b/src/assets/images/icon_bz.svg new file mode 100644 index 0000000..4daa201 --- /dev/null +++ b/src/assets/images/icon_bz.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/icon_index_apistore.svg b/src/assets/images/icon_index_apistore.svg new file mode 100644 index 0000000..da95d6e --- /dev/null +++ b/src/assets/images/icon_index_apistore.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/icon_index_chacheliang.svg b/src/assets/images/icon_index_chacheliang.svg new file mode 100644 index 0000000..2bff239 --- /dev/null +++ b/src/assets/images/icon_index_chacheliang.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/icon_share_friends.svg b/src/assets/images/icon_share_friends.svg new file mode 100644 index 0000000..8e8ccb9 --- /dev/null +++ b/src/assets/images/icon_share_friends.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/icon_share_img.svg b/src/assets/images/icon_share_img.svg new file mode 100644 index 0000000..e71bc1f --- /dev/null +++ b/src/assets/images/icon_share_img.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/icon_share_url.svg b/src/assets/images/icon_share_url.svg new file mode 100644 index 0000000..0469cfa --- /dev/null +++ b/src/assets/images/icon_share_url.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/icon_share_wechat.svg b/src/assets/images/icon_share_wechat.svg new file mode 100644 index 0000000..ecbc839 --- /dev/null +++ b/src/assets/images/icon_share_wechat.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/icon_tg.svg b/src/assets/images/icon_tg.svg new file mode 100644 index 0000000..7e39ed9 --- /dev/null +++ b/src/assets/images/icon_tg.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/icon_xj.svg b/src/assets/images/icon_xj.svg new file mode 100644 index 0000000..bb43ad0 --- /dev/null +++ b/src/assets/images/icon_xj.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/index_icon_1.png b/src/assets/images/index_icon_1.png new file mode 100644 index 0000000..a0e3ef9 Binary files /dev/null and b/src/assets/images/index_icon_1.png differ diff --git a/src/assets/images/index_icon_2.png b/src/assets/images/index_icon_2.png new file mode 100644 index 0000000..63d9d00 Binary files /dev/null and b/src/assets/images/index_icon_2.png differ diff --git a/src/assets/images/index_icon_2_2.png b/src/assets/images/index_icon_2_2.png new file mode 100644 index 0000000..d353b87 Binary files /dev/null and b/src/assets/images/index_icon_2_2.png differ diff --git a/src/assets/images/index_icon_3.png b/src/assets/images/index_icon_3.png new file mode 100644 index 0000000..537c24f Binary files /dev/null and b/src/assets/images/index_icon_3.png differ diff --git a/src/assets/images/index_icon_4.png b/src/assets/images/index_icon_4.png new file mode 100644 index 0000000..e4fde09 Binary files /dev/null and b/src/assets/images/index_icon_4.png differ diff --git a/src/assets/images/index_icon_4_1.png b/src/assets/images/index_icon_4_1.png new file mode 100644 index 0000000..cd62356 Binary files /dev/null and b/src/assets/images/index_icon_4_1.png differ diff --git a/src/assets/images/index_icon_5.png b/src/assets/images/index_icon_5.png new file mode 100644 index 0000000..cc76599 Binary files /dev/null and b/src/assets/images/index_icon_5.png differ diff --git a/src/assets/images/index_icon_6.png b/src/assets/images/index_icon_6.png new file mode 100644 index 0000000..bd7f950 Binary files /dev/null and b/src/assets/images/index_icon_6.png differ diff --git a/src/assets/images/index_icon_7.png b/src/assets/images/index_icon_7.png new file mode 100644 index 0000000..9df947d Binary files /dev/null and b/src/assets/images/index_icon_7.png differ diff --git a/src/assets/images/invitation.png b/src/assets/images/invitation.png new file mode 100644 index 0000000..183a516 Binary files /dev/null and b/src/assets/images/invitation.png differ diff --git a/src/assets/images/invitation_agent_apply.png b/src/assets/images/invitation_agent_apply.png new file mode 100644 index 0000000..63fff5c Binary files /dev/null and b/src/assets/images/invitation_agent_apply.png differ diff --git a/src/assets/images/llqdk.jpg b/src/assets/images/llqdk.jpg new file mode 100644 index 0000000..2966112 Binary files /dev/null and b/src/assets/images/llqdk.jpg differ diff --git a/src/assets/images/login_bg.png b/src/assets/images/login_bg.png new file mode 100644 index 0000000..977de0e Binary files /dev/null and b/src/assets/images/login_bg.png differ diff --git a/src/assets/images/logo.png b/src/assets/images/logo.png new file mode 100644 index 0000000..af1fe9c Binary files /dev/null and b/src/assets/images/logo.png differ diff --git a/src/assets/images/mxcl_icon.svg b/src/assets/images/mxcl_icon.svg new file mode 100644 index 0000000..c21e26a --- /dev/null +++ b/src/assets/images/mxcl_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/pendding.svg b/src/assets/images/pendding.svg new file mode 100644 index 0000000..2a182b1 --- /dev/null +++ b/src/assets/images/pendding.svg @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/promote_bg.png b/src/assets/images/promote_bg.png new file mode 100644 index 0000000..9087024 Binary files /dev/null and b/src/assets/images/promote_bg.png differ diff --git a/src/assets/images/public_security_record_icon.png b/src/assets/images/public_security_record_icon.png new file mode 100644 index 0000000..6fe667f Binary files /dev/null and b/src/assets/images/public_security_record_icon.png differ diff --git a/src/assets/images/qyss_icon.svg b/src/assets/images/qyss_icon.svg new file mode 100644 index 0000000..d460c08 --- /dev/null +++ b/src/assets/images/qyss_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/rchy_icon.svg b/src/assets/images/rchy_icon.svg new file mode 100644 index 0000000..4c67a50 --- /dev/null +++ b/src/assets/images/rchy_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/sfzeys_icon.svg b/src/assets/images/sfzeys_icon.svg new file mode 100644 index 0000000..284a11b --- /dev/null +++ b/src/assets/images/sfzeys_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/sjeck_icon.svg b/src/assets/images/sjeck_icon.svg new file mode 100644 index 0000000..55ceaef --- /dev/null +++ b/src/assets/images/sjeck_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/sjeys_icon.svg b/src/assets/images/sjeys_icon.svg new file mode 100644 index 0000000..c4b56a4 --- /dev/null +++ b/src/assets/images/sjeys_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/sjhmfx_icon.svg b/src/assets/images/sjhmfx_icon.svg new file mode 100644 index 0000000..836f8c2 --- /dev/null +++ b/src/assets/images/sjhmfx_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/sjsys_icon.svg b/src/assets/images/sjsys_icon.svg new file mode 100644 index 0000000..3cd4a58 --- /dev/null +++ b/src/assets/images/sjsys_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/sjzwsc_icon.svg b/src/assets/images/sjzwsc_icon.svg new file mode 100644 index 0000000..8fd2103 --- /dev/null +++ b/src/assets/images/sjzwsc_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/srhy_icon.svg b/src/assets/images/srhy_icon.svg new file mode 100644 index 0000000..1588794 --- /dev/null +++ b/src/assets/images/srhy_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/tg_qrcode_1.png b/src/assets/images/tg_qrcode_1.png new file mode 100644 index 0000000..1157bb4 Binary files /dev/null and b/src/assets/images/tg_qrcode_1.png differ diff --git a/src/assets/images/tg_qrcode_2.jpg b/src/assets/images/tg_qrcode_2.jpg new file mode 100644 index 0000000..070d849 Binary files /dev/null and b/src/assets/images/tg_qrcode_2.jpg differ diff --git a/src/assets/images/tg_qrcode_3.jpg b/src/assets/images/tg_qrcode_3.jpg new file mode 100644 index 0000000..2c296cb Binary files /dev/null and b/src/assets/images/tg_qrcode_3.jpg differ diff --git a/src/assets/images/tg_qrcode_4.jpg b/src/assets/images/tg_qrcode_4.jpg new file mode 100644 index 0000000..9615b9d Binary files /dev/null and b/src/assets/images/tg_qrcode_4.jpg differ diff --git a/src/assets/images/tg_qrcode_5.jpg b/src/assets/images/tg_qrcode_5.jpg new file mode 100644 index 0000000..753a147 Binary files /dev/null and b/src/assets/images/tg_qrcode_5.jpg differ diff --git a/src/assets/images/tg_qrcode_6.jpg b/src/assets/images/tg_qrcode_6.jpg new file mode 100644 index 0000000..e093d19 Binary files /dev/null and b/src/assets/images/tg_qrcode_6.jpg differ diff --git a/src/assets/images/tg_qrcode_7.jpg b/src/assets/images/tg_qrcode_7.jpg new file mode 100644 index 0000000..0a53d17 Binary files /dev/null and b/src/assets/images/tg_qrcode_7.jpg differ diff --git a/src/assets/images/tg_qrcode_8.jpg b/src/assets/images/tg_qrcode_8.jpg new file mode 100644 index 0000000..142d87a Binary files /dev/null and b/src/assets/images/tg_qrcode_8.jpg differ diff --git a/src/assets/images/vip_banner.png b/src/assets/images/vip_banner.png new file mode 100644 index 0000000..5de629d Binary files /dev/null and b/src/assets/images/vip_banner.png differ diff --git a/src/assets/images/vip_bg.png b/src/assets/images/vip_bg.png new file mode 100644 index 0000000..0a30280 Binary files /dev/null and b/src/assets/images/vip_bg.png differ diff --git a/src/assets/images/xlhy_icon.svg b/src/assets/images/xlhy_icon.svg new file mode 100644 index 0000000..e0d7292 --- /dev/null +++ b/src/assets/images/xlhy_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/xunihaoma_icon.svg b/src/assets/images/xunihaoma_icon.svg new file mode 100644 index 0000000..55ceaef --- /dev/null +++ b/src/assets/images/xunihaoma_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/yhk4ys_icon.svg b/src/assets/images/yhk4ys_icon.svg new file mode 100644 index 0000000..7c7549f --- /dev/null +++ b/src/assets/images/yhk4ys_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/yhkhmd_icon.svg b/src/assets/images/yhkhmd_icon.svg new file mode 100644 index 0000000..a9707df --- /dev/null +++ b/src/assets/images/yhkhmd_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/yhksys_icon.svg b/src/assets/images/yhksys_icon.svg new file mode 100644 index 0000000..bbfbc02 --- /dev/null +++ b/src/assets/images/yhksys_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/yq_qrcode_1.png b/src/assets/images/yq_qrcode_1.png new file mode 100644 index 0000000..d8d4fcc Binary files /dev/null and b/src/assets/images/yq_qrcode_1.png differ diff --git a/src/assets/images/zrrsczt_icon.svg b/src/assets/images/zrrsczt_icon.svg new file mode 100644 index 0000000..64d75cb --- /dev/null +++ b/src/assets/images/zrrsczt_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/main.css b/src/assets/main.css new file mode 100644 index 0000000..09ef77a --- /dev/null +++ b/src/assets/main.css @@ -0,0 +1,29 @@ +@import "./base.css"; +@import "./nprogress.css"; +@tailwind base; +@tailwind components; +@tailwind utilities; +#app { + margin: 0 auto; + font-weight: normal; +} + +a, +.green { + text-decoration: none; + color: hsla(160, 100%, 37%, 1); + transition: 0.4s; + padding: 3px; +} + +@media (hover: hover) { + a:hover { + background-color: hsla(160, 100%, 37%, 0.2); + } +} +.card { + @apply shadow rounded-xl bg-white p-6; +} +.ltitle { + @apply mx-auto mt-2 w-64 border rounded-3xl bg-gradient-to-r from-blue-400 via-green-500 to-teal-500 py-2 text-center text-white font-bold; +} diff --git a/src/assets/nprogress.css b/src/assets/nprogress.css new file mode 100644 index 0000000..ee5ce3b --- /dev/null +++ b/src/assets/nprogress.css @@ -0,0 +1,10 @@ +/* 进度条颜色 */ +#nprogress .bar { + background: #29d; /* 修改为你想要的颜色 */ + height: 4px; /* 修改高度 */ +} + +/* 圆圈颜色 */ +#nprogress .peg { + box-shadow: 0 0 10px #29d, 0 0 5px #29d; +} diff --git a/src/assets/uni-webview.js b/src/assets/uni-webview.js new file mode 100644 index 0000000..a3ae2b9 --- /dev/null +++ b/src/assets/uni-webview.js @@ -0,0 +1 @@ +!function (e, n) { "object" == typeof exports && "undefined" != typeof module ? module.exports = n() : "function" == typeof define && define.amd ? define(n) : (e = e || self).uni = n() }(this, (function () { "use strict"; try { var e = {}; Object.defineProperty(e, "passive", { get: function () { !0 } }), window.addEventListener("test-passive", null, e) } catch (e) { } var n = Object.prototype.hasOwnProperty; function i(e, i) { return n.call(e, i) } var t = []; function r() { return window.__dcloud_weex_postMessage || window.__dcloud_weex_ } var o = function (e, n) { var i = { options: { timestamp: +new Date }, name: e, arg: n }; if (r()) { if ("postMessage" === e) { var o = { data: [n] }; return window.__dcloud_weex_postMessage ? window.__dcloud_weex_postMessage(o) : window.__dcloud_weex_.postMessage(JSON.stringify(o)) } var a = { type: "WEB_INVOKE_APPSERVICE", args: { data: i, webviewIds: t } }; window.__dcloud_weex_postMessage ? window.__dcloud_weex_postMessageToService(a) : window.__dcloud_weex_.postMessageToService(JSON.stringify(a)) } if (!window.plus) return window.parent.postMessage({ type: "WEB_INVOKE_APPSERVICE", data: i, pageId: "" }, "*"); if (0 === t.length) { var d = plus.webview.currentWebview(); if (!d) throw new Error("plus.webview.currentWebview() is undefined"); var s = d.parent(), w = ""; w = s ? s.id : d.id, t.push(w) } if (plus.webview.getWebviewById("__uniapp__service")) plus.webview.postMessageToUniNView({ type: "WEB_INVOKE_APPSERVICE", args: { data: i, webviewIds: t } }, "__uniapp__service"); else { var u = JSON.stringify(i); plus.webview.getLaunchWebview().evalJS('UniPlusBridge.subscribeHandler("'.concat("WEB_INVOKE_APPSERVICE", '",').concat(u, ",").concat(JSON.stringify(t), ");")) } }, a = { navigateTo: function () { var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, n = e.url; o("navigateTo", { url: encodeURI(n) }) }, navigateBack: function () { var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, n = e.delta; o("navigateBack", { delta: parseInt(n) || 1 }) }, switchTab: function () { var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, n = e.url; o("switchTab", { url: encodeURI(n) }) }, reLaunch: function () { var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, n = e.url; o("reLaunch", { url: encodeURI(n) }) }, redirectTo: function () { var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, n = e.url; o("redirectTo", { url: encodeURI(n) }) }, getEnv: function (e) { r() ? e({ nvue: !0 }) : window.plus ? e({ plus: !0 }) : e({ h5: !0 }) }, postMessage: function () { var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; o("postMessage", e.data || {}) } }, d = /uni-app/i.test(navigator.userAgent), s = /Html5Plus/i.test(navigator.userAgent), w = /complete|loaded|interactive/; var u = window.my && navigator.userAgent.indexOf(["t", "n", "e", "i", "l", "C", "y", "a", "p", "i", "l", "A"].reverse().join("")) > -1; var g = window.swan && window.swan.webView && /swan/i.test(navigator.userAgent); var v = window.qq && window.qq.miniProgram && /QQ/i.test(navigator.userAgent) && /miniProgram/i.test(navigator.userAgent); var c = window.tt && window.tt.miniProgram && /toutiaomicroapp/i.test(navigator.userAgent); var m = window.wx && window.wx.miniProgram && /micromessenger/i.test(navigator.userAgent) && /miniProgram/i.test(navigator.userAgent); var p = window.qa && /quickapp/i.test(navigator.userAgent); var f = window.ks && window.ks.miniProgram && /micromessenger/i.test(navigator.userAgent) && /miniProgram/i.test(navigator.userAgent); var l = window.tt && window.tt.miniProgram && /Lark|Feishu/i.test(navigator.userAgent); var _ = window.jd && window.jd.miniProgram && /micromessenger/i.test(navigator.userAgent) && /miniProgram/i.test(navigator.userAgent); var E = window.xhs && window.xhs.miniProgram && /xhsminiapp/i.test(navigator.userAgent); for (var h, P = function () { window.UniAppJSBridge = !0, document.dispatchEvent(new CustomEvent("UniAppJSBridgeReady", { bubbles: !0, cancelable: !0 })) }, b = [function (e) { if (d || s) return window.__dcloud_weex_postMessage || window.__dcloud_weex_ ? document.addEventListener("DOMContentLoaded", e) : window.plus && w.test(document.readyState) ? setTimeout(e, 0) : document.addEventListener("plusready", e), a }, function (e) { if (m) return window.WeixinJSBridge && window.WeixinJSBridge.invoke ? setTimeout(e, 0) : document.addEventListener("WeixinJSBridgeReady", e), window.wx.miniProgram }, function (e) { if (v) return window.QQJSBridge && window.QQJSBridge.invoke ? setTimeout(e, 0) : document.addEventListener("QQJSBridgeReady", e), window.qq.miniProgram }, function (e) { if (u) { document.addEventListener("DOMContentLoaded", e); var n = window.my; return { navigateTo: n.navigateTo, navigateBack: n.navigateBack, switchTab: n.switchTab, reLaunch: n.reLaunch, redirectTo: n.redirectTo, postMessage: n.postMessage, getEnv: n.getEnv } } }, function (e) { if (g) return document.addEventListener("DOMContentLoaded", e), window.swan.webView }, function (e) { if (c) return document.addEventListener("DOMContentLoaded", e), window.tt.miniProgram }, function (e) { if (p) { window.QaJSBridge && window.QaJSBridge.invoke ? setTimeout(e, 0) : document.addEventListener("QaJSBridgeReady", e); var n = window.qa; return { navigateTo: n.navigateTo, navigateBack: n.navigateBack, switchTab: n.switchTab, reLaunch: n.reLaunch, redirectTo: n.redirectTo, postMessage: n.postMessage, getEnv: n.getEnv } } }, function (e) { if (f) return window.WeixinJSBridge && window.WeixinJSBridge.invoke ? setTimeout(e, 0) : document.addEventListener("WeixinJSBridgeReady", e), window.ks.miniProgram }, function (e) { if (l) return document.addEventListener("DOMContentLoaded", e), window.tt.miniProgram }, function (e) { if (_) return window.JDJSBridgeReady && window.JDJSBridgeReady.invoke ? setTimeout(e, 0) : document.addEventListener("JDJSBridgeReady", e), window.jd.miniProgram }, function (e) { if (E) return window.xhs.miniProgram }, function (e) { return document.addEventListener("DOMContentLoaded", e), a }], y = 0; y < b.length && !(h = b[y](P)); y++); h || (h = {}); var B = "undefined" != typeof uni ? uni : {}; if (!B.navigateTo) for (var S in h) i(h, S) && (B[S] = h[S]); return B.webView = h, B })); \ No newline at end of file diff --git a/src/auto-imports.d.ts b/src/auto-imports.d.ts new file mode 100644 index 0000000..ff20f3a --- /dev/null +++ b/src/auto-imports.d.ts @@ -0,0 +1,315 @@ +/* eslint-disable */ +/* prettier-ignore */ +// @ts-nocheck +// noinspection JSUnusedGlobalSymbols +// Generated by unplugin-auto-import +// biome-ignore lint: disable +export {} +declare global { + const EffectScope: typeof import('vue')['EffectScope'] + const VanTabbar: typeof import('vant/es')['Tabbar'] + const VanTabbarItem: typeof import('vant/es')['TabbarItem'] + const asyncComputed: typeof import('@vueuse/core')['asyncComputed'] + const autoResetRef: typeof import('@vueuse/core')['autoResetRef'] + const closeToast: typeof import('vant/es')['closeToast'] + const computed: typeof import('vue')['computed'] + const computedAsync: typeof import('@vueuse/core')['computedAsync'] + const computedEager: typeof import('@vueuse/core')['computedEager'] + const computedInject: typeof import('@vueuse/core')['computedInject'] + const computedWithControl: typeof import('@vueuse/core')['computedWithControl'] + const controlledComputed: typeof import('@vueuse/core')['controlledComputed'] + const controlledRef: typeof import('@vueuse/core')['controlledRef'] + const createApp: typeof import('vue')['createApp'] + const createEventHook: typeof import('@vueuse/core')['createEventHook'] + const createGlobalState: typeof import('@vueuse/core')['createGlobalState'] + const createInjectionState: typeof import('@vueuse/core')['createInjectionState'] + const createReactiveFn: typeof import('@vueuse/core')['createReactiveFn'] + const createReusableTemplate: typeof import('@vueuse/core')['createReusableTemplate'] + const createSharedComposable: typeof import('@vueuse/core')['createSharedComposable'] + const createTemplatePromise: typeof import('@vueuse/core')['createTemplatePromise'] + const createUnrefFn: typeof import('@vueuse/core')['createUnrefFn'] + const customRef: typeof import('vue')['customRef'] + const debouncedRef: typeof import('@vueuse/core')['debouncedRef'] + const debouncedWatch: typeof import('@vueuse/core')['debouncedWatch'] + const defineAsyncComponent: typeof import('vue')['defineAsyncComponent'] + const defineComponent: typeof import('vue')['defineComponent'] + const eagerComputed: typeof import('@vueuse/core')['eagerComputed'] + const effectScope: typeof import('vue')['effectScope'] + const extendRef: typeof import('@vueuse/core')['extendRef'] + const getCurrentInstance: typeof import('vue')['getCurrentInstance'] + const getCurrentScope: typeof import('vue')['getCurrentScope'] + const h: typeof import('vue')['h'] + const ignorableWatch: typeof import('@vueuse/core')['ignorableWatch'] + const inject: typeof import('vue')['inject'] + const injectLocal: typeof import('@vueuse/core')['injectLocal'] + const isDefined: typeof import('@vueuse/core')['isDefined'] + const isProxy: typeof import('vue')['isProxy'] + const isReactive: typeof import('vue')['isReactive'] + const isReadonly: typeof import('vue')['isReadonly'] + const isRef: typeof import('vue')['isRef'] + const makeDestructurable: typeof import('@vueuse/core')['makeDestructurable'] + const markRaw: typeof import('vue')['markRaw'] + const nextTick: typeof import('vue')['nextTick'] + const onActivated: typeof import('vue')['onActivated'] + const onBeforeMount: typeof import('vue')['onBeforeMount'] + const onBeforeRouteLeave: typeof import('vue-router')['onBeforeRouteLeave'] + const onBeforeRouteUpdate: typeof import('vue-router')['onBeforeRouteUpdate'] + const onBeforeUnmount: typeof import('vue')['onBeforeUnmount'] + const onBeforeUpdate: typeof import('vue')['onBeforeUpdate'] + const onClickOutside: typeof import('@vueuse/core')['onClickOutside'] + const onDeactivated: typeof import('vue')['onDeactivated'] + const onErrorCaptured: typeof import('vue')['onErrorCaptured'] + const onKeyStroke: typeof import('@vueuse/core')['onKeyStroke'] + const onLongPress: typeof import('@vueuse/core')['onLongPress'] + const onMounted: typeof import('vue')['onMounted'] + const onRenderTracked: typeof import('vue')['onRenderTracked'] + const onRenderTriggered: typeof import('vue')['onRenderTriggered'] + const onScopeDispose: typeof import('vue')['onScopeDispose'] + const onServerPrefetch: typeof import('vue')['onServerPrefetch'] + const onStartTyping: typeof import('@vueuse/core')['onStartTyping'] + const onUnmounted: typeof import('vue')['onUnmounted'] + const onUpdated: typeof import('vue')['onUpdated'] + const onWatcherCleanup: typeof import('vue')['onWatcherCleanup'] + const pausableWatch: typeof import('@vueuse/core')['pausableWatch'] + const provide: typeof import('vue')['provide'] + const provideLocal: typeof import('@vueuse/core')['provideLocal'] + const reactify: typeof import('@vueuse/core')['reactify'] + const reactifyObject: typeof import('@vueuse/core')['reactifyObject'] + const reactive: typeof import('vue')['reactive'] + const reactiveComputed: typeof import('@vueuse/core')['reactiveComputed'] + const reactiveOmit: typeof import('@vueuse/core')['reactiveOmit'] + const reactivePick: typeof import('@vueuse/core')['reactivePick'] + const readonly: typeof import('vue')['readonly'] + const ref: typeof import('vue')['ref'] + const refAutoReset: typeof import('@vueuse/core')['refAutoReset'] + const refDebounced: typeof import('@vueuse/core')['refDebounced'] + const refDefault: typeof import('@vueuse/core')['refDefault'] + const refThrottled: typeof import('@vueuse/core')['refThrottled'] + const refWithControl: typeof import('@vueuse/core')['refWithControl'] + const resolveComponent: typeof import('vue')['resolveComponent'] + const resolveRef: typeof import('@vueuse/core')['resolveRef'] + const resolveUnref: typeof import('@vueuse/core')['resolveUnref'] + const shallowReactive: typeof import('vue')['shallowReactive'] + const shallowReadonly: typeof import('vue')['shallowReadonly'] + const shallowRef: typeof import('vue')['shallowRef'] + const showLoadingToast: typeof import('vant/es')['showLoadingToast'] + const showToast: typeof import('vant/es')['showToast'] + const syncRef: typeof import('@vueuse/core')['syncRef'] + const syncRefs: typeof import('@vueuse/core')['syncRefs'] + const templateRef: typeof import('@vueuse/core')['templateRef'] + const throttledRef: typeof import('@vueuse/core')['throttledRef'] + const throttledWatch: typeof import('@vueuse/core')['throttledWatch'] + const toRaw: typeof import('vue')['toRaw'] + const toReactive: typeof import('@vueuse/core')['toReactive'] + const toRef: typeof import('vue')['toRef'] + const toRefs: typeof import('vue')['toRefs'] + const toValue: typeof import('vue')['toValue'] + const triggerRef: typeof import('vue')['triggerRef'] + const tryOnBeforeMount: typeof import('@vueuse/core')['tryOnBeforeMount'] + const tryOnBeforeUnmount: typeof import('@vueuse/core')['tryOnBeforeUnmount'] + const tryOnMounted: typeof import('@vueuse/core')['tryOnMounted'] + const tryOnScopeDispose: typeof import('@vueuse/core')['tryOnScopeDispose'] + const tryOnUnmounted: typeof import('@vueuse/core')['tryOnUnmounted'] + const unref: typeof import('vue')['unref'] + const unrefElement: typeof import('@vueuse/core')['unrefElement'] + const until: typeof import('@vueuse/core')['until'] + const useActiveElement: typeof import('@vueuse/core')['useActiveElement'] + const useAgent: typeof import('./composables/useAgent.js')['useAgent'] + const useAgentStore: typeof import('./stores/agentStore.js')['useAgentStore'] + const useAnimate: typeof import('@vueuse/core')['useAnimate'] + const useApiFetch: typeof import('./composables/useApiFetch.js')['default'] + const useArrayDifference: typeof import('@vueuse/core')['useArrayDifference'] + const useArrayEvery: typeof import('@vueuse/core')['useArrayEvery'] + const useArrayFilter: typeof import('@vueuse/core')['useArrayFilter'] + const useArrayFind: typeof import('@vueuse/core')['useArrayFind'] + const useArrayFindIndex: typeof import('@vueuse/core')['useArrayFindIndex'] + const useArrayFindLast: typeof import('@vueuse/core')['useArrayFindLast'] + const useArrayIncludes: typeof import('@vueuse/core')['useArrayIncludes'] + const useArrayJoin: typeof import('@vueuse/core')['useArrayJoin'] + const useArrayMap: typeof import('@vueuse/core')['useArrayMap'] + const useArrayReduce: typeof import('@vueuse/core')['useArrayReduce'] + const useArraySome: typeof import('@vueuse/core')['useArraySome'] + const useArrayUnique: typeof import('@vueuse/core')['useArrayUnique'] + const useAsyncQueue: typeof import('@vueuse/core')['useAsyncQueue'] + const useAsyncState: typeof import('@vueuse/core')['useAsyncState'] + const useAttrs: typeof import('vue')['useAttrs'] + const useBase64: typeof import('@vueuse/core')['useBase64'] + const useBattery: typeof import('@vueuse/core')['useBattery'] + const useBluetooth: typeof import('@vueuse/core')['useBluetooth'] + const useBreakpoints: typeof import('@vueuse/core')['useBreakpoints'] + const useBroadcastChannel: typeof import('@vueuse/core')['useBroadcastChannel'] + const useBrowserLocation: typeof import('@vueuse/core')['useBrowserLocation'] + const useCached: typeof import('@vueuse/core')['useCached'] + const useClipboard: typeof import('@vueuse/core')['useClipboard'] + const useClipboardItems: typeof import('@vueuse/core')['useClipboardItems'] + const useCloned: typeof import('@vueuse/core')['useCloned'] + const useColorMode: typeof import('@vueuse/core')['useColorMode'] + const useConfirmDialog: typeof import('@vueuse/core')['useConfirmDialog'] + const useCounter: typeof import('@vueuse/core')['useCounter'] + const useCounterStore: typeof import('./stores/counter.js')['useCounterStore'] + const useCssModule: typeof import('vue')['useCssModule'] + const useCssVar: typeof import('@vueuse/core')['useCssVar'] + const useCssVars: typeof import('vue')['useCssVars'] + const useCurrentElement: typeof import('@vueuse/core')['useCurrentElement'] + const useCycleList: typeof import('@vueuse/core')['useCycleList'] + const useDark: typeof import('@vueuse/core')['useDark'] + const useDateFormat: typeof import('@vueuse/core')['useDateFormat'] + const useDebounce: typeof import('@vueuse/core')['useDebounce'] + const useDebounceFn: typeof import('@vueuse/core')['useDebounceFn'] + const useDebouncedRefHistory: typeof import('@vueuse/core')['useDebouncedRefHistory'] + const useDeviceMotion: typeof import('@vueuse/core')['useDeviceMotion'] + const useDeviceOrientation: typeof import('@vueuse/core')['useDeviceOrientation'] + const useDevicePixelRatio: typeof import('@vueuse/core')['useDevicePixelRatio'] + const useDevicesList: typeof import('@vueuse/core')['useDevicesList'] + const useDialogStore: typeof import('./stores/dialogStore.js')['useDialogStore'] + const useDisplayMedia: typeof import('@vueuse/core')['useDisplayMedia'] + const useDocumentVisibility: typeof import('@vueuse/core')['useDocumentVisibility'] + const useDraggable: typeof import('@vueuse/core')['useDraggable'] + const useDropZone: typeof import('@vueuse/core')['useDropZone'] + const useElementBounding: typeof import('@vueuse/core')['useElementBounding'] + const useElementByPoint: typeof import('@vueuse/core')['useElementByPoint'] + const useElementHover: typeof import('@vueuse/core')['useElementHover'] + const useElementSize: typeof import('@vueuse/core')['useElementSize'] + const useElementVisibility: typeof import('@vueuse/core')['useElementVisibility'] + const useEnv: typeof import('./composables/useEnv.js')['useEnv'] + const useEnvironment: typeof import('./composables/useEnvironment.js')['useEnvironment'] + const useEventBus: typeof import('@vueuse/core')['useEventBus'] + const useEventListener: typeof import('@vueuse/core')['useEventListener'] + const useEventSource: typeof import('@vueuse/core')['useEventSource'] + const useEyeDropper: typeof import('@vueuse/core')['useEyeDropper'] + const useFavicon: typeof import('@vueuse/core')['useFavicon'] + const useFetch: typeof import('@vueuse/core')['useFetch'] + const useFileDialog: typeof import('@vueuse/core')['useFileDialog'] + const useFileSystemAccess: typeof import('@vueuse/core')['useFileSystemAccess'] + const useFocus: typeof import('@vueuse/core')['useFocus'] + const useFocusWithin: typeof import('@vueuse/core')['useFocusWithin'] + const useFps: typeof import('@vueuse/core')['useFps'] + const useFullscreen: typeof import('@vueuse/core')['useFullscreen'] + const useGamepad: typeof import('@vueuse/core')['useGamepad'] + const useGeolocation: typeof import('@vueuse/core')['useGeolocation'] + const useHttp: typeof import('./composables/useHttp.js')['useHttp'] + const useId: typeof import('vue')['useId'] + const useIdle: typeof import('@vueuse/core')['useIdle'] + const useImage: typeof import('@vueuse/core')['useImage'] + const useInfiniteScroll: typeof import('@vueuse/core')['useInfiniteScroll'] + const useIntersectionObserver: typeof import('@vueuse/core')['useIntersectionObserver'] + const useInterval: typeof import('@vueuse/core')['useInterval'] + const useIntervalFn: typeof import('@vueuse/core')['useIntervalFn'] + const useKeyModifier: typeof import('@vueuse/core')['useKeyModifier'] + const useLastChanged: typeof import('@vueuse/core')['useLastChanged'] + const useLink: typeof import('vue-router')['useLink'] + const useLocalStorage: typeof import('@vueuse/core')['useLocalStorage'] + const useMagicKeys: typeof import('@vueuse/core')['useMagicKeys'] + const useManualRefHistory: typeof import('@vueuse/core')['useManualRefHistory'] + const useMediaControls: typeof import('@vueuse/core')['useMediaControls'] + const useMediaQuery: typeof import('@vueuse/core')['useMediaQuery'] + const useMemoize: typeof import('@vueuse/core')['useMemoize'] + const useMemory: typeof import('@vueuse/core')['useMemory'] + const useModel: typeof import('vue')['useModel'] + const useMounted: typeof import('@vueuse/core')['useMounted'] + const useMouse: typeof import('@vueuse/core')['useMouse'] + const useMouseInElement: typeof import('@vueuse/core')['useMouseInElement'] + const useMousePressed: typeof import('@vueuse/core')['useMousePressed'] + const useMutationObserver: typeof import('@vueuse/core')['useMutationObserver'] + const useNavigatorLanguage: typeof import('@vueuse/core')['useNavigatorLanguage'] + const useNetwork: typeof import('@vueuse/core')['useNetwork'] + const useNow: typeof import('@vueuse/core')['useNow'] + const useObjectUrl: typeof import('@vueuse/core')['useObjectUrl'] + const useOffsetPagination: typeof import('@vueuse/core')['useOffsetPagination'] + const useOnline: typeof import('@vueuse/core')['useOnline'] + const usePageLeave: typeof import('@vueuse/core')['usePageLeave'] + const useParallax: typeof import('@vueuse/core')['useParallax'] + const useParentElement: typeof import('@vueuse/core')['useParentElement'] + const usePerformanceObserver: typeof import('@vueuse/core')['usePerformanceObserver'] + const usePermission: typeof import('@vueuse/core')['usePermission'] + const usePointer: typeof import('@vueuse/core')['usePointer'] + const usePointerLock: typeof import('@vueuse/core')['usePointerLock'] + const usePointerSwipe: typeof import('@vueuse/core')['usePointerSwipe'] + const usePreferredColorScheme: typeof import('@vueuse/core')['usePreferredColorScheme'] + const usePreferredContrast: typeof import('@vueuse/core')['usePreferredContrast'] + const usePreferredDark: typeof import('@vueuse/core')['usePreferredDark'] + const usePreferredLanguages: typeof import('@vueuse/core')['usePreferredLanguages'] + const usePreferredReducedMotion: typeof import('@vueuse/core')['usePreferredReducedMotion'] + const usePrevious: typeof import('@vueuse/core')['usePrevious'] + const useRafFn: typeof import('@vueuse/core')['useRafFn'] + const useRefHistory: typeof import('@vueuse/core')['useRefHistory'] + const useResizeObserver: typeof import('@vueuse/core')['useResizeObserver'] + const useRoute: typeof import('vue-router')['useRoute'] + const useRouter: typeof import('vue-router')['useRouter'] + const useSEO: typeof import('./composables/useSEO.js')['useSEO'] + const useScreenOrientation: typeof import('@vueuse/core')['useScreenOrientation'] + const useScreenSafeArea: typeof import('@vueuse/core')['useScreenSafeArea'] + const useScriptTag: typeof import('@vueuse/core')['useScriptTag'] + const useScroll: typeof import('@vueuse/core')['useScroll'] + const useScrollLock: typeof import('@vueuse/core')['useScrollLock'] + const useSessionStorage: typeof import('@vueuse/core')['useSessionStorage'] + const useShare: typeof import('@vueuse/core')['useShare'] + const useSlots: typeof import('vue')['useSlots'] + const useSorted: typeof import('@vueuse/core')['useSorted'] + const useSpeechRecognition: typeof import('@vueuse/core')['useSpeechRecognition'] + const useSpeechSynthesis: typeof import('@vueuse/core')['useSpeechSynthesis'] + const useStepper: typeof import('@vueuse/core')['useStepper'] + const useStorage: typeof import('@vueuse/core')['useStorage'] + const useStorageAsync: typeof import('@vueuse/core')['useStorageAsync'] + const useStyleTag: typeof import('@vueuse/core')['useStyleTag'] + const useSupported: typeof import('@vueuse/core')['useSupported'] + const useSwipe: typeof import('@vueuse/core')['useSwipe'] + const useTemplateRef: typeof import('vue')['useTemplateRef'] + const useTemplateRefsList: typeof import('@vueuse/core')['useTemplateRefsList'] + const useTextDirection: typeof import('@vueuse/core')['useTextDirection'] + const useTextSelection: typeof import('@vueuse/core')['useTextSelection'] + const useTextareaAutosize: typeof import('@vueuse/core')['useTextareaAutosize'] + const useThrottle: typeof import('@vueuse/core')['useThrottle'] + const useThrottleFn: typeof import('@vueuse/core')['useThrottleFn'] + const useThrottledRefHistory: typeof import('@vueuse/core')['useThrottledRefHistory'] + const useTimeAgo: typeof import('@vueuse/core')['useTimeAgo'] + const useTimeout: typeof import('@vueuse/core')['useTimeout'] + const useTimeoutFn: typeof import('@vueuse/core')['useTimeoutFn'] + const useTimeoutPoll: typeof import('@vueuse/core')['useTimeoutPoll'] + const useTimestamp: typeof import('@vueuse/core')['useTimestamp'] + const useTitle: typeof import('@vueuse/core')['useTitle'] + const useToNumber: typeof import('@vueuse/core')['useToNumber'] + const useToString: typeof import('@vueuse/core')['useToString'] + const useToggle: typeof import('@vueuse/core')['useToggle'] + const useTransition: typeof import('@vueuse/core')['useTransition'] + const useUni: typeof import('./composables/useUni.js')['useUni'] + const useUrlSearchParams: typeof import('@vueuse/core')['useUrlSearchParams'] + const useUserMedia: typeof import('@vueuse/core')['useUserMedia'] + const useUserStore: typeof import('./stores/userStore.js')['useUserStore'] + const useVModel: typeof import('@vueuse/core')['useVModel'] + const useVModels: typeof import('@vueuse/core')['useVModels'] + const useVibrate: typeof import('@vueuse/core')['useVibrate'] + const useVirtualList: typeof import('@vueuse/core')['useVirtualList'] + const useWakeLock: typeof import('@vueuse/core')['useWakeLock'] + const useWebNotification: typeof import('@vueuse/core')['useWebNotification'] + const useWebSocket: typeof import('@vueuse/core')['useWebSocket'] + const useWebView: typeof import('./composables/useWebView.js')['useWebView'] + const useWebWorker: typeof import('@vueuse/core')['useWebWorker'] + const useWebWorkerFn: typeof import('@vueuse/core')['useWebWorkerFn'] + const useWindowFocus: typeof import('@vueuse/core')['useWindowFocus'] + const useWindowScroll: typeof import('@vueuse/core')['useWindowScroll'] + const useWindowSize: typeof import('@vueuse/core')['useWindowSize'] + const useZoomAdapter: typeof import('./composables/useZoomAdapter.js')['useZoomAdapter'] + const watch: typeof import('vue')['watch'] + const watchArray: typeof import('@vueuse/core')['watchArray'] + const watchAtMost: typeof import('@vueuse/core')['watchAtMost'] + const watchDebounced: typeof import('@vueuse/core')['watchDebounced'] + const watchDeep: typeof import('@vueuse/core')['watchDeep'] + const watchEffect: typeof import('vue')['watchEffect'] + const watchIgnorable: typeof import('@vueuse/core')['watchIgnorable'] + const watchImmediate: typeof import('@vueuse/core')['watchImmediate'] + const watchOnce: typeof import('@vueuse/core')['watchOnce'] + const watchPausable: typeof import('@vueuse/core')['watchPausable'] + const watchPostEffect: typeof import('vue')['watchPostEffect'] + const watchSyncEffect: typeof import('vue')['watchSyncEffect'] + const watchThrottled: typeof import('@vueuse/core')['watchThrottled'] + const watchTriggerable: typeof import('@vueuse/core')['watchTriggerable'] + const watchWithFilter: typeof import('@vueuse/core')['watchWithFilter'] + const whenever: typeof import('@vueuse/core')['whenever'] +} +// for type re-export +declare global { + // @ts-ignore + export type { Component, ComponentPublicInstance, ComputedRef, DirectiveBinding, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, MaybeRef, MaybeRefOrGetter, VNode, WritableComputedRef } from 'vue' + import('vue') +} diff --git a/src/components/AgentApplicationForm.vue b/src/components/AgentApplicationForm.vue new file mode 100644 index 0000000..920baa0 --- /dev/null +++ b/src/components/AgentApplicationForm.vue @@ -0,0 +1,256 @@ + + + diff --git a/src/components/Authorization.vue b/src/components/Authorization.vue new file mode 100644 index 0000000..292ed34 --- /dev/null +++ b/src/components/Authorization.vue @@ -0,0 +1,175 @@ + + + + diff --git a/src/components/BaseReport.vue b/src/components/BaseReport.vue new file mode 100644 index 0000000..8d7f4ba --- /dev/null +++ b/src/components/BaseReport.vue @@ -0,0 +1,754 @@ + + + + + diff --git a/src/components/BindPhoneDialog.vue b/src/components/BindPhoneDialog.vue new file mode 100644 index 0000000..0a59dee --- /dev/null +++ b/src/components/BindPhoneDialog.vue @@ -0,0 +1,256 @@ + + + + + diff --git a/src/components/CarNumberInput.vue b/src/components/CarNumberInput.vue new file mode 100644 index 0000000..6a8b173 --- /dev/null +++ b/src/components/CarNumberInput.vue @@ -0,0 +1,333 @@ + + + + + \ No newline at end of file diff --git a/src/components/ClickCaptcha.vue b/src/components/ClickCaptcha.vue new file mode 100644 index 0000000..89d64e4 --- /dev/null +++ b/src/components/ClickCaptcha.vue @@ -0,0 +1,391 @@ + + + + + diff --git a/src/components/GaugeChart.vue b/src/components/GaugeChart.vue new file mode 100644 index 0000000..8a5a3ed --- /dev/null +++ b/src/components/GaugeChart.vue @@ -0,0 +1,255 @@ + + + + + \ No newline at end of file diff --git a/src/components/InquireForm.vue b/src/components/InquireForm.vue new file mode 100644 index 0000000..a04557e --- /dev/null +++ b/src/components/InquireForm.vue @@ -0,0 +1,511 @@ + + + + + diff --git a/src/components/LButtonGroup.vue b/src/components/LButtonGroup.vue new file mode 100644 index 0000000..6415d96 --- /dev/null +++ b/src/components/LButtonGroup.vue @@ -0,0 +1,87 @@ + + + + + diff --git a/src/components/LEmpty.vue b/src/components/LEmpty.vue new file mode 100644 index 0000000..2d1a7fb --- /dev/null +++ b/src/components/LEmpty.vue @@ -0,0 +1,38 @@ + + + + + \ No newline at end of file diff --git a/src/components/LExpandCollapse.vue b/src/components/LExpandCollapse.vue new file mode 100644 index 0000000..74b2e37 --- /dev/null +++ b/src/components/LExpandCollapse.vue @@ -0,0 +1,55 @@ + + + + + diff --git a/src/components/LPendding.vue b/src/components/LPendding.vue new file mode 100644 index 0000000..a45cb25 --- /dev/null +++ b/src/components/LPendding.vue @@ -0,0 +1,79 @@ + + + + + diff --git a/src/components/LRemark.vue b/src/components/LRemark.vue new file mode 100644 index 0000000..5678b1f --- /dev/null +++ b/src/components/LRemark.vue @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/src/components/LTable.vue b/src/components/LTable.vue new file mode 100644 index 0000000..aa1e883 --- /dev/null +++ b/src/components/LTable.vue @@ -0,0 +1,98 @@ + + + + + diff --git a/src/components/LTitle.vue b/src/components/LTitle.vue new file mode 100644 index 0000000..41dfada --- /dev/null +++ b/src/components/LTitle.vue @@ -0,0 +1,58 @@ + + + + + diff --git a/src/components/Payment.vue b/src/components/Payment.vue new file mode 100644 index 0000000..ebeadf3 --- /dev/null +++ b/src/components/Payment.vue @@ -0,0 +1,173 @@ + + + + + diff --git a/src/components/PriceInputPopup.vue b/src/components/PriceInputPopup.vue new file mode 100644 index 0000000..839c856 --- /dev/null +++ b/src/components/PriceInputPopup.vue @@ -0,0 +1,161 @@ + + + + + \ No newline at end of file diff --git a/src/components/QRcode.vue b/src/components/QRcode.vue new file mode 100644 index 0000000..98b7f2e --- /dev/null +++ b/src/components/QRcode.vue @@ -0,0 +1,338 @@ + + + + + diff --git a/src/components/QrcodePop.vue b/src/components/QrcodePop.vue new file mode 100644 index 0000000..109d872 --- /dev/null +++ b/src/components/QrcodePop.vue @@ -0,0 +1,14 @@ + + + + + diff --git a/src/components/RealNameAuthDialog.vue b/src/components/RealNameAuthDialog.vue new file mode 100644 index 0000000..67c95b4 --- /dev/null +++ b/src/components/RealNameAuthDialog.vue @@ -0,0 +1,359 @@ + + + + + diff --git a/src/components/ShareReportButton.vue b/src/components/ShareReportButton.vue new file mode 100644 index 0000000..d57b3eb --- /dev/null +++ b/src/components/ShareReportButton.vue @@ -0,0 +1,116 @@ + + + + + diff --git a/src/components/VipBanner.vue b/src/components/VipBanner.vue new file mode 100644 index 0000000..750526e --- /dev/null +++ b/src/components/VipBanner.vue @@ -0,0 +1,18 @@ + + + + + diff --git a/src/components/WechatOverlay.vue b/src/components/WechatOverlay.vue new file mode 100644 index 0000000..5a6c6c5 --- /dev/null +++ b/src/components/WechatOverlay.vue @@ -0,0 +1,72 @@ + + + + + \ No newline at end of file diff --git a/src/composables/useApiFetch.js b/src/composables/useApiFetch.js new file mode 100644 index 0000000..0e8c604 --- /dev/null +++ b/src/composables/useApiFetch.js @@ -0,0 +1,95 @@ +// src/plugins/fetch.js +import { createFetch } from "@vueuse/core"; +import router from "@/router"; // 假设你使用 Vue Router +import { useUserStore } from "@/stores/userStore"; +import { useAgentStore } from "@/stores/agentStore"; +// 创建全局的 fetch 实例 +const useApiFetch = createFetch({ + baseUrl: "/api/v1", // 你的 API 基础路径 + options: { + async beforeFetch({ url, options }) { + showLoadingToast({ + message: "加载中...", + forbidClick: true, + duration: 0, // 设置为 0 表示不会自动关闭 + loadingType: "spinner", + }); + + const timestamp = Date.now(); + const separator = url.includes("?") ? "&" : "?"; // 判断是否已有参数 + url += `${separator}t=${timestamp}`; // 追加时间戳 + + // 在请求前添加通用的 Header,例如 Authorization + const token = localStorage.getItem("token"); + let platform = "h5"; + const userAgent = navigator.userAgent.toLowerCase(); + const isWechat = /micromessenger/.test(userAgent); + if (isWechat) { + platform = "wxh5"; + } + options.headers['X-Platform'] = platform + + if (token) { + options.headers = { + ...options.headers, + Authorization: `${token}`, + }; + } + return { url, options }; + }, + async afterFetch({ data, response }) { + closeToast(); + // 全局处理响应 + if (response.status === 401) { + // 清除本地存储的 token + localStorage.removeItem("token"); + localStorage.removeItem('refreshAfter') + localStorage.removeItem('accessExpire') + // 跳转到登录页 + router.replace("/login"); + } + + if (data.code !== 200) { + if (data.code === 100009) { + // 改进的存储管理 + localStorage.removeItem('token') + localStorage.removeItem('refreshAfter') + localStorage.removeItem('accessExpire') + localStorage.removeItem('userInfo') + localStorage.removeItem('agentInfo') + + // 重置状态 + const userStore = useUserStore(); + const agentStore = useAgentStore(); + userStore.resetUser() + agentStore.resetAgent() + location.reload() + + } + if (data.code !== 200002 && data.code !== 200003 && data.code !== 200004 && data.code !== 100009) { + showToast({ message: data.msg }); + } + } + return { data, response }; + }, + async onFetchError({ error, response }) { + console.log("error", error); + closeToast(); + if (response.status === 401) { + // 清除本地存储的 token + localStorage.removeItem("token"); + localStorage.removeItem('refreshAfter') + localStorage.removeItem('accessExpire') + // 跳转到登录页 + router.replace("/login"); + } else { + if (typeof error === "string") { + showToast({ message: error }); + } + } + return { error }; + }, + }, +}); + +export default useApiFetch; diff --git a/src/composables/useEnv.js b/src/composables/useEnv.js new file mode 100644 index 0000000..10c96c7 --- /dev/null +++ b/src/composables/useEnv.js @@ -0,0 +1,16 @@ +// src/composables/useEnv.js +import { ref, onMounted } from 'vue' + +// 创建一个全局的 ref +const isWeChat = ref(false) + +// 立即执行检测 +const userAgent = navigator.userAgent.toLowerCase() +const keywords = ['micromessenger', 'wechat'].map(key => key.toLowerCase()) +isWeChat.value = keywords.some(keyword => userAgent.includes(keyword)) + +export function useEnv() { + return { + isWeChat, + } +} diff --git a/src/composables/useHttp.js b/src/composables/useHttp.js new file mode 100644 index 0000000..78f455f --- /dev/null +++ b/src/composables/useHttp.js @@ -0,0 +1,27 @@ +import { useFetch, createFetch } from '@vueuse/core'; + +export function useHttp(url, options = {}, token) { + const fetch = createFetch(url, { + baseUrl: '/api/v1', + options: { + async beforeFetch({ url, options, cancel }) { + console.log("asdasd", options) + options.headers = { + ...options.headers, + Authorization: `${token}`, + } + return { + options, + } + }, + async afterFetch(ctx) { + console.log("ctx", ctx) + // if (ctx.data.code !== 200) { + // throw new Error(ctx.data.message || '请求失败'); + // } + return ctx; + }, + } + }) + return fetch(url) +} diff --git a/src/composables/useSEO.js b/src/composables/useSEO.js new file mode 100644 index 0000000..5967e17 --- /dev/null +++ b/src/composables/useSEO.js @@ -0,0 +1,197 @@ +import { ref, watch } from 'vue' +import { useRoute } from 'vue-router' + +export function useSEO() { + const route = useRoute() + + // 默认SEO信息 + const defaultSEO = { + title: '智能查 - 大数据风险报告 | 婚姻状况查询 | 个人信用 | 企业风险 | 免费代理', + description: '智能查,大数据风险报告查询与代理管理平台,提供婚姻状况查询、个人信用评估、人事背调、信贷风控、企业风险监测等服务,支持免费开通代理,助力个人与企业全方位风险管理。', + keywords: '大数据风险报告, 婚姻状况查询, 个人信用, 企业风险, 信贷风控, 人事背调, 大数据分析, 免费代理, 风险管控', + url: 'https://www.zhinengcha.cn' + } + + // 页面SEO配置 + const pageSEO = ref({ + title: '', + description: '', + keywords: '', + url: '' + }) + + // 更新页面SEO信息 + const updateSEO = (seoConfig) => { + const config = { ...defaultSEO, ...seoConfig } + + // 更新页面标题 + document.title = config.title + + // 更新meta描述 + let metaDescription = document.querySelector('meta[name="description"]') + if (!metaDescription) { + metaDescription = document.createElement('meta') + metaDescription.name = 'description' + document.head.appendChild(metaDescription) + } + metaDescription.content = config.description + + // 更新meta关键词 + let metaKeywords = document.querySelector('meta[name="keywords"]') + if (!metaKeywords) { + metaKeywords = document.createElement('meta') + metaKeywords.name = 'keywords' + document.head.appendChild(metaKeywords) + } + metaKeywords.content = config.keywords + + // 更新Open Graph标签 + updateOpenGraph(config) + + // 更新Twitter Cards + updateTwitterCards(config) + + // 更新canonical URL + updateCanonicalURL(config.url) + + // 更新结构化数据 + updateStructuredData(config) + } + + // 更新Open Graph标签 + const updateOpenGraph = (config) => { + const ogTags = { + 'og:title': config.title, + 'og:description': config.description, + 'og:url': config.url, + 'og:type': 'website', + 'og:site_name': '智能查', + 'og:locale': 'zh_CN' + } + + Object.entries(ogTags).forEach(([property, content]) => { + let meta = document.querySelector(`meta[property="${property}"]`) + if (!meta) { + meta = document.createElement('meta') + meta.setAttribute('property', property) + document.head.appendChild(meta) + } + meta.content = content + }) + } + + // 更新Twitter Cards + const updateTwitterCards = (config) => { + const twitterTags = { + 'twitter:card': 'summary', + 'twitter:title': config.title, + 'twitter:description': config.description, + 'twitter:url': config.url + } + + Object.entries(twitterTags).forEach(([name, content]) => { + let meta = document.querySelector(`meta[name="${name}"]`) + if (!meta) { + meta = document.createElement('meta') + meta.name = name + document.head.appendChild(meta) + } + meta.content = content + }) + } + + // 更新canonical URL + const updateCanonicalURL = (url) => { + let canonical = document.querySelector('link[rel="canonical"]') + if (!canonical) { + canonical = document.createElement('link') + canonical.rel = 'canonical' + document.head.appendChild(canonical) + } + canonical.href = url + } + + // 更新结构化数据 + const updateStructuredData = (config) => { + // 移除现有的结构化数据 + const existingScripts = document.querySelectorAll('script[type="application/ld+json"]') + existingScripts.forEach(script => { + if (script.textContent.includes('"@type":"WebPage"')) { + script.remove() + } + }) + + // 添加新的结构化数据 + const structuredData = { + "@context": "https://schema.org", + "@type": "WebPage", + "name": config.title, + "description": config.description, + "url": config.url, + "mainEntity": { + "@type": "Organization", + "name": "智能查", + "url": "https://www.zhinengcha.cn/", + "description": "大数据风险报告查询与代理管理平台" + } + } + + const script = document.createElement('script') + script.type = 'application/ld+json' + script.textContent = JSON.stringify(structuredData) + document.head.appendChild(script) + } + + // 根据路由自动更新SEO + const updateSEOByRoute = () => { + const routeConfigs = { + '/': { + title: '智能查 - 大数据风险报告 | 婚姻状况查询 | 个人信用 | 企业风险 | 免费代理', + description: '智能查,大数据风险报告查询与代理管理平台,提供婚姻状况查询、个人信用评估、人事背调、信贷风控、企业风险监测等服务,支持免费开通代理,助力个人与企业全方位风险管理。', + keywords: '大数据风险报告, 婚姻状况查询, 个人信用, 企业风险, 信贷风控, 人事背调, 大数据分析, 免费代理, 风险管控' + }, + '/agent': { + title: '智能查代理 - 免费开通代理权限 | 大数据风险报告代理', + description: '智能查代理平台,免费开通代理权限,享受大数据风险报告查询服务代理收益。专业的大数据风险报告、婚姻查询、个人信用评估等服务的代理合作。', + keywords: '智能查代理, 免费代理, 大数据风险报告代理, 代理权限, 代理收益' + }, + '/help': { + title: '帮助中心 - 智能查使用指南 | 常见问题解答', + description: '智能查帮助中心,提供详细的使用指南、常见问题解答、操作教程等,帮助用户更好地使用大数据风险报告查询服务。', + keywords: '智能查帮助, 使用指南, 常见问题, 操作教程, 客服支持' + }, + '/help/guide': { + title: '使用指南 - 智能查操作教程 | 功能说明', + description: '智能查详细使用指南,包含各功能模块的操作教程、功能说明、注意事项等,让用户快速上手使用。', + keywords: '使用指南, 操作教程, 功能说明, 快速上手, 智能查教程' + }, + '/example': { + title: '示例报告 - 智能查报告展示 | 大数据风险报告样例', + description: '智能查示例报告展示,包含大数据风险报告、婚姻状况查询、个人信用评估等服务的报告样例,让用户了解报告内容和格式。', + keywords: '示例报告, 报告展示, 报告样例, 大数据风险报告, 婚姻查询报告' + }, + '/service': { + title: '客服中心 - 智能查在线客服 | 技术支持', + description: '智能查客服中心,提供在线客服支持、技术咨询、问题反馈等服务,确保用户获得及时有效的帮助。', + keywords: '客服中心, 在线客服, 技术支持, 问题反馈, 智能查客服' + } + } + + const currentPath = route.path + const config = routeConfigs[currentPath] || defaultSEO + + updateSEO({ + ...config, + url: `https://www.zhinengcha.cn${currentPath}` + }) + } + + // 监听路由变化 + watch(() => route.path, updateSEOByRoute, { immediate: true }) + + return { + updateSEO, + updateSEOByRoute, + pageSEO + } +} diff --git a/src/composables/useWebView.js b/src/composables/useWebView.js new file mode 100644 index 0000000..318791f --- /dev/null +++ b/src/composables/useWebView.js @@ -0,0 +1,130 @@ +import { ref, onMounted } from "vue"; +import "@/assets/uni-webview" + +export function useWebView() { + const platform = ref(""); + const token = ref(""); + // 检测环境并通知父窗口加载完毕 + const handleBridgeReady = () => { + if (platform.value) { + h5PostMessage("loaded", true); + } + }; + + + // 获取 Token(从 URL 中解析) + const getTokenFromUrl = () => { + const urlParams = new URLSearchParams(window.location.search); + const tokenFromUrl = urlParams.get("token"); + token.value = tokenFromUrl || ""; // 如果 URL 没有 token,返回空字符串 + if (token.value) { + localStorage.setItem("token", token.value); + } + return tokenFromUrl; + }; + + // 封装 postMessage 方法 + const postMessage = (data) => { + if (platform.value === "h5") { + h5PostMessage("postMessage", data); + } else if (uni && uni.webView.postMessage) { + uni.webView.postMessage(data); + } else { + console.error("uni.webView.postMessage is not available."); + } + }; + + const redirectTo = (data) => { + if (platform.value === "h5") { + h5PostMessage("redirectTo", data) + } else if (uni && uni.webView.redirectTo) { + // 非 H5 环境,调用 uni.webView.redirectTo + uni.webView.redirectTo(data); + } else { + console.error("uni.webView.redirectTo is not available."); + } + }; + + // 封装 navigateBack 方法 + const navigateBack = (data) => { + if (platform.value === "h5") { + window.top.history.back(); + // h5PostMessage("navigateBack", data) + } else if (uni && uni.webView.navigateBack) { + // 非 H5 环境,调用 uni.webView.navigateBack + uni.webView.navigateBack(data); + } else { + console.error("uni.webView.navigateBack is not available."); + } + }; + + // 封装 navigateTo 方法 + const navigateTo = (data) => { + if (platform.value === "h5") { + // h5PostMessage("navigateTo", data) + window.top.location.href = "/app" + data.url + } else if (uni && uni.webView.navigateTo) { + uni.webView.navigateTo(data); + } else { + console.error("uni.webView.navigateTo is not available."); + } + }; + const payment = (data) => { + if (platform.value === "h5") { + h5PostMessage("payment", data) + } else if (uni && uni.webView.navigateTo) { + // 非 H5 环境,调用 uni.webView.navigateTo + uni.webView.navigateTo(data); + } else { + console.error("uni.webView.navigateTo is not available."); + } + } + const getEnv = () => { + return new Promise((resolve, reject) => { + let env = localStorage.getItem(platform) + if (env) { + platform.value = env + resolve(env); + } else { + uni.webView.getEnv((env) => { + // 遍历 env 对象,找到值为 true 的键 + const platformKey = Object.keys(env).find(key => env[key] === true); + platform.value = platformKey; + if (platformKey) { + resolve(platformKey); // 返回键名(如 'h5', 'mp-weixin' 等) + } else { + reject('未知平台'); + } + }); + } + }); + }; + + onMounted(async () => { + try { + const envValue = await getEnv(); + console.log("当前环境", envValue) + // 将返回的键名(如 'h5', 'mp-weixin')存储到 platform + handleBridgeReady(); + } catch (error) { + console.error(error); + } + // 获取 Token + getTokenFromUrl(); + }); + + return { + platform, + token, + getEnv, + redirectTo, + postMessage, + navigateTo, + navigateBack, + payment + }; +} +const h5PostMessage = (action, data) => { + window.parent.postMessage({ action, data, messageId: generateUniqueId(action) }, "*"); +} +const generateUniqueId = (action) => `msg_${action}_${new Date().getTime()}`; diff --git a/src/composables/useZoomAdapter.js b/src/composables/useZoomAdapter.js new file mode 100644 index 0000000..beb8d21 --- /dev/null +++ b/src/composables/useZoomAdapter.js @@ -0,0 +1,32 @@ +import { ref, onMounted } from 'vue'; +import zoomAdapter from '../utils/zoomAdapter.js'; + +/** + * 简化版缩放适配组合式函数 + */ +export function useZoomAdapter() { + const currentZoom = ref(1); + const isTooHighZoom = ref(false); + + const handleZoomChange = (event) => { + const { zoom } = event.detail; + currentZoom.value = zoom; + isTooHighZoom.value = zoom > 3; + }; + + onMounted(() => { + if (!zoomAdapter.isInitialized) { + zoomAdapter.init(); + } + window.addEventListener('zoomChanged', handleZoomChange); + }); + + return { + currentZoom, + isTooHighZoom, + getZoomAdaptiveClass: () => ({ + 'zoom-adaptive': true, + 'too-high-zoom': isTooHighZoom.value + }) + }; +} \ No newline at end of file diff --git a/src/layouts/GlobalLayout.vue b/src/layouts/GlobalLayout.vue new file mode 100644 index 0000000..f98df9f --- /dev/null +++ b/src/layouts/GlobalLayout.vue @@ -0,0 +1,93 @@ + + + + + diff --git a/src/layouts/HomeLayout.vue b/src/layouts/HomeLayout.vue new file mode 100644 index 0000000..fd02c1b --- /dev/null +++ b/src/layouts/HomeLayout.vue @@ -0,0 +1,148 @@ + + + + + diff --git a/src/layouts/PageLayout.vue b/src/layouts/PageLayout.vue new file mode 100644 index 0000000..2af073e --- /dev/null +++ b/src/layouts/PageLayout.vue @@ -0,0 +1,35 @@ + + + + + diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..fd6dd7b --- /dev/null +++ b/src/main.js @@ -0,0 +1,27 @@ +import 'nprogress/nprogress.css'; // 默认样式,可根据需要自定义样式 +import './assets/main.css' +import { createApp } from 'vue' +import { createPinia } from 'pinia' +import App from './App.vue' +import router from './router' +import 'vant/lib/index.css'; +import { useSEO } from './composables/useSEO' + +const app = createApp(App) +app.use(createPinia()) +app.use(router) + +// 初始化SEO功能 +const { updateSEOByRoute } = useSEO() + +app.mount('#app') + +document.addEventListener('DOMContentLoaded', () => { + const loadingElement = document.getElementById('app-loading'); + if (loadingElement) { + loadingElement.style.opacity = '0'; + setTimeout(() => { + loadingElement.parentNode.removeChild(loadingElement); + }, 500); // 动画过渡时间 + } +}); \ No newline at end of file diff --git a/src/router/index.js b/src/router/index.js new file mode 100644 index 0000000..02d5e51 --- /dev/null +++ b/src/router/index.js @@ -0,0 +1,420 @@ +import { createRouter, createWebHistory } from 'vue-router' +import NProgress from 'nprogress' +import GlobalLayout from '@/layouts/GlobalLayout.vue' +import HomeLayout from '@/layouts/HomeLayout.vue' +import PageLayout from '@/layouts/PageLayout.vue' +import index from '@/views/index.vue' +import { useAgentStore } from '@/stores/agentStore' +import { useUserStore } from '@/stores/userStore' +import { useDialogStore } from '@/stores/dialogStore' +import { useEnv } from '@/composables/useEnv' +import { storeToRefs } from 'pinia' +import { useSEO } from '@/composables/useSEO' + +const router = createRouter({ + history: createWebHistory(import.meta.env.BASE_URL), + routes: [ + { + path: '/', + component: GlobalLayout, // 使用 Layout 作为父组件 + children: [ + { + path: '', + component: HomeLayout, // 使用 Layout 作为父组件 + children: [ + { + path: '', + name: 'index', + component: index, + }, + { + path: '/agent', + name: 'agent', + component: () => import('@/views/Agent.vue'), + }, + { + path: 'me', + name: 'me', + component: () => import('@/views/Me.vue'), + }, + ], + }, + { + path: '', + component: PageLayout, + children: [ + { + path: '/historyQuery', + name: 'history', + component: () => import('@/views/HistoryQuery.vue'), + meta: { title: '历史报告', requiresAuth: true }, + }, + { + path: '/help', + name: 'help', + component: () => import('@/views/Help.vue'), + meta: { title: '帮助中心' }, + }, + { + path: '/help/detail', + name: 'helpDetail', + component: () => import('@/views/HelpDetail.vue'), + meta: { title: '帮助中心' }, + }, + { + path: '/help/guide', + name: 'helpGuide', + component: () => import('@/views/HelpGuide.vue'), + meta: { title: '引导指南' }, + }, + { + path: '/promote', + name: 'promote', + component: () => import('@/views/Promote.vue'), + meta: { title: '推广', requiresAuth: true }, + }, + { + path: '/withdraw', + name: 'withdraw', + component: () => import('@/views/Withdraw.vue'), + meta: { title: '提现', requiresAuth: true }, + }, + { + path: '/service', + name: 'service', + component: () => import('@/views/Service.vue'), + meta: { title: '客服' }, + }, + { + path: '/complaint', + name: 'complaint', + component: () => import('@/views/Complaint.vue'), + meta: { title: '投诉' }, + }, + { + path: '/report', + name: 'report', + component: () => import('@/views/Report.vue'), + meta: { + title: '报告结果', requiresAuth: true, notNeedBindPhone: true + }, + }, + { + path: '/example', + name: 'example', + component: () => import('@/views/Example.vue'), + meta: { title: '示例报告', notNeedBindPhone: true }, + }, + { + path: '/privacyPolicy', + name: 'privacyPolicy', + component: () => import('@/views/PrivacyPolicy.vue'), + meta: { title: '隐私政策' }, + }, + { + path: '/userAgreement', + name: 'userAgreement', + component: () => import('@/views/UserAgreement.vue'), + meta: { title: '用户协议' }, + }, + { + path: '/agentManageAgreement', + name: 'agentManageAgreement', + component: () => import('@/views/AgentManageAgreement.vue'), + meta: { title: '代理管理协议' }, + }, + { + path: '/agentSerivceAgreement', + name: 'agentSerivceAgreement', + component: () => import('@/views/AgentServiceAgreement.vue'), + meta: { title: '信息技术服务合同' }, + }, + { + path: '/inquire/:feature', + name: 'inquire', + component: () => import('@/views/Inquire.vue'), + meta: { title: '查询报告', requiresAuth: true }, + }, + { + path: '/authorization', + name: 'authorization', + component: () => import('@/views/Authorization.vue'), + meta: { title: '授权书' }, + }, + { + path: '/payment/result', + name: 'paymentResult', + component: () => import('@/views/PaymentResult.vue'), + meta: { title: '支付结果', requiresAuth: true }, + }, + ], + }, + { + path: 'agent', + component: PageLayout, + children: [ + { + path: 'promoteDetails', + name: 'promoteDetails', + component: () => import('@/views/AgentPromoteDetails.vue'), + meta: { + title: '直推报告收益明细', + requiresAuth: true, + requiresAgent: true, + }, + }, + { + path: 'rewardsDetails', + name: 'rewardsDetails', + component: () => import('@/views/AgentRewardsDetails.vue'), + meta: { + title: '代理奖励收益明细', + requiresAuth: true, + requiresAgent: true, + }, + }, + { + path: 'promote', + name: 'promote', + component: () => import('@/views/Promote.vue'), + meta: { + title: '直推报告', + requiresAuth: true, + requiresAgent: true, + }, + }, + { + path: 'invitation', + name: 'invitation', + component: () => import('@/views/Invitation.vue'), + meta: { + title: '邀请下级', + requiresAuth: true, + requiresAgent: true, + }, + }, + { + path: 'agentVip', + name: 'agentVip', + component: () => import('@/views/AgentVip.vue'), + meta: { + title: '代理会员', + requiresAuth: true, + requiresAgent: true, + }, + }, + { + path: 'vipApply', + name: 'agentVipApply', + component: () => import('@/views/AgentVipApply.vue'), + meta: { + title: 'VIP代理申请', + requiresAuth: true, + requiresAgent: true, + }, + }, + { + path: 'vipConfig', + name: 'agentVipConfig', + component: () => import('@/views/AgentVipConfig.vue'), + meta: { + title: '代理会员报告配置', + requiresAuth: true, + requiresAgent: true, + }, + }, + { + path: 'withdraw', + name: 'withdraw', + component: () => import('@/views/Withdraw.vue'), + meta: { + title: '提现', + requiresAuth: true, + requiresAgent: true, + }, + }, + { + path: 'withdrawDetails', + name: 'withdrawDetails', + component: () => import('@/views/WithdrawDetails.vue'), + meta: { + title: '提现记录', + requiresAuth: true, + requiresAgent: true, + }, + }, + { + path: 'invitationAgentApply/self', + name: 'invitationAgentApplySelf', + component: () => import('@/views/InvitationAgentApply.vue'), + meta: { title: '代理申请', requiresAuth: true }, + }, + { + path: 'subordinateList', + name: 'subordinateList', + component: () => import('@/views/SubordinateList.vue'), + meta: { + title: '我的下级', + requiresAuth: true, + requiresAgent: true, + }, + }, + { + path: 'subordinateDetail/:id', + name: 'subordinateDetail', + component: () => import('@/views/SubordinateDetail.vue'), + meta: { + title: '下级贡献详情', + requiresAuth: true, + requiresAgent: true, + }, + }, + ], + }, + { + path: 'app', + children: [ + { + path: 'authorization', + name: 'appAuthorization', + component: () => import('@/views/Authorization.vue'), + meta: { title: '授权书' }, + }, + { + path: 'privacyPolicy', + name: 'appPrivacyPolicy', + component: () => import('@/views/PrivacyPolicy.vue'), + meta: { title: '隐私政策' }, + }, + { + path: 'userAgreement', + name: 'appUserAgreement', + component: () => import('@/views/UserAgreement.vue'), + meta: { title: '用户协议' }, + }, + { + path: 'agentManageAgreement', + name: 'appAgentManageAgreement', + component: () => import('@/views/AgentManageAgreement.vue'), + meta: { title: '代理管理协议' }, + }, + { + path: 'agentSerivceAgreement', + name: 'appAgentSerivceAgreement', + component: () => import('@/views/AgentServiceAgreement.vue'), + meta: { title: '信息技术服务合同' }, + }, + ], + }, + ], + }, + + { + path: '/login', + name: 'login', + component: () => import('@/views/Login.vue'), + }, + { + path: '/agent/promotionInquire/:linkIdentifier', + name: 'promotionInquire', + component: () => import('@/views/PromotionInquire.vue'), + meta: { notNeedBindPhone: true }, + }, + { + path: '/agent/invitationAgentApply/:linkIdentifier', + name: 'invitationAgentApply', + component: () => import('@/views/InvitationAgentApply.vue'), + meta: { title: '代理申请' }, + }, + { + path: '/report/share/:linkIdentifier', + name: 'reportShare', + component: () => import('@/views/ReportShare.vue'), + }, + { + path: '/:pathMatch(.*)*', + name: 'NotFound', + component: () => import('@/views/NotFound.vue'), + }, + ], +}) +NProgress.configure({ + easing: 'ease', // 动画方式 + speed: 500, // 递增进度条的速度(毫秒) + showSpinner: false, // 是否显示加载的圆圈 + trickleSpeed: 200, // 自动递增间隔 + minimum: 0.3, // 初始化最小百分比 +}) + +// 路由导航守卫 +router.beforeEach(async (to, from, next) => { + NProgress.start() // 启动进度条 + const isAuthenticated = localStorage.getItem('token') + const agentStore = useAgentStore() + const userStore = useUserStore() + const dialogStore = useDialogStore() + const { isWeChat } = useEnv() + const { isAgent, isLoaded } = storeToRefs(agentStore) + const { mobile, isLoggedIn } = storeToRefs(userStore) + + // 处理需要登录的页面 + if (to.meta.requiresAuth && !isAuthenticated) { + if (isWeChat.value) { + next('/') + location.reload() + } else { + next('/login') + } + return + } + + // 已登录状态下的处理 + if (isAuthenticated) { + // 确保用户信息已加载 + if (!isLoggedIn.value) { + await userStore.fetchUserInfo() + } + + // 检查手机号绑定状态 + // 只有在未绑定手机号,且目标路由需要登录并且没有设置notNeedBindPhone时,才弹出绑定手机号弹窗 + if (!mobile.value && to.meta.requiresAuth && !to.meta.notNeedBindPhone) { + dialogStore.openBindPhone() + next(false) + return + } + + // 检查代理权限 + if (to.meta.requiresAgent) { + if (!isLoaded.value) { + await agentStore.fetchAgentStatus() + } + if (!isAgent.value) { + next('/agent/invitationAgentApply/self') + return + } + } + } + + // 其他情况正常通过 + next() + +}) + +router.afterEach((to) => { + NProgress.done() // 结束进度条 + + // SEO优化:更新页面标题和meta信息 + const { updateSEO } = useSEO() + + // 根据路由meta信息更新SEO + if (to.meta.title) { + const seoConfig = { + title: `${to.meta.title} - 智能查`, + description: `智能查${to.meta.title}页面,提供专业的大数据风险管控服务。`, + url: `https://www.zhinengcha.cn${to.path}` + } + updateSEO(seoConfig) + } +}) + +export default router diff --git a/src/stores/agentStore.js b/src/stores/agentStore.js new file mode 100644 index 0000000..f31a786 --- /dev/null +++ b/src/stores/agentStore.js @@ -0,0 +1,76 @@ +import { defineStore } from 'pinia' + +export const useAgentStore = defineStore('agent', { + state: () => ({ + isLoaded: false, + level: '', + status: 3, // 0=待审核,1=审核通过,2=审核未通过,3=未申请 + isAgent: false, + ancestorID: null, + agentID: null, + mobile: '', + ExpiryTime: '', + isRealName: false, + }), + actions: { + async fetchAgentStatus() { + const { data, error } = await useApiFetch('/agent/info').get().json() + + if (data.value && !error.value) { + if (data.value.code === 200) { + this.level = data.value.data.level + this.isAgent = data.value.data.is_agent // 判断是否是代理 + this.status = data.value.data.status // 获取代理状态 0=待审核,1=审核通过,2=审核未通过,3=未申请 + this.agentID = data.value.data.agent_id + this.mobile = data.value.data.mobile + this.ExpiryTime = data.value.data.expiry_time + this.isRealName = data.value.data.is_real_name + + // 保存到localStorage + localStorage.setItem( + 'agentInfo', + JSON.stringify({ + isAgent: this.isAgent, + level: this.level, + status: this.status, + agentID: this.agentID, + mobile: this.mobile, + ExpiryTime: this.ExpiryTime, + isRealName: this.isRealName, + + }) + ) + } else { + console.log('Error fetching agent info', data.value) + } + } + this.isLoaded = true + }, + + // 更新代理信息 + updateAgentInfo(agentInfo) { + if (agentInfo) { + this.isAgent = agentInfo.isAgent || false + this.level = agentInfo.level || '' + this.status = agentInfo.status || 3 + this.agentID = agentInfo.agentID || null + this.mobile = agentInfo.mobile || '' + this.isLoaded = true + this.isRealName = agentInfo.isRealName || false + + } + }, + + // 重置代理信息 + resetAgent() { + this.isLoaded = false + this.level = '' + this.status = 3 + this.isAgent = false + this.ancestorID = null + this.agentID = null + this.mobile = '' + this.isRealName = false + }, + }, +}) diff --git a/src/stores/dialogStore.js b/src/stores/dialogStore.js new file mode 100644 index 0000000..3f90016 --- /dev/null +++ b/src/stores/dialogStore.js @@ -0,0 +1,32 @@ +import { defineStore } from 'pinia' +import { ref } from 'vue' + +export const useDialogStore = defineStore('dialog', () => { + const showBindPhone = ref(false) + const showRealNameAuth = ref(false) + + function openBindPhone() { + showBindPhone.value = true + } + + function closeBindPhone() { + showBindPhone.value = false + } + + function openRealNameAuth() { + showRealNameAuth.value = true + } + + function closeRealNameAuth() { + showRealNameAuth.value = false + } + + return { + showBindPhone, + openBindPhone, + closeBindPhone, + showRealNameAuth, + openRealNameAuth, + closeRealNameAuth, + } +}) diff --git a/src/stores/userStore.js b/src/stores/userStore.js new file mode 100644 index 0000000..0ec9a6c --- /dev/null +++ b/src/stores/userStore.js @@ -0,0 +1,59 @@ +import { defineStore } from 'pinia' + +export const useUserStore = defineStore('user', { + state: () => ({ + userName: '', + mobile: '', + userAvatar: '', + isLoggedIn: false, + }), + actions: { + async fetchUserInfo() { + const { data, error } = await useApiFetch('/user/detail').get().json() + if (data.value && !error.value) { + if (data.value.code === 200) { + const userinfo = data.value.data.userInfo + this.userName = userinfo.mobile || '' + this.mobile = userinfo.mobile || '' + this.userAvatar = userinfo.userAvatar + this.isLoggedIn = true + + // 保存到localStorage + localStorage.setItem( + 'userInfo', + JSON.stringify({ + nickName: this.userName, + avatar: this.userAvatar, + }) + ) + } else if (data.value.code === 100009) { + localStorage.removeItem('token') + localStorage.removeItem('refreshAfter') + localStorage.removeItem('accessExpire') + localStorage.removeItem('userInfo') + localStorage.removeItem('agentInfo') + + this.resetUser() + window.location.reload() + } + } else { + } + }, + + // 更新用户信息 + updateUserInfo(userInfo) { + if (userInfo) { + this.userName = userInfo.mobile || userInfo.nickName || '' + this.userAvatar = userInfo.avatar || '' + this.isLoggedIn = true + } + }, + + // 重置用户信息 + resetUser() { + this.userName = '' + this.userAvatar = '' + this.isLoggedIn = false + }, + }, +}) diff --git a/src/ui/CBehaviorRiskScan.vue b/src/ui/CBehaviorRiskScan.vue new file mode 100644 index 0000000..94f6ba7 --- /dev/null +++ b/src/ui/CBehaviorRiskScan.vue @@ -0,0 +1,709 @@ + + + + + diff --git a/src/ui/CFLXG0V4B/components/CaseDetail.vue b/src/ui/CFLXG0V4B/components/CaseDetail.vue new file mode 100644 index 0000000..73e1ca9 --- /dev/null +++ b/src/ui/CFLXG0V4B/components/CaseDetail.vue @@ -0,0 +1,641 @@ + + + \ No newline at end of file diff --git a/src/ui/CFLXG0V4B/components/StatisticsOverview.vue b/src/ui/CFLXG0V4B/components/StatisticsOverview.vue new file mode 100644 index 0000000..9d48834 --- /dev/null +++ b/src/ui/CFLXG0V4B/components/StatisticsOverview.vue @@ -0,0 +1,410 @@ + + + diff --git a/src/ui/CFLXG0V4B/index.vue b/src/ui/CFLXG0V4B/index.vue new file mode 100644 index 0000000..149e31a --- /dev/null +++ b/src/ui/CFLXG0V4B/index.vue @@ -0,0 +1,441 @@ + + + + + diff --git a/src/ui/CFLXG0V4B/utils/lawsuitUtils.js b/src/ui/CFLXG0V4B/utils/lawsuitUtils.js new file mode 100644 index 0000000..8b225f0 --- /dev/null +++ b/src/ui/CFLXG0V4B/utils/lawsuitUtils.js @@ -0,0 +1,302 @@ +// 案件类型映射表 +export const lawsuitTypeMap = { + sxbzxr: { + text: '失信被执行', + color: 'text-red-600 bg-red-50', + darkColor: 'bg-red-500', + riskLevel: 'high', // 高风险 + }, + xgbzxr: { + text: '限高被执行', + color: 'text-orange-600 bg-orange-50', + darkColor: 'bg-orange-500', + riskLevel: 'high', // 高风险 + }, + criminal: { + text: '刑事案件', + color: 'text-red-600 bg-red-50', + darkColor: 'bg-red-500', + riskLevel: 'high', // 高风险 + }, + civil: { + text: '民事案件', + color: 'text-blue-600 bg-blue-50', + darkColor: 'bg-blue-500', + riskLevel: 'medium', // 中风险 + }, + administrative: { + text: '行政案件', + color: 'text-purple-600 bg-purple-50', + darkColor: 'bg-purple-500', + riskLevel: 'medium', // 中风险 + }, + implement: { + text: '执行案件', + color: 'text-orange-600 bg-orange-50', + darkColor: 'bg-orange-500', + riskLevel: 'medium', // 中风险 + }, + bankrupt: { + text: '强制清算与破产案件', + color: 'text-rose-600 bg-rose-50', + darkColor: 'bg-rose-500', + riskLevel: 'high', // 高风险 + }, + preservation: { + text: '非诉保全审查', + color: 'text-amber-600 bg-amber-50', + darkColor: 'bg-amber-500', + riskLevel: 'low', // 低风险 + }, +} + +// 案件类型文本 +export const getCaseTypeText = type => { + return lawsuitTypeMap[type]?.text || '其他案件' +} + +// 案件类型颜色 +export const getCaseTypeColor = type => { + return lawsuitTypeMap[type]?.color || 'text-gray-600 bg-gray-50' +} + +// 案件类型深色 +export const getCaseTypeDarkColor = type => { + return lawsuitTypeMap[type]?.darkColor || 'bg-gray-500' +} + +// 格式化日期显示 +export const formatDate = dateStr => { + if (!dateStr) return '—' + // 转换YYYY-MM-DD为年月日格式 + if (dateStr.includes('-')) { + const parts = dateStr.split('-') + if (parts.length === 3) { + return `${parts[0]}年${parts[1]}月${parts[2]}日` + } + } + return dateStr // 如果不是标准格式则返回原始字符串 +} + +// 格式化金额显示(单位:万元) +export const formatLawsuitMoney = money => { + if (!money) return '—' + + const value = parseFloat(money) + if (isNaN(value)) return '—' + + // 超过1亿显示亿元 + if (value >= 10000) { + return ( + (value / 10000).toLocaleString('zh-CN', { + minimumFractionDigits: 0, + maximumFractionDigits: 2, + }) + ' 亿元' + ) + } + + // 否则显示万元 + return ( + value.toLocaleString('zh-CN', { + minimumFractionDigits: 0, + maximumFractionDigits: 2, + }) + ' 万元' + ) +} + +// 获取案件状态样式 +export const getCaseStatusClass = status => { + if (!status) return 'bg-gray-100 text-gray-500' + + if (status.includes('已结') || status.includes('已办结')) { + return 'bg-green-50 text-green-600' + } else if (status.includes('执行中') || status.includes('审理中')) { + return 'bg-blue-50 text-blue-600' + } else if (status.includes('未执行')) { + return 'bg-amber-50 text-amber-600' + } else { + return 'bg-gray-100 text-gray-500' + } +} + +// 获取企业状态对应的样式 +export const getStatusClass = status => { + if (!status) return 'bg-gray-100 text-gray-500' + + if (status.includes('注销') || status.includes('吊销')) { + return 'bg-red-50 text-red-600' + } else if (status.includes('存续') || status.includes('在营')) { + return 'bg-green-50 text-green-600' + } else if (status.includes('筹建') || status.includes('新设')) { + return 'bg-blue-50 text-blue-600' + } else { + return 'bg-yellow-50 text-yellow-600' + } +} + +// 格式化资本金额显示 +export const formatCapital = (capital, currency) => { + if (!capital) return '—' + + // 检查是否包含"万"字或需要显示为万元 + let unit = '' + let value = parseFloat(capital) + + // 处理原始数据中可能带有的单位 + if (typeof capital === 'string' && capital.includes('万')) { + unit = '万' + // 提取数字部分 + const numMatch = capital.match(/[\d.]+/) + value = numMatch ? parseFloat(numMatch[0]) : 0 + } else if (value >= 10000) { + // 大额数字转换为万元显示 + value = value / 10000 + unit = '万' + } + + // 格式化数字,保留两位小数(如果有小数部分) + const formattedValue = value.toLocaleString('zh-CN', { + minimumFractionDigits: 0, + maximumFractionDigits: 2, + }) + + return `${formattedValue}${unit} ${currency || '人民币'}` +} + +// 获取涉诉风险等级 +export const getRiskLevel = lawsuitInfo => { + if (!lawsuitInfo) { + return { + level: 'low', + text: '低风险', + color: 'text-green-600 bg-green-50', + } + } + + // 失信被执行人是最高风险 + if (lawsuitInfo.sxbzxr && lawsuitInfo.sxbzxr.length > 0) { + return { + level: 'high', + text: '高风险', + color: 'text-red-600 bg-red-50', + } + } + + // 限高被执行人是最高风险 + if (lawsuitInfo.xgbzxr && lawsuitInfo.xgbzxr.length > 0) { + return { + level: 'high', + text: '高风险', + color: 'text-red-600 bg-red-50', + } + } + + // 有涉诉数据的风险级别 + if (lawsuitInfo.data && Object.keys(lawsuitInfo.data).length > 0) { + // 检查是否有未结案的案件 + const data = lawsuitInfo.data + if (data.count && data.count_wei_total && data.count_wei_total > 0) { + return { + level: 'medium', + text: '中风险', + color: 'text-amber-600 bg-amber-50', + } + } + + // 只有已结案的为低中风险 + return { + level: 'low-medium', + text: '低中风险', + color: 'text-yellow-600 bg-yellow-50', + } + } + + return { + level: 'low', + text: '低风险', + color: 'text-green-600 bg-green-50', + } +} + +// 获取涉诉案件统计 +export const getLawsuitStats = lawsuitInfo => { + if (!lawsuitInfo) return null + + const stats = { + total: 0, + types: [], + } + + // 统计各类型案件数量 + Object.keys(lawsuitTypeMap).forEach(type => { + let count = 0 + + if (type === 'sxbzxr') { + count = lawsuitInfo.sxbzxr && lawsuitInfo.sxbzxr.length > 0 ? lawsuitInfo.sxbzxr.length : 0 + } else if (type === 'xgbzxr') { + count = lawsuitInfo.xgbzxr && lawsuitInfo.xgbzxr.length > 0 ? lawsuitInfo.xgbzxr.length : 0 + } else if (lawsuitInfo.data && lawsuitInfo.data[type] && Object.keys(lawsuitInfo.data[type]).length > 0) { + const typeData = lawsuitInfo.data[type] + count = typeData.cases && typeData.cases.length ? typeData.cases.length : 0 + } + + if (count > 0) { + stats.total += count + stats.types.push({ + type, + count, + name: getCaseTypeText(type), + color: getCaseTypeColor(type), + darkColor: getCaseTypeDarkColor(type), + }) + } + }) + + return stats +} + +// 获取案件类型优先级顺序 +export const getCaseTypePriority = () => { + return [ + 'sxbzxr', // 失信被执行人(最高风险) + 'xgbzxr', // 限高被执行人 + 'criminal', // 刑事案件 + 'civil', // 民事案件 + 'administrative', // 行政案件 + 'implement', // 执行案件 + 'bankrupt', // 强制清算与破产案件 + 'preservation', // 非诉保全审查 + ] +} + +// 根据案件类型获取风险等级 +export const getCaseTypeRiskLevel = caseType => { + const typeInfo = lawsuitTypeMap[caseType] + if (!typeInfo) { + return { + level: 'low', + text: '低风险', + color: 'text-green-600 bg-green-50', + } + } + + const riskLevelMap = { + high: { + text: '高风险', + color: 'text-red-600 bg-red-50', + }, + medium: { + text: '中风险', + color: 'text-amber-600 bg-amber-50', + }, + low: { + text: '低风险', + color: 'text-green-600 bg-green-50', + }, + } + + return { + level: typeInfo.riskLevel, + ...riskLevelMap[typeInfo.riskLevel], + } +} diff --git a/src/ui/CFLXG3D56.vue b/src/ui/CFLXG3D56.vue new file mode 100644 index 0000000..8a65730 --- /dev/null +++ b/src/ui/CFLXG3D56.vue @@ -0,0 +1,1048 @@ + + + + + diff --git a/src/ui/CIVYZ5733.vue b/src/ui/CIVYZ5733.vue new file mode 100644 index 0000000..35663d8 --- /dev/null +++ b/src/ui/CIVYZ5733.vue @@ -0,0 +1,88 @@ + + + + + diff --git a/src/ui/CIVYZ81NC.vue b/src/ui/CIVYZ81NC.vue new file mode 100644 index 0000000..354919c --- /dev/null +++ b/src/ui/CIVYZ81NC.vue @@ -0,0 +1,108 @@ + + + + + diff --git a/src/ui/CIVYZ9A2B.vue b/src/ui/CIVYZ9A2B.vue new file mode 100644 index 0000000..c6ce51a --- /dev/null +++ b/src/ui/CIVYZ9A2B.vue @@ -0,0 +1,931 @@ + + + + + diff --git a/src/ui/CJRZQ0A03.vue b/src/ui/CJRZQ0A03.vue new file mode 100644 index 0000000..1e85784 --- /dev/null +++ b/src/ui/CJRZQ0A03.vue @@ -0,0 +1,1385 @@ + + + + + diff --git a/src/ui/CJRZQ4AA8.vue b/src/ui/CJRZQ4AA8.vue new file mode 100644 index 0000000..c6d7f51 --- /dev/null +++ b/src/ui/CJRZQ4AA8.vue @@ -0,0 +1,320 @@ + + + + + diff --git a/src/ui/CJRZQ8203.vue b/src/ui/CJRZQ8203.vue new file mode 100644 index 0000000..425a8d4 --- /dev/null +++ b/src/ui/CJRZQ8203.vue @@ -0,0 +1,913 @@ + + + + + diff --git a/src/ui/CPersonEnterprisePro/index.vue b/src/ui/CPersonEnterprisePro/index.vue new file mode 100644 index 0000000..097a1b1 --- /dev/null +++ b/src/ui/CPersonEnterprisePro/index.vue @@ -0,0 +1,85 @@ + + + + + diff --git a/src/ui/CPersonEnterprisePro/sections/Investment.vue b/src/ui/CPersonEnterprisePro/sections/Investment.vue new file mode 100644 index 0000000..657379d --- /dev/null +++ b/src/ui/CPersonEnterprisePro/sections/Investment.vue @@ -0,0 +1,499 @@ + + + + + diff --git a/src/ui/CPersonEnterprisePro/sections/Lawsuit.vue b/src/ui/CPersonEnterprisePro/sections/Lawsuit.vue new file mode 100644 index 0000000..d202816 --- /dev/null +++ b/src/ui/CPersonEnterprisePro/sections/Lawsuit.vue @@ -0,0 +1,3076 @@ + + + + + diff --git a/src/ui/CPersonEnterprisePro/sections/SeniorExecutive.vue b/src/ui/CPersonEnterprisePro/sections/SeniorExecutive.vue new file mode 100644 index 0000000..ba5cd37 --- /dev/null +++ b/src/ui/CPersonEnterprisePro/sections/SeniorExecutive.vue @@ -0,0 +1,461 @@ + + + + + diff --git a/src/ui/CQCXG7A2B.vue b/src/ui/CQCXG7A2B.vue new file mode 100644 index 0000000..8801ac6 --- /dev/null +++ b/src/ui/CQCXG7A2B.vue @@ -0,0 +1,38 @@ + + + + + \ No newline at end of file diff --git a/src/utils/chatCrypto.js b/src/utils/chatCrypto.js new file mode 100644 index 0000000..60ec6ef --- /dev/null +++ b/src/utils/chatCrypto.js @@ -0,0 +1,174 @@ +/* +CryptoJS v3.1.2 +code.google.com/p/crypto-js +(c) 2009-2013 by Jeff Mott. All rights reserved. +code.google.com/p/crypto-js/wiki/License +*/ +var CryptoJS = CryptoJS || function (u, p) { + var d = {}, l = d.lib = {}, s = function () { }, t = l.Base = { extend: function (a) { s.prototype = this; var c = new s; a && c.mixIn(a); c.hasOwnProperty("init") || (c.init = function () { c.$super.init.apply(this, arguments) }); c.init.prototype = c; c.$super = this; return c }, create: function () { var a = this.extend(); a.init.apply(a, arguments); return a }, init: function () { }, mixIn: function (a) { for (var c in a) a.hasOwnProperty(c) && (this[c] = a[c]); a.hasOwnProperty("toString") && (this.toString = a.toString) }, clone: function () { return this.init.prototype.extend(this) } }, + r = l.WordArray = t.extend({ + init: function (a, c) { a = this.words = a || []; this.sigBytes = c != p ? c : 4 * a.length }, toString: function (a) { return (a || v).stringify(this) }, concat: function (a) { var c = this.words, e = a.words, j = this.sigBytes; a = a.sigBytes; this.clamp(); if (j % 4) for (var k = 0; k < a; k++)c[j + k >>> 2] |= (e[k >>> 2] >>> 24 - 8 * (k % 4) & 255) << 24 - 8 * ((j + k) % 4); else if (65535 < e.length) for (k = 0; k < a; k += 4)c[j + k >>> 2] = e[k >>> 2]; else c.push.apply(c, e); this.sigBytes += a; return this }, clamp: function () { + var a = this.words, c = this.sigBytes; a[c >>> 2] &= 4294967295 << + 32 - 8 * (c % 4); a.length = u.ceil(c / 4) + }, clone: function () { var a = t.clone.call(this); a.words = this.words.slice(0); return a }, random: function (a) { for (var c = [], e = 0; e < a; e += 4)c.push(4294967296 * u.random() | 0); return new r.init(c, a) } + }), w = d.enc = {}, v = w.Hex = { + stringify: function (a) { var c = a.words; a = a.sigBytes; for (var e = [], j = 0; j < a; j++) { var k = c[j >>> 2] >>> 24 - 8 * (j % 4) & 255; e.push((k >>> 4).toString(16)); e.push((k & 15).toString(16)) } return e.join("") }, parse: function (a) { + for (var c = a.length, e = [], j = 0; j < c; j += 2)e[j >>> 3] |= parseInt(a.substr(j, + 2), 16) << 24 - 4 * (j % 8); return new r.init(e, c / 2) + } + }, b = w.Latin1 = { stringify: function (a) { var c = a.words; a = a.sigBytes; for (var e = [], j = 0; j < a; j++)e.push(String.fromCharCode(c[j >>> 2] >>> 24 - 8 * (j % 4) & 255)); return e.join("") }, parse: function (a) { for (var c = a.length, e = [], j = 0; j < c; j++)e[j >>> 2] |= (a.charCodeAt(j) & 255) << 24 - 8 * (j % 4); return new r.init(e, c) } }, x = w.Utf8 = { stringify: function (a) { try { return decodeURIComponent(escape(b.stringify(a))) } catch (c) { throw Error("Malformed UTF-8 data"); } }, parse: function (a) { return b.parse(unescape(encodeURIComponent(a))) } }, + q = l.BufferedBlockAlgorithm = t.extend({ + reset: function () { this._data = new r.init; this._nDataBytes = 0 }, _append: function (a) { "string" == typeof a && (a = x.parse(a)); this._data.concat(a); this._nDataBytes += a.sigBytes }, _process: function (a) { var c = this._data, e = c.words, j = c.sigBytes, k = this.blockSize, b = j / (4 * k), b = a ? u.ceil(b) : u.max((b | 0) - this._minBufferSize, 0); a = b * k; j = u.min(4 * a, j); if (a) { for (var q = 0; q < a; q += k)this._doProcessBlock(e, q); q = e.splice(0, a); c.sigBytes -= j } return new r.init(q, j) }, clone: function () { + var a = t.clone.call(this); + a._data = this._data.clone(); return a + }, _minBufferSize: 0 + }); l.Hasher = q.extend({ + cfg: t.extend(), init: function (a) { this.cfg = this.cfg.extend(a); this.reset() }, reset: function () { q.reset.call(this); this._doReset() }, update: function (a) { this._append(a); this._process(); return this }, finalize: function (a) { a && this._append(a); return this._doFinalize() }, blockSize: 16, _createHelper: function (a) { return function (b, e) { return (new a.init(e)).finalize(b) } }, _createHmacHelper: function (a) { + return function (b, e) { + return (new n.HMAC.init(a, + e)).finalize(b) + } + } + }); var n = d.algo = {}; return d +}(Math); +(function () { + var u = CryptoJS, p = u.lib.WordArray; u.enc.Base64 = { + stringify: function (d) { var l = d.words, p = d.sigBytes, t = this._map; d.clamp(); d = []; for (var r = 0; r < p; r += 3)for (var w = (l[r >>> 2] >>> 24 - 8 * (r % 4) & 255) << 16 | (l[r + 1 >>> 2] >>> 24 - 8 * ((r + 1) % 4) & 255) << 8 | l[r + 2 >>> 2] >>> 24 - 8 * ((r + 2) % 4) & 255, v = 0; 4 > v && r + 0.75 * v < p; v++)d.push(t.charAt(w >>> 6 * (3 - v) & 63)); if (l = t.charAt(64)) for (; d.length % 4;)d.push(l); return d.join("") }, parse: function (d) { + var l = d.length, s = this._map, t = s.charAt(64); t && (t = d.indexOf(t), -1 != t && (l = t)); for (var t = [], r = 0, w = 0; w < + l; w++)if (w % 4) { var v = s.indexOf(d.charAt(w - 1)) << 2 * (w % 4), b = s.indexOf(d.charAt(w)) >>> 6 - 2 * (w % 4); t[r >>> 2] |= (v | b) << 24 - 8 * (r % 4); r++ } return p.create(t, r) + }, _map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" + } +})(); +(function (u) { + function p (b, n, a, c, e, j, k) { b = b + (n & a | ~n & c) + e + k; return (b << j | b >>> 32 - j) + n } function d (b, n, a, c, e, j, k) { b = b + (n & c | a & ~c) + e + k; return (b << j | b >>> 32 - j) + n } function l (b, n, a, c, e, j, k) { b = b + (n ^ a ^ c) + e + k; return (b << j | b >>> 32 - j) + n } function s (b, n, a, c, e, j, k) { b = b + (a ^ (n | ~c)) + e + k; return (b << j | b >>> 32 - j) + n } for (var t = CryptoJS, r = t.lib, w = r.WordArray, v = r.Hasher, r = t.algo, b = [], x = 0; 64 > x; x++)b[x] = 4294967296 * u.abs(u.sin(x + 1)) | 0; r = r.MD5 = v.extend({ + _doReset: function () { this._hash = new w.init([1732584193, 4023233417, 2562383102, 271733878]) }, + _doProcessBlock: function (q, n) { + for (var a = 0; 16 > a; a++) { var c = n + a, e = q[c]; q[c] = (e << 8 | e >>> 24) & 16711935 | (e << 24 | e >>> 8) & 4278255360 } var a = this._hash.words, c = q[n + 0], e = q[n + 1], j = q[n + 2], k = q[n + 3], z = q[n + 4], r = q[n + 5], t = q[n + 6], w = q[n + 7], v = q[n + 8], A = q[n + 9], B = q[n + 10], C = q[n + 11], u = q[n + 12], D = q[n + 13], E = q[n + 14], x = q[n + 15], f = a[0], m = a[1], g = a[2], h = a[3], f = p(f, m, g, h, c, 7, b[0]), h = p(h, f, m, g, e, 12, b[1]), g = p(g, h, f, m, j, 17, b[2]), m = p(m, g, h, f, k, 22, b[3]), f = p(f, m, g, h, z, 7, b[4]), h = p(h, f, m, g, r, 12, b[5]), g = p(g, h, f, m, t, 17, b[6]), m = p(m, g, h, f, w, 22, b[7]), + f = p(f, m, g, h, v, 7, b[8]), h = p(h, f, m, g, A, 12, b[9]), g = p(g, h, f, m, B, 17, b[10]), m = p(m, g, h, f, C, 22, b[11]), f = p(f, m, g, h, u, 7, b[12]), h = p(h, f, m, g, D, 12, b[13]), g = p(g, h, f, m, E, 17, b[14]), m = p(m, g, h, f, x, 22, b[15]), f = d(f, m, g, h, e, 5, b[16]), h = d(h, f, m, g, t, 9, b[17]), g = d(g, h, f, m, C, 14, b[18]), m = d(m, g, h, f, c, 20, b[19]), f = d(f, m, g, h, r, 5, b[20]), h = d(h, f, m, g, B, 9, b[21]), g = d(g, h, f, m, x, 14, b[22]), m = d(m, g, h, f, z, 20, b[23]), f = d(f, m, g, h, A, 5, b[24]), h = d(h, f, m, g, E, 9, b[25]), g = d(g, h, f, m, k, 14, b[26]), m = d(m, g, h, f, v, 20, b[27]), f = d(f, m, g, h, D, 5, b[28]), h = d(h, f, + m, g, j, 9, b[29]), g = d(g, h, f, m, w, 14, b[30]), m = d(m, g, h, f, u, 20, b[31]), f = l(f, m, g, h, r, 4, b[32]), h = l(h, f, m, g, v, 11, b[33]), g = l(g, h, f, m, C, 16, b[34]), m = l(m, g, h, f, E, 23, b[35]), f = l(f, m, g, h, e, 4, b[36]), h = l(h, f, m, g, z, 11, b[37]), g = l(g, h, f, m, w, 16, b[38]), m = l(m, g, h, f, B, 23, b[39]), f = l(f, m, g, h, D, 4, b[40]), h = l(h, f, m, g, c, 11, b[41]), g = l(g, h, f, m, k, 16, b[42]), m = l(m, g, h, f, t, 23, b[43]), f = l(f, m, g, h, A, 4, b[44]), h = l(h, f, m, g, u, 11, b[45]), g = l(g, h, f, m, x, 16, b[46]), m = l(m, g, h, f, j, 23, b[47]), f = s(f, m, g, h, c, 6, b[48]), h = s(h, f, m, g, w, 10, b[49]), g = s(g, h, f, m, + E, 15, b[50]), m = s(m, g, h, f, r, 21, b[51]), f = s(f, m, g, h, u, 6, b[52]), h = s(h, f, m, g, k, 10, b[53]), g = s(g, h, f, m, B, 15, b[54]), m = s(m, g, h, f, e, 21, b[55]), f = s(f, m, g, h, v, 6, b[56]), h = s(h, f, m, g, x, 10, b[57]), g = s(g, h, f, m, t, 15, b[58]), m = s(m, g, h, f, D, 21, b[59]), f = s(f, m, g, h, z, 6, b[60]), h = s(h, f, m, g, C, 10, b[61]), g = s(g, h, f, m, j, 15, b[62]), m = s(m, g, h, f, A, 21, b[63]); a[0] = a[0] + f | 0; a[1] = a[1] + m | 0; a[2] = a[2] + g | 0; a[3] = a[3] + h | 0 + }, _doFinalize: function () { + var b = this._data, n = b.words, a = 8 * this._nDataBytes, c = 8 * b.sigBytes; n[c >>> 5] |= 128 << 24 - c % 32; var e = u.floor(a / + 4294967296); n[(c + 64 >>> 9 << 4) + 15] = (e << 8 | e >>> 24) & 16711935 | (e << 24 | e >>> 8) & 4278255360; n[(c + 64 >>> 9 << 4) + 14] = (a << 8 | a >>> 24) & 16711935 | (a << 24 | a >>> 8) & 4278255360; b.sigBytes = 4 * (n.length + 1); this._process(); b = this._hash; n = b.words; for (a = 0; 4 > a; a++)c = n[a], n[a] = (c << 8 | c >>> 24) & 16711935 | (c << 24 | c >>> 8) & 4278255360; return b + }, clone: function () { var b = v.clone.call(this); b._hash = this._hash.clone(); return b } + }); t.MD5 = v._createHelper(r); t.HmacMD5 = v._createHmacHelper(r) +})(Math); +(function () { + var u = CryptoJS, p = u.lib, d = p.Base, l = p.WordArray, p = u.algo, s = p.EvpKDF = d.extend({ cfg: d.extend({ keySize: 4, hasher: p.MD5, iterations: 1 }), init: function (d) { this.cfg = this.cfg.extend(d) }, compute: function (d, r) { for (var p = this.cfg, s = p.hasher.create(), b = l.create(), u = b.words, q = p.keySize, p = p.iterations; u.length < q;) { n && s.update(n); var n = s.update(d).finalize(r); s.reset(); for (var a = 1; a < p; a++)n = s.finalize(n), s.reset(); b.concat(n) } b.sigBytes = 4 * q; return b } }); u.EvpKDF = function (d, l, p) { + return s.create(p).compute(d, + l) + } +})(); +CryptoJS.lib.Cipher || function (u) { + var p = CryptoJS, d = p.lib, l = d.Base, s = d.WordArray, t = d.BufferedBlockAlgorithm, r = p.enc.Base64, w = p.algo.EvpKDF, v = d.Cipher = t.extend({ + cfg: l.extend(), createEncryptor: function (e, a) { return this.create(this._ENC_XFORM_MODE, e, a) }, createDecryptor: function (e, a) { return this.create(this._DEC_XFORM_MODE, e, a) }, init: function (e, a, b) { this.cfg = this.cfg.extend(b); this._xformMode = e; this._key = a; this.reset() }, reset: function () { t.reset.call(this); this._doReset() }, process: function (e) { this._append(e); return this._process() }, + finalize: function (e) { e && this._append(e); return this._doFinalize() }, keySize: 4, ivSize: 4, _ENC_XFORM_MODE: 1, _DEC_XFORM_MODE: 2, _createHelper: function (e) { return { encrypt: function (b, k, d) { return ("string" == typeof k ? c : a).encrypt(e, b, k, d) }, decrypt: function (b, k, d) { return ("string" == typeof k ? c : a).decrypt(e, b, k, d) } } } + }); d.StreamCipher = v.extend({ _doFinalize: function () { return this._process(!0) }, blockSize: 1 }); var b = p.mode = {}, x = function (e, a, b) { + var c = this._iv; c ? this._iv = u : c = this._prevBlock; for (var d = 0; d < b; d++)e[a + d] ^= + c[d] + }, q = (d.BlockCipherMode = l.extend({ createEncryptor: function (e, a) { return this.Encryptor.create(e, a) }, createDecryptor: function (e, a) { return this.Decryptor.create(e, a) }, init: function (e, a) { this._cipher = e; this._iv = a } })).extend(); q.Encryptor = q.extend({ processBlock: function (e, a) { var b = this._cipher, c = b.blockSize; x.call(this, e, a, c); b.encryptBlock(e, a); this._prevBlock = e.slice(a, a + c) } }); q.Decryptor = q.extend({ + processBlock: function (e, a) { + var b = this._cipher, c = b.blockSize, d = e.slice(a, a + c); b.decryptBlock(e, a); x.call(this, + e, a, c); this._prevBlock = d + } + }); b = b.CBC = q; q = (p.pad = {}).Pkcs7 = { pad: function (a, b) { for (var c = 4 * b, c = c - a.sigBytes % c, d = c << 24 | c << 16 | c << 8 | c, l = [], n = 0; n < c; n += 4)l.push(d); c = s.create(l, c); a.concat(c) }, unpad: function (a) { a.sigBytes -= a.words[a.sigBytes - 1 >>> 2] & 255 } }; d.BlockCipher = v.extend({ + cfg: v.cfg.extend({ mode: b, padding: q }), reset: function () { + v.reset.call(this); var a = this.cfg, b = a.iv, a = a.mode; if (this._xformMode == this._ENC_XFORM_MODE) var c = a.createEncryptor; else c = a.createDecryptor, this._minBufferSize = 1; this._mode = c.call(a, + this, b && b.words) + }, _doProcessBlock: function (a, b) { this._mode.processBlock(a, b) }, _doFinalize: function () { var a = this.cfg.padding; if (this._xformMode == this._ENC_XFORM_MODE) { a.pad(this._data, this.blockSize); var b = this._process(!0) } else b = this._process(!0), a.unpad(b); return b }, blockSize: 4 + }); var n = d.CipherParams = l.extend({ init: function (a) { this.mixIn(a) }, toString: function (a) { return (a || this.formatter).stringify(this) } }), b = (p.format = {}).OpenSSL = { + stringify: function (a) { + var b = a.ciphertext; a = a.salt; return (a ? s.create([1398893684, + 1701076831]).concat(a).concat(b) : b).toString(r) + }, parse: function (a) { a = r.parse(a); var b = a.words; if (1398893684 == b[0] && 1701076831 == b[1]) { var c = s.create(b.slice(2, 4)); b.splice(0, 4); a.sigBytes -= 16 } return n.create({ ciphertext: a, salt: c }) } + }, a = d.SerializableCipher = l.extend({ + cfg: l.extend({ format: b }), encrypt: function (a, b, c, d) { d = this.cfg.extend(d); var l = a.createEncryptor(c, d); b = l.finalize(b); l = l.cfg; return n.create({ ciphertext: b, key: c, iv: l.iv, algorithm: a, mode: l.mode, padding: l.padding, blockSize: a.blockSize, formatter: d.format }) }, + decrypt: function (a, b, c, d) { d = this.cfg.extend(d); b = this._parse(b, d.format); return a.createDecryptor(c, d).finalize(b.ciphertext) }, _parse: function (a, b) { return "string" == typeof a ? b.parse(a, this) : a } + }), p = (p.kdf = {}).OpenSSL = { execute: function (a, b, c, d) { d || (d = s.random(8)); a = w.create({ keySize: b + c }).compute(a, d); c = s.create(a.words.slice(b), 4 * c); a.sigBytes = 4 * b; return n.create({ key: a, iv: c, salt: d }) } }, c = d.PasswordBasedCipher = a.extend({ + cfg: a.cfg.extend({ kdf: p }), encrypt: function (b, c, d, l) { + l = this.cfg.extend(l); d = l.kdf.execute(d, + b.keySize, b.ivSize); l.iv = d.iv; b = a.encrypt.call(this, b, c, d.key, l); b.mixIn(d); return b + }, decrypt: function (b, c, d, l) { l = this.cfg.extend(l); c = this._parse(c, l.format); d = l.kdf.execute(d, b.keySize, b.ivSize, c.salt); l.iv = d.iv; return a.decrypt.call(this, b, c, d.key, l) } + }) +}(); +(function () { + for (var u = CryptoJS, p = u.lib.BlockCipher, d = u.algo, l = [], s = [], t = [], r = [], w = [], v = [], b = [], x = [], q = [], n = [], a = [], c = 0; 256 > c; c++)a[c] = 128 > c ? c << 1 : c << 1 ^ 283; for (var e = 0, j = 0, c = 0; 256 > c; c++) { var k = j ^ j << 1 ^ j << 2 ^ j << 3 ^ j << 4, k = k >>> 8 ^ k & 255 ^ 99; l[e] = k; s[k] = e; var z = a[e], F = a[z], G = a[F], y = 257 * a[k] ^ 16843008 * k; t[e] = y << 24 | y >>> 8; r[e] = y << 16 | y >>> 16; w[e] = y << 8 | y >>> 24; v[e] = y; y = 16843009 * G ^ 65537 * F ^ 257 * z ^ 16843008 * e; b[k] = y << 24 | y >>> 8; x[k] = y << 16 | y >>> 16; q[k] = y << 8 | y >>> 24; n[k] = y; e ? (e = z ^ a[a[a[G ^ z]]], j ^= a[a[j]]) : e = j = 1 } var H = [0, 1, 2, 4, 8, + 16, 32, 64, 128, 27, 54], d = d.AES = p.extend({ + _doReset: function () { + for (var a = this._key, c = a.words, d = a.sigBytes / 4, a = 4 * ((this._nRounds = d + 6) + 1), e = this._keySchedule = [], j = 0; j < a; j++)if (j < d) e[j] = c[j]; else { var k = e[j - 1]; j % d ? 6 < d && 4 == j % d && (k = l[k >>> 24] << 24 | l[k >>> 16 & 255] << 16 | l[k >>> 8 & 255] << 8 | l[k & 255]) : (k = k << 8 | k >>> 24, k = l[k >>> 24] << 24 | l[k >>> 16 & 255] << 16 | l[k >>> 8 & 255] << 8 | l[k & 255], k ^= H[j / d | 0] << 24); e[j] = e[j - d] ^ k } c = this._invKeySchedule = []; for (d = 0; d < a; d++)j = a - d, k = d % 4 ? e[j] : e[j - 4], c[d] = 4 > d || 4 >= j ? k : b[l[k >>> 24]] ^ x[l[k >>> 16 & 255]] ^ q[l[k >>> + 8 & 255]] ^ n[l[k & 255]] + }, encryptBlock: function (a, b) { this._doCryptBlock(a, b, this._keySchedule, t, r, w, v, l) }, decryptBlock: function (a, c) { var d = a[c + 1]; a[c + 1] = a[c + 3]; a[c + 3] = d; this._doCryptBlock(a, c, this._invKeySchedule, b, x, q, n, s); d = a[c + 1]; a[c + 1] = a[c + 3]; a[c + 3] = d }, _doCryptBlock: function (a, b, c, d, e, j, l, f) { + for (var m = this._nRounds, g = a[b] ^ c[0], h = a[b + 1] ^ c[1], k = a[b + 2] ^ c[2], n = a[b + 3] ^ c[3], p = 4, r = 1; r < m; r++)var q = d[g >>> 24] ^ e[h >>> 16 & 255] ^ j[k >>> 8 & 255] ^ l[n & 255] ^ c[p++], s = d[h >>> 24] ^ e[k >>> 16 & 255] ^ j[n >>> 8 & 255] ^ l[g & 255] ^ c[p++], t = + d[k >>> 24] ^ e[n >>> 16 & 255] ^ j[g >>> 8 & 255] ^ l[h & 255] ^ c[p++], n = d[n >>> 24] ^ e[g >>> 16 & 255] ^ j[h >>> 8 & 255] ^ l[k & 255] ^ c[p++], g = q, h = s, k = t; q = (f[g >>> 24] << 24 | f[h >>> 16 & 255] << 16 | f[k >>> 8 & 255] << 8 | f[n & 255]) ^ c[p++]; s = (f[h >>> 24] << 24 | f[k >>> 16 & 255] << 16 | f[n >>> 8 & 255] << 8 | f[g & 255]) ^ c[p++]; t = (f[k >>> 24] << 24 | f[n >>> 16 & 255] << 16 | f[g >>> 8 & 255] << 8 | f[h & 255]) ^ c[p++]; n = (f[n >>> 24] << 24 | f[g >>> 16 & 255] << 16 | f[h >>> 8 & 255] << 8 | f[k & 255]) ^ c[p++]; a[b] = q; a[b + 1] = s; a[b + 2] = t; a[b + 3] = n + }, keySize: 8 + }); u.AES = p._createHelper(d) +})(); + +CryptoJS.encrypt = function (word, key, iv) { + return encrypt(word, key, iv) +} + +CryptoJS.decrypt = function (word, key, iv) { + return decrypt(word, key, iv) +} + +/** + * 加密 + * word:原密码 + * key :key + * iv : iv + */ +function encrypt (word, key, iv) { + key = CryptoJS.enc.Utf8.parse(key); + iv = CryptoJS.enc.Utf8.parse(iv); + var encrypted = CryptoJS.AES.encrypt(word, key, { + iv: iv, + mode: CryptoJS.mode.CBC, + padding: CryptoJS.pad.Pkcs7 + }); + return encrypted.toString(); +} + +/** + * 解密 + * word:加密后的密码 + * key :key + * iv : iv + */ +function decrypt (word, key, iv) { + key = CryptoJS.enc.Utf8.parse(key); + iv = CryptoJS.enc.Utf8.parse(iv); + var decrypted = CryptoJS.AES.decrypt(word, key, { + iv: iv, + mode: CryptoJS.mode.CBC, + padding: CryptoJS.pad.Pkcs7 + }); + decrypted = CryptoJS.enc.Utf8.stringify(decrypted); + return decrypted; +} +/** + * Electronic Codebook block mode. + */ +CryptoJS.mode.ECB = (function () { + var ECB = CryptoJS.lib.BlockCipherMode.extend(); + ECB.Encryptor = ECB.extend({ + processBlock: function (words, offset) { + this._cipher.encryptBlock(words, offset); + } + }); + ECB.Decryptor = ECB.extend({ + processBlock: function (words, offset) { + this._cipher.decryptBlock(words, offset); + } + }); + return ECB; +}()); +/** + * @example + * var CryptoJS = require('./util/aes.js') + * var key = CryptoJS.enc.Utf8.parse("key"); + * var iv = CryptoJS.enc.Utf8.parse("iv"); + * var pwd = CryptoJS.encrypt(this.data.pwdVal, key, iv) + * var original = CryptoJS.encrypt(pwd, key, iv) + */ +export default CryptoJS; \ No newline at end of file diff --git a/src/utils/chatEncrypt.js b/src/utils/chatEncrypt.js new file mode 100644 index 0000000..89ca680 --- /dev/null +++ b/src/utils/chatEncrypt.js @@ -0,0 +1,19 @@ +import Crypto from '@/utils/chatCrypto' + +// 秘钥,转换成utf8格式字符串,用于加密解密,一般长度是16位(由后端提供) +const key = Crypto.enc.Utf8.parse('qw5w6SFE2D1jmxyd') +// 偏移量,转换成utf8格式字符串,一般长度是16位(由后端提供) +const iv = Crypto.enc.Utf8.parse('345GDFED433223DF') + +// 加密(使用CBC模式) +export default function Encrypt(value) { + // 使用外部包中的AES的加密方法 + // value(加密内容)、key(密钥) + let encrypt = Crypto.AES.encrypt(value, key, { + iv, // 偏移量 + mode: Crypto.mode.CBC, // 模式(五种加密模式) + padding: Crypto.pad.Pkcs7 // 填充 + }) + // 将加密的内容转成字符串返回出去 + return encrypt.toString() +} diff --git a/src/utils/crypto.js b/src/utils/crypto.js new file mode 100644 index 0000000..13eb7ae --- /dev/null +++ b/src/utils/crypto.js @@ -0,0 +1,53 @@ +import CryptoJS from 'crypto-js' + +// AES CBC 加密,IV 拼接在密文前面,并进行 Base64 编码// AES CBC 加密,IV 拼接在密文前面,并进行 Base64 编码 +export function aesEncrypt(plainText, hexKey) { + // 转换密钥为WordArray + const key = CryptoJS.enc.Hex.parse(hexKey) + + // 生成一个随机的IV + const iv = generateRandomIV() // 生成 16 字节的随机 IV + + // 加密 + const encrypted = CryptoJS.AES.encrypt(plainText, key, { + iv, + padding: CryptoJS.pad.Pkcs7, + mode: CryptoJS.mode.CBC, + }) + + // 拼接IV和密文,IV在前,密文在后,最后Base64编码 + const ivAndCipherText = iv.concat(encrypted.ciphertext) + return CryptoJS.enc.Base64.stringify(ivAndCipherText) +} + +// AES CBC 解密,IV 在密文前面,并且 Base64 解码 +export function aesDecrypt(base64CipherText, hexKey) { + // 转换密钥为WordArray + const key = CryptoJS.enc.Hex.parse(hexKey) + + // Base64解码并转换为WordArray + const cipherParams = CryptoJS.enc.Base64.parse(base64CipherText) + + // 提取 IV(前 16 字节) + const iv = cipherParams.clone().words.slice(0, 4) // 16 字节的 IV 对应 4 个字(每个字 4 字节) + + // 提取密文 + const cipherText = cipherParams.clone().words.slice(4) // 从第 4 个字开始到最后的密文 + + // 解密 + const decrypted = CryptoJS.AES.decrypt({ ciphertext: CryptoJS.lib.WordArray.create(cipherText) }, key, { + iv: CryptoJS.lib.WordArray.create(iv), + padding: CryptoJS.pad.Pkcs7, + mode: CryptoJS.mode.CBC, + }) + + // 返回解密后的明文 + return decrypted.toString(CryptoJS.enc.Utf8) +} +function generateRandomIV() { + const iv = [] + for (let i = 0; i < 16; i++) { // 16 字节的 IV + iv.push(Math.floor(Math.random() * 256)) // 0-255 的随机数 + } + return CryptoJS.enc.Hex.parse(iv.map(b => b.toString(16).padStart(2, '0')).join('')) +} diff --git a/src/utils/zoomAdapter.js b/src/utils/zoomAdapter.js new file mode 100644 index 0000000..6098a76 --- /dev/null +++ b/src/utils/zoomAdapter.js @@ -0,0 +1,109 @@ +/** + * 简化版缩放适配工具 + */ +class ZoomAdapter { + constructor() { + // ===== 可调整的配置参数 ===== + this.maxZoom = 3; // 触发调整的缩放阈值(默认3倍) + this.targetZoom = 2; // 调整后的目标缩放(默认2倍) + this.isInitialized = false; + } + + init() { + if (this.isInitialized) return; + + // 绑定事件 + window.addEventListener('resize', () => this.checkZoom()); + window.addEventListener('orientationchange', () => { + setTimeout(() => this.checkZoom(), 500); + }); + + // 防止双击缩放 + let lastTouchEnd = 0; + document.addEventListener('touchend', (event) => { + const now = Date.now(); + if (now - lastTouchEnd <= 300) { + event.preventDefault(); + } + lastTouchEnd = now; + }, false); + + this.checkZoom(); + this.isInitialized = true; + } + + getCurrentZoom() { + return Math.max( + window.outerWidth / window.innerWidth, + window.devicePixelRatio, + window.screen.width / window.innerWidth + ); + } + + checkZoom() { + const zoom = this.getCurrentZoom(); + + if (zoom > this.maxZoom) { + this.adjust(zoom); + } else { + this.reset(); + } + } + + adjust(zoom) { + try { + // 计算调整比例:目标缩放 / 当前缩放 + const ratio = this.targetZoom / zoom; + + // 应用调整 + document.body.style.transform = `scale(${ratio})`; + document.body.style.transformOrigin = 'top left'; + document.body.style.width = `${100 / ratio}%`; + document.body.style.height = `${100 / ratio}%`; + } catch (e) { + console.warn('缩放调整失败:', e); + } + } + + reset() { + try { + document.body.style.transform = ''; + document.body.style.transformOrigin = ''; + document.body.style.width = ''; + document.body.style.height = ''; + } catch (e) { + console.warn('缩放重置失败:', e); + } + } + + addZoomStyles() { + const style = document.createElement('style'); + style.id = 'zoom-adapter-styles'; + style.textContent = ` + .zoom-adaptive { + font-size: 16px !important; + line-height: 1.5 !important; + } + .zoom-adaptive input, + .zoom-adaptive button, + .zoom-adaptive select, + .zoom-adaptive textarea { + font-size: 16px !important; + min-height: 44px !important; + padding: 8px 12px !important; + } + .zoom-adaptive img { + max-width: 100% !important; + height: auto !important; + } + .zoom-adaptive table { + max-width: 100% !important; + overflow-x: auto !important; + } + `; + document.head.appendChild(style); + } +} + +export default new ZoomAdapter(); +export { ZoomAdapter }; \ No newline at end of file diff --git a/src/views/Agent.vue b/src/views/Agent.vue new file mode 100644 index 0000000..512e33e --- /dev/null +++ b/src/views/Agent.vue @@ -0,0 +1,325 @@ + + + + + diff --git a/src/views/AgentManageAgreement.vue b/src/views/AgentManageAgreement.vue new file mode 100644 index 0000000..729593f --- /dev/null +++ b/src/views/AgentManageAgreement.vue @@ -0,0 +1,806 @@ + + + + + diff --git a/src/views/AgentPromoteDetails.vue b/src/views/AgentPromoteDetails.vue new file mode 100644 index 0000000..724b45d --- /dev/null +++ b/src/views/AgentPromoteDetails.vue @@ -0,0 +1,117 @@ + + + + + \ No newline at end of file diff --git a/src/views/AgentRewardsDetails.vue b/src/views/AgentRewardsDetails.vue new file mode 100644 index 0000000..aa14113 --- /dev/null +++ b/src/views/AgentRewardsDetails.vue @@ -0,0 +1,137 @@ + + + + + \ No newline at end of file diff --git a/src/views/AgentServiceAgreement.vue b/src/views/AgentServiceAgreement.vue new file mode 100644 index 0000000..fa5304e --- /dev/null +++ b/src/views/AgentServiceAgreement.vue @@ -0,0 +1,277 @@ + + + + + \ No newline at end of file diff --git a/src/views/AgentVip.vue b/src/views/AgentVip.vue new file mode 100644 index 0000000..d9abe52 --- /dev/null +++ b/src/views/AgentVip.vue @@ -0,0 +1,39 @@ + + + + + diff --git a/src/views/AgentVipApply.vue b/src/views/AgentVipApply.vue new file mode 100644 index 0000000..e3d95f7 --- /dev/null +++ b/src/views/AgentVipApply.vue @@ -0,0 +1,1067 @@ + + + + + diff --git a/src/views/AgentVipConfig.vue b/src/views/AgentVipConfig.vue new file mode 100644 index 0000000..216f0f1 --- /dev/null +++ b/src/views/AgentVipConfig.vue @@ -0,0 +1,537 @@ + + + + + diff --git a/src/views/Authorization.vue b/src/views/Authorization.vue new file mode 100644 index 0000000..e50dbbf --- /dev/null +++ b/src/views/Authorization.vue @@ -0,0 +1,198 @@ + + + + diff --git a/src/views/Complaint.vue b/src/views/Complaint.vue new file mode 100644 index 0000000..6c51d0c --- /dev/null +++ b/src/views/Complaint.vue @@ -0,0 +1,47 @@ + + + + + diff --git a/src/views/Example.vue b/src/views/Example.vue new file mode 100644 index 0000000..6b03b40 --- /dev/null +++ b/src/views/Example.vue @@ -0,0 +1,50 @@ + + + + + diff --git a/src/views/Help.vue b/src/views/Help.vue new file mode 100644 index 0000000..3a4b7f3 --- /dev/null +++ b/src/views/Help.vue @@ -0,0 +1,115 @@ + + + + + \ No newline at end of file diff --git a/src/views/HelpDetail.vue b/src/views/HelpDetail.vue new file mode 100644 index 0000000..71a9a91 --- /dev/null +++ b/src/views/HelpDetail.vue @@ -0,0 +1,80 @@ + + + + + \ No newline at end of file diff --git a/src/views/HelpGuide.vue b/src/views/HelpGuide.vue new file mode 100644 index 0000000..d95b8cb --- /dev/null +++ b/src/views/HelpGuide.vue @@ -0,0 +1,103 @@ + + + + + \ No newline at end of file diff --git a/src/views/HistoryQuery.vue b/src/views/HistoryQuery.vue new file mode 100644 index 0000000..a36f6d8 --- /dev/null +++ b/src/views/HistoryQuery.vue @@ -0,0 +1,126 @@ + + + + + diff --git a/src/views/Inquire.vue b/src/views/Inquire.vue new file mode 100644 index 0000000..0f6d1d2 --- /dev/null +++ b/src/views/Inquire.vue @@ -0,0 +1,712 @@ + + + + + diff --git a/src/views/Invitation.vue b/src/views/Invitation.vue new file mode 100644 index 0000000..58dd280 --- /dev/null +++ b/src/views/Invitation.vue @@ -0,0 +1,44 @@ + + + + diff --git a/src/views/InvitationAgentApply.vue b/src/views/InvitationAgentApply.vue new file mode 100644 index 0000000..b8e09fe --- /dev/null +++ b/src/views/InvitationAgentApply.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/views/Login.vue b/src/views/Login.vue new file mode 100644 index 0000000..4331e22 --- /dev/null +++ b/src/views/Login.vue @@ -0,0 +1,244 @@ + + + + + diff --git a/src/views/Me.vue b/src/views/Me.vue new file mode 100644 index 0000000..2d164fb --- /dev/null +++ b/src/views/Me.vue @@ -0,0 +1,292 @@ + + + + + diff --git a/src/views/NotFound.vue b/src/views/NotFound.vue new file mode 100644 index 0000000..9afb729 --- /dev/null +++ b/src/views/NotFound.vue @@ -0,0 +1,186 @@ + + + + + \ No newline at end of file diff --git a/src/views/PaymentResult.vue b/src/views/PaymentResult.vue new file mode 100644 index 0000000..61c4005 --- /dev/null +++ b/src/views/PaymentResult.vue @@ -0,0 +1,520 @@ + + + + + diff --git a/src/views/PrivacyPolicy.vue b/src/views/PrivacyPolicy.vue new file mode 100644 index 0000000..b828981 --- /dev/null +++ b/src/views/PrivacyPolicy.vue @@ -0,0 +1,458 @@ + + + + + diff --git a/src/views/Promote.vue b/src/views/Promote.vue new file mode 100644 index 0000000..789e76d --- /dev/null +++ b/src/views/Promote.vue @@ -0,0 +1,270 @@ + + + + + \ No newline at end of file diff --git a/src/views/PromotionInquire.vue b/src/views/PromotionInquire.vue new file mode 100644 index 0000000..14e6fb6 --- /dev/null +++ b/src/views/PromotionInquire.vue @@ -0,0 +1,619 @@ + + + + + diff --git a/src/views/Report.vue b/src/views/Report.vue new file mode 100644 index 0000000..e5d5f7f --- /dev/null +++ b/src/views/Report.vue @@ -0,0 +1,146 @@ + + + + + diff --git a/src/views/ReportShare.vue b/src/views/ReportShare.vue new file mode 100644 index 0000000..73db625 --- /dev/null +++ b/src/views/ReportShare.vue @@ -0,0 +1,237 @@ + + + + + diff --git a/src/views/Service.vue b/src/views/Service.vue new file mode 100644 index 0000000..e69d13a --- /dev/null +++ b/src/views/Service.vue @@ -0,0 +1,58 @@ + + + + + diff --git a/src/views/SubordinateDetail.vue b/src/views/SubordinateDetail.vue new file mode 100644 index 0000000..3272c97 --- /dev/null +++ b/src/views/SubordinateDetail.vue @@ -0,0 +1,351 @@ + + + + + diff --git a/src/views/SubordinateList.vue b/src/views/SubordinateList.vue new file mode 100644 index 0000000..e10d353 --- /dev/null +++ b/src/views/SubordinateList.vue @@ -0,0 +1,185 @@ + + + + + diff --git a/src/views/UserAgreement.vue b/src/views/UserAgreement.vue new file mode 100644 index 0000000..f234114 --- /dev/null +++ b/src/views/UserAgreement.vue @@ -0,0 +1,274 @@ + + + diff --git a/src/views/Withdraw.vue b/src/views/Withdraw.vue new file mode 100644 index 0000000..e96f245 --- /dev/null +++ b/src/views/Withdraw.vue @@ -0,0 +1,540 @@ + + + + + diff --git a/src/views/WithdrawDetails.vue b/src/views/WithdrawDetails.vue new file mode 100644 index 0000000..9314162 --- /dev/null +++ b/src/views/WithdrawDetails.vue @@ -0,0 +1,184 @@ + + + + + diff --git a/src/views/index.vue b/src/views/index.vue new file mode 100644 index 0000000..322ef64 --- /dev/null +++ b/src/views/index.vue @@ -0,0 +1,189 @@ + + + + + + +{ + "layout": "home" +} diff --git a/src/views/temp.vue b/src/views/temp.vue new file mode 100644 index 0000000..3ea72b6 --- /dev/null +++ b/src/views/temp.vue @@ -0,0 +1,486 @@ + + + + + + diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..9348b41 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,11 @@ +/** @type {import('tailwindcss').Config} */ +export default { + content: [ + "./index.html", // 如果是 Vite 项目 + "./src/**/*.{vue,js,ts,jsx,tsx}", + ], + theme: { + extend: {}, + }, + plugins: [], +}; diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000..15f5499 --- /dev/null +++ b/vite.config.js @@ -0,0 +1,97 @@ +import { fileURLToPath, URL } from "node:url"; +import AutoImport from "unplugin-auto-import/vite"; +import Components from "unplugin-vue-components/vite"; +import { VantResolver } from "@vant/auto-import-resolver"; +import { defineConfig } from "vite"; +import vue from "@vitejs/plugin-vue"; +import vueJsx from "@vitejs/plugin-vue-jsx"; +import vueDevTools from "vite-plugin-vue-devtools"; + +// https://vite.dev/config/ +export default defineConfig({ + server: { + host: "0.0.0.0", // 设置为 0.0.0.0 允许局域网访问 + port: 5678, // 自定义端口号,可选 + strictPort: true, // 如果端口被占用则抛出错误而不是使用下一个可用端口 + proxy: { + "/api/v1": { + target: "https://www.zhinengcha.cn", // 本地接口地址 + changeOrigin: true, + }, + "/api/v1/chat": { + target: "https://www.tianyuandb.com", // 本地接口地址 + changeOrigin: true, + // rewrite: (path) => path.replace(/^\/api\/v1\/chat/, '/chat') + }, + // "/api/v1": { + // target: "https://6m4685017o.goho.co", // 本地接口地址 + // changeOrigin: true, + // }, + // "/api/v1": { + // target: "http://127.0.0.1:8888", // 本地接口地址 + // changeOrigin: true, + // }, + }, + }, + build: { + // 构建优化 + target: 'es2015', // 支持更多浏览器 + minify: 'terser', // 使用terser进行压缩 + terserOptions: { + compress: { + drop_console: true, // 移除console.log + drop_debugger: true, // 移除debugger + }, + }, + rollupOptions: { + output: { + // 代码分割策略 + manualChunks: { + vendor: ['vue', 'vue-router', 'pinia'], + vant: ['vant'], + utils: ['axios', 'lodash', 'crypto-js'], + charts: ['echarts', 'vue-echarts'], + }, + // 文件名策略 + chunkFileNames: 'assets/js/[name]-[hash].js', + entryFileNames: 'assets/js/[name]-[hash].js', + assetFileNames: 'assets/[ext]/[name]-[hash].[ext]', + }, + }, + // 启用CSS代码分割 + cssCodeSplit: true, + // 设置资源内联阈值 + assetsInlineLimit: 4096, + }, + plugins: [ + vue(), + AutoImport({ + imports: [ + "vue", // 自动引入 Vue Composition API,如 ref、computed、onMounted 等 + "vue-router", // 自动引入 vue-router 中的方法,如 useRoute、useRouter 等(可选) + "@vueuse/core", // 自动引入 VueUse 中的工具函数(可选) + ], + dts: "src/auto-imports.d.ts", // 生成类型定义文件(可选) + dirs: [ + "src/composables", + "src/stores", + "src/components", + ], + resolvers: [VantResolver()], + }), + Components({ + resolvers: [VantResolver()], + }), + vueJsx(), + // vueDevTools(), + ], + resolve: { + alias: { + "@": fileURLToPath(new URL("./src", import.meta.url)), + }, + }, + // 优化依赖预构建 + optimizeDeps: { + include: ['vue', 'vue-router', 'pinia', 'vant', 'axios'], + }, +});