From 1166da81150138fd13f120ba5589d8054411f27f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=96=8C?= <259278618@qq.com> Date: Wed, 5 Aug 2026 08:53:43 +0800 Subject: [PATCH] 1 --- CLAUDE.md | 20 - data/system.db | Bin 45056 -> 45056 bytes docs/项目文档.md | 485 --- docs/项目缺陷与优化说明.md | 251 -- ui-src/.env | 6 + ui-src/.gitignore | 8 + ui-src/index.html | 12 + ui-src/package-lock.json | 2986 +++++++++++++++++ ui-src/package.json | 26 + ui-src/src/App.vue | 3 + ui-src/src/api/agent.js | 25 + ui-src/src/api/auth.js | 5 + ui-src/src/api/backgroundMusic.js | 21 + ui-src/src/api/character.js | 21 + ui-src/src/api/config.js | 17 + ui-src/src/api/customer.js | 17 + ui-src/src/api/drama.js | 25 + ui-src/src/api/episode.js | 33 + ui-src/src/api/payment.js | 13 + ui-src/src/api/prop.js | 21 + ui-src/src/api/regionPricing.js | 21 + ui-src/src/api/request.js | 44 + ui-src/src/api/scene.js | 21 + ui-src/src/api/segment.js | 9 + ui-src/src/api/transaction.js | 9 + ui-src/src/api/userConfig.js | 14 + ui-src/src/assets/china-regions.json | 589 ++++ ui-src/src/components/ConfigDialog.vue | 775 +++++ ui-src/src/components/DramaEditDialog.vue | 860 +++++ ui-src/src/components/EpisodeManageDialog.vue | 403 +++ ui-src/src/components/PaymentDialog.vue | 346 ++ ui-src/src/components/ReviewDialog.vue | 137 + ui-src/src/components/ShotTimelineEditor.vue | 238 ++ ui-src/src/components/UserConfigDialog.vue | 242 ++ ui-src/src/main.js | 14 + ui-src/src/router/index.js | 93 + ui-src/src/stores/auth.js | 36 + ui-src/src/styles/dialog.css | 250 ++ ui-src/src/utils/index.js | 8 + ui-src/src/views/DramaList.vue | 333 ++ ui-src/src/views/Layout.vue | 191 ++ ui-src/src/views/Login.vue | 94 + ui-src/src/views/admin/AgentList.vue | 322 ++ ui-src/src/views/admin/CustomerList.vue | 151 + ui-src/src/views/agent/CustomerList.vue | 179 + ui-src/src/views/customer/Profile.vue | 85 + ui-src/src/views/customer/TransactionList.vue | 50 + ui-src/vite.config.js | 36 + 48 files changed, 8789 insertions(+), 756 deletions(-) delete mode 100644 CLAUDE.md delete mode 100644 docs/项目文档.md delete mode 100644 docs/项目缺陷与优化说明.md create mode 100644 ui-src/.env create mode 100644 ui-src/.gitignore create mode 100644 ui-src/index.html create mode 100644 ui-src/package-lock.json create mode 100644 ui-src/package.json create mode 100644 ui-src/src/App.vue create mode 100644 ui-src/src/api/agent.js create mode 100644 ui-src/src/api/auth.js create mode 100644 ui-src/src/api/backgroundMusic.js create mode 100644 ui-src/src/api/character.js create mode 100644 ui-src/src/api/config.js create mode 100644 ui-src/src/api/customer.js create mode 100644 ui-src/src/api/drama.js create mode 100644 ui-src/src/api/episode.js create mode 100644 ui-src/src/api/payment.js create mode 100644 ui-src/src/api/prop.js create mode 100644 ui-src/src/api/regionPricing.js create mode 100644 ui-src/src/api/request.js create mode 100644 ui-src/src/api/scene.js create mode 100644 ui-src/src/api/segment.js create mode 100644 ui-src/src/api/transaction.js create mode 100644 ui-src/src/api/userConfig.js create mode 100644 ui-src/src/assets/china-regions.json create mode 100644 ui-src/src/components/ConfigDialog.vue create mode 100644 ui-src/src/components/DramaEditDialog.vue create mode 100644 ui-src/src/components/EpisodeManageDialog.vue create mode 100644 ui-src/src/components/PaymentDialog.vue create mode 100644 ui-src/src/components/ReviewDialog.vue create mode 100644 ui-src/src/components/ShotTimelineEditor.vue create mode 100644 ui-src/src/components/UserConfigDialog.vue create mode 100644 ui-src/src/main.js create mode 100644 ui-src/src/router/index.js create mode 100644 ui-src/src/stores/auth.js create mode 100644 ui-src/src/styles/dialog.css create mode 100644 ui-src/src/utils/index.js create mode 100644 ui-src/src/views/DramaList.vue create mode 100644 ui-src/src/views/Layout.vue create mode 100644 ui-src/src/views/Login.vue create mode 100644 ui-src/src/views/admin/AgentList.vue create mode 100644 ui-src/src/views/admin/CustomerList.vue create mode 100644 ui-src/src/views/agent/CustomerList.vue create mode 100644 ui-src/src/views/customer/Profile.vue create mode 100644 ui-src/src/views/customer/TransactionList.vue create mode 100644 ui-src/vite.config.js diff --git a/CLAUDE.md b/CLAUDE.md deleted file mode 100644 index 50281de..0000000 --- a/CLAUDE.md +++ /dev/null @@ -1,20 +0,0 @@ -# video-factory - -## Skill routing - -When the user's request matches an available skill, invoke it via the Skill tool. When in doubt, invoke the skill. - -Key routing rules: -- Product ideas/brainstorming → invoke /office-hours -- Strategy/scope → invoke /plan-ceo-review -- Architecture → invoke /plan-eng-review -- Design system/plan review → invoke /design-consultation or /plan-design-review -- Full review pipeline → invoke /autoplan -- Bugs/errors → invoke /investigate -- QA/testing site behavior → invoke /qa or /qa-only -- Code review/diff check → invoke /review -- Visual polish → invoke /design-review -- Ship/deploy/PR → invoke /ship or /land-and-deploy -- Save progress → invoke /context-save -- Resume context → invoke /context-restore -- Author a backlog-ready spec/issue → invoke /spec diff --git a/data/system.db b/data/system.db index 46ad167e3e94a5318d26478b263aa0bbabf74f39..d4089d7b0f9bd1499e331c06aed8b8001f483e31 100644 GIT binary patch delta 35 kcmZp8z|`=7X@az%8v_FaHxNSsx9>z9V@9`)2@BQ(0E(^$!2kdN delta 35 kcmZp8z|`=7X@az%7y|` -- 中间件从 token 解析 `userId`、`role`、`agentId` 注入请求上下文 -- 过期时间默认 7 天 - ---- - -## 文件存储 - -上传文件统一存储在 `workspace/{短剧标题}/` 目录下: - -``` -workspace/{短剧标题}/ -├── 产出视频/ -├── 演员形象/ -├── 演员声音/ -├── 场景/ -├── 道具/ -└── 背景音乐/ -``` - ---- - -## 配置 - -- `config.yml`:镜头时长规则(按内容类型)、画风约束 -- `.env`:开发环境代理目标(前端项目) -- 用户模型配置存数据库 `short_drama_model_config` 和 `user_model_config` - -### 模型配置继承 - -``` -系统模型配置(short_drama_model_config) - └── 用户模型配置(user_model_config,可选覆盖 API Key/模型选择) - └── GetMergedConfig() 合并两者,用户配置优先 -``` - -系统配置 + 用户配置 → `MergedModelConfig`(运行时最终配置) diff --git a/docs/项目缺陷与优化说明.md b/docs/项目缺陷与优化说明.md deleted file mode 100644 index 4bb2649..0000000 --- a/docs/项目缺陷与优化说明.md +++ /dev/null @@ -1,251 +0,0 @@ -# Video Factory 后端项目缺陷与优化说明 - -> 基于当前代码实际扫描(2026-07-24 最新)。已在此会话中修复的项不重复列出。 - ---- - -## 一、安全缺陷 - -### 1.1 JWT 密钥硬编码 - -**文件**: `shortdrama/service/user_service.go:15` - -```go -const jwtSecret = "video-factory-jwt-secret-2024" -``` - -密钥硬编码源码中,所有部署共用同一密钥。泄露后可用任意用户 Token 伪造身份。 - -**修复**: 从环境变量 `JWT_SECRET` 读取。 - -**严重程度**: 🔴 严重 - ---- - -### 1.2 支付签名使用 MD5 - -**文件**: `shortdrama/service/payment_order_service.go:362,447` - -- 微信支付使用 MD5 签名(微信推荐 HMAC-SHA256) -- 支付宝使用 `md5.Sum([]byte(raw + privateKey))` 而非标准 RSA2 - -**严重程度**: 🔴 严重 - ---- - -### 1.3 支付通知 URL 为空 - -**文件**: `shortdrama/service/payment_order_service.go:309,384` - -```go -"notify_url": "", // 需要实际外网可访问地址 -``` - -微信和支付宝通知地址均为空,支付渠道无法回调通知订单状态变更。 - -**严重程度**: 🔴 严重 - ---- - -### 1.4 支付回调错误被静默忽略 - -**文件**: `shortdrama/controller/payment_order_controller.go:67,76` - -```go -_ = service.PaymentService.HandleNotify(ctx, "wechat", body) -``` - -`HandleNotify` 返回值被忽略,即使处理失败也返回 `SUCCESS`,支付渠道不会重试,可能导致资金损失。 - -**严重程度**: 🔴 严重 - ---- - -### 1.5 微信支付 IP 写死 - -**文件**: `shortdrama/service/payment_order_service.go:308` - -```go -"spbill_create_ip": "127.0.0.1", -``` - -全部走 localhost 可能触发微信风控。 - -**严重程度**: 🟠 重要 - ---- - -### 1.6 API Key 明文写入日志 - -**文件**: `shortdrama/service/episode_service.go:216` - -```go -g.Log().Warningf(ctx, "... ApiKey=%q ...", modelCfg.ApiKey) -``` - -模型 API Key 在日志中明文输出。 - -**严重程度**: 🟠 重要 - ---- - -### 1.7 订单号随机性弱 - -**文件**: `shortdrama/service/payment_order_service.go:290` - -```go -r := rand.Intn(10000) // 仅 10000 种 -return fmt.Sprintf("PAY%s%04d", now.Format("20060102150405"), r) -``` - -使用 `math/rand`(非加密安全),同一秒内仅 10000 种订单号,高并发可重复。 - -**严重程度**: 🟠 重要 - ---- - -### 1.8 支付 nonce 使用 math/rand - -**文件**: `shortdrama/service/payment_order_service.go:457` - -```go -b[i] = letters[rand.Intn(len(letters))] -``` - -nonce 可被预测。 - -**严重程度**: 🟠 重要 - ---- - -### 1.9 CORS 未限制来源 - -**文件**: `common/http/http.go:28` - -```go -r.Response.CORS(r.Response.DefaultCORSOptions()) -``` - -允许所有来源跨域访问。 - -**严重程度**: 🟠 重要 - ---- - -### 1.10 客户默认密码为手机号后 6 位 - -**文件**: `shortdrama/service/customer_service.go:57-61` - -默认密码 = 手机号后 6 位,且 `bcryptGenerate` 错误被忽略(失败时密码为空)。 - -**严重程度**: 🟠 重要 - ---- - -### 1.11 API Key 明文存储 - -**文件**: `shortdrama/dao/payment_config_dao.go:25`, `dao/user_model_config_dao.go:34,71` - -支付 API Key、AppSecret、PrivateKey 及用户模型 API Key 在 SQLite 中明文存储。 - -**严重程度**: 🟠 重要 - ---- - -## 二、严重逻辑缺陷 - -### 2.1 并行模式永久死代码 - -**文件**: `shortdrama/service/generation_service.go:95` - -```go -// 注释说"默认使用并行生成模式" -mode = "serial" -``` - -`mode` 参数被无条件覆盖为 `"serial"`,下方完整的并行 goroutine 代码行(约 30 行)完全不可达。注释与行为矛盾。 - -**严重程度**: 🔴 严重 - ---- - -## 三、代码质量问题 - -### 3.1 generation_service.go 文件过大 - -**文件**: `shortdrama/service/generation_service.go`(2688 行,60+ 个函数) - -职责涵盖:Agent 调用、视频提交/合并、ffmpeg 操作、轮询引擎、缓存、prompt 构建、上下文构建、文件操作等。 - -**建议**: 拆分为 `generation.go`、`poller.go`、`prompt.go`、`fileops.go`、`ffmpeg.go`。 - -**严重程度**: 🟡 中等 - ---- - -## 四、架构与设计问题 - -### 4.1 DAO 用 init() 执行 DDL 迁移 - -**文件**: `shortdrama/dao/*dao.go`(17 个文件) - -DDL 散落在 `init()` 中,执行顺序依赖包导入顺序,SQLite `DROP COLUMN` 被静默忽略,无回滚,无超时,不可测试。 - -**建议**: 使用 migrate/sqlite 等迁移工具统一管理。 - -**严重程度**: 🟠 重要 - ---- - -### 4.2 缺少审计日志 - -所有 CRUD 操作(短剧、演员、场景、代理商、充值等)均无审计记录。充值无操作人身份记录。 - -**建议**: 关键操作记录 `(actor_id, action, target_type, target_id, detail)`。 - -**严重程度**: 🟡 中等 - ---- - -### 4.3 视频轮询器无指数退避 - -**文件**: `shortdrama/service/generation_service.go:1630` - -```go -ticker := time.NewTicker(15 * time.Second) -``` - -恒定 15s 轮询,任务长时间 RUNNING 时无谓消耗 DB。 - -**建议**: 实现指数退避(15s → 30s → 60s → 120s)。 - -**严重程度**: 🟡 中等 - ---- - -## 五、测试覆盖 - -### 5.1 无单元测试 - -约 100+ `.go` 文件,`_test.go` 数量为 **0**。Agent 调用、分段算法、支付签名、权限校验、DAO 操作等核心逻辑均无覆盖。 - -**严重程度**: 🟠 重要 - ---- - -### 5.2 无集成测试 - -API 端点无集成测试,无法验证路由、参数解析、响应格式。DDL 迁移完全不可测试。 - -**严重程度**: 🟡 中等 - ---- - -## 严重程度汇总 - -| 级别 | 含义 | 数量 | -|------|------|------| -| 🔴 严重 | 安全性/功能性问题 | 5 | -| 🟠 重要 | 有实际风险 | 12 | -| 🟡 中等 | 代码质量/架构 | 4 | -| 🟢 轻微 | 代码整洁性 | 0 | diff --git a/ui-src/.env b/ui-src/.env new file mode 100644 index 0000000..8a9e074 --- /dev/null +++ b/ui-src/.env @@ -0,0 +1,6 @@ +# 默认登录账号密码(开发/生产通用) +#VITE_DEFAULT_USERNAME=customer1 +#VITE_DEFAULT_PASSWORD=Tongli686^*^ + +# Vite 开发服务器代理目标(仅本地 dev 模式使用,生产由 nginx 代理) +VITE_API_PROXY_TARGET=http://localhost:3006 diff --git a/ui-src/.gitignore b/ui-src/.gitignore new file mode 100644 index 0000000..d31970d --- /dev/null +++ b/ui-src/.gitignore @@ -0,0 +1,8 @@ +node_modules +dist +.cache + +# 本地环境变量覆盖(每个开发者可自定义) +.env.local +.env.*.local +.gstack/ diff --git a/ui-src/index.html b/ui-src/index.html new file mode 100644 index 0000000..be5fa66 --- /dev/null +++ b/ui-src/index.html @@ -0,0 +1,12 @@ + + + + + + Video Factory + + +
+ + + diff --git a/ui-src/package-lock.json b/ui-src/package-lock.json new file mode 100644 index 0000000..0ab34c0 --- /dev/null +++ b/ui-src/package-lock.json @@ -0,0 +1,2986 @@ +{ + "name": "video-factory-ui", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "video-factory-ui", + "version": "1.0.0", + "dependencies": { + "@element-plus/icons-vue": "^2.3.0", + "axios": "^1.6.0", + "element-plus": "^2.5.0", + "json-schema-editor": "github:wusij/json-schema", + "pinia": "^2.1.0", + "qrcode": "^1.5.4", + "vue": "^3.4.0", + "vue-router": "^4.3.0" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^5.0.0", + "sass-embedded": "^1.100.0", + "vite": "^5.0.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.7" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bufbuild/protobuf": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.12.1.tgz", + "integrity": "sha512-BvAMfS6LrgZiryOAZ4pBYucu4wG/Ei/9o9DZ9akbREnMLbPJiom2i8b9C8IsKErQoiKqVhrerzt3kOT/RrzLHg==", + "dev": true, + "license": "(Apache-2.0 AND BSD-3-Clause)" + }, + "node_modules/@ctrl/tinycolor": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-4.2.0.tgz", + "integrity": "sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/@element-plus/icons-vue": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-2.3.2.tgz", + "integrity": "sha512-OzIuTaIfC8QXEPmJvB4Y4kw34rSXdCJzxcD1kFStBvr8bK6X1zQAYDo0CNMjojnfTqRQCJ0I7prlErcoRiET2A==", + "license": "MIT", + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.5.tgz", + "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.11" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.6.tgz", + "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.5", + "@floating-ui/utils": "^0.2.11" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.11.tgz", + "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==", + "license": "MIT" + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@parcel/watcher": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.6.tgz", + "integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.3", + "is-glob": "^4.0.3", + "node-addon-api": "^7.0.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.6", + "@parcel/watcher-darwin-arm64": "2.5.6", + "@parcel/watcher-darwin-x64": "2.5.6", + "@parcel/watcher-freebsd-x64": "2.5.6", + "@parcel/watcher-linux-arm-glibc": "2.5.6", + "@parcel/watcher-linux-arm-musl": "2.5.6", + "@parcel/watcher-linux-arm64-glibc": "2.5.6", + "@parcel/watcher-linux-arm64-musl": "2.5.6", + "@parcel/watcher-linux-x64-glibc": "2.5.6", + "@parcel/watcher-linux-x64-musl": "2.5.6", + "@parcel/watcher-win32-arm64": "2.5.6", + "@parcel/watcher-win32-ia32": "2.5.6", + "@parcel/watcher-win32-x64": "2.5.6" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.6.tgz", + "integrity": "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.6.tgz", + "integrity": "sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.6.tgz", + "integrity": "sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.6.tgz", + "integrity": "sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.6.tgz", + "integrity": "sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.6.tgz", + "integrity": "sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.6.tgz", + "integrity": "sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.6.tgz", + "integrity": "sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.6.tgz", + "integrity": "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.6.tgz", + "integrity": "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.6.tgz", + "integrity": "sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.6.tgz", + "integrity": "sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.6.tgz", + "integrity": "sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@popperjs/core": { + "name": "@sxzz/popperjs-es", + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@sxzz/popperjs-es/-/popperjs-es-2.11.8.tgz", + "integrity": "sha512-wOwESXvvED3S8xBmcPWHs2dUuzrE4XiZeFu7e1hROIJkm02a49N120pmOXxY33sBb6hArItm5W5tcg1cBtV+HQ==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.2.tgz", + "integrity": "sha512-6o7ZLZK+BeenkZCFNDXqpbjw9bD6nuWonvS/lwQJp7NoVVxm6p3qE7qQ5jGuBjiFsgvqjD8mZAU5oWxTmbOeOg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.2.tgz", + "integrity": "sha512-BaH7BllCACHoH1LguOU56UItGfUWjujlO65kS9LAodViaN4bwIKd7oeW/ZHJ/4ljr/7MIiENnNy3HJ0zXv8Zkw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.2.tgz", + "integrity": "sha512-v39RCCvj4He82I9sFmk+M1VZ0PLM9sfsLVikjfx2hYBNALhrrOR2D3JjQA6AhlaSOgcR+RzrKY7e1+bT6SUO/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.2.tgz", + "integrity": "sha512-yl0y2vq3S3lHeuXhEdss6TWfKW8vkujImO12tn4ZkG/4oghr09LvdYm2RElVjokTQiUvDUGXLGsYeLqUMCKpGA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.2.tgz", + "integrity": "sha512-tT4pvt4qXD+vEoezupCWi+a1F0vvDiksiHc+PxRlYTOH1I6/X4id9jPxTP+Fg+545euaFT1jJVs4CEdHZAU1vw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.2.tgz", + "integrity": "sha512-6nU5F2wCW+qvCBhTn1pdIU3bzsIoF7EUwsCDRxilWGprQR6yd508YnH9+OKFCwpfS8pjZqDUmnCAr7exax0XCg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.2.tgz", + "integrity": "sha512-n1GJHPOvpIfhi3TmrCeh6S6URt9BFCt0KQE3qvexyGCTAKpR4Lg+eWvNZEqu7epxwus/8ElT3hacYEucm49SZg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.2.tgz", + "integrity": "sha512-JqgflS8wEB+UXV/vS1RpRbifGBeN4D5lz8D8oOFbFZw4vedvdOgCFAjfBmIMdW3yL10XpQQ0Ambepw6MXrhOnA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.2.tgz", + "integrity": "sha512-wnFJkogWvN4jm/hQRF2UBaeUmk20j5+DmHvoyWii2b8HJDyvz1MF2OU/6ynXt2KR63rbZLWkFpoytpdc/yBuSA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.2.tgz", + "integrity": "sha512-HVu2bp0zhvJ8xHEV9+UUs7S90VadmBSY3LcIMvozbPo4AuMGDWlz3ymHLHZPX4hR67TKTt8Qp5PJ5RBg/i+RMQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.2.tgz", + "integrity": "sha512-mQqqAV8QaoSgr9I2fKDLY2BAVvmKjWoGiu/cSYQonsLvtqwEn1E4QYfnCOcp5zoEqNhsDYin1s6jx/VJmrxlZg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.2.tgz", + "integrity": "sha512-IxKLoxCQ2IWi6bT2akyDUBGsOImDKB+sPp4EsTmwFQ/fMwpCKm8uLSSgP/Kx/QYUgKis6SEZ5/Nlhup0DIA0PQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.2.tgz", + "integrity": "sha512-Mk5ha2RQSgyFfmYYLkBpPnUk8D8FriBxesO1u9O75X0mHgXL1UQcH5Itl2lurWL2tj0RxV9b9tJgipac0hRY9A==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.2.tgz", + "integrity": "sha512-CjvEnqJL/0/TQ3TXX3OPIJ/kmBellrWd4heXUmHeJlTnmwjKpSJzoehLaL6Xk0ZnMHBu9dZuFADNOrtjF4v+2w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.2.tgz", + "integrity": "sha512-1SiZbzwdkaDURsew/tSOrooKiYy7EQGT6m8ufavAi9NEyQb/6VuIxFXAL1fqa4iZe3g4NbNk4P7J32z2tw5Mgg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.2.tgz", + "integrity": "sha512-nQts12zJ3NQRoE6uYljOH89v7szzLDvG2JD/vsX+vGXU8w/At1GowTZ5/7qeFQ8m7L55rpR8Okugnuo5bgjy2Q==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.2.tgz", + "integrity": "sha512-E9/ll019jhPIJgpzfZoIkBGhcz+kKNgVWYRY0zr9srBdPPFVpvOKW8VaJKUbeK+eZXyQF9ltME+Kk6affeaPgg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.2.tgz", + "integrity": "sha512-5BqxR/pshjey51iliyzTD5Xi3EN0aLmQ2lZ3lvefVV9c82BvrLo2/6OT55iifpWBufs6kdwWbuOKS841DrmK9A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.2.tgz", + "integrity": "sha512-uNN83XxQrRAh/w0/pmAfibcwyb6YWt4gP+dpnQKPVJshAloQ785ii8CT8ZCIxkGg9opVsvAlGhFitSm6D1Jjpg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.2.tgz", + "integrity": "sha512-srjEIxSH3LRnJN6THczDHWQplqEMFiAJrTab0msUryh9kwNpkICf3Ea6q6MN/2cZwRFUNx5w+h6Hpi4QuHS6Zg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.2.tgz", + "integrity": "sha512-8hOJnxgbyObnCm5AlRA3A931xX19xq80RjVTKgJOvEKWqJruP/Uf12IbAOaDjjEXYRewwHLfmF0YRIdK3OwKWA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.2.tgz", + "integrity": "sha512-mmF4AY1i0hG/bLWUctUq59gtmgaSIRa3cu/A3JFRp/sCNEme2bgDEiDS22P9FbnJB8NJNF4jPJiSP5RHQpUTDg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.2.tgz", + "integrity": "sha512-DZgkknc6jhHrk46V25vbAM0zZkyP0nSDkJB8/dRkLTxv470dOmWDqGoEJl/9A0dFfS7yE3REOwNDxpHwSLSt0Q==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.2.tgz", + "integrity": "sha512-T6xr6ucWSFto+VGajA8YH26LdpHRuP4YLHEKAtCWvJDOlnmWcDZVCI2Jmjr+IFHDlt2zRaTAKE4tfjTaWLgJBg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.2.tgz", + "integrity": "sha512-BfzEnDJOt9T8M989/lA37EcJgat01wLRnoi5dQf3QzOH7jzpqTAzdDbVfRljVr5r+jzKqpbHeyOfAaXxAd0PAA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/lodash": { + "version": "4.17.24", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.24.tgz", + "integrity": "sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==", + "license": "MIT" + }, + "node_modules/@types/lodash-es": { + "version": "4.17.12", + "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz", + "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", + "license": "MIT", + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.21", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz", + "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==", + "license": "MIT" + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz", + "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.39", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.39.tgz", + "integrity": "sha512-16KBTEXAJCpDr0mwlw+AZyhu8iyC7R3S2vBwsI7QnWJU6X3WKc9VKeNEZpiMdZ569qWhz9574L3vV55qRL0Vtw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.7", + "@vue/shared": "3.5.39", + "entities": "^7.0.1", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.39", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.39.tgz", + "integrity": "sha512-oQPigALqYbNxTNPvNgSOe+czwVExfbVF02lz8jP0S3AXJiu3jxYDygNUiqSep4ezzW8XgnubqH63My2A7JR/vg==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.39", + "@vue/shared": "3.5.39" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.39", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.39.tgz", + "integrity": "sha512-d0ki86iOyN8LoZPBmk5SJWNwHP19CnDDCfuo//+2WJa2g5Ke0Jay983PIBIcSSzldC68I8DrD5GrHV3OSDfodg==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.7", + "@vue/compiler-core": "3.5.39", + "@vue/compiler-dom": "3.5.39", + "@vue/compiler-ssr": "3.5.39", + "@vue/shared": "3.5.39", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.21", + "postcss": "^8.5.15", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.39", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.39.tgz", + "integrity": "sha512-Ce7/wvwMHai74bdszfXExdazFigYnlF9zgCmEQUcM1j0fOymlouZ7XilTYNo8oUjhlnjYOZbGrcYKuqjz89Ucw==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.39", + "@vue/shared": "3.5.39" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", + "license": "MIT" + }, + "node_modules/@vue/reactivity": { + "version": "3.5.39", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.39.tgz", + "integrity": "sha512-TpsuBJ9gGlZa5d23XcM2y8EXanz9dZeVDQBXRwzy46ItgvM+rWpzs+UVM0wcRLxGvcav0HE5jz2gNL53xlRAog==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.39" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.39", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.39.tgz", + "integrity": "sha512-9GLtNyRvPAUMbX+7ono0RC2j0guo2LXVi8LvcmAooImACUKm0oFf0jjwbX8/H0AE/t1nxhAkn8RSl9PMCzzxZw==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.39", + "@vue/shared": "3.5.39" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.39", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.39.tgz", + "integrity": "sha512-7Y6aAGboKcXAZ3ECuUy7RrS5yy2r47dhTp2SKaJmYxjopImaVFaNa5Ne66NwGovsrxVAl5S5rwc7m22UG7Lmww==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.39", + "@vue/runtime-core": "3.5.39", + "@vue/shared": "3.5.39", + "csstype": "^3.2.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.39", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.39.tgz", + "integrity": "sha512-yZSakiAGw85rZfG7UM8akMnIF+FmeiNk47uvHf2nVBBSe+dIKUhZuZq9+XgJhbV3nS5Z4ALH23/MpXofW+mbcw==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.39", + "@vue/shared": "3.5.39" + }, + "peerDependencies": { + "vue": "3.5.39" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.39", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.39.tgz", + "integrity": "sha512-l1rrBtBfTnmxvtsvdQDXltUUy8S1Y+ZaqdfUzmAnJkTd8Z8rv5v/ytW+TKiqEOWyHPoqtPlNFSs0lhRmYVSHVA==", + "license": "MIT" + }, + "node_modules/@vueuse/core": { + "version": "14.3.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-14.3.0.tgz", + "integrity": "sha512-aHfz47g0ZhMtTVHmIzMVpJy8ePhhOy68GY5bv110+5DVtZ+W7BsOx+m61UNQqfrWyPztIHIanWa3E2tib3NFIw==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "14.3.0", + "@vueuse/shared": "14.3.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/@vueuse/metadata": { + "version": "14.3.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-14.3.0.tgz", + "integrity": "sha512-BwxmbAzwAVF50+MW57GXOUEV61nFBGnlBvrTqj49PqWJu3uw7hdu72ztXeZ33RdZtDY6kO+bfCAE1PCn88Tktw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "14.3.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-14.3.0.tgz", + "integrity": "sha512-bZpge9eSXwa4ToSiqJ7j6KRwhAsneMFoSz3LMWKQDkqimm3D/tbFlrklrs/IOqC8tEcYmXQZJ6N0UrjhBirVCg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/async-validator": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz", + "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==", + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.18.1.tgz", + "integrity": "sha512-3nTvFlvpn9Zu/RkHUqtc7/+al4UpRW5az71ap5zccp6e8RAYEzhMTecX8Dz1wWDYrPpUoB1HAQEGEAEvUr7S9g==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.16.0", + "form-data": "^4.0.5", + "https-proxy-agent": "^5.0.1", + "proxy-from-env": "^2.1.0" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/colorjs.io": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/colorjs.io/-/colorjs.io-0.5.2.tgz", + "integrity": "sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" + }, + "node_modules/dayjs": { + "version": "1.11.21", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.21.tgz", + "integrity": "sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dijkstrajs": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.3.tgz", + "integrity": "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==", + "license": "MIT" + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/element-plus": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.14.2.tgz", + "integrity": "sha512-eNH9uP3wQoNqieEIHXiNvIVv+zO5sZDU0CAZq5b0zqSN06DD0/V9xIq1R/qm3rw5k3nBTM1JvpxhCfRbaFLzDQ==", + "license": "MIT", + "dependencies": { + "@ctrl/tinycolor": "^4.2.0", + "@element-plus/icons-vue": "^2.3.2", + "@floating-ui/dom": "^1.7.6", + "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.8", + "@types/lodash": "^4.17.24", + "@types/lodash-es": "^4.17.12", + "@vueuse/core": "14.3.0", + "async-validator": "^4.2.5", + "dayjs": "^1.11.20", + "lodash": "^4.18.1", + "lodash-es": "^4.18.1", + "lodash-unified": "^1.0.3", + "memoize-one": "^6.0.0", + "normalize-wheel-es": "^1.2.0", + "vue-component-type-helpers": "^3.3.3" + }, + "peerDependencies": { + "vue": "^3.3.7" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "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" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/follow-redirects": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", + "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.4", + "mime-types": "^2.1.35" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/immutable": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.9.tgz", + "integrity": "sha512-m8nVez3rwrgmWxtLMt1ZYXB2Lv7OKYn/disyxAlSDYAlKSlFoPPfIAmAM/M5xqL4m4C/wAPw7S2/CNaUii1Hxg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/json-schema-editor": { + "version": "1.0.0", + "resolved": "git+ssh://git@github.com/wusij/json-schema.git#8827d0d6a360c37bc32a8945fb979260bd4a4c85", + "license": "MIT", + "peerDependencies": { + "@element-plus/icons-vue": "^2.3.0", + "element-plus": "^2.5.0", + "vue": "^3.4.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "license": "MIT" + }, + "node_modules/lodash-es": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.18.1.tgz", + "integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==", + "license": "MIT" + }, + "node_modules/lodash-unified": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/lodash-unified/-/lodash-unified-1.0.3.tgz", + "integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==", + "license": "MIT", + "peerDependencies": { + "@types/lodash-es": "*", + "lodash": "*", + "lodash-es": "*" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==", + "license": "MIT" + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.15", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.15.tgz", + "integrity": "sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/normalize-wheel-es": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz", + "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==", + "license": "BSD-3-Clause" + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pinia": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.3.1.tgz", + "integrity": "sha512-khUlZSwt9xXCaTbbxFYBKDc/bWAGWJjOgvxETwkTN7KRm66EeT1ZdZj6i2ceh9sP2Pzqsbc704r2yngBrxBVug==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^6.6.3", + "vue-demi": "^0.14.10" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "typescript": ">=4.4.4", + "vue": "^2.7.0 || ^3.5.11" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/pngjs": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", + "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==", + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/postcss": { + "version": "8.5.16", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.16.tgz", + "integrity": "sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.12", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/proxy-from-env": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/qrcode": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.4.tgz", + "integrity": "sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==", + "license": "MIT", + "dependencies": { + "dijkstrajs": "^1.0.1", + "pngjs": "^5.0.0", + "yargs": "^15.3.1" + }, + "bin": { + "qrcode": "bin/qrcode" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/readdirp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", + "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "license": "ISC" + }, + "node_modules/rollup": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.2.tgz", + "integrity": "sha512-RFnrW4lhXA3s3eqHDZvN654g8OTjzRfqpIRJYczCGB6HzphckVAi/Qh4tbPUbRuDi7s1Llv8g/NspLkttY3gTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.9" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.62.2", + "@rollup/rollup-android-arm64": "4.62.2", + "@rollup/rollup-darwin-arm64": "4.62.2", + "@rollup/rollup-darwin-x64": "4.62.2", + "@rollup/rollup-freebsd-arm64": "4.62.2", + "@rollup/rollup-freebsd-x64": "4.62.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.62.2", + "@rollup/rollup-linux-arm-musleabihf": "4.62.2", + "@rollup/rollup-linux-arm64-gnu": "4.62.2", + "@rollup/rollup-linux-arm64-musl": "4.62.2", + "@rollup/rollup-linux-loong64-gnu": "4.62.2", + "@rollup/rollup-linux-loong64-musl": "4.62.2", + "@rollup/rollup-linux-ppc64-gnu": "4.62.2", + "@rollup/rollup-linux-ppc64-musl": "4.62.2", + "@rollup/rollup-linux-riscv64-gnu": "4.62.2", + "@rollup/rollup-linux-riscv64-musl": "4.62.2", + "@rollup/rollup-linux-s390x-gnu": "4.62.2", + "@rollup/rollup-linux-x64-gnu": "4.62.2", + "@rollup/rollup-linux-x64-musl": "4.62.2", + "@rollup/rollup-openbsd-x64": "4.62.2", + "@rollup/rollup-openharmony-arm64": "4.62.2", + "@rollup/rollup-win32-arm64-msvc": "4.62.2", + "@rollup/rollup-win32-ia32-msvc": "4.62.2", + "@rollup/rollup-win32-x64-gnu": "4.62.2", + "@rollup/rollup-win32-x64-msvc": "4.62.2", + "fsevents": "~2.3.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/sass": { + "version": "1.100.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.100.0.tgz", + "integrity": "sha512-B5j0rYMlinhhOo9tjQebMVVn0TfyXAF+wB3b2ggZUuJ/is/Y+7+JGjirAMxHZ9Z3hIP98NPfamlAkBHa1lAaXQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "chokidar": "^5.0.0", + "immutable": "^5.1.5", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=20.19.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" + } + }, + "node_modules/sass-embedded": { + "version": "1.100.0", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.100.0.tgz", + "integrity": "sha512-Ut8wlQSk19tm7jMK6mz6cF1+e+E7tUnW2tM02zQDPnOTcVbV8qCQG8UWxZkkNlY50+hV3hqP24OOkUlMz8xBpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@bufbuild/protobuf": "^2.5.0", + "colorjs.io": "^0.5.0", + "immutable": "^5.1.5", + "rxjs": "^7.4.0", + "supports-color": "^8.1.1", + "sync-child-process": "^1.0.2", + "varint": "^6.0.0" + }, + "bin": { + "sass": "dist/bin/sass.js" + }, + "engines": { + "node": ">=16.0.0" + }, + "optionalDependencies": { + "sass-embedded-all-unknown": "1.100.0", + "sass-embedded-android-arm": "1.100.0", + "sass-embedded-android-arm64": "1.100.0", + "sass-embedded-android-riscv64": "1.100.0", + "sass-embedded-android-x64": "1.100.0", + "sass-embedded-darwin-arm64": "1.100.0", + "sass-embedded-darwin-x64": "1.100.0", + "sass-embedded-linux-arm": "1.100.0", + "sass-embedded-linux-arm64": "1.100.0", + "sass-embedded-linux-musl-arm": "1.100.0", + "sass-embedded-linux-musl-arm64": "1.100.0", + "sass-embedded-linux-musl-riscv64": "1.100.0", + "sass-embedded-linux-musl-x64": "1.100.0", + "sass-embedded-linux-riscv64": "1.100.0", + "sass-embedded-linux-x64": "1.100.0", + "sass-embedded-unknown-all": "1.100.0", + "sass-embedded-win32-arm64": "1.100.0", + "sass-embedded-win32-x64": "1.100.0" + } + }, + "node_modules/sass-embedded-all-unknown": { + "version": "1.100.0", + "resolved": "https://registry.npmjs.org/sass-embedded-all-unknown/-/sass-embedded-all-unknown-1.100.0.tgz", + "integrity": "sha512-auFtXY/kwYILmSVjtBDwyj0axcLbYYiffOKWoaXHnI5bsYwiRbBh3EneR1rpbX2ZIZCrwX93i5pxKLTZF/662Q==", + "cpu": [ + "!arm", + "!arm64", + "!riscv64", + "!x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "sass": "1.100.0" + } + }, + "node_modules/sass-embedded-android-arm": { + "version": "1.100.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.100.0.tgz", + "integrity": "sha512-70f3HgX2pFNmzpGQ86n5e6QfWn2fP4QUQGfFQK0P1XH73ZLIzLo2YqygrGKGKeeqtc5eU2Wl1/xQzhzuKnO4kw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-arm64": { + "version": "1.100.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.100.0.tgz", + "integrity": "sha512-W+Ru9JwTnfU0UX3jSZcbqFdtKFMcYdfFwytc57h2DgnqCOIiAqI2E06mABZBZC+r3LwXCBuS5GbXAGeVgvVDkA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-riscv64": { + "version": "1.100.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.100.0.tgz", + "integrity": "sha512-icU3o0V/uCSytSpf+tX5Lf51BvyQEbLzDUJfUi9etSauYBGHpPKkdtdZH0si4v98phq11Kl8rSV1SggksxF1Hg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-x64": { + "version": "1.100.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.100.0.tgz", + "integrity": "sha512-mevF9VQk6gEYByy8+jusaHGmd7Usb2ytX/DsEOd0JtOGCtcf1kh575xJ6OUBDIcJ15uLnbau/0iy1eP6WVBvWA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-darwin-arm64": { + "version": "1.100.0", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.100.0.tgz", + "integrity": "sha512-1PVlYi61POo93IT/FfrG1mc1tAHxeSTyUALF2aOFmXGWjVXr3bQzEQiBGCOvQbj/ix+5hNyXFXcEMEyKvtUJJA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-darwin-x64": { + "version": "1.100.0", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.100.0.tgz", + "integrity": "sha512-x97o3JnGyImZNCIVs9wQHJUE5QCvmVIKaH1cwrz/5dK7OT1FpeNiW+u9TUomP9hG6Ekjd8EL8NBHpxTfIhdjmg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-arm": { + "version": "1.100.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.100.0.tgz", + "integrity": "sha512-9Ul7O1eKrc5YlhwWjkp8tZPSe3UEwSZ1uwUZOQom1HL0pRlBA6F/IlGZYFTLwnHMIP1fc77MMNaBRfc05mKMpw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-arm64": { + "version": "1.100.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.100.0.tgz", + "integrity": "sha512-Dwjmj8Z6VRy7rAi53JAdEwIyUjpfl7PhpSc2/LpQPQx+aO5Dp7Spaipkax0ufJl1SoDUdchCsM4y/88YaluorQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-arm": { + "version": "1.100.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.100.0.tgz", + "integrity": "sha512-sl0JgbGloPyJg66XXx5UDSDScZ0oU85DpMQU4JU/sCUCFj1Z8zZ69SJWKTCNE4/jwnce7WI2zPCV5AG+RHOZJw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-arm64": { + "version": "1.100.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.100.0.tgz", + "integrity": "sha512-XpACJB2KjSLjf2e9uuvGVdOURsoNrFqgRiihhXyUHK9W0t3LIHb7z5MA/7XGPIT9bWSOO2zyw+rH/FHtDV/Yrg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-riscv64": { + "version": "1.100.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.100.0.tgz", + "integrity": "sha512-ShvI0Kx04mwoCARwZ0UjiT97isQvzO80tAt91zmFyHLN9kelc/IrQi940farSm2xQVPCKdeVyeG0ekBsokSpYQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-x64": { + "version": "1.100.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.100.0.tgz", + "integrity": "sha512-TDBCRWNuS4RDLQXvRc1gjZlWiWTWaWGp0Bwu/IKwJxov81lsvrCs3TihTyNXtW7V5aoN4Ky3r0QOkNb3mwmBnA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-riscv64": { + "version": "1.100.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.100.0.tgz", + "integrity": "sha512-j4ENJGOheO+fm3j/yorLxCjBP6/XskrZx7dTLlT+lXYwN/qqCqoA/gsNLI0McS3DFM6GBwPiffzWsdWS8t6sEQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-x64": { + "version": "1.100.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.100.0.tgz", + "integrity": "sha512-0vUSN8j0WGtCJIOPh//EmUvYGHW0QOe5iul8qyhPk50MAcw49MA0r34AhftjDdx94ILPF6vApFs0gwHPQRlpVA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-unknown-all": { + "version": "1.100.0", + "resolved": "https://registry.npmjs.org/sass-embedded-unknown-all/-/sass-embedded-unknown-all-1.100.0.tgz", + "integrity": "sha512-c+naBgWId4MIpToXcI0DgqetjdAkwTTAxFAuOaBz7HUXLdyG1oZRrEvSsbe41nEdQOKH0vgofVFCeSQgoXOG9A==", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "!android", + "!darwin", + "!linux", + "!win32" + ], + "dependencies": { + "sass": "1.100.0" + } + }, + "node_modules/sass-embedded-win32-arm64": { + "version": "1.100.0", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.100.0.tgz", + "integrity": "sha512-iE+yxj+hUXwwbqpHkXxgAWTzeRfcWxJ7SSTQEPMk48lwq3oCrWLlz5sQuWHbuTK/i0GKQfROdP+hOmPi89yjUg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-win32-x64": { + "version": "1.100.0", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.100.0.tgz", + "integrity": "sha512-qI4F8MI7/KYoy9NdjJfhSspG42WPkADSNDvwEV7qWvCSFC83koJssRsKO2/PfY+niZz6BG65Ic/D+A11h959hw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "license": "ISC" + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/sync-child-process": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/sync-child-process/-/sync-child-process-1.0.2.tgz", + "integrity": "sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "sync-message-port": "^1.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/sync-message-port": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/sync-message-port/-/sync-message-port-1.2.0.tgz", + "integrity": "sha512-gAQ9qrUN/UCypHtGFbbe7Rc/f9bzO88IwrG8TDo/aMKAApKyD6E3W4Cm0EfhfBb6Z6SKt59tTCTfD+n1xmAvMg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/varint": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite": { + "version": "5.4.21", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", + "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "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 + } + } + }, + "node_modules/vue": { + "version": "3.5.39", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.39.tgz", + "integrity": "sha512-xmZCYabFGcirU8r0fTuvl/LICc1OU620rnqepaJDL/a141ZigkG7AyaxQLdqJ02ZRYzWe6YPaDHeQx7MfknQfA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.39", + "@vue/compiler-sfc": "3.5.39", + "@vue/runtime-dom": "3.5.39", + "@vue/server-renderer": "3.5.39", + "@vue/shared": "3.5.39" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-component-type-helpers": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-3.3.6.tgz", + "integrity": "sha512-FkljacAwJ9BUoSUdpFe3VDy0sGigNlTH9+2zcXUWmZOjN8swiCkl3t48wOJun0OsUd2cEIda1l04tsxMiKIIrQ==", + "license": "MIT" + }, + "node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/vue-router": { + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.6.4.tgz", + "integrity": "sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^6.6.4" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "license": "ISC" + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "license": "ISC" + }, + "node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "license": "MIT", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "license": "ISC", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + } + } +} diff --git a/ui-src/package.json b/ui-src/package.json new file mode 100644 index 0000000..fc1af80 --- /dev/null +++ b/ui-src/package.json @@ -0,0 +1,26 @@ +{ + "name": "video-factory-ui", + "version": "1.0.0", + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "@element-plus/icons-vue": "^2.3.0", + "axios": "^1.6.0", + "element-plus": "^2.5.0", + "json-schema-editor": "github:wusij/json-schema", + "pinia": "^2.1.0", + "qrcode": "^1.5.4", + "vue": "^3.4.0", + "vue-router": "^4.3.0" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^5.0.0", + "sass-embedded": "^1.100.0", + "vite": "^5.0.0" + } +} diff --git a/ui-src/src/App.vue b/ui-src/src/App.vue new file mode 100644 index 0000000..98240ae --- /dev/null +++ b/ui-src/src/App.vue @@ -0,0 +1,3 @@ + diff --git a/ui-src/src/api/agent.js b/ui-src/src/api/agent.js new file mode 100644 index 0000000..5e647b7 --- /dev/null +++ b/ui-src/src/api/agent.js @@ -0,0 +1,25 @@ +import request from './request.js' + +export function listAgents(params) { + return request.get('/agent/list', { params }) +} + +export function createAgent(data) { + return request.post('/agent/create', data) +} + +export function updateAgent(data) { + return request.post('/agent/update', data) +} + +export function createRenewOrder(agentId, duration, pricingId) { + return request.post('/agent/create-renew-order', { agent_id: agentId, duration, pricing_id: pricingId }) +} + +export function getAgentDetail(id) { + return request.post('/agent/get', { id }) +} + +export function listAgentRenewals(agentId) { + return request.get('/agent/list-renewals', { params: { agent_id: agentId } }) +} diff --git a/ui-src/src/api/auth.js b/ui-src/src/api/auth.js new file mode 100644 index 0000000..3a1315c --- /dev/null +++ b/ui-src/src/api/auth.js @@ -0,0 +1,5 @@ +import request from './request.js' + +export function login(data) { + return request.post('/user/login', data) +} diff --git a/ui-src/src/api/backgroundMusic.js b/ui-src/src/api/backgroundMusic.js new file mode 100644 index 0000000..301272d --- /dev/null +++ b/ui-src/src/api/backgroundMusic.js @@ -0,0 +1,21 @@ +import request from './request' + +export function listBackgroundMusic(dramaId) { + return request.get('/bgm/list', { params: { dramaId } }) +} + +export function addBackgroundMusic(formData) { + return request.post('/bgm/add', formData, { + headers: { 'Content-Type': 'multipart/form-data' } + }) +} + +export function updateBackgroundMusic(formData) { + return request.post('/bgm/update', formData, { + headers: { 'Content-Type': 'multipart/form-data' } + }) +} + +export function deleteBackgroundMusic(data) { + return request.post('/bgm/delete', data) +} diff --git a/ui-src/src/api/character.js b/ui-src/src/api/character.js new file mode 100644 index 0000000..f9bcfb8 --- /dev/null +++ b/ui-src/src/api/character.js @@ -0,0 +1,21 @@ +import request from './request' + +export function addCharacter(formData) { + return request.post('/character/add', formData, { + headers: { 'Content-Type': 'multipart/form-data' } + }) +} + +export function updateCharacter(formData) { + return request.post('/character/update', formData, { + headers: { 'Content-Type': 'multipart/form-data' } + }) +} + +export function deleteCharacter(data) { + return request.post('/character/delete', data) +} + +export function listCharacters(dramaId) { + return request.get('/character/list', { params: { dramaId } }) +} diff --git a/ui-src/src/api/config.js b/ui-src/src/api/config.js new file mode 100644 index 0000000..1ac213a --- /dev/null +++ b/ui-src/src/api/config.js @@ -0,0 +1,17 @@ +import request from './request' + +export function getModelConfig(params) { + return request.get('/model-config/get-model-list', { params }) +} + +export function saveModelConfig(data) { + return request.post('/model-config/save-model-config', data) +} + +export function getPaymentConfig() { + return request.get('/payment-config/get') +} + +export function savePaymentConfig(data) { + return request.post('/payment-config/save', data) +} diff --git a/ui-src/src/api/customer.js b/ui-src/src/api/customer.js new file mode 100644 index 0000000..0de67ac --- /dev/null +++ b/ui-src/src/api/customer.js @@ -0,0 +1,17 @@ +import request from './request.js' + +export function listCustomers(params) { + return request.get('/customer/list', { params }) +} + +export function createCustomer(data) { + return request.post('/customer/create', data) +} + +export function customerDetail(id) { + return request.post('/customer/detail', { id }) +} + +export function updateCustomer(data) { + return request.post('/customer/update', data) +} diff --git a/ui-src/src/api/drama.js b/ui-src/src/api/drama.js new file mode 100644 index 0000000..74d5178 --- /dev/null +++ b/ui-src/src/api/drama.js @@ -0,0 +1,25 @@ +import request from './request' + +export function listDramas(page = 1, pageSize = 20, keyword = '') { + return request.get('/drama/list', { params: { page, pageSize, keyword } }) +} + +export function createDrama(data) { + return request.post('/drama/create', data) +} + +export function getDrama(id) { + return request.get('/drama/get', { params: { id } }) +} + +export function updateDrama(data) { + return request.post('/drama/update', data) +} + +export function deleteDrama(id) { + return request.post('/drama/delete', { id }) +} + +export function getFieldDefinitions() { + return request.get('/drama/field-definitions') +} diff --git a/ui-src/src/api/episode.js b/ui-src/src/api/episode.js new file mode 100644 index 0000000..8bca845 --- /dev/null +++ b/ui-src/src/api/episode.js @@ -0,0 +1,33 @@ +import request from './request' + +export function listEpisodes(dramaId, page = 1, pageSize = 100, keyword = '') { + return request.get('/episode/list', { params: { dramaId, page, pageSize, keyword } }) +} + +export function addEpisode(data) { + return request.post('/episode/add', data, { timeout: 0 }) +} + +export function updateEpisode(data) { + return request.post('/episode/update', data, { timeout: 0 }) +} + +export function deleteEpisode(data) { + return request.post('/episode/delete', data) +} + +export function generateEpisode(data) { + return request.post('/generation/generate', data) +} + +export function pollEpisode(epId) { + return request.get('/generation/poll', { params: { epId } }) +} + +export function getEpisodeTasks(epId) { + return request.get('/generation/episode/task', { params: { epId } }) +} + +export function generateEpisodeScript(data) { + return request.post('/episode/generate-script', data, { timeout: 0 }) +} diff --git a/ui-src/src/api/payment.js b/ui-src/src/api/payment.js new file mode 100644 index 0000000..51d7819 --- /dev/null +++ b/ui-src/src/api/payment.js @@ -0,0 +1,13 @@ +import request from './request.js' + +export function prepay(data) { + return request.post('/payment-order/prepay', data) +} + +export function queryPaymentStatus(orderNo) { + return request.get('/payment-order/status', { params: { order_no: orderNo } }) +} + +export function confirmOffline(orderNo) { + return request.post('/payment-order/confirm-offline', { order_no: orderNo }) +} diff --git a/ui-src/src/api/prop.js b/ui-src/src/api/prop.js new file mode 100644 index 0000000..3a6214e --- /dev/null +++ b/ui-src/src/api/prop.js @@ -0,0 +1,21 @@ +import request from './request' + +export function listProps(dramaId) { + return request.get('/prop/list', { params: { dramaId } }) +} + +export function addProp(formData) { + return request.post('/prop/add', formData, { + headers: { 'Content-Type': 'multipart/form-data' } + }) +} + +export function updateProp(formData) { + return request.post('/prop/update', formData, { + headers: { 'Content-Type': 'multipart/form-data' } + }) +} + +export function deleteProp(data) { + return request.post('/prop/delete', data) +} diff --git a/ui-src/src/api/regionPricing.js b/ui-src/src/api/regionPricing.js new file mode 100644 index 0000000..2b97fdc --- /dev/null +++ b/ui-src/src/api/regionPricing.js @@ -0,0 +1,21 @@ +import request from './request.js' + +export function listRegionPricing(data) { + return request.get('/region-pricing/list', { params: data }) +} + +export function saveRegionPricing(data) { + return request.post('/region-pricing/save', data) +} + +export function deleteRegionPricing(id) { + return request.post('/region-pricing/delete', { id }) +} + +export function listRegions() { + return request.post('/region-pricing/regions') +} + +export function listRegionCascades() { + return request.post('/region-pricing/cascades') +} diff --git a/ui-src/src/api/request.js b/ui-src/src/api/request.js new file mode 100644 index 0000000..55c1ef0 --- /dev/null +++ b/ui-src/src/api/request.js @@ -0,0 +1,44 @@ +import axios from 'axios' +import { ElMessage } from 'element-plus' + +const request = axios.create({ + timeout: 180000 +}) + +request.interceptors.request.use(config => { + const token = localStorage.getItem('token') + if (token) { + config.headers.Authorization = 'Bearer ' + token + } + return config +}) + +function redirectLogin() { + localStorage.removeItem('token') + localStorage.removeItem('user') + window.location.href = '/#/login' +} + +request.interceptors.response.use( + response => { + const data = response.data + if (data.code !== 0) { + if (data.code === 401) { + redirectLogin() + return Promise.reject(new Error(data.message)) + } + ElMessage.error(data.message || '请求失败') + return Promise.reject(new Error(data.message)) + } + return data.data + }, + error => { + if (error.response?.status === 401) { + redirectLogin() + } + ElMessage.error(error.message || '网络错误') + return Promise.reject(error) + } +) + +export default request diff --git a/ui-src/src/api/scene.js b/ui-src/src/api/scene.js new file mode 100644 index 0000000..84db088 --- /dev/null +++ b/ui-src/src/api/scene.js @@ -0,0 +1,21 @@ +import request from './request' + +export function listScenes(dramaId) { + return request.get('/scene/list', { params: { dramaId } }) +} + +export function addScene(formData) { + return request.post('/scene/add', formData, { + headers: { 'Content-Type': 'multipart/form-data' } + }) +} + +export function updateScene(formData) { + return request.post('/scene/update', formData, { + headers: { 'Content-Type': 'multipart/form-data' } + }) +} + +export function deleteScene(data) { + return request.post('/scene/delete', data) +} diff --git a/ui-src/src/api/segment.js b/ui-src/src/api/segment.js new file mode 100644 index 0000000..d988793 --- /dev/null +++ b/ui-src/src/api/segment.js @@ -0,0 +1,9 @@ +import request from './request' + +export function continueSegment(taskId) { + return request.post('/generation/segment/continue', { taskId }) +} + +export function feedbackSegment(data) { + return request.post('/generation/segment/feedback', data) +} diff --git a/ui-src/src/api/transaction.js b/ui-src/src/api/transaction.js new file mode 100644 index 0000000..351323b --- /dev/null +++ b/ui-src/src/api/transaction.js @@ -0,0 +1,9 @@ +import request from './request.js' + +export function listTransactions(userId = 0, page = 1, pageSize = 20, typeFilter = '') { + return request.get('/transaction/list', { params: { user_id: userId, type: typeFilter, page, page_size: pageSize } }) +} + +export function recharge(data) { + return request.post('/transaction/recharge', data) +} diff --git a/ui-src/src/api/userConfig.js b/ui-src/src/api/userConfig.js new file mode 100644 index 0000000..4b742bc --- /dev/null +++ b/ui-src/src/api/userConfig.js @@ -0,0 +1,14 @@ +import request from './request' + +export function getUserConfig() { + return request.get('/user-model-config/get-user-config') +} + +export function saveUserConfig(data) { + return request.post('/user-model-config/save-user-config', data) +} + +export function getUserModelList(params) { + return request.get('/user-model-config/get-user-model-list', { params }) +} + diff --git a/ui-src/src/assets/china-regions.json b/ui-src/src/assets/china-regions.json new file mode 100644 index 0000000..82f9441 --- /dev/null +++ b/ui-src/src/assets/china-regions.json @@ -0,0 +1,589 @@ +[ + { + "label": "北京市", + "value": "北京市", + "children": [ + { "label": "北京市", "value": "北京市" } + ] + }, + { + "label": "天津市", + "value": "天津市", + "children": [ + { "label": "天津市", "value": "天津市" } + ] + }, + { + "label": "河北省", + "value": "河北省", + "children": [ + { "label": "石家庄市", "value": "石家庄市" }, + { "label": "唐山市", "value": "唐山市" }, + { "label": "秦皇岛市", "value": "秦皇岛市" }, + { "label": "邯郸市", "value": "邯郸市" }, + { "label": "邢台市", "value": "邢台市" }, + { "label": "保定市", "value": "保定市" }, + { "label": "张家口市", "value": "张家口市" }, + { "label": "承德市", "value": "承德市" }, + { "label": "沧州市", "value": "沧州市" }, + { "label": "廊坊市", "value": "廊坊市" }, + { "label": "衡水市", "value": "衡水市" } + ] + }, + { + "label": "山西省", + "value": "山西省", + "children": [ + { "label": "太原市", "value": "太原市" }, + { "label": "大同市", "value": "大同市" }, + { "label": "阳泉市", "value": "阳泉市" }, + { "label": "长治市", "value": "长治市" }, + { "label": "晋城市", "value": "晋城市" }, + { "label": "朔州市", "value": "朔州市" }, + { "label": "晋中市", "value": "晋中市" }, + { "label": "运城市", "value": "运城市" }, + { "label": "忻州市", "value": "忻州市" }, + { "label": "临汾市", "value": "临汾市" }, + { "label": "吕梁市", "value": "吕梁市" } + ] + }, + { + "label": "内蒙古自治区", + "value": "内蒙古自治区", + "children": [ + { "label": "呼和浩特市", "value": "呼和浩特市" }, + { "label": "包头市", "value": "包头市" }, + { "label": "乌海市", "value": "乌海市" }, + { "label": "赤峰市", "value": "赤峰市" }, + { "label": "通辽市", "value": "通辽市" }, + { "label": "鄂尔多斯市", "value": "鄂尔多斯市" }, + { "label": "呼伦贝尔市", "value": "呼伦贝尔市" }, + { "label": "巴彦淖尔市", "value": "巴彦淖尔市" }, + { "label": "乌兰察布市", "value": "乌兰察布市" }, + { "label": "兴安盟", "value": "兴安盟" }, + { "label": "锡林郭勒盟", "value": "锡林郭勒盟" }, + { "label": "阿拉善盟", "value": "阿拉善盟" } + ] + }, + { + "label": "辽宁省", + "value": "辽宁省", + "children": [ + { "label": "沈阳市", "value": "沈阳市" }, + { "label": "大连市", "value": "大连市" }, + { "label": "鞍山市", "value": "鞍山市" }, + { "label": "抚顺市", "value": "抚顺市" }, + { "label": "本溪市", "value": "本溪市" }, + { "label": "丹东市", "value": "丹东市" }, + { "label": "锦州市", "value": "锦州市" }, + { "label": "营口市", "value": "营口市" }, + { "label": "阜新市", "value": "阜新市" }, + { "label": "辽阳市", "value": "辽阳市" }, + { "label": "盘锦市", "value": "盘锦市" }, + { "label": "铁岭市", "value": "铁岭市" }, + { "label": "朝阳市", "value": "朝阳市" }, + { "label": "葫芦岛市", "value": "葫芦岛市" } + ] + }, + { + "label": "吉林省", + "value": "吉林省", + "children": [ + { "label": "长春市", "value": "长春市" }, + { "label": "吉林市", "value": "吉林市" }, + { "label": "四平市", "value": "四平市" }, + { "label": "辽源市", "value": "辽源市" }, + { "label": "通化市", "value": "通化市" }, + { "label": "白山市", "value": "白山市" }, + { "label": "松原市", "value": "松原市" }, + { "label": "白城市", "value": "白城市" }, + { "label": "延边朝鲜族自治州", "value": "延边朝鲜族自治州" } + ] + }, + { + "label": "黑龙江省", + "value": "黑龙江省", + "children": [ + { "label": "哈尔滨市", "value": "哈尔滨市" }, + { "label": "齐齐哈尔市", "value": "齐齐哈尔市" }, + { "label": "鸡西市", "value": "鸡西市" }, + { "label": "鹤岗市", "value": "鹤岗市" }, + { "label": "双鸭山市", "value": "双鸭山市" }, + { "label": "大庆市", "value": "大庆市" }, + { "label": "伊春市", "value": "伊春市" }, + { "label": "佳木斯市", "value": "佳木斯市" }, + { "label": "七台河市", "value": "七台河市" }, + { "label": "牡丹江市", "value": "牡丹江市" }, + { "label": "黑河市", "value": "黑河市" }, + { "label": "绥化市", "value": "绥化市" }, + { "label": "大兴安岭地区", "value": "大兴安岭地区" } + ] + }, + { + "label": "上海市", + "value": "上海市", + "children": [ + { "label": "上海市", "value": "上海市" } + ] + }, + { + "label": "江苏省", + "value": "江苏省", + "children": [ + { "label": "南京市", "value": "南京市" }, + { "label": "无锡市", "value": "无锡市" }, + { "label": "徐州市", "value": "徐州市" }, + { "label": "常州市", "value": "常州市" }, + { "label": "苏州市", "value": "苏州市" }, + { "label": "南通市", "value": "南通市" }, + { "label": "连云港市", "value": "连云港市" }, + { "label": "淮安市", "value": "淮安市" }, + { "label": "盐城市", "value": "盐城市" }, + { "label": "扬州市", "value": "扬州市" }, + { "label": "镇江市", "value": "镇江市" }, + { "label": "泰州市", "value": "泰州市" }, + { "label": "宿迁市", "value": "宿迁市" } + ] + }, + { + "label": "浙江省", + "value": "浙江省", + "children": [ + { "label": "杭州市", "value": "杭州市" }, + { "label": "宁波市", "value": "宁波市" }, + { "label": "温州市", "value": "温州市" }, + { "label": "嘉兴市", "value": "嘉兴市" }, + { "label": "湖州市", "value": "湖州市" }, + { "label": "绍兴市", "value": "绍兴市" }, + { "label": "金华市", "value": "金华市" }, + { "label": "衢州市", "value": "衢州市" }, + { "label": "舟山市", "value": "舟山市" }, + { "label": "台州市", "value": "台州市" }, + { "label": "丽水市", "value": "丽水市" } + ] + }, + { + "label": "安徽省", + "value": "安徽省", + "children": [ + { "label": "合肥市", "value": "合肥市" }, + { "label": "芜湖市", "value": "芜湖市" }, + { "label": "蚌埠市", "value": "蚌埠市" }, + { "label": "淮南市", "value": "淮南市" }, + { "label": "马鞍山市", "value": "马鞍山市" }, + { "label": "淮北市", "value": "淮北市" }, + { "label": "铜陵市", "value": "铜陵市" }, + { "label": "安庆市", "value": "安庆市" }, + { "label": "黄山市", "value": "黄山市" }, + { "label": "滁州市", "value": "滁州市" }, + { "label": "阜阳市", "value": "阜阳市" }, + { "label": "宿州市", "value": "宿州市" }, + { "label": "六安市", "value": "六安市" }, + { "label": "亳州市", "value": "亳州市" }, + { "label": "池州市", "value": "池州市" }, + { "label": "宣城市", "value": "宣城市" } + ] + }, + { + "label": "福建省", + "value": "福建省", + "children": [ + { "label": "福州市", "value": "福州市" }, + { "label": "厦门市", "value": "厦门市" }, + { "label": "莆田市", "value": "莆田市" }, + { "label": "三明市", "value": "三明市" }, + { "label": "泉州市", "value": "泉州市" }, + { "label": "漳州市", "value": "漳州市" }, + { "label": "南平市", "value": "南平市" }, + { "label": "龙岩市", "value": "龙岩市" }, + { "label": "宁德市", "value": "宁德市" } + ] + }, + { + "label": "江西省", + "value": "江西省", + "children": [ + { "label": "南昌市", "value": "南昌市" }, + { "label": "景德镇市", "value": "景德镇市" }, + { "label": "萍乡市", "value": "萍乡市" }, + { "label": "九江市", "value": "九江市" }, + { "label": "新余市", "value": "新余市" }, + { "label": "鹰潭市", "value": "鹰潭市" }, + { "label": "赣州市", "value": "赣州市" }, + { "label": "吉安市", "value": "吉安市" }, + { "label": "宜春市", "value": "宜春市" }, + { "label": "抚州市", "value": "抚州市" }, + { "label": "上饶市", "value": "上饶市" } + ] + }, + { + "label": "山东省", + "value": "山东省", + "children": [ + { "label": "济南市", "value": "济南市" }, + { "label": "青岛市", "value": "青岛市" }, + { "label": "淄博市", "value": "淄博市" }, + { "label": "枣庄市", "value": "枣庄市" }, + { "label": "东营市", "value": "东营市" }, + { "label": "烟台市", "value": "烟台市" }, + { "label": "潍坊市", "value": "潍坊市" }, + { "label": "济宁市", "value": "济宁市" }, + { "label": "泰安市", "value": "泰安市" }, + { "label": "威海市", "value": "威海市" }, + { "label": "日照市", "value": "日照市" }, + { "label": "临沂市", "value": "临沂市" }, + { "label": "德州市", "value": "德州市" }, + { "label": "聊城市", "value": "聊城市" }, + { "label": "滨州市", "value": "滨州市" }, + { "label": "菏泽市", "value": "菏泽市" } + ] + }, + { + "label": "河南省", + "value": "河南省", + "children": [ + { "label": "郑州市", "value": "郑州市" }, + { "label": "开封市", "value": "开封市" }, + { "label": "洛阳市", "value": "洛阳市" }, + { "label": "平顶山市", "value": "平顶山市" }, + { "label": "安阳市", "value": "安阳市" }, + { "label": "鹤壁市", "value": "鹤壁市" }, + { "label": "新乡市", "value": "新乡市" }, + { "label": "焦作市", "value": "焦作市" }, + { "label": "濮阳市", "value": "濮阳市" }, + { "label": "许昌市", "value": "许昌市" }, + { "label": "漯河市", "value": "漯河市" }, + { "label": "三门峡市", "value": "三门峡市" }, + { "label": "南阳市", "value": "南阳市" }, + { "label": "商丘市", "value": "商丘市" }, + { "label": "信阳市", "value": "信阳市" }, + { "label": "周口市", "value": "周口市" }, + { "label": "驻马店市", "value": "驻马店市" }, + { "label": "济源市", "value": "济源市" } + ] + }, + { + "label": "湖北省", + "value": "湖北省", + "children": [ + { "label": "武汉市", "value": "武汉市" }, + { "label": "黄石市", "value": "黄石市" }, + { "label": "十堰市", "value": "十堰市" }, + { "label": "宜昌市", "value": "宜昌市" }, + { "label": "襄阳市", "value": "襄阳市" }, + { "label": "鄂州市", "value": "鄂州市" }, + { "label": "荆门市", "value": "荆门市" }, + { "label": "孝感市", "value": "孝感市" }, + { "label": "荆州市", "value": "荆州市" }, + { "label": "黄冈市", "value": "黄冈市" }, + { "label": "咸宁市", "value": "咸宁市" }, + { "label": "随州市", "value": "随州市" }, + { "label": "恩施土家族苗族自治州", "value": "恩施土家族苗族自治州" }, + { "label": "仙桃市", "value": "仙桃市" }, + { "label": "潜江市", "value": "潜江市" }, + { "label": "天门市", "value": "天门市" }, + { "label": "神农架林区", "value": "神农架林区" } + ] + }, + { + "label": "湖南省", + "value": "湖南省", + "children": [ + { "label": "长沙市", "value": "长沙市" }, + { "label": "株洲市", "value": "株洲市" }, + { "label": "湘潭市", "value": "湘潭市" }, + { "label": "衡阳市", "value": "衡阳市" }, + { "label": "邵阳市", "value": "邵阳市" }, + { "label": "岳阳市", "value": "岳阳市" }, + { "label": "常德市", "value": "常德市" }, + { "label": "张家界市", "value": "张家界市" }, + { "label": "益阳市", "value": "益阳市" }, + { "label": "郴州市", "value": "郴州市" }, + { "label": "永州市", "value": "永州市" }, + { "label": "怀化市", "value": "怀化市" }, + { "label": "娄底市", "value": "娄底市" }, + { "label": "湘西土家族苗族自治州", "value": "湘西土家族苗族自治州" } + ] + }, + { + "label": "广东省", + "value": "广东省", + "children": [ + { "label": "广州市", "value": "广州市" }, + { "label": "韶关市", "value": "韶关市" }, + { "label": "深圳市", "value": "深圳市" }, + { "label": "珠海市", "value": "珠海市" }, + { "label": "汕头市", "value": "汕头市" }, + { "label": "佛山市", "value": "佛山市" }, + { "label": "江门市", "value": "江门市" }, + { "label": "湛江市", "value": "湛江市" }, + { "label": "茂名市", "value": "茂名市" }, + { "label": "肇庆市", "value": "肇庆市" }, + { "label": "惠州市", "value": "惠州市" }, + { "label": "梅州市", "value": "梅州市" }, + { "label": "汕尾市", "value": "汕尾市" }, + { "label": "河源市", "value": "河源市" }, + { "label": "阳江市", "value": "阳江市" }, + { "label": "清远市", "value": "清远市" }, + { "label": "东莞市", "value": "东莞市" }, + { "label": "中山市", "value": "中山市" }, + { "label": "潮州市", "value": "潮州市" }, + { "label": "揭阳市", "value": "揭阳市" }, + { "label": "云浮市", "value": "云浮市" } + ] + }, + { + "label": "广西壮族自治区", + "value": "广西壮族自治区", + "children": [ + { "label": "南宁市", "value": "南宁市" }, + { "label": "柳州市", "value": "柳州市" }, + { "label": "桂林市", "value": "桂林市" }, + { "label": "梧州市", "value": "梧州市" }, + { "label": "北海市", "value": "北海市" }, + { "label": "防城港市", "value": "防城港市" }, + { "label": "钦州市", "value": "钦州市" }, + { "label": "贵港市", "value": "贵港市" }, + { "label": "玉林市", "value": "玉林市" }, + { "label": "百色市", "value": "百色市" }, + { "label": "贺州市", "value": "贺州市" }, + { "label": "河池市", "value": "河池市" }, + { "label": "来宾市", "value": "来宾市" }, + { "label": "崇左市", "value": "崇左市" } + ] + }, + { + "label": "海南省", + "value": "海南省", + "children": [ + { "label": "海口市", "value": "海口市" }, + { "label": "三亚市", "value": "三亚市" }, + { "label": "三沙市", "value": "三沙市" }, + { "label": "儋州市", "value": "儋州市" }, + { "label": "五指山市", "value": "五指山市" }, + { "label": "琼海市", "value": "琼海市" }, + { "label": "文昌市", "value": "文昌市" }, + { "label": "万宁市", "value": "万宁市" }, + { "label": "东方市", "value": "东方市" } + ] + }, + { + "label": "重庆市", + "value": "重庆市", + "children": [ + { "label": "重庆市", "value": "重庆市" } + ] + }, + { + "label": "四川省", + "value": "四川省", + "children": [ + { "label": "成都市", "value": "成都市" }, + { "label": "自贡市", "value": "自贡市" }, + { "label": "攀枝花市", "value": "攀枝花市" }, + { "label": "泸州市", "value": "泸州市" }, + { "label": "德阳市", "value": "德阳市" }, + { "label": "绵阳市", "value": "绵阳市" }, + { "label": "广元市", "value": "广元市" }, + { "label": "遂宁市", "value": "遂宁市" }, + { "label": "内江市", "value": "内江市" }, + { "label": "乐山市", "value": "乐山市" }, + { "label": "南充市", "value": "南充市" }, + { "label": "眉山市", "value": "眉山市" }, + { "label": "宜宾市", "value": "宜宾市" }, + { "label": "广安市", "value": "广安市" }, + { "label": "达州市", "value": "达州市" }, + { "label": "雅安市", "value": "雅安市" }, + { "label": "巴中市", "value": "巴中市" }, + { "label": "资阳市", "value": "资阳市" }, + { "label": "阿坝藏族羌族自治州", "value": "阿坝藏族羌族自治州" }, + { "label": "甘孜藏族自治州", "value": "甘孜藏族自治州" }, + { "label": "凉山彝族自治州", "value": "凉山彝族自治州" } + ] + }, + { + "label": "贵州省", + "value": "贵州省", + "children": [ + { "label": "贵阳市", "value": "贵阳市" }, + { "label": "六盘水市", "value": "六盘水市" }, + { "label": "遵义市", "value": "遵义市" }, + { "label": "安顺市", "value": "安顺市" }, + { "label": "毕节市", "value": "毕节市" }, + { "label": "铜仁市", "value": "铜仁市" }, + { "label": "黔西南布依族苗族自治州", "value": "黔西南布依族苗族自治州" }, + { "label": "黔东南苗族侗族自治州", "value": "黔东南苗族侗族自治州" }, + { "label": "黔南布依族苗族自治州", "value": "黔南布依族苗族自治州" } + ] + }, + { + "label": "云南省", + "value": "云南省", + "children": [ + { "label": "昆明市", "value": "昆明市" }, + { "label": "曲靖市", "value": "曲靖市" }, + { "label": "玉溪市", "value": "玉溪市" }, + { "label": "保山市", "value": "保山市" }, + { "label": "昭通市", "value": "昭通市" }, + { "label": "丽江市", "value": "丽江市" }, + { "label": "普洱市", "value": "普洱市" }, + { "label": "临沧市", "value": "临沧市" }, + { "label": "楚雄彝族自治州", "value": "楚雄彝族自治州" }, + { "label": "红河哈尼族彝族自治州", "value": "红河哈尼族彝族自治州" }, + { "label": "文山壮族苗族自治州", "value": "文山壮族苗族自治州" }, + { "label": "西双版纳傣族自治州", "value": "西双版纳傣族自治州" }, + { "label": "大理白族自治州", "value": "大理白族自治州" }, + { "label": "德宏傣族景颇族自治州", "value": "德宏傣族景颇族自治州" }, + { "label": "怒江傈僳族自治州", "value": "怒江傈僳族自治州" }, + { "label": "迪庆藏族自治州", "value": "迪庆藏族自治州" } + ] + }, + { + "label": "西藏自治区", + "value": "西藏自治区", + "children": [ + { "label": "拉萨市", "value": "拉萨市" }, + { "label": "日喀则市", "value": "日喀则市" }, + { "label": "昌都市", "value": "昌都市" }, + { "label": "林芝市", "value": "林芝市" }, + { "label": "山南市", "value": "山南市" }, + { "label": "那曲市", "value": "那曲市" }, + { "label": "阿里地区", "value": "阿里地区" } + ] + }, + { + "label": "陕西省", + "value": "陕西省", + "children": [ + { "label": "西安市", "value": "西安市" }, + { "label": "铜川市", "value": "铜川市" }, + { "label": "宝鸡市", "value": "宝鸡市" }, + { "label": "咸阳市", "value": "咸阳市" }, + { "label": "渭南市", "value": "渭南市" }, + { "label": "延安市", "value": "延安市" }, + { "label": "汉中市", "value": "汉中市" }, + { "label": "榆林市", "value": "榆林市" }, + { "label": "安康市", "value": "安康市" }, + { "label": "商洛市", "value": "商洛市" } + ] + }, + { + "label": "甘肃省", + "value": "甘肃省", + "children": [ + { "label": "兰州市", "value": "兰州市" }, + { "label": "嘉峪关市", "value": "嘉峪关市" }, + { "label": "金昌市", "value": "金昌市" }, + { "label": "白银市", "value": "白银市" }, + { "label": "天水市", "value": "天水市" }, + { "label": "武威市", "value": "武威市" }, + { "label": "张掖市", "value": "张掖市" }, + { "label": "平凉市", "value": "平凉市" }, + { "label": "酒泉市", "value": "酒泉市" }, + { "label": "庆阳市", "value": "庆阳市" }, + { "label": "定西市", "value": "定西市" }, + { "label": "陇南市", "value": "陇南市" }, + { "label": "临夏回族自治州", "value": "临夏回族自治州" }, + { "label": "甘南藏族自治州", "value": "甘南藏族自治州" } + ] + }, + { + "label": "青海省", + "value": "青海省", + "children": [ + { "label": "西宁市", "value": "西宁市" }, + { "label": "海东市", "value": "海东市" }, + { "label": "海北藏族自治州", "value": "海北藏族自治州" }, + { "label": "黄南藏族自治州", "value": "黄南藏族自治州" }, + { "label": "海南藏族自治州", "value": "海南藏族自治州" }, + { "label": "果洛藏族自治州", "value": "果洛藏族自治州" }, + { "label": "玉树藏族自治州", "value": "玉树藏族自治州" }, + { "label": "海西蒙古族藏族自治州", "value": "海西蒙古族藏族自治州" } + ] + }, + { + "label": "宁夏回族自治区", + "value": "宁夏回族自治区", + "children": [ + { "label": "银川市", "value": "银川市" }, + { "label": "石嘴山市", "value": "石嘴山市" }, + { "label": "吴忠市", "value": "吴忠市" }, + { "label": "固原市", "value": "固原市" }, + { "label": "中卫市", "value": "中卫市" } + ] + }, + { + "label": "新疆维吾尔自治区", + "value": "新疆维吾尔自治区", + "children": [ + { "label": "乌鲁木齐市", "value": "乌鲁木齐市" }, + { "label": "克拉玛依市", "value": "克拉玛依市" }, + { "label": "吐鲁番市", "value": "吐鲁番市" }, + { "label": "哈密市", "value": "哈密市" }, + { "label": "昌吉回族自治州", "value": "昌吉回族自治州" }, + { "label": "博尔塔拉蒙古自治州", "value": "博尔塔拉蒙古自治州" }, + { "label": "巴音郭楞蒙古自治州", "value": "巴音郭楞蒙古自治州" }, + { "label": "阿克苏地区", "value": "阿克苏地区" }, + { "label": "克孜勒苏柯尔克孜自治州", "value": "克孜勒苏柯尔克孜自治州" }, + { "label": "喀什地区", "value": "喀什地区" }, + { "label": "和田地区", "value": "和田地区" }, + { "label": "伊犁哈萨克自治州", "value": "伊犁哈萨克自治州" }, + { "label": "塔城地区", "value": "塔城地区" }, + { "label": "阿勒泰地区", "value": "阿勒泰地区" }, + { "label": "石河子市", "value": "石河子市" }, + { "label": "阿拉尔市", "value": "阿拉尔市" }, + { "label": "图木舒克市", "value": "图木舒克市" }, + { "label": "五家渠市", "value": "五家渠市" }, + { "label": "北屯市", "value": "北屯市" }, + { "label": "铁门关市", "value": "铁门关市" }, + { "label": "双河市", "value": "双河市" }, + { "label": "可克达拉市", "value": "可克达拉市" }, + { "label": "昆玉市", "value": "昆玉市" }, + { "label": "胡杨河市", "value": "胡杨河市" }, + { "label": "新星市", "value": "新星市" }, + { "label": "白杨市", "value": "白杨市" } + ] + }, + { + "label": "台湾省", + "value": "台湾省", + "children": [ + { "label": "台北市", "value": "台北市" }, + { "label": "新北市", "value": "新北市" }, + { "label": "桃园市", "value": "桃园市" }, + { "label": "台中市", "value": "台中市" }, + { "label": "台南市", "value": "台南市" }, + { "label": "高雄市", "value": "高雄市" }, + { "label": "基隆市", "value": "基隆市" }, + { "label": "新竹市", "value": "新竹市" }, + { "label": "嘉义市", "value": "嘉义市" }, + { "label": "新竹县", "value": "新竹县" }, + { "label": "苗栗县", "value": "苗栗县" }, + { "label": "彰化县", "value": "彰化县" }, + { "label": "南投县", "value": "南投县" }, + { "label": "云林县", "value": "云林县" }, + { "label": "嘉义县", "value": "嘉义县" }, + { "label": "屏东县", "value": "屏东县" }, + { "label": "宜兰县", "value": "宜兰县" }, + { "label": "花莲县", "value": "花莲县" }, + { "label": "台东县", "value": "台东县" }, + { "label": "澎湖县", "value": "澎湖县" }, + { "label": "金门县", "value": "金门县" }, + { "label": "连江县", "value": "连江县" } + ] + }, + { + "label": "香港特别行政区", + "value": "香港特别行政区", + "children": [ + { "label": "香港特别行政区", "value": "香港特别行政区" } + ] + }, + { + "label": "澳门特别行政区", + "value": "澳门特别行政区", + "children": [ + { "label": "澳门特别行政区", "value": "澳门特别行政区" } + ] + } +] diff --git a/ui-src/src/components/ConfigDialog.vue b/ui-src/src/components/ConfigDialog.vue new file mode 100644 index 0000000..66b0fee --- /dev/null +++ b/ui-src/src/components/ConfigDialog.vue @@ -0,0 +1,775 @@ + + + + + diff --git a/ui-src/src/components/DramaEditDialog.vue b/ui-src/src/components/DramaEditDialog.vue new file mode 100644 index 0000000..beef676 --- /dev/null +++ b/ui-src/src/components/DramaEditDialog.vue @@ -0,0 +1,860 @@ + + + + + diff --git a/ui-src/src/components/EpisodeManageDialog.vue b/ui-src/src/components/EpisodeManageDialog.vue new file mode 100644 index 0000000..b9458f9 --- /dev/null +++ b/ui-src/src/components/EpisodeManageDialog.vue @@ -0,0 +1,403 @@ + + + + + diff --git a/ui-src/src/components/PaymentDialog.vue b/ui-src/src/components/PaymentDialog.vue new file mode 100644 index 0000000..c0405d5 --- /dev/null +++ b/ui-src/src/components/PaymentDialog.vue @@ -0,0 +1,346 @@ + + + diff --git a/ui-src/src/components/ReviewDialog.vue b/ui-src/src/components/ReviewDialog.vue new file mode 100644 index 0000000..992d3b9 --- /dev/null +++ b/ui-src/src/components/ReviewDialog.vue @@ -0,0 +1,137 @@ + + + + + diff --git a/ui-src/src/components/ShotTimelineEditor.vue b/ui-src/src/components/ShotTimelineEditor.vue new file mode 100644 index 0000000..65a285c --- /dev/null +++ b/ui-src/src/components/ShotTimelineEditor.vue @@ -0,0 +1,238 @@ + + + + + diff --git a/ui-src/src/components/UserConfigDialog.vue b/ui-src/src/components/UserConfigDialog.vue new file mode 100644 index 0000000..f7c8602 --- /dev/null +++ b/ui-src/src/components/UserConfigDialog.vue @@ -0,0 +1,242 @@ + + + + + diff --git a/ui-src/src/main.js b/ui-src/src/main.js new file mode 100644 index 0000000..734fe84 --- /dev/null +++ b/ui-src/src/main.js @@ -0,0 +1,14 @@ +import { createApp } from 'vue' +import { createPinia } from 'pinia' +import ElementPlus from 'element-plus' +import 'element-plus/dist/index.css' +import zhCn from 'element-plus/dist/locale/zh-cn.mjs' +import './styles/dialog.css' +import App from './App.vue' +import router from './router' + +const app = createApp(App) +app.use(createPinia()) +app.use(ElementPlus, { locale: zhCn }) +app.use(router) +app.mount('#app') diff --git a/ui-src/src/router/index.js b/ui-src/src/router/index.js new file mode 100644 index 0000000..2e8c4d7 --- /dev/null +++ b/ui-src/src/router/index.js @@ -0,0 +1,93 @@ +import { createRouter, createWebHashHistory } from 'vue-router' +import { useAuthStore } from '../stores/auth.js' + +const roleFirstRoute = { + admin: '/admin/agents', + agent: '/agent/customers', + customer: '/drama' +} + +const routes = [ + { + path: '/login', + name: 'Login', + component: () => import('../views/Login.vue') + }, + { + path: '/', + component: () => import('../views/Layout.vue'), + redirect: () => { + try { + const user = JSON.parse(localStorage.getItem('user') || '{}') + return roleFirstRoute[user.role] || '/drama' + } catch { + return '/drama' + } + }, + children: [ + { + path: 'drama', + name: 'DramaList', + meta: { roles: ['customer'], title: '视频管理' }, + component: () => import('../views/DramaList.vue') + }, + { + path: 'admin/agents', + name: 'AgentList', + meta: { roles: ['admin'], title: '代理商管理' }, + component: () => import('../views/admin/AgentList.vue') + }, + { + path: 'admin/customers', + name: 'AdminCustomerList', + meta: { roles: ['admin'], title: '客户列表' }, + component: () => import('../views/admin/CustomerList.vue') + }, + { + path: 'agent/customers', + name: 'AgentCustomerList', + meta: { roles: ['agent'], title: '我的客户' }, + component: () => import('../views/agent/CustomerList.vue') + }, + { + path: 'customer/profile', + name: 'CustomerProfile', + meta: { roles: ['customer'], title: '我的账户' }, + component: () => import('../views/customer/Profile.vue') + }, + { + path: 'customer/transactions', + name: 'CustomerTransactions', + meta: { roles: ['customer'], title: '交易记录' }, + component: () => import('../views/customer/TransactionList.vue') + } + ] + } +] + +const router = createRouter({ + // 使用 hash 路由:前后端合并部署后 SPA 路由(/drama、/customer/* 等)与后端 API + // 前缀重叠,history 模式下刷新会命中 API 路由而非页面;hash 模式页面始终请求 /, + // 由后端静态服务返回 index.html,API 路径保持后端鉴权 + history: createWebHashHistory(), + routes +}) + +router.beforeEach((to, from, next) => { + const auth = useAuthStore() + if (to.path !== '/login' && !auth.isLoggedIn) { + next('/login') + return + } + if (to.path === '/login' && auth.isLoggedIn) { + next('/') + return + } + if (to.meta.roles && !to.meta.roles.includes(auth.role)) { + next('/login') + return + } + next() +}) + +export default router diff --git a/ui-src/src/stores/auth.js b/ui-src/src/stores/auth.js new file mode 100644 index 0000000..eee8b17 --- /dev/null +++ b/ui-src/src/stores/auth.js @@ -0,0 +1,36 @@ +import { defineStore } from 'pinia' +import { ref, computed } from 'vue' +import { login } from '../api/auth.js' + +export const useAuthStore = defineStore('auth', () => { + const token = ref(localStorage.getItem('token') || '') + const user = ref(JSON.parse(localStorage.getItem('user') || 'null')) + + const isLoggedIn = computed(() => !!token.value) + const role = computed(() => user.value?.role || '') + const isAdmin = computed(() => role.value === 'admin') + const isAgent = computed(() => role.value === 'agent') + const isCustomer = computed(() => role.value === 'customer') + + async function doLogin(account, password) { + const res = await login({ account, password }) + token.value = res.token + user.value = res.user + localStorage.setItem('token', res.token) + localStorage.setItem('user', JSON.stringify(res.user)) + return res + } + + function logout() { + token.value = '' + user.value = null + localStorage.removeItem('token') + localStorage.removeItem('user') + } + + function getUser() { + return user.value + } + + return { token, user, isLoggedIn, role, isAdmin, isAgent, isCustomer, doLogin, logout, getUser } +}) diff --git a/ui-src/src/styles/dialog.css b/ui-src/src/styles/dialog.css new file mode 100644 index 0000000..f5e9a7b --- /dev/null +++ b/ui-src/src/styles/dialog.css @@ -0,0 +1,250 @@ +/* 全局重置 */ +body { margin:0; } + +/* 所有弹窗统一高度 80vh */ +.el-dialog.dialog-60h { + height: 80vh; + display: flex; + flex-direction: column; +} +.el-dialog.dialog-60h .el-dialog__body { + flex: 1; + min-height: 0; + overflow-y: auto; + overflow-x: hidden; + padding: 0; + display: flex; + flex-direction: column; +} +.el-dialog.dialog-60h .el-dialog__footer { + flex-shrink: 0; +} + +/* 手机端弹窗全宽 */ +@media (max-width: 640px) { + .el-dialog.dialog-60h { + width: 94% !important; + max-width: 94% !important; + } + .el-dialog { + min-width: auto !important; + } + .el-dialog__body { + padding: 12px; + } +} + +/* 响应式 tab 滚动 */ +.el-tabs--border-card > .el-tabs__header .el-tabs__nav-wrap { + overflow-x: auto; + overflow-y: hidden; + flex-wrap: nowrap; +} +.el-tabs--border-card > .el-tabs__header .el-tabs__nav { + display: inline-flex; + white-space: nowrap; + float: none; +} + + +/* 内嵌弹窗手机适配 */ +.inner-dialog-mobile { + max-width: 94vw !important; + width: 94vw !important; +} + +/* 分页响应式 */ +.pagination-wrap .el-pagination { + flex-wrap: wrap; + justify-content: center; +} + +/* 视频响应式 */ +.video-responsive { + max-width: 360px; + max-height: 240px; + border-radius: 8px; + width: 100%; + height: auto; +} +@media (max-width: 640px) { + .video-responsive { + max-width: 100%; + max-height: 200px; + } +} + +/* ========== B&W Theme for Element Plus Components ========== */ + +/* Dialog header/footer borders */ +.el-dialog { + --el-dialog-bg-color: #fff; +} +.el-dialog__header { + border-bottom: 1px solid #e5e5e5; + padding: 14px 20px; + margin-right: 0; +} +.el-dialog__title { + font-size: 15px; + font-weight: 600; + color: #111; +} +.el-dialog__body { + padding: 16px 20px; +} +.el-dialog__footer { + border-top: 1px solid #e5e5e5; + padding: 10px 20px; +} + +/* Tabs (border-card) */ +.el-tabs--border-card { + background: #fff; + border: 1px solid #e5e5e5; +} +.el-tabs--border-card > .el-tabs__header { + background: #fafafa; + border-bottom: 1px solid #e5e5e5; +} +.el-tabs--border-card > .el-tabs__header .el-tabs__item { + color: #888; + border: none; + transition: color 0.15s; +} +.el-tabs--border-card > .el-tabs__header .el-tabs__item.is-active { + color: #000; + background: #fff; + font-weight: 500; +} +.el-tabs--border-card > .el-tabs__header .el-tabs__item:not(.is-active):hover { + color: #333; +} + +/* Buttons */ +.el-button--primary { + --el-button-bg-color: #000; + --el-button-border-color: #000; + --el-button-text-color: #fff; + --el-button-hover-bg-color: #333; + --el-button-hover-border-color: #333; + --el-button-hover-text-color: #fff; + --el-button-active-bg-color: #000; + --el-button-active-border-color: #000; +} +.el-button--default { + --el-button-bg-color: #fff; + --el-button-border-color: #e5e5e5; + --el-button-text-color: #333; + --el-button-hover-bg-color: #f5f5f5; + --el-button-hover-border-color: #ccc; + --el-button-hover-text-color: #000; +} + +/* Input */ +.el-input__wrapper { + box-shadow: 0 0 0 1px #e5e5e5 inset !important; +} +.el-input__wrapper:hover { + box-shadow: 0 0 0 1px #bbb inset !important; +} +.el-input__wrapper.is-focus { + box-shadow: 0 0 0 1px #000 inset !important; +} +.el-input__inner::placeholder { + color: #aaa; +} + +/* Input Number */ +.el-input-number__increase, +.el-input-number__decrease { + background: #fafafa; + color: #666; +} +.el-input-number__increase:hover, +.el-input-number__decrease:hover { + background: #f0f0f0; + color: #000; +} + +/* Select Dropdown */ +.el-select-dropdown { + border: 1px solid #e5e5e5; +} +.el-select-dropdown__item.hover, +.el-select-dropdown__item:hover { + background: #f5f5f5; +} +.el-select-dropdown__item.is-selected { + color: #000; + font-weight: 500; +} + +/* Pagination */ +.el-pagination { + --el-color-primary: #000; + --el-pagination-button-bg-color: #fff; + --el-pagination-button-color: #333; + --el-pagination-button-hover-bg-color: #f5f5f5; + --el-pagination-button-active-bg-color: #000; + --el-pagination-button-active-color: #fff; + --el-pagination-border-radius: 4px; + --el-pagination-font-size: 12px; +} +.el-pagination button { + border: 1px solid #e5e5e5; + border-radius: 4px; + min-width: 28px; + height: 28px; +} +.el-pagination button:hover { + border-color: #ccc; +} +.el-pagination .el-pager li { + border: 1px solid #e5e5e5; + border-radius: 4px; + margin: 0 2px; + min-width: 28px; + height: 28px; + font-size: 12px; + color: #333; +} +.el-pagination .el-pager li:hover { + border-color: #ccc; + background: #f5f5f5; +} +.el-pagination .el-pager li.is-active { + border-color: #000; + background: #000; + color: #fff; +} +.el-pagination .el-pagination__sizes .el-input__wrapper { + box-shadow: 0 0 0 1px #e5e5e5 inset !important; +} + +/* Avatar */ +.el-avatar { + --el-avatar-bg-color: #f0f0f0; + --el-avatar-text-color: #666; +} + +/* Switch */ +.el-switch__core { + border-color: #ddd; + background: #ddd; +} +.el-switch.is-checked .el-switch__core { + border-color: #000; + background: #000; +} + +/* Form label */ +.el-form-item__label { + color: #333; + font-weight: 500; +} + +/* Inner dialog (nested) adjustments */ +.inner-dialog-mobile .el-dialog__body { + padding: 12px; +} diff --git a/ui-src/src/utils/index.js b/ui-src/src/utils/index.js new file mode 100644 index 0000000..1ce87e5 --- /dev/null +++ b/ui-src/src/utils/index.js @@ -0,0 +1,8 @@ +export function toVideoUrl(path) { + if (!path) return '' + if (path.indexOf('://') > 0) return path + if (path.startsWith('workspace/')) return '/' + path + const wsIdx = path.indexOf('/workspace/') + if (wsIdx >= 0) return path.substring(wsIdx) + return path +} diff --git a/ui-src/src/views/DramaList.vue b/ui-src/src/views/DramaList.vue new file mode 100644 index 0000000..0162fa2 --- /dev/null +++ b/ui-src/src/views/DramaList.vue @@ -0,0 +1,333 @@ + + + + + diff --git a/ui-src/src/views/Layout.vue b/ui-src/src/views/Layout.vue new file mode 100644 index 0000000..6320e1d --- /dev/null +++ b/ui-src/src/views/Layout.vue @@ -0,0 +1,191 @@ + + + + + diff --git a/ui-src/src/views/Login.vue b/ui-src/src/views/Login.vue new file mode 100644 index 0000000..028cf41 --- /dev/null +++ b/ui-src/src/views/Login.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/ui-src/src/views/admin/AgentList.vue b/ui-src/src/views/admin/AgentList.vue new file mode 100644 index 0000000..c9a88fa --- /dev/null +++ b/ui-src/src/views/admin/AgentList.vue @@ -0,0 +1,322 @@ + + + + + diff --git a/ui-src/src/views/admin/CustomerList.vue b/ui-src/src/views/admin/CustomerList.vue new file mode 100644 index 0000000..30883b9 --- /dev/null +++ b/ui-src/src/views/admin/CustomerList.vue @@ -0,0 +1,151 @@ + + + + + diff --git a/ui-src/src/views/agent/CustomerList.vue b/ui-src/src/views/agent/CustomerList.vue new file mode 100644 index 0000000..664b1f7 --- /dev/null +++ b/ui-src/src/views/agent/CustomerList.vue @@ -0,0 +1,179 @@ + + + + + diff --git a/ui-src/src/views/customer/Profile.vue b/ui-src/src/views/customer/Profile.vue new file mode 100644 index 0000000..09d2054 --- /dev/null +++ b/ui-src/src/views/customer/Profile.vue @@ -0,0 +1,85 @@ + + + + + diff --git a/ui-src/src/views/customer/TransactionList.vue b/ui-src/src/views/customer/TransactionList.vue new file mode 100644 index 0000000..1173674 --- /dev/null +++ b/ui-src/src/views/customer/TransactionList.vue @@ -0,0 +1,50 @@ + + + + + diff --git a/ui-src/vite.config.js b/ui-src/vite.config.js new file mode 100644 index 0000000..3d7f5b9 --- /dev/null +++ b/ui-src/vite.config.js @@ -0,0 +1,36 @@ +import { defineConfig, loadEnv } from 'vite' +import vue from '@vitejs/plugin-vue' +import { fileURLToPath, URL } from 'node:url' + +export default defineConfig(({ mode }) => { + const env = loadEnv(mode, process.cwd(), '') + const target = env.VITE_API_PROXY_TARGET || 'http://localhost:3006' + + // 浏览器导航页面请求(需要 SPA)vs API 调用(需要代理到后端) + const spaBypass = (req) => { + const accept = req.headers['accept'] || '' + if (accept.includes('text/html')) { + return '/index.html' + } + } + + const proxyRules = ['/drama', '/agent', '/customer', '/payment', '/transaction', '/region', '/user', '/scene', '/character', '/prop', '/bgm', '/episode', '/generation', '/model-config', '/user-model-config'] + const proxy = {} + for (const rule of proxyRules) { + proxy[rule] = { target, changeOrigin: true, bypass: spaBypass } + } + proxy['/workspace'] = { target, changeOrigin: true } + + return { + plugins: [vue()], + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)) + } + }, + server: { + port: 5173, + proxy + } + } +})