From 6fd468d9e0a868b7868cfcb19ae1588146dba194 Mon Sep 17 00:00:00 2001 From: biss Date: Thu, 23 Jul 2026 19:59:15 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E6=AC=A1=E5=88=87=E6=8D=A2=E5=89=8D?= =?UTF-8?q?=E7=AB=AF=E6=9E=B6=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .dockerignore | 2 + .gitignore | 1 + Dockerfile | 9 + README.md | 22 +- scripts/publish.ps1 | 21 + src/Eis.Web/ClientApp/index.html | 20 + src/Eis.Web/ClientApp/package-lock.json | 1123 +++++++++++++++++ src/Eis.Web/ClientApp/package.json | 18 + src/Eis.Web/ClientApp/src/App.vue | 62 + .../ClientApp/src/components/HomePage.vue | 325 +++++ src/Eis.Web/ClientApp/src/lib/api.js | 38 + src/Eis.Web/ClientApp/src/lib/format.js | 39 + src/Eis.Web/ClientApp/src/main.js | 64 + src/Eis.Web/ClientApp/src/styles/home.css | 712 +++++++++++ src/Eis.Web/ClientApp/vite.config.js | 36 + src/Eis.Web/wwwroot/index.html | 5 +- src/Eis.Web/wwwroot/js/app.js | 8 +- src/Eis.Web/wwwroot/vue-app/app.css | 2 + src/Eis.Web/wwwroot/vue-app/app.js | 6 + 19 files changed, 2507 insertions(+), 6 deletions(-) create mode 100644 src/Eis.Web/ClientApp/index.html create mode 100644 src/Eis.Web/ClientApp/package-lock.json create mode 100644 src/Eis.Web/ClientApp/package.json create mode 100644 src/Eis.Web/ClientApp/src/App.vue create mode 100644 src/Eis.Web/ClientApp/src/components/HomePage.vue create mode 100644 src/Eis.Web/ClientApp/src/lib/api.js create mode 100644 src/Eis.Web/ClientApp/src/lib/format.js create mode 100644 src/Eis.Web/ClientApp/src/main.js create mode 100644 src/Eis.Web/ClientApp/src/styles/home.css create mode 100644 src/Eis.Web/ClientApp/vite.config.js create mode 100644 src/Eis.Web/wwwroot/vue-app/app.css create mode 100644 src/Eis.Web/wwwroot/vue-app/app.js diff --git a/.dockerignore b/.dockerignore index 92a2d8f..d43b080 100644 --- a/.dockerignore +++ b/.dockerignore @@ -11,6 +11,8 @@ tests data/* !data/.gitkeep +**/node_modules + *.log Dockerfile* compose*.yml diff --git a/.gitignore b/.gitignore index c1d75b9..5570762 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ data/*.sqlite-wal **/obj/ .vs/ artifacts/ +**/node_modules/ diff --git a/Dockerfile b/Dockerfile index 6a2734a..a1c4d79 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,16 @@ +FROM node:24-bookworm-slim AS frontend-build + +WORKDIR /src/src/Eis.Web/ClientApp +COPY src/Eis.Web/ClientApp/package.json src/Eis.Web/ClientApp/package-lock.json ./ +RUN npm ci +COPY src/Eis.Web/ClientApp/ ./ +RUN npm run build + FROM mcr.microsoft.com/dotnet/sdk:10.0-bookworm-slim AS build WORKDIR /src COPY . . +COPY --from=frontend-build /src/src/Eis.Web/wwwroot/vue-app ./src/Eis.Web/wwwroot/vue-app RUN dotnet restore src/Eis.Web/Eis.Web.csproj \ && dotnet restore src/Eis.Tools/Eis.Tools.csproj \ && dotnet publish src/Eis.Web/Eis.Web.csproj --configuration Release --output /app/web --no-restore \ diff --git a/README.md b/README.md index ed9fd61..582f92f 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # 衡准 · 考试信息管理系统 -一个完整可运行的分级权限考试信息管理系统,后端使用 ASP.NET Core 10;本地开发采用 SQLite,生产环境支持 MySQL 8.4。 +一个完整可运行的分级权限考试信息管理系统,前端使用 Vue 3 + Vite,后端使用 ASP.NET Core 10;本地开发采用 SQLite,生产环境支持 MySQL 8.4。 ## 已实现功能 @@ -85,15 +85,28 @@ ## 运行 -需要 .NET 10 SDK。 +需要 .NET 10 SDK、Node.js 20.19+(推荐 Node.js 24)和 npm。 ```powershell +Set-Location .\src\Eis.Web\ClientApp +npm ci +npm run build +Set-Location ..\..\.. dotnet restore .\Eis.slnx dotnet run --project .\src\Eis.Web\Eis.Web.csproj ``` 打开 。 +日常开发主页时,可以让 ASP.NET Core 继续监听 `4173`,另开一个终端启动 Vite: + +```powershell +Set-Location .\src\Eis.Web\ClientApp +npm run dev +``` + +然后打开 。Vite 会把 API、旧业务模块、CKEditor 和基础样式代理到 ASP.NET Core。当前采用渐进式迁移:Vue 已接管应用入口与公开首页;考生中心、管理后台、招生学校端及其他公开子页继续通过兼容入口按需加载,业务行为保持不变。生产构建输出到 `src/Eis.Web/wwwroot/vue-app`,不得手工修改该目录中的文件。 + 账户可在“账户安全”中启用 TOTP 二次验证。生产环境必须设置至少 32 个字符的 `TOTP_ENCRYPTION_KEY`;该值用于加密 TOTP 密钥并保护恢复码哈希,部署后必须稳定保存,不能随意更换。本地开发未设置时会使用仅适合开发的稳定派生值。 生产环境还必须单独设置至少 32 个字符的 `DOCUMENT_VERIFICATION_SECRET`。系统用它为成绩单和录取通知书生成 HMAC 防伪查询码;更换该值会使此前下载文书的查询码失效,因此应独立生成、稳定保存且不得与 TOTP 密钥共用。 @@ -373,7 +386,10 @@ src/Eis.Application 应用服务契约 src/Eis.Infrastructure SQLite/MySQL、认证、缓存、Excel 与业务实现 src/Eis.Tools 可独立发布的数据库初始化、重建和演示数据工具 src/Eis.Web ASP.NET Core 宿主、端点和静态资源 -src/Eis.Web/wwwroot 浏览器入口、样式、前端模块及 CKEditor +src/Eis.Web/ClientApp Vue 3 单文件组件、Vite 配置与前端源码 +src/Eis.Web/wwwroot/vue-app Vue 生产构建产物 +src/Eis.Web/wwwroot/js 渐进迁移期间保留的业务模块 +src/Eis.Web/wwwroot 浏览器入口、基础样式及 CKEditor tests/Eis.Infrastructure.Tests xUnit 自动化测试 scripts/publish.ps1 Web 与数据库工具统一发布脚本 diff --git a/scripts/publish.ps1 b/scripts/publish.ps1 index 06b515d..298bdb3 100644 --- a/scripts/publish.ps1 +++ b/scripts/publish.ps1 @@ -12,6 +12,27 @@ $publishRoot = [IO.Path]::GetFullPath( else { Join-Path $repositoryRoot $OutputDirectory })) +$clientRoot = Join-Path $repositoryRoot 'src\Eis.Web\ClientApp' + +Push-Location $clientRoot +try { + $npmInstallArgs = @('ci') + & npm @npmInstallArgs + $npmInstallExitCode = $LASTEXITCODE + if ($npmInstallExitCode -ne 0) { + throw "npm ci 失败,退出码:$npmInstallExitCode" + } + + $npmBuildArgs = @('run', 'build') + & npm @npmBuildArgs + $npmBuildExitCode = $LASTEXITCODE + if ($npmBuildExitCode -ne 0) { + throw "Vue 生产构建失败,退出码:$npmBuildExitCode" + } +} +finally { + Pop-Location +} $projects = @( @{ diff --git a/src/Eis.Web/ClientApp/index.html b/src/Eis.Web/ClientApp/index.html new file mode 100644 index 0000000..280c244 --- /dev/null +++ b/src/Eis.Web/ClientApp/index.html @@ -0,0 +1,20 @@ + + + + + + + + 衡准 · 考试信息管理系统 + + + +
+
+
+ +
操作成功更改已保存
+
+ + + diff --git a/src/Eis.Web/ClientApp/package-lock.json b/src/Eis.Web/ClientApp/package-lock.json new file mode 100644 index 0000000..e1f5dab --- /dev/null +++ b/src/Eis.Web/ClientApp/package-lock.json @@ -0,0 +1,1123 @@ +{ + "name": "eis-web-client", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "eis-web-client", + "version": "1.0.0", + "dependencies": { + "vue": "3.5.40" + }, + "devDependencies": { + "@vitejs/plugin-vue": "6.0.8", + "vite": "8.1.5" + } + }, + "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/@emnapi/core": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.1.tgz", + "integrity": "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.1.tgz", + "integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz", + "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "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/@napi-rs/wasm-runtime": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.6.tgz", + "integrity": "sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.3" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.139.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.139.0.tgz", + "integrity": "sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.1.5.tgz", + "integrity": "sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.1.5.tgz", + "integrity": "sha512-51Bnx9pNiMRKSUNtBfySkNJ9vMU9Hh3I1ozDd6gyPPYzaXCfnptUcEZxXGYFn+ul2dtcMUiqGR1Yai2K10uoTw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.1.5.tgz", + "integrity": "sha512-Tm+gbfC0aHu1tBA/JvKQh32S0K6YgCHkiAF4/W6xX0K0RmNuc94VeK419dJoE65R5aRxmo+noZQSWrAMF6yb6g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.1.5.tgz", + "integrity": "sha512-JMzDKCCXq93YccG5gz3hvOs1oXRKAf0XYpfOS88e+wZrC8Iugj6j68867vrYZkvpDDpKn/KoKORThmchMpF6TA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.1.5.tgz", + "integrity": "sha512-uML21j2K5TfPGutKxub+M+nLjZIrWjXQ5Grx4lCe/nimTj9B4L63zHpjXLl4y0L3mcm2htEQIb06oCG/szerNw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.1.5.tgz", + "integrity": "sha512-navSiuTMogvnQoZoM/v+l3ZWo50/NTwSHSzheABx/RCnmUPaKwq9qSo4Br2OYRs21+Fz8uFqITZM3H4opOB0/Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.1.5.tgz", + "integrity": "sha512-lAryqH7IteztmCXQXk0etKj4wBQ7Gx5S6LjKhsgp9zb8I5bsuvU/2llH1hDQcjsFeqIsovMVN339/8pUDDBXxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.1.5.tgz", + "integrity": "sha512-fsK/sNBnxzBlL4O1JNrZakVQxPspqpED5dLtNsZS9oOKmtSpdNIzxH2kkol5HYTWJN47sE20ztMJPxfZ89qGOg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.1.5.tgz", + "integrity": "sha512-gLYb4BIadlfTOYT5gO503n8zQjXflgzpD0FcyKh0Mzx3rqCZKnHoJWV9xe1KXUJ5lx2JfcSHr/mhzS0PC/McAA==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.1.5.tgz", + "integrity": "sha512-FjcpEKUyJygHgs1o50VYNvkt5+7Le/VEdYt0AkRpkL33MnyQfwr8l5mXwMmfmTbyMPr5vJLC+8/Gd9gXnwU1QQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.1.5.tgz", + "integrity": "sha512-Me+PfPI2TMeOQk0gYWfLQZtTktrmzbr8cDboqX83XKc7UrgAi55gF+2dUkWdxd19n55Essp2yeca+O9N5rBxHg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.1.5.tgz", + "integrity": "sha512-yc5WrLzXks6zCQfn9Oxr8pORKyl/pF+QjHmW/Qx3qu0oyrrNC+y2JLTU1E2rcWYAmzlnqngWXHQjy51VzW70Vw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.1.5.tgz", + "integrity": "sha512-VbQGPX2b4r48TAMIM2cjgluIM1HYutm4pcTEJsle7iEP7sB1dFqtPLBVbdLAZCxy1txCcPxf4QFf4v8uvltPqA==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "1.11.1", + "@emnapi/runtime": "1.11.1", + "@napi-rs/wasm-runtime": "^1.1.6" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.1.5.tgz", + "integrity": "sha512-gHv82k63z4qpV5+Q1y/12KrK0ltWBukVDI8nZcbT7Tt/ZlOIVwppazneq0F93oDxTo3IgAMEDIoQh3E2n6mVsw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.1.5.tgz", + "integrity": "sha512-tTZuDBPw85tEN5PQi1pnEBzDy0Z49HtScLAbD5t6hyeU92A95pRWaSMw1GZZi/RwgSgUIl0xrSlXIT/9QzvYSA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.3.tgz", + "integrity": "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@vitejs/plugin-vue": { + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.8.tgz", + "integrity": "sha512-0ZjgOg7oO6farnNGup7yvoM/YXZV84OZxHAwtflItNa/6zzQyVb5LNxyea3FEKEX2XlagIKzrlH7wwxkKgtiew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "^1.0.1" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.40", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.40.tgz", + "integrity": "sha512-39E8IgOhTbVDnoJFMKc2DvYnypcZwUqgUhQkccva/0m6FUwtIKSGV7n1hpVmYcFaoRAwf9pBcwnKlCEsN63ZEQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.7", + "@vue/shared": "3.5.40", + "entities": "^7.0.1", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.40", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.40.tgz", + "integrity": "sha512-pwkx4vqlqOspFstrcmzwkKLePVMD3PT65imRzLhanU2V1Fj4K13g6OXjanOyzw3aTAuRk84BOmY8f3rEHqPaVA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.40", + "@vue/shared": "3.5.40" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.40", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.40.tgz", + "integrity": "sha512-gIf497P4kpuALcvs5n3AEg1Vdn0pSY4XbjASIfHNYF1/MP3T2Mf2STERTubysBxCRxzJGJYtF/O7vwJrxFB3Vw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.7", + "@vue/compiler-core": "3.5.40", + "@vue/compiler-dom": "3.5.40", + "@vue/compiler-ssr": "3.5.40", + "@vue/shared": "3.5.40", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.21", + "postcss": "^8.5.19", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.40", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.40.tgz", + "integrity": "sha512-rrE5xiXG663+vHCHa3J9p2z5OcBRjXmoqenprJxAFQxg5pSshzeBiCE6pu46axapRJ2Adk0YDA2BRZVjiHXnhg==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.40", + "@vue/shared": "3.5.40" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.40", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.40.tgz", + "integrity": "sha512-B7ot9UlUZOi1zbq61/LvE88ZLTV8IlajTdiZTAEiDQgrnIMIZoPr9kGw0Zw46ObW62O9+H/Be3kMbfb7kYPQZA==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.40" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.40", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.40.tgz", + "integrity": "sha512-KAZLweuZ6uUJPK1PMSQPgBU5gCjgrrfjUhSglmU9NhH+Zjepa8cnwSydPWDWHDwOgY4g3VcZ+PljbiHlURNCbw==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.40", + "@vue/shared": "3.5.40" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.40", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.40.tgz", + "integrity": "sha512-ZfrX8ssZQds900L9pr8AuK05ddnMsR4MPMZr8cPN9GoqoPWcXLhjvvbIA2SMv+7a97sJ1vv9pj/zxK0Cq/eEFQ==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.40", + "@vue/runtime-core": "3.5.40", + "@vue/shared": "3.5.40", + "csstype": "^3.2.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.40", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.40.tgz", + "integrity": "sha512-XNJym9WpevhTVt1HuwOrCRJ5Q+9z4BjTMrDtjTrvx74SmUll8spNTw6whWJa9mEkO4PKn5TihI/bm/8ds2QVJw==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.40", + "@vue/runtime-dom": "3.5.40", + "@vue/shared": "3.5.40" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.40", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.40.tgz", + "integrity": "sha512-WxnBtruIqOoV3rA4jeKDWzrYI5h7Cp4+pjwDi8kWGHz+IslhiN+wguLVVhtv2l8VoU02rzDCVfDjgCl1lNpZVg==", + "license": "MIT" + }, + "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/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", + "engines": { + "node": ">=8" + } + }, + "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/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/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "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/lightningcss": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", + "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.33.0", + "lightningcss-darwin-arm64": "1.33.0", + "lightningcss-darwin-x64": "1.33.0", + "lightningcss-freebsd-x64": "1.33.0", + "lightningcss-linux-arm-gnueabihf": "1.33.0", + "lightningcss-linux-arm64-gnu": "1.33.0", + "lightningcss-linux-arm64-musl": "1.33.0", + "lightningcss-linux-x64-gnu": "1.33.0", + "lightningcss-linux-x64-musl": "1.33.0", + "lightningcss-win32-arm64-msvc": "1.33.0", + "lightningcss-win32-x64-msvc": "1.33.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz", + "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz", + "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz", + "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz", + "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz", + "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz", + "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz", + "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz", + "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz", + "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz", + "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz", + "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "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/nanoid": { + "version": "3.3.16", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.16.tgz", + "integrity": "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==", + "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/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", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.22", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.22.tgz", + "integrity": "sha512-KBDEIpLrvpv16pp3K0Fw+UCoZfopFjjgeB+0tA/aaThfEE74kKDLrgg603YvOWJyg3+WYtyq3xYsQWsIyZlPqQ==", + "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.16", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/rolldown": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.1.5.tgz", + "integrity": "sha512-t9z29cJjXf/vxQ8dyhCSpt6H6aSwHTk8cT5I3iy6SMXuFpk5mB6PL6XfC8PCwrPTx93udwKUm9HRteAlTGBLiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.139.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.1.5", + "@rolldown/binding-darwin-arm64": "1.1.5", + "@rolldown/binding-darwin-x64": "1.1.5", + "@rolldown/binding-freebsd-x64": "1.1.5", + "@rolldown/binding-linux-arm-gnueabihf": "1.1.5", + "@rolldown/binding-linux-arm64-gnu": "1.1.5", + "@rolldown/binding-linux-arm64-musl": "1.1.5", + "@rolldown/binding-linux-ppc64-gnu": "1.1.5", + "@rolldown/binding-linux-s390x-gnu": "1.1.5", + "@rolldown/binding-linux-x64-gnu": "1.1.5", + "@rolldown/binding-linux-x64-musl": "1.1.5", + "@rolldown/binding-openharmony-arm64": "1.1.5", + "@rolldown/binding-wasm32-wasi": "1.1.5", + "@rolldown/binding-win32-arm64-msvc": "1.1.5", + "@rolldown/binding-win32-x64-msvc": "1.1.5" + } + }, + "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/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "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", + "optional": true + }, + "node_modules/vite": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.1.5.tgz", + "integrity": "sha512-7ULLwsCdYx/nRyrpiEwvqb5TFHrMVZyBt+rg/OAXT7rgj/z+DtTDyKFeLAdDkubDVDKD8jOsndmy7m55XcfUsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "lightningcss": "^1.32.0", + "picomatch": "^4.0.5", + "postcss": "^8.5.17", + "rolldown": "~1.1.5", + "tinyglobby": "^0.2.17" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.3.0", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vue": { + "version": "3.5.40", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.40.tgz", + "integrity": "sha512-+8PJ4SJXdn/cHGImF4CKdxlWHIN5Dkt7DoufRREM6h6uVCx2m7QxgcEQmmzyOK8A9mcafg7sFbJFYsdFVubTig==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.40", + "@vue/compiler-sfc": "3.5.40", + "@vue/runtime-dom": "3.5.40", + "@vue/server-renderer": "3.5.40", + "@vue/shared": "3.5.40" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + } + } +} diff --git a/src/Eis.Web/ClientApp/package.json b/src/Eis.Web/ClientApp/package.json new file mode 100644 index 0000000..2fbd8e4 --- /dev/null +++ b/src/Eis.Web/ClientApp/package.json @@ -0,0 +1,18 @@ +{ + "name": "eis-web-client", + "private": true, + "version": "1.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "vue": "3.5.40" + }, + "devDependencies": { + "@vitejs/plugin-vue": "6.0.8", + "vite": "8.1.5" + } +} diff --git a/src/Eis.Web/ClientApp/src/App.vue b/src/Eis.Web/ClientApp/src/App.vue new file mode 100644 index 0000000..651a21a --- /dev/null +++ b/src/Eis.Web/ClientApp/src/App.vue @@ -0,0 +1,62 @@ + + + diff --git a/src/Eis.Web/ClientApp/src/components/HomePage.vue b/src/Eis.Web/ClientApp/src/components/HomePage.vue new file mode 100644 index 0000000..75812ca --- /dev/null +++ b/src/Eis.Web/ClientApp/src/components/HomePage.vue @@ -0,0 +1,325 @@ + + + diff --git a/src/Eis.Web/ClientApp/src/lib/api.js b/src/Eis.Web/ClientApp/src/lib/api.js new file mode 100644 index 0000000..96f4f82 --- /dev/null +++ b/src/Eis.Web/ClientApp/src/lib/api.js @@ -0,0 +1,38 @@ +const pendingReads = new Map(); + +async function request(path, options = {}) { + const binaryBody = options.body instanceof ArrayBuffer || options.body instanceof Blob || options.body instanceof FormData; + const response = await fetch(path, { + credentials: 'same-origin', + headers: { + ...(options.body && !binaryBody ? { 'Content-Type': 'application/json' } : {}), + ...options.headers + }, + ...options, + body: options.body && typeof options.body !== 'string' && !binaryBody + ? JSON.stringify(options.body) + : options.body + }); + + const type = response.headers.get('content-type') || ''; + const data = type.includes('application/json') ? await response.json() : await response.text(); + if (!response.ok) { + const error = new Error(data?.message || '操作未完成,请稍后重试'); + error.status = response.status; + throw error; + } + return data; +} + +export function api(path, options = {}) { + const method = String(options.method || 'GET').toUpperCase(); + if (method !== 'GET' || options.body != null || options.signal) return request(path, options); + + const key = String(path); + if (pendingReads.has(key)) return pendingReads.get(key); + const loading = request(path, options).finally(() => { + if (pendingReads.get(key) === loading) pendingReads.delete(key); + }); + pendingReads.set(key, loading); + return loading; +} diff --git a/src/Eis.Web/ClientApp/src/lib/format.js b/src/Eis.Web/ClientApp/src/lib/format.js new file mode 100644 index 0000000..d03934d --- /dev/null +++ b/src/Eis.Web/ClientApp/src/lib/format.js @@ -0,0 +1,39 @@ +export function formatDate(value, withTime = false) { + if (!value) return '—'; + const date = new Date(value); + if (Number.isNaN(date.getTime())) return String(value); + return new Intl.DateTimeFormat('zh-CN', { + year: 'numeric', + month: '2-digit', + day: '2-digit', + ...(withTime ? { hour: '2-digit', minute: '2-digit', hour12: false } : {}) + }).format(date); +} + +export function dateRange(start, end) { + if (!start && !end) return '时间待发布'; + const startDate = start ? new Date(start) : null; + const endDate = end ? new Date(end) : null; + if (!startDate || Number.isNaN(startDate.getTime())) return formatDate(end); + if (!endDate || Number.isNaN(endDate.getTime())) return formatDate(start); + + const day = value => new Intl.DateTimeFormat('zh-CN', { + year: 'numeric', month: '2-digit', day: '2-digit' + }).format(value); + return `${day(startDate)} — ${day(endDate)}`; +} + +export function registrationLabel(state) { + return { + open: '报名开放', + upcoming: '即将开放', + closed: '报名结束' + }[state] || '已发布'; +} + +export function roleHome(user) { + if (!user) return 'login'; + if (user.role === 'candidate') return 'candidate/dashboard'; + if (user.role === 'admission_school') return 'admission_school/dashboard'; + return 'admin/dashboard'; +} diff --git a/src/Eis.Web/ClientApp/src/main.js b/src/Eis.Web/ClientApp/src/main.js new file mode 100644 index 0000000..073faf7 --- /dev/null +++ b/src/Eis.Web/ClientApp/src/main.js @@ -0,0 +1,64 @@ +import { createApp } from 'vue'; +import App from './App.vue'; +import './styles/home.css'; + +const root = document.querySelector('#app'); +let vueApp = null; +let legacyLoading = null; + +window.__EIS_VUE_SHELL__ = true; + +function currentRoute() { + return location.hash.slice(1) || 'home'; +} + +function isVueRoute(route) { + return route === 'home'; +} + +function showLegacyBoot() { + root.innerHTML = ` +
+ + 正在进入业务中心 + 请稍候 +
`; +} + +function loadLegacy() { + if (legacyLoading) return legacyLoading; + if (vueApp) { + vueApp.unmount(); + vueApp = null; + } + showLegacyBoot(); + legacyLoading = import(/* @vite-ignore */ '/js/app.js?v=20260723-vue').catch(error => { + console.error('Legacy application failed to load', error); + root.innerHTML = '
服务提示

业务中心暂时无法加载

请刷新页面后重试。

'; + throw error; + }); + return legacyLoading; +} + +function mountVue() { + if (vueApp) return; + root.innerHTML = ''; + vueApp = createApp(App); + vueApp.mount(root); +} + +function renderEntry() { + if (isVueRoute(currentRoute())) mountVue(); + else loadLegacy(); +} + +window.addEventListener('hashchange', () => { + const route = currentRoute(); + if (isVueRoute(route) && legacyLoading) { + location.reload(); + return; + } + if (!isVueRoute(route) && !legacyLoading) loadLegacy(); +}); + +renderEntry(); diff --git a/src/Eis.Web/ClientApp/src/styles/home.css b/src/Eis.Web/ClientApp/src/styles/home.css new file mode 100644 index 0000000..5ed3388 --- /dev/null +++ b/src/Eis.Web/ClientApp/src/styles/home.css @@ -0,0 +1,712 @@ +:root { + --hz-navy-950: #071c35; + --hz-navy-900: #0d2d54; + --hz-navy-800: #113b6c; + --hz-blue-700: #17558f; + --hz-blue-100: #e8f0f8; + --hz-red-700: #9f3038; + --hz-red-100: #f8e9e9; + --hz-ink: #182536; + --hz-muted: #5d6c7d; + --hz-line: #d5dee8; + --hz-paper: #f4f7fa; + --hz-white: #ffffff; + --hz-title: "Noto Serif SC", "Source Han Serif SC", "Songti SC", STSong, SimSun, serif; + --hz-body: "Inter", "PingFang SC", "Microsoft YaHei", system-ui, sans-serif; + color: var(--hz-ink); + font-family: var(--hz-body); + font-synthesis: none; +} + +html { scroll-behavior: smooth; } + +body { + margin: 0; + min-width: 320px; + background: var(--hz-white); + color: var(--hz-ink); +} + +.hz-site, +.hz-site * { box-sizing: border-box; } + +.hz-site { + min-height: 100vh; + background: var(--hz-white); + color: var(--hz-ink); + font-family: var(--hz-body); + line-height: 1.6; +} + +.hz-site button, +.hz-failure button { + margin: 0; + border: 0; + font: inherit; +} + +.hz-site button { cursor: pointer; } + +.hz-site button:focus-visible, +.hz-site a:focus-visible, +.hz-failure button:focus-visible { + outline: 3px solid #e2a918; + outline-offset: 3px; +} + +.hz-container { + width: min(1180px, calc(100% - 48px)); + margin-inline: auto; +} + +.hz-skip { + position: fixed; + z-index: 100; + top: 10px; + left: 10px; + padding: 10px 16px; + border-radius: 3px; + background: var(--hz-white); + color: var(--hz-navy-900); + font-weight: 700; + transform: translateY(-160%); + transition: transform 160ms ease; +} + +.hz-skip:focus { transform: translateY(0); } + +.hz-service-bar { + min-height: 38px; + background: var(--hz-navy-950); + color: #dbe7f4; + font-size: 12px; + letter-spacing: .04em; +} + +.hz-service-bar__inner { + min-height: 38px; + display: flex; + align-items: center; + justify-content: space-between; + gap: 24px; +} + +.hz-service-bar p, +.hz-service-bar div { display: flex; align-items: center; gap: 18px; margin: 0; } + +.hz-service-bar p span { + width: 7px; + height: 7px; + border-radius: 50%; + background: #5ba8e5; + box-shadow: 0 0 0 4px rgba(91, 168, 229, .14); +} + +.hz-service-bar button { + padding: 0 0 0 18px; + border-left: 1px solid rgba(255,255,255,.2); + background: transparent; + color: #fff; + font-size: 12px; +} + +.hz-header { + position: sticky; + z-index: 30; + top: 0; + border-bottom: 1px solid var(--hz-line); + background: rgba(255,255,255,.97); + box-shadow: 0 6px 22px rgba(9, 34, 62, .06); + backdrop-filter: blur(14px); +} + +.hz-header__inner { + min-height: 78px; + display: grid; + grid-template-columns: auto 1fr auto; + align-items: center; + gap: 34px; +} + +.hz-brand { + display: inline-flex; + align-items: center; + gap: 13px; + padding: 0; + background: transparent; + color: var(--hz-navy-900); + text-align: left; +} + +.hz-brand__seal { + width: 44px; + height: 44px; + flex: 0 0 44px; + display: grid; + place-items: center; + border: 2px solid var(--hz-red-700); + background: var(--hz-red-700); + color: #fff; + font-family: var(--hz-title); + font-size: 24px; + font-weight: 800; + line-height: 1; + box-shadow: inset 0 0 0 3px rgba(255,255,255,.24); +} + +.hz-brand__copy { display: flex; flex-direction: column; line-height: 1.1; } +.hz-brand__copy strong { font-family: var(--hz-title); font-size: 20px; letter-spacing: .08em; } +.hz-brand__copy small { margin-top: 7px; color: #63758b; font-size: 8px; font-weight: 700; letter-spacing: .12em; } + +.hz-nav { + display: flex; + align-self: stretch; + align-items: stretch; + justify-content: center; + gap: 2px; +} + +.hz-nav button { + position: relative; + padding: 0 17px; + background: transparent; + color: #34465c; + font-size: 14px; + font-weight: 650; +} + +.hz-nav button::after { + content: ""; + position: absolute; + right: 17px; + bottom: -1px; + left: 17px; + height: 3px; + background: var(--hz-red-700); + transform: scaleX(0); + transition: transform 180ms ease; +} + +.hz-nav button:hover, +.hz-nav button.is-current { color: var(--hz-navy-900); } +.hz-nav button:hover::after, +.hz-nav button.is-current::after { transform: scaleX(1); } + +.hz-header__actions { display: flex; align-items: center; gap: 8px; } + +.hz-account-link { + min-height: 40px; + padding: 0 16px; + border: 1px solid var(--hz-navy-800) !important; + border-radius: 2px; + background: var(--hz-navy-800); + color: #fff; + font-size: 13px !important; + font-weight: 700 !important; +} + +.hz-account-link:hover { background: var(--hz-navy-950); } +.hz-exit-link { padding: 9px 4px; background: transparent; color: var(--hz-muted); font-size: 13px !important; } + +.hz-menu { + width: 42px; + height: 42px; + display: none; + align-items: center; + justify-content: center; + flex-direction: column; + gap: 5px; + background: transparent; +} + +.hz-menu span { width: 22px; height: 2px; background: var(--hz-navy-900); } + +.hz-hero { + position: relative; + overflow: hidden; + border-bottom: 1px solid var(--hz-line); + background: + linear-gradient(90deg, rgba(17,59,108,.045) 1px, transparent 1px) 0 0 / 62px 62px, + linear-gradient(rgba(17,59,108,.045) 1px, transparent 1px) 0 0 / 62px 62px, + linear-gradient(118deg, #f8fafc 0%, #f3f7fb 63%, #edf3f8 100%); +} + +.hz-hero::before { + content: "准"; + position: absolute; + right: max(-30px, calc((100vw - 1340px) / 2)); + bottom: -160px; + color: rgba(13,45,84,.035); + font-family: var(--hz-title); + font-size: 530px; + font-weight: 900; + line-height: 1; + pointer-events: none; +} + +.hz-latest { + position: relative; + z-index: 1; + width: 100%; + min-height: 46px; + display: grid; + grid-template-columns: auto 1fr auto auto; + align-items: center; + gap: 18px; + margin-top: 22px; + padding: 0 18px 0 0; + border: 1px solid #cfd9e5 !important; + border-left: 0 !important; + background: rgba(255,255,255,.78); + color: var(--hz-ink); + text-align: left; +} + +.hz-latest > span { + align-self: stretch; + display: grid; + place-items: center; + padding: 0 16px; + background: var(--hz-red-700); + color: #fff; + font-size: 12px; + font-weight: 700; + letter-spacing: .08em; +} + +.hz-latest strong { overflow: hidden; font-size: 13px; text-overflow: ellipsis; white-space: nowrap; } +.hz-latest time { color: var(--hz-muted); font-size: 12px; } +.hz-latest i { color: var(--hz-red-700); font-style: normal; } + +.hz-hero__grid { + position: relative; + z-index: 1; + display: grid; + grid-template-columns: minmax(0, 1.18fr) minmax(380px, .82fr); + gap: 74px; + align-items: center; + padding: 74px 0 82px; +} + +.hz-kicker, +.hz-section-heading p, +.hz-guide__intro > p { + margin: 0 0 15px; + color: var(--hz-blue-700); + font-size: 11px; + font-weight: 800; + letter-spacing: .2em; + text-transform: uppercase; +} + +.hz-kicker::before { + content: ""; + width: 28px; + height: 2px; + display: inline-block; + margin-right: 12px; + vertical-align: middle; + background: var(--hz-red-700); +} + +.hz-hero__content h1 { + max-width: 700px; + margin: 0; + color: var(--hz-navy-950); + font-family: var(--hz-title); + font-size: clamp(42px, 4.6vw, 67px); + font-weight: 800; + letter-spacing: -.035em; + line-height: 1.25; +} + +.hz-hero__content h1 em { display: block; color: var(--hz-navy-800); font-style: normal; } + +.hz-hero__lead { + max-width: 680px; + margin: 26px 0 0; + color: #52657a; + font-size: 17px; + line-height: 1.9; +} + +.hz-hero__actions { display: flex; gap: 12px; margin-top: 34px; } + +.hz-button { + min-height: 50px; + display: inline-flex; + align-items: center; + justify-content: center; + gap: 26px; + padding: 0 22px; + border-radius: 2px; + font-size: 14px !important; + font-weight: 750 !important; + transition: transform 160ms ease, box-shadow 160ms ease, background 160ms ease; +} + +.hz-button:hover { transform: translateY(-2px); } +.hz-button--primary { background: var(--hz-navy-800); color: #fff; box-shadow: 0 12px 25px rgba(17,59,108,.18); } +.hz-button--primary:hover { background: var(--hz-navy-950); box-shadow: 0 15px 30px rgba(17,59,108,.25); } +.hz-button--secondary { border: 1px solid #b9c7d6 !important; background: rgba(255,255,255,.5); color: var(--hz-navy-900); } +.hz-button--secondary:hover { border-color: var(--hz-navy-800) !important; background: #fff; } + +.hz-trust-list { + display: flex; + flex-wrap: wrap; + gap: 10px 28px; + margin: 34px 0 0; +} + +.hz-trust-list div { display: flex; align-items: center; gap: 8px; } +.hz-trust-list dt { color: var(--hz-red-700); font-size: 11px; font-weight: 800; } +.hz-trust-list dd { margin: 0; color: #53677c; font-size: 12px; } + +.hz-exam-docket { + position: relative; + background: #fff; + border: 1px solid #bdcad8; + box-shadow: 0 28px 65px rgba(14,45,78,.14); +} + +.hz-exam-docket::before, +.hz-exam-docket::after { + content: ""; + position: absolute; + top: 50%; + width: 17px; + height: 34px; + background: #eff4f8; + border: 1px solid #bdcad8; + transform: translateY(-50%); +} + +.hz-exam-docket::before { left: -1px; border-left: 0; border-radius: 0 24px 24px 0; } +.hz-exam-docket::after { right: -1px; border-right: 0; border-radius: 24px 0 0 24px; } + +.hz-exam-docket > header { + min-height: 59px; + display: flex; + align-items: center; + justify-content: space-between; + gap: 16px; + padding: 0 24px; + border-bottom: 1px dashed #c4cfdb; + background: #f9fbfd; +} + +.hz-exam-docket > header div { display: flex; align-items: center; gap: 12px; } +.hz-exam-docket > header span { color: var(--hz-navy-900); font-weight: 800; } +.hz-exam-docket > header small { color: var(--hz-muted); font-family: ui-monospace, SFMono-Regular, Consolas, monospace; font-size: 11px; } +.hz-exam-docket em, +.hz-exam-card em { + display: inline-flex; + align-items: center; + gap: 6px; + color: var(--hz-muted); + font-size: 12px; + font-style: normal; + font-weight: 700; +} + +.hz-exam-docket em::before, +.hz-exam-card em::before { content: ""; width: 7px; height: 7px; border-radius: 50%; background: #8392a2; } +.hz-exam-docket em.is-open, +.hz-exam-card em.is-open { color: #17673d; } +.hz-exam-docket em.is-open::before, +.hz-exam-card em.is-open::before { background: #259557; box-shadow: 0 0 0 4px #e3f4e9; } +.hz-exam-docket em.is-upcoming, +.hz-exam-card em.is-upcoming { color: #8a5714; } +.hz-exam-docket em.is-upcoming::before, +.hz-exam-card em.is-upcoming::before { background: #d99625; } + +.hz-exam-docket__body { padding: 29px 30px 31px; } +.hz-exam-docket__body > p { margin: 0 0 6px; color: #8290a0; font-family: ui-monospace, SFMono-Regular, Consolas, monospace; font-size: 9px; letter-spacing: .18em; } +.hz-exam-docket__body h2 { margin: 0 0 26px; color: var(--hz-navy-950); font-family: var(--hz-title); font-size: 25px; line-height: 1.45; } +.hz-exam-docket__body dl { margin: 0; } +.hz-exam-docket__body dl div { display: grid; grid-template-columns: 72px 1fr; gap: 14px; padding: 9px 0; border-top: 1px solid #e6ebf0; } +.hz-exam-docket__body dt { color: #738296; font-size: 12px; } +.hz-exam-docket__body dd { margin: 0; color: #28384c; font-size: 12px; font-weight: 650; } + +.hz-subjects { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 18px; } +.hz-subjects span { padding: 4px 8px; border: 1px solid #d4dde6; background: #f7f9fb; color: #506174; font-size: 11px; } + +.hz-exam-docket > footer { + min-height: 73px; + display: flex; + align-items: center; + justify-content: space-between; + gap: 20px; + padding: 0 30px; + border-top: 1px dashed #c4cfdb; + background: var(--hz-navy-900); + color: #fff; +} + +.hz-exam-docket > footer p { display: flex; align-items: baseline; gap: 7px; margin: 0; } +.hz-exam-docket > footer strong { font-family: var(--hz-title); font-size: 25px; } +.hz-exam-docket > footer span { color: #b8cce0; font-size: 11px; } +.hz-exam-docket > footer button { padding: 8px 0 8px 20px; background: transparent; color: #fff; font-size: 13px; font-weight: 700; } +.hz-exam-docket--empty { min-height: 330px; display: flex; justify-content: center; flex-direction: column; padding: 40px; } +.hz-exam-docket--empty::before, +.hz-exam-docket--empty::after { display: none; } +.hz-exam-docket--empty > span { color: var(--hz-red-700); font-size: 12px; font-weight: 800; } +.hz-exam-docket--empty h2 { margin: 12px 0; font-family: var(--hz-title); } +.hz-exam-docket--empty p { color: var(--hz-muted); } + +.hz-entry-section { padding: 62px 0 72px; background: #fff; } + +.hz-section-heading { + display: flex; + align-items: end; + justify-content: space-between; + gap: 24px; + margin-bottom: 28px; +} + +.hz-section-heading p { margin-bottom: 7px; } +.hz-section-heading h2 { margin: 0; color: var(--hz-navy-950); font-family: var(--hz-title); font-size: 30px; letter-spacing: .01em; } +.hz-section-heading > span { max-width: 410px; color: var(--hz-muted); font-size: 13px; text-align: right; } +.hz-section-heading > button { padding: 8px 0; background: transparent; color: var(--hz-blue-700); font-size: 13px; font-weight: 750; } +.hz-section-heading--compact { margin-bottom: 20px; } + +.hz-service-grid { + display: grid; + grid-template-columns: repeat(4, 1fr); + border: 1px solid var(--hz-line); +} + +.hz-service-grid > button { + min-height: 190px; + display: flex; + align-items: flex-start; + flex-direction: column; + padding: 24px 26px 22px; + border-right: 1px solid var(--hz-line); + background: #fff; + color: var(--hz-ink); + text-align: left; + transition: background 180ms ease, transform 180ms ease, box-shadow 180ms ease; +} + +.hz-service-grid > button:last-child { border-right: 0; } +.hz-service-grid > button:hover { z-index: 1; background: var(--hz-navy-900); color: #fff; box-shadow: 0 16px 35px rgba(13,45,84,.19); transform: translateY(-5px); } +.hz-service-grid__index { color: var(--hz-red-700); font-family: ui-monospace, SFMono-Regular, Consolas, monospace; font-size: 11px; font-weight: 800; } +.hz-service-grid strong { margin-top: 20px; font-family: var(--hz-title); font-size: 18px; } +.hz-service-grid small { margin-top: 8px; color: var(--hz-muted); font-size: 12px; line-height: 1.7; } +.hz-service-grid i { margin-top: auto; color: var(--hz-blue-700); font-size: 12px; font-style: normal; font-weight: 750; } +.hz-service-grid > button:hover small { color: #c3d2e1; } +.hz-service-grid > button:hover i, +.hz-service-grid > button:hover .hz-service-grid__index { color: #fff; } + +.hz-public-records { padding: 78px 0; background: var(--hz-paper); border-block: 1px solid var(--hz-line); } +.hz-records-grid { display: grid; grid-template-columns: minmax(0, 1.5fr) minmax(290px, .5fr); gap: 52px; } + +.hz-featured-notice { + padding: 30px 32px; + border-top: 3px solid var(--hz-navy-800); + background: #fff; + box-shadow: 0 14px 30px rgba(15,42,70,.07); +} + +.hz-featured-notice > div { display: flex; justify-content: space-between; gap: 20px; } +.hz-featured-notice > div span { color: var(--hz-red-700); font-size: 12px; font-weight: 800; } +.hz-featured-notice time { color: var(--hz-muted); font-size: 12px; } +.hz-featured-notice h3 { margin: 18px 0 10px; color: var(--hz-navy-950); font-family: var(--hz-title); font-size: 24px; line-height: 1.5; } +.hz-featured-notice p { margin: 0; color: var(--hz-muted); font-size: 13px; line-height: 1.8; } +.hz-featured-notice > button { display: inline-flex; gap: 16px; margin-top: 22px; padding: 7px 0; background: transparent; color: var(--hz-blue-700); font-size: 12px; font-weight: 750; } + +.hz-notice-list { margin-top: 12px; border-top: 1px solid var(--hz-line); } +.hz-notice-list > button { + width: 100%; + min-height: 85px; + display: grid; + grid-template-columns: 62px 1fr auto; + align-items: center; + gap: 18px; + padding: 12px 8px; + border-bottom: 1px solid var(--hz-line); + background: transparent; + color: var(--hz-ink); + text-align: left; +} + +.hz-notice-list > button:hover { background: #fff; } +.hz-notice-list time { display: flex; align-items: center; flex-direction: column; border-right: 1px solid var(--hz-line); line-height: 1.1; } +.hz-notice-list time strong { color: var(--hz-navy-900); font-family: var(--hz-title); font-size: 22px; } +.hz-notice-list time span { margin-top: 5px; color: var(--hz-muted); font-size: 9px; } +.hz-notice-list > button > span { min-width: 0; display: flex; flex-direction: column; } +.hz-notice-list em { color: var(--hz-red-700); font-size: 10px; font-style: normal; } +.hz-notice-list > button > span strong { overflow: hidden; margin-top: 4px; font-size: 13px; text-overflow: ellipsis; white-space: nowrap; } +.hz-notice-list i { color: var(--hz-blue-700); font-style: normal; } + +.hz-operation-board { + align-self: start; + border: 1px solid #c5d0dc; + background: var(--hz-navy-900); + color: #fff; +} + +.hz-operation-board > header { display: flex; justify-content: space-between; padding: 20px 22px; border-bottom: 1px solid rgba(255,255,255,.16); } +.hz-operation-board > header span { font-family: var(--hz-title); font-size: 17px; font-weight: 800; } +.hz-operation-board > header small { color: #9db2c7; font-size: 10px; } +.hz-operation-board > dl { margin: 0; padding: 8px 22px; } +.hz-operation-board > dl div { display: flex; align-items: baseline; justify-content: space-between; padding: 18px 0; border-bottom: 1px solid rgba(255,255,255,.13); } +.hz-operation-board dt { color: #bdd0e1; font-size: 12px; } +.hz-operation-board dd { margin: 0; font-family: var(--hz-title); font-size: 29px; font-weight: 800; } +.hz-operation-board dd small { margin-left: 5px; color: #9db2c7; font-family: var(--hz-body); font-size: 10px; font-weight: 500; } +.hz-operation-board > section { margin: 14px; padding: 19px; background: rgba(255,255,255,.08); } +.hz-operation-board > section strong { font-size: 12px; } +.hz-operation-board > section p { margin: 8px 0 15px; color: #bdccdb; font-size: 11px; line-height: 1.8; } +.hz-operation-board > section button { padding: 6px 0; background: transparent; color: #fff; font-size: 11px; font-weight: 700; } + +.hz-exams { padding: 82px 0 92px; background: #fff; scroll-margin-top: 78px; } +.hz-exam-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 18px; } +.hz-exam-card { min-height: 390px; display: flex; flex-direction: column; padding: 25px; border: 1px solid var(--hz-line); background: #fff; transition: border 180ms ease, box-shadow 180ms ease, transform 180ms ease; } +.hz-exam-card:hover { border-color: #9fb2c5; box-shadow: 0 18px 38px rgba(12,44,78,.09); transform: translateY(-4px); } +.hz-exam-card > header { display: flex; justify-content: space-between; gap: 14px; } +.hz-exam-card > header > span { color: var(--hz-blue-700); font-family: ui-monospace, SFMono-Regular, Consolas, monospace; font-size: 11px; font-weight: 800; } +.hz-exam-card h3 { margin: 25px 0 10px; color: var(--hz-navy-950); font-family: var(--hz-title); font-size: 21px; line-height: 1.5; } +.hz-exam-card > p { margin: 0; color: var(--hz-muted); font-size: 12px; line-height: 1.75; } +.hz-exam-card dl { margin: 23px 0; } +.hz-exam-card dl div { display: grid; grid-template-columns: 64px 1fr; gap: 12px; padding: 8px 0; border-top: 1px solid #e6ebf0; } +.hz-exam-card dt { color: #778597; font-size: 11px; } +.hz-exam-card dd { margin: 0; color: #34475b; font-size: 11px; font-weight: 650; } +.hz-exam-card > footer { display: flex; align-items: center; justify-content: space-between; gap: 16px; margin-top: auto; padding-top: 17px; border-top: 1px solid var(--hz-line); } +.hz-exam-card > footer span { color: var(--hz-muted); font-size: 11px; } +.hz-exam-card > footer button { padding: 6px 0; background: transparent; color: var(--hz-blue-700); font-size: 11px; font-weight: 800; } + +.hz-guide { padding: 80px 0; background: var(--hz-navy-950); color: #fff; scroll-margin-top: 78px; } +.hz-guide .hz-container { display: grid; grid-template-columns: .72fr 1.28fr; gap: 78px; } +.hz-guide__intro > p { color: #7cb2de; } +.hz-guide__intro h2 { margin: 0; font-family: var(--hz-title); font-size: 32px; line-height: 1.45; } +.hz-guide__intro > span { display: block; margin-top: 18px; color: #a9bed3; font-size: 13px; line-height: 1.9; } +.hz-guide ol { display: grid; grid-template-columns: repeat(2, 1fr); gap: 0; margin: 0; padding: 0; list-style: none; border-top: 1px solid rgba(255,255,255,.16); border-left: 1px solid rgba(255,255,255,.16); } +.hz-guide li { min-height: 145px; display: flex; gap: 17px; padding: 25px; border-right: 1px solid rgba(255,255,255,.16); border-bottom: 1px solid rgba(255,255,255,.16); } +.hz-guide li > span { width: 28px; height: 28px; flex: 0 0 28px; display: grid; place-items: center; border: 1px solid #6e91b1; color: #9fc0dc; font-family: var(--hz-title); font-size: 13px; } +.hz-guide li strong { font-family: var(--hz-title); font-size: 16px; } +.hz-guide li p { margin: 8px 0 0; color: #a9bed3; font-size: 11px; line-height: 1.8; } + +.hz-footer { background: #f0f3f6; border-top: 1px solid var(--hz-line); } +.hz-footer__main { min-height: 178px; display: grid; grid-template-columns: .85fr 1.35fr .5fr; align-items: center; gap: 55px; } +.hz-footer__brand { display: flex; align-items: center; gap: 14px; } +.hz-footer__brand > div { display: flex; flex-direction: column; } +.hz-footer__brand strong { color: var(--hz-navy-950); font-family: var(--hz-title); font-size: 18px; } +.hz-footer__brand small { margin-top: 6px; color: var(--hz-muted); font-size: 10px; letter-spacing: .14em; } +.hz-footer dl { margin: 0; padding-left: 30px; border-left: 1px solid var(--hz-line); } +.hz-footer dl div { display: grid; grid-template-columns: 72px 1fr; gap: 15px; padding: 3px 0; } +.hz-footer dt { color: var(--hz-muted); font-size: 11px; } +.hz-footer dd { margin: 0; color: #304155; font-size: 11px; } +.hz-footer__links { display: flex; align-items: flex-start; flex-direction: column; } +.hz-footer__links button { padding: 4px 0; background: transparent; color: #405469; font-size: 11px; } +.hz-footer__legal { min-height: 47px; display: flex; align-items: center; background: #e4e9ee; color: #657486; font-size: 10px; } +.hz-footer__legal .hz-container { display: flex; justify-content: space-between; gap: 24px; } + +.hz-empty { padding: 30px; border: 1px dashed #bdc9d5; color: var(--hz-muted); font-size: 13px; text-align: center; } +.hz-empty--large { padding: 70px 30px; } + +.hz-loading, +.hz-failure { + min-height: 100vh; + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + background: #f3f6f9; + color: var(--hz-navy-900); + font-family: var(--hz-body); +} + +.hz-loading__seal { width: 54px; height: 54px; display: grid; place-items: center; margin-bottom: 18px; background: var(--hz-red-700); color: #fff; font-family: var(--hz-title); font-size: 28px; box-shadow: inset 0 0 0 4px rgba(255,255,255,.25); } +.hz-loading strong { font-family: var(--hz-title); letter-spacing: .08em; } +.hz-loading small { margin-top: 8px; color: var(--hz-muted); } +.hz-failure { padding: 30px; text-align: center; } +.hz-failure > span { color: var(--hz-red-700); font-size: 12px; font-weight: 800; } +.hz-failure h1 { margin: 12px 0 4px; font-family: var(--hz-title); } +.hz-failure p { color: var(--hz-muted); } +.hz-failure button { margin-top: 16px; padding: 11px 20px; background: var(--hz-navy-800); color: #fff; cursor: pointer; } + +@media (max-width: 1060px) { + .hz-header__inner { gap: 16px; } + .hz-nav button { padding-inline: 10px; font-size: 13px; } + .hz-nav button::after { right: 10px; left: 10px; } + .hz-hero__grid { grid-template-columns: 1fr 370px; gap: 36px; } + .hz-hero__content h1 { font-size: 46px; } + .hz-service-grid { grid-template-columns: repeat(2, 1fr); } + .hz-service-grid > button:nth-child(2) { border-right: 0; } + .hz-service-grid > button:nth-child(-n+2) { border-bottom: 1px solid var(--hz-line); } + .hz-records-grid { gap: 28px; } + .hz-exam-grid { grid-template-columns: repeat(2, 1fr); } + .hz-footer__main { grid-template-columns: 1fr 1.4fr; } + .hz-footer__links { display: none; } +} + +@media (max-width: 820px) { + .hz-container { width: min(100% - 32px, 700px); } + .hz-service-bar__inner > div span { display: none; } + .hz-header__inner { min-height: 70px; grid-template-columns: 1fr auto; } + .hz-brand__seal { width: 39px; height: 39px; flex-basis: 39px; font-size: 21px; } + .hz-brand__copy strong { font-size: 17px; } + .hz-brand__copy small { display: none; } + .hz-menu { display: flex; } + .hz-nav { + position: absolute; + top: 70px; + right: 0; + left: 0; + display: none; + align-items: stretch; + flex-direction: column; + padding: 10px 16px 16px; + border-bottom: 1px solid var(--hz-line); + background: #fff; + box-shadow: 0 16px 28px rgba(10,35,64,.1); + } + .hz-nav.is-open { display: flex; } + .hz-nav button { min-height: 45px; text-align: left; } + .hz-nav button::after { display: none; } + .hz-hero__grid { grid-template-columns: 1fr; padding: 55px 0 62px; } + .hz-hero__content h1 { max-width: 650px; font-size: clamp(39px, 8vw, 54px); } + .hz-exam-docket { max-width: 560px; } + .hz-records-grid { grid-template-columns: 1fr; } + .hz-operation-board { max-width: none; } + .hz-guide .hz-container { grid-template-columns: 1fr; gap: 38px; } + .hz-footer__main { grid-template-columns: 1fr; gap: 24px; padding-block: 42px; } + .hz-footer dl { padding: 22px 0 0; border-top: 1px solid var(--hz-line); border-left: 0; } +} + +@media (max-width: 580px) { + .hz-container { width: calc(100% - 28px); } + .hz-service-bar__inner { justify-content: center; } + .hz-service-bar__inner > div { display: none; } + .hz-account-link { max-width: 132px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } + .hz-exit-link { display: none; } + .hz-latest { grid-template-columns: auto 1fr auto; gap: 10px; padding-right: 12px; } + .hz-latest time { display: none; } + .hz-latest > span { padding-inline: 10px; } + .hz-hero__grid { padding-top: 46px; } + .hz-hero__content h1 { font-size: 38px; line-height: 1.35; } + .hz-hero__lead { font-size: 14px; } + .hz-hero__actions { align-items: stretch; flex-direction: column; } + .hz-trust-list { align-items: flex-start; flex-direction: column; } + .hz-exam-docket__body { padding: 25px 22px; } + .hz-exam-docket > footer { padding-inline: 22px; } + .hz-section-heading { align-items: flex-start; flex-direction: column; } + .hz-section-heading > span { text-align: left; } + .hz-service-grid { grid-template-columns: 1fr; } + .hz-service-grid > button { min-height: 170px; border-right: 0; border-bottom: 1px solid var(--hz-line); } + .hz-service-grid > button:last-child { border-bottom: 0; } + .hz-records-grid { gap: 38px; } + .hz-featured-notice { padding: 25px 22px; } + .hz-featured-notice h3 { font-size: 20px; } + .hz-notice-list > button { grid-template-columns: 52px 1fr auto; gap: 10px; } + .hz-exam-grid { grid-template-columns: 1fr; } + .hz-exam-card { min-height: 360px; } + .hz-guide ol { grid-template-columns: 1fr; } + .hz-guide__intro h2 { font-size: 27px; } + .hz-footer__legal .hz-container { flex-direction: column; gap: 2px; padding-block: 10px; } +} + +@media (prefers-reduced-motion: reduce) { + *, *::before, *::after { scroll-behavior: auto !important; transition-duration: .01ms !important; animation-duration: .01ms !important; animation-iteration-count: 1 !important; } +} diff --git a/src/Eis.Web/ClientApp/vite.config.js b/src/Eis.Web/ClientApp/vite.config.js new file mode 100644 index 0000000..e336b42 --- /dev/null +++ b/src/Eis.Web/ClientApp/vite.config.js @@ -0,0 +1,36 @@ +import { fileURLToPath, URL } from 'node:url'; +import { defineConfig } from 'vite'; +import vue from '@vitejs/plugin-vue'; + +export default defineConfig({ + plugins: [vue()], + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)) + } + }, + server: { + port: 5173, + strictPort: true, + proxy: { + '/api': 'http://127.0.0.1:4173', + '/health': 'http://127.0.0.1:4173', + '/js': 'http://127.0.0.1:4173', + '/vendor': 'http://127.0.0.1:4173', + '/styles.css': 'http://127.0.0.1:4173' + } + }, + build: { + outDir: '../wwwroot/vue-app', + emptyOutDir: true, + cssCodeSplit: false, + rollupOptions: { + input: fileURLToPath(new URL('./src/main.js', import.meta.url)), + output: { + entryFileNames: 'app.js', + chunkFileNames: 'chunks/[name]-[hash].js', + assetFileNames: assetInfo => assetInfo.names?.some(name => name.endsWith('.css')) ? 'app.css' : 'assets/[name]-[hash][extname]' + } + } + } +}); diff --git a/src/Eis.Web/wwwroot/index.html b/src/Eis.Web/wwwroot/index.html index 0f8aed9..261b49c 100644 --- a/src/Eis.Web/wwwroot/index.html +++ b/src/Eis.Web/wwwroot/index.html @@ -3,10 +3,11 @@ - + 衡准 · 考试信息管理系统 +
@@ -21,6 +22,6 @@
操作成功更改已保存
- + diff --git a/src/Eis.Web/wwwroot/js/app.js b/src/Eis.Web/wwwroot/js/app.js index 2e09dc2..a1cb8b1 100644 --- a/src/Eis.Web/wwwroot/js/app.js +++ b/src/Eis.Web/wwwroot/js/app.js @@ -169,7 +169,13 @@ async function renderRoute() { const route = location.hash.slice(1) || 'home'; const [section, page = 'dashboard'] = route.split('/'); if (section !== 'login') state.authNotice = ''; - if (section === 'home') renderHome(); + if (section === 'home') { + if (window.__EIS_VUE_SHELL__) { + location.reload(); + return; + } + renderHome(); + } else if (section === 'verify') { if (!page || page === 'dashboard') renderVerification(); else { diff --git a/src/Eis.Web/wwwroot/vue-app/app.css b/src/Eis.Web/wwwroot/vue-app/app.css new file mode 100644 index 0000000..416f7f7 --- /dev/null +++ b/src/Eis.Web/wwwroot/vue-app/app.css @@ -0,0 +1,2 @@ +:root{--hz-navy-950:#071c35;--hz-navy-900:#0d2d54;--hz-navy-800:#113b6c;--hz-blue-700:#17558f;--hz-blue-100:#e8f0f8;--hz-red-700:#9f3038;--hz-red-100:#f8e9e9;--hz-ink:#182536;--hz-muted:#5d6c7d;--hz-line:#d5dee8;--hz-paper:#f4f7fa;--hz-white:#fff;--hz-title:"Noto Serif SC", "Source Han Serif SC", "Songti SC", STSong, SimSun, serif;--hz-body:"Inter", "PingFang SC", "Microsoft YaHei", system-ui, sans-serif;color:var(--hz-ink);font-family:var(--hz-body);font-synthesis:none}html{scroll-behavior:smooth}body{background:var(--hz-white);min-width:320px;color:var(--hz-ink);margin:0}.hz-site,.hz-site *{box-sizing:border-box}.hz-site{background:var(--hz-white);min-height:100vh;color:var(--hz-ink);font-family:var(--hz-body);line-height:1.6}.hz-site button,.hz-failure button{font:inherit;border:0;margin:0}.hz-site button{cursor:pointer}.hz-site button:focus-visible,.hz-site a:focus-visible,.hz-failure button:focus-visible{outline-offset:3px;outline:3px solid #e2a918}.hz-container{width:min(1180px,100% - 48px);margin-inline:auto}.hz-skip{z-index:100;background:var(--hz-white);color:var(--hz-navy-900);border-radius:3px;padding:10px 16px;font-weight:700;transition:transform .16s;position:fixed;top:10px;left:10px;transform:translateY(-160%)}.hz-skip:focus{transform:translateY(0)}.hz-service-bar{background:var(--hz-navy-950);color:#dbe7f4;letter-spacing:.04em;min-height:38px;font-size:12px}.hz-service-bar__inner{justify-content:space-between;align-items:center;gap:24px;min-height:38px;display:flex}.hz-service-bar p,.hz-service-bar div{align-items:center;gap:18px;margin:0;display:flex}.hz-service-bar p span{background:#5ba8e5;border-radius:50%;width:7px;height:7px;box-shadow:0 0 0 4px #5ba8e524}.hz-service-bar button{color:#fff;background:0 0;border-left:1px solid #fff3;padding:0 0 0 18px;font-size:12px}.hz-header{z-index:30;border-bottom:1px solid var(--hz-line);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);background:#fffffff7;position:sticky;top:0;box-shadow:0 6px 22px #09223e0f}.hz-header__inner{grid-template-columns:auto 1fr auto;align-items:center;gap:34px;min-height:78px;display:grid}.hz-brand{color:var(--hz-navy-900);text-align:left;background:0 0;align-items:center;gap:13px;padding:0;display:inline-flex}.hz-brand__seal{border:2px solid var(--hz-red-700);background:var(--hz-red-700);color:#fff;width:44px;height:44px;font-family:var(--hz-title);flex:0 0 44px;place-items:center;font-size:24px;font-weight:800;line-height:1;display:grid;box-shadow:inset 0 0 0 3px #ffffff3d}.hz-brand__copy{flex-direction:column;line-height:1.1;display:flex}.hz-brand__copy strong{font-family:var(--hz-title);letter-spacing:.08em;font-size:20px}.hz-brand__copy small{color:#63758b;letter-spacing:.12em;margin-top:7px;font-size:8px;font-weight:700}.hz-nav{justify-content:center;align-self:stretch;align-items:stretch;gap:2px;display:flex}.hz-nav button{color:#34465c;background:0 0;padding:0 17px;font-size:14px;font-weight:650;position:relative}.hz-nav button:after{content:"";background:var(--hz-red-700);height:3px;transition:transform .18s;position:absolute;bottom:-1px;left:17px;right:17px;transform:scaleX(0)}.hz-nav button:hover,.hz-nav button.is-current{color:var(--hz-navy-900)}.hz-nav button:hover:after,.hz-nav button.is-current:after{transform:scaleX(1)}.hz-header__actions{align-items:center;gap:8px;display:flex}.hz-account-link{background:var(--hz-navy-800);color:#fff;border-radius:2px;min-height:40px;padding:0 16px;border:1px solid var(--hz-navy-800)!important;font-size:13px!important;font-weight:700!important}.hz-account-link:hover{background:var(--hz-navy-950)}.hz-exit-link{color:var(--hz-muted);background:0 0;padding:9px 4px;font-size:13px!important}.hz-menu{background:0 0;flex-direction:column;justify-content:center;align-items:center;gap:5px;width:42px;height:42px;display:none}.hz-menu span{background:var(--hz-navy-900);width:22px;height:2px}.hz-hero{border-bottom:1px solid var(--hz-line);background:linear-gradient(90deg,#113b6c0b 1px,#0000 1px) 0 0/62px 62px,linear-gradient(#113b6c0b 1px,#0000 1px) 0 0/62px 62px,linear-gradient(118deg,#f8fafc 0%,#f3f7fb 63%,#edf3f8 100%);position:relative;overflow:hidden}.hz-hero:before{content:"准";color:#0d2d5409;font-family:var(--hz-title);pointer-events:none;font-size:530px;font-weight:900;line-height:1;position:absolute;bottom:-160px;right:max(-30px,50vw - 670px)}.hz-latest{z-index:1;width:100%;min-height:46px;color:var(--hz-ink);text-align:left;background:#ffffffc7;grid-template-columns:auto 1fr auto auto;align-items:center;gap:18px;margin-top:22px;padding:0 18px 0 0;display:grid;position:relative;border:1px solid #cfd9e5!important;border-left:0!important}.hz-latest>span{background:var(--hz-red-700);color:#fff;letter-spacing:.08em;align-self:stretch;place-items:center;padding:0 16px;font-size:12px;font-weight:700;display:grid}.hz-latest strong{text-overflow:ellipsis;white-space:nowrap;font-size:13px;overflow:hidden}.hz-latest time{color:var(--hz-muted);font-size:12px}.hz-latest i{color:var(--hz-red-700);font-style:normal}.hz-hero__grid{z-index:1;grid-template-columns:minmax(0,1.18fr) minmax(380px,.82fr);align-items:center;gap:74px;padding:74px 0 82px;display:grid;position:relative}.hz-kicker,.hz-section-heading p,.hz-guide__intro>p{color:var(--hz-blue-700);letter-spacing:.2em;text-transform:uppercase;margin:0 0 15px;font-size:11px;font-weight:800}.hz-kicker:before{content:"";vertical-align:middle;background:var(--hz-red-700);width:28px;height:2px;margin-right:12px;display:inline-block}.hz-hero__content h1{max-width:700px;color:var(--hz-navy-950);font-family:var(--hz-title);letter-spacing:-.035em;margin:0;font-size:clamp(42px,4.6vw,67px);font-weight:800;line-height:1.25}.hz-hero__content h1 em{color:var(--hz-navy-800);font-style:normal;display:block}.hz-hero__lead{color:#52657a;max-width:680px;margin:26px 0 0;font-size:17px;line-height:1.9}.hz-hero__actions{gap:12px;margin-top:34px;display:flex}.hz-button{border-radius:2px;justify-content:center;align-items:center;gap:26px;min-height:50px;padding:0 22px;transition:transform .16s,box-shadow .16s,background .16s;display:inline-flex;font-size:14px!important;font-weight:750!important}.hz-button:hover{transform:translateY(-2px)}.hz-button--primary{background:var(--hz-navy-800);color:#fff;box-shadow:0 12px 25px #113b6c2e}.hz-button--primary:hover{background:var(--hz-navy-950);box-shadow:0 15px 30px #113b6c40}.hz-button--secondary{color:var(--hz-navy-900);background:#ffffff80;border:1px solid #b9c7d6!important}.hz-button--secondary:hover{background:#fff;border-color:var(--hz-navy-800)!important}.hz-trust-list{flex-wrap:wrap;gap:10px 28px;margin:34px 0 0;display:flex}.hz-trust-list div{align-items:center;gap:8px;display:flex}.hz-trust-list dt{color:var(--hz-red-700);font-size:11px;font-weight:800}.hz-trust-list dd{color:#53677c;margin:0;font-size:12px}.hz-exam-docket{background:#fff;border:1px solid #bdcad8;position:relative;box-shadow:0 28px 65px #0e2d4e24}.hz-exam-docket:before,.hz-exam-docket:after{content:"";background:#eff4f8;border:1px solid #bdcad8;width:17px;height:34px;position:absolute;top:50%;transform:translateY(-50%)}.hz-exam-docket:before{border-left:0;border-radius:0 24px 24px 0;left:-1px}.hz-exam-docket:after{border-right:0;border-radius:24px 0 0 24px;right:-1px}.hz-exam-docket>header{background:#f9fbfd;border-bottom:1px dashed #c4cfdb;justify-content:space-between;align-items:center;gap:16px;min-height:59px;padding:0 24px;display:flex}.hz-exam-docket>header div{align-items:center;gap:12px;display:flex}.hz-exam-docket>header span{color:var(--hz-navy-900);font-weight:800}.hz-exam-docket>header small{color:var(--hz-muted);font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:11px}.hz-exam-docket em,.hz-exam-card em{color:var(--hz-muted);align-items:center;gap:6px;font-size:12px;font-style:normal;font-weight:700;display:inline-flex}.hz-exam-docket em:before,.hz-exam-card em:before{content:"";background:#8392a2;border-radius:50%;width:7px;height:7px}.hz-exam-docket em.is-open,.hz-exam-card em.is-open{color:#17673d}.hz-exam-docket em.is-open:before,.hz-exam-card em.is-open:before{background:#259557;box-shadow:0 0 0 4px #e3f4e9}.hz-exam-docket em.is-upcoming,.hz-exam-card em.is-upcoming{color:#8a5714}.hz-exam-docket em.is-upcoming:before,.hz-exam-card em.is-upcoming:before{background:#d99625}.hz-exam-docket__body{padding:29px 30px 31px}.hz-exam-docket__body>p{color:#8290a0;letter-spacing:.18em;margin:0 0 6px;font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:9px}.hz-exam-docket__body h2{color:var(--hz-navy-950);font-family:var(--hz-title);margin:0 0 26px;font-size:25px;line-height:1.45}.hz-exam-docket__body dl{margin:0}.hz-exam-docket__body dl div{border-top:1px solid #e6ebf0;grid-template-columns:72px 1fr;gap:14px;padding:9px 0;display:grid}.hz-exam-docket__body dt{color:#738296;font-size:12px}.hz-exam-docket__body dd{color:#28384c;margin:0;font-size:12px;font-weight:650}.hz-subjects{flex-wrap:wrap;gap:6px;margin-top:18px;display:flex}.hz-subjects span{color:#506174;background:#f7f9fb;border:1px solid #d4dde6;padding:4px 8px;font-size:11px}.hz-exam-docket>footer{background:var(--hz-navy-900);color:#fff;border-top:1px dashed #c4cfdb;justify-content:space-between;align-items:center;gap:20px;min-height:73px;padding:0 30px;display:flex}.hz-exam-docket>footer p{align-items:baseline;gap:7px;margin:0;display:flex}.hz-exam-docket>footer strong{font-family:var(--hz-title);font-size:25px}.hz-exam-docket>footer span{color:#b8cce0;font-size:11px}.hz-exam-docket>footer button{color:#fff;background:0 0;padding:8px 0 8px 20px;font-size:13px;font-weight:700}.hz-exam-docket--empty{flex-direction:column;justify-content:center;min-height:330px;padding:40px;display:flex}.hz-exam-docket--empty:before,.hz-exam-docket--empty:after{display:none}.hz-exam-docket--empty>span{color:var(--hz-red-700);font-size:12px;font-weight:800}.hz-exam-docket--empty h2{font-family:var(--hz-title);margin:12px 0}.hz-exam-docket--empty p{color:var(--hz-muted)}.hz-entry-section{background:#fff;padding:62px 0 72px}.hz-section-heading{justify-content:space-between;align-items:end;gap:24px;margin-bottom:28px;display:flex}.hz-section-heading p{margin-bottom:7px}.hz-section-heading h2{color:var(--hz-navy-950);font-family:var(--hz-title);letter-spacing:.01em;margin:0;font-size:30px}.hz-section-heading>span{max-width:410px;color:var(--hz-muted);text-align:right;font-size:13px}.hz-section-heading>button{color:var(--hz-blue-700);background:0 0;padding:8px 0;font-size:13px;font-weight:750}.hz-section-heading--compact{margin-bottom:20px}.hz-service-grid{border:1px solid var(--hz-line);grid-template-columns:repeat(4,1fr);display:grid}.hz-service-grid>button{border-right:1px solid var(--hz-line);min-height:190px;color:var(--hz-ink);text-align:left;background:#fff;flex-direction:column;align-items:flex-start;padding:24px 26px 22px;transition:background .18s,transform .18s,box-shadow .18s;display:flex}.hz-service-grid>button:last-child{border-right:0}.hz-service-grid>button:hover{z-index:1;background:var(--hz-navy-900);color:#fff;transform:translateY(-5px);box-shadow:0 16px 35px #0d2d5430}.hz-service-grid__index{color:var(--hz-red-700);font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:11px;font-weight:800}.hz-service-grid strong{font-family:var(--hz-title);margin-top:20px;font-size:18px}.hz-service-grid small{color:var(--hz-muted);margin-top:8px;font-size:12px;line-height:1.7}.hz-service-grid i{color:var(--hz-blue-700);margin-top:auto;font-size:12px;font-style:normal;font-weight:750}.hz-service-grid>button:hover small{color:#c3d2e1}.hz-service-grid>button:hover i,.hz-service-grid>button:hover .hz-service-grid__index{color:#fff}.hz-public-records{background:var(--hz-paper);border-block:1px solid var(--hz-line);padding:78px 0}.hz-records-grid{grid-template-columns:minmax(0,1.5fr) minmax(290px,.5fr);gap:52px;display:grid}.hz-featured-notice{border-top:3px solid var(--hz-navy-800);background:#fff;padding:30px 32px;box-shadow:0 14px 30px #0f2a4612}.hz-featured-notice>div{justify-content:space-between;gap:20px;display:flex}.hz-featured-notice>div span{color:var(--hz-red-700);font-size:12px;font-weight:800}.hz-featured-notice time{color:var(--hz-muted);font-size:12px}.hz-featured-notice h3{color:var(--hz-navy-950);font-family:var(--hz-title);margin:18px 0 10px;font-size:24px;line-height:1.5}.hz-featured-notice p{color:var(--hz-muted);margin:0;font-size:13px;line-height:1.8}.hz-featured-notice>button{color:var(--hz-blue-700);background:0 0;gap:16px;margin-top:22px;padding:7px 0;font-size:12px;font-weight:750;display:inline-flex}.hz-notice-list{border-top:1px solid var(--hz-line);margin-top:12px}.hz-notice-list>button{border-bottom:1px solid var(--hz-line);width:100%;min-height:85px;color:var(--hz-ink);text-align:left;background:0 0;grid-template-columns:62px 1fr auto;align-items:center;gap:18px;padding:12px 8px;display:grid}.hz-notice-list>button:hover{background:#fff}.hz-notice-list time{border-right:1px solid var(--hz-line);flex-direction:column;align-items:center;line-height:1.1;display:flex}.hz-notice-list time strong{color:var(--hz-navy-900);font-family:var(--hz-title);font-size:22px}.hz-notice-list time span{color:var(--hz-muted);margin-top:5px;font-size:9px}.hz-notice-list>button>span{flex-direction:column;min-width:0;display:flex}.hz-notice-list em{color:var(--hz-red-700);font-size:10px;font-style:normal}.hz-notice-list>button>span strong{text-overflow:ellipsis;white-space:nowrap;margin-top:4px;font-size:13px;overflow:hidden}.hz-notice-list i{color:var(--hz-blue-700);font-style:normal}.hz-operation-board{background:var(--hz-navy-900);color:#fff;border:1px solid #c5d0dc;align-self:start}.hz-operation-board>header{border-bottom:1px solid #ffffff29;justify-content:space-between;padding:20px 22px;display:flex}.hz-operation-board>header span{font-family:var(--hz-title);font-size:17px;font-weight:800}.hz-operation-board>header small{color:#9db2c7;font-size:10px}.hz-operation-board>dl{margin:0;padding:8px 22px}.hz-operation-board>dl div{border-bottom:1px solid #ffffff21;justify-content:space-between;align-items:baseline;padding:18px 0;display:flex}.hz-operation-board dt{color:#bdd0e1;font-size:12px}.hz-operation-board dd{font-family:var(--hz-title);margin:0;font-size:29px;font-weight:800}.hz-operation-board dd small{color:#9db2c7;font-family:var(--hz-body);margin-left:5px;font-size:10px;font-weight:500}.hz-operation-board>section{background:#ffffff14;margin:14px;padding:19px}.hz-operation-board>section strong{font-size:12px}.hz-operation-board>section p{color:#bdccdb;margin:8px 0 15px;font-size:11px;line-height:1.8}.hz-operation-board>section button{color:#fff;background:0 0;padding:6px 0;font-size:11px;font-weight:700}.hz-exams{background:#fff;padding:82px 0 92px;scroll-margin-top:78px}.hz-exam-grid{grid-template-columns:repeat(3,1fr);gap:18px;display:grid}.hz-exam-card{border:1px solid var(--hz-line);background:#fff;flex-direction:column;min-height:390px;padding:25px;transition:border .18s,box-shadow .18s,transform .18s;display:flex}.hz-exam-card:hover{border-color:#9fb2c5;transform:translateY(-4px);box-shadow:0 18px 38px #0c2c4e17}.hz-exam-card>header{justify-content:space-between;gap:14px;display:flex}.hz-exam-card>header>span{color:var(--hz-blue-700);font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:11px;font-weight:800}.hz-exam-card h3{color:var(--hz-navy-950);font-family:var(--hz-title);margin:25px 0 10px;font-size:21px;line-height:1.5}.hz-exam-card>p{color:var(--hz-muted);margin:0;font-size:12px;line-height:1.75}.hz-exam-card dl{margin:23px 0}.hz-exam-card dl div{border-top:1px solid #e6ebf0;grid-template-columns:64px 1fr;gap:12px;padding:8px 0;display:grid}.hz-exam-card dt{color:#778597;font-size:11px}.hz-exam-card dd{color:#34475b;margin:0;font-size:11px;font-weight:650}.hz-exam-card>footer{border-top:1px solid var(--hz-line);justify-content:space-between;align-items:center;gap:16px;margin-top:auto;padding-top:17px;display:flex}.hz-exam-card>footer span{color:var(--hz-muted);font-size:11px}.hz-exam-card>footer button{color:var(--hz-blue-700);background:0 0;padding:6px 0;font-size:11px;font-weight:800}.hz-guide{background:var(--hz-navy-950);color:#fff;padding:80px 0;scroll-margin-top:78px}.hz-guide .hz-container{grid-template-columns:.72fr 1.28fr;gap:78px;display:grid}.hz-guide__intro>p{color:#7cb2de}.hz-guide__intro h2{font-family:var(--hz-title);margin:0;font-size:32px;line-height:1.45}.hz-guide__intro>span{color:#a9bed3;margin-top:18px;font-size:13px;line-height:1.9;display:block}.hz-guide ol{border-top:1px solid #ffffff29;border-left:1px solid #ffffff29;grid-template-columns:repeat(2,1fr);gap:0;margin:0;padding:0;list-style:none;display:grid}.hz-guide li{border-bottom:1px solid #ffffff29;border-right:1px solid #ffffff29;gap:17px;min-height:145px;padding:25px;display:flex}.hz-guide li>span{color:#9fc0dc;width:28px;height:28px;font-family:var(--hz-title);border:1px solid #6e91b1;flex:0 0 28px;place-items:center;font-size:13px;display:grid}.hz-guide li strong{font-family:var(--hz-title);font-size:16px}.hz-guide li p{color:#a9bed3;margin:8px 0 0;font-size:11px;line-height:1.8}.hz-footer{border-top:1px solid var(--hz-line);background:#f0f3f6}.hz-footer__main{grid-template-columns:.85fr 1.35fr .5fr;align-items:center;gap:55px;min-height:178px;display:grid}.hz-footer__brand{align-items:center;gap:14px;display:flex}.hz-footer__brand>div{flex-direction:column;display:flex}.hz-footer__brand strong{color:var(--hz-navy-950);font-family:var(--hz-title);font-size:18px}.hz-footer__brand small{color:var(--hz-muted);letter-spacing:.14em;margin-top:6px;font-size:10px}.hz-footer dl{border-left:1px solid var(--hz-line);margin:0;padding-left:30px}.hz-footer dl div{grid-template-columns:72px 1fr;gap:15px;padding:3px 0;display:grid}.hz-footer dt{color:var(--hz-muted);font-size:11px}.hz-footer dd{color:#304155;margin:0;font-size:11px}.hz-footer__links{flex-direction:column;align-items:flex-start;display:flex}.hz-footer__links button{color:#405469;background:0 0;padding:4px 0;font-size:11px}.hz-footer__legal{color:#657486;background:#e4e9ee;align-items:center;min-height:47px;font-size:10px;display:flex}.hz-footer__legal .hz-container{justify-content:space-between;gap:24px;display:flex}.hz-empty{color:var(--hz-muted);text-align:center;border:1px dashed #bdc9d5;padding:30px;font-size:13px}.hz-empty--large{padding:70px 30px}.hz-loading,.hz-failure{min-height:100vh;color:var(--hz-navy-900);font-family:var(--hz-body);background:#f3f6f9;flex-direction:column;justify-content:center;align-items:center;display:flex}.hz-loading__seal{background:var(--hz-red-700);color:#fff;width:54px;height:54px;font-family:var(--hz-title);place-items:center;margin-bottom:18px;font-size:28px;display:grid;box-shadow:inset 0 0 0 4px #ffffff40}.hz-loading strong{font-family:var(--hz-title);letter-spacing:.08em}.hz-loading small{color:var(--hz-muted);margin-top:8px}.hz-failure{text-align:center;padding:30px}.hz-failure>span{color:var(--hz-red-700);font-size:12px;font-weight:800}.hz-failure h1{font-family:var(--hz-title);margin:12px 0 4px}.hz-failure p{color:var(--hz-muted)}.hz-failure button{background:var(--hz-navy-800);color:#fff;cursor:pointer;margin-top:16px;padding:11px 20px}@media (width<=1060px){.hz-header__inner{gap:16px}.hz-nav button{padding-inline:10px;font-size:13px}.hz-nav button:after{left:10px;right:10px}.hz-hero__grid{grid-template-columns:1fr 370px;gap:36px}.hz-hero__content h1{font-size:46px}.hz-service-grid{grid-template-columns:repeat(2,1fr)}.hz-service-grid>button:nth-child(2){border-right:0}.hz-service-grid>button:nth-child(-n+2){border-bottom:1px solid var(--hz-line)}.hz-records-grid{gap:28px}.hz-exam-grid{grid-template-columns:repeat(2,1fr)}.hz-footer__main{grid-template-columns:1fr 1.4fr}.hz-footer__links{display:none}}@media (width<=820px){.hz-container{width:min(100% - 32px,700px)}.hz-service-bar__inner>div span{display:none}.hz-header__inner{grid-template-columns:1fr auto;min-height:70px}.hz-brand__seal{flex-basis:39px;width:39px;height:39px;font-size:21px}.hz-brand__copy strong{font-size:17px}.hz-brand__copy small{display:none}.hz-menu{display:flex}.hz-nav{border-bottom:1px solid var(--hz-line);background:#fff;flex-direction:column;align-items:stretch;padding:10px 16px 16px;display:none;position:absolute;top:70px;left:0;right:0;box-shadow:0 16px 28px #0a23401a}.hz-nav.is-open{display:flex}.hz-nav button{text-align:left;min-height:45px}.hz-nav button:after{display:none}.hz-hero__grid{grid-template-columns:1fr;padding:55px 0 62px}.hz-hero__content h1{max-width:650px;font-size:clamp(39px,8vw,54px)}.hz-exam-docket{max-width:560px}.hz-records-grid{grid-template-columns:1fr}.hz-operation-board{max-width:none}.hz-guide .hz-container{grid-template-columns:1fr;gap:38px}.hz-footer__main{grid-template-columns:1fr;gap:24px;padding-block:42px}.hz-footer dl{border-top:1px solid var(--hz-line);border-left:0;padding:22px 0 0}}@media (width<=580px){.hz-container{width:calc(100% - 28px)}.hz-service-bar__inner{justify-content:center}.hz-service-bar__inner>div{display:none}.hz-account-link{text-overflow:ellipsis;white-space:nowrap;max-width:132px;overflow:hidden}.hz-exit-link{display:none}.hz-latest{grid-template-columns:auto 1fr auto;gap:10px;padding-right:12px}.hz-latest time{display:none}.hz-latest>span{padding-inline:10px}.hz-hero__grid{padding-top:46px}.hz-hero__content h1{font-size:38px;line-height:1.35}.hz-hero__lead{font-size:14px}.hz-hero__actions{flex-direction:column;align-items:stretch}.hz-trust-list{flex-direction:column;align-items:flex-start}.hz-exam-docket__body{padding:25px 22px}.hz-exam-docket>footer{padding-inline:22px}.hz-section-heading{flex-direction:column;align-items:flex-start}.hz-section-heading>span{text-align:left}.hz-service-grid{grid-template-columns:1fr}.hz-service-grid>button{border-right:0;border-bottom:1px solid var(--hz-line);min-height:170px}.hz-service-grid>button:last-child{border-bottom:0}.hz-records-grid{gap:38px}.hz-featured-notice{padding:25px 22px}.hz-featured-notice h3{font-size:20px}.hz-notice-list>button{grid-template-columns:52px 1fr auto;gap:10px}.hz-exam-grid{grid-template-columns:1fr}.hz-exam-card{min-height:360px}.hz-guide ol{grid-template-columns:1fr}.hz-guide__intro h2{font-size:27px}.hz-footer__legal .hz-container{flex-direction:column;gap:2px;padding-block:10px}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}} +/*$vite$:1*/ \ No newline at end of file diff --git a/src/Eis.Web/wwwroot/vue-app/app.js b/src/Eis.Web/wwwroot/vue-app/app.js new file mode 100644 index 0000000..54649b2 --- /dev/null +++ b/src/Eis.Web/wwwroot/vue-app/app.js @@ -0,0 +1,6 @@ +function e(e){let t=Object.create(null);for(let n of e.split(`,`))t[n]=1;return e=>e in t}var t={},n=[],r=()=>{},i=()=>!1,a=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),o=e=>e.startsWith(`onUpdate:`),s=Object.assign,c=(e,t)=>{let n=e.indexOf(t);n>-1&&e.splice(n,1)},l=Object.prototype.hasOwnProperty,u=(e,t)=>l.call(e,t),d=Array.isArray,f=e=>x(e)===`[object Map]`,p=e=>x(e)===`[object Set]`,m=e=>x(e)===`[object Date]`,h=e=>typeof e==`function`,g=e=>typeof e==`string`,_=e=>typeof e==`symbol`,v=e=>typeof e==`object`&&!!e,y=e=>(v(e)||h(e))&&h(e.then)&&h(e.catch),b=Object.prototype.toString,x=e=>b.call(e),S=e=>x(e).slice(8,-1),C=e=>x(e)===`[object Object]`,w=e=>g(e)&&e!==`NaN`&&e[0]!==`-`&&``+parseInt(e,10)===e,ee=e(`,key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted`),te=e=>{let t=Object.create(null);return(n=>t[n]||(t[n]=e(n)))},ne=/-\w/g,T=te(e=>e.replace(ne,e=>e.slice(1).toUpperCase())),re=/\B([A-Z])/g,E=te(e=>e.replace(re,`-$1`).toLowerCase()),ie=te(e=>e.charAt(0).toUpperCase()+e.slice(1)),ae=te(e=>e?`on${ie(e)}`:``),D=(e,t)=>!Object.is(e,t),oe=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:r,value:n})},se=e=>{let t=parseFloat(e);return isNaN(t)?e:t},ce,le=()=>ce||=typeof globalThis<`u`?globalThis:typeof self<`u`?self:typeof window<`u`?window:typeof global<`u`?global:{};function ue(e){if(d(e)){let t={};for(let n=0;n{if(e){let n=e.split(fe);n.length>1&&(t[n[0].trim()]=n[1].trim())}}),t}function k(e){let t=``;if(g(e))t=e;else if(d(e))for(let n=0;n!!(e&&e.__v_isRef===!0),A=e=>g(e)?e:e==null?``:d(e)||v(e)&&(e.toString===b||!h(e.toString))?be(e)?A(e.value):JSON.stringify(e,xe,2):String(e),xe=(e,t)=>be(t)?xe(e,t.value):f(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((e,[t,n],r)=>(e[Se(t,r)+` =>`]=n,e),{})}:p(t)?{[`Set(${t.size})`]:[...t.values()].map(e=>Se(e))}:_(t)?Se(t):v(t)&&!d(t)&&!C(t)?String(t):t,Se=(e,t=``)=>_(e)?`Symbol(${e.description??t})`:e,j,Ce=class{constructor(e=!1){this.detached=e,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this._warnOnRun=!0,this.__v_skip=!0,!e&&j&&(j.active?(this.parent=j,this.index=(j.scopes||=[]).push(this)-1):(this._active=!1,this._warnOnRun=!1))}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let e,t;if(this.scopes){let n=this.scopes.slice();for(e=0,t=n.length;e0&&--this._on===0){if(j===this)j=this.prevScope;else{let e=j;for(;e;){if(e.prevScope===this){e.prevScope=this.prevScope;break}e=e.prevScope}}this.prevScope=void 0}}stop(e){if(this._active){this._active=!1;let t,n;for(t=0,n=this.effects.length;t0)return;if(ke){let e=ke;for(ke=void 0;e;){let t=e.next;e.next=void 0,e.flags&=-9,e=t}}let e;for(;Oe;){let t=Oe;for(Oe=void 0;t;){let n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(t){e||=t}t=n}}if(e)throw e}function Ne(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Pe(e){let t,n=e.depsTail,r=n;for(;r;){let e=r.prevDep;r.version===-1?(r===n&&(n=e),Le(r),Re(r)):t=r,r.dep.activeLink=r.prevActiveLink,r.prevActiveLink=void 0,r=e}e.deps=t,e.depsTail=n}function Fe(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Ie(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Ie(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Ue)||(e.globalVersion=Ue,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Fe(e))))return;e.flags|=2;let t=e.dep,n=M,r=N;M=e,N=!0;try{Ne(e);let n=e.fn(e._value);(t.version===0||D(n,e._value))&&(e.flags|=128,e._value=n,t.version++)}catch(e){throw t.version++,e}finally{M=n,N=r,Pe(e),e.flags&=-3}}function Le(e,t=!1){let{dep:n,prevSub:r,nextSub:i}=e;if(r&&(r.nextSub=i,e.prevSub=void 0),i&&(i.prevSub=r,e.nextSub=void 0),n.subs===e&&(n.subs=r,!r&&n.computed)){n.computed.flags&=-5;for(let e=n.computed.deps;e;e=e.nextDep)Le(e,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function Re(e){let{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}var N=!0,ze=[];function Be(){ze.push(N),N=!1}function Ve(){let e=ze.pop();N=e===void 0||e}function He(e){let{cleanup:t}=e;if(e.cleanup=void 0,t){let e=M;M=void 0;try{t()}finally{M=e}}}var Ue=0,We=class{constructor(e,t){this.sub=e,this.dep=t,this.version=t.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}},Ge=class{constructor(e){this.computed=e,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(e){if(!M||!N||M===this.computed)return;let t=this.activeLink;if(t===void 0||t.sub!==M)t=this.activeLink=new We(M,this),M.deps?(t.prevDep=M.depsTail,M.depsTail.nextDep=t,M.depsTail=t):M.deps=M.depsTail=t,Ke(t);else if(t.version===-1&&(t.version=this.version,t.nextDep)){let e=t.nextDep;e.prevDep=t.prevDep,t.prevDep&&(t.prevDep.nextDep=e),t.prevDep=M.depsTail,t.nextDep=void 0,M.depsTail.nextDep=t,M.depsTail=t,M.deps===t&&(M.deps=e)}return t}trigger(e){this.version++,Ue++,this.notify(e)}notify(e){je();try{for(let e=this.subs;e;e=e.prevSub)e.sub.notify()&&e.sub.dep.notify()}finally{Me()}}};function Ke(e){if(e.dep.sc++,e.sub.flags&4){let t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let e=t.deps;e;e=e.nextDep)Ke(e)}let n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}var qe=new WeakMap,Je=Symbol(``),Ye=Symbol(``),Xe=Symbol(``);function P(e,t,n){if(N&&M){let t=qe.get(e);t||qe.set(e,t=new Map);let r=t.get(n);r||(t.set(n,r=new Ge),r.map=t,r.key=n),r.track()}}function Ze(e,t,n,r,i,a){let o=qe.get(e);if(!o){Ue++;return}let s=e=>{e&&e.trigger()};if(je(),t===`clear`)o.forEach(s);else{let i=d(e),a=i&&w(n);if(i&&n===`length`){let e=Number(r);o.forEach((t,n)=>{(n===`length`||n===Xe||!_(n)&&n>=e)&&s(t)})}else switch((n!==void 0||o.has(void 0))&&s(o.get(n)),a&&s(o.get(Xe)),t){case`add`:i?a&&s(o.get(`length`)):(s(o.get(Je)),f(e)&&s(o.get(Ye)));break;case`delete`:i||(s(o.get(Je)),f(e)&&s(o.get(Ye)));break;case`set`:f(e)&&s(o.get(Je));break}}Me()}function Qe(e){let t=L(e);return t===e?t:(P(t,`iterate`,Xe),I(e)?t:t.map(R))}function $e(e){return P(e=L(e),`iterate`,Xe),e}function F(e,t){return Ft(e)?Rt(Pt(e)?R(t):t):R(t)}var et={__proto__:null,[Symbol.iterator](){return tt(this,Symbol.iterator,e=>F(this,e))},concat(...e){return Qe(this).concat(...e.map(e=>d(e)?Qe(e):e))},entries(){return tt(this,`entries`,e=>(e[1]=F(this,e[1]),e))},every(e,t){return rt(this,`every`,e,t,void 0,arguments)},filter(e,t){return rt(this,`filter`,e,t,e=>e.map(e=>F(this,e)),arguments)},find(e,t){return rt(this,`find`,e,t,e=>F(this,e),arguments)},findIndex(e,t){return rt(this,`findIndex`,e,t,void 0,arguments)},findLast(e,t){return rt(this,`findLast`,e,t,e=>F(this,e),arguments)},findLastIndex(e,t){return rt(this,`findLastIndex`,e,t,void 0,arguments)},forEach(e,t){return rt(this,`forEach`,e,t,void 0,arguments)},includes(...e){return at(this,`includes`,e)},indexOf(...e){return at(this,`indexOf`,e)},join(e){return Qe(this).join(e)},lastIndexOf(...e){return at(this,`lastIndexOf`,e)},map(e,t){return rt(this,`map`,e,t,void 0,arguments)},pop(){return ot(this,`pop`)},push(...e){return ot(this,`push`,e)},reduce(e,...t){return it(this,`reduce`,e,t)},reduceRight(e,...t){return it(this,`reduceRight`,e,t)},shift(){return ot(this,`shift`)},some(e,t){return rt(this,`some`,e,t,void 0,arguments)},splice(...e){return ot(this,`splice`,e)},toReversed(){return Qe(this).toReversed()},toSorted(e){return Qe(this).toSorted(e)},toSpliced(...e){return Qe(this).toSpliced(...e)},unshift(...e){return ot(this,`unshift`,e)},values(){return tt(this,`values`,e=>F(this,e))}};function tt(e,t,n){let r=$e(e),i=r[t]();return r!==e&&!I(e)&&(i._next=i.next,i.next=()=>{let e=i._next();return e.done||(e.value=n(e.value)),e}),i}var nt=Array.prototype;function rt(e,t,n,r,i,a){let o=$e(e),s=o!==e&&!I(e),c=o[t];if(c!==nt[t]){let t=c.apply(e,a);return s?R(t):t}let l=n;o!==e&&(s?l=function(t,r){return n.call(this,F(e,t),r,e)}:n.length>2&&(l=function(t,r){return n.call(this,t,r,e)}));let u=c.call(o,l,r);return s&&i?i(u):u}function it(e,t,n,r){let i=$e(e),a=i!==e&&!I(e),o=n,s=!1;i!==e&&(a?(s=r.length===0,o=function(t,r,i){return s&&(s=!1,t=F(e,t)),n.call(this,t,F(e,r),i,e)}):n.length>3&&(o=function(t,r,i){return n.call(this,t,r,i,e)}));let c=i[t](o,...r);return s?F(e,c):c}function at(e,t,n){let r=L(e);P(r,`iterate`,Xe);let i=r[t](...n);return(i===-1||i===!1)&&It(n[0])?(n[0]=L(n[0]),r[t](...n)):i}function ot(e,t,n=[]){Be(),je();let r=L(e)[t].apply(e,n);return Me(),Ve(),r}var st=e(`__proto__,__v_isRef,__isVue`),ct=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!==`arguments`&&e!==`caller`).map(e=>Symbol[e]).filter(_));function lt(e){_(e)||(e=String(e));let t=L(this);return P(t,`has`,e),t.hasOwnProperty(e)}var ut=class{constructor(e=!1,t=!1){this._isReadonly=e,this._isShallow=t}get(e,t,n){if(t===`__v_skip`)return e.__v_skip;let r=this._isReadonly,i=this._isShallow;if(t===`__v_isReactive`)return!r;if(t===`__v_isReadonly`)return r;if(t===`__v_isShallow`)return i;if(t===`__v_raw`)return n===(r?i?Ot:Dt:i?Et:Tt).get(e)||Object.getPrototypeOf(e)===Object.getPrototypeOf(n)?e:void 0;let a=d(e);if(!r){let e;if(a&&(e=et[t]))return e;if(t===`hasOwnProperty`)return lt}let o=Reflect.get(e,t,z(e)?e:n);if((_(t)?ct.has(t):st(t))||(r||P(e,`get`,t),i))return o;if(z(o)){let e=a&&w(t)?o:o.value;return r&&v(e)?Mt(e):e}return v(o)?r?Mt(o):At(o):o}},dt=class extends ut{constructor(e=!1){super(!1,e)}set(e,t,n,r){let i=e[t],a=d(e)&&w(t);if(!this._isShallow){let e=Ft(i);if(!I(n)&&!Ft(n)&&(i=L(i),n=L(n)),!a&&z(i)&&!z(n))return e||(i.value=n),!0}let o=a?Number(t)e,_t=e=>Reflect.getPrototypeOf(e);function vt(e,t,n){return function(...r){let i=this.__v_raw,a=L(i),o=f(a),c=e===`entries`||e===Symbol.iterator&&o,l=e===`keys`&&o,u=i[e](...r),d=n?gt:t?Rt:R;return!t&&P(a,`iterate`,l?Ye:Je),s(Object.create(u),{next(){let{value:e,done:t}=u.next();return t?{value:e,done:t}:{value:c?[d(e[0]),d(e[1])]:d(e),done:t}}})}}function yt(e){return function(...t){return e===`delete`?!1:e===`clear`?void 0:this}}function bt(e,t){let n={get(n){let r=this.__v_raw,i=L(r),a=L(n);e||(D(n,a)&&P(i,`get`,n),P(i,`get`,a));let{has:o}=_t(i),s=t?gt:e?Rt:R;if(o.call(i,n))return s(r.get(n));if(o.call(i,a))return s(r.get(a));r!==i&&r.get(n)},get size(){let t=this.__v_raw;return!e&&P(L(t),`iterate`,Je),t.size},has(t){let n=this.__v_raw,r=L(n),i=L(t);return e||(D(t,i)&&P(r,`has`,t),P(r,`has`,i)),t===i?n.has(t):n.has(t)||n.has(i)},forEach(n,r){let i=this,a=i.__v_raw,o=L(a),s=t?gt:e?Rt:R;return!e&&P(o,`iterate`,Je),a.forEach((e,t)=>n.call(r,s(e),s(t),i))}};return s(n,e?{add:yt(`add`),set:yt(`set`),delete:yt(`delete`),clear:yt(`clear`)}:{add(e){let n=L(this),r=_t(n),i=L(e),a=!t&&!I(e)&&!Ft(e)?i:e;return r.has.call(n,a)||D(e,a)&&r.has.call(n,e)||D(i,a)&&r.has.call(n,i)||(n.add(a),Ze(n,`add`,a,a)),this},set(e,n){!t&&!I(n)&&!Ft(n)&&(n=L(n));let r=L(this),{has:i,get:a}=_t(r),o=i.call(r,e);o||=(e=L(e),i.call(r,e));let s=a.call(r,e);return r.set(e,n),o?D(n,s)&&Ze(r,`set`,e,n,s):Ze(r,`add`,e,n),this},delete(e){let t=L(this),{has:n,get:r}=_t(t),i=n.call(t,e);i||=(e=L(e),n.call(t,e));let a=r?r.call(t,e):void 0,o=t.delete(e);return i&&Ze(t,`delete`,e,void 0,a),o},clear(){let e=L(this),t=e.size!==0,n=e.clear();return t&&Ze(e,`clear`,void 0,void 0,void 0),n}}),[`keys`,`values`,`entries`,Symbol.iterator].forEach(r=>{n[r]=vt(r,e,t)}),n}function xt(e,t){let n=bt(e,t);return(t,r,i)=>r===`__v_isReactive`?!e:r===`__v_isReadonly`?e:r===`__v_raw`?t:Reflect.get(u(n,r)&&r in t?n:t,r,i)}var St={get:xt(!1,!1)},Ct={get:xt(!1,!0)},wt={get:xt(!0,!1)},Tt=new WeakMap,Et=new WeakMap,Dt=new WeakMap,Ot=new WeakMap;function kt(e){switch(e){case`Object`:case`Array`:return 1;case`Map`:case`Set`:case`WeakMap`:case`WeakSet`:return 2;default:return 0}}function At(e){return Ft(e)?e:Nt(e,!1,pt,St,Tt)}function jt(e){return Nt(e,!1,ht,Ct,Et)}function Mt(e){return Nt(e,!0,mt,wt,Dt)}function Nt(e,t,n,r,i){if(!v(e)||e.__v_raw&&!(t&&e.__v_isReactive)||e.__v_skip||!Object.isExtensible(e))return e;let a=i.get(e);if(a)return a;let o=kt(S(e));if(o===0)return e;let s=new Proxy(e,o===2?r:n);return i.set(e,s),s}function Pt(e){return Ft(e)?Pt(e.__v_raw):!!(e&&e.__v_isReactive)}function Ft(e){return!!(e&&e.__v_isReadonly)}function I(e){return!!(e&&e.__v_isShallow)}function It(e){return e?!!e.__v_raw:!1}function L(e){let t=e&&e.__v_raw;return t?L(t):e}function Lt(e){return!u(e,`__v_skip`)&&Object.isExtensible(e)&&O(e,`__v_skip`,!0),e}var R=e=>v(e)?At(e):e,Rt=e=>v(e)?Mt(e):e;function z(e){return e?e.__v_isRef===!0:!1}function zt(e){return Bt(e,!1)}function Bt(e,t){return z(e)?e:new Vt(e,t)}var Vt=class{constructor(e,t){this.dep=new Ge,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=t?e:L(e),this._value=t?e:R(e),this.__v_isShallow=t}get value(){return this.dep.track(),this._value}set value(e){let t=this._rawValue,n=this.__v_isShallow||I(e)||Ft(e);e=n?e:L(e),D(e,t)&&(this._rawValue=e,this._value=n?e:R(e),this.dep.trigger())}};function B(e){return z(e)?e.value:e}var Ht={get:(e,t,n)=>t===`__v_raw`?e:B(Reflect.get(e,t,n)),set:(e,t,n,r)=>{let i=e[t];return z(i)&&!z(n)?(i.value=n,!0):Reflect.set(e,t,n,r)}};function Ut(e){return Pt(e)?e:new Proxy(e,Ht)}var Wt=class{constructor(e,t,n){this.fn=e,this.setter=t,this._value=void 0,this.dep=new Ge(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Ue-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!t,this.isSSR=n}notify(){if(this.flags|=16,!(this.flags&8)&&M!==this)return Ae(this,!0),!0}get value(){let e=this.dep.track();return Ie(this),e&&(e.version=this.dep.version),this._value}set value(e){this.setter&&this.setter(e)}};function Gt(e,t,n=!1){let r,i;return h(e)?r=e:(r=e.get,i=e.set),new Wt(r,i,n)}var Kt={},qt=new WeakMap,Jt=void 0;function Yt(e,t=!1,n=Jt){if(n){let t=qt.get(n);t||qt.set(n,t=[]),t.push(e)}}function Xt(e,n,i=t){let{immediate:a,deep:o,once:s,scheduler:l,augmentJob:u,call:f}=i,p=e=>o?e:I(e)||o===!1||o===0?Zt(e,1):Zt(e),m,g,_,v,y=!1,b=!1;if(z(e)?(g=()=>e.value,y=I(e)):Pt(e)?(g=()=>p(e),y=!0):d(e)?(b=!0,y=e.some(e=>Pt(e)||I(e)),g=()=>e.map(e=>{if(z(e))return e.value;if(Pt(e))return p(e);if(h(e))return f?f(e,2):e()})):g=h(e)?n?f?()=>f(e,2):e:()=>{if(_){Be();try{_()}finally{Ve()}}let t=Jt;Jt=m;try{return f?f(e,3,[v]):e(v)}finally{Jt=t}}:r,n&&o){let e=g,t=o===!0?1/0:o;g=()=>Zt(e(),t)}let x=we(),S=()=>{m.stop(),x&&x.active&&c(x.effects,m)};if(s&&n){let e=n;n=(...t)=>{let n=e(...t);return S(),n}}let C=b?Array(e.length).fill(Kt):Kt,w=e=>{if(!(!(m.flags&1)||!m.dirty&&!e))if(n){let t=m.run();if(e||o||y||(b?t.some((e,t)=>D(e,C[t])):D(t,C))){_&&_();let e=Jt;Jt=m;try{let e=[t,C===Kt?void 0:b&&C[0]===Kt?[]:C,v];C=t,f?f(n,3,e):n(...e)}finally{Jt=e}}}else m.run()};return u&&u(w),m=new Ee(g),m.scheduler=l?()=>l(w,!1):w,v=e=>Yt(e,!1,m),_=m.onStop=()=>{let e=qt.get(m);if(e){if(f)f(e,4);else for(let t of e)t();qt.delete(m)}},n?a?w(!0):C=m.run():l?l(w.bind(null,!0),!0):m.run(),S.pause=m.pause.bind(m),S.resume=m.resume.bind(m),S.stop=S,S}function Zt(e,t=1/0,n){if(t<=0||!v(e)||e.__v_skip||(n||=new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,z(e))Zt(e.value,t,n);else if(d(e))for(let r=0;r{Zt(e,t,n)});else if(C(e)){for(let r in e)Zt(e[r],t,n);for(let r of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,r)&&Zt(e[r],t,n)}return e}function Qt(e,t,n,r){try{return r?e(...r):e()}catch(e){$t(e,t,n)}}function V(e,t,n,r){if(h(e)){let i=Qt(e,t,n,r);return i&&y(i)&&i.catch(e=>{$t(e,t,n)}),i}if(d(e)){let i=[];for(let a=0;a>>1,i=H[r],a=mn(i);a=mn(n)?H.push(e):H.splice(cn(t),0,e),e.flags|=1,un()}}function un(){on||=an.then(hn)}function dn(e){d(e)?tn.push(...e):nn&&e.id===-1?nn.splice(rn+1,0,e):e.flags&1||(tn.push(e),e.flags|=1),un()}function fn(e,t,n=U+1){for(;nmn(e)-mn(t));if(tn.length=0,nn){nn.push(...e);return}for(nn=e,rn=0;rne.id==null?e.flags&2?-1:1/0:e.id;function hn(e){try{for(U=0;U{r._d&&bi(-1);let i=_n(t),a=_i.length,o;try{o=e(...n)}finally{for(let e=_i.length;e>a;e--)vi();_n(i),r._d&&bi(1)}return o};return r._n=!0,r._c=!0,r._d=!0,r}function yn(e,t,n,r){let i=e.dirs,a=t&&t.dirs;for(let o=0;o1)return n&&h(t)?t.call(r&&r.proxy):t}}var Sn=Symbol.for(`v-scx`),Cn=()=>xn(Sn);function wn(e,t,n){return Tn(e,t,n)}function Tn(e,n,i=t){let{immediate:a,deep:o,flush:c,once:l}=i,u=s({},i),d=n&&a||!n&&c!==`post`,f;if(Ji){if(c===`sync`){let e=Cn();f=e.__watcherHandles||=[]}else if(!d){let e=()=>{};return e.stop=r,e.resume=r,e.pause=r,e}}let p=Q;u.call=(e,t,n)=>V(e,p,t,n);let m=!1;c===`post`?u.scheduler=e=>{K(e,p&&p.suspense)}:c!==`sync`&&(m=!0,u.scheduler=(e,t)=>{t?e():ln(e)}),u.augmentJob=e=>{n&&(e.flags|=4),m&&(e.flags|=2,p&&(e.id=p.uid,e.i=p))};let h=Xt(e,n,u);return Ji&&(f?f.push(h):d&&h()),h}function En(e,t,n){let r=this.proxy,i=g(e)?e.includes(`.`)?Dn(r,e):()=>r[e]:e.bind(r,r),a;h(t)?a=t:(a=t.handler,n=t);let o=Gi(this),s=Tn(i,a.bind(r),n);return o(),s}function Dn(e,t){let n=t.split(`.`);return()=>{let t=e;for(let e=0;ee.__isTeleport,An=Symbol(`_leaveCb`);function jn(e,t){e.shapeFlag&6&&e.component?(e.transition=t,jn(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Mn(e){e.ids=[e.ids[0]+e.ids[2]+++`-`,0,0]}function Nn(e,t){let n;return!!((n=Object.getOwnPropertyDescriptor(e,t))&&!n.configurable)}var Pn=new WeakMap;function Fn(e,n,r,a,o=!1){if(d(e)){e.forEach((e,t)=>Fn(e,n&&(d(n)?n[t]:n),r,a,o));return}if(Ln(a)&&!o){a.shapeFlag&512&&a.type.__asyncResolved&&a.component.subTree.component&&Fn(e,n,r,a.component.subTree);return}let s=a.shapeFlag&4?ra(a.component):a.el,l=o?null:s,{i:f,r:p}=e,m=n&&n.r,_=f.refs===t?f.refs={}:f.refs,v=f.setupState,y=L(v),b=v===t?i:e=>!Nn(_,e)&&u(y,e),x=(e,t)=>!(t&&Nn(_,t));if(m!=null&&m!==p){if(In(n),g(m))_[m]=null,b(m)&&(v[m]=null);else if(z(m)){let e=n;x(m,e.k)&&(m.value=null),e.k&&(_[e.k]=null)}}if(h(p))Qt(p,f,12,[l,_]);else{let t=g(p),n=z(p);if(t||n){let i=()=>{if(e.f){let n=t?b(p)?v[p]:_[p]:x(p)||!e.k?p.value:_[e.k];if(o)d(n)&&c(n,s);else if(d(n))n.includes(s)||n.push(s);else if(t)_[p]=[s],b(p)&&(v[p]=_[p]);else{let t=[s];x(p,e.k)&&(p.value=t),e.k&&(_[e.k]=t)}}else t?(_[p]=l,b(p)&&(v[p]=l)):n&&(x(p,e.k)&&(p.value=l),e.k&&(_[e.k]=l))};if(l){let t=()=>{i(),Pn.delete(e)};t.id=-1,Pn.set(e,t),K(t,r)}else In(e),i()}}}function In(e){let t=Pn.get(e);t&&(t.flags|=8,Pn.delete(e))}le().requestIdleCallback,le().cancelIdleCallback;var Ln=e=>!!e.type.__asyncLoader,Rn=e=>e.type.__isKeepAlive;function zn(e,t){Vn(e,`a`,t)}function Bn(e,t){Vn(e,`da`,t)}function Vn(e,t,n=Q){let r=e.__wdc||=()=>{let t=n;for(;t;){if(t.isDeactivated)return;t=t.parent}return e()};if(Un(t,r,n),n){let e=n.parent;for(;e&&e.parent;)Rn(e.parent.vnode)&&Hn(r,t,n,e),e=e.parent}}function Hn(e,t,n,r){let i=Un(t,e,r,!0);Xn(()=>{c(r[t],i)},n)}function Un(e,t,n=Q,r=!1){if(n){let i=n[e]||(n[e]=[]),a=t.__weh||=(...r)=>{Be();let i=Gi(n),a=V(t,n,e,r);return i(),Ve(),a};return r?i.unshift(a):i.push(a),a}}var Wn=e=>(t,n=Q)=>{(!Ji||e===`sp`)&&Un(e,(...e)=>t(...e),n)},Gn=Wn(`bm`),Kn=Wn(`m`),qn=Wn(`bu`),Jn=Wn(`u`),Yn=Wn(`bum`),Xn=Wn(`um`),Zn=Wn(`sp`),Qn=Wn(`rtg`),$n=Wn(`rtc`);function er(e,t=Q){Un(`ec`,e,t)}var tr=Symbol.for(`v-ndc`);function nr(e,t,n,r){let i,a=n&&n[r],o=d(e);if(o||g(e)){let n=o&&Pt(e),r=!1,s=!1;n&&(r=!I(e),s=Ft(e),e=$e(e)),i=Array(e.length);for(let n=0,o=e.length;nt(e,n,void 0,a&&a[n]));else{let n=Object.keys(e);i=Array(n.length);for(let r=0,o=n.length;re?qi(e)?ra(e):rr(e.parent):null,ir=s(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>rr(e.parent),$root:e=>rr(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>pr(e),$forceUpdate:e=>e.f||=()=>{ln(e.update)},$nextTick:e=>e.n||=sn.bind(e.proxy),$watch:e=>En.bind(e)}),ar=(e,n)=>e!==t&&!e.__isScriptSetup&&u(e,n),or={get({_:e},n){if(n===`__v_skip`)return!0;let{ctx:r,setupState:i,data:a,props:o,accessCache:s,type:c,appContext:l}=e;if(n[0]!==`$`){let e=s[n];if(e!==void 0)switch(e){case 1:return i[n];case 2:return a[n];case 4:return r[n];case 3:return o[n]}else if(ar(i,n))return s[n]=1,i[n];else if(a!==t&&u(a,n))return s[n]=2,a[n];else if(u(o,n))return s[n]=3,o[n];else if(r!==t&&u(r,n))return s[n]=4,r[n];else cr&&(s[n]=0)}let d=ir[n],f,p;if(d)return n===`$attrs`&&P(e.attrs,`get`,``),d(e);if((f=c.__cssModules)&&(f=f[n]))return f;if(r!==t&&u(r,n))return s[n]=4,r[n];if(p=l.config.globalProperties,u(p,n))return p[n]},set({_:e},n,r){let{data:i,setupState:a,ctx:o}=e;return ar(a,n)?(a[n]=r,!0):i!==t&&u(i,n)?(i[n]=r,!0):u(e.props,n)||n[0]===`$`&&n.slice(1)in e?!1:(o[n]=r,!0)},has({_:{data:e,setupState:n,accessCache:r,ctx:i,appContext:a,props:o,type:s}},c){let l;return!!(r[c]||e!==t&&c[0]!==`$`&&u(e,c)||ar(n,c)||u(o,c)||u(i,c)||u(ir,c)||u(a.config.globalProperties,c)||(l=s.__cssModules)&&l[c])},defineProperty(e,t,n){return n.get==null?u(n,`value`)&&this.set(e,t,n.value,null):e._.accessCache[t]=0,Reflect.defineProperty(e,t,n)}};function sr(e){return d(e)?e.reduce((e,t)=>(e[t]=null,e),{}):e}var cr=!0;function lr(e){let t=pr(e),n=e.proxy,i=e.ctx;cr=!1,t.beforeCreate&&dr(t.beforeCreate,e,`bc`);let{data:a,computed:o,methods:s,watch:c,provide:l,inject:u,created:f,beforeMount:p,mounted:m,beforeUpdate:g,updated:_,activated:y,deactivated:b,beforeDestroy:x,beforeUnmount:S,destroyed:C,unmounted:w,render:ee,renderTracked:te,renderTriggered:ne,errorCaptured:T,serverPrefetch:re,expose:E,inheritAttrs:ie,components:ae,directives:D,filters:oe}=t;if(u&&ur(u,i,null),s)for(let e in s){let t=s[e];h(t)&&(i[e]=t.bind(n))}if(a){let t=a.call(n,n);v(t)&&(e.data=At(t))}if(cr=!0,o)for(let e in o){let t=o[e],a=$({get:h(t)?t.bind(n,n):h(t.get)?t.get.bind(n,n):r,set:!h(t)&&h(t.set)?t.set.bind(n):r});Object.defineProperty(i,e,{enumerable:!0,configurable:!0,get:()=>a.value,set:e=>a.value=e})}if(c)for(let e in c)fr(c[e],i,n,e);if(l){let e=h(l)?l.call(n):l;Reflect.ownKeys(e).forEach(t=>{bn(t,e[t])})}f&&dr(f,e,`c`);function O(e,t){d(t)?t.forEach(t=>e(t.bind(n))):t&&e(t.bind(n))}if(O(Gn,p),O(Kn,m),O(qn,g),O(Jn,_),O(zn,y),O(Bn,b),O(er,T),O($n,te),O(Qn,ne),O(Yn,S),O(Xn,w),O(Zn,re),d(E))if(E.length){let t=e.exposed||={};E.forEach(e=>{Object.defineProperty(t,e,{get:()=>n[e],set:t=>n[e]=t,enumerable:!0})})}else e.exposed||={};ee&&e.render===r&&(e.render=ee),ie!=null&&(e.inheritAttrs=ie),ae&&(e.components=ae),D&&(e.directives=D),re&&Mn(e)}function ur(e,t,n=r){d(e)&&(e=vr(e));for(let n in e){let r=e[n],i;i=v(r)?`default`in r?xn(r.from||n,r.default,!0):xn(r.from||n):xn(r),z(i)?Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:()=>i.value,set:e=>i.value=e}):t[n]=i}}function dr(e,t,n){V(d(e)?e.map(e=>e.bind(t.proxy)):e.bind(t.proxy),t,n)}function fr(e,t,n,r){let i=r.includes(`.`)?Dn(n,r):()=>n[r];if(g(e)){let n=t[e];h(n)&&wn(i,n)}else if(h(e))wn(i,e.bind(n));else if(v(e))if(d(e))e.forEach(e=>fr(e,t,n,r));else{let r=h(e.handler)?e.handler.bind(n):t[e.handler];h(r)&&wn(i,r,e)}}function pr(e){let t=e.type,{mixins:n,extends:r}=t,{mixins:i,optionsCache:a,config:{optionMergeStrategies:o}}=e.appContext,s=a.get(t),c;return s?c=s:!i.length&&!n&&!r?c=t:(c={},i.length&&i.forEach(e=>mr(c,e,o,!0)),mr(c,t,o)),v(t)&&a.set(t,c),c}function mr(e,t,n,r=!1){let{mixins:i,extends:a}=t;a&&mr(e,a,n,!0),i&&i.forEach(t=>mr(e,t,n,!0));for(let i in t)if(!(r&&i===`expose`)){let r=hr[i]||n&&n[i];e[i]=r?r(e[i],t[i]):t[i]}return e}var hr={data:gr,props:br,emits:br,methods:yr,computed:yr,beforeCreate:G,created:G,beforeMount:G,mounted:G,beforeUpdate:G,updated:G,beforeDestroy:G,beforeUnmount:G,destroyed:G,unmounted:G,activated:G,deactivated:G,errorCaptured:G,serverPrefetch:G,components:yr,directives:yr,watch:xr,provide:gr,inject:_r};function gr(e,t){return t?e?function(){return s(h(e)?e.call(this,this):e,h(t)?t.call(this,this):t)}:t:e}function _r(e,t){return yr(vr(e),vr(t))}function vr(e){if(d(e)){let t={};for(let n=0;nt===`modelValue`||t===`model-value`?e.modelModifiers:e[`${t}Modifiers`]||e[`${T(t)}Modifiers`]||e[`${E(t)}Modifiers`];function Dr(e,n,...r){if(e.isUnmounted)return;let i=e.vnode.props||t,a=r,o=n.startsWith(`update:`),s=o&&Er(i,n.slice(7));s&&(s.trim&&(a=r.map(e=>g(e)?e.trim():e)),s.number&&(a=r.map(se)));let c,l=i[c=ae(n)]||i[c=ae(T(n))];!l&&o&&(l=i[c=ae(E(n))]),l&&V(l,e,6,a);let u=i[c+`Once`];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[c])return;e.emitted[c]=!0,V(u,e,6,a)}}var Or=new WeakMap;function kr(e,t,n=!1){let r=n?Or:t.emitsCache,i=r.get(e);if(i!==void 0)return i;let a=e.emits,o={},c=!1;if(!h(e)){let r=e=>{let n=kr(e,t,!0);n&&(c=!0,s(o,n))};!n&&t.mixins.length&&t.mixins.forEach(r),e.extends&&r(e.extends),e.mixins&&e.mixins.forEach(r)}return!a&&!c?(v(e)&&r.set(e,null),null):(d(a)?a.forEach(e=>o[e]=null):s(o,a),v(e)&&r.set(e,o),o)}function Ar(e,t){return!e||!a(t)?!1:(t=t.slice(2),t=t===`Once`?t:t.replace(/Once$/,``),u(e,t[0].toLowerCase()+t.slice(1))||u(e,E(t))||u(e,t))}function jr(e){let{type:t,vnode:n,proxy:r,withProxy:i,propsOptions:[a],slots:s,attrs:c,emit:l,render:u,renderCache:d,props:f,data:p,setupState:m,ctx:h,inheritAttrs:g}=e,_=_n(e),v,y;try{if(n.shapeFlag&4){let e=i||r,t=e;v=Pi(u.call(t,e,d,f,m,p,h)),y=c}else{let e=t;v=Pi(e.length>1?e(f,{attrs:c,slots:s,emit:l}):e(f,null)),y=t.props?c:Mr(c)}}catch(t){_i.length=0,$t(t,e,1),v=Di(hi)}let b=v;if(y&&g!==!1){let e=Object.keys(y),{shapeFlag:t}=b;e.length&&t&7&&(a&&e.some(o)&&(y=Nr(y,a)),b=Ai(b,y,!1,!0))}return n.dirs&&(b=Ai(b,null,!1,!0),b.dirs=b.dirs?b.dirs.concat(n.dirs):n.dirs),n.transition&&jn(b,n.transition),v=b,_n(_),v}var Mr=e=>{let t;for(let n in e)(n===`class`||n===`style`||a(n))&&((t||={})[n]=e[n]);return t},Nr=(e,t)=>{let n={};for(let r in e)(!o(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function Pr(e,t,n){let{props:r,children:i,component:a}=e,{props:o,children:s,patchFlag:c}=t,l=a.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return r?Fr(r,o,l):!!o;if(c&8){let e=t.dynamicProps;for(let t=0;tObject.create(Rr),Br=e=>Object.getPrototypeOf(e)===Rr;function Vr(e,t,n,r=!1){let i={},a=zr();e.propsDefaults=Object.create(null),Ur(e,t,i,a);for(let t in e.propsOptions[0])t in i||(i[t]=void 0);n?e.props=r?i:jt(i):e.type.props?e.props=i:e.props=a,e.attrs=a}function Hr(e,t,n,r){let{props:i,attrs:a,vnode:{patchFlag:o}}=e,s=L(i),[c]=e.propsOptions,l=!1;if((r||o>0)&&!(o&16)){if(o&8){let n=e.vnode.dynamicProps;for(let r=0;r{p=!0;let[t,n]=Kr(e,r,!0);s(l,t),n&&f.push(...n)};!i&&r.mixins.length&&r.mixins.forEach(t),e.extends&&t(e.extends),e.mixins&&e.mixins.forEach(t)}if(!c&&!p)return v(e)&&a.set(e,n),n;if(d(c))for(let e=0;ee===`_`||e===`_ctx`||e===`$stable`,Yr=e=>d(e)?e.map(Pi):[Pi(e)],Xr=(e,t,n)=>{if(t._n)return t;let r=vn((...e)=>Yr(t(...e)),n);return r._c=!1,r},Zr=(e,t,n)=>{let r=e._ctx;for(let n in e){if(Jr(n))continue;let i=e[n];if(h(i))t[n]=Xr(n,i,r);else if(i!=null){let e=Yr(i);t[n]=()=>e}}},Qr=(e,t)=>{let n=Yr(t);e.slots.default=()=>n},$r=(e,t,n)=>{for(let r in t)(n||!Jr(r))&&(e[r]=t[r])},ei=(e,t,n)=>{let r=e.slots=zr();if(e.vnode.shapeFlag&32){let e=t._;e?($r(r,t,n),n&&O(r,`_`,e,!0)):Zr(t,r)}else t&&Qr(e,t)},ti=(e,n,r)=>{let{vnode:i,slots:a}=e,o=!0,s=t;if(i.shapeFlag&32){let e=n._;e?r&&e===1?o=!1:$r(a,n,r):(o=!n.$stable,Zr(n,a)),s=n}else n&&(Qr(e,n),s={default:1});if(o)for(let e in a)!Jr(e)&&s[e]==null&&delete a[e]},K=pi;function ni(e){return ri(e)}function ri(e,i){let a=le();a.__VUE__=!0;let{insert:o,remove:s,patchProp:c,createElement:l,createText:u,createComment:d,setText:f,setElementText:p,parentNode:m,nextSibling:h,setScopeId:g=r,insertStaticContent:_}=e,v=(e,t,n,r=null,i=null,a=null,o=void 0,s=null,c=!!t.dynamicChildren)=>{if(e===t)return;e&&!wi(e,t)&&(r=ye(e),k(e,i,a,!0),e=null),t.patchFlag===-2&&(c=!1,t.dynamicChildren=null);let{type:l,ref:u,shapeFlag:d}=t;switch(l){case mi:y(e,t,n,r);break;case hi:b(e,t,n,r);break;case gi:e??x(t,n,r,o);break;case q:ae(e,t,n,r,i,a,o,s,c);break;default:d&1?w(e,t,n,r,i,a,o,s,c):d&6?D(e,t,n,r,i,a,o,s,c):(d&64||d&128)&&l.process(e,t,n,r,i,a,o,s,c,xe)}u!=null&&i?Fn(u,e&&e.ref,a,t||e,!t):u==null&&e&&e.ref!=null&&Fn(e.ref,null,a,e,!0)},y=(e,t,n,r)=>{if(e==null)o(t.el=u(t.children),n,r);else{let n=t.el=e.el;t.children!==e.children&&f(n,t.children)}},b=(e,t,n,r)=>{e==null?o(t.el=d(t.children||``),n,r):t.el=e.el},x=(e,t,n,r)=>{[e.el,e.anchor]=_(e.children,t,n,r,e.el,e.anchor)},S=({el:e,anchor:t},n,r)=>{let i;for(;e&&e!==t;)i=h(e),o(e,n,r),e=i;o(t,n,r)},C=({el:e,anchor:t})=>{let n;for(;e&&e!==t;)n=h(e),s(e),e=n;s(t)},w=(e,t,n,r,i,a,o,s,c)=>{if(t.type===`svg`?o=`svg`:t.type===`math`&&(o=`mathml`),e==null)te(t,n,r,i,a,o,s,c);else{let n=e.el&&e.el._isVueCE?e.el:null;try{n&&n._beginPatch(),re(e,t,i,a,o,s,c)}finally{n&&n._endPatch()}}},te=(e,t,n,r,i,a,s,u)=>{let d,f,{props:m,shapeFlag:h,transition:g,dirs:_}=e;if(d=e.el=l(e.type,a,m&&m.is,m),h&8?p(d,e.children):h&16&&T(e.children,d,null,r,i,ii(e,a),s,u),_&&yn(e,null,r,`created`),ne(d,e,e.scopeId,s,r),m){for(let e in m)e!==`value`&&!ee(e)&&c(d,e,null,m[e],a,r);`value`in m&&c(d,`value`,null,m.value,a),(f=m.onVnodeBeforeMount)&&Ri(f,r,e)}_&&yn(e,null,r,`beforeMount`);let v=oi(i,g);v&&g.beforeEnter(d),o(d,t,n),((f=m&&m.onVnodeMounted)||v||_)&&K(()=>{try{f&&Ri(f,r,e),v&&g.enter(d),_&&yn(e,null,r,`mounted`)}finally{}},i)},ne=(e,t,n,r,i)=>{if(n&&g(e,n),r)for(let t=0;t{for(let l=c;l{let l=n.el=e.el,{patchFlag:u,dynamicChildren:d,dirs:f}=n;u|=e.patchFlag&16;let m=e.props||t,h=n.props||t,g;if(r&&ai(r,!1),(g=h.onVnodeBeforeUpdate)&&Ri(g,r,n,e),f&&yn(n,e,r,`beforeUpdate`),r&&ai(r,!0),d&&(!e.dynamicChildren||e.dynamicChildren.length!==d.length)&&(u=0,s=!1,d=null),(m.innerHTML&&h.innerHTML==null||m.textContent&&h.textContent==null)&&p(l,``),d?E(e.dynamicChildren,d,l,r,i,ii(n,a),o):s||de(e,n,l,null,r,i,ii(n,a),o,!1),u>0){if(u&16)ie(l,m,h,r,a);else if(u&2&&m.class!==h.class&&c(l,`class`,null,h.class,a),u&4&&c(l,`style`,m.style,h.style,a),u&8){let e=n.dynamicProps;for(let t=0;t{g&&Ri(g,r,n,e),f&&yn(n,e,r,`updated`)},i)},E=(e,t,n,r,i,a,o)=>{for(let s=0;s{if(n!==r){if(n!==t)for(let t in n)!ee(t)&&!(t in r)&&c(e,t,n[t],null,a,i);for(let t in r){if(ee(t))continue;let o=r[t],s=n[t];o!==s&&t!==`value`&&c(e,t,s,o,a,i)}`value`in r&&c(e,`value`,n.value,r.value,a)}},ae=(e,t,n,r,i,a,s,c,l)=>{let d=t.el=e?e.el:u(``),f=t.anchor=e?e.anchor:u(``),{patchFlag:p,dynamicChildren:m,slotScopeIds:h}=t;h&&(c=c?c.concat(h):h),e==null?(o(d,n,r),o(f,n,r),T(t.children||[],n,f,i,a,s,c,l)):p>0&&p&64&&m&&e.dynamicChildren&&e.dynamicChildren.length===m.length?(E(e.dynamicChildren,m,n,i,a,s,c),(t.key!=null||i&&t===i.subTree)&&si(e,t,!0)):de(e,t,n,f,i,a,s,c,l)},D=(e,t,n,r,i,a,o,s,c)=>{t.slotScopeIds=s,e==null?t.shapeFlag&512?i.ctx.activate(t,n,r,o,c):O(t,n,r,i,a,o,c):se(e,t,c)},O=(e,t,n,r,i,a,o)=>{let s=e.component=Vi(e,r,i);if(Rn(e)&&(s.ctx.renderer=xe),Yi(s,!1,o),s.asyncDep){if(i&&i.registerDep(s,ce,o),!e.el){let r=s.subTree=Di(hi);b(null,r,t,n),e.placeholder=r.el}}else ce(s,e,t,n,i,a,o)},se=(e,t,n)=>{let r=t.component=e.component;if(Pr(e,t,n))if(r.asyncDep&&!r.asyncResolved){ue(r,t,n);return}else r.next=t,r.update();else t.el=e.el,r.vnode=t},ce=(e,t,n,r,i,a,o)=>{let s=()=>{if(e.isMounted){let{next:t,bu:n,u:r,parent:s,vnode:c}=e;{let n=li(e);if(n){t&&(t.el=c.el,ue(e,t,o)),n.asyncDep.then(()=>{K(()=>{e.isUnmounted||l()},i)});return}}let u=t,d;ai(e,!1),t?(t.el=c.el,ue(e,t,o)):t=c,n&&oe(n),(d=t.props&&t.props.onVnodeBeforeUpdate)&&Ri(d,s,t,c),ai(e,!0);let f=jr(e),p=e.subTree;e.subTree=f,v(p,f,m(p.el),ye(p),e,i,a),t.el=f.el,u===null&&Lr(e,f.el),r&&K(r,i),(d=t.props&&t.props.onVnodeUpdated)&&K(()=>Ri(d,s,t,c),i)}else{let o,{el:s,props:c}=t,{bm:l,m:u,parent:d,root:f,type:p}=e,m=Ln(t);if(ai(e,!1),l&&oe(l),!m&&(o=c&&c.onVnodeBeforeMount)&&Ri(o,d,t),ai(e,!0),s&&j){let t=()=>{e.subTree=jr(e),j(s,e.subTree,e,i,null)};m&&p.__asyncHydrate?p.__asyncHydrate(s,e,t):t()}else{f.ce&&f.ce._hasShadowRoot()&&f.ce._injectChildStyle(p,e.parent?e.parent.type:void 0);let o=e.subTree=jr(e);v(null,o,n,r,e,i,a),t.el=o.el}if(u&&K(u,i),!m&&(o=c&&c.onVnodeMounted)){let e=t;K(()=>Ri(o,d,e),i)}(t.shapeFlag&256||d&&Ln(d.vnode)&&d.vnode.shapeFlag&256)&&e.a&&K(e.a,i),e.isMounted=!0,t=n=r=null}};e.scope.on();let c=e.effect=new Ee(s);e.scope.off();let l=e.update=c.run.bind(c),u=e.job=c.runIfDirty.bind(c);u.i=e,u.id=e.uid,c.scheduler=()=>ln(u),ai(e,!0),l()},ue=(e,t,n)=>{t.component=e;let r=e.vnode.props;e.vnode=t,e.next=null,Hr(e,t.props,r,n),ti(e,t.children,n),Be(),fn(e),Ve()},de=(e,t,n,r,i,a,o,s,c=!1)=>{let l=e&&e.children,u=e?e.shapeFlag:0,d=t.children,{patchFlag:f,shapeFlag:m}=t;if(f>0){if(f&128){pe(l,d,n,r,i,a,o,s,c);return}else if(f&256){fe(l,d,n,r,i,a,o,s,c);return}}m&8?(u&16&&ve(l,i,a),d!==l&&p(n,d)):u&16?m&16?pe(l,d,n,r,i,a,o,s,c):ve(l,i,a,!0):(u&8&&p(n,``),m&16&&T(d,n,r,i,a,o,s,c))},fe=(e,t,r,i,a,o,s,c,l)=>{e||=n,t||=n;let u=e.length,d=t.length,f=Math.min(u,d),p;for(p=0;pd?ve(e,a,o,!0,!1,f):T(t,r,i,a,o,s,c,l,f)},pe=(e,t,r,i,a,o,s,c,l)=>{let u=0,d=t.length,f=e.length-1,p=d-1;for(;u<=f&&u<=p;){let n=e[u],i=t[u]=l?Fi(t[u]):Pi(t[u]);if(wi(n,i))v(n,i,r,null,a,o,s,c,l);else break;u++}for(;u<=f&&u<=p;){let n=e[f],i=t[p]=l?Fi(t[p]):Pi(t[p]);if(wi(n,i))v(n,i,r,null,a,o,s,c,l);else break;f--,p--}if(u>f){if(u<=p){let e=p+1,n=ep)for(;u<=f;)k(e[u],a,o,!0),u++;else{let m=u,h=u,g=new Map;for(u=h;u<=p;u++){let e=t[u]=l?Fi(t[u]):Pi(t[u]);e.key!=null&&g.set(e.key,u)}let _,y=0,b=p-h+1,x=!1,S=0,C=Array(b);for(u=0;u=b){k(n,a,o,!0);continue}let i;if(n.key!=null)i=g.get(n.key);else for(_=h;_<=p;_++)if(C[_-h]===0&&wi(n,t[_])){i=_;break}i===void 0?k(n,a,o,!0):(C[i-h]=u+1,i>=S?S=i:x=!0,v(n,t[i],r,null,a,o,s,c,l),y++)}let w=x?ci(C):n;for(_=w.length-1,u=b-1;u>=0;u--){let e=h+u,n=t[e],f=t[e+1],p=e+1{let{el:a,type:c,transition:l,children:u,shapeFlag:d}=e;if(d&6){me(e.component.subTree,t,n,r);return}if(d&128){e.suspense.move(t,n,r);return}if(d&64){c.move(e,t,n,xe);return}if(c===q){o(a,t,n);for(let e=0;el.enter(a),i));else{let{leave:r,delayLeave:i,afterLeave:c}=l,u=()=>{e.ctx.isUnmounted?s(a):o(a,t,n)},d=()=>{let e=a._isLeaving||!!a[An];a._isLeaving&&a[An](!0),l.persisted&&!e?u():r(a,()=>{u(),c&&c()})};i?i(a,u,d):d()}else o(a,t,n)},k=(e,t,n,r=!1,i=!1)=>{let{type:a,props:o,ref:s,children:c,dynamicChildren:l,shapeFlag:u,patchFlag:d,dirs:f,cacheIndex:p,memo:m}=e;if(d===-2&&(i=!1),s!=null&&(Be(),Fn(s,null,n,e,!0),Ve()),p!=null&&(t.renderCache[p]=void 0),u&256){t.ctx.deactivate(e);return}let h=u&1&&f,g=!Ln(e),_;if(g&&(_=o&&o.onVnodeBeforeUnmount)&&Ri(_,t,e),u&6)_e(e.component,n,r);else{if(u&128){e.suspense.unmount(n,r);return}h&&yn(e,null,t,`beforeUnmount`),u&64?e.type.remove(e,t,n,xe,r):l&&!l.hasOnce&&(a!==q||d>0&&d&64)?ve(l,t,n,!1,!0):(a===q&&d&384||!i&&u&16)&&ve(c,t,n),r&&he(e)}let v=m!=null&&p==null;(g&&(_=o&&o.onVnodeUnmounted)||h||v)&&K(()=>{_&&Ri(_,t,e),h&&yn(e,null,t,`unmounted`),v&&(e.el=null)},n)},he=e=>{let{type:t,el:n,anchor:r,transition:i}=e;if(t===q){ge(n,r);return}if(t===gi){C(e);return}let a=()=>{s(n),i&&!i.persisted&&i.afterLeave&&i.afterLeave()};if(e.shapeFlag&1&&i&&!i.persisted){let{leave:t,delayLeave:r}=i,o=()=>t(n,a);r?r(e.el,a,o):o()}else a()},ge=(e,t)=>{let n;for(;e!==t;)n=h(e),s(e),e=n;s(t)},_e=(e,t,n)=>{let{bum:r,scope:i,job:a,subTree:o,um:s,m:c,a:l}=e;ui(c),ui(l),r&&oe(r),i.stop(),a&&(a.flags|=8,k(o,e,t,n)),s&&K(s,t),K(()=>{e.isUnmounted=!0},t)},ve=(e,t,n,r=!1,i=!1,a=0)=>{for(let o=a;o{if(e.shapeFlag&6)return ye(e.component.subTree);if(e.shapeFlag&128)return e.suspense.next();let t=h(e.anchor||e.el),n=t&&t[On];return n?h(n):t},be=!1,A=(e,t,n)=>{let r;e==null?t._vnode&&(k(t._vnode,null,null,!0),r=t._vnode.component):v(t._vnode||null,e,t,null,null,null,n),t._vnode=e,be||=(be=!0,fn(r),pn(),!1)},xe={p:v,um:k,m:me,r:he,mt:O,mc:T,pc:de,pbc:E,n:ye,o:e},Se,j;return i&&([Se,j]=i(xe)),{render:A,hydrate:Se,createApp:wr(A,Se)}}function ii({type:e,props:t},n){return n===`svg`&&e===`foreignObject`||n===`mathml`&&e===`annotation-xml`&&t&&t.encoding&&t.encoding.includes(`html`)?void 0:n}function ai({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function oi(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function si(e,t,n=!1){let r=e.children,i=t.children;if(d(r)&&d(i))for(let e=0;e>1,e[n[s]]0&&(t[r]=n[a-1]),n[a]=r)}}for(a=n.length,o=n[a-1];a-->0;)n[a]=o,o=t[o];return n}function li(e){let t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:li(t)}function ui(e){if(e)for(let t=0;te.__isSuspense;function pi(e,t){t&&t.pendingBranch?d(e)?t.effects.push(...e):t.effects.push(e):dn(e)}var q=Symbol.for(`v-fgt`),mi=Symbol.for(`v-txt`),hi=Symbol.for(`v-cmt`),gi=Symbol.for(`v-stc`),_i=[],J=null;function Y(e=!1){_i.push(J=e?null:[])}function vi(){_i.pop(),J=_i[_i.length-1]||null}var yi=1;function bi(e,t=!1){yi+=e,e<0&&J&&t&&(J.hasOnce=!0)}function xi(e){return e.dynamicChildren=yi>0?J||n:null,vi(),yi>0&&J&&J.push(e),e}function X(e,t,n,r,i,a){return xi(Z(e,t,n,r,i,a,!0))}function Si(e,t,n,r,i){return xi(Di(e,t,n,r,i,!0))}function Ci(e){return e?e.__v_isVNode===!0:!1}function wi(e,t){return e.type===t.type&&e.key===t.key}var Ti=({key:e})=>e??null,Ei=({ref:e,ref_key:t,ref_for:n})=>(typeof e==`number`&&(e=``+e),e==null?null:g(e)||z(e)||h(e)?{i:W,r:e,k:t,f:!!n}:e);function Z(e,t=null,n=null,r=0,i=null,a=e===q?0:1,o=!1,s=!1){let c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Ti(t),ref:t&&Ei(t),scopeId:gn,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:a,patchFlag:r,dynamicProps:i,dynamicChildren:null,appContext:null,ctx:W};return s?(Ii(c,n),a&128&&e.normalize(c)):n&&(c.shapeFlag|=g(n)?8:16),yi>0&&!o&&J&&(c.patchFlag>0||a&6)&&c.patchFlag!==32&&J.push(c),c}var Di=Oi;function Oi(e,t=null,n=null,r=0,i=null,a=!1){if((!e||e===tr)&&(e=hi),Ci(e)){let r=Ai(e,t,!0);return n&&Ii(r,n),yi>0&&!a&&J&&(r.shapeFlag&6?J[J.indexOf(e)]=r:J.push(r)),r.patchFlag=-2,r}if(ia(e)&&(e=e.__vccOpts),t){t=ki(t);let{class:e,style:n}=t;e&&!g(e)&&(t.class=k(e)),v(n)&&(It(n)&&!d(n)&&(n=s({},n)),t.style=ue(n))}let o=g(e)?1:fi(e)?128:kn(e)?64:v(e)?4:h(e)?2:0;return Z(e,t,n,r,i,o,a,!0)}function ki(e){return e?It(e)||Br(e)?s({},e):e:null}function Ai(e,t,n=!1,r=!1){let{props:i,ref:a,patchFlag:o,children:s,transition:c}=e,l=t?Li(i||{},t):i,u={__v_isVNode:!0,__v_skip:!0,type:e.type,props:l,key:l&&Ti(l),ref:t&&t.ref?n&&a?d(a)?a.concat(Ei(t)):[a,Ei(t)]:Ei(t):a,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:s,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==q?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Ai(e.ssContent),ssFallback:e.ssFallback&&Ai(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&r&&jn(u,c.clone(u)),u}function ji(e=` `,t=0){return Di(mi,null,e,t)}function Mi(e,t){let n=Di(gi,null,e);return n.staticCount=t,n}function Ni(e=``,t=!1){return t?(Y(),Si(hi,null,e)):Di(hi,null,e)}function Pi(e){return e==null||typeof e==`boolean`?Di(hi):d(e)?Di(q,null,e.slice()):Ci(e)?Fi(e):Di(mi,null,String(e))}function Fi(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Ai(e)}function Ii(e,t){let n=0,{shapeFlag:r}=e;if(t==null)t=null;else if(d(t))n=16;else if(typeof t==`object`)if(r&65){let n=t.default;n&&(n._c&&(n._d=!1),Ii(e,n()),n._c&&(n._d=!0));return}else{n=32;let r=t._;!r&&!Br(t)?t._ctx=W:r===3&&W&&(W.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else if(h(t)){if(r&65){Ii(e,{default:t});return}t={default:t,_ctx:W},n=32}else t=String(t),r&64?(n=16,t=[ji(t)]):n=8;e.children=t,e.shapeFlag|=n}function Li(...e){let t={};for(let n=0;nQ||W,Ui,Wi;{let e=le(),t=(t,n)=>{let r;return(r=e[t])||(r=e[t]=[]),r.push(n),e=>{r.length>1?r.forEach(t=>t(e)):r[0](e)}};Ui=t(`__VUE_INSTANCE_SETTERS__`,e=>Q=e),Wi=t(`__VUE_SSR_SETTERS__`,e=>Ji=e)}var Gi=e=>{let t=Q;return Ui(e),e.scope.on(),()=>{e.scope.off(),Ui(t)}},Ki=()=>{Q&&Q.scope.off(),Ui(null)};function qi(e){return e.vnode.shapeFlag&4}var Ji=!1;function Yi(e,t=!1,n=!1){t&&Wi(t);let{props:r,children:i}=e.vnode,a=qi(e);Vr(e,r,a,t),ei(e,i,n||t);let o=a?Xi(e,t):void 0;return t&&Wi(!1),o}function Xi(e,t){let n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,or);let{setup:r}=n;if(r){Be();let n=e.setupContext=r.length>1?na(e):null,i=Gi(e),a=Qt(r,e,0,[e.props,n]),o=y(a);if(Ve(),i(),(o||e.sp)&&!Ln(e)&&Mn(e),o){if(a.then(Ki,Ki),t)return a.then(n=>{Zi(e,n,t)}).catch(t=>{$t(t,e,0)});e.asyncDep=a}else Zi(e,a,t)}else ea(e,t)}function Zi(e,t,n){h(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:v(t)&&(e.setupState=Ut(t)),ea(e,n)}var Qi,$i;function ea(e,t,n){let i=e.type;if(!e.render){if(!t&&Qi&&!i.render){let t=i.template||pr(e).template;if(t){let{isCustomElement:n,compilerOptions:r}=e.appContext.config,{delimiters:a,compilerOptions:o}=i;i.render=Qi(t,s(s({isCustomElement:n,delimiters:a},r),o))}}e.render=i.render||r,$i&&$i(e)}{let t=Gi(e);Be();try{lr(e)}finally{Ve(),t()}}}var ta={get(e,t){return P(e,`get`,``),e[t]}};function na(e){return{attrs:new Proxy(e.attrs,ta),slots:e.slots,emit:e.emit,expose:t=>{e.exposed=t||{}}}}function ra(e){return e.exposed?e.exposeProxy||=new Proxy(Ut(Lt(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in ir)return ir[n](e)},has(e,t){return t in e||t in ir}}):e.proxy}function ia(e){return h(e)&&`__vccOpts`in e}var $=(e,t)=>Gt(e,t,Ji),aa=`3.5.40`,oa=void 0,sa=typeof window<`u`&&window.trustedTypes;if(sa)try{oa=sa.createPolicy(`vue`,{createHTML:e=>e})}catch{}var ca=oa?e=>oa.createHTML(e):e=>e,la=`http://www.w3.org/2000/svg`,ua=`http://www.w3.org/1998/Math/MathML`,da=typeof document<`u`?document:null,fa=da&&da.createElement(`template`),pa={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{let t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{let i=t===`svg`?da.createElementNS(la,e):t===`mathml`?da.createElementNS(ua,e):n?da.createElement(e,{is:n}):da.createElement(e);return e===`select`&&r&&r.multiple!=null&&i.setAttribute(`multiple`,r.multiple),i},createText:e=>da.createTextNode(e),createComment:e=>da.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>da.querySelector(e),setScopeId(e,t){e.setAttribute(t,``)},insertStaticContent(e,t,n,r,i,a){let o=n?n.previousSibling:t.lastChild;if(i&&(i===a||i.nextSibling))for(;t.insertBefore(i.cloneNode(!0),n),!(i===a||!(i=i.nextSibling)););else{fa.innerHTML=ca(r===`svg`?`${e}`:r===`mathml`?`${e}`:e);let i=fa.content;if(r===`svg`||r===`mathml`){let e=i.firstChild;for(;e.firstChild;)i.appendChild(e.firstChild);i.removeChild(e)}t.insertBefore(i,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},ma=Symbol(`_vtc`);function ha(e,t,n){let r=e[ma];r&&(t=(t?[t,...r]:[...r]).join(` `)),t==null?e.removeAttribute(`class`):n?e.setAttribute(`class`,t):e.className=t}var ga=Symbol(`_vod`),_a=Symbol(`_vsh`),va=Symbol(``),ya=/(?:^|;)\s*display\s*:/;function ba(e,t,n){let r=e.style,i=g(n),a=!1;if(n&&!i){if(t)if(g(t))for(let e of t.split(`;`)){let t=e.slice(0,e.indexOf(`:`)).trim();n[t]??Sa(r,t,``)}else for(let e in t)n[e]??Sa(r,e,``);for(let i in n){i===`display`&&(a=!0);let o=n[i];o==null?Sa(r,i,``):Ea(e,i,!g(t)&&t?t[i]:void 0,o)||Sa(r,i,o)}}else if(i){if(t!==n){let e=r[va];e&&(n+=`;`+e),r.cssText=n,a=ya.test(n)}}else t&&e.removeAttribute(`style`);ga in e&&(e[ga]=a?r.display:``,e[_a]&&(r.display=`none`))}var xa=/\s*!important$/;function Sa(e,t,n){if(d(n))n.forEach(n=>Sa(e,t,n));else if(n??=``,t.startsWith(`--`))e.setProperty(t,n);else{let r=Ta(e,t);xa.test(n)?e.setProperty(E(r),n.replace(xa,``),`important`):e[r]=n}}var Ca=[`Webkit`,`Moz`,`ms`],wa={};function Ta(e,t){let n=wa[t];if(n)return n;let r=T(t);if(r!==`filter`&&r in e)return wa[t]=r;r=ie(r);for(let n=0;nLa||=(Ra.then(()=>La=0),Date.now());function Ba(e,t){let n=e=>{if(!e._vts)e._vts=Date.now();else if(e._vts<=n.attached)return;let r=n.value;if(d(r)){let n=e.stopImmediatePropagation;e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0};let i=r.slice(),a=[e];for(let n=0;ne.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Ha=(e,t,n,r,i,s)=>{let c=i===`svg`;t===`class`?ha(e,r,c):t===`style`?ba(e,n,r):a(t)?o(t)||Na(e,t,n,r,s):(t[0]===`.`?(t=t.slice(1),!0):t[0]===`^`?(t=t.slice(1),!1):Ua(e,t,r,c))?(ka(e,t,r),!e.tagName.includes(`-`)&&(t===`value`||t===`checked`||t===`selected`)&&Oa(e,t,r,c,s,t!==`value`)):e._isVueCE&&(Wa(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!g(r)))?ka(e,T(t),r,s,t):(t===`true-value`?e._trueValue=r:t===`false-value`&&(e._falseValue=r),Oa(e,t,r,c))};function Ua(e,t,n,r){if(r)return!!(t===`innerHTML`||t===`textContent`||t in e&&Va(t)&&h(n));if(t===`spellcheck`||t===`draggable`||t===`translate`||t===`autocorrect`||t===`sandbox`&&e.tagName===`IFRAME`||t===`form`||t===`list`&&e.tagName===`INPUT`||t===`type`&&e.tagName===`TEXTAREA`)return!1;if(t===`width`||t===`height`){let t=e.tagName;if(t===`IMG`||t===`VIDEO`||t===`CANVAS`||t===`SOURCE`)return!1}return Va(t)&&g(n)?!1:t in e}function Wa(e,t){let n=e._def.props;if(!n)return!1;let r=T(t);return Array.isArray(n)?n.some(e=>T(e)===r):Object.keys(n).some(e=>T(e)===r)}var Ga=s({patchProp:Ha},pa),Ka;function qa(){return Ka||=ni(Ga)}var Ja=((...e)=>{let t=qa().createApp(...e),{mount:n}=t;return t.mount=e=>{let r=Xa(e);if(!r)return;let i=t._component;!h(i)&&!i.render&&!i.template&&(i.template=r.innerHTML),r.nodeType===1&&(r.textContent=``);let a=n(r,!1,Ya(r));return r instanceof Element&&(r.removeAttribute(`v-cloak`),r.setAttribute(`data-v-app`,``)),a},t});function Ya(e){if(e instanceof SVGElement)return`svg`;if(typeof MathMLElement==`function`&&e instanceof MathMLElement)return`mathml`}function Xa(e){return g(e)?document.querySelector(e):e}function Za(e,t=!1){if(!e)return`—`;let n=new Date(e);return Number.isNaN(n.getTime())?String(e):new Intl.DateTimeFormat(`zh-CN`,{year:`numeric`,month:`2-digit`,day:`2-digit`,...t?{hour:`2-digit`,minute:`2-digit`,hour12:!1}:{}}).format(n)}function Qa(e,t){if(!e&&!t)return`时间待发布`;let n=e?new Date(e):null,r=t?new Date(t):null;if(!n||Number.isNaN(n.getTime()))return Za(t);if(!r||Number.isNaN(r.getTime()))return Za(e);let i=e=>new Intl.DateTimeFormat(`zh-CN`,{year:`numeric`,month:`2-digit`,day:`2-digit`}).format(e);return`${i(n)} — ${i(r)}`}function $a(e){return{open:`报名开放`,upcoming:`即将开放`,closed:`报名结束`}[e]||`已发布`}function eo(e){return e?e.role===`candidate`?`candidate/dashboard`:e.role===`admission_school`?`admission_school/dashboard`:`admin/dashboard`:`login`}var to={class:`hz-site`},no={class:`hz-service-bar`},ro={class:`hz-container hz-service-bar__inner`},io={key:0},ao={class:`hz-header`},oo={class:`hz-container hz-header__inner`},so={class:`hz-header__actions`},co=[`aria-expanded`],lo={id:`hz-main`},uo={class:`hz-hero`},fo={class:`hz-container`},po={class:`hz-hero__grid`},mo={class:`hz-hero__content`},ho={class:`hz-hero__lead`},go={class:`hz-hero__actions`},_o={key:0,class:`hz-exam-docket`,"aria-label":`重点考试`},vo={class:`hz-exam-docket__body`},yo={class:`hz-subjects`},bo={key:0},xo={key:1,class:`hz-exam-docket hz-exam-docket--empty`},So={class:`hz-entry-section`,"aria-labelledby":`hz-entry-title`},Co={class:`hz-container`},wo={class:`hz-service-grid`},To={class:`hz-public-records`},Eo={class:`hz-container hz-records-grid`},Do={class:`hz-notices`},Oo={class:`hz-section-heading`},ko={key:0,class:`hz-featured-notice`},Ao={key:1,class:`hz-empty`},jo={class:`hz-notice-list`},Mo=[`onClick`],No={class:`hz-operation-board`,"aria-label":`平台运行概况`},Po={id:`hz-exams`,class:`hz-exams`},Fo={class:`hz-container`},Io={key:0,class:`hz-exam-grid`},Lo={key:1,class:`hz-empty hz-empty--large`},Ro={class:`hz-footer`},zo={class:`hz-container hz-footer__main`},Bo={key:0},Vo={key:1},Ho={class:`hz-footer__links`},Uo={class:`hz-footer__legal`},Wo={class:`hz-container`},Go={__name:`HomePage`,props:{publicData:{type:Object,required:!0},session:{type:Object,required:!0}},emits:[`logout`],setup(e,{emit:t}){let n=e,r=t,i=zt(!1),a=$(()=>n.publicData.notices||[]),o=$(()=>n.publicData.exams||[]),s=$(()=>n.publicData.stats||{}),c=$(()=>n.publicData.organization||{}),l=$(()=>n.publicData.siteCopy||{}),u=$(()=>n.session.user||null),d=$(()=>o.value.find(e=>e.registrationState===`open`)||o.value[0]||null),f=$(()=>a.value[0]||null),p=$(()=>u.value?u.value.role===`candidate`?`进入考生中心`:u.value.role===`admission_school`?`进入招生学校端`:`进入管理后台`:`登录`),m=$(()=>u.value?eo(u.value):n.publicData.selfRegistrationEnabled?`register`:`login`),h=$(()=>u.value?p.value:n.publicData.selfRegistrationEnabled?`申请固定报名号`:`使用报名号登录`);function g(e){i.value=!1,location.hash=e}function _(e){i.value=!1,document.querySelector(`#${e}`)?.scrollIntoView({behavior:`smooth`,block:`start`})}function v(){g(u.value?.role===`candidate`?`candidate/exams`:`login`)}function y(e){return new Intl.NumberFormat(`zh-CN`).format(Number(e||0))}return(e,t)=>(Y(),X(`div`,to,[t[66]||=Z(`a`,{class:`hz-skip`,href:`#hz-main`},`跳到主要内容`,-1),Z(`div`,no,[Z(`div`,ro,[t[23]||=Z(`p`,null,[Z(`span`,{"aria-hidden":`true`}),ji(`考试信息公共服务平台`)],-1),Z(`div`,null,[c.value.phone?(Y(),X(`span`,io,`咨询电话:`+A(c.value.phone),1)):Ni(``,!0),Z(`button`,{type:`button`,onClick:t[0]||=e=>g(`verify`)},`文书防伪查询`)])])]),Z(`header`,ao,[Z(`div`,oo,[Z(`button`,{class:`hz-brand`,type:`button`,"aria-label":`返回首页`,onClick:t[1]||=e=>g(`home`)},[...t[24]||=[Z(`span`,{class:`hz-brand__seal`,"aria-hidden":`true`},`衡`,-1),Z(`span`,{class:`hz-brand__copy`},[Z(`strong`,null,`衡准考试服务`),Z(`small`,null,`EXAMINATION INFORMATION SERVICE`)],-1)]]),Z(`nav`,{class:k([`hz-nav`,{"is-open":i.value}]),"aria-label":`主要导航`},[Z(`button`,{type:`button`,class:`is-current`,onClick:t[2]||=e=>g(`home`)},`首页`),Z(`button`,{type:`button`,onClick:t[3]||=e=>_(`hz-exams`)},`考试报名`),Z(`button`,{type:`button`,onClick:t[4]||=e=>g(`notices`)},`通知公告`),Z(`button`,{type:`button`,onClick:t[5]||=e=>g(`verify`)},`防伪查询`),Z(`button`,{type:`button`,onClick:t[6]||=e=>_(`hz-guide`)},`办事指南`)],2),Z(`div`,so,[Z(`button`,{class:`hz-account-link`,type:`button`,onClick:t[7]||=e=>g(B(eo)(u.value))},A(p.value),1),u.value?(Y(),X(`button`,{key:0,class:`hz-exit-link`,type:`button`,onClick:t[8]||=e=>r(`logout`)},`退出`)):Ni(``,!0),Z(`button`,{class:`hz-menu`,type:`button`,"aria-expanded":i.value,"aria-label":`打开导航`,onClick:t[9]||=e=>i.value=!i.value},[...t[25]||=[Z(`span`,null,null,-1),Z(`span`,null,null,-1),Z(`span`,null,null,-1)]],8,co)])])]),Z(`main`,lo,[Z(`section`,uo,[Z(`div`,fo,[f.value?(Y(),X(`button`,{key:0,class:`hz-latest`,type:`button`,onClick:t[10]||=e=>g(`notice/${f.value.id}`)},[t[26]||=Z(`span`,null,`最新发布`,-1),Z(`strong`,null,A(f.value.title),1),Z(`time`,null,A(B(Za)(f.value.publishAt)),1),t[27]||=Z(`i`,{"aria-hidden":`true`},`→`,-1)])):Ni(``,!0),Z(`div`,po,[Z(`div`,mo,[t[29]||=Z(`p`,{class:`hz-kicker`},`统一入口 · 规范办理 · 全程留痕`,-1),Z(`h1`,null,[ji(A(l.value.heroTitle||`让每一次考试办理,`)+` `,1),Z(`em`,null,A(l.value.heroHighlight||`都有清晰、可信的依据。`),1)]),Z(`p`,ho,A(l.value.heroDescription||`面向考生、学校和考试管理机构,统一提供报名、准考证、成绩、录取与公开信息服务。`),1),Z(`div`,go,[Z(`button`,{class:`hz-button hz-button--primary`,type:`button`,onClick:t[11]||=e=>g(m.value)},[ji(A(h.value),1),t[28]||=Z(`span`,{"aria-hidden":`true`},`→`,-1)]),Z(`button`,{class:`hz-button hz-button--secondary`,type:`button`,onClick:t[12]||=e=>_(`hz-exams`)},` 查看已发布考试 `)]),t[30]||=Z(`dl`,{class:`hz-trust-list`},[Z(`div`,null,[Z(`dt`,null,`账户原则`),Z(`dd`,null,`一个报名号长期使用`)]),Z(`div`,null,[Z(`dt`,null,`信息原则`),Z(`dd`,null,`以平台正式发布为准`)]),Z(`div`,null,[Z(`dt`,null,`安全原则`),Z(`dd`,null,`重要文书支持在线核验`)])],-1)]),d.value?(Y(),X(`aside`,_o,[Z(`header`,null,[Z(`div`,null,[t[31]||=Z(`span`,null,`重点考试`,-1),Z(`small`,null,A(d.value.code),1)]),Z(`em`,{class:k(`is-${d.value.registrationState}`)},A(B($a)(d.value.registrationState)),3)]),Z(`div`,vo,[t[35]||=Z(`p`,null,`EXAMINATION NOTICE`,-1),Z(`h2`,null,A(d.value.name),1),Z(`dl`,null,[Z(`div`,null,[t[32]||=Z(`dt`,null,`报名时间`,-1),Z(`dd`,null,A(B(Qa)(d.value.registrationStart,d.value.registrationEnd)),1)]),Z(`div`,null,[t[33]||=Z(`dt`,null,`考试时间`,-1),Z(`dd`,null,A(B(Qa)(d.value.examStart,d.value.examEnd)),1)]),Z(`div`,null,[t[34]||=Z(`dt`,null,`考试地点`,-1),Z(`dd`,null,A(d.value.location||`以准考证公布为准`),1)])]),Z(`div`,yo,[(Y(!0),X(q,null,nr(d.value.subjects?.slice(0,5),e=>(Y(),X(`span`,{key:e.id||e.name},A(e.name),1))),128)),d.value.subjects?.length>5?(Y(),X(`span`,bo,`+`+A(d.value.subjects.length-5),1)):Ni(``,!0)])]),Z(`footer`,null,[Z(`p`,null,[Z(`strong`,null,A(y(d.value.registrationCount)),1),t[36]||=Z(`span`,null,`人已报名`,-1)]),Z(`button`,{type:`button`,onClick:v},A(d.value.registrationState===`open`?`办理报名`:`查看考试`)+` →`,1)])])):(Y(),X(`aside`,xo,[...t[37]||=[Z(`span`,null,`考试发布栏`,-1),Z(`h2`,null,`当前暂无已发布考试`,-1),Z(`p`,null,`新考试发布后,将在此展示报名时间、考试安排和办理入口。`,-1)]]))])])]),Z(`section`,So,[Z(`div`,Co,[t[43]||=Z(`div`,{class:`hz-section-heading hz-section-heading--compact`},[Z(`div`,null,[Z(`p`,null,`ONLINE SERVICES`),Z(`h2`,{id:`hz-entry-title`},`常用服务`)]),Z(`span`,null,`按事项进入,减少查找和重复填写`)],-1),Z(`div`,wo,[Z(`button`,{type:`button`,onClick:t[13]||=e=>g(m.value)},[t[38]||=Z(`span`,{class:`hz-service-grid__index`},`01`,-1),Z(`strong`,null,A(u.value?`个人业务中心`:`报名号登录`),1),Z(`small`,null,A(u.value?`继续办理当前账户下的考试事项`:`使用固定报名号进入考生服务`),1),t[39]||=Z(`i`,null,`进入服务 →`,-1)]),Z(`button`,{type:`button`,onClick:t[14]||=e=>_(`hz-exams`)},[...t[40]||=[Z(`span`,{class:`hz-service-grid__index`},`02`,-1),Z(`strong`,null,`考试报名`,-1),Z(`small`,null,`查看开放考试、报名日期与科目安排`,-1),Z(`i`,null,`查看考试 →`,-1)]]),Z(`button`,{type:`button`,onClick:t[15]||=e=>g(u.value?.role===`candidate`?`candidate/results`:`login`)},[...t[41]||=[Z(`span`,{class:`hz-service-grid__index`},`03`,-1),Z(`strong`,null,`成绩与准考证`,-1),Z(`small`,null,`下载准考证,查询已正式发布的成绩`,-1),Z(`i`,null,`办理查询 →`,-1)]]),Z(`button`,{type:`button`,onClick:t[16]||=e=>g(`verify`)},[...t[42]||=[Z(`span`,{class:`hz-service-grid__index`},`04`,-1),Z(`strong`,null,`文书防伪核验`,-1),Z(`small`,null,`核对成绩单、录取通知书签发记录`,-1),Z(`i`,null,`立即核验 →`,-1)]])])])]),Z(`section`,To,[Z(`div`,Eo,[Z(`div`,Do,[Z(`div`,Oo,[t[44]||=Z(`div`,null,[Z(`p`,null,`PUBLIC INFORMATION`),Z(`h2`,null,`通知公告`)],-1),Z(`button`,{type:`button`,onClick:t[17]||=e=>g(`notices`)},`查看全部 →`)]),f.value?(Y(),X(`article`,ko,[Z(`div`,null,[Z(`span`,null,A(f.value.category||`通知公告`),1),Z(`time`,null,A(B(Za)(f.value.publishAt)),1)]),Z(`h3`,null,A(f.value.title),1),Z(`p`,null,A(f.value.summary||`请进入公告正文查看完整内容和办理要求。`),1),Z(`button`,{type:`button`,onClick:t[18]||=e=>g(`notice/${f.value.id}`)},[...t[45]||=[ji(`阅读全文 `,-1),Z(`span`,null,`→`,-1)]])])):(Y(),X(`div`,Ao,`当前暂无通知公告`)),Z(`div`,jo,[(Y(!0),X(q,null,nr(a.value.slice(1,5),e=>(Y(),X(`button`,{key:e.id,type:`button`,onClick:t=>g(`notice/${e.id}`)},[Z(`time`,null,[Z(`strong`,null,A(String(new Date(e.publishAt).getDate()).padStart(2,`0`)),1),Z(`span`,null,A(new Date(e.publishAt).toLocaleDateString(`zh-CN`,{year:`numeric`,month:`2-digit`}).replace(`/`,`.`)),1)]),Z(`span`,null,[Z(`em`,null,A(e.category||`通知`),1),Z(`strong`,null,A(e.title),1)]),t[46]||=Z(`i`,null,`→`,-1)],8,Mo))),128))])]),Z(`aside`,No,[t[55]||=Z(`header`,null,[Z(`span`,null,`服务概况`),Z(`small`,null,`数据随业务实时更新`)],-1),Z(`dl`,null,[Z(`div`,null,[t[48]||=Z(`dt`,null,`在册考生`,-1),Z(`dd`,null,[ji(A(y(s.value.candidates)),1),t[47]||=Z(`small`,null,`人`,-1)])]),Z(`div`,null,[t[50]||=Z(`dt`,null,`累计报名记录`,-1),Z(`dd`,null,[ji(A(y(s.value.registrations)),1),t[49]||=Z(`small`,null,`条`,-1)])]),Z(`div`,null,[t[52]||=Z(`dt`,null,`当前开放考试`,-1),Z(`dd`,null,[ji(A(y(s.value.exams)),1),t[51]||=Z(`small`,null,`项`,-1)])])]),Z(`section`,null,[t[53]||=Z(`strong`,null,`公开信息说明`,-1),t[54]||=Z(`p`,null,`考试安排、录取公示及其他重要事项,以平台通知公告栏目正式发布内容为准。`,-1),Z(`button`,{type:`button`,onClick:t[19]||=e=>g(`notices`)},`进入公开信息目录`)])])])]),Z(`section`,Po,[Z(`div`,Fo,[t[59]||=Z(`div`,{class:`hz-section-heading`},[Z(`div`,null,[Z(`p`,null,`EXAMINATIONS`),Z(`h2`,null,`已发布考试`)]),Z(`span`,null,`登录后按考试要求选择科目并提交报名`)],-1),o.value.length?(Y(),X(`div`,Io,[(Y(!0),X(q,null,nr(o.value,e=>(Y(),X(`article`,{key:e.id,class:`hz-exam-card`},[Z(`header`,null,[Z(`span`,null,A(e.code),1),Z(`em`,{class:k(`is-${e.registrationState}`)},A(B($a)(e.registrationState)),3)]),Z(`h3`,null,A(e.name),1),Z(`p`,null,A(e.description||`考试具体安排与报名要求请以正式通知为准。`),1),Z(`dl`,null,[Z(`div`,null,[t[56]||=Z(`dt`,null,`报名日期`,-1),Z(`dd`,null,A(B(Qa)(e.registrationStart,e.registrationEnd)),1)]),Z(`div`,null,[t[57]||=Z(`dt`,null,`考试日期`,-1),Z(`dd`,null,A(B(Qa)(e.examStart,e.examEnd)),1)]),Z(`div`,null,[t[58]||=Z(`dt`,null,`科目`,-1),Z(`dd`,null,A(e.subjects?.length||0)+` 科 · 总分 `+A(e.totalScore||0)+` 分`,1)])]),Z(`footer`,null,[Z(`span`,null,A(y(e.registrationCount))+` 人已报名`,1),Z(`button`,{type:`button`,onClick:v},A(e.registrationState===`open`?`选择科目报名`:`查看考试`)+` →`,1)])]))),128))])):(Y(),X(`div`,Lo,`当前没有已发布的考试,请留意通知公告。`))])]),t[60]||=Mi(`

办事指南

一个报名号,贯穿完整考试服务

报名号是考生的长期账户。每场考试新增报名记录,不重复创建个人账户。
  1. 1
    领取报名号

    由学校创建,或在开放自主注册时在线申请。

  2. 2
    完善个人资料

    首次登录修改密码,并按要求提交真实资料。

  3. 3
    选择考试科目

    资料审核通过后,在开放期内完成报名。

  4. 4
    办理后续事项

    使用同一报名号下载准考证、查分和查看录取。

`,1)]),Z(`footer`,Ro,[Z(`div`,zo,[t[64]||=Z(`div`,{class:`hz-footer__brand`},[Z(`span`,{class:`hz-brand__seal`,"aria-hidden":`true`},`衡`),Z(`div`,null,[Z(`strong`,null,`衡准考试服务`),Z(`small`,null,`规范 · 准确 · 可追溯`)])],-1),Z(`dl`,null,[Z(`div`,null,[t[61]||=Z(`dt`,null,`主管单位`,-1),Z(`dd`,null,A(c.value.name||`考试信息管理机构`),1)]),c.value.phone?(Y(),X(`div`,Bo,[t[62]||=Z(`dt`,null,`咨询电话`,-1),Z(`dd`,null,A(c.value.phone),1)])):Ni(``,!0),c.value.address?(Y(),X(`div`,Vo,[t[63]||=Z(`dt`,null,`联系地址`,-1),Z(`dd`,null,A(c.value.address),1)])):Ni(``,!0)]),Z(`div`,Ho,[Z(`button`,{type:`button`,onClick:t[20]||=e=>g(`notices`)},`通知公告`),Z(`button`,{type:`button`,onClick:t[21]||=e=>g(`verify`)},`文书核验`),Z(`button`,{type:`button`,onClick:t[22]||=e=>g(`login`)},`服务登录`)])]),Z(`div`,Uo,[Z(`div`,Wo,[Z(`span`,null,A(l.value.footerNotice||`公开信息以本平台正式发布内容为准`),1),t[65]||=Z(`span`,null,`请勿在非官方页面提交密码或验证码`,-1)])])])]))}},Ko=new Map;async function qo(e,t={}){let n=t.body instanceof ArrayBuffer||t.body instanceof Blob||t.body instanceof FormData,r=await fetch(e,{credentials:`same-origin`,headers:{...t.body&&!n?{"Content-Type":`application/json`}:{},...t.headers},...t,body:t.body&&typeof t.body!=`string`&&!n?JSON.stringify(t.body):t.body}),i=(r.headers.get(`content-type`)||``).includes(`application/json`)?await r.json():await r.text();if(!r.ok){let e=Error(i?.message||`操作未完成,请稍后重试`);throw e.status=r.status,e}return i}function Jo(e,t={}){if(String(t.method||`GET`).toUpperCase()!==`GET`||t.body!=null||t.signal)return qo(e,t);let n=String(e);if(Ko.has(n))return Ko.get(n);let r=qo(e,t).finally(()=>{Ko.get(n)===r&&Ko.delete(n)});return Ko.set(n,r),r}var Yo={key:0,class:`hz-loading`,role:`status`,"aria-live":`polite`},Xo={key:1,class:`hz-failure`},Zo={__name:`App`,setup(e){let t=zt(!0),n=zt(``),r=zt({organization:{},notices:[],exams:[],stats:{}}),i=zt({user:null,profile:null,permissions:[]});async function a(){t.value=!0,n.value=``;try{let[e,t]=await Promise.all([Jo(`/api/public/home`),Jo(`/api/auth/me`).catch(e=>{if(e.status===401)return{user:null,profile:null,permissions:[]};throw e})]);r.value=e,i.value=t}catch(e){n.value=e.message||`首页服务暂时不可用,请稍后重试。`}finally{t.value=!1}}async function o(){try{await Jo(`/api/auth/logout`,{method:`POST`}),i.value={user:null,profile:null,permissions:[]},await a()}catch(e){n.value=e.message||`退出未完成,请稍后重试。`}}return Kn(a),(e,s)=>t.value?(Y(),X(`div`,Yo,[...s[0]||=[Z(`span`,{class:`hz-loading__seal`,"aria-hidden":`true`},`衡`,-1),Z(`strong`,null,`正在接入考试公共服务`,-1),Z(`small`,null,`请稍候`,-1)]])):n.value?(Y(),X(`main`,Xo,[s[1]||=Z(`span`,null,`服务提示`,-1),s[2]||=Z(`h1`,null,`首页暂时无法加载`,-1),Z(`p`,null,A(n.value),1),Z(`button`,{type:`button`,onClick:a},`重新加载`)])):(Y(),Si(Go,{key:2,"public-data":r.value,session:i.value,onLogout:o},null,8,[`public-data`,`session`]))}},Qo=`modulepreload`,$o=function(e){return`/`+e},es={},ts=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}r=o(t.map(t=>{if(t=$o(t,n),t=s(t),t in es)return;es[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:Qo,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},ns=document.querySelector(`#app`),rs=null,is=null;window.__EIS_VUE_SHELL__=!0;function as(){return location.hash.slice(1)||`home`}function os(e){return e===`home`}function ss(){ns.innerHTML=` +
+ + 正在进入业务中心 + 请稍候 +
`}function cs(){return is||(rs&&=(rs.unmount(),null),ss(),is=ts(()=>import(`/js/app.js?v=20260723-vue`),[]).catch(e=>{throw console.error(`Legacy application failed to load`,e),ns.innerHTML=`
服务提示

业务中心暂时无法加载

请刷新页面后重试。

`,e}),is)}function ls(){rs||(ns.innerHTML=``,rs=Ja(Zo),rs.mount(ns))}function us(){os(as())?ls():cs()}window.addEventListener(`hashchange`,()=>{let e=as();if(os(e)&&is){location.reload();return}!os(e)&&!is&&cs()}),us(); \ No newline at end of file