From 4526cc639699c46883d4f34111ff20bdc83fd855 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=99=E8=AF=9A?= Date: Thu, 25 Dec 2025 11:20:56 +0800 Subject: [PATCH] first commot --- .dockerignore | 25 + .gitea/workflows/push.yml | 44 + .gitignore | 402 +++ .serena/.gitignore | 1 + .serena/project.yml | 84 + Common/Common.csproj | 7 + Common/ServiceExtension.cs | 79 + Directory.Build.props | 8 + Directory.Packages.props | 28 + Dockerfile | 66 + EmailBill.sln | 90 + EmailBill.sln.DotSettings | 2 + Entity/BaseEntity.cs | 25 + Entity/EmailMessage.cs | 32 + Entity/Entity.csproj | 6 + Entity/GlobalUsings.cs | 1 + Entity/TransactionCategory.cs | 47 + Entity/TransactionRecord.cs | 85 + Entity/WeatherForecast.cs | 27 + Repository/BaseRepository.cs | 142 + Repository/EmailMessageRepository.cs | 64 + Repository/GlobalUsings.cs | 5 + Repository/Repository.csproj | 12 + Repository/TransactionCategoryRepository.cs | 174 ++ Repository/TransactionRecordRepository.cs | 183 ++ Service/AppSettingModel/AISettings.cs | 8 + Service/AppSettingModel/EmailConfigItem.cs | 14 + Service/AppSettingModel/EmailSettings.cs | 11 + Service/EmailBackgroundService.cs | 236 ++ Service/EmailFetchService.cs | 253 ++ Service/EmailHandleService.cs | 275 ++ .../EmailParseServices/EmailParseForm95555.cs | 71 + .../EmailParseServices/EmailParseFormCCSVC.cs | 153 + .../EmailParseServices/IEmailParseServices.cs | 211 ++ Service/GlobalUsings.cs | 13 + Service/ImportService.cs | 499 +++ Service/OpenAiService.cs | 71 + Service/Service.csproj | 21 + Web/.editorconfig | 8 + Web/.env.development | 2 + Web/.env.production | 2 + Web/.gitattributes | 1 + Web/.gitignore | 402 +++ Web/.prettierrc.json | 6 + Web/.vscode/extensions.json | 8 + Web/.vscode/settings.json | 13 + Web/README.md | 44 + Web/dist/assets/CalendarView-By4eHUMb.js | 1 + Web/dist/assets/EmailRecord-Hpcg_SM6.css | 1 + Web/dist/assets/EmailRecord-ooSXYRv8.js | 1 + Web/dist/assets/SettingView-BhjwUKGN.css | 1 + Web/dist/assets/SettingView-DpsY2gE2.js | 1 + .../assets/TransactionsRecord-COA69EP3.js | 1 + .../assets/TransactionsRecord-D6q5JXmJ.css | 1 + .../_plugin-vue_export-helper-DlAUqK2U.js | 1 + Web/dist/assets/index-B9ygI19o.js | 6 + Web/dist/assets/index-CoRZCnfa.js | 6 + Web/dist/assets/index-JYOJmkEG.css | 1 + Web/dist/assets/request-CDAs_I05.js | 1 + Web/dist/favicon.ico | Bin 0 -> 4286 bytes Web/dist/index.html | 14 + Web/eslint.config.js | 26 + Web/index.html | 13 + Web/jsconfig.json | 8 + Web/package.json | 34 + Web/pnpm-lock.yaml | 2738 +++++++++++++++++ Web/pnpm-workspace.yaml | 2 + Web/public/favicon.ico | Bin 0 -> 4286 bytes Web/src/App.vue | 58 + Web/src/api/billImport.js | 68 + Web/src/api/emailRecord.js | 80 + Web/src/api/request.js | 81 + Web/src/api/transactionCategory.js | 104 + Web/src/api/transactionRecord.js | 102 + Web/src/assets/base.css | 86 + Web/src/assets/logo.svg | 1 + Web/src/assets/main.css | 34 + Web/src/components/TransactionDetail.vue | 521 ++++ Web/src/components/TransactionList.vue | 251 ++ Web/src/main.js | 19 + Web/src/router/index.js | 29 + Web/src/stores/counter.js | 12 + Web/src/styles/common.css | 109 + Web/src/views/CalendarView.vue | 226 ++ Web/src/views/EmailRecord.vue | 474 +++ Web/src/views/SettingView.vue | 134 + Web/src/views/TransactionsRecord.vue | 607 ++++ Web/vite.config.js | 18 + WebApi/Controllers/BillImportController.cs | 84 + WebApi/Controllers/Dto/BaseResponse.cs | 41 + WebApi/Controllers/Dto/EmailMessageDto.cs | 40 + WebApi/Controllers/Dto/PagedResponse.cs | 25 + WebApi/Controllers/EmailMessageController.cs | 161 + .../TransactionCategoryController.cs | 301 ++ .../TransactionRecordController.cs | 302 ++ WebApi/GlobalUsings.cs | 6 + WebApi/Program.cs | 112 + WebApi/Properties/launchSettings.json | 23 + WebApi/WebApi.csproj | 26 + WebApi/WebApi.http | 6 + WebApi/appsettings.Development.json | 28 + WebApi/appsettings.json | 52 + docker-compose.yml | 21 + nuget.config | 10 + 104 files changed, 11070 insertions(+) create mode 100644 .dockerignore create mode 100644 .gitea/workflows/push.yml create mode 100644 .gitignore create mode 100644 .serena/.gitignore create mode 100644 .serena/project.yml create mode 100644 Common/Common.csproj create mode 100644 Common/ServiceExtension.cs create mode 100644 Directory.Build.props create mode 100644 Directory.Packages.props create mode 100644 Dockerfile create mode 100644 EmailBill.sln create mode 100644 EmailBill.sln.DotSettings create mode 100644 Entity/BaseEntity.cs create mode 100644 Entity/EmailMessage.cs create mode 100644 Entity/Entity.csproj create mode 100644 Entity/GlobalUsings.cs create mode 100644 Entity/TransactionCategory.cs create mode 100644 Entity/TransactionRecord.cs create mode 100644 Entity/WeatherForecast.cs create mode 100644 Repository/BaseRepository.cs create mode 100644 Repository/EmailMessageRepository.cs create mode 100644 Repository/GlobalUsings.cs create mode 100644 Repository/Repository.csproj create mode 100644 Repository/TransactionCategoryRepository.cs create mode 100644 Repository/TransactionRecordRepository.cs create mode 100644 Service/AppSettingModel/AISettings.cs create mode 100644 Service/AppSettingModel/EmailConfigItem.cs create mode 100644 Service/AppSettingModel/EmailSettings.cs create mode 100644 Service/EmailBackgroundService.cs create mode 100644 Service/EmailFetchService.cs create mode 100644 Service/EmailHandleService.cs create mode 100644 Service/EmailParseServices/EmailParseForm95555.cs create mode 100644 Service/EmailParseServices/EmailParseFormCCSVC.cs create mode 100644 Service/EmailParseServices/IEmailParseServices.cs create mode 100644 Service/GlobalUsings.cs create mode 100644 Service/ImportService.cs create mode 100644 Service/OpenAiService.cs create mode 100644 Service/Service.csproj create mode 100644 Web/.editorconfig create mode 100644 Web/.env.development create mode 100644 Web/.env.production create mode 100644 Web/.gitattributes create mode 100644 Web/.gitignore create mode 100644 Web/.prettierrc.json create mode 100644 Web/.vscode/extensions.json create mode 100644 Web/.vscode/settings.json create mode 100644 Web/README.md create mode 100644 Web/dist/assets/CalendarView-By4eHUMb.js create mode 100644 Web/dist/assets/EmailRecord-Hpcg_SM6.css create mode 100644 Web/dist/assets/EmailRecord-ooSXYRv8.js create mode 100644 Web/dist/assets/SettingView-BhjwUKGN.css create mode 100644 Web/dist/assets/SettingView-DpsY2gE2.js create mode 100644 Web/dist/assets/TransactionsRecord-COA69EP3.js create mode 100644 Web/dist/assets/TransactionsRecord-D6q5JXmJ.css create mode 100644 Web/dist/assets/_plugin-vue_export-helper-DlAUqK2U.js create mode 100644 Web/dist/assets/index-B9ygI19o.js create mode 100644 Web/dist/assets/index-CoRZCnfa.js create mode 100644 Web/dist/assets/index-JYOJmkEG.css create mode 100644 Web/dist/assets/request-CDAs_I05.js create mode 100644 Web/dist/favicon.ico create mode 100644 Web/dist/index.html create mode 100644 Web/eslint.config.js create mode 100644 Web/index.html create mode 100644 Web/jsconfig.json create mode 100644 Web/package.json create mode 100644 Web/pnpm-lock.yaml create mode 100644 Web/pnpm-workspace.yaml create mode 100644 Web/public/favicon.ico create mode 100644 Web/src/App.vue create mode 100644 Web/src/api/billImport.js create mode 100644 Web/src/api/emailRecord.js create mode 100644 Web/src/api/request.js create mode 100644 Web/src/api/transactionCategory.js create mode 100644 Web/src/api/transactionRecord.js create mode 100644 Web/src/assets/base.css create mode 100644 Web/src/assets/logo.svg create mode 100644 Web/src/assets/main.css create mode 100644 Web/src/components/TransactionDetail.vue create mode 100644 Web/src/components/TransactionList.vue create mode 100644 Web/src/main.js create mode 100644 Web/src/router/index.js create mode 100644 Web/src/stores/counter.js create mode 100644 Web/src/styles/common.css create mode 100644 Web/src/views/CalendarView.vue create mode 100644 Web/src/views/EmailRecord.vue create mode 100644 Web/src/views/SettingView.vue create mode 100644 Web/src/views/TransactionsRecord.vue create mode 100644 Web/vite.config.js create mode 100644 WebApi/Controllers/BillImportController.cs create mode 100644 WebApi/Controllers/Dto/BaseResponse.cs create mode 100644 WebApi/Controllers/Dto/EmailMessageDto.cs create mode 100644 WebApi/Controllers/Dto/PagedResponse.cs create mode 100644 WebApi/Controllers/EmailMessageController.cs create mode 100644 WebApi/Controllers/TransactionCategoryController.cs create mode 100644 WebApi/Controllers/TransactionRecordController.cs create mode 100644 WebApi/GlobalUsings.cs create mode 100644 WebApi/Program.cs create mode 100644 WebApi/Properties/launchSettings.json create mode 100644 WebApi/WebApi.csproj create mode 100644 WebApi/WebApi.http create mode 100644 WebApi/appsettings.Development.json create mode 100644 WebApi/appsettings.json create mode 100644 docker-compose.yml create mode 100644 nuget.config diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..cd967fc --- /dev/null +++ b/.dockerignore @@ -0,0 +1,25 @@ +**/.dockerignore +**/.env +**/.git +**/.gitignore +**/.project +**/.settings +**/.toolstarget +**/.vs +**/.vscode +**/.idea +**/*.*proj.user +**/*.dbmdl +**/*.jfm +**/azds.yaml +**/bin +**/charts +**/docker-compose* +**/Dockerfile* +**/node_modules +**/npm-debug.log +**/obj +**/secrets.dev.yaml +**/values.dev.yaml +LICENSE +README.md \ No newline at end of file diff --git a/.gitea/workflows/push.yml b/.gitea/workflows/push.yml new file mode 100644 index 0000000..43f88a8 --- /dev/null +++ b/.gitea/workflows/push.yml @@ -0,0 +1,44 @@ +name: Docker Build & Deploy +on: + workflow_dispatch: + push: + branches: [ main ] + +env: + COMPOSE_PROJECT_NAME: emailbill + IMAGE_NAME: emailbill-app + +jobs: + build: + name: Build Docker Image + runs-on: ubuntu-latest + steps: + # ✅ 使用 Gitea 兼容的代码检出方式 + - name: Checkout code + uses: actions/checkout@v3 + with: + gitea-server: http://192.168.31.14:14200 + token: ${{ secrets.GITEA_TOKEN }} + ref: ${{ gitea.ref }} # 必须传递 Gitea 的 ref 参数 + + - name: Cleanup old containers + run: | + docker compose -p $COMPOSE_PROJECT_NAME down || true + docker rmi $IMAGE_NAME || true + + - name: Build new image + run: docker build -t $IMAGE_NAME . + + deploy: + name: Deploy to Production + runs-on: ubuntu-latest + needs: build + environment: production + steps: + - name: Checkout code + uses: https://gitea.com/actions/checkout@v3 + + - name: Start containers + run: | + docker compose -p $COMPOSE_PROJECT_NAME down + docker compose -p $COMPOSE_PROJECT_NAME up -d --build diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..593bd61 --- /dev/null +++ b/.gitignore @@ -0,0 +1,402 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.tlog +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio 6 auto-generated project file (contains which files were open etc.) +*.vbp + +# Visual Studio 6 workspace and project file (working project files containing files to include in project) +*.dsw +*.dsp + +# Visual Studio 6 technical files +*.ncb +*.aps + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# Visual Studio History (VSHistory) files +.vshistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +# VS Code files for those working on multiple tools +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# Local History for Visual Studio Code +.history/ + +# Windows Installer files from build outputs +*.cab +*.msi +*.msix +*.msm +*.msp + +# JetBrains Rider +*.sln.iml + + + +.idea/ \ No newline at end of file diff --git a/.serena/.gitignore b/.serena/.gitignore new file mode 100644 index 0000000..14d86ad --- /dev/null +++ b/.serena/.gitignore @@ -0,0 +1 @@ +/cache diff --git a/.serena/project.yml b/.serena/project.yml new file mode 100644 index 0000000..967c535 --- /dev/null +++ b/.serena/project.yml @@ -0,0 +1,84 @@ +# list of languages for which language servers are started; choose from: +# al bash clojure cpp csharp csharp_omnisharp +# dart elixir elm erlang fortran go +# haskell java julia kotlin lua markdown +# nix perl php python python_jedi r +# rego ruby ruby_solargraph rust scala swift +# terraform typescript typescript_vts yaml zig +# Note: +# - For C, use cpp +# - For JavaScript, use typescript +# Special requirements: +# - csharp: Requires the presence of a .sln file in the project folder. +# When using multiple languages, the first language server that supports a given file will be used for that file. +# The first language is the default language and the respective language server will be used as a fallback. +# Note that when using the JetBrains backend, language servers are not used and this list is correspondingly ignored. +languages: +- csharp + +# the encoding used by text files in the project +# For a list of possible encodings, see https://docs.python.org/3.11/library/codecs.html#standard-encodings +encoding: "utf-8" + +# whether to use the project's gitignore file to ignore files +# Added on 2025-04-07 +ignore_all_files_in_gitignore: true + +# list of additional paths to ignore +# same syntax as gitignore, so you can use * and ** +# Was previously called `ignored_dirs`, please update your config if you are using that. +# Added (renamed) on 2025-04-07 +ignored_paths: [] + +# whether the project is in read-only mode +# If set to true, all editing tools will be disabled and attempts to use them will result in an error +# Added on 2025-04-18 +read_only: false + +# list of tool names to exclude. We recommend not excluding any tools, see the readme for more details. +# Below is the complete list of tools for convenience. +# To make sure you have the latest list of tools, and to view their descriptions, +# execute `uv run scripts/print_tool_overview.py`. +# +# * `activate_project`: Activates a project by name. +# * `check_onboarding_performed`: Checks whether project onboarding was already performed. +# * `create_text_file`: Creates/overwrites a file in the project directory. +# * `delete_lines`: Deletes a range of lines within a file. +# * `delete_memory`: Deletes a memory from Serena's project-specific memory store. +# * `execute_shell_command`: Executes a shell command. +# * `find_referencing_code_snippets`: Finds code snippets in which the symbol at the given location is referenced. +# * `find_referencing_symbols`: Finds symbols that reference the symbol at the given location (optionally filtered by type). +# * `find_symbol`: Performs a global (or local) search for symbols with/containing a given name/substring (optionally filtered by type). +# * `get_current_config`: Prints the current configuration of the agent, including the active and available projects, tools, contexts, and modes. +# * `get_symbols_overview`: Gets an overview of the top-level symbols defined in a given file. +# * `initial_instructions`: Gets the initial instructions for the current project. +# Should only be used in settings where the system prompt cannot be set, +# e.g. in clients you have no control over, like Claude Desktop. +# * `insert_after_symbol`: Inserts content after the end of the definition of a given symbol. +# * `insert_at_line`: Inserts content at a given line in a file. +# * `insert_before_symbol`: Inserts content before the beginning of the definition of a given symbol. +# * `list_dir`: Lists files and directories in the given directory (optionally with recursion). +# * `list_memories`: Lists memories in Serena's project-specific memory store. +# * `onboarding`: Performs onboarding (identifying the project structure and essential tasks, e.g. for testing or building). +# * `prepare_for_new_conversation`: Provides instructions for preparing for a new conversation (in order to continue with the necessary context). +# * `read_file`: Reads a file within the project directory. +# * `read_memory`: Reads the memory with the given name from Serena's project-specific memory store. +# * `remove_project`: Removes a project from the Serena configuration. +# * `replace_lines`: Replaces a range of lines within a file with new content. +# * `replace_symbol_body`: Replaces the full definition of a symbol. +# * `restart_language_server`: Restarts the language server, may be necessary when edits not through Serena happen. +# * `search_for_pattern`: Performs a search for a pattern in the project. +# * `summarize_changes`: Provides instructions for summarizing the changes made to the codebase. +# * `switch_modes`: Activates modes by providing a list of their names +# * `think_about_collected_information`: Thinking tool for pondering the completeness of collected information. +# * `think_about_task_adherence`: Thinking tool for determining whether the agent is still on track with the current task. +# * `think_about_whether_you_are_done`: Thinking tool for determining whether the task is truly completed. +# * `write_memory`: Writes a named memory (for future reference) to Serena's project-specific memory store. +excluded_tools: [] + +# initial prompt for the project. It will always be given to the LLM upon activating the project +# (contrary to the memories, which are loaded on demand). +initial_prompt: "" + +project_name: "EmailBill" +included_optional_tools: [] diff --git a/Common/Common.csproj b/Common/Common.csproj new file mode 100644 index 0000000..bf0fa6e --- /dev/null +++ b/Common/Common.csproj @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Common/ServiceExtension.cs b/Common/ServiceExtension.cs new file mode 100644 index 0000000..4e7a410 --- /dev/null +++ b/Common/ServiceExtension.cs @@ -0,0 +1,79 @@ +using System.Reflection; +using Microsoft.Extensions.DependencyInjection; + +namespace Common; + +/// +/// 服务依赖注入扩展 +/// +public static class ServiceExtension +{ + /// + /// 自动扫描并注册服务和仓储 + /// + public static IServiceCollection AddServices(this IServiceCollection services) + { + // 扫描程序集 + var serviceAssembly = Assembly.Load("Service"); + var repositoryAssembly = Assembly.Load("Repository"); + + // 注册所有服务实现 + RegisterServices(services, serviceAssembly); + + // 注册所有仓储实现 + RegisterRepositories(services, repositoryAssembly); + + return services; + } + + private static void RegisterServices(IServiceCollection services, Assembly assembly) + { + var types = assembly.GetTypes() + .Where(t => t.IsClass && !t.IsAbstract); + + foreach (var type in types) + { + var interfaces = type.GetInterfaces() + .Where(i => i.Name.StartsWith("I") && i.Namespace != null && i.Namespace.StartsWith("Service")); + + foreach (var @interface in interfaces) + { + // EmailBackgroundService 必须是 Singleton(后台服务),其他服务可用 Transient + if (type.Name == "EmailBackgroundService") + { + services.AddSingleton(@interface, type); + } + else if (type.Name == "EmailFetchService") + { + // EmailFetchService 用 Transient,避免连接冲突 + services.AddTransient(@interface, type); + } + else + { + services.AddSingleton(@interface, type); + } + } + } + } + + private static void RegisterRepositories(IServiceCollection services, Assembly assembly) + { + var types = assembly.GetTypes() + .Where(t => t.IsClass && !t.IsAbstract); + + foreach (var type in types) + { + var interfaces = type.GetInterfaces() + .Where(i => i.Name.StartsWith("I") + && i.Namespace == "Repository" + && !i.IsGenericType); // 排除泛型接口如 IBaseRepository + + foreach (var @interface in interfaces) + { + services.AddSingleton(@interface, type); + Console.WriteLine($"注册 Repository: {@interface.Name} -> {type.Name}"); + } + } + } +} + diff --git a/Directory.Build.props b/Directory.Build.props new file mode 100644 index 0000000..5613ace --- /dev/null +++ b/Directory.Build.props @@ -0,0 +1,8 @@ + + + net10.0 + enable + enable + true + + diff --git a/Directory.Packages.props b/Directory.Packages.props new file mode 100644 index 0000000..700f499 --- /dev/null +++ b/Directory.Packages.props @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..7486014 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,66 @@ +# 多阶段构建 Dockerfile +# 第一阶段:构建前端 +FROM node:20-alpine AS frontend-build + +WORKDIR /app/frontend + +# 复制前端项目文件 +COPY Web/package.json Web/pnpm-lock.yaml ./ +RUN npm install -g pnpm && pnpm install + +# 复制前端源代码并构建 +COPY Web/ ./ +RUN pnpm run build + +# 第二阶段:构建后端 +FROM mcr.microsoft.com/dotnet/sdk:10.0 AS backend-build + +WORKDIR /app + +# 复制解决方案文件和项目文件 +COPY *.sln ./ +COPY Directory.Build.props ./ +COPY Directory.Packages.props ./ +COPY nuget.config ./ +COPY Common/*.csproj ./Common/ +COPY Entity/*.csproj ./Entity/ +COPY Repository/*.csproj ./Repository/ +COPY Service/*.csproj ./Service/ +COPY WebApi/*.csproj ./WebApi/ + +# 还原依赖 +RUN dotnet restore + +# 复制所有源代码 +COPY Common/ ./Common/ +COPY Entity/ ./Entity/ +COPY Repository/ ./Repository/ +COPY Service/ ./Service/ +COPY WebApi/ ./WebApi/ + +# 构建并发布 +RUN dotnet publish WebApi/WebApi.csproj -c Release -o /app/publish + +# 将前端构建产物复制到后端的 wwwroot 目录 +COPY --from=frontend-build /app/frontend/dist /app/publish/wwwroot + +# 第三阶段:运行时镜像 +FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS runtime + +WORKDIR /app + +# 复制发布的应用 +COPY --from=backend-build /app/publish ./ + +# 创建数据库目录 +RUN mkdir -p /app/database + +# 暴露端口 +EXPOSE 8080 + +# 设置环境变量 +ENV ASPNETCORE_URLS=http://+:8080 +ENV ASPNETCORE_ENVIRONMENT=Production + +# 启动应用 +ENTRYPOINT ["dotnet", "WebApi.dll"] diff --git a/EmailBill.sln b/EmailBill.sln new file mode 100644 index 0000000..b0c1954 --- /dev/null +++ b/EmailBill.sln @@ -0,0 +1,90 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31903.59 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebApi", "WebApi\WebApi.csproj", "{4818F6EB-A555-41AC-AABF-2E09CE5149BC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Service", "Service\Service.csproj", "{8090BAB0-B9B4-483A-BF2C-4BF5D2D91D93}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Repository", "Repository\Repository.csproj", "{A76B51D5-8EC1-4166-B897-E6C125CA4FFB}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Common", "Common\Common.csproj", "{F8C621DA-478B-481A-B6B9-1C16D595C41D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Entity", "Entity\Entity.csproj", "{B1BCD944-C4F5-406E-AE66-864E4BA21522}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {4818F6EB-A555-41AC-AABF-2E09CE5149BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4818F6EB-A555-41AC-AABF-2E09CE5149BC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4818F6EB-A555-41AC-AABF-2E09CE5149BC}.Debug|x64.ActiveCfg = Debug|Any CPU + {4818F6EB-A555-41AC-AABF-2E09CE5149BC}.Debug|x64.Build.0 = Debug|Any CPU + {4818F6EB-A555-41AC-AABF-2E09CE5149BC}.Debug|x86.ActiveCfg = Debug|Any CPU + {4818F6EB-A555-41AC-AABF-2E09CE5149BC}.Debug|x86.Build.0 = Debug|Any CPU + {4818F6EB-A555-41AC-AABF-2E09CE5149BC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4818F6EB-A555-41AC-AABF-2E09CE5149BC}.Release|Any CPU.Build.0 = Release|Any CPU + {4818F6EB-A555-41AC-AABF-2E09CE5149BC}.Release|x64.ActiveCfg = Release|Any CPU + {4818F6EB-A555-41AC-AABF-2E09CE5149BC}.Release|x64.Build.0 = Release|Any CPU + {4818F6EB-A555-41AC-AABF-2E09CE5149BC}.Release|x86.ActiveCfg = Release|Any CPU + {4818F6EB-A555-41AC-AABF-2E09CE5149BC}.Release|x86.Build.0 = Release|Any CPU + {8090BAB0-B9B4-483A-BF2C-4BF5D2D91D93}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8090BAB0-B9B4-483A-BF2C-4BF5D2D91D93}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8090BAB0-B9B4-483A-BF2C-4BF5D2D91D93}.Debug|x64.ActiveCfg = Debug|Any CPU + {8090BAB0-B9B4-483A-BF2C-4BF5D2D91D93}.Debug|x64.Build.0 = Debug|Any CPU + {8090BAB0-B9B4-483A-BF2C-4BF5D2D91D93}.Debug|x86.ActiveCfg = Debug|Any CPU + {8090BAB0-B9B4-483A-BF2C-4BF5D2D91D93}.Debug|x86.Build.0 = Debug|Any CPU + {8090BAB0-B9B4-483A-BF2C-4BF5D2D91D93}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8090BAB0-B9B4-483A-BF2C-4BF5D2D91D93}.Release|Any CPU.Build.0 = Release|Any CPU + {8090BAB0-B9B4-483A-BF2C-4BF5D2D91D93}.Release|x64.ActiveCfg = Release|Any CPU + {8090BAB0-B9B4-483A-BF2C-4BF5D2D91D93}.Release|x64.Build.0 = Release|Any CPU + {8090BAB0-B9B4-483A-BF2C-4BF5D2D91D93}.Release|x86.ActiveCfg = Release|Any CPU + {8090BAB0-B9B4-483A-BF2C-4BF5D2D91D93}.Release|x86.Build.0 = Release|Any CPU + {A76B51D5-8EC1-4166-B897-E6C125CA4FFB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A76B51D5-8EC1-4166-B897-E6C125CA4FFB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A76B51D5-8EC1-4166-B897-E6C125CA4FFB}.Debug|x64.ActiveCfg = Debug|Any CPU + {A76B51D5-8EC1-4166-B897-E6C125CA4FFB}.Debug|x64.Build.0 = Debug|Any CPU + {A76B51D5-8EC1-4166-B897-E6C125CA4FFB}.Debug|x86.ActiveCfg = Debug|Any CPU + {A76B51D5-8EC1-4166-B897-E6C125CA4FFB}.Debug|x86.Build.0 = Debug|Any CPU + {A76B51D5-8EC1-4166-B897-E6C125CA4FFB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A76B51D5-8EC1-4166-B897-E6C125CA4FFB}.Release|Any CPU.Build.0 = Release|Any CPU + {A76B51D5-8EC1-4166-B897-E6C125CA4FFB}.Release|x64.ActiveCfg = Release|Any CPU + {A76B51D5-8EC1-4166-B897-E6C125CA4FFB}.Release|x64.Build.0 = Release|Any CPU + {A76B51D5-8EC1-4166-B897-E6C125CA4FFB}.Release|x86.ActiveCfg = Release|Any CPU + {A76B51D5-8EC1-4166-B897-E6C125CA4FFB}.Release|x86.Build.0 = Release|Any CPU + {F8C621DA-478B-481A-B6B9-1C16D595C41D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F8C621DA-478B-481A-B6B9-1C16D595C41D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F8C621DA-478B-481A-B6B9-1C16D595C41D}.Debug|x64.ActiveCfg = Debug|Any CPU + {F8C621DA-478B-481A-B6B9-1C16D595C41D}.Debug|x64.Build.0 = Debug|Any CPU + {F8C621DA-478B-481A-B6B9-1C16D595C41D}.Debug|x86.ActiveCfg = Debug|Any CPU + {F8C621DA-478B-481A-B6B9-1C16D595C41D}.Debug|x86.Build.0 = Debug|Any CPU + {F8C621DA-478B-481A-B6B9-1C16D595C41D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F8C621DA-478B-481A-B6B9-1C16D595C41D}.Release|Any CPU.Build.0 = Release|Any CPU + {F8C621DA-478B-481A-B6B9-1C16D595C41D}.Release|x64.ActiveCfg = Release|Any CPU + {F8C621DA-478B-481A-B6B9-1C16D595C41D}.Release|x64.Build.0 = Release|Any CPU + {F8C621DA-478B-481A-B6B9-1C16D595C41D}.Release|x86.ActiveCfg = Release|Any CPU + {F8C621DA-478B-481A-B6B9-1C16D595C41D}.Release|x86.Build.0 = Release|Any CPU + {B1BCD944-C4F5-406E-AE66-864E4BA21522}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B1BCD944-C4F5-406E-AE66-864E4BA21522}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B1BCD944-C4F5-406E-AE66-864E4BA21522}.Debug|x64.ActiveCfg = Debug|Any CPU + {B1BCD944-C4F5-406E-AE66-864E4BA21522}.Debug|x64.Build.0 = Debug|Any CPU + {B1BCD944-C4F5-406E-AE66-864E4BA21522}.Debug|x86.ActiveCfg = Debug|Any CPU + {B1BCD944-C4F5-406E-AE66-864E4BA21522}.Debug|x86.Build.0 = Debug|Any CPU + {B1BCD944-C4F5-406E-AE66-864E4BA21522}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B1BCD944-C4F5-406E-AE66-864E4BA21522}.Release|Any CPU.Build.0 = Release|Any CPU + {B1BCD944-C4F5-406E-AE66-864E4BA21522}.Release|x64.ActiveCfg = Release|Any CPU + {B1BCD944-C4F5-406E-AE66-864E4BA21522}.Release|x64.Build.0 = Release|Any CPU + {B1BCD944-C4F5-406E-AE66-864E4BA21522}.Release|x86.ActiveCfg = Release|Any CPU + {B1BCD944-C4F5-406E-AE66-864E4BA21522}.Release|x86.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/EmailBill.sln.DotSettings b/EmailBill.sln.DotSettings new file mode 100644 index 0000000..aaf5c25 --- /dev/null +++ b/EmailBill.sln.DotSettings @@ -0,0 +1,2 @@ + + True \ No newline at end of file diff --git a/Entity/BaseEntity.cs b/Entity/BaseEntity.cs new file mode 100644 index 0000000..409c34e --- /dev/null +++ b/Entity/BaseEntity.cs @@ -0,0 +1,25 @@ +using Yitter.IdGenerator; + +namespace Entity; + +/// +/// 实体基类 +/// +public abstract class BaseEntity +{ + /// + /// 主键ID (雪花算法有序ID) + /// + [Column(IsPrimary = true)] + public long Id { get; set; } = YitIdHelper.NextId(); + + /// + /// 创建时间 + /// + public DateTime CreateTime { get; set; } = DateTime.Now; + + /// + /// 更新时间 + /// + public DateTime? UpdateTime { get; set; } +} diff --git a/Entity/EmailMessage.cs b/Entity/EmailMessage.cs new file mode 100644 index 0000000..877110e --- /dev/null +++ b/Entity/EmailMessage.cs @@ -0,0 +1,32 @@ +namespace Entity; + +/// +/// 邮件消息实体 +/// +public class EmailMessage : BaseEntity +{ + /// + /// 邮件主题 + /// + public string Subject { get; set; } = string.Empty; + + /// + /// 邮件发送者 + /// + public string From { get; set; } = string.Empty; + + /// + /// 邮件正文 + /// + public string Body { get; set; } = string.Empty; + + /// + /// 邮件HTML内容 + /// + public string HtmlBody { get; set; } = string.Empty; + + /// + /// 邮件接收时间 + /// + public DateTime ReceivedDate { get; set; } +} diff --git a/Entity/Entity.csproj b/Entity/Entity.csproj new file mode 100644 index 0000000..0a0375f --- /dev/null +++ b/Entity/Entity.csproj @@ -0,0 +1,6 @@ + + + + + + diff --git a/Entity/GlobalUsings.cs b/Entity/GlobalUsings.cs new file mode 100644 index 0000000..4303997 --- /dev/null +++ b/Entity/GlobalUsings.cs @@ -0,0 +1 @@ +global using FreeSql.DataAnnotations; \ No newline at end of file diff --git a/Entity/TransactionCategory.cs b/Entity/TransactionCategory.cs new file mode 100644 index 0000000..fcffe45 --- /dev/null +++ b/Entity/TransactionCategory.cs @@ -0,0 +1,47 @@ +namespace Entity; + +/// +/// 交易分类(层级结构:类型 -> 分类 -> 子分类) +/// +public class TransactionCategory : BaseEntity +{ + /// + /// 分类名称 + /// + public string Name { get; set; } = string.Empty; + + /// + /// 父分类ID(0表示顶级分类) + /// + public long ParentId { get; set; } + + /// + /// 交易类型(支出/收入) + /// + public TransactionType Type { get; set; } + + /// + /// 层级(1=类型级, 2=分类级, 3=子分类级) + /// + public int Level { get; set; } + + /// + /// 排序号 + /// + public int SortOrder { get; set; } + + /// + /// 图标(可选) + /// + public string? Icon { get; set; } + + /// + /// 是否启用 + /// + public bool IsEnabled { get; set; } = true; + + /// + /// 备注 + /// + public string? Remark { get; set; } +} diff --git a/Entity/TransactionRecord.cs b/Entity/TransactionRecord.cs new file mode 100644 index 0000000..06c6760 --- /dev/null +++ b/Entity/TransactionRecord.cs @@ -0,0 +1,85 @@ +namespace Entity; + +/// +/// 银行交易记录(由邮件解析生成) +/// +public class TransactionRecord : BaseEntity +{ + /// + /// 卡号或账户标识 + /// + public string Card { get; set; } = string.Empty; + + /// + /// 交易原因/摘要 + /// + public string Reason { get; set; } = string.Empty; + + /// + /// 交易金额 + /// + public decimal Amount { get; set; } + + /// + /// 退款金额 + /// + public decimal RefundAmount { get; set; } + + /// + /// 交易后余额 + /// + public decimal Balance { get; set; } + + /// + /// 发生时间(邮件中的交易时间) + /// + public DateTime OccurredAt { get; set; } + + /// + /// 原始邮件记录ID + /// + public long EmailMessageId { get; set; } + + /// + /// 交易类型 + /// + public TransactionType Type { get; set; } + + /// + /// 交易分类 + /// + public string Classify { get; set; } = string.Empty; + + /// + /// 交易子分类 + /// + public string SubClassify { get; set; } = string.Empty; + + /// + /// 导入编号 + /// + public string ImportNo { get; set; } = string.Empty; + + /// + /// 导入来源 + /// + public string ImportFrom { get; set; } = string.Empty; +} + +public enum TransactionType +{ + /// + /// 支出 + /// + Expense = 0, + + /// + /// 收入 + /// + Income = 1, + + /// + /// 不计入收支 + /// + None = 2 +} diff --git a/Entity/WeatherForecast.cs b/Entity/WeatherForecast.cs new file mode 100644 index 0000000..65981cd --- /dev/null +++ b/Entity/WeatherForecast.cs @@ -0,0 +1,27 @@ +namespace Entity; + +/// +/// 天气预报实体 +/// +public class WeatherForecast : BaseEntity +{ + /// + /// 日期 + /// + public DateOnly Date { get; set; } + + /// + /// 摄氏温度 + /// + public int TemperatureC { get; set; } + + /// + /// 摄氏度转华氏度 + /// + public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); + + /// + /// 天气摘要 + /// + public string? Summary { get; set; } +} diff --git a/Repository/BaseRepository.cs b/Repository/BaseRepository.cs new file mode 100644 index 0000000..ee80096 --- /dev/null +++ b/Repository/BaseRepository.cs @@ -0,0 +1,142 @@ +namespace Repository; + +/// +/// 仓储基础接口 +/// +/// 实体类型 +public interface IBaseRepository where T : BaseEntity +{ + /// + /// 获取所有数据 + /// + Task> GetAllAsync(); + + /// + /// 根据ID获取单条数据 + /// + Task GetByIdAsync(long id); + + /// + /// 添加数据 + /// + Task AddAsync(T entity); + + /// + /// 添加数据 + /// + Task AddRangeAsync(IEnumerable entities); + + /// + /// 更新数据 + /// + Task UpdateAsync(T entity); + + /// + /// 批量更新数据 + /// + Task UpdateRangeAsync(IEnumerable entities); + + /// + /// 删除数据 + /// + Task DeleteAsync(long id); +} + + +/// +/// 仓储基类实现 - 基于 FreeSql +/// +/// 实体类型 +public abstract class BaseRepository(IFreeSql freeSql) : IBaseRepository where T : BaseEntity +{ + protected readonly IFreeSql FreeSql = freeSql ?? throw new ArgumentNullException(nameof(freeSql)); + + public virtual async Task> GetAllAsync() + { + try + { + return await FreeSql.Select().ToListAsync(); + } + catch + { + return []; + } + } + + public virtual async Task GetByIdAsync(long id) + { + try + { + // FreeSql 会根据配置自动识别主键 + return await FreeSql.Select().Where(x => x.Id == id).FirstAsync(); + } + catch + { + return null; + } + } + + public virtual async Task AddAsync(T entity) + { + try + { + var result = await FreeSql.Insert(entity).ExecuteAffrowsAsync(); + return result == 1; + } + catch + { + return false; + } + } + + public async Task AddRangeAsync(IEnumerable entities) + { + var result = await FreeSql.Insert(entities).ExecuteAffrowsAsync(); + return result == entities.Count(); + } + + public virtual async Task UpdateAsync(T entity) + { + try + { + var affrows = await FreeSql.Update() + .SetSource(entity) + .ExecuteAffrowsAsync(); + return affrows > 0; + } + catch (Exception ex) + { + Console.WriteLine($"Update failed: {ex.Message}"); + return false; + } + } + + public virtual async Task UpdateRangeAsync(IEnumerable entities) + { + try + { + var affrows = await FreeSql.Update() + .SetSource(entities) + .ExecuteAffrowsAsync(); + return affrows == entities.Count(); + } + catch (Exception ex) + { + Console.WriteLine($"UpdateRange failed: {ex.Message}"); + return false; + } + } + + public virtual async Task DeleteAsync(long id) + { + try + { + var affrows = await FreeSql.Delete().Where(x => x.Id == id).ExecuteAffrowsAsync(); + return affrows > 0; + } + catch + { + return false; + } + } +} diff --git a/Repository/EmailMessageRepository.cs b/Repository/EmailMessageRepository.cs new file mode 100644 index 0000000..9dee5c1 --- /dev/null +++ b/Repository/EmailMessageRepository.cs @@ -0,0 +1,64 @@ +namespace Repository; + +public interface IEmailMessageRepository : IBaseRepository +{ + Task ExistsAsync( + string from, + string subject, + DateTime receivedDate, + string body); + + /// + /// 分页获取邮件列表(游标分页) + /// + /// 上一页最后一条记录的接收时间 + /// 上一页最后一条记录的ID + /// 每页数量 + /// 邮件列表、最后接收时间和最后ID + Task<(List list, DateTime? lastReceivedDate, long lastId)> GetPagedListAsync(DateTime? lastReceivedDate, long? lastId, int pageSize = 20); + + /// + /// 获取总数 + /// + Task GetTotalCountAsync(); +} + +public class EmailMessageRepository(IFreeSql freeSql) : BaseRepository(freeSql), IEmailMessageRepository +{ + public async Task ExistsAsync( + string from, + string subject, + DateTime receivedDate, + string body) + { + return await FreeSql.Select() + .Where(m => m.From == from && m.Subject == subject && m.ReceivedDate == receivedDate && m.Body == body) + .FirstAsync(); + } + + public async Task<(List list, DateTime? lastReceivedDate, long lastId)> GetPagedListAsync(DateTime? lastReceivedDate, long? lastId, int pageSize = 20) + { + var query = FreeSql.Select(); + + // 如果提供了游标,则获取小于游标位置的记录 + if (lastReceivedDate.HasValue && lastId.HasValue) + { + query = query.Where(e => e.ReceivedDate < lastReceivedDate.Value || + (e.ReceivedDate == lastReceivedDate.Value && e.Id < lastId.Value)); + } + + var list = await query + .OrderByDescending(e => e.ReceivedDate) + .OrderByDescending(e => e.Id) + .Page(1, pageSize) + .ToListAsync(); + + var lastRecord = list.Count > 0 ? list.Last() : null; + return (list, lastRecord?.ReceivedDate, lastRecord?.Id ?? 0); + } + + public async Task GetTotalCountAsync() + { + return await FreeSql.Select().CountAsync(); + } +} \ No newline at end of file diff --git a/Repository/GlobalUsings.cs b/Repository/GlobalUsings.cs new file mode 100644 index 0000000..4ede061 --- /dev/null +++ b/Repository/GlobalUsings.cs @@ -0,0 +1,5 @@ + +global using Entity; +global using FreeSql; +global using System.Linq; + diff --git a/Repository/Repository.csproj b/Repository/Repository.csproj new file mode 100644 index 0000000..1315163 --- /dev/null +++ b/Repository/Repository.csproj @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/Repository/TransactionCategoryRepository.cs b/Repository/TransactionCategoryRepository.cs new file mode 100644 index 0000000..717ac77 --- /dev/null +++ b/Repository/TransactionCategoryRepository.cs @@ -0,0 +1,174 @@ +namespace Repository; + +/// +/// 交易分类仓储接口 +/// +public interface ITransactionCategoryRepository : IBaseRepository +{ + /// + /// 根据类型获取所有顶级分类(Level=2,即类型下的分类) + /// + Task> GetTopLevelCategoriesByTypeAsync(TransactionType type); + + /// + /// 根据父分类ID获取子分类 + /// + Task> GetChildCategoriesAsync(long parentId); + + /// + /// 获取完整的分类树(按类型) + /// + Task> GetCategoryTreeAsync(TransactionType? type = null); + + /// + /// 根据名称和父ID查找分类(防止重复) + /// + Task GetByNameAndParentAsync(string name, long parentId, TransactionType type); + + /// + /// 检查分类是否被使用 + /// + Task IsCategoryInUseAsync(long categoryId); +} + +/// +/// 交易分类仓储实现 +/// +public class TransactionCategoryRepository(IFreeSql freeSql) : BaseRepository(freeSql), ITransactionCategoryRepository +{ + /// + /// 根据类型获取所有顶级分类(Level=2) + /// + public async Task> GetTopLevelCategoriesByTypeAsync(TransactionType type) + { + return await FreeSql.Select() + .Where(c => c.Type == type && c.Level == 2 && c.IsEnabled) + .OrderBy(c => c.SortOrder) + .OrderBy(c => c.Name) + .ToListAsync(); + } + + /// + /// 根据父分类ID获取子分类 + /// + public async Task> GetChildCategoriesAsync(long parentId) + { + return await FreeSql.Select() + .Where(c => c.ParentId == parentId && c.IsEnabled) + .OrderBy(c => c.SortOrder) + .OrderBy(c => c.Name) + .ToListAsync(); + } + + /// + /// 获取完整的分类树 + /// + public async Task> GetCategoryTreeAsync(TransactionType? type = null) + { + var query = FreeSql.Select() + .Where(c => c.IsEnabled); + + if (type.HasValue) + { + query = query.Where(c => c.Type == type.Value); + } + + var allCategories = await query + .OrderBy(c => c.Type) + .OrderBy(c => c.SortOrder) + .OrderBy(c => c.Name) + .ToListAsync(); + + // 构建树形结构(Level 2为根节点,即各个分类) + var result = new List(); + var level2Categories = allCategories.Where(c => c.Level == 2).ToList(); + + foreach (var category in level2Categories) + { + var treeNode = new TransactionCategoryTreeDto + { + Id = category.Id, + Name = category.Name, + Type = category.Type, + Level = category.Level, + Icon = category.Icon, + Children = BuildChildrenTree(category.Id, allCategories) + }; + result.Add(treeNode); + } + + return result; + } + + /// + /// 递归构建子分类树 + /// + private List BuildChildrenTree(long parentId, List allCategories) + { + var children = allCategories.Where(c => c.ParentId == parentId).ToList(); + var result = new List(); + + foreach (var child in children) + { + var treeNode = new TransactionCategoryTreeDto + { + Id = child.Id, + Name = child.Name, + Type = child.Type, + Level = child.Level, + Icon = child.Icon, + Children = BuildChildrenTree(child.Id, allCategories) + }; + result.Add(treeNode); + } + + return result; + } + + /// + /// 根据名称和父ID查找分类 + /// + public async Task GetByNameAndParentAsync(string name, long parentId, TransactionType type) + { + return await FreeSql.Select() + .Where(c => c.Name == name && c.ParentId == parentId && c.Type == type) + .FirstAsync(); + } + + /// + /// 检查分类是否被使用 + /// + public async Task IsCategoryInUseAsync(long categoryId) + { + // 检查是否有交易记录使用此分类 + var category = await GetByIdAsync(categoryId); + if (category == null) return false; + + // 根据层级检查不同的字段 + var count = category.Level switch + { + 2 => await FreeSql.Select() + .Where(r => r.Classify == category.Name && r.Type == category.Type) + .CountAsync(), + 3 => await FreeSql.Select() + .Where(r => r.SubClassify == category.Name && r.Type == category.Type) + .CountAsync(), + _ => 0 + }; + + return count > 0; + } +} + +/// +/// 分类树DTO +/// +public class TransactionCategoryTreeDto +{ + public long Id { get; set; } + public string Name { get; set; } = string.Empty; + public TransactionType Type { get; set; } + public int Level { get; set; } + public string? Icon { get; set; } + public List Children { get; set; } = new(); +} diff --git a/Repository/TransactionRecordRepository.cs b/Repository/TransactionRecordRepository.cs new file mode 100644 index 0000000..96216cc --- /dev/null +++ b/Repository/TransactionRecordRepository.cs @@ -0,0 +1,183 @@ +namespace Repository; + +public interface ITransactionRecordRepository : IBaseRepository +{ + Task ExistsByEmailMessageIdAsync(long emailMessageId, DateTime occurredAt); + + Task ExistsByImportNoAsync(string importNo, string importFrom); + + /// + /// 分页获取交易记录列表(游标分页) + /// + /// 上一页最后一条记录的发生时间 + /// 上一页最后一条记录的ID + /// 每页数量 + /// 搜索关键词(搜索交易摘要和分类) + /// 交易记录列表、最后发生时间和最后ID + Task<(List list, DateTime? lastOccurredAt, long lastId)> GetPagedListAsync(DateTime? lastOccurredAt, long? lastId, int pageSize = 20, string? searchKeyword = null); + + /// + /// 获取总数 + /// + Task GetTotalCountAsync(); + + /// + /// 获取所有不同的交易分类 + /// + Task> GetDistinctClassifyAsync(); + + /// + /// 获取所有不同的交易子分类 + /// + Task> GetDistinctSubClassifyAsync(); + + /// + /// 获取指定月份每天的消费统计 + /// + /// 年份 + /// 月份 + /// 每天的消费笔数和金额 + Task> GetDailyStatisticsAsync(int year, int month); + + /// + /// 获取指定日期范围内的交易记录 + /// + /// 开始日期 + /// 结束日期 + /// 交易记录列表 + Task> GetByDateRangeAsync(DateTime startDate, DateTime endDate); + + /// + /// 获取指定邮件的交易记录数量 + /// + /// 邮件ID + /// 交易记录数量 + Task GetCountByEmailIdAsync(long emailMessageId); + + /// + /// 获取指定邮件的交易记录列表 + /// + /// 邮件ID + /// 交易记录列表 + Task> GetByEmailIdAsync(long emailMessageId); +} + +public class TransactionRecordRepository(IFreeSql freeSql) : BaseRepository(freeSql), ITransactionRecordRepository +{ + public async Task ExistsByEmailMessageIdAsync(long emailMessageId, DateTime occurredAt) + { + return await FreeSql.Select() + .Where(t => t.EmailMessageId == emailMessageId && t.OccurredAt == occurredAt) + .FirstAsync(); + } + + public async Task ExistsByImportNoAsync(string importNo, string importFrom) + { + return await FreeSql.Select() + .Where(t => t.ImportNo == importNo && t.ImportFrom == importFrom) + .FirstAsync(); + } + + public async Task<(List list, DateTime? lastOccurredAt, long lastId)> GetPagedListAsync(DateTime? lastOccurredAt, long? lastId, int pageSize = 20, string? searchKeyword = null) + { + var query = FreeSql.Select(); + + // 如果提供了搜索关键词,则添加搜索条件 + if (!string.IsNullOrWhiteSpace(searchKeyword)) + { + query = query.Where(t => t.Reason.Contains(searchKeyword) || + t.Classify.Contains(searchKeyword) || + t.SubClassify.Contains(searchKeyword) || + t.Card.Contains(searchKeyword) || + t.ImportFrom.Contains(searchKeyword)); + } + + // 如果提供了游标,则获取小于游标位置的记录 + if (lastOccurredAt.HasValue && lastId.HasValue) + { + query = query.Where(t => t.OccurredAt < lastOccurredAt.Value || + (t.OccurredAt == lastOccurredAt.Value && t.Id < lastId.Value)); + } + + var list = await query + .OrderByDescending(t => t.OccurredAt) + .OrderByDescending(t => t.Id) + .Page(1, pageSize) + .ToListAsync(); + + var lastRecord = list.Count > 0 ? list.Last() : null; + return (list, lastRecord?.OccurredAt, lastRecord?.Id ?? 0); + } + + public async Task GetTotalCountAsync() + { + return await FreeSql.Select().CountAsync(); + } + + public async Task> GetDistinctClassifyAsync() + { + return await FreeSql.Select() + .Where(t => !string.IsNullOrEmpty(t.Classify)) + .Distinct() + .ToListAsync(t => t.Classify); + } + + public async Task> GetDistinctSubClassifyAsync() + { + return await FreeSql.Select() + .Where(t => !string.IsNullOrEmpty(t.SubClassify)) + .Distinct() + .ToListAsync(t => t.SubClassify); + } + + public async Task> GetDailyStatisticsAsync(int year, int month) + { + var startDate = new DateTime(year, month, 1); + var endDate = startDate.AddMonths(1); + + var records = await FreeSql.Select() + .Where(t => t.OccurredAt >= startDate && t.OccurredAt < endDate) + .Where(t => t.Type == TransactionType.Expense || t.Type == TransactionType.Income) // 统计消费和收入 + .ToListAsync(); + + var statistics = records + .GroupBy(t => t.OccurredAt.ToString("yyyy-MM-dd")) + .ToDictionary( + g => g.Key, + g => + { + // 分别统计收入和支出 + var income = g.Where(t => t.Type == TransactionType.Income).Sum(t => t.Amount); + var expense = g.Where(t => t.Type == TransactionType.Expense).Sum(t => t.Amount); + // 净额 = 收入 - 支出(消费大于收入时为负数) + var netAmount = income - expense; + return (count: g.Count(), amount: netAmount); + } + ); + + return statistics; + } + + public async Task> GetByDateRangeAsync(DateTime startDate, DateTime endDate) + { + return await FreeSql.Select() + .Where(t => t.OccurredAt >= startDate && t.OccurredAt <= endDate) + .OrderBy(t => t.OccurredAt) + .ToListAsync(); + } + + public async Task GetCountByEmailIdAsync(long emailMessageId) + { + return (int)await FreeSql.Select() + .Where(t => t.EmailMessageId == emailMessageId) + .CountAsync(); + } + + public async Task> GetByEmailIdAsync(long emailMessageId) + { + return await FreeSql.Select() + .Where(t => t.EmailMessageId == emailMessageId) + .OrderBy(t => t.OccurredAt) + .ToListAsync(); + } +} \ No newline at end of file diff --git a/Service/AppSettingModel/AISettings.cs b/Service/AppSettingModel/AISettings.cs new file mode 100644 index 0000000..f83b986 --- /dev/null +++ b/Service/AppSettingModel/AISettings.cs @@ -0,0 +1,8 @@ +namespace Service.AppSettingModel; + +public class AISettings +{ + public string Endpoint { get; set; } = string.Empty; + public string Key { get; set; } = string.Empty; + public string Model { get; set; } = string.Empty; +} diff --git a/Service/AppSettingModel/EmailConfigItem.cs b/Service/AppSettingModel/EmailConfigItem.cs new file mode 100644 index 0000000..68846cd --- /dev/null +++ b/Service/AppSettingModel/EmailConfigItem.cs @@ -0,0 +1,14 @@ +namespace Service.AppSettingModel; + +/// +/// 邮箱配置项 +/// +public class EmailConfigItem +{ + public string Name { get; set; } = string.Empty; + public string Email { get; set; } = string.Empty; + public string Password { get; set; } = string.Empty; + public string ImapHost { get; set; } = string.Empty; + public int ImapPort { get; set; } = 993; + public bool UseSsl { get; set; } = true; +} diff --git a/Service/AppSettingModel/EmailSettings.cs b/Service/AppSettingModel/EmailSettings.cs new file mode 100644 index 0000000..bdf9312 --- /dev/null +++ b/Service/AppSettingModel/EmailSettings.cs @@ -0,0 +1,11 @@ +namespace Service.AppSettingModel; + +/// +/// 邮箱设置配置 +/// +public class EmailSettings +{ + public int CheckIntervalMinutes { get; set; } = 1; + public EmailConfigItem[] SmtpList { get; set; } = []; + public string[] FilterFromAddresses { get; set; } = []; +} diff --git a/Service/EmailBackgroundService.cs b/Service/EmailBackgroundService.cs new file mode 100644 index 0000000..0314f37 --- /dev/null +++ b/Service/EmailBackgroundService.cs @@ -0,0 +1,236 @@ +using System.ComponentModel; +using MimeKit; + +namespace Service; + +public interface IEmailBackgroundService +{ + /// + /// 手动触发邮件同步 + /// + Task SyncEmailsAsync(); +} + +public class EmailBackgroundService( + IOptions emailSettings, + IServiceProvider serviceProvider, + IEmailHandleService emailHandleService, + ILogger logger) + : BackgroundWorker, IEmailBackgroundService +{ + private readonly Dictionary _emailFetchServices = new(); + private bool _isInitialized; + + protected override async void OnDoWork(DoWorkEventArgs e) + { + try + { + // 启动时建立所有连接 + await InitializeConnectionsAsync(); + + while (!CancellationPending) + { + try + { + await FetchAndPostCmbTransactionsAsync(); + } + catch (Exception ex) + { + logger.LogError(ex, "后台任务执行出错"); + } + + // 使用 Thread.Sleep 在异步操作中不阻塞 + Thread.Sleep(1000 * 60 * 10); // 每10分钟执行一次任务 + } + } + catch (Exception ex) + { + logger.LogError(ex, "后台服务工作线程出错"); + } + finally + { + // 停止时断开所有连接 + try + { + await DisconnectAllAsync(); + } + catch (Exception ex) + { + logger.LogError(ex, "断开连接时出错"); + } + } + } + + /// + /// 初始化所有邮箱连接 + /// + private async Task InitializeConnectionsAsync() + { + if (_isInitialized) + { + logger.LogWarning("连接已初始化,跳过重复初始化"); + return; + } + + try + { + if (emailSettings.Value.SmtpList.Length == 0) + { + logger.LogWarning("未配置邮箱账户,无法初始化连接"); + return; + } + + logger.LogInformation("开始初始化 {EmailCount} 个邮箱连接...", emailSettings.Value.SmtpList.Length); + + // 并行初始化所有邮箱连接 + var tasks = emailSettings.Value.SmtpList.Select(async emailConfig => + { + try + { + var emailFetchService = ActivatorUtilities.CreateInstance(serviceProvider); + var success = await emailFetchService.ConnectAsync( + emailConfig.ImapHost, + emailConfig.ImapPort, + emailConfig.UseSsl, + emailConfig.Email, + emailConfig.Password); + + if (success) + { + _emailFetchServices[emailConfig.Email] = emailFetchService; + logger.LogInformation("邮箱 {Email} 连接建立成功", emailConfig.Email); + } + else + { + logger.LogError("邮箱 {Email} 连接建立失败", emailConfig.Email); + } + } + catch (Exception ex) + { + logger.LogError(ex, "初始化邮箱 {Email} 连接时出错", emailConfig.Email); + } + }); + + await Task.WhenAll(tasks); + _isInitialized = true; + logger.LogInformation("所有邮箱连接初始化完成,成功连接 {Count} 个邮箱", _emailFetchServices.Count); + } + catch (Exception ex) + { + logger.LogError(ex, "初始化邮箱连接失败"); + } + } + + /// + /// 断开所有邮箱连接 + /// + private async Task DisconnectAllAsync() + { + logger.LogInformation("开始断开所有邮箱连接..."); + + var tasks = _emailFetchServices.Select(async kvp => + { + try + { + await kvp.Value.DisconnectAsync(); + logger.LogInformation("邮箱 {Email} 已断开连接", kvp.Key); + } + catch (Exception ex) + { + logger.LogError(ex, "断开邮箱 {Email} 连接时出错", kvp.Key); + } + }); + + await Task.WhenAll(tasks); + _emailFetchServices.Clear(); + _isInitialized = false; + logger.LogInformation("所有邮箱连接已断开"); + } + + /// + /// 手动触发邮件同步(公开方法) + /// + public async Task SyncEmailsAsync() + { + await FetchAndPostCmbTransactionsAsync(); + } + + /// + /// 抓取并处理招商银行邮件交易 + /// + private async Task FetchAndPostCmbTransactionsAsync() + { + try + { + if (_emailFetchServices.Count == 0) + { + logger.LogWarning("没有可用的邮箱连接,跳过抓取"); + return; + } + + logger.LogInformation("开始抓取 {EmailCount} 个邮箱的邮件", _emailFetchServices.Count); + + // 并行处理多个邮箱 + var tasks = _emailFetchServices.Select(async kvp => + { + var email = kvp.Key; + var emailFetchService = kvp.Value; + + try + { + // 获取未读邮件 + var unreadMessages = await emailFetchService.FetchUnreadMessagesAsync(); + logger.LogInformation("邮箱 {Email} 获取到 {MessageCount} 封未读邮件", email, unreadMessages.Count); + + foreach (var (message, uid) in unreadMessages) + { + try + { + logger.LogDebug("邮件信息 - 发送者: {From}, 主题: {Subject}, 接收时间: {Date}", + message.From, message.Subject, message.Date); + logger.LogDebug("邮件内容预览: {Preview}", GetEmailBodyPreview(message)); + + if (await emailHandleService.HandleEmailAsync( + message.From.ToString(), + message.Subject, + message.Date.DateTime, + message.TextBody ?? message.HtmlBody ?? string.Empty + )) + { + // 标记邮件为已读 + await emailFetchService.MarkAsReadAsync(uid); + } + } + catch (Exception ex) + { + logger.LogError(ex, "处理邮件时出错"); + } + } + + logger.LogInformation("邮箱 {Email} 邮件抓取完成", email); + } + catch (Exception ex) + { + logger.LogError(ex, "邮箱 {Email} 邮件抓取失败", email); + } + }); + + await Task.WhenAll(tasks); + logger.LogInformation("所有邮箱邮件抓取完成"); + } + catch (Exception ex) + { + logger.LogError(ex, "抓取邮件异常"); + } + } + + /// + /// 获取邮件内容预览 + /// + private static string GetEmailBodyPreview(MimeMessage message) + { + var body = message.HtmlBody ?? message.TextBody ?? string.Empty; + var preview = body.Length > 100 ? body.Substring(0, 100) + "..." : body; + return preview.Replace("\n", " ").Replace("\r", ""); + } +} \ No newline at end of file diff --git a/Service/EmailFetchService.cs b/Service/EmailFetchService.cs new file mode 100644 index 0000000..040e97d --- /dev/null +++ b/Service/EmailFetchService.cs @@ -0,0 +1,253 @@ +using MailKit; +using MailKit.Net.Imap; +using MailKit.Search; +using MailKit.Security; +using MimeKit; + +namespace Service; + +/// +/// 邮件抓取服务接口 +/// +public interface IEmailFetchService +{ + /// + /// 连接状态 + /// + bool IsConnected { get; } + + /// + /// 连接到邮件服务器 + /// + Task ConnectAsync(string host, int port, bool useSsl, string email, string password); + + /// + /// 从收件箱获取未读邮件 + /// + Task> FetchUnreadMessagesAsync(); + + /// + /// 获取所有邮件 + /// + Task> FetchAllMessagesAsync(); + + /// + /// 断开与邮件服务器的连接 + /// + Task DisconnectAsync(); + + /// + /// 标记邮件为已读 + /// + Task MarkAsReadAsync(UniqueId uid); + + /// + /// 确保连接有效,如断开则自动重连 + /// + Task EnsureConnectedAsync(); +} + +/// +/// 邮件抓取服务实现 +/// +public class EmailFetchService(ILogger logger) : IEmailFetchService +{ + private ImapClient? _imapClient; + private string _host = string.Empty; + private int _port; + private bool _useSsl; + private string _email = string.Empty; + private string _password = string.Empty; + private DateTime _lastKeepAlive = DateTime.MinValue; + private const int KeepAliveIntervalSeconds = 300; // 5分钟发送一次KeepAlive + private readonly ILogger _logger = logger; + + public bool IsConnected => _imapClient?.IsConnected == true; + + public async Task ConnectAsync(string host, int port, bool useSsl, string email, string password) + { + try + { + // 保存连接信息用于自动重连 + _host = host; + _port = port; + _useSsl = useSsl; + _email = email; + _password = password; + + // 如果已连接,先断开 + if (_imapClient?.IsConnected == true) + { + await DisconnectAsync(); + } + + _imapClient = new ImapClient(); + + if (useSsl) + { + await _imapClient.ConnectAsync(host, port, SecureSocketOptions.SslOnConnect); + } + else + { + await _imapClient.ConnectAsync(host, port, SecureSocketOptions.StartTlsWhenAvailable); + } + + await _imapClient.AuthenticateAsync(email, password); + _logger.LogInformation("邮箱 {Email} 连接成功", email); + _lastKeepAlive = DateTime.UtcNow; + return true; + } + catch (Exception ex) + { + _logger.LogError(ex, "邮件连接失败 ({Email}): {Message}", email, ex.Message); + return false; + } + } + + public async Task> FetchUnreadMessagesAsync() + { + var result = new List<(MimeMessage, UniqueId)>(); + + try + { + // 确保连接有效 + if (!await EnsureConnectedAsync()) + return result; + + var inbox = _imapClient?.Inbox; + if (inbox == null) + return result; + + await inbox.OpenAsync(FolderAccess.ReadWrite); + + // 查询未读邮件 + var unreadUids = await inbox.SearchAsync(SearchQuery.NotSeen); + + foreach (var uid in unreadUids) + { + var message = await inbox.GetMessageAsync(uid); + result.Add((message, uid)); + } + + return result; + } + catch (Exception ex) + { + _logger.LogError(ex, "获取未读邮件失败: {Message}", ex.Message); + return result; + } + } + + public async Task> FetchAllMessagesAsync() + { + var result = new List<(MimeMessage, UniqueId)>(); + + try + { + // 确保连接有效 + if (!await EnsureConnectedAsync()) + return result; + + var inbox = _imapClient?.Inbox; + if (inbox == null) + return result; + + await inbox.OpenAsync(FolderAccess.ReadWrite); + + var uids = await inbox.SearchAsync(SearchQuery.All); + + foreach (var uid in uids) + { + var message = await inbox.GetMessageAsync(uid); + result.Add((message, uid)); + } + + return result; + } + catch (Exception ex) + { + _logger.LogError(ex, "获取所有邮件失败: {Message}", ex.Message); + return result; + } + } + + public async Task DisconnectAsync() + { + try + { + if (_imapClient?.IsConnected == true) + { + await _imapClient.DisconnectAsync(true); + _logger.LogInformation("邮箱 {Email} 已断开连接", _email); + } + + _imapClient?.Dispose(); + _imapClient = null; + } + catch (Exception ex) + { + _logger.LogError(ex, "断开连接失败 ({Email}): {Message}", _email, ex.Message); + } + } + + public async Task MarkAsReadAsync(UniqueId uid) + { + try + { + if (!await EnsureConnectedAsync()) + return; + + var inbox = _imapClient?.Inbox; + if (inbox == null) + return; + + // 打开收件箱以读写模式 + await inbox.OpenAsync(FolderAccess.ReadWrite); + + // 标记邮件为已读(设置Seen标记) + await inbox.AddFlagsAsync(uid, MessageFlags.Seen, silent: false); + + _logger.LogDebug("邮件 {Uid} 标记已读操作已提交", uid); + } + catch (Exception ex) + { + _logger.LogError(ex, "标记邮件为已读失败: {Message}", ex.Message); + } + } + + /// + /// 确保连接有效,如果断开则自动重连 + /// + public async Task EnsureConnectedAsync() + { + if (_imapClient?.IsConnected == true) + { + // 定期发送NOOP保持连接活跃(防止超时断开) + var timeSinceLastKeepAlive = (DateTime.UtcNow - _lastKeepAlive).TotalSeconds; + if (timeSinceLastKeepAlive > KeepAliveIntervalSeconds) + { + try + { + await _imapClient.NoOpAsync(); + _lastKeepAlive = DateTime.UtcNow; + _logger.LogDebug("邮箱 {Email} KeepAlive 保活信号已发送", _email); + } + catch (Exception ex) + { + // NOOP失败,说明连接已断开,继续重连逻辑 + _logger.LogWarning(ex, "KeepAlive 失败,连接已断开: {Message}", ex.Message); + } + } + return _imapClient?.IsConnected == true; + } + + if (string.IsNullOrEmpty(_host) || string.IsNullOrEmpty(_email)) + { + _logger.LogWarning("未初始化连接信息,无法自动重连"); + return false; + } + + _logger.LogInformation("检测到连接断开,尝试重新连接到 {Email}...", _email); + return await ConnectAsync(_host, _port, _useSsl, _email, _password); + } +} diff --git a/Service/EmailHandleService.cs b/Service/EmailHandleService.cs new file mode 100644 index 0000000..98b2819 --- /dev/null +++ b/Service/EmailHandleService.cs @@ -0,0 +1,275 @@ +using Service.EmailParseServices; + +namespace Service; + +public interface IEmailHandleService +{ + Task HandleEmailAsync( + string from, + string subject, + DateTime date, + string body + ); + + Task RefreshTransactionRecordsAsync(long emailMessageId); +} + +public class EmailHandleService( + IOptions emailSettings, + ILogger logger, + IEmailMessageRepository emailRepo, + ITransactionRecordRepository trxRepo, + IEnumerable emailParsers +) : IEmailHandleService +{ + public async Task HandleEmailAsync( + string from, + string subject, + DateTime date, + string body + ) + { + var emailMessage = await SaveEmailAsync(from, subject, date, body); + + if (emailMessage == null) + { + throw new InvalidOperationException("邮件保存失败,无法继续处理"); + } + + var filterForm = emailSettings.Value.FilterFromAddresses; + if (filterForm.Length == 0) + { + logger.LogWarning("未配置邮件过滤条件,跳过账单处理"); + return true; + } + + if (!filterForm.Any(f => from.Contains(f))) + { + logger.LogInformation("邮件不符合发件人过滤条件,跳过账单处理"); + return true; + } + + var parsed = await ParseEmailBodyAsync( + from, + string.IsNullOrEmpty(emailMessage.Body) + ? emailMessage.HtmlBody + : emailMessage.Body + ); + if (parsed == null || parsed.Length == 0) + { + logger.LogWarning("未能成功解析邮件内容,跳过账单处理"); + return true; + } + + logger.LogInformation("成功解析邮件,共 {Count} 条交易记录", parsed.Length); + + bool allSuccess = true; + foreach (var (card, reason, amount, balance, type, occurredAt) in parsed) + { + logger.LogInformation("处理交易记录: 卡号 {Card}, 交易原因 {Reason}, 金额 {Amount}, 余额 {Balance}, 类型 {Type}", card, reason, amount, balance, type); + + var success = await SaveTransactionRecordAsync( + card, + reason, + amount, + balance, + type, + occurredAt ?? date, + emailMessage.Id + ); + + if (!success) + { + allSuccess = false; + } + } + + return allSuccess; + } + + public async Task RefreshTransactionRecordsAsync(long emailMessageId) + { + var emailMessage = await emailRepo.GetByIdAsync(emailMessageId); + + if (emailMessage == null) + { + logger.LogWarning("未找到指定ID的邮件记录,无法刷新交易记录,ID: {Id}", emailMessageId); + return false; + } + + var filterForm = emailSettings.Value.FilterFromAddresses; + if (filterForm.Length == 0) + { + logger.LogWarning("未配置邮件过滤条件,跳过账单处理"); + return false; + } + + if (!filterForm.Any(f => emailMessage.From.Contains(f))) + { + logger.LogInformation("邮件不符合发件人过滤条件,跳过账单处理"); + return true; + } + + var parsed = await ParseEmailBodyAsync( + emailMessage.From, + string.IsNullOrEmpty(emailMessage.Body) + ? emailMessage.HtmlBody + : emailMessage.Body + ); + if (parsed == null || parsed.Length == 0) + { + logger.LogWarning("未能成功解析邮件内容,跳过账单处理"); + return false; + } + + logger.LogInformation("成功解析邮件,共 {Count} 条交易记录", parsed.Length); + + bool allSuccess = true; + foreach (var (card, reason, amount, balance, type, occurredAt) in parsed) + { + logger.LogInformation("刷新交易记录: 卡号 {Card}, 交易原因 {Reason}, 金额 {Amount}, 余额 {Balance}, 类型 {Type}", card, reason, amount, balance, type); + + var success = await SaveTransactionRecordAsync( + card, + reason, + amount, + balance, + type, + occurredAt ?? emailMessage.ReceivedDate, + emailMessage.Id + ); + + if (!success) + { + allSuccess = false; + } + } + + return allSuccess; + } + + private async Task SaveEmailAsync( + string from, + string subject, + DateTime date, + string body + ) + { + var emailEntity = new EmailMessage + { + From = from, + Subject = subject, + + ReceivedDate = date, + }; + + // 正则判断是否为HTML内容 + if (Regex.IsMatch(body, @"<[^>]+>")) + { + emailEntity.HtmlBody = body; + } + else + { + emailEntity.Body = body; + } + + try + { + var existsEmail = await emailRepo.ExistsAsync(from, subject, date, body); + if (existsEmail != null) + { + logger.LogInformation("检测到重复邮件,跳过入库:{From} | {Subject} | {Date}", from, subject, date); + return existsEmail; + } + + var ok = await emailRepo.AddAsync(emailEntity); + if (ok) + { + logger.LogInformation("邮件已落库,ID: {Id}", emailEntity.Id); + return emailEntity; + } + + logger.LogError("邮件落库失败"); + return null; + } + catch (Exception ex) + { + // 原始邮件落库失败不阻塞交易记录,但记录告警 + logger.LogWarning(ex, "原始邮件落库失败"); + return null; + } + } + + private async Task SaveTransactionRecordAsync( + string card, + string reason, + decimal amount, + decimal balance, + TransactionType type, + DateTime occurredAt, + long emailMessageId + ) + { + // 根据 emailMessageId 检查是否已存在记录:存在则更新,否则新增 + var existing = await trxRepo.ExistsByEmailMessageIdAsync(emailMessageId, occurredAt); + + if (existing != null) + { + existing.Card = card; + existing.Reason = reason; + existing.Amount = amount; + existing.Balance = balance; + existing.Type = type; + existing.OccurredAt = occurredAt; + + var updated = await trxRepo.UpdateAsync(existing); + if (updated) + { + logger.LogInformation("交易记录已更新,卡号 {Card}, 金额 {Amount}", card, amount); + } + else + { + logger.LogWarning("交易记录更新失败,卡号 {Card}, 金额 {Amount}", card, amount); + } + + return updated; + } + + var trx = new TransactionRecord + { + Card = card, + Reason = reason, + Amount = amount, + Balance = balance, + Type = type, + OccurredAt = occurredAt, + EmailMessageId = emailMessageId, + ImportFrom = $"邮件" + }; + + var inserted = await trxRepo.AddAsync(trx); + if (inserted) + { + logger.LogInformation("交易记录已落库,卡号 {Card}, 金额 {Amount}", card, amount); + } + else + { + logger.LogWarning("交易记录落库失败,卡号 {Card}, 金额 {Amount}", card, amount); + } + + return inserted; + } + + private async Task<(string card, string reason, decimal amount, decimal balance, TransactionType type, DateTime? occurredAt)[]?> ParseEmailBodyAsync(string from, string body) + { + var service = emailParsers.FirstOrDefault(s => s.CanParse(from, body)); + + if (service == null) + { + logger.LogWarning("未找到合适的邮件解析服务,跳过解析"); + return null; + } + + return await service.ParseAsync(body); + } +} \ No newline at end of file diff --git a/Service/EmailParseServices/EmailParseForm95555.cs b/Service/EmailParseServices/EmailParseForm95555.cs new file mode 100644 index 0000000..334d27b --- /dev/null +++ b/Service/EmailParseServices/EmailParseForm95555.cs @@ -0,0 +1,71 @@ +namespace Service.EmailParseServices; + +public class EmailParseForm95555( + ILogger logger, + IOpenAiService openAiService +) : EmailParseServicesBase(logger, openAiService) +{ + public override bool CanParse(string from, string body) + { + if (!from.Contains("95555@message.cmbchina.com")) + { + return false; + } + + // 不能包含HTML标签 + if (Regex.IsMatch(body, "<.*?>")) + { + return false; + } + + return true; + } + + public override async Task<( + string card, + string reason, + decimal amount, + decimal balance, + TransactionType type, + DateTime? occurredAt + )[]> ParseEmailContentAsync(string emailContent) + { + var pattern = "您账户(?\\d+)于.*?(?收入|支出|消费|转入|转出)?.*?在?(?.+?)(?\\d+\\.\\d{1,2})元,余额(?\\d+\\.\\d{1,2})"; + + var matches = Regex.Matches(emailContent, pattern); + + if (matches.Count <= 0) + { + logger.LogWarning("未能从招商银行邮件内容中解析出交易信息"); + return []; + } + + var results = new List<( + string card, + string reason, + decimal amount, + decimal balance, + TransactionType type, + DateTime? occurredAt + )>(); + + foreach (Match match in matches) + { + var card = match.Groups["card"].Value; + var reason = match.Groups["reason"].Value; + var amountStr = match.Groups["amount"].Value; + var balanceStr = match.Groups["balance"].Value; + var typeStr = match.Groups["type"].Value; + + if (!string.IsNullOrEmpty(card) && + !string.IsNullOrEmpty(reason) && + decimal.TryParse(amountStr, out var amount) && + decimal.TryParse(balanceStr, out var balance)) + { + var type = DetermineTransactionType(typeStr, reason, amount); + results.Add((card, reason, amount, balance, type, null)); + } + } + return results.ToArray(); + } +} \ No newline at end of file diff --git a/Service/EmailParseServices/EmailParseFormCCSVC.cs b/Service/EmailParseServices/EmailParseFormCCSVC.cs new file mode 100644 index 0000000..bcf49ba --- /dev/null +++ b/Service/EmailParseServices/EmailParseFormCCSVC.cs @@ -0,0 +1,153 @@ +using HtmlAgilityPack; + +namespace Service.EmailParseServices; + +public class EmailParseFormCCSVC( + ILogger logger, + IOpenAiService openAiService +) : EmailParseServicesBase(logger, openAiService) +{ + public override bool CanParse(string from, string body) + { + if (!from.Contains("ccsvc@message.cmbchina.com")) + { + return false; + } + + // 必须包含HTML标签 + if (!Regex.IsMatch(body, "<.*?>")) + { + return false; + } + + return true; + } + + public override async Task<( + string card, + string reason, + decimal amount, + decimal balance, + TransactionType type, + DateTime? occurredAt + )[]> ParseEmailContentAsync(string emailContent) + { + var doc = new HtmlDocument(); + doc.LoadHtml(emailContent); + + var result = new List<(string, string, decimal, decimal, TransactionType, DateTime?)>(); + + // 1. Get Date + var dateNode = doc.DocumentNode.SelectSingleNode("//font[contains(text(), '您的消费明细如下')]"); + if (dateNode == null) + { + logger.LogWarning("Date node not found"); + return Array.Empty<(string, string, decimal, decimal, TransactionType, DateTime?)>(); + } + + var dateText = dateNode.InnerText.Trim(); + // "2025/12/21 您的消费明细如下:" + var dateMatch = Regex.Match(dateText, @"\d{4}/\d{1,2}/\d{1,2}"); + if (!dateMatch.Success || !DateTime.TryParse(dateMatch.Value, out var date)) + { + logger.LogWarning("Failed to parse date from: {DateText}", dateText); + return Array.Empty<(string, string, decimal, decimal, TransactionType, DateTime?)>(); + } + + // 2. Get Balance (Available Limit) + decimal balance = 0; + // Find "可用额度" label + var limitLabelNode = doc.DocumentNode.SelectSingleNode("//font[contains(text(), '可用额度')]"); + if (limitLabelNode != null) + { + // Go up to TR + var tr = limitLabelNode.Ancestors("tr").FirstOrDefault(); + if (tr != null) + { + var prevTr = tr.PreviousSibling; + while (prevTr != null && prevTr.Name != "tr") prevTr = prevTr.PreviousSibling; + + if (prevTr != null) + { + var balanceNode = prevTr.SelectSingleNode(".//font[contains(text(), '¥')]"); + if (balanceNode != null) + { + var balanceStr = balanceNode.InnerText.Replace("¥", "").Replace(",", "").Trim(); + decimal.TryParse(balanceStr, out balance); + } + } + } + } + + // 3. Get Transactions + var transactionNodes = doc.DocumentNode.SelectNodes("//span[@id='fixBand4']"); + if (transactionNodes != null) + { + foreach (var node in transactionNodes) + { + try + { + // Time + var timeNode = node.SelectSingleNode(".//span[@id='fixBand5']//font"); + var timeText = timeNode?.InnerText.Trim(); // "10:13:43" + + DateTime? occurredAt = date; + if (!string.IsNullOrEmpty(timeText) && DateTime.TryParse($"{date:yyyy-MM-dd} {timeText}", out var dt)) + { + occurredAt = dt; + } + + // Info Block + var infoNode = node.SelectSingleNode(".//span[@id='fixBand12']"); + if (infoNode == null) continue; + + // Amount + var amountNode = infoNode.SelectSingleNode(".//font[contains(text(), 'CNY')]"); + var amountText = amountNode?.InnerText.Replace("CNY", "").Replace(" ", "").Trim(); + if (!decimal.TryParse(amountText, out var amount)) + { + continue; + } + + // Description + var descNode = infoNode.SelectSingleNode(".//tr[2]//font"); + var descText = descNode?.InnerText ?? ""; + // Replace   and non-breaking space (\u00A0) with normal space + descText = descText.Replace(" ", " "); + descText = HtmlEntity.DeEntitize(descText).Replace((char)160, ' ').Trim(); + + // Parse Description: "尾号4390 消费 财付通-luckincoffee瑞幸咖啡" + var parts = descText.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); + + string card = ""; + string reason = descText; + TransactionType type = TransactionType.Expense; + + if (parts.Length > 0 && parts[0].StartsWith("尾号")) + { + card = parts[0].Replace("尾号", ""); + } + + if (parts.Length > 1) + { + var typeStr = parts[1]; + type = DetermineTransactionType(typeStr, reason, amount); + } + + if (parts.Length > 2) + { + reason = string.Join(" ", parts.Skip(2)); + } + + result.Add((card, reason, amount, balance, type, occurredAt)); + } + catch (Exception ex) + { + logger.LogError(ex, "Error parsing transaction node"); + } + } + } + + return await Task.FromResult(result.ToArray()); + } +} \ No newline at end of file diff --git a/Service/EmailParseServices/IEmailParseServices.cs b/Service/EmailParseServices/IEmailParseServices.cs new file mode 100644 index 0000000..4d757f6 --- /dev/null +++ b/Service/EmailParseServices/IEmailParseServices.cs @@ -0,0 +1,211 @@ +namespace Service.EmailParseServices; + +public interface IEmailParseServices +{ + bool CanParse(string from, string body); + + /// + /// 解析邮件内容,提取交易信息 + /// + Task<( + string card, + string reason, + decimal amount, + decimal balance, + TransactionType type, + DateTime? occurredAt + )[]> ParseAsync(string emailContent); +} + +public abstract class EmailParseServicesBase( + ILogger logger, + IOpenAiService openAiService +) : IEmailParseServices +{ + public abstract bool CanParse(string from, string body); + + public async Task<( + string card, + string reason, + decimal amount, + decimal balance, + TransactionType type, + DateTime? occurredAt + )[]> ParseAsync(string emailContent) + { + var result = await ParseEmailContentAsync(emailContent); + + if (result.Length > 0) + { + logger.LogInformation("使用规则成功解析邮件内容,提取到 {Count} 条交易记录", result.Length); + return result; + } + + logger.LogInformation("规则解析邮件内容失败,尝试使用AI进行解析"); + // AI兜底 + result = await ParseByAiAsync(emailContent) ?? []; + + if(result.Length == 0) + { + logger.LogWarning("AI解析邮件内容也未能提取到任何交易记录"); + } + + return result; + } + + public abstract Task<( + string card, + string reason, + decimal amount, + decimal balance, + TransactionType type, + DateTime? occurredAt + )[]> ParseEmailContentAsync(string emailContent); + + private async Task<( + string card, + string reason, + decimal amount, + decimal balance, + TransactionType type, + DateTime? occurredAt + )[]?> ParseByAiAsync(string body) + { + var systemPrompt = "你是一个信息抽取助手。仅输出严格的JSON数组,不要包含任何多余文本。每个交易记录包含字段: card(字符串), reason(字符串), amount(数字), balance(数字), type(字符串,值为'收入'或'支出'), occurredAt(字符串,yyyy-MM-dd HH:mm:ss格式日期时间)。如果缺失,请推断或置空。"; + var userPrompt = $"从下面这封银行账单相关邮件正文中提取所有交易记录,返回JSON数组格式,每个元素包含: card, reason, amount, balance, type(收入或支出), occurredAt(非必要)。正文如下:\n\n{body}"; + + var contentText = await openAiService.ChatAsync(systemPrompt, userPrompt); + if (string.IsNullOrWhiteSpace(contentText)) + { + logger.LogWarning("AI未返回任何内容,无法解析邮件"); + return null; + } + + logger.LogDebug("AI返回的内容: {Content}", contentText); + // 清理可能的 markdown 代码块标记 + contentText = contentText.Trim(); + if (contentText.StartsWith("```")) + { + // 移除开头的 ```json 或 ``` + var firstNewLine = contentText.IndexOf('\n'); + if (firstNewLine > 0) + { + contentText = contentText.Substring(firstNewLine + 1); + } + + // 移除结尾的 ``` + if (contentText.EndsWith("```")) + { + contentText = contentText.Substring(0, contentText.Length - 3); + } + + contentText = contentText.Trim(); + } + + // contentText 期望是 JSON 数组 + using var jsonDoc = JsonDocument.Parse(contentText); + var arrayElement = jsonDoc.RootElement; + + // 如果返回的是单个对象而不是数组,尝试兼容处理 + if (arrayElement.ValueKind == JsonValueKind.Object) + { + logger.LogWarning("AI返回的内容是单个对象而非数组,尝试兼容处理"); + var result = ParseSingleRecord(arrayElement); + return result != null ? [result.Value] : null; + } + + if (arrayElement.ValueKind != JsonValueKind.Array) + { + logger.LogWarning("AI返回的内容不是JSON数组,无法解析邮件"); + return null; + } + + var results = new List<(string card, string reason, decimal amount, decimal balance, TransactionType type, DateTime? occurredAt)>(); + + foreach (var obj in arrayElement.EnumerateArray()) + { + var record = ParseSingleRecord(obj); + if (record != null) + { + logger.LogInformation("解析到一条交易记录: {@Record}", record.Value); + results.Add(record.Value); + } + } + + logger.LogInformation("使用AI成功解析邮件内容,提取到 {Count} 条交易记录", results.Count); + return results.Count > 0 ? results.ToArray() : null; + } + + private (string card, string reason, decimal amount, decimal balance, TransactionType type, DateTime? occurredAt)? ParseSingleRecord(JsonElement obj) + { + string card = obj.TryGetProperty("card", out var pCard) ? pCard.GetString() ?? string.Empty : string.Empty; + string reason = obj.TryGetProperty("reason", out var pReason) ? pReason.GetString() ?? string.Empty : string.Empty; + string typeStr = obj.TryGetProperty("type", out var pType) ? pType.GetString() ?? string.Empty : string.Empty; + string occurredAtStr = obj.TryGetProperty("occurredAt", out var pOccurredAt) ? pOccurredAt.GetString() ?? string.Empty : string.Empty; + + decimal amount = 0m; + if (obj.TryGetProperty("amount", out var pAmount)) + { + if (pAmount.ValueKind == JsonValueKind.Number && pAmount.TryGetDecimal(out var d)) amount = d; + else if (pAmount.ValueKind == JsonValueKind.String && decimal.TryParse(pAmount.GetString(), NumberStyles.Any, CultureInfo.InvariantCulture, out var ds)) amount = ds; + } + + decimal balance = 0m; + if (obj.TryGetProperty("balance", out var pBalance)) + { + if (pBalance.ValueKind == JsonValueKind.Number && pBalance.TryGetDecimal(out var d2)) balance = d2; + else if (pBalance.ValueKind == JsonValueKind.String && decimal.TryParse(pBalance.GetString(), NumberStyles.Any, CultureInfo.InvariantCulture, out var ds2)) balance = ds2; + } + + if (string.IsNullOrWhiteSpace(card) || string.IsNullOrWhiteSpace(reason)) + { + return null; + } + + var occurredAt = (DateTime?)null; + if(DateTime.TryParse(occurredAtStr, out var occurredAtValue)) + { + occurredAt = occurredAtValue; + } + + var type = DetermineTransactionType(typeStr, reason, amount); + return (card, reason, amount, balance, type, occurredAt); + } + + /// + /// 判断交易类型 + /// + protected TransactionType DetermineTransactionType(string typeStr, string reason, decimal amount) + { + // 优先使用明确的类型字符串 + if (!string.IsNullOrWhiteSpace(typeStr)) + { + if (typeStr.Contains("收入") || typeStr.Contains("income") || typeStr.Equals("收", StringComparison.OrdinalIgnoreCase)) + return TransactionType.Income; + if (typeStr.Contains("支出") || typeStr.Contains("expense") || typeStr.Equals("支", StringComparison.OrdinalIgnoreCase)) + return TransactionType.Expense; + } + + // 根据交易原因中的关键词判断 + var lowerReason = reason.ToLower(); + + // 收入关键词 + string[] incomeKeywords = { "工资", "奖金", "退款", "返现", "收入", "转入", "存入", "利息", "分红" }; + if (incomeKeywords.Any(k => lowerReason.Contains(k))) + return TransactionType.Income; + + // 支出关键词 + string[] expenseKeywords = { "消费", "支付", "购买", "转出", "取款", "支出", "扣款", "缴费" }; + if (expenseKeywords.Any(k => lowerReason.Contains(k))) + return TransactionType.Expense; + + // 根据金额正负判断(如果金额为负数,可能是支出) + if (amount < 0) + return TransactionType.Expense; + if (amount > 0) + return TransactionType.Income; + + // 默认为支出 + return TransactionType.Expense; + } +} \ No newline at end of file diff --git a/Service/GlobalUsings.cs b/Service/GlobalUsings.cs new file mode 100644 index 0000000..76859c8 --- /dev/null +++ b/Service/GlobalUsings.cs @@ -0,0 +1,13 @@ +global using Repository; +global using Microsoft.Extensions.DependencyInjection; +global using Microsoft.Extensions.Logging; +global using System.Text.RegularExpressions; +global using Microsoft.Extensions.Options; +global using System.Globalization; +global using System.Text; +global using System.Text.Json; +global using Entity; +global using FreeSql; +global using System.Linq; +global using System.Security.Cryptography; +global using Service.AppSettingModel; \ No newline at end of file diff --git a/Service/ImportService.cs b/Service/ImportService.cs new file mode 100644 index 0000000..47ac87f --- /dev/null +++ b/Service/ImportService.cs @@ -0,0 +1,499 @@ +using CsvHelper; +using CsvHelper.Configuration; +using OfficeOpenXml; + +namespace Service; + +public interface IImportService +{ + /// + /// 导入支付宝账单 + /// + Task<(bool ok, string message)> ImportAlipayAsync(MemoryStream file, string fileExtension); + + /// + /// 导入微信账单 + /// + Task<(bool ok, string message)> ImportWeChatAsync(MemoryStream file, string fileExtension); +} + +public class ImportService( + ILogger logger, + ITransactionRecordRepository transactionRecordRepository +) : IImportService +{ + public async Task<(bool ok, string message)> ImportAlipayAsync(MemoryStream file, string fileExtension) + { + var content = await ParseAsync(file, fileExtension); + logger.LogInformation("转换后的支付宝账单数据行数: {RowCount}", content.Length); + + if (content.Length == 0) + { + logger.LogWarning("支付宝账单文件解析后无数据行"); + return (false, "支付宝账单文件解析后无数据行"); + } + + var addTransactionRecords = new List(); + var updateTransactionRecords = new List(); + foreach (var row in content) + { + var importNo = row.ContainsKey("交易号") ? row["交易号"] : string.Empty; + + if (string.IsNullOrWhiteSpace(importNo)) + { + logger.LogWarning("跳过无交易号的记录: {Row}", row); + continue; + } + + var existingRecord = await transactionRecordRepository.ExistsByImportNoAsync(importNo, "支付宝"); + + if (existingRecord != null) + { + existingRecord.Reason = GetReason(row); + existingRecord.Amount = GetDecimalValue(row, "金额(元)"); + existingRecord.RefundAmount = GetDecimalValue(row, "成功退款(元)"); + existingRecord.OccurredAt = GetDateTimeValue(row, "交易创建时间"); + existingRecord.Type = GetTransactionType(row, "收/支"); + updateTransactionRecords.Add(existingRecord); + continue; + } + + var transactionRecord = new TransactionRecord + { + Reason = GetReason(row), + Amount = GetDecimalValue(row, "金额(元)"), + RefundAmount = GetDecimalValue(row, "成功退款(元)"), + Balance = 0, + OccurredAt = GetDateTimeValue(row, "交易创建时间"), + Type = GetTransactionType(row, "收/支"), + ImportNo = importNo, + ImportFrom = "支付宝" + }; + + addTransactionRecords.Add(transactionRecord); + } + + if (addTransactionRecords.Count == 0 && updateTransactionRecords.Count == 0) + { + logger.LogWarning("未找到可导入或更新的支付宝交易记录"); + return (false, "未找到可导入或更新的支付宝交易记录"); + } + + var message = new StringBuilder(); + if (addTransactionRecords.Count > 0) + { + if (await transactionRecordRepository.AddRangeAsync(addTransactionRecords)) + { + logger.LogInformation("成功导入支付宝交易记录数: {Count}", addTransactionRecords.Count); + message.AppendLine($"成功导入支付宝交易记录数: {addTransactionRecords.Count}"); + } + } + + if (updateTransactionRecords.Count > 0) + { + if (await transactionRecordRepository.UpdateRangeAsync(updateTransactionRecords)) + { + logger.LogInformation("成功更新支付宝交易记录数: {Count}", updateTransactionRecords.Count); + message.AppendLine($"成功更新支付宝交易记录数: {updateTransactionRecords.Count}"); + } + } + + return (true, message.ToString()); + + string GetReason(IDictionary row) + { + var reason = string.Empty; + if (row.ContainsKey("交易对方") && !string.IsNullOrWhiteSpace(row["交易对方"])) + { + reason += row["交易对方"]; + } + + if (row.ContainsKey("商品名称") && !string.IsNullOrWhiteSpace(row["商品名称"])) + { + reason += row["商品名称"]; + } + + return reason; + } + + decimal GetDecimalValue(IDictionary row, string key) + { + if (row.ContainsKey(key) && decimal.TryParse(row[key], out var value)) + { + return value; + } + + return 0m; + } + + DateTime GetDateTimeValue(IDictionary row, string key) + { + if (!row.ContainsKey(key)) + { + return DateTime.MinValue; + } + + foreach (var format in DateTimeFormats) + { + if (DateTime.TryParseExact( + row[key], + format, + CultureInfo.InvariantCulture, + DateTimeStyles.None, + out var value)) + { + return value; + } + } + + if (DateTime.TryParse(row[key], out var value2)) + { + return value2; + } + + return DateTime.MinValue; + } + + TransactionType GetTransactionType(IDictionary row, string key) + { + if (!row.ContainsKey(key)) + { + return TransactionType.None; + } + + var typeStr = row[key]; + + return typeStr switch + { + "支出" => TransactionType.Expense, + "收入" => TransactionType.Income, + _ => TransactionType.None + }; + } + } + + public async Task<(bool ok, string message)> ImportWeChatAsync(MemoryStream file, string fileExtension) + { + var content = await ParseAsync(file, fileExtension); + logger.LogInformation("转换后的微信账单数据行数: {RowCount}", content.Length); + + if (content.Length == 0) + { + logger.LogWarning("微信账单文件解析后无数据行"); + return (false, "微信账单文件解析后无数据行"); + } + + var addTransactionRecords = new List(); + var updateTransactionRecords = new List(); + foreach (var row in content) + { + var importNo = row.ContainsKey("交易单号") ? row["交易单号"] : string.Empty; + + if (string.IsNullOrWhiteSpace(importNo)) + { + logger.LogWarning("跳过无交易单号的记录: {Row}", row); + continue; + } + + var existingRecord = await transactionRecordRepository.ExistsByImportNoAsync(importNo, "微信"); + + if (existingRecord != null) + { + existingRecord.Reason = GetReason(row); + existingRecord.Amount = GetAmountValue(row, "金额(元)"); + existingRecord.OccurredAt = GetDateTimeValue(row, "交易时间"); + existingRecord.Type = GetTransactionType(row, "收/支"); + existingRecord.RefundAmount = GetRefundAmountValue(row); + updateTransactionRecords.Add(existingRecord); + continue; + } + + var transactionRecord = new TransactionRecord + { + Reason = GetReason(row), + Amount = GetAmountValue(row, "金额(元)"), + RefundAmount = GetRefundAmountValue(row), + Balance = 0, + OccurredAt = GetDateTimeValue(row, "交易时间"), + Type = GetTransactionType(row, "收/支"), + ImportNo = importNo, + ImportFrom = "微信" + }; + + addTransactionRecords.Add(transactionRecord); + } + + if (addTransactionRecords.Count == 0 && updateTransactionRecords.Count == 0) + { + logger.LogWarning("未找到可导入或更新的微信交易记录"); + return (false, "未找到可导入或更新的微信交易记录"); + } + + var message = new StringBuilder(); + if (addTransactionRecords.Count > 0) + { + if (await transactionRecordRepository.AddRangeAsync(addTransactionRecords)) + { + logger.LogInformation("成功导入微信交易记录数: {Count}", addTransactionRecords.Count); + message.AppendLine($"成功导入微信交易记录数: {addTransactionRecords.Count}"); + } + } + + if (updateTransactionRecords.Count > 0) + { + if (await transactionRecordRepository.UpdateRangeAsync(updateTransactionRecords)) + { + logger.LogInformation("成功更新微信交易记录数: {Count}", updateTransactionRecords.Count); + message.AppendLine($"成功更新微信交易记录数: {updateTransactionRecords.Count}"); + } + } + + return (true, message.ToString()); + + string GetReason(IDictionary row) + { + var reason = string.Empty; + if (row.ContainsKey("交易类型") && !string.IsNullOrWhiteSpace(row["交易类型"])) + { + reason += row["交易类型"]; + } + + if (row.ContainsKey("交易对方") && !string.IsNullOrWhiteSpace(row["交易对方"])) + { + reason += row["交易对方"]; + } + + if (row.ContainsKey("商品") && !string.IsNullOrWhiteSpace(row["商品"])) + { + reason += row["商品"]; + } + + return reason; + } + + decimal GetAmountValue(IDictionary row, string key) + { + if (row.ContainsKey(key) && decimal.TryParse(row[key].TrimStart('¥').TrimStart('¥'), out var value)) + { + return value; + } + + return 0m; + } + + DateTime GetDateTimeValue(IDictionary row, string key) + { + if(!row.ContainsKey(key)) + { + return DateTime.MinValue; + } + + foreach (var format in DateTimeFormats) + { + if (DateTime.TryParseExact( + row[key], + format, + CultureInfo.InvariantCulture, + DateTimeStyles.None, + out var value)) + { + return value; + } + } + + if (DateTime.TryParse(row[key], out var value2)) + { + return value2; + } + + return DateTime.MinValue; + } + + TransactionType GetTransactionType(IDictionary row, string key) + { + if (!row.ContainsKey(key)) + { + return TransactionType.None; + } + + var typeStr = row[key]; + + return typeStr switch + { + "支出" => TransactionType.Expense, + "收入" => TransactionType.Income, + _ => TransactionType.None + }; + } + + decimal GetRefundAmountValue(IDictionary row) + { + if (!row.ContainsKey("当前状态")) + { + return 0m; + } + + var status = row["当前状态"]; + + if (!status.Contains("退款")) + { + return 0m; + } + + // 使用正则表达式提取退款金额 + var regex = new System.Text.RegularExpressions.Regex(@"¥(-?\d+(\.\d+)?)"); + var match = regex.Match(status); + if (match.Success && decimal.TryParse(match.Groups[1].Value, out var refundAmount)) + { + return refundAmount; + } + + return 0m; + } + } + + private async Task[]> ParseAsync(MemoryStream file, string fileExtension) + { + if (fileExtension == ".csv") + { + return await ParseCsvAsync(file); + } + else if (fileExtension == ".xlsx" || fileExtension == ".xls") + { + return await ParseExcelAsync(file); + } + else + { + throw new NotSupportedException("不支持的文件格式"); + } + } + + private async Task[]> ParseCsvAsync(MemoryStream file) + { + file.Position = 0; + using var reader = new StreamReader(file, Encoding.UTF8); + + var config = new CsvConfiguration(CultureInfo.InvariantCulture) + { + HasHeaderRecord = true, + TrimOptions = TrimOptions.Trim + }; + + using var csv = new CsvReader(reader, config); + + // 读取表头 + await csv.ReadAsync(); + csv.ReadHeader(); + var headers = csv.HeaderRecord; + + if (headers == null || headers.Length == 0) + { + return Array.Empty>(); + } + + var result = new List>(); + + // 读取数据行 + while (await csv.ReadAsync()) + { + var row = new Dictionary(); + foreach (var header in headers) + { + row[header] = csv.GetField(header) ?? string.Empty; + } + + result.Add(row); + } + + return result.ToArray(); + } + + private async Task[]> ParseExcelAsync(MemoryStream file) + { + file.Position = 0; + + // 设置 EPPlus 许可证上下文 + ExcelPackage.LicenseContext = LicenseContext.NonCommercial; + + using var package = new ExcelPackage(file); + var worksheet = package.Workbook.Worksheets.FirstOrDefault(); + + if (worksheet == null || worksheet.Dimension == null) + { + return Array.Empty>(); + } + + var rowCount = worksheet.Dimension.End.Row; + var colCount = worksheet.Dimension.End.Column; + + if (rowCount < 2) + { + return Array.Empty>(); + } + + // 读取表头(第一行) + var headers = new List(); + for (int col = 1; col <= colCount; col++) + { + var header = worksheet.Cells[1, col].Text?.Trim() ?? string.Empty; + headers.Add(header); + } + + var result = new List>(); + + // 读取数据行(从第二行开始) + for (int row = 2; row <= rowCount; row++) + { + var rowData = new Dictionary(); + for (int col = 1; col <= colCount; col++) + { + var header = headers[col - 1]; + var value = worksheet.Cells[row, col].Text?.Trim() ?? string.Empty; + rowData[header] = value; + } + + result.Add(rowData); + } + + return await Task.FromResult(result.ToArray()); + } + + private static string[] DateTimeFormats = + [ + "yyyy-MM-dd", + "yyyy-MM-dd HH", + "yyyy-MM-dd HH:mm", + "yyyy-MM-dd HH:mm:ss", + "yyyy-M-d", + "yyyy-M-d HH:mm", + "yyyy-M-d HH:mm:ss", + "yyyy/MM/dd", + "yyyy/MM/dd HH", + "yyyy/MM/dd HH:mm", + "yyyy/MM/dd HH:mm:ss", + "yyyy/M/d", + "yyyy/M/d HH:mm", + "yyyy/M/d HH:mm:ss", + "MM/dd/yyyy", + "MM/dd/yyyy HH", + "MM/dd/yyyy HH:mm", + "MM/dd/yyyy HH:mm:ss", + "M/d/yyyy", + "M/d/yyyy HH:mm", + "M/d/yyyy HH:mm:ss", + "MM/dd/yy", + "M/d/yy H:mm", + "MM/dd/yy HH", + "MM/dd/yy HH:mm", + "MM/dd/yy HH:mm:ss", + "M/d/yy", + "M/d/yy HH", + "M/d/yy HH:mm", + "M/d/yy HH:mm:ss", + "yyyyMMdd", + "yyyyMMddHH", + "yyyyMMddHHmm", + "yyyyMMddHHmmss", + ]; +} + diff --git a/Service/OpenAiService.cs b/Service/OpenAiService.cs new file mode 100644 index 0000000..8549cbb --- /dev/null +++ b/Service/OpenAiService.cs @@ -0,0 +1,71 @@ +using System.Net.Http.Headers; + +namespace Service; + +public interface IOpenAiService +{ + Task ChatAsync(string systemPrompt, string userPrompt); +} + +public class OpenAiService( + IOptions aiSettings, + ILogger logger +) : IOpenAiService +{ + public async Task ChatAsync(string systemPrompt, string userPrompt) + { + var cfg = aiSettings.Value; + if (string.IsNullOrWhiteSpace(cfg.Endpoint) || + string.IsNullOrWhiteSpace(cfg.Key) || + string.IsNullOrWhiteSpace(cfg.Model)) + { + logger.LogWarning("未配置 OpenAI/DeepSeek 接口,无法调用 AI"); + return null; + } + + using var http = new HttpClient(); + http.Timeout = TimeSpan.FromSeconds(15); + http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", cfg.Key); + + var payload = new + { + model = cfg.Model, + temperature = 0, + messages = new object[] + { + new { role = "system", content = systemPrompt }, + new { role = "user", content = userPrompt } + } + }; + + var url = cfg.Endpoint.TrimEnd('/') + "/chat/completions"; + var json = JsonSerializer.Serialize(payload); + using var content = new StringContent(json, Encoding.UTF8, "application/json"); + + try + { + using var resp = await http.PostAsync(url, content); + if (!resp.IsSuccessStatusCode) + { + var err = await resp.Content.ReadAsStringAsync(); + throw new InvalidOperationException($"AI接口调用失败: {(int)resp.StatusCode} {resp.ReasonPhrase}, {err}"); + } + + var respText = await resp.Content.ReadAsStringAsync(); + + using var doc = JsonDocument.Parse(respText); + var root = doc.RootElement; + var contentText = root.GetProperty("choices")[0] + .GetProperty("message") + .GetProperty("content") + .GetString(); + + return contentText; + } + catch (Exception ex) + { + logger.LogError(ex, "AI 调用失败"); + throw; + } + } +} diff --git a/Service/Service.csproj b/Service/Service.csproj new file mode 100644 index 0000000..b3531a7 --- /dev/null +++ b/Service/Service.csproj @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/Web/.editorconfig b/Web/.editorconfig new file mode 100644 index 0000000..3b510aa --- /dev/null +++ b/Web/.editorconfig @@ -0,0 +1,8 @@ +[*.{js,jsx,mjs,cjs,ts,tsx,mts,cts,vue,css,scss,sass,less,styl}] +charset = utf-8 +indent_size = 2 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true +end_of_line = lf +max_line_length = 100 diff --git a/Web/.env.development b/Web/.env.development new file mode 100644 index 0000000..5fb3c66 --- /dev/null +++ b/Web/.env.development @@ -0,0 +1,2 @@ +# 开发环境配置 +VITE_API_BASE_URL=http://localhost:5071/api diff --git a/Web/.env.production b/Web/.env.production new file mode 100644 index 0000000..89aadb2 --- /dev/null +++ b/Web/.env.production @@ -0,0 +1,2 @@ +# 生产环境配置 +VITE_API_BASE_URL=/api diff --git a/Web/.gitattributes b/Web/.gitattributes new file mode 100644 index 0000000..6313b56 --- /dev/null +++ b/Web/.gitattributes @@ -0,0 +1 @@ +* text=auto eol=lf diff --git a/Web/.gitignore b/Web/.gitignore new file mode 100644 index 0000000..593bd61 --- /dev/null +++ b/Web/.gitignore @@ -0,0 +1,402 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.tlog +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio 6 auto-generated project file (contains which files were open etc.) +*.vbp + +# Visual Studio 6 workspace and project file (working project files containing files to include in project) +*.dsw +*.dsp + +# Visual Studio 6 technical files +*.ncb +*.aps + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# Visual Studio History (VSHistory) files +.vshistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +# VS Code files for those working on multiple tools +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# Local History for Visual Studio Code +.history/ + +# Windows Installer files from build outputs +*.cab +*.msi +*.msix +*.msm +*.msp + +# JetBrains Rider +*.sln.iml + + + +.idea/ \ No newline at end of file diff --git a/Web/.prettierrc.json b/Web/.prettierrc.json new file mode 100644 index 0000000..29a2402 --- /dev/null +++ b/Web/.prettierrc.json @@ -0,0 +1,6 @@ +{ + "$schema": "https://json.schemastore.org/prettierrc", + "semi": false, + "singleQuote": true, + "printWidth": 100 +} diff --git a/Web/.vscode/extensions.json b/Web/.vscode/extensions.json new file mode 100644 index 0000000..c92168f --- /dev/null +++ b/Web/.vscode/extensions.json @@ -0,0 +1,8 @@ +{ + "recommendations": [ + "Vue.volar", + "dbaeumer.vscode-eslint", + "EditorConfig.EditorConfig", + "esbenp.prettier-vscode" + ] +} diff --git a/Web/.vscode/settings.json b/Web/.vscode/settings.json new file mode 100644 index 0000000..608ad9b --- /dev/null +++ b/Web/.vscode/settings.json @@ -0,0 +1,13 @@ +{ + "explorer.fileNesting.enabled": true, + "explorer.fileNesting.patterns": { + "tsconfig.json": "tsconfig.*.json, env.d.ts", + "vite.config.*": "jsconfig*, vitest.config.*, cypress.config.*, playwright.config.*", + "package.json": "package-lock.json, pnpm*, .yarnrc*, yarn*, .eslint*, eslint*, .oxlint*, oxlint*, .prettier*, prettier*, .editorconfig" + }, + "editor.codeActionsOnSave": { + "source.fixAll": "explicit" + }, + "editor.formatOnSave": true, + "editor.defaultFormatter": "esbenp.prettier-vscode" +} diff --git a/Web/README.md b/Web/README.md new file mode 100644 index 0000000..20c32a5 --- /dev/null +++ b/Web/README.md @@ -0,0 +1,44 @@ +# email-bill + +This template should help get you started developing with Vue 3 in Vite. + +## Recommended IDE Setup + +[VS Code](https://code.visualstudio.com/) + [Vue (Official)](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur). + +## Recommended Browser Setup + +- Chromium-based browsers (Chrome, Edge, Brave, etc.): + - [Vue.js devtools](https://chromewebstore.google.com/detail/vuejs-devtools/nhdogjmejiglipccpnnnanhbledajbpd) + - [Turn on Custom Object Formatter in Chrome DevTools](http://bit.ly/object-formatters) +- Firefox: + - [Vue.js devtools](https://addons.mozilla.org/en-US/firefox/addon/vue-js-devtools/) + - [Turn on Custom Object Formatter in Firefox DevTools](https://fxdx.dev/firefox-devtools-custom-object-formatters/) + +## Customize configuration + +See [Vite Configuration Reference](https://vite.dev/config/). + +## Project Setup + +```sh +pnpm install +``` + +### Compile and Hot-Reload for Development + +```sh +pnpm dev +``` + +### Compile and Minify for Production + +```sh +pnpm build +``` + +### Lint with [ESLint](https://eslint.org/) + +```sh +pnpm lint +``` diff --git a/Web/dist/assets/CalendarView-By4eHUMb.js b/Web/dist/assets/CalendarView-By4eHUMb.js new file mode 100644 index 0000000..d2916b5 --- /dev/null +++ b/Web/dist/assets/CalendarView-By4eHUMb.js @@ -0,0 +1 @@ +import{_ as e}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{c as r,f as c}from"./index-CoRZCnfa.js";const n={};function o(t,a){return c(),r("div",null,"111")}const f=e(n,[["render",o]]);export{f as default}; diff --git a/Web/dist/assets/EmailRecord-Hpcg_SM6.css b/Web/dist/assets/EmailRecord-Hpcg_SM6.css new file mode 100644 index 0000000..394f95f --- /dev/null +++ b/Web/dist/assets/EmailRecord-Hpcg_SM6.css @@ -0,0 +1 @@ +.page-container[data-v-a7afa8a2]{min-height:100vh;background-color:#f5f5f5}@media(prefers-color-scheme:dark){.page-container[data-v-a7afa8a2]{background-color:#1a1a1a}}.refresh-wrapper[data-v-a7afa8a2]{min-height:calc(100vh - 46px)}[data-v-a7afa8a2] .van-cell-group--inset{margin:10px 16px;background-color:#fff;box-shadow:0 2px 8px #00000014}@media(prefers-color-scheme:dark){[data-v-a7afa8a2] .van-cell-group--inset{background-color:#2c2c2c;box-shadow:0 2px 8px #0000004d}}[data-v-a7afa8a2] .van-cell{background-color:#fff;border-bottom:1px solid #f0f0f0}@media(prefers-color-scheme:dark){[data-v-a7afa8a2] .van-cell{background-color:#2c2c2c;border-bottom:1px solid #3a3a3a}}[data-v-a7afa8a2] .van-cell:last-child{border-bottom:none}.detail-popup[data-v-a7afa8a2]{padding:16px;height:100%;overflow-y:auto;background-color:#f5f5f5}@media(prefers-color-scheme:dark){.detail-popup[data-v-a7afa8a2]{background-color:#1a1a1a}}.detail-popup[data-v-a7afa8a2] .van-cell-group--inset{background-color:#fff;box-shadow:0 2px 8px #00000014}@media(prefers-color-scheme:dark){.detail-popup[data-v-a7afa8a2] .van-cell-group--inset{background-color:#2c2c2c;box-shadow:0 2px 8px #0000004d}}.detail-header[data-v-a7afa8a2]{margin-bottom:16px}.detail-header h3[data-v-a7afa8a2]{margin:0;font-size:18px;font-weight:700;word-break:break-word}.detail-header p[data-v-a7afa8a2]{margin:0;font-size:14px;color:#969799;font-weight:400}[data-v-a7afa8a2] .van-nav-bar{background-color:transparent}[data-v-a7afa8a2] .van-field__control,[data-v-a7afa8a2] .van-field__value{word-break:break-all;white-space:normal}.email-date[data-v-a7afa8a2]{font-size:12px;color:#969799;padding-right:10px}.email-content[data-v-a7afa8a2]{margin-top:16px}.email-content h4[data-v-a7afa8a2]{margin:0 0 12px;font-size:16px;font-weight:700}.content-body[data-v-a7afa8a2]{padding:12px;border-radius:8px;white-space:pre-wrap;word-break:break-word;font-size:14px;line-height:1.6;max-height:350px;overflow-y:auto;background-color:#fff;border:1px solid #e5e5e5;margin:0 20px}@media(prefers-color-scheme:dark){.content-body[data-v-a7afa8a2]{background-color:#2c2c2c;border:1px solid #3a3a3a}}.delete-button[data-v-a7afa8a2]{height:100%} diff --git a/Web/dist/assets/EmailRecord-ooSXYRv8.js b/Web/dist/assets/EmailRecord-ooSXYRv8.js new file mode 100644 index 0000000..80b125a --- /dev/null +++ b/Web/dist/assets/EmailRecord-ooSXYRv8.js @@ -0,0 +1 @@ +import{r as b,s as j}from"./request-CDAs_I05.js";import{_ as K}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as i,o as Q,c as y,b as n,w as o,e as c,s as l,f as d,g as D,h as C,i as L,F as W,j as X,d as g,t as T}from"./index-CoRZCnfa.js";import"./index-B9ygI19o.js";const Y=(v={})=>b({url:"/EmailMessage/GetList",method:"get",params:v}),Z=v=>b({url:`/EmailMessage/GetById/${v}`,method:"get"}),ee=v=>b({url:"/EmailMessage/DeleteById",method:"post",params:{id:v}}),te=v=>b({url:"/EmailMessage/RefreshTransactionRecords",method:"post",params:{id:v}}),ae=()=>b({url:"/EmailMessage/SyncEmails",method:"post"}),le={class:"email-record-container"},se={class:"email-date"},ne={key:0,class:"email-detail"},oe={class:"detail-header",style:{"margin-top":"10px","margin-left":"10px"}},re={class:"email-content"},ie=["innerHTML"],ue={key:1,class:"content-body"},ce={key:2,class:"content-body empty-content"},de={style:{"font-size":"12px","margin-top":"8px",color:"#999"}},ve={style:{margin:"16px"}},me={__name:"EmailRecord",setup(v){const r=i([]),m=i(!1),I=i(!1),p=i(!1),w=i(null),k=i(null),N=i(0),x=i(!1),a=i(null),R=i(!1),B=i(!1),h=async(t=!1)=>{if(!m.value){t&&(w.value=null,k.value=null,r.value=[],p.value=!1),m.value=!0;try{const e={};k.value&&w.value&&(e.lastReceivedDate=k.value,e.lastId=w.value);const u=await Y(e);if(u.success){const _=u.data||[];N.value=u.total||0;const E=u.lastId||0,f=u.lastTime;t?r.value=_:r.value=[...r.value||[],..._],E>0&&f&&(w.value=E,k.value=f),_.length===0||_.length<20?p.value=!0:p.value=!1}else l(u.message||"加载数据失败"),p.value=!0}catch(e){console.error("加载数据出错:",e),l("加载数据出错: "+(e.message||"未知错误")),p.value=!0}finally{m.value=!1,I.value=!1}}},S=()=>{h(!0)},$=()=>{!p.value&&!m.value&&h()},z=async t=>{try{const e=await Z(t.id);console.log("详情 API 返回:",e),e.success?(a.value=e.data,console.log("currentEmail:",a.value),x.value=!0):l(e.message||"获取详情失败")}catch(e){console.error("获取详情出错:",e),l("获取详情失败")}},A=async t=>{try{await j({title:"提示",message:"确定要删除这封邮件吗?"});const e=await ee(t.id);e.success?(l("删除成功"),h(!0)):l(e.message||"删除失败")}catch(e){e!=="cancel"&&(console.error("删除出错:",e),l("删除失败"))}},F=async()=>{if(a.value)try{await j({title:"提示",message:"确定要重新分析该邮件并刷新交易记录吗?"}),R.value=!0;const t=await te(a.value.id||a.value.Id);t.success?(l("重新分析成功"),x.value=!1):l(t.message||"重新分析失败")}catch(t){t!=="cancel"&&(console.error("重新分析出错:",t),l("重新分析失败: "+(t.message||"未知错误")))}finally{R.value=!1}},U=async()=>{try{B.value=!0;const t=await ae();t.success?(l(t.message||"同步成功"),h(!0)):l(t.message||"同步失败")}catch(t){console.error("同步出错:",t),l("同步失败: "+(t.message||"未知错误"))}finally{B.value=!1}},M=t=>t?new Date(t).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}):"";return Q(()=>{h(!0)}),(t,e)=>{const u=c("van-button"),_=c("van-nav-bar"),E=c("van-loading"),f=c("van-cell"),q=c("van-swipe-cell"),V=c("van-cell-group"),G=c("van-empty"),H=c("van-list"),O=c("van-pull-refresh"),P=c("van-popup");return d(),y("div",le,[n(_,{title:"邮件记录",fixed:"",placeholder:""},{right:o(()=>[n(u,{size:"small",type:"primary",loading:B.value,onClick:U},{default:o(()=>[...e[3]||(e[3]=[D(" 立即同步 ",-1)])]),_:1},8,["loading"])]),_:1}),n(O,{modelValue:I.value,"onUpdate:modelValue":e[1]||(e[1]=s=>I.value=s),onRefresh:S,class:"refresh-wrapper"},{default:o(()=>[m.value&&!(r.value&&r.value.length)?(d(),C(E,{key:0,vertical:"",style:{padding:"50px 0"}},{default:o(()=>[...e[4]||(e[4]=[D(" 加载中... ",-1)])]),_:1})):L("",!0),n(H,{loading:m.value,"onUpdate:loading":e[0]||(e[0]=s=>m.value=s),finished:p.value,"finished-text":"没有更多了",onLoad:$},{default:o(()=>[r.value&&r.value.length?(d(),C(V,{key:0,inset:"",style:{"margin-top":"10px"}},{default:o(()=>[(d(!0),y(W,null,X(r.value,s=>(d(),C(q,{key:s.id},{right:o(()=>[n(u,{square:"",type:"danger",text:"删除",class:"delete-button",onClick:J=>A(s)},null,8,["onClick"])]),default:o(()=>[n(f,{title:s.subject,label:`来自: ${s.from}`,"is-link":"",onClick:J=>z(s)},{value:o(()=>[g("div",se,T(M(s.receivedDate)),1)]),_:2},1032,["title","label","onClick"])]),_:2},1024))),128))]),_:1})):L("",!0),!m.value&&!(r.value&&r.value.length)?(d(),C(G,{key:1,description:"暂无邮件记录"})):L("",!0)]),_:1},8,["loading","finished"])]),_:1},8,["modelValue"]),n(P,{show:x.value,"onUpdate:show":e[2]||(e[2]=s=>x.value=s),position:"bottom",style:{height:"80%"},round:"",closeable:""},{default:o(()=>[a.value?(d(),y("div",ne,[g("div",oe,[g("h3",null,T(a.value.Subject||a.value.subject||"(无主题)"),1)]),n(V,{inset:""},{default:o(()=>[n(f,{title:"发件人",value:a.value.From||a.value.from||"未知"},null,8,["value"]),n(f,{title:"接收时间",value:M(a.value.ReceivedDate||a.value.receivedDate)},null,8,["value"]),n(f,{title:"记录时间",value:M(a.value.CreateTime||a.value.createTime)},null,8,["value"])]),_:1}),g("div",re,[e[6]||(e[6]=g("h4",{style:{"margin-left":"10px"}},"邮件内容",-1)),a.value.htmlBody?(d(),y("div",{key:0,innerHTML:a.value.htmlBody,class:"content-body html-content"},null,8,ie)):a.value.body?(d(),y("div",ue,T(a.value.body),1)):(d(),y("div",ce,[e[5]||(e[5]=D(" 暂无邮件内容 ",-1)),g("div",de," Debug: "+T(Object.keys(a.value).join(", ")),1)]))]),g("div",ve,[n(u,{round:"",block:"",type:"primary",loading:R.value,onClick:F},{default:o(()=>[...e[7]||(e[7]=[D(" 重新分析 ",-1)])]),_:1},8,["loading"])])])):L("",!0)]),_:1},8,["show"])])}}},ye=K(me,[["__scopeId","data-v-a7afa8a2"]]);export{ye as default}; diff --git a/Web/dist/assets/SettingView-BhjwUKGN.css b/Web/dist/assets/SettingView-BhjwUKGN.css new file mode 100644 index 0000000..6ef94c9 --- /dev/null +++ b/Web/dist/assets/SettingView-BhjwUKGN.css @@ -0,0 +1 @@ +[data-v-3c89ac7f] .van-nav-bar{background-color:transparent}[data-v-3c89ac7f] body{background-color:#f5f5f5}@media(prefers-color-scheme:dark){[data-v-3c89ac7f] body{background-color:#1a1a1a}}[data-v-3c89ac7f] .van-cell-group--inset{background-color:#fff;box-shadow:0 2px 8px #00000014}@media(prefers-color-scheme:dark){[data-v-3c89ac7f] .van-cell-group--inset{background-color:#2c2c2c;box-shadow:0 2px 8px #0000004d}}.detail-header[data-v-3c89ac7f]{padding:16px 16px 5px}.detail-header p[data-v-3c89ac7f]{margin:0;font-size:14px;color:#969799;font-weight:400} diff --git a/Web/dist/assets/SettingView-DpsY2gE2.js b/Web/dist/assets/SettingView-DpsY2gE2.js new file mode 100644 index 0000000..545dd00 --- /dev/null +++ b/Web/dist/assets/SettingView-DpsY2gE2.js @@ -0,0 +1 @@ +import{a as g}from"./index-B9ygI19o.js";import{s as l,r as _,c as k,b as r,d as c,e as d,w as y,v as x,x as h,y as w,f as C}from"./index-CoRZCnfa.js";import{_ as b}from"./_plugin-vue_export-helper-DlAUqK2U.js";const T=(m,p)=>{const n=new FormData;return n.append("file",m),n.append("type",p),g({url:"/api/BillImport/UploadFile",method:"post",data:n,headers:{"Content-Type":"multipart/form-data"},timeout:6e4}).then(t=>{const{data:s}=t;return s.success===!1?(l(s.message||"上传失败"),Promise.reject(new Error(s.message||"上传失败"))):s}).catch(t=>{if(console.error("上传错误:",t),t.response){const{status:s,data:o}=t.response;let e="上传失败";switch(s){case 400:e=o?.message||"请求参数错误";break;case 401:e="未授权,请先登录";break;case 403:e="没有权限";break;case 413:e="文件过大";break;case 500:e="服务器错误";break}return l(e),Promise.reject(new Error(e))}return l("网络错误,请检查网络连接"),Promise.reject(t)})},B={__name:"SettingView",setup(m){const p=_(null),n=_(""),t=o=>{n.value=o,p.value?.click()},s=async o=>{const e=o.target.files?.[0];if(!e)return;if(!["text/csv","application/vnd.ms-excel","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"].includes(e.type)){l("请选择 CSV 或 Excel 文件");return}const i=10*1024*1024;if(e.size>i){l("文件大小不能超过 10MB");return}try{x({message:"上传中...",forbidClick:!0,duration:0});const a=n.value==="Alipay"?"支付宝":"微信",{success:u,message:v}=await T(e,n.value);if(!u){l(v||`${a}账单导入失败`);return}h(v||`${a}账单导入成功`)}catch(a){console.error("上传失败:",a),l("上传失败: "+(a.message||"未知错误"))}finally{w(),o.target.value=""}};return(o,e)=>{const f=d("van-nav-bar"),i=d("van-cell"),a=d("van-cell-group");return C(),k("div",null,[r(f,{title:"设置"}),e[2]||(e[2]=c("div",{class:"detail-header"},[c("p",null,"账单导入")],-1)),r(a,{inset:""},{default:y(()=>[r(i,{title:"从支付宝导入","is-link":"",onClick:e[0]||(e[0]=u=>t("Alipay"))}),r(i,{title:"从微信导入","is-link":"",onClick:e[1]||(e[1]=u=>t("WeChat"))})]),_:1}),c("input",{ref_key:"fileInputRef",ref:p,type:"file",accept:".csv,.xlsx,.xls",style:{display:"none"},onChange:s},null,544),e[3]||(e[3]=c("div",{class:"detail-header"},[c("p",null,"账单处理")],-1)),r(a,{inset:""},{default:y(()=>[r(i,{title:"智能分类","is-link":""})]),_:1})])}}},$=b(B,[["__scopeId","data-v-3c89ac7f"]]);export{$ as default}; diff --git a/Web/dist/assets/TransactionsRecord-COA69EP3.js b/Web/dist/assets/TransactionsRecord-COA69EP3.js new file mode 100644 index 0000000..189f1df --- /dev/null +++ b/Web/dist/assets/TransactionsRecord-COA69EP3.js @@ -0,0 +1 @@ +import{r as F,s as ll}from"./request-CDAs_I05.js";import{_ as al}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r,a as be,o as sl,c as w,b as s,d as i,w as t,e as f,s as d,f as y,g as m,h as Q,i as b,F as tl,j as ol,t as C,n as nl}from"./index-CoRZCnfa.js";import"./index-B9ygI19o.js";const ul=(c={})=>F({url:"/TransactionRecord/GetList",method:"get",params:c}),rl=c=>F({url:`/TransactionRecord/GetById/${c}`,method:"get"}),il=c=>F({url:"/TransactionRecord/Create",method:"post",data:c}),dl=c=>F({url:"/TransactionRecord/Update",method:"post",data:c}),fl=c=>F({url:"/TransactionRecord/DeleteById",method:"post",params:{id:c}}),ml=(c=null)=>F({url:"/TransactionCategory/GetTree",method:"get",params:c!==null?{type:c}:{}}),vl={class:"transaction-record-container"},cl=["onClick"],pl={class:"card-left"},yl={class:"transaction-title"},bl={class:"reason"},Cl={class:"transaction-info"},gl={key:0},wl={key:0},kl={key:1},Vl={key:2},xl={class:"card-right"},Tl={class:"transaction-amount"},Sl={key:0,class:"balance"},_l={key:1,class:"balance"},Al={key:0,class:"transaction-detail"},Ul={style:{margin:"16px"}},$l={class:"picker-toolbar"},hl={class:"picker-toolbar"},Dl={class:"transaction-detail"},zl={style:{margin:"16px"}},Rl={class:"picker-toolbar"},Pl={class:"picker-toolbar"},Fl={class:"floating-search"},Ll={__name:"TransactionsRecord",setup(c){const p=r([]),$=r(!1),W=r(!1),k=r(!1),h=r(null),L=r(null),Ce=r(0),H=r(!1),M=r(null),X=r(!1),N=r("");let Z=null;const J=r(!1),O=r(!1),q=r(!1),ee=r([new Date().getFullYear(),new Date().getMonth()+1,new Date().getDate()]),I=r(!1),S=r(!1),_=r(!1),le=r(null),ae=r(null),se=r(null),te=r(null),de=[{text:"支出",value:0},{text:"收入",value:1},{text:"不计入收支",value:2}],B=r([]),G=r([]),Y=r(!1),V=r(!1),x=r(!1),K=r(!1),j=r(!1),A=r(""),U=r(""),n=be({id:0,reason:"",amount:"",balance:"",type:0,typeText:"",classify:"",subClassify:""}),u=be({occurredAt:"",reason:"",amount:"",type:0,typeText:"",classify:"",subClassify:""}),oe=async(a=null)=>{try{const e=await ml(a);e.success&&(B.value=(e.data||[]).map(o=>({text:o.name,value:o.name,id:o.id,children:o.children||[]})))}catch(e){console.error("加载分类列表出错:",e)}},fe=async a=>{try{const e=B.value.find(o=>o.value===a);e&&e.children?G.value=e.children.map(o=>({text:o.name,value:o.name,id:o.id})):G.value=[]}catch(e){console.error("加载子分类列表出错:",e)}},D=async(a=!1)=>{a&&(h.value=null,L.value=null,p.value=[],k.value=!1),$.value=!0;try{const e={};L.value&&h.value&&(e.lastOccurredAt=L.value,e.lastId=h.value),N.value&&(e.searchKeyword=N.value);const o=await ul(e);if(o.success){const T=o.data||[];Ce.value=o.total||0;const z=o.lastId||0,R=o.lastTime;a?p.value=T:p.value=[...p.value||[],...T],z>0&&R&&(h.value=z,L.value=R),T.length===0||T.length<20?k.value=!0:k.value=!1}else d(o.message||"加载数据失败"),k.value=!0}catch(e){console.error("加载数据出错:",e),d("加载数据出错: "+(e.message||"未知错误")),k.value=!0}finally{$.value=!1,W.value=!1}},ge=()=>{k.value=!1,h.value=null,p.value=[],D(!1)},we=()=>{Z&&clearTimeout(Z),Z=setTimeout(()=>{me()},500)},me=()=>{h.value=null,L.value=null,p.value=[],k.value=!1,D(!0)},ke=()=>{N.value="",me()},Ve=()=>{D(!1)},xe=async a=>{try{const e=await rl(a.id);e.success?(M.value=e.data,n.id=e.data.id,n.reason=e.data.reason||"",n.amount=String(e.data.amount),n.balance=String(e.data.balance),n.type=e.data.type,n.typeText=ve(e.data.type),n.classify=e.data.classify||"",n.subClassify=e.data.subClassify||"",H.value=!0):d(e.message||"获取详情失败")}catch(e){console.error("获取详情出错:",e),d("获取详情失败")}},Te=async()=>{try{X.value=!0;const a={id:n.id,reason:n.reason,amount:parseFloat(n.amount),balance:parseFloat(n.balance),type:n.type,classify:n.classify,subClassify:n.subClassify},e=await dl(a);e.success?(d("保存成功"),H.value=!1,D(!0),await oe()):d(e.message||"保存失败")}catch(a){console.error("保存出错:",a),d("保存失败")}finally{X.value=!1}},Se=async a=>{try{await ll({title:"提示",message:"确定要删除这条交易记录吗?"});const e=await fl(a.id);e.success?(d("删除成功"),D(!0)):d(e.message||"删除失败")}catch(e){e!=="cancel"&&(console.error("删除出错:",e),d("删除失败"))}},_e=({selectedValues:a,selectedOptions:e})=>{n.type=a[0],n.typeText=e[0].text,Y.value=!1},Ae=async({selectedOptions:a})=>{a&&a[0]&&(n.classify=a[0].text,await fe(a[0].value)),V.value=!1},Ue=({selectedOptions:a})=>{a&&a[0]&&(n.subClassify=a[0].text),x.value=!1},$e=()=>{if(!A.value.trim()){d("请输入分类名称");return}B.value.push({text:A.value.trim(),value:A.value.trim()}),n.classify=A.value.trim(),A.value="",K.value=!1,V.value=!1},he=()=>{if(!U.value.trim()){d("请输入子分类名称");return}G.value.push({text:U.value.trim(),value:U.value.trim()}),n.subClassify=U.value.trim(),U.value="",j.value=!1,x.value=!1},De=()=>{n.classify="",V.value=!1,d("已清空分类")},ze=()=>{n.subClassify="",x.value=!1,d("已清空子分类")},Re=()=>{if(se.value){const a=se.value.getSelectedOptions();a&&a[0]&&(n.classify=a[0].text)}V.value=!1},Pe=()=>{if(te.value){const a=te.value.getSelectedOptions();a&&a[0]&&(n.subClassify=a[0].text)}x.value=!1},ve=a=>({0:"支出",1:"收入",2:"不计入收支"})[a]||"未知",Fe=a=>({0:"danger",1:"success",2:"default"})[a]||"default",Le=a=>a===0?"expense":a===1?"income":"neutral",Me=(a,e)=>{const o=ne(a);return e===0?`- ${o}`:e===1?`+ ${o}`:o},ne=a=>`¥${Number(a).toFixed(2)}`,ue=a=>a?new Date(a).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"",Ne=()=>{u.occurredAt="",u.reason="",u.amount="",u.type=0,u.typeText="",u.classify="",u.subClassify="";const a=new Date;ee.value=[a.getFullYear(),a.getMonth()+1,a.getDate()],u.occurredAt=ce(a),J.value=!0},ce=a=>{const e=a.getFullYear(),o=String(a.getMonth()+1).padStart(2,"0"),T=String(a.getDate()).padStart(2,"0"),z=String(a.getHours()).padStart(2,"0"),R=String(a.getMinutes()).padStart(2,"0"),re=String(a.getSeconds()).padStart(2,"0");return`${e}-${o}-${T} ${z}:${R}:${re}`},qe=({selectedValues:a})=>{const e=new Date(a[0],a[1]-1,a[2]);u.occurredAt=ce(e),q.value=!1},Ie=({selectedValues:a,selectedOptions:e})=>{u.type=a[0],u.typeText=e[0].text,I.value=!1},Be=async({selectedOptions:a})=>{a&&a[0]&&(u.classify=a[0].text,await fe(a[0].value)),S.value=!1},Ge=({selectedOptions:a})=>{a&&a[0]&&(u.subClassify=a[0].text),_.value=!1},Ye=()=>{u.classify="",S.value=!1,d("已清空分类")},Ke=()=>{u.subClassify="",_.value=!1,d("已清空子分类")},je=()=>{if(le.value){const a=le.value.getSelectedOptions();a&&a[0]&&(u.classify=a[0].text)}S.value=!1},Ee=()=>{if(ae.value){const a=ae.value.getSelectedOptions();a&&a[0]&&(u.subClassify=a[0].text)}_.value=!1},He=async()=>{try{O.value=!0;const a={occurredAt:u.occurredAt,reason:u.reason,amount:parseFloat(u.amount),type:u.type,classify:u.classify||null,subClassify:u.subClassify||null},e=await il(a);e.success?(d("添加成功"),J.value=!1,D(!0),await oe()):d(e.message||"添加失败")}catch(a){console.error("添加出错:",a),d("添加失败: "+(a.message||"未知错误"))}finally{O.value=!1}};return sl(async()=>{await oe()}),(a,e)=>{const o=f("van-button"),T=f("van-nav-bar"),z=f("van-loading"),R=f("van-tag"),re=f("van-icon"),Je=f("van-swipe-cell"),E=f("van-cell-group"),Qe=f("van-empty"),We=f("van-list"),Xe=f("van-pull-refresh"),ie=f("van-cell"),v=f("van-field"),pe=f("van-form"),g=f("van-popup"),P=f("van-picker"),ye=f("van-dialog"),Ze=f("van-date-picker"),Oe=f("van-search");return y(),w("div",vl,[s(T,{title:"交易记录",fixed:"",placeholder:"",style:{"z-index":"9999"}},{right:t(()=>[s(o,{type:"primary",size:"small",onClick:Ne},{default:t(()=>[...e[47]||(e[47]=[m(" 手动录账 ",-1)])]),_:1})]),_:1}),s(Xe,{modelValue:W.value,"onUpdate:modelValue":e[1]||(e[1]=l=>W.value=l),onRefresh:ge,class:"refresh-wrapper"},{default:t(()=>[$.value&&!(p.value&&p.value.length)?(y(),Q(z,{key:0,vertical:"",style:{padding:"50px 0"}},{default:t(()=>[...e[48]||(e[48]=[m(" 加载中... ",-1)])]),_:1})):b("",!0),s(We,{loading:$.value,"onUpdate:loading":e[0]||(e[0]=l=>$.value=l),finished:k.value,"finished-text":"没有更多了",onLoad:Ve},{default:t(()=>[p.value&&p.value.length?(y(),Q(E,{key:0,inset:"",style:{"margin-top":"10px"}},{default:t(()=>[(y(!0),w(tl,null,ol(p.value,l=>(y(),Q(Je,{key:l.id},{right:t(()=>[s(o,{square:"",type:"danger",text:"删除",class:"delete-button",onClick:el=>Se(l)},null,8,["onClick"])]),default:t(()=>[i("div",{class:"transaction-card",onClick:el=>xe(l)},[i("div",pl,[i("div",yl,[i("span",bl,C(l.reason||"(无摘要)"),1),s(R,{type:Fe(l.type),size:"medium"},{default:t(()=>[m(C(ve(l.type)),1)]),_:2},1032,["type"])]),i("div",Cl,[i("div",null,"交易时间: "+C(ue(l.occurredAt)),1),l.classify?(y(),w("div",gl,[m("分类: "+C(l.classify)+" ",1),l.subClassify?(y(),w("span",wl,"/ "+C(l.subClassify),1)):b("",!0)])):b("",!0),l.card?(y(),w("div",kl," 卡号: "+C(l.card),1)):b("",!0),l.importFrom?(y(),w("div",Vl," 来源: "+C(l.importFrom),1)):b("",!0)])]),i("div",xl,[i("div",Tl,[i("div",{class:nl(["amount",Le(l.type)])},C(Me(l.amount,l.type)),3),l.balance&&l.balance>0?(y(),w("div",Sl," 余额: "+C(ne(l.balance)),1)):b("",!0),l.refundAmount&&l.refundAmount>0?(y(),w("div",_l," 退款: "+C(ne(l.refundAmount)),1)):b("",!0)]),s(re,{name:"arrow",size:"16",color:"#c8c9cc"})])],8,cl)]),_:2},1024))),128))]),_:1})):b("",!0),!$.value&&!(p.value&&p.value.length)?(y(),Q(Qe,{key:1,description:"暂无交易记录"})):b("",!0)]),_:1},8,["loading","finished"])]),_:1},8,["modelValue"]),s(g,{show:H.value,"onUpdate:show":e[11]||(e[11]=l=>H.value=l),position:"bottom",style:{height:"85%"},round:"",closeable:""},{default:t(()=>[M.value?(y(),w("div",Al,[e[50]||(e[50]=i("div",{class:"detail-header",style:{"margin-top":"10px","margin-left":"10px"}},[i("h3",null,"交易详情")],-1)),s(pe,{onSubmit:Te},{default:t(()=>[s(E,{inset:""},{default:t(()=>[s(ie,{title:"卡号",value:M.value.card},null,8,["value"]),s(ie,{title:"交易时间",value:ue(M.value.occurredAt)},null,8,["value"]),s(ie,{title:"记录时间",value:ue(M.value.createTime)},null,8,["value"])]),_:1}),s(E,{inset:"",title:"交易明细"},{default:t(()=>[s(v,{modelValue:n.reason,"onUpdate:modelValue":e[2]||(e[2]=l=>n.reason=l),name:"reason",label:"交易摘要",placeholder:"请输入交易摘要",type:"textarea",rows:"2",autosize:"",maxlength:"200","show-word-limit":""},null,8,["modelValue"]),s(v,{modelValue:n.amount,"onUpdate:modelValue":e[3]||(e[3]=l=>n.amount=l),name:"amount",label:"交易金额",placeholder:"请输入交易金额",type:"number",rules:[{required:!0,message:"请输入交易金额"}]},null,8,["modelValue"]),s(v,{modelValue:n.balance,"onUpdate:modelValue":e[4]||(e[4]=l=>n.balance=l),name:"balance",label:"交易后余额",placeholder:"请输入交易后余额",type:"number",rules:[{required:!0,message:"请输入交易后余额"}]},null,8,["modelValue"]),s(v,{modelValue:n.typeText,"onUpdate:modelValue":e[5]||(e[5]=l=>n.typeText=l),"is-link":"",readonly:"",name:"type",label:"交易类型",placeholder:"请选择交易类型",onClick:e[6]||(e[6]=l=>Y.value=!0),rules:[{required:!0,message:"请选择交易类型"}]},null,8,["modelValue"]),s(v,{modelValue:n.classify,"onUpdate:modelValue":e[7]||(e[7]=l=>n.classify=l),"is-link":"",readonly:"",name:"classify",label:"交易分类",placeholder:"请选择或输入交易分类",onClick:e[8]||(e[8]=l=>V.value=!0)},null,8,["modelValue"]),s(v,{modelValue:n.subClassify,"onUpdate:modelValue":e[9]||(e[9]=l=>n.subClassify=l),"is-link":"",readonly:"",name:"subClassify",label:"交易子分类",placeholder:"请选择或输入交易子分类",onClick:e[10]||(e[10]=l=>x.value=!0)},null,8,["modelValue"])]),_:1}),i("div",Ul,[s(o,{round:"",block:"",type:"primary","native-type":"submit",loading:X.value},{default:t(()=>[...e[49]||(e[49]=[m(" 保存修改 ",-1)])]),_:1},8,["loading"])])]),_:1})])):b("",!0)]),_:1},8,["show"]),s(g,{show:Y.value,"onUpdate:show":e[13]||(e[13]=l=>Y.value=l),position:"bottom",round:""},{default:t(()=>[s(P,{"show-toolbar":"",columns:de,onConfirm:_e,onCancel:e[12]||(e[12]=l=>Y.value=!1)})]),_:1},8,["show"]),s(g,{show:V.value,"onUpdate:show":e[16]||(e[16]=l=>V.value=l),position:"bottom",round:""},{default:t(()=>[s(P,{ref_key:"classifyPickerRef",ref:se,columns:B.value,onConfirm:Ae,onCancel:e[15]||(e[15]=l=>V.value=!1)},{toolbar:t(()=>[i("div",$l,[s(o,{class:"toolbar-cancel",size:"small",onClick:De},{default:t(()=>[...e[51]||(e[51]=[m("清空",-1)])]),_:1}),s(o,{class:"toolbar-add",size:"small",type:"primary",onClick:e[14]||(e[14]=l=>K.value=!0)},{default:t(()=>[...e[52]||(e[52]=[m("新增",-1)])]),_:1}),s(o,{class:"toolbar-confirm",size:"small",type:"primary",onClick:Re},{default:t(()=>[...e[53]||(e[53]=[m("确认",-1)])]),_:1})])]),_:1},8,["columns"])]),_:1},8,["show"]),s(g,{show:x.value,"onUpdate:show":e[19]||(e[19]=l=>x.value=l),position:"bottom",round:""},{default:t(()=>[s(P,{ref_key:"subClassifyPickerRef",ref:te,columns:G.value,onConfirm:Ue,onCancel:e[18]||(e[18]=l=>x.value=!1)},{toolbar:t(()=>[i("div",hl,[s(o,{class:"toolbar-cancel",size:"small",onClick:ze},{default:t(()=>[...e[54]||(e[54]=[m("清空",-1)])]),_:1}),s(o,{class:"toolbar-add",size:"small",type:"primary",onClick:e[17]||(e[17]=l=>j.value=!0)},{default:t(()=>[...e[55]||(e[55]=[m("新增",-1)])]),_:1}),s(o,{class:"toolbar-confirm",size:"small",type:"primary",onClick:Pe},{default:t(()=>[...e[56]||(e[56]=[m("确认",-1)])]),_:1})])]),_:1},8,["columns"])]),_:1},8,["show"]),s(ye,{show:K.value,"onUpdate:show":e[21]||(e[21]=l=>K.value=l),title:"新增交易分类","show-cancel-button":"",onConfirm:$e},{default:t(()=>[s(v,{modelValue:A.value,"onUpdate:modelValue":e[20]||(e[20]=l=>A.value=l),placeholder:"请输入新的交易分类"},null,8,["modelValue"])]),_:1},8,["show"]),s(ye,{show:j.value,"onUpdate:show":e[23]||(e[23]=l=>j.value=l),title:"新增交易子分类","show-cancel-button":"",onConfirm:he},{default:t(()=>[s(v,{modelValue:U.value,"onUpdate:modelValue":e[22]||(e[22]=l=>U.value=l),placeholder:"请输入新的交易子分类"},null,8,["modelValue"])]),_:1},8,["show"]),s(g,{show:J.value,"onUpdate:show":e[34]||(e[34]=l=>J.value=l),position:"bottom",style:{height:"85%"},round:"",closeable:""},{default:t(()=>[i("div",Dl,[e[58]||(e[58]=i("div",{class:"detail-header"},[i("h3",null,"手动录账单")],-1)),s(pe,{onSubmit:He},{default:t(()=>[s(E,{inset:"",title:"基本信息"},{default:t(()=>[s(v,{modelValue:u.occurredAt,"onUpdate:modelValue":e[24]||(e[24]=l=>u.occurredAt=l),"is-link":"",readonly:"",name:"occurredAt",label:"交易时间",placeholder:"请选择交易时间",onClick:e[25]||(e[25]=l=>q.value=!0),rules:[{required:!0,message:"请选择交易时间"}]},null,8,["modelValue"])]),_:1}),s(E,{inset:"",title:"交易明细"},{default:t(()=>[s(v,{modelValue:u.reason,"onUpdate:modelValue":e[26]||(e[26]=l=>u.reason=l),name:"reason",label:"交易摘要",placeholder:"请输入交易摘要",type:"textarea",rows:"2",autosize:"",maxlength:"200","show-word-limit":""},null,8,["modelValue"]),s(v,{modelValue:u.amount,"onUpdate:modelValue":e[27]||(e[27]=l=>u.amount=l),name:"amount",label:"交易金额",placeholder:"请输入交易金额",type:"number",rules:[{required:!0,message:"请输入交易金额"}]},null,8,["modelValue"]),s(v,{modelValue:u.typeText,"onUpdate:modelValue":e[28]||(e[28]=l=>u.typeText=l),"is-link":"",readonly:"",name:"type",label:"交易类型",placeholder:"请选择交易类型",onClick:e[29]||(e[29]=l=>I.value=!0),rules:[{required:!0,message:"请选择交易类型"}]},null,8,["modelValue"]),s(v,{modelValue:u.classify,"onUpdate:modelValue":e[30]||(e[30]=l=>u.classify=l),"is-link":"",readonly:"",name:"classify",label:"交易分类",placeholder:"请选择或输入交易分类",onClick:e[31]||(e[31]=l=>S.value=!0)},null,8,["modelValue"]),s(v,{modelValue:u.subClassify,"onUpdate:modelValue":e[32]||(e[32]=l=>u.subClassify=l),"is-link":"",readonly:"",name:"subClassify",label:"交易子分类",placeholder:"请选择或输入交易子分类",onClick:e[33]||(e[33]=l=>_.value=!0)},null,8,["modelValue"])]),_:1}),i("div",zl,[s(o,{round:"",block:"",type:"primary","native-type":"submit",loading:O.value},{default:t(()=>[...e[57]||(e[57]=[m(" 确认添加 ",-1)])]),_:1},8,["loading"])])]),_:1})])]),_:1},8,["show"]),s(g,{show:q.value,"onUpdate:show":e[37]||(e[37]=l=>q.value=l),position:"bottom",round:""},{default:t(()=>[s(Ze,{modelValue:ee.value,"onUpdate:modelValue":e[35]||(e[35]=l=>ee.value=l),title:"选择日期时间","min-date":new Date(2020,0,1),"max-date":new Date,onConfirm:qe,onCancel:e[36]||(e[36]=l=>q.value=!1)},null,8,["modelValue","min-date","max-date"])]),_:1},8,["show"]),s(g,{show:I.value,"onUpdate:show":e[39]||(e[39]=l=>I.value=l),position:"bottom",round:""},{default:t(()=>[s(P,{"show-toolbar":"",columns:de,onConfirm:Ie,onCancel:e[38]||(e[38]=l=>I.value=!1)})]),_:1},8,["show"]),s(g,{show:S.value,"onUpdate:show":e[42]||(e[42]=l=>S.value=l),position:"bottom",round:""},{default:t(()=>[s(P,{ref_key:"addClassifyPickerRef",ref:le,columns:B.value,onConfirm:Be,onCancel:e[41]||(e[41]=l=>S.value=!1)},{toolbar:t(()=>[i("div",Rl,[s(o,{class:"toolbar-cancel",size:"small",onClick:Ye},{default:t(()=>[...e[59]||(e[59]=[m("清空",-1)])]),_:1}),s(o,{class:"toolbar-add",size:"small",type:"primary",onClick:e[40]||(e[40]=l=>K.value=!0)},{default:t(()=>[...e[60]||(e[60]=[m("新增",-1)])]),_:1}),s(o,{class:"toolbar-confirm",size:"small",type:"primary",onClick:je},{default:t(()=>[...e[61]||(e[61]=[m("确认",-1)])]),_:1})])]),_:1},8,["columns"])]),_:1},8,["show"]),s(g,{show:_.value,"onUpdate:show":e[45]||(e[45]=l=>_.value=l),position:"bottom",round:""},{default:t(()=>[s(P,{ref_key:"addSubClassifyPickerRef",ref:ae,columns:G.value,onConfirm:Ge,onCancel:e[44]||(e[44]=l=>_.value=!1)},{toolbar:t(()=>[i("div",Pl,[s(o,{class:"toolbar-cancel",size:"small",onClick:Ke},{default:t(()=>[...e[62]||(e[62]=[m("清空",-1)])]),_:1}),s(o,{class:"toolbar-add",size:"small",type:"primary",onClick:e[43]||(e[43]=l=>j.value=!0)},{default:t(()=>[...e[63]||(e[63]=[m("新增",-1)])]),_:1}),s(o,{class:"toolbar-confirm",size:"small",type:"primary",onClick:Ee},{default:t(()=>[...e[64]||(e[64]=[m("确认",-1)])]),_:1})])]),_:1},8,["columns"])]),_:1},8,["show"]),i("div",Fl,[s(Oe,{modelValue:N.value,"onUpdate:modelValue":[e[46]||(e[46]=l=>N.value=l),we],placeholder:"搜索交易摘要、来源、卡号、分类或子分类",onClear:ke,shape:"round"},null,8,["modelValue"])])])}}},Bl=al(Ll,[["__scopeId","data-v-bdc7ecd0"]]);export{Bl as default}; diff --git a/Web/dist/assets/TransactionsRecord-D6q5JXmJ.css b/Web/dist/assets/TransactionsRecord-D6q5JXmJ.css new file mode 100644 index 0000000..858673f --- /dev/null +++ b/Web/dist/assets/TransactionsRecord-D6q5JXmJ.css @@ -0,0 +1 @@ +.page-container[data-v-bdc7ecd0]{min-height:100vh;background-color:#f5f5f5}@media(prefers-color-scheme:dark){.page-container[data-v-bdc7ecd0]{background-color:#1a1a1a}}.refresh-wrapper[data-v-bdc7ecd0]{min-height:calc(100vh - 46px)}[data-v-bdc7ecd0] .van-cell-group--inset{margin:10px 16px;background-color:#fff;box-shadow:0 2px 8px #00000014}@media(prefers-color-scheme:dark){[data-v-bdc7ecd0] .van-cell-group--inset{background-color:#2c2c2c;box-shadow:0 2px 8px #0000004d}}[data-v-bdc7ecd0] .van-cell{background-color:#fff;border-bottom:1px solid #f0f0f0}@media(prefers-color-scheme:dark){[data-v-bdc7ecd0] .van-cell{background-color:#2c2c2c;border-bottom:1px solid #3a3a3a}}[data-v-bdc7ecd0] .van-cell:last-child{border-bottom:none}.detail-popup[data-v-bdc7ecd0]{padding:16px;height:100%;overflow-y:auto;background-color:#f5f5f5}@media(prefers-color-scheme:dark){.detail-popup[data-v-bdc7ecd0]{background-color:#1a1a1a}}.detail-popup[data-v-bdc7ecd0] .van-cell-group--inset{background-color:#fff;box-shadow:0 2px 8px #00000014}@media(prefers-color-scheme:dark){.detail-popup[data-v-bdc7ecd0] .van-cell-group--inset{background-color:#2c2c2c;box-shadow:0 2px 8px #0000004d}}.detail-header[data-v-bdc7ecd0]{margin-bottom:16px}.detail-header h3[data-v-bdc7ecd0]{margin:0;font-size:18px;font-weight:700;word-break:break-word}.detail-header p[data-v-bdc7ecd0]{margin:0;font-size:14px;color:#969799;font-weight:400}[data-v-bdc7ecd0] .van-nav-bar{background-color:transparent}[data-v-bdc7ecd0] .van-field__control,[data-v-bdc7ecd0] .van-field__value{word-break:break-all;white-space:normal}.floating-search[data-v-bdc7ecd0]{position:fixed;bottom:50px;left:0;right:0;z-index:999;padding:8px 16px;background:transparent;pointer-events:none}.floating-search[data-v-bdc7ecd0] .van-search{pointer-events:auto;box-shadow:0 2px 12px #00000026;border-radius:20px;border:none}.transaction-card[data-v-bdc7ecd0]{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;cursor:pointer;transition:background-color .3s}.card-left[data-v-bdc7ecd0]{flex:1;min-width:0;padding-right:12px}.card-right[data-v-bdc7ecd0]{display:flex;align-items:center;gap:12px;flex-shrink:0}.transaction-title[data-v-bdc7ecd0]{display:flex;align-items:center;font-weight:700;margin-bottom:8px;gap:8px}.reason[data-v-bdc7ecd0]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0}.transaction-info[data-v-bdc7ecd0]{font-size:12px;color:#969799;line-height:1.6}.transaction-amount[data-v-bdc7ecd0]{text-align:right;display:flex;flex-direction:column;align-items:flex-end;min-width:90px}.amount[data-v-bdc7ecd0]{font-size:18px;font-weight:700;margin-bottom:4px;white-space:nowrap}.amount.expense[data-v-bdc7ecd0]{color:#ee0a24}.amount.income[data-v-bdc7ecd0]{color:#07c160}.amount.neutral[data-v-bdc7ecd0]{color:#646566}.balance[data-v-bdc7ecd0]{font-size:12px;color:#969799;white-space:nowrap}.picker-toolbar[data-v-bdc7ecd0]{display:flex;width:100%;align-items:center;padding:5px 10px;border-bottom:1px solid #ebedf0}.toolbar-cancel[data-v-bdc7ecd0]{margin-right:auto}.toolbar-confirm[data-v-bdc7ecd0]{margin-left:auto}.delete-button[data-v-bdc7ecd0]{height:100%} diff --git a/Web/dist/assets/_plugin-vue_export-helper-DlAUqK2U.js b/Web/dist/assets/_plugin-vue_export-helper-DlAUqK2U.js new file mode 100644 index 0000000..718edd3 --- /dev/null +++ b/Web/dist/assets/_plugin-vue_export-helper-DlAUqK2U.js @@ -0,0 +1 @@ +const s=(t,r)=>{const o=t.__vccOpts||t;for(const[c,e]of r)o[c]=e;return o};export{s as _}; diff --git a/Web/dist/assets/index-B9ygI19o.js b/Web/dist/assets/index-B9ygI19o.js new file mode 100644 index 0000000..b20cc37 --- /dev/null +++ b/Web/dist/assets/index-B9ygI19o.js @@ -0,0 +1,6 @@ +function ze(e,t){return function(){return e.apply(t,arguments)}}const{toString:ht}=Object.prototype,{getPrototypeOf:be}=Object,{iterator:re,toStringTag:Je}=Symbol,se=(e=>t=>{const n=ht.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),P=e=>(e=e.toLowerCase(),t=>se(t)===e),oe=e=>t=>typeof t===e,{isArray:M}=Array,I=oe("undefined");function V(e){return e!==null&&!I(e)&&e.constructor!==null&&!I(e.constructor)&&T(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const Ve=P("ArrayBuffer");function mt(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&Ve(e.buffer),t}const yt=oe("string"),T=oe("function"),We=oe("number"),W=e=>e!==null&&typeof e=="object",bt=e=>e===!0||e===!1,Y=e=>{if(se(e)!=="object")return!1;const t=be(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Je in e)&&!(re in e)},wt=e=>{if(!W(e)||V(e))return!1;try{return Object.keys(e).length===0&&Object.getPrototypeOf(e)===Object.prototype}catch{return!1}},Et=P("Date"),gt=P("File"),St=P("Blob"),Rt=P("FileList"),Ot=e=>W(e)&&T(e.pipe),Tt=e=>{let t;return e&&(typeof FormData=="function"&&e instanceof FormData||T(e.append)&&((t=se(e))==="formdata"||t==="object"&&T(e.toString)&&e.toString()==="[object FormData]"))},At=P("URLSearchParams"),[xt,Ct,Nt,Pt]=["ReadableStream","Request","Response","Headers"].map(P),Ft=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function K(e,t,{allOwnKeys:n=!1}={}){if(e===null||typeof e>"u")return;let r,s;if(typeof e!="object"&&(e=[e]),M(e))for(r=0,s=e.length;r0;)if(s=n[r],t===s.toLowerCase())return s;return null}const D=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,ve=e=>!I(e)&&e!==D;function pe(){const{caseless:e,skipUndefined:t}=ve(this)&&this||{},n={},r=(s,i)=>{const o=e&&Ke(n,i)||i;Y(n[o])&&Y(s)?n[o]=pe(n[o],s):Y(s)?n[o]=pe({},s):M(s)?n[o]=s.slice():(!t||!I(s))&&(n[o]=s)};for(let s=0,i=arguments.length;s(K(t,(s,i)=>{n&&T(s)?e[i]=ze(s,n):e[i]=s},{allOwnKeys:r}),e),Ut=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),Lt=(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},Bt=(e,t,n,r)=>{let s,i,o;const c={};if(t=t||{},e==null)return t;do{for(s=Object.getOwnPropertyNames(e),i=s.length;i-- >0;)o=s[i],(!r||r(o,e,t))&&!c[o]&&(t[o]=e[o],c[o]=!0);e=n!==!1&&be(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kt=(e,t,n)=>{e=String(e),(n===void 0||n>e.length)&&(n=e.length),n-=t.length;const r=e.indexOf(t,n);return r!==-1&&r===n},Dt=e=>{if(!e)return null;if(M(e))return e;let t=e.length;if(!We(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},jt=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&be(Uint8Array)),qt=(e,t)=>{const r=(e&&e[re]).call(e);let s;for(;(s=r.next())&&!s.done;){const i=s.value;t.call(e,i[0],i[1])}},Ht=(e,t)=>{let n;const r=[];for(;(n=e.exec(t))!==null;)r.push(n);return r},It=P("HTMLFormElement"),Mt=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(n,r,s){return r.toUpperCase()+s}),Ce=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),$t=P("RegExp"),Xe=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),r={};K(n,(s,i)=>{let o;(o=t(s,i,e))!==!1&&(r[i]=o||s)}),Object.defineProperties(e,r)},zt=e=>{Xe(e,(t,n)=>{if(T(e)&&["arguments","caller","callee"].indexOf(n)!==-1)return!1;const r=e[n];if(T(r)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")})}})},Jt=(e,t)=>{const n={},r=s=>{s.forEach(i=>{n[i]=!0})};return M(e)?r(e):r(String(e).split(t)),n},Vt=()=>{},Wt=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t;function Kt(e){return!!(e&&T(e.append)&&e[Je]==="FormData"&&e[re])}const vt=e=>{const t=new Array(10),n=(r,s)=>{if(W(r)){if(t.indexOf(r)>=0)return;if(V(r))return r;if(!("toJSON"in r)){t[s]=r;const i=M(r)?[]:{};return K(r,(o,c)=>{const d=n(o,s+1);!I(d)&&(i[c]=d)}),t[s]=void 0,i}}return r};return n(e,0)},Xt=P("AsyncFunction"),Gt=e=>e&&(W(e)||T(e))&&T(e.then)&&T(e.catch),Ge=((e,t)=>e?setImmediate:t?((n,r)=>(D.addEventListener("message",({source:s,data:i})=>{s===D&&i===n&&r.length&&r.shift()()},!1),s=>{r.push(s),D.postMessage(n,"*")}))(`axios@${Math.random()}`,[]):n=>setTimeout(n))(typeof setImmediate=="function",T(D.postMessage)),Qt=typeof queueMicrotask<"u"?queueMicrotask.bind(D):typeof process<"u"&&process.nextTick||Ge,Zt=e=>e!=null&&T(e[re]),a={isArray:M,isArrayBuffer:Ve,isBuffer:V,isFormData:Tt,isArrayBufferView:mt,isString:yt,isNumber:We,isBoolean:bt,isObject:W,isPlainObject:Y,isEmptyObject:wt,isReadableStream:xt,isRequest:Ct,isResponse:Nt,isHeaders:Pt,isUndefined:I,isDate:Et,isFile:gt,isBlob:St,isRegExp:$t,isFunction:T,isStream:Ot,isURLSearchParams:At,isTypedArray:jt,isFileList:Rt,forEach:K,merge:pe,extend:_t,trim:Ft,stripBOM:Ut,inherits:Lt,toFlatObject:Bt,kindOf:se,kindOfTest:P,endsWith:kt,toArray:Dt,forEachEntry:qt,matchAll:Ht,isHTMLForm:It,hasOwnProperty:Ce,hasOwnProp:Ce,reduceDescriptors:Xe,freezeMethods:zt,toObjectSet:Jt,toCamelCase:Mt,noop:Vt,toFiniteNumber:Wt,findKey:Ke,global:D,isContextDefined:ve,isSpecCompliantForm:Kt,toJSONObject:vt,isAsyncFn:Xt,isThenable:Gt,setImmediate:Ge,asap:Qt,isIterable:Zt};function y(e,t,n,r,s){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),s&&(this.response=s,this.status=s.status?s.status:null)}a.inherits(y,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:a.toJSONObject(this.config),code:this.code,status:this.status}}});const Qe=y.prototype,Ze={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(e=>{Ze[e]={value:e}});Object.defineProperties(y,Ze);Object.defineProperty(Qe,"isAxiosError",{value:!0});y.from=(e,t,n,r,s,i)=>{const o=Object.create(Qe);a.toFlatObject(e,o,function(l){return l!==Error.prototype},f=>f!=="isAxiosError");const c=e&&e.message?e.message:"Error",d=t==null&&e?e.code:t;return y.call(o,c,d,n,r,s),e&&o.cause==null&&Object.defineProperty(o,"cause",{value:e,configurable:!0}),o.name=e&&e.name||"Error",i&&Object.assign(o,i),o};const Yt=null;function he(e){return a.isPlainObject(e)||a.isArray(e)}function Ye(e){return a.endsWith(e,"[]")?e.slice(0,-2):e}function Ne(e,t,n){return e?e.concat(t).map(function(s,i){return s=Ye(s),!n&&i?"["+s+"]":s}).join(n?".":""):t}function en(e){return a.isArray(e)&&!e.some(he)}const tn=a.toFlatObject(a,{},null,function(t){return/^is[A-Z]/.test(t)});function ie(e,t,n){if(!a.isObject(e))throw new TypeError("target must be an object");t=t||new FormData,n=a.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(m,p){return!a.isUndefined(p[m])});const r=n.metaTokens,s=n.visitor||l,i=n.dots,o=n.indexes,d=(n.Blob||typeof Blob<"u"&&Blob)&&a.isSpecCompliantForm(t);if(!a.isFunction(s))throw new TypeError("visitor must be a function");function f(u){if(u===null)return"";if(a.isDate(u))return u.toISOString();if(a.isBoolean(u))return u.toString();if(!d&&a.isBlob(u))throw new y("Blob is not supported. Use a Buffer instead.");return a.isArrayBuffer(u)||a.isTypedArray(u)?d&&typeof Blob=="function"?new Blob([u]):Buffer.from(u):u}function l(u,m,p){let E=u;if(u&&!p&&typeof u=="object"){if(a.endsWith(m,"{}"))m=r?m:m.slice(0,-2),u=JSON.stringify(u);else if(a.isArray(u)&&en(u)||(a.isFileList(u)||a.endsWith(m,"[]"))&&(E=a.toArray(u)))return m=Ye(m),E.forEach(function(g,O){!(a.isUndefined(g)||g===null)&&t.append(o===!0?Ne([m],O,i):o===null?m:m+"[]",f(g))}),!1}return he(u)?!0:(t.append(Ne(p,m,i),f(u)),!1)}const h=[],b=Object.assign(tn,{defaultVisitor:l,convertValue:f,isVisitable:he});function S(u,m){if(!a.isUndefined(u)){if(h.indexOf(u)!==-1)throw Error("Circular reference detected in "+m.join("."));h.push(u),a.forEach(u,function(E,x){(!(a.isUndefined(E)||E===null)&&s.call(t,E,a.isString(x)?x.trim():x,m,b))===!0&&S(E,m?m.concat(x):[x])}),h.pop()}}if(!a.isObject(e))throw new TypeError("data must be an object");return S(e),t}function Pe(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(r){return t[r]})}function we(e,t){this._pairs=[],e&&ie(e,this,t)}const et=we.prototype;et.append=function(t,n){this._pairs.push([t,n])};et.toString=function(t){const n=t?function(r){return t.call(this,r,Pe)}:Pe;return this._pairs.map(function(s){return n(s[0])+"="+n(s[1])},"").join("&")};function nn(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function tt(e,t,n){if(!t)return e;const r=n&&n.encode||nn;a.isFunction(n)&&(n={serialize:n});const s=n&&n.serialize;let i;if(s?i=s(t,n):i=a.isURLSearchParams(t)?t.toString():new we(t,n).toString(r),i){const o=e.indexOf("#");o!==-1&&(e=e.slice(0,o)),e+=(e.indexOf("?")===-1?"?":"&")+i}return e}class Fe{constructor(){this.handlers=[]}use(t,n,r){return this.handlers.push({fulfilled:t,rejected:n,synchronous:r?r.synchronous:!1,runWhen:r?r.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){a.forEach(this.handlers,function(r){r!==null&&t(r)})}}const nt={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},rn=typeof URLSearchParams<"u"?URLSearchParams:we,sn=typeof FormData<"u"?FormData:null,on=typeof Blob<"u"?Blob:null,an={isBrowser:!0,classes:{URLSearchParams:rn,FormData:sn,Blob:on},protocols:["http","https","file","blob","url","data"]},Ee=typeof window<"u"&&typeof document<"u",me=typeof navigator=="object"&&navigator||void 0,cn=Ee&&(!me||["ReactNative","NativeScript","NS"].indexOf(me.product)<0),ln=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",un=Ee&&window.location.href||"http://localhost",fn=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:Ee,hasStandardBrowserEnv:cn,hasStandardBrowserWebWorkerEnv:ln,navigator:me,origin:un},Symbol.toStringTag,{value:"Module"})),R={...fn,...an};function dn(e,t){return ie(e,new R.classes.URLSearchParams,{visitor:function(n,r,s,i){return R.isNode&&a.isBuffer(n)?(this.append(r,n.toString("base64")),!1):i.defaultVisitor.apply(this,arguments)},...t})}function pn(e){return a.matchAll(/\w+|\[(\w*)]/g,e).map(t=>t[0]==="[]"?"":t[1]||t[0])}function hn(e){const t={},n=Object.keys(e);let r;const s=n.length;let i;for(r=0;r=n.length;return o=!o&&a.isArray(s)?s.length:o,d?(a.hasOwnProp(s,o)?s[o]=[s[o],r]:s[o]=r,!c):((!s[o]||!a.isObject(s[o]))&&(s[o]=[]),t(n,r,s[o],i)&&a.isArray(s[o])&&(s[o]=hn(s[o])),!c)}if(a.isFormData(e)&&a.isFunction(e.entries)){const n={};return a.forEachEntry(e,(r,s)=>{t(pn(r),s,n,0)}),n}return null}function mn(e,t,n){if(a.isString(e))try{return(t||JSON.parse)(e),a.trim(e)}catch(r){if(r.name!=="SyntaxError")throw r}return(n||JSON.stringify)(e)}const v={transitional:nt,adapter:["xhr","http","fetch"],transformRequest:[function(t,n){const r=n.getContentType()||"",s=r.indexOf("application/json")>-1,i=a.isObject(t);if(i&&a.isHTMLForm(t)&&(t=new FormData(t)),a.isFormData(t))return s?JSON.stringify(rt(t)):t;if(a.isArrayBuffer(t)||a.isBuffer(t)||a.isStream(t)||a.isFile(t)||a.isBlob(t)||a.isReadableStream(t))return t;if(a.isArrayBufferView(t))return t.buffer;if(a.isURLSearchParams(t))return n.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let c;if(i){if(r.indexOf("application/x-www-form-urlencoded")>-1)return dn(t,this.formSerializer).toString();if((c=a.isFileList(t))||r.indexOf("multipart/form-data")>-1){const d=this.env&&this.env.FormData;return ie(c?{"files[]":t}:t,d&&new d,this.formSerializer)}}return i||s?(n.setContentType("application/json",!1),mn(t)):t}],transformResponse:[function(t){const n=this.transitional||v.transitional,r=n&&n.forcedJSONParsing,s=this.responseType==="json";if(a.isResponse(t)||a.isReadableStream(t))return t;if(t&&a.isString(t)&&(r&&!this.responseType||s)){const o=!(n&&n.silentJSONParsing)&&s;try{return JSON.parse(t,this.parseReviver)}catch(c){if(o)throw c.name==="SyntaxError"?y.from(c,y.ERR_BAD_RESPONSE,this,null,this.response):c}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:R.classes.FormData,Blob:R.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};a.forEach(["delete","get","head","post","put","patch"],e=>{v.headers[e]={}});const yn=a.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),bn=e=>{const t={};let n,r,s;return e&&e.split(` +`).forEach(function(o){s=o.indexOf(":"),n=o.substring(0,s).trim().toLowerCase(),r=o.substring(s+1).trim(),!(!n||t[n]&&yn[n])&&(n==="set-cookie"?t[n]?t[n].push(r):t[n]=[r]:t[n]=t[n]?t[n]+", "+r:r)}),t},_e=Symbol("internals");function J(e){return e&&String(e).trim().toLowerCase()}function ee(e){return e===!1||e==null?e:a.isArray(e)?e.map(ee):String(e)}function wn(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let r;for(;r=n.exec(e);)t[r[1]]=r[2];return t}const En=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function ue(e,t,n,r,s){if(a.isFunction(r))return r.call(this,t,n);if(s&&(t=n),!!a.isString(t)){if(a.isString(r))return t.indexOf(r)!==-1;if(a.isRegExp(r))return r.test(t)}}function gn(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,n,r)=>n.toUpperCase()+r)}function Sn(e,t){const n=a.toCamelCase(" "+t);["get","set","has"].forEach(r=>{Object.defineProperty(e,r+n,{value:function(s,i,o){return this[r].call(this,t,s,i,o)},configurable:!0})})}let A=class{constructor(t){t&&this.set(t)}set(t,n,r){const s=this;function i(c,d,f){const l=J(d);if(!l)throw new Error("header name must be a non-empty string");const h=a.findKey(s,l);(!h||s[h]===void 0||f===!0||f===void 0&&s[h]!==!1)&&(s[h||d]=ee(c))}const o=(c,d)=>a.forEach(c,(f,l)=>i(f,l,d));if(a.isPlainObject(t)||t instanceof this.constructor)o(t,n);else if(a.isString(t)&&(t=t.trim())&&!En(t))o(bn(t),n);else if(a.isObject(t)&&a.isIterable(t)){let c={},d,f;for(const l of t){if(!a.isArray(l))throw TypeError("Object iterator must return a key-value pair");c[f=l[0]]=(d=c[f])?a.isArray(d)?[...d,l[1]]:[d,l[1]]:l[1]}o(c,n)}else t!=null&&i(n,t,r);return this}get(t,n){if(t=J(t),t){const r=a.findKey(this,t);if(r){const s=this[r];if(!n)return s;if(n===!0)return wn(s);if(a.isFunction(n))return n.call(this,s,r);if(a.isRegExp(n))return n.exec(s);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,n){if(t=J(t),t){const r=a.findKey(this,t);return!!(r&&this[r]!==void 0&&(!n||ue(this,this[r],r,n)))}return!1}delete(t,n){const r=this;let s=!1;function i(o){if(o=J(o),o){const c=a.findKey(r,o);c&&(!n||ue(r,r[c],c,n))&&(delete r[c],s=!0)}}return a.isArray(t)?t.forEach(i):i(t),s}clear(t){const n=Object.keys(this);let r=n.length,s=!1;for(;r--;){const i=n[r];(!t||ue(this,this[i],i,t,!0))&&(delete this[i],s=!0)}return s}normalize(t){const n=this,r={};return a.forEach(this,(s,i)=>{const o=a.findKey(r,i);if(o){n[o]=ee(s),delete n[i];return}const c=t?gn(i):String(i).trim();c!==i&&delete n[i],n[c]=ee(s),r[c]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const n=Object.create(null);return a.forEach(this,(r,s)=>{r!=null&&r!==!1&&(n[s]=t&&a.isArray(r)?r.join(", "):r)}),n}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,n])=>t+": "+n).join(` +`)}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...n){const r=new this(t);return n.forEach(s=>r.set(s)),r}static accessor(t){const r=(this[_e]=this[_e]={accessors:{}}).accessors,s=this.prototype;function i(o){const c=J(o);r[c]||(Sn(s,o),r[c]=!0)}return a.isArray(t)?t.forEach(i):i(t),this}};A.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);a.reduceDescriptors(A.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(r){this[n]=r}}});a.freezeMethods(A);function fe(e,t){const n=this||v,r=t||n,s=A.from(r.headers);let i=r.data;return a.forEach(e,function(c){i=c.call(n,i,s.normalize(),t?t.status:void 0)}),s.normalize(),i}function st(e){return!!(e&&e.__CANCEL__)}function $(e,t,n){y.call(this,e??"canceled",y.ERR_CANCELED,t,n),this.name="CanceledError"}a.inherits($,y,{__CANCEL__:!0});function ot(e,t,n){const r=n.config.validateStatus;!n.status||!r||r(n.status)?e(n):t(new y("Request failed with status code "+n.status,[y.ERR_BAD_REQUEST,y.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n))}function Rn(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}function On(e,t){e=e||10;const n=new Array(e),r=new Array(e);let s=0,i=0,o;return t=t!==void 0?t:1e3,function(d){const f=Date.now(),l=r[i];o||(o=f),n[s]=d,r[s]=f;let h=i,b=0;for(;h!==s;)b+=n[h++],h=h%e;if(s=(s+1)%e,s===i&&(i=(i+1)%e),f-o{n=l,s=null,i&&(clearTimeout(i),i=null),e(...f)};return[(...f)=>{const l=Date.now(),h=l-n;h>=r?o(f,l):(s=f,i||(i=setTimeout(()=>{i=null,o(s)},r-h)))},()=>s&&o(s)]}const ne=(e,t,n=3)=>{let r=0;const s=On(50,250);return Tn(i=>{const o=i.loaded,c=i.lengthComputable?i.total:void 0,d=o-r,f=s(d),l=o<=c;r=o;const h={loaded:o,total:c,progress:c?o/c:void 0,bytes:d,rate:f||void 0,estimated:f&&c&&l?(c-o)/f:void 0,event:i,lengthComputable:c!=null,[t?"download":"upload"]:!0};e(h)},n)},Ue=(e,t)=>{const n=e!=null;return[r=>t[0]({lengthComputable:n,total:e,loaded:r}),t[1]]},Le=e=>(...t)=>a.asap(()=>e(...t)),An=R.hasStandardBrowserEnv?((e,t)=>n=>(n=new URL(n,R.origin),e.protocol===n.protocol&&e.host===n.host&&(t||e.port===n.port)))(new URL(R.origin),R.navigator&&/(msie|trident)/i.test(R.navigator.userAgent)):()=>!0,xn=R.hasStandardBrowserEnv?{write(e,t,n,r,s,i,o){if(typeof document>"u")return;const c=[`${e}=${encodeURIComponent(t)}`];a.isNumber(n)&&c.push(`expires=${new Date(n).toUTCString()}`),a.isString(r)&&c.push(`path=${r}`),a.isString(s)&&c.push(`domain=${s}`),i===!0&&c.push("secure"),a.isString(o)&&c.push(`SameSite=${o}`),document.cookie=c.join("; ")},read(e){if(typeof document>"u")return null;const t=document.cookie.match(new RegExp("(?:^|; )"+e+"=([^;]*)"));return t?decodeURIComponent(t[1]):null},remove(e){this.write(e,"",Date.now()-864e5,"/")}}:{write(){},read(){return null},remove(){}};function Cn(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}function Nn(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}function it(e,t,n){let r=!Cn(t);return e&&(r||n==!1)?Nn(e,t):t}const Be=e=>e instanceof A?{...e}:e;function q(e,t){t=t||{};const n={};function r(f,l,h,b){return a.isPlainObject(f)&&a.isPlainObject(l)?a.merge.call({caseless:b},f,l):a.isPlainObject(l)?a.merge({},l):a.isArray(l)?l.slice():l}function s(f,l,h,b){if(a.isUndefined(l)){if(!a.isUndefined(f))return r(void 0,f,h,b)}else return r(f,l,h,b)}function i(f,l){if(!a.isUndefined(l))return r(void 0,l)}function o(f,l){if(a.isUndefined(l)){if(!a.isUndefined(f))return r(void 0,f)}else return r(void 0,l)}function c(f,l,h){if(h in t)return r(f,l);if(h in e)return r(void 0,f)}const d={url:i,method:i,data:i,baseURL:o,transformRequest:o,transformResponse:o,paramsSerializer:o,timeout:o,timeoutMessage:o,withCredentials:o,withXSRFToken:o,adapter:o,responseType:o,xsrfCookieName:o,xsrfHeaderName:o,onUploadProgress:o,onDownloadProgress:o,decompress:o,maxContentLength:o,maxBodyLength:o,beforeRedirect:o,transport:o,httpAgent:o,httpsAgent:o,cancelToken:o,socketPath:o,responseEncoding:o,validateStatus:c,headers:(f,l,h)=>s(Be(f),Be(l),h,!0)};return a.forEach(Object.keys({...e,...t}),function(l){const h=d[l]||s,b=h(e[l],t[l],l);a.isUndefined(b)&&h!==c||(n[l]=b)}),n}const at=e=>{const t=q({},e);let{data:n,withXSRFToken:r,xsrfHeaderName:s,xsrfCookieName:i,headers:o,auth:c}=t;if(t.headers=o=A.from(o),t.url=tt(it(t.baseURL,t.url,t.allowAbsoluteUrls),e.params,e.paramsSerializer),c&&o.set("Authorization","Basic "+btoa((c.username||"")+":"+(c.password?unescape(encodeURIComponent(c.password)):""))),a.isFormData(n)){if(R.hasStandardBrowserEnv||R.hasStandardBrowserWebWorkerEnv)o.setContentType(void 0);else if(a.isFunction(n.getHeaders)){const d=n.getHeaders(),f=["content-type","content-length"];Object.entries(d).forEach(([l,h])=>{f.includes(l.toLowerCase())&&o.set(l,h)})}}if(R.hasStandardBrowserEnv&&(r&&a.isFunction(r)&&(r=r(t)),r||r!==!1&&An(t.url))){const d=s&&i&&xn.read(i);d&&o.set(s,d)}return t},Pn=typeof XMLHttpRequest<"u",Fn=Pn&&function(e){return new Promise(function(n,r){const s=at(e);let i=s.data;const o=A.from(s.headers).normalize();let{responseType:c,onUploadProgress:d,onDownloadProgress:f}=s,l,h,b,S,u;function m(){S&&S(),u&&u(),s.cancelToken&&s.cancelToken.unsubscribe(l),s.signal&&s.signal.removeEventListener("abort",l)}let p=new XMLHttpRequest;p.open(s.method.toUpperCase(),s.url,!0),p.timeout=s.timeout;function E(){if(!p)return;const g=A.from("getAllResponseHeaders"in p&&p.getAllResponseHeaders()),N={data:!c||c==="text"||c==="json"?p.responseText:p.response,status:p.status,statusText:p.statusText,headers:g,config:e,request:p};ot(function(C){n(C),m()},function(C){r(C),m()},N),p=null}"onloadend"in p?p.onloadend=E:p.onreadystatechange=function(){!p||p.readyState!==4||p.status===0&&!(p.responseURL&&p.responseURL.indexOf("file:")===0)||setTimeout(E)},p.onabort=function(){p&&(r(new y("Request aborted",y.ECONNABORTED,e,p)),p=null)},p.onerror=function(O){const N=O&&O.message?O.message:"Network Error",B=new y(N,y.ERR_NETWORK,e,p);B.event=O||null,r(B),p=null},p.ontimeout=function(){let O=s.timeout?"timeout of "+s.timeout+"ms exceeded":"timeout exceeded";const N=s.transitional||nt;s.timeoutErrorMessage&&(O=s.timeoutErrorMessage),r(new y(O,N.clarifyTimeoutError?y.ETIMEDOUT:y.ECONNABORTED,e,p)),p=null},i===void 0&&o.setContentType(null),"setRequestHeader"in p&&a.forEach(o.toJSON(),function(O,N){p.setRequestHeader(N,O)}),a.isUndefined(s.withCredentials)||(p.withCredentials=!!s.withCredentials),c&&c!=="json"&&(p.responseType=s.responseType),f&&([b,u]=ne(f,!0),p.addEventListener("progress",b)),d&&p.upload&&([h,S]=ne(d),p.upload.addEventListener("progress",h),p.upload.addEventListener("loadend",S)),(s.cancelToken||s.signal)&&(l=g=>{p&&(r(!g||g.type?new $(null,e,p):g),p.abort(),p=null)},s.cancelToken&&s.cancelToken.subscribe(l),s.signal&&(s.signal.aborted?l():s.signal.addEventListener("abort",l)));const x=Rn(s.url);if(x&&R.protocols.indexOf(x)===-1){r(new y("Unsupported protocol "+x+":",y.ERR_BAD_REQUEST,e));return}p.send(i||null)})},_n=(e,t)=>{const{length:n}=e=e?e.filter(Boolean):[];if(t||n){let r=new AbortController,s;const i=function(f){if(!s){s=!0,c();const l=f instanceof Error?f:this.reason;r.abort(l instanceof y?l:new $(l instanceof Error?l.message:l))}};let o=t&&setTimeout(()=>{o=null,i(new y(`timeout ${t} of ms exceeded`,y.ETIMEDOUT))},t);const c=()=>{e&&(o&&clearTimeout(o),o=null,e.forEach(f=>{f.unsubscribe?f.unsubscribe(i):f.removeEventListener("abort",i)}),e=null)};e.forEach(f=>f.addEventListener("abort",i));const{signal:d}=r;return d.unsubscribe=()=>a.asap(c),d}},Un=function*(e,t){let n=e.byteLength;if(n{const s=Ln(e,t);let i=0,o,c=d=>{o||(o=!0,r&&r(d))};return new ReadableStream({async pull(d){try{const{done:f,value:l}=await s.next();if(f){c(),d.close();return}let h=l.byteLength;if(n){let b=i+=h;n(b)}d.enqueue(new Uint8Array(l))}catch(f){throw c(f),f}},cancel(d){return c(d),s.return()}},{highWaterMark:2})},De=64*1024,{isFunction:Z}=a,kn=(({Request:e,Response:t})=>({Request:e,Response:t}))(a.global),{ReadableStream:je,TextEncoder:qe}=a.global,He=(e,...t)=>{try{return!!e(...t)}catch{return!1}},Dn=e=>{e=a.merge.call({skipUndefined:!0},kn,e);const{fetch:t,Request:n,Response:r}=e,s=t?Z(t):typeof fetch=="function",i=Z(n),o=Z(r);if(!s)return!1;const c=s&&Z(je),d=s&&(typeof qe=="function"?(u=>m=>u.encode(m))(new qe):async u=>new Uint8Array(await new n(u).arrayBuffer())),f=i&&c&&He(()=>{let u=!1;const m=new n(R.origin,{body:new je,method:"POST",get duplex(){return u=!0,"half"}}).headers.has("Content-Type");return u&&!m}),l=o&&c&&He(()=>a.isReadableStream(new r("").body)),h={stream:l&&(u=>u.body)};s&&["text","arrayBuffer","blob","formData","stream"].forEach(u=>{!h[u]&&(h[u]=(m,p)=>{let E=m&&m[u];if(E)return E.call(m);throw new y(`Response type '${u}' is not supported`,y.ERR_NOT_SUPPORT,p)})});const b=async u=>{if(u==null)return 0;if(a.isBlob(u))return u.size;if(a.isSpecCompliantForm(u))return(await new n(R.origin,{method:"POST",body:u}).arrayBuffer()).byteLength;if(a.isArrayBufferView(u)||a.isArrayBuffer(u))return u.byteLength;if(a.isURLSearchParams(u)&&(u=u+""),a.isString(u))return(await d(u)).byteLength},S=async(u,m)=>{const p=a.toFiniteNumber(u.getContentLength());return p??b(m)};return async u=>{let{url:m,method:p,data:E,signal:x,cancelToken:g,timeout:O,onDownloadProgress:N,onUploadProgress:B,responseType:C,headers:ce,withCredentials:X="same-origin",fetchOptions:Se}=at(u),Re=t||fetch;C=C?(C+"").toLowerCase():"text";let G=_n([x,g&&g.toAbortSignal()],O),z=null;const k=G&&G.unsubscribe&&(()=>{G.unsubscribe()});let Oe;try{if(B&&f&&p!=="get"&&p!=="head"&&(Oe=await S(ce,E))!==0){let L=new n(m,{method:"POST",body:E,duplex:"half"}),H;if(a.isFormData(E)&&(H=L.headers.get("content-type"))&&ce.setContentType(H),L.body){const[le,Q]=Ue(Oe,ne(Le(B)));E=ke(L.body,De,le,Q)}}a.isString(X)||(X=X?"include":"omit");const F=i&&"credentials"in n.prototype,Te={...Se,signal:G,method:p.toUpperCase(),headers:ce.normalize().toJSON(),body:E,duplex:"half",credentials:F?X:void 0};z=i&&new n(m,Te);let U=await(i?Re(z,Se):Re(m,Te));const Ae=l&&(C==="stream"||C==="response");if(l&&(N||Ae&&k)){const L={};["status","statusText","headers"].forEach(xe=>{L[xe]=U[xe]});const H=a.toFiniteNumber(U.headers.get("content-length")),[le,Q]=N&&Ue(H,ne(Le(N),!0))||[];U=new r(ke(U.body,De,le,()=>{Q&&Q(),k&&k()}),L)}C=C||"text";let pt=await h[a.findKey(h,C)||"text"](U,u);return!Ae&&k&&k(),await new Promise((L,H)=>{ot(L,H,{data:pt,headers:A.from(U.headers),status:U.status,statusText:U.statusText,config:u,request:z})})}catch(F){throw k&&k(),F&&F.name==="TypeError"&&/Load failed|fetch/i.test(F.message)?Object.assign(new y("Network Error",y.ERR_NETWORK,u,z),{cause:F.cause||F}):y.from(F,F&&F.code,u,z)}}},jn=new Map,ct=e=>{let t=e&&e.env||{};const{fetch:n,Request:r,Response:s}=t,i=[r,s,n];let o=i.length,c=o,d,f,l=jn;for(;c--;)d=i[c],f=l.get(d),f===void 0&&l.set(d,f=c?new Map:Dn(t)),l=f;return f};ct();const ge={http:Yt,xhr:Fn,fetch:{get:ct}};a.forEach(ge,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch{}Object.defineProperty(e,"adapterName",{value:t})}});const Ie=e=>`- ${e}`,qn=e=>a.isFunction(e)||e===null||e===!1;function Hn(e,t){e=a.isArray(e)?e:[e];const{length:n}=e;let r,s;const i={};for(let o=0;o`adapter ${d} `+(f===!1?"is not supported by the environment":"is not available in the build"));let c=n?o.length>1?`since : +`+o.map(Ie).join(` +`):" "+Ie(o[0]):"as no adapter specified";throw new y("There is no suitable adapter to dispatch the request "+c,"ERR_NOT_SUPPORT")}return s}const lt={getAdapter:Hn,adapters:ge};function de(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new $(null,e)}function Me(e){return de(e),e.headers=A.from(e.headers),e.data=fe.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),lt.getAdapter(e.adapter||v.adapter,e)(e).then(function(r){return de(e),r.data=fe.call(e,e.transformResponse,r),r.headers=A.from(r.headers),r},function(r){return st(r)||(de(e),r&&r.response&&(r.response.data=fe.call(e,e.transformResponse,r.response),r.response.headers=A.from(r.response.headers))),Promise.reject(r)})}const ut="1.13.2",ae={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{ae[e]=function(r){return typeof r===e||"a"+(t<1?"n ":" ")+e}});const $e={};ae.transitional=function(t,n,r){function s(i,o){return"[Axios v"+ut+"] Transitional option '"+i+"'"+o+(r?". "+r:"")}return(i,o,c)=>{if(t===!1)throw new y(s(o," has been removed"+(n?" in "+n:"")),y.ERR_DEPRECATED);return n&&!$e[o]&&($e[o]=!0,console.warn(s(o," has been deprecated since v"+n+" and will be removed in the near future"))),t?t(i,o,c):!0}};ae.spelling=function(t){return(n,r)=>(console.warn(`${r} is likely a misspelling of ${t}`),!0)};function In(e,t,n){if(typeof e!="object")throw new y("options must be an object",y.ERR_BAD_OPTION_VALUE);const r=Object.keys(e);let s=r.length;for(;s-- >0;){const i=r[s],o=t[i];if(o){const c=e[i],d=c===void 0||o(c,i,e);if(d!==!0)throw new y("option "+i+" must be "+d,y.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new y("Unknown option "+i,y.ERR_BAD_OPTION)}}const te={assertOptions:In,validators:ae},_=te.validators;let j=class{constructor(t){this.defaults=t||{},this.interceptors={request:new Fe,response:new Fe}}async request(t,n){try{return await this._request(t,n)}catch(r){if(r instanceof Error){let s={};Error.captureStackTrace?Error.captureStackTrace(s):s=new Error;const i=s.stack?s.stack.replace(/^.+\n/,""):"";try{r.stack?i&&!String(r.stack).endsWith(i.replace(/^.+\n.+\n/,""))&&(r.stack+=` +`+i):r.stack=i}catch{}}throw r}}_request(t,n){typeof t=="string"?(n=n||{},n.url=t):n=t||{},n=q(this.defaults,n);const{transitional:r,paramsSerializer:s,headers:i}=n;r!==void 0&&te.assertOptions(r,{silentJSONParsing:_.transitional(_.boolean),forcedJSONParsing:_.transitional(_.boolean),clarifyTimeoutError:_.transitional(_.boolean)},!1),s!=null&&(a.isFunction(s)?n.paramsSerializer={serialize:s}:te.assertOptions(s,{encode:_.function,serialize:_.function},!0)),n.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?n.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:n.allowAbsoluteUrls=!0),te.assertOptions(n,{baseUrl:_.spelling("baseURL"),withXsrfToken:_.spelling("withXSRFToken")},!0),n.method=(n.method||this.defaults.method||"get").toLowerCase();let o=i&&a.merge(i.common,i[n.method]);i&&a.forEach(["delete","get","head","post","put","patch","common"],u=>{delete i[u]}),n.headers=A.concat(o,i);const c=[];let d=!0;this.interceptors.request.forEach(function(m){typeof m.runWhen=="function"&&m.runWhen(n)===!1||(d=d&&m.synchronous,c.unshift(m.fulfilled,m.rejected))});const f=[];this.interceptors.response.forEach(function(m){f.push(m.fulfilled,m.rejected)});let l,h=0,b;if(!d){const u=[Me.bind(this),void 0];for(u.unshift(...c),u.push(...f),b=u.length,l=Promise.resolve(n);h{if(!r._listeners)return;let i=r._listeners.length;for(;i-- >0;)r._listeners[i](s);r._listeners=null}),this.promise.then=s=>{let i;const o=new Promise(c=>{r.subscribe(c),i=c}).then(s);return o.cancel=function(){r.unsubscribe(i)},o},t(function(i,o,c){r.reason||(r.reason=new $(i,o,c),n(r.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const n=this._listeners.indexOf(t);n!==-1&&this._listeners.splice(n,1)}toAbortSignal(){const t=new AbortController,n=r=>{t.abort(r)};return this.subscribe(n),t.signal.unsubscribe=()=>this.unsubscribe(n),t.signal}static source(){let t;return{token:new ft(function(s){t=s}),cancel:t}}};function $n(e){return function(n){return e.apply(null,n)}}function zn(e){return a.isObject(e)&&e.isAxiosError===!0}const ye={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(ye).forEach(([e,t])=>{ye[t]=e});function dt(e){const t=new j(e),n=ze(j.prototype.request,t);return a.extend(n,j.prototype,t,{allOwnKeys:!0}),a.extend(n,t,null,{allOwnKeys:!0}),n.create=function(s){return dt(q(e,s))},n}const w=dt(v);w.Axios=j;w.CanceledError=$;w.CancelToken=Mn;w.isCancel=st;w.VERSION=ut;w.toFormData=ie;w.AxiosError=y;w.Cancel=w.CanceledError;w.all=function(t){return Promise.all(t)};w.spread=$n;w.isAxiosError=zn;w.mergeConfig=q;w.AxiosHeaders=A;w.formToJSON=e=>rt(a.isHTMLForm(e)?new FormData(e):e);w.getAdapter=lt.getAdapter;w.HttpStatusCode=ye;w.default=w;const{Axios:Wn,AxiosError:Kn,CanceledError:vn,isCancel:Xn,CancelToken:Gn,VERSION:Qn,all:Zn,Cancel:Yn,isAxiosError:er,spread:tr,toFormData:nr,AxiosHeaders:rr,HttpStatusCode:sr,formToJSON:or,getAdapter:ir,mergeConfig:ar}=w;export{w as a}; diff --git a/Web/dist/assets/index-CoRZCnfa.js b/Web/dist/assets/index-CoRZCnfa.js new file mode 100644 index 0000000..ef2a528 --- /dev/null +++ b/Web/dist/assets/index-CoRZCnfa.js @@ -0,0 +1,6 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/TransactionsRecord-COA69EP3.js","assets/request-CDAs_I05.js","assets/index-B9ygI19o.js","assets/_plugin-vue_export-helper-DlAUqK2U.js","assets/TransactionsRecord-D6q5JXmJ.css","assets/EmailRecord-ooSXYRv8.js","assets/EmailRecord-Hpcg_SM6.css","assets/SettingView-DpsY2gE2.js","assets/SettingView-BhjwUKGN.css","assets/CalendarView-By4eHUMb.js"])))=>i.map(i=>d[i]); +(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))o(a);new MutationObserver(a=>{for(const l of a)if(l.type==="childList")for(const i of l.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&o(i)}).observe(document,{childList:!0,subtree:!0});function n(a){const l={};return a.integrity&&(l.integrity=a.integrity),a.referrerPolicy&&(l.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?l.credentials="include":a.crossOrigin==="anonymous"?l.credentials="omit":l.credentials="same-origin",l}function o(a){if(a.ep)return;a.ep=!0;const l=n(a);fetch(a.href,l)}})();function Or(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const Be={},No=[],ln=()=>{},Du=()=>!1,Fl=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Rr=e=>e.startsWith("onUpdate:"),tt=Object.assign,Dr=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Qh=Object.prototype.hasOwnProperty,De=(e,t)=>Qh.call(e,t),be=Array.isArray,Fo=e=>Hl(e)==="[object Map]",$u=e=>Hl(e)==="[object Set]",we=e=>typeof e=="function",ze=e=>typeof e=="string",Xn=e=>typeof e=="symbol",Ne=e=>e!==null&&typeof e=="object",Bu=e=>(Ne(e)||we(e))&&we(e.then)&&we(e.catch),Mu=Object.prototype.toString,Hl=e=>Mu.call(e),em=e=>Hl(e).slice(8,-1),Vu=e=>Hl(e)==="[object Object]",$r=e=>ze(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,ga=Or(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),zl=e=>{const t=Object.create(null);return(n=>t[n]||(t[n]=e(n)))},tm=/-\w/g,Rt=zl(e=>e.replace(tm,t=>t.slice(1).toUpperCase())),nm=/\B([A-Z])/g,On=zl(e=>e.replace(nm,"-$1").toLowerCase()),jl=zl(e=>e.charAt(0).toUpperCase()+e.slice(1)),vi=zl(e=>e?`on${jl(e)}`:""),Kn=(e,t)=>!Object.is(e,t),gi=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:o,value:n})},om=e=>{const t=parseFloat(e);return isNaN(t)?e:t},am=e=>{const t=ze(e)?Number(e):NaN;return isNaN(t)?e:t};let _s;const Wl=()=>_s||(_s=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Ul(e){if(be(e)){const t={};for(let n=0;n{if(n){const o=n.split(im);o.length>1&&(t[o[0].trim()]=o[1].trim())}}),t}function cm(e){if(!e)return"";if(ze(e))return e;let t="";for(const n in e){const o=e[n];if(ze(o)||typeof o=="number"){const a=n.startsWith("--")?n:On(n);t+=`${a}:${o};`}}return t}function Yl(e){let t="";if(ze(e))t=e;else if(be(e))for(let n=0;n!!(e&&e.__v_isRef===!0),fm=e=>ze(e)?e:e==null?"":be(e)||Ne(e)&&(e.toString===Mu||!we(e.toString))?Fu(e)?fm(e.value):JSON.stringify(e,Hu,2):String(e),Hu=(e,t)=>Fu(t)?Hu(e,t.value):Fo(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[o,a],l)=>(n[bi(o,l)+" =>"]=a,n),{})}:$u(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>bi(n))}:Xn(t)?bi(t):Ne(t)&&!be(t)&&!Vu(t)?String(t):t,bi=(e,t="")=>{var n;return Xn(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};let xt;class zu{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=xt,!t&&xt&&(this.index=(xt.scopes||(xt.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0&&--this._on===0&&(xt=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){this._active=!1;let n,o;for(n=0,o=this.effects.length;n0)return;if(ya){let t=ya;for(ya=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;ba;){let t=ba;for(ba=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(o){e||(e=o)}t=n}}if(e)throw e}function Yu(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Gu(e){let t,n=e.depsTail,o=n;for(;o;){const a=o.prevDep;o.version===-1?(o===n&&(n=a),Vr(o),vm(o)):t=o,o.dep.activeLink=o.prevActiveLink,o.prevActiveLink=void 0,o=a}e.deps=t,e.depsTail=n}function Qi(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Ku(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Ku(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Aa)||(e.globalVersion=Aa,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Qi(e))))return;e.flags|=2;const t=e.dep,n=Ve,o=Ft;Ve=e,Ft=!0;try{Yu(e);const a=e.fn(e._value);(t.version===0||Kn(a,e._value))&&(e.flags|=128,e._value=a,t.version++)}catch(a){throw t.version++,a}finally{Ve=n,Ft=o,Gu(e),e.flags&=-3}}function Vr(e,t=!1){const{dep:n,prevSub:o,nextSub:a}=e;if(o&&(o.nextSub=a,e.prevSub=void 0),a&&(a.prevSub=o,e.nextSub=void 0),n.subs===e&&(n.subs=o,!o&&n.computed)){n.computed.flags&=-5;for(let l=n.computed.deps;l;l=l.nextDep)Vr(l,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function vm(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let Ft=!0;const qu=[];function _n(){qu.push(Ft),Ft=!1}function En(){const e=qu.pop();Ft=e===void 0?!0:e}function Es(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=Ve;Ve=void 0;try{t()}finally{Ve=n}}}let Aa=0;class gm{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Lr{constructor(t){this.computed=t,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(t){if(!Ve||!Ft||Ve===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==Ve)n=this.activeLink=new gm(Ve,this),Ve.deps?(n.prevDep=Ve.depsTail,Ve.depsTail.nextDep=n,Ve.depsTail=n):Ve.deps=Ve.depsTail=n,Xu(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const o=n.nextDep;o.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=o),n.prevDep=Ve.depsTail,n.nextDep=void 0,Ve.depsTail.nextDep=n,Ve.depsTail=n,Ve.deps===n&&(Ve.deps=o)}return n}trigger(t){this.version++,Aa++,this.notify(t)}notify(t){Br();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{Mr()}}}function Xu(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let o=t.deps;o;o=o.nextDep)Xu(o)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const er=new WeakMap,mo=Symbol(""),tr=Symbol(""),Pa=Symbol("");function it(e,t,n){if(Ft&&Ve){let o=er.get(e);o||er.set(e,o=new Map);let a=o.get(n);a||(o.set(n,a=new Lr),a.map=o,a.key=n),a.track()}}function wn(e,t,n,o,a,l){const i=er.get(e);if(!i){Aa++;return}const r=s=>{s&&s.trigger()};if(Br(),t==="clear")i.forEach(r);else{const s=be(e),c=s&&$r(n);if(s&&n==="length"){const u=Number(o);i.forEach((d,h)=>{(h==="length"||h===Pa||!Xn(h)&&h>=u)&&r(d)})}else switch((n!==void 0||i.has(void 0))&&r(i.get(n)),c&&r(i.get(Pa)),t){case"add":s?c&&r(i.get("length")):(r(i.get(mo)),Fo(e)&&r(i.get(tr)));break;case"delete":s||(r(i.get(mo)),Fo(e)&&r(i.get(tr)));break;case"set":Fo(e)&&r(i.get(mo));break}}Mr()}function Co(e){const t=Ie(e);return t===e?t:(it(t,"iterate",Pa),Pt(e)?t:t.map(jt))}function Gl(e){return it(e=Ie(e),"iterate",Pa),e}function jn(e,t){return kn(e)?vo(e)?Yo(jt(t)):Yo(t):jt(t)}const bm={__proto__:null,[Symbol.iterator](){return pi(this,Symbol.iterator,e=>jn(this,e))},concat(...e){return Co(this).concat(...e.map(t=>be(t)?Co(t):t))},entries(){return pi(this,"entries",e=>(e[1]=jn(this,e[1]),e))},every(e,t){return fn(this,"every",e,t,void 0,arguments)},filter(e,t){return fn(this,"filter",e,t,n=>n.map(o=>jn(this,o)),arguments)},find(e,t){return fn(this,"find",e,t,n=>jn(this,n),arguments)},findIndex(e,t){return fn(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return fn(this,"findLast",e,t,n=>jn(this,n),arguments)},findLastIndex(e,t){return fn(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return fn(this,"forEach",e,t,void 0,arguments)},includes(...e){return wi(this,"includes",e)},indexOf(...e){return wi(this,"indexOf",e)},join(e){return Co(this).join(e)},lastIndexOf(...e){return wi(this,"lastIndexOf",e)},map(e,t){return fn(this,"map",e,t,void 0,arguments)},pop(){return aa(this,"pop")},push(...e){return aa(this,"push",e)},reduce(e,...t){return ks(this,"reduce",e,t)},reduceRight(e,...t){return ks(this,"reduceRight",e,t)},shift(){return aa(this,"shift")},some(e,t){return fn(this,"some",e,t,void 0,arguments)},splice(...e){return aa(this,"splice",e)},toReversed(){return Co(this).toReversed()},toSorted(e){return Co(this).toSorted(e)},toSpliced(...e){return Co(this).toSpliced(...e)},unshift(...e){return aa(this,"unshift",e)},values(){return pi(this,"values",e=>jn(this,e))}};function pi(e,t,n){const o=Gl(e),a=o[t]();return o!==e&&!Pt(e)&&(a._next=a.next,a.next=()=>{const l=a._next();return l.done||(l.value=n(l.value)),l}),a}const ym=Array.prototype;function fn(e,t,n,o,a,l){const i=Gl(e),r=i!==e&&!Pt(e),s=i[t];if(s!==ym[t]){const d=s.apply(e,l);return r?jt(d):d}let c=n;i!==e&&(r?c=function(d,h){return n.call(this,jn(e,d),h,e)}:n.length>2&&(c=function(d,h){return n.call(this,d,h,e)}));const u=s.call(i,c,o);return r&&a?a(u):u}function ks(e,t,n,o){const a=Gl(e);let l=n;return a!==e&&(Pt(e)?n.length>3&&(l=function(i,r,s){return n.call(this,i,r,s,e)}):l=function(i,r,s){return n.call(this,i,jn(e,r),s,e)}),a[t](l,...o)}function wi(e,t,n){const o=Ie(e);it(o,"iterate",Pa);const a=o[t](...n);return(a===-1||a===!1)&&Hr(n[0])?(n[0]=Ie(n[0]),o[t](...n)):a}function aa(e,t,n=[]){_n(),Br();const o=Ie(e)[t].apply(e,n);return Mr(),En(),o}const pm=Or("__proto__,__v_isRef,__isVue"),Zu=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Xn));function wm(e){Xn(e)||(e=String(e));const t=Ie(this);return it(t,"has",e),t.hasOwnProperty(e)}class Ju{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,o){if(n==="__v_skip")return t.__v_skip;const a=this._isReadonly,l=this._isShallow;if(n==="__v_isReactive")return!a;if(n==="__v_isReadonly")return a;if(n==="__v_isShallow")return l;if(n==="__v_raw")return o===(a?l?Im:nd:l?td:ed).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(o)?t:void 0;const i=be(t);if(!a){let s;if(i&&(s=bm[n]))return s;if(n==="hasOwnProperty")return wm}const r=Reflect.get(t,n,ot(t)?t:o);if((Xn(n)?Zu.has(n):pm(n))||(a||it(t,"get",n),l))return r;if(ot(r)){const s=i&&$r(n)?r:r.value;return a&&Ne(s)?or(s):s}return Ne(r)?a?or(r):je(r):r}}class Qu extends Ju{constructor(t=!1){super(!1,t)}set(t,n,o,a){let l=t[n];const i=be(t)&&$r(n);if(!this._isShallow){const c=kn(l);if(!Pt(o)&&!kn(o)&&(l=Ie(l),o=Ie(o)),!i&&ot(l)&&!ot(o))return c||(l.value=o),!0}const r=i?Number(n)e,Ya=e=>Reflect.getPrototypeOf(e);function _m(e,t,n){return function(...o){const a=this.__v_raw,l=Ie(a),i=Fo(l),r=e==="entries"||e===Symbol.iterator&&i,s=e==="keys"&&i,c=a[e](...o),u=n?nr:t?Yo:jt;return!t&&it(l,"iterate",s?tr:mo),{next(){const{value:d,done:h}=c.next();return h?{value:d,done:h}:{value:r?[u(d[0]),u(d[1])]:u(d),done:h}},[Symbol.iterator](){return this}}}}function Ga(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Em(e,t){const n={get(a){const l=this.__v_raw,i=Ie(l),r=Ie(a);e||(Kn(a,r)&&it(i,"get",a),it(i,"get",r));const{has:s}=Ya(i),c=t?nr:e?Yo:jt;if(s.call(i,a))return c(l.get(a));if(s.call(i,r))return c(l.get(r));l!==i&&l.get(a)},get size(){const a=this.__v_raw;return!e&&it(Ie(a),"iterate",mo),a.size},has(a){const l=this.__v_raw,i=Ie(l),r=Ie(a);return e||(Kn(a,r)&&it(i,"has",a),it(i,"has",r)),a===r?l.has(a):l.has(a)||l.has(r)},forEach(a,l){const i=this,r=i.__v_raw,s=Ie(r),c=t?nr:e?Yo:jt;return!e&&it(s,"iterate",mo),r.forEach((u,d)=>a.call(l,c(u),c(d),i))}};return tt(n,e?{add:Ga("add"),set:Ga("set"),delete:Ga("delete"),clear:Ga("clear")}:{add(a){!t&&!Pt(a)&&!kn(a)&&(a=Ie(a));const l=Ie(this);return Ya(l).has.call(l,a)||(l.add(a),wn(l,"add",a,a)),this},set(a,l){!t&&!Pt(l)&&!kn(l)&&(l=Ie(l));const i=Ie(this),{has:r,get:s}=Ya(i);let c=r.call(i,a);c||(a=Ie(a),c=r.call(i,a));const u=s.call(i,a);return i.set(a,l),c?Kn(l,u)&&wn(i,"set",a,l):wn(i,"add",a,l),this},delete(a){const l=Ie(this),{has:i,get:r}=Ya(l);let s=i.call(l,a);s||(a=Ie(a),s=i.call(l,a)),r&&r.call(l,a);const c=l.delete(a);return s&&wn(l,"delete",a,void 0),c},clear(){const a=Ie(this),l=a.size!==0,i=a.clear();return l&&wn(a,"clear",void 0,void 0),i}}),["keys","values","entries",Symbol.iterator].forEach(a=>{n[a]=_m(a,e,t)}),n}function Nr(e,t){const n=Em(e,t);return(o,a,l)=>a==="__v_isReactive"?!e:a==="__v_isReadonly"?e:a==="__v_raw"?o:Reflect.get(De(n,a)&&a in o?n:o,a,l)}const km={get:Nr(!1,!1)},Am={get:Nr(!1,!0)},Pm={get:Nr(!0,!1)};const ed=new WeakMap,td=new WeakMap,nd=new WeakMap,Im=new WeakMap;function Om(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Rm(e){return e.__v_skip||!Object.isExtensible(e)?0:Om(em(e))}function je(e){return kn(e)?e:Fr(e,!1,Sm,km,ed)}function od(e){return Fr(e,!1,Tm,Am,td)}function or(e){return Fr(e,!0,Cm,Pm,nd)}function Fr(e,t,n,o,a){if(!Ne(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const l=Rm(e);if(l===0)return e;const i=a.get(e);if(i)return i;const r=new Proxy(e,l===2?o:n);return a.set(e,r),r}function vo(e){return kn(e)?vo(e.__v_raw):!!(e&&e.__v_isReactive)}function kn(e){return!!(e&&e.__v_isReadonly)}function Pt(e){return!!(e&&e.__v_isShallow)}function Hr(e){return e?!!e.__v_raw:!1}function Ie(e){const t=e&&e.__v_raw;return t?Ie(t):e}function ad(e){return!De(e,"__v_skip")&&Object.isExtensible(e)&&Lu(e,"__v_skip",!0),e}const jt=e=>Ne(e)?je(e):e,Yo=e=>Ne(e)?or(e):e;function ot(e){return e?e.__v_isRef===!0:!1}function M(e){return ld(e,!1)}function Dm(e){return ld(e,!0)}function ld(e,t){return ot(e)?e:new $m(e,t)}class $m{constructor(t,n){this.dep=new Lr,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:Ie(t),this._value=n?t:jt(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,o=this.__v_isShallow||Pt(t)||kn(t);t=o?t:Ie(t),Kn(t,n)&&(this._rawValue=t,this._value=o?t:jt(t),this.dep.trigger())}}function It(e){return ot(e)?e.value:e}const Bm={get:(e,t,n)=>t==="__v_raw"?e:It(Reflect.get(e,t,n)),set:(e,t,n,o)=>{const a=e[t];return ot(a)&&!ot(n)?(a.value=n,!0):Reflect.set(e,t,n,o)}};function id(e){return vo(e)?e:new Proxy(e,Bm)}class Mm{constructor(t,n,o){this.fn=t,this.setter=n,this._value=void 0,this.dep=new Lr(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Aa-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=o}notify(){if(this.flags|=16,!(this.flags&8)&&Ve!==this)return Uu(this,!0),!0}get value(){const t=this.dep.track();return Ku(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Vm(e,t,n=!1){let o,a;return we(e)?o=e:(o=e.get,a=e.set),new Mm(o,a,n)}const Ka={},Tl=new WeakMap;let ro;function Lm(e,t=!1,n=ro){if(n){let o=Tl.get(n);o||Tl.set(n,o=[]),o.push(e)}}function Nm(e,t,n=Be){const{immediate:o,deep:a,once:l,scheduler:i,augmentJob:r,call:s}=n,c=S=>a?S:Pt(S)||a===!1||a===0?xn(S,1):xn(S);let u,d,h,m,b=!1,p=!1;if(ot(e)?(d=()=>e.value,b=Pt(e)):vo(e)?(d=()=>c(e),b=!0):be(e)?(p=!0,b=e.some(S=>vo(S)||Pt(S)),d=()=>e.map(S=>{if(ot(S))return S.value;if(vo(S))return c(S);if(we(S))return s?s(S,2):S()})):we(e)?t?d=s?()=>s(e,2):e:d=()=>{if(h){_n();try{h()}finally{En()}}const S=ro;ro=u;try{return s?s(e,3,[m]):e(m)}finally{ro=S}}:d=ln,t&&a){const S=d,y=a===!0?1/0:a;d=()=>xn(S(),y)}const g=mm(),w=()=>{u.stop(),g&&g.active&&Dr(g.effects,u)};if(l&&t){const S=t;t=(...y)=>{S(...y),w()}}let v=p?new Array(e.length).fill(Ka):Ka;const x=S=>{if(!(!(u.flags&1)||!u.dirty&&!S))if(t){const y=u.run();if(a||b||(p?y.some((T,O)=>Kn(T,v[O])):Kn(y,v))){h&&h();const T=ro;ro=u;try{const O=[y,v===Ka?void 0:p&&v[0]===Ka?[]:v,m];v=y,s?s(t,3,O):t(...O)}finally{ro=T}}}else u.run()};return r&&r(x),u=new ju(d),u.scheduler=i?()=>i(x,!1):x,m=S=>Lm(S,!1,u),h=u.onStop=()=>{const S=Tl.get(u);if(S){if(s)s(S,4);else for(const y of S)y();Tl.delete(u)}},t?o?x(!0):v=u.run():i?i(x.bind(null,!0),!0):u.run(),w.pause=u.pause.bind(u),w.resume=u.resume.bind(u),w.stop=w,w}function xn(e,t=1/0,n){if(t<=0||!Ne(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,ot(e))xn(e.value,t,n);else if(be(e))for(let o=0;o{xn(o,t,n)});else if(Vu(e)){for(const o in e)xn(e[o],t,n);for(const o of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,o)&&xn(e[o],t,n)}return e}function Ha(e,t,n,o){try{return o?e(...o):e()}catch(a){Kl(a,t,n)}}function Wt(e,t,n,o){if(we(e)){const a=Ha(e,t,n,o);return a&&Bu(a)&&a.catch(l=>{Kl(l,t,n)}),a}if(be(e)){const a=[];for(let l=0;l>>1,a=bt[o],l=Ia(a);l=Ia(n)?bt.push(e):bt.splice(Hm(t),0,e),e.flags|=1,sd()}}function sd(){_l||(_l=rd.then(ud))}function zm(e){be(e)?Ho.push(...e):Wn&&e.id===-1?Wn.splice(Mo+1,0,e):e.flags&1||(Ho.push(e),e.flags|=1),sd()}function As(e,t,n=on+1){for(;nIa(n)-Ia(o));if(Ho.length=0,Wn){Wn.push(...t);return}for(Wn=t,Mo=0;Moe.id==null?e.flags&2?-1:1/0:e.id;function ud(e){try{for(on=0;on{o._d&&Pl(-1);const l=El(t);let i;try{i=e(...a)}finally{El(l),o._d&&Pl(1)}return i};return o._n=!0,o._c=!0,o._d=!0,o}function et(e,t){if(Tt===null)return e;const n=Jl(Tt),o=e.dirs||(e.dirs=[]);for(let a=0;a1)return n&&we(t)?t.call(o&&o.proxy):t}}const jm=Symbol.for("v-scx"),Wm=()=>yt(jm);function Jo(e,t){return jr(e,null,t)}function te(e,t,n){return jr(e,t,n)}function jr(e,t,n=Be){const{immediate:o,deep:a,flush:l,once:i}=n,r=tt({},n),s=t&&o||!t&&l!=="post";let c;if($a){if(l==="sync"){const m=Wm();c=m.__watcherHandles||(m.__watcherHandles=[])}else if(!s){const m=()=>{};return m.stop=ln,m.resume=ln,m.pause=ln,m}}const u=rt;r.call=(m,b,p)=>Wt(m,u,b,p);let d=!1;l==="post"?r.scheduler=m=>{vt(m,u&&u.suspense)}:l!=="sync"&&(d=!0,r.scheduler=(m,b)=>{b?m():zr(m)}),r.augmentJob=m=>{t&&(m.flags|=4),d&&(m.flags|=2,u&&(m.id=u.uid,m.i=u))};const h=Nm(e,t,r);return $a&&(c?c.push(h):s&&h()),h}function Um(e,t,n){const o=this.proxy,a=ze(e)?e.includes(".")?fd(o,e):()=>o[e]:e.bind(o,o);let l;we(t)?l=t:(l=t.handler,n=t);const i=ja(this),r=jr(a,l.bind(o),n);return i(),r}function fd(e,t){const n=t.split(".");return()=>{let o=e;for(let a=0;ae.__isTeleport,pa=e=>e&&(e.disabled||e.disabled===""),Ps=e=>e&&(e.defer||e.defer===""),Is=e=>typeof SVGElement<"u"&&e instanceof SVGElement,Os=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,ar=(e,t)=>{const n=e&&e.to;return ze(n)?t?t(n):null:n},vd={name:"Teleport",__isTeleport:!0,process(e,t,n,o,a,l,i,r,s,c){const{mc:u,pc:d,pbc:h,o:{insert:m,querySelector:b,createText:p,createComment:g}}=c,w=pa(t.props);let{shapeFlag:v,children:x,dynamicChildren:S}=t;if(e==null){const y=t.el=p(""),T=t.anchor=p("");m(y,n,o),m(T,n,o);const O=(I,R)=>{v&16&&u(x,I,R,a,l,i,r,s)},C=()=>{const I=t.target=ar(t.props,b),R=gd(I,t,p,m);I&&(i!=="svg"&&Is(I)?i="svg":i!=="mathml"&&Os(I)&&(i="mathml"),a&&a.isCE&&(a.ce._teleportTargets||(a.ce._teleportTargets=new Set)).add(I),w||(O(I,R),yl(t,!1)))};w&&(O(n,T),yl(t,!0)),Ps(t.props)?(t.el.__isMounted=!1,vt(()=>{C(),delete t.el.__isMounted},l)):C()}else{if(Ps(t.props)&&e.el.__isMounted===!1){vt(()=>{vd.process(e,t,n,o,a,l,i,r,s,c)},l);return}t.el=e.el,t.targetStart=e.targetStart;const y=t.anchor=e.anchor,T=t.target=e.target,O=t.targetAnchor=e.targetAnchor,C=pa(e.props),I=C?n:T,R=C?y:O;if(i==="svg"||Is(T)?i="svg":(i==="mathml"||Os(T))&&(i="mathml"),S?(h(e.dynamicChildren,S,I,a,l,i,r),Yr(e,t,!0)):s||d(e,t,I,R,a,l,i,r,!1),w)C?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):qa(t,n,y,c,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const A=t.target=ar(t.props,b);A&&qa(t,A,null,c,0)}else C&&qa(t,T,O,c,1);yl(t,w)}},remove(e,t,n,{um:o,o:{remove:a}},l){const{shapeFlag:i,children:r,anchor:s,targetStart:c,targetAnchor:u,target:d,props:h}=e;if(d&&(a(c),a(u)),l&&a(s),i&16){const m=l||!pa(h);for(let b=0;b{e.isMounted=!0}),dn(()=>{e.isUnmounting=!0}),e}const Et=[Function,Array],bd={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Et,onEnter:Et,onAfterEnter:Et,onEnterCancelled:Et,onBeforeLeave:Et,onLeave:Et,onAfterLeave:Et,onLeaveCancelled:Et,onBeforeAppear:Et,onAppear:Et,onAfterAppear:Et,onAppearCancelled:Et},yd=e=>{const t=e.subTree;return t.component?yd(t.component):t},Km={name:"BaseTransition",props:bd,setup(e,{slots:t}){const n=$t(),o=Gm();return()=>{const a=t.default&&xd(t.default(),!0);if(!a||!a.length)return;const l=pd(a),i=Ie(e),{mode:r}=i;if(o.isLeaving)return xi(l);const s=Rs(l);if(!s)return xi(l);let c=lr(s,i,o,n,d=>c=d);s.type!==nt&&Oa(s,c);let u=n.subTree&&Rs(n.subTree);if(u&&u.type!==nt&&!co(u,s)&&yd(n).type!==nt){let d=lr(u,i,o,n);if(Oa(u,d),r==="out-in"&&s.type!==nt)return o.isLeaving=!0,d.afterLeave=()=>{o.isLeaving=!1,n.job.flags&8||n.update(),delete d.afterLeave,u=void 0},xi(l);r==="in-out"&&s.type!==nt?d.delayLeave=(h,m,b)=>{const p=wd(o,u);p[String(u.key)]=u,h[pn]=()=>{m(),h[pn]=void 0,delete c.delayedLeave,u=void 0},c.delayedLeave=()=>{b(),delete c.delayedLeave,u=void 0}}:u=void 0}else u&&(u=void 0);return l}}};function pd(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==nt){t=n;break}}return t}const qm=Km;function wd(e,t){const{leavingVNodes:n}=e;let o=n.get(t.type);return o||(o=Object.create(null),n.set(t.type,o)),o}function lr(e,t,n,o,a){const{appear:l,mode:i,persisted:r=!1,onBeforeEnter:s,onEnter:c,onAfterEnter:u,onEnterCancelled:d,onBeforeLeave:h,onLeave:m,onAfterLeave:b,onLeaveCancelled:p,onBeforeAppear:g,onAppear:w,onAfterAppear:v,onAppearCancelled:x}=t,S=String(e.key),y=wd(n,e),T=(I,R)=>{I&&Wt(I,o,9,R)},O=(I,R)=>{const A=R[1];T(I,R),be(I)?I.every(_=>_.length<=1)&&A():I.length<=1&&A()},C={mode:i,persisted:r,beforeEnter(I){let R=s;if(!n.isMounted)if(l)R=g||s;else return;I[pn]&&I[pn](!0);const A=y[S];A&&co(e,A)&&A.el[pn]&&A.el[pn](),T(R,[I])},enter(I){let R=c,A=u,_=d;if(!n.isMounted)if(l)R=w||c,A=v||u,_=x||d;else return;let D=!1;const j=I[Xa]=ae=>{D||(D=!0,ae?T(_,[I]):T(A,[I]),C.delayedLeave&&C.delayedLeave(),I[Xa]=void 0)};R?O(R,[I,j]):j()},leave(I,R){const A=String(e.key);if(I[Xa]&&I[Xa](!0),n.isUnmounting)return R();T(h,[I]);let _=!1;const D=I[pn]=j=>{_||(_=!0,R(),j?T(p,[I]):T(b,[I]),I[pn]=void 0,y[A]===e&&delete y[A])};y[A]=e,m?O(m,[I,D]):D()},clone(I){const R=lr(I,t,n,o,a);return a&&a(R),R}};return C}function xi(e){if(ql(e))return e=qn(e),e.children=null,e}function Rs(e){if(!ql(e))return md(e.type)&&e.children?pd(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&we(n.default))return n.default()}}function Oa(e,t){e.shapeFlag&6&&e.component?(e.transition=t,Oa(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 xd(e,t=!1,n){let o=[],a=0;for(let l=0;l1)for(let l=0;lwa(b,t&&(be(t)?t[p]:t),n,o,a));return}if(xa(o)&&!a){o.shapeFlag&512&&o.type.__asyncResolved&&o.component.subTree.component&&wa(e,t,n,o.component.subTree);return}const l=o.shapeFlag&4?Jl(o.component):o.el,i=a?null:l,{i:r,r:s}=e,c=t&&t.r,u=r.refs===Be?r.refs={}:r.refs,d=r.setupState,h=Ie(d),m=d===Be?Du:b=>De(h,b);if(c!=null&&c!==s){if(Ds(t),ze(c))u[c]=null,m(c)&&(d[c]=null);else if(ot(c)){c.value=null;const b=t;b.k&&(u[b.k]=null)}}if(we(s))Ha(s,r,12,[i,u]);else{const b=ze(s),p=ot(s);if(b||p){const g=()=>{if(e.f){const w=b?m(s)?d[s]:u[s]:s.value;if(a)be(w)&&Dr(w,l);else if(be(w))w.includes(l)||w.push(l);else if(b)u[s]=[l],m(s)&&(d[s]=u[s]);else{const v=[l];s.value=v,e.k&&(u[e.k]=v)}}else b?(u[s]=i,m(s)&&(d[s]=i)):p&&(s.value=i,e.k&&(u[e.k]=i))};if(i){const w=()=>{g(),kl.delete(e)};w.id=-1,kl.set(e,w),vt(w,n)}else Ds(e),g()}}}function Ds(e){const t=kl.get(e);t&&(t.flags|=8,kl.delete(e))}Wl().requestIdleCallback;Wl().cancelIdleCallback;const xa=e=>!!e.type.__asyncLoader,ql=e=>e.type.__isKeepAlive;function cn(e,t){Cd(e,"a",t)}function un(e,t){Cd(e,"da",t)}function Cd(e,t,n=rt){const o=e.__wdc||(e.__wdc=()=>{let a=n;for(;a;){if(a.isDeactivated)return;a=a.parent}return e()});if(Xl(t,o,n),n){let a=n.parent;for(;a&&a.parent;)ql(a.parent.vnode)&&Xm(o,t,n,a),a=a.parent}}function Xm(e,t,n,o){const a=Xl(t,e,o,!0);wo(()=>{Dr(o[t],a)},n)}function Xl(e,t,n=rt,o=!1){if(n){const a=n[e]||(n[e]=[]),l=t.__weh||(t.__weh=(...i)=>{_n();const r=ja(n),s=Wt(t,n,e,i);return r(),En(),s});return o?a.unshift(l):a.push(l),l}}const Rn=e=>(t,n=rt)=>{(!$a||e==="sp")&&Xl(e,(...o)=>t(...o),n)},Zm=Rn("bm"),We=Rn("m"),Td=Rn("bu"),_d=Rn("u"),dn=Rn("bum"),wo=Rn("um"),Jm=Rn("sp"),Qm=Rn("rtg"),ev=Rn("rtc");function tv(e,t=rt){Xl("ec",e,t)}const Ed="components",nv="directives";function Si(e,t){return kd(Ed,e,!0,t)||e}const ov=Symbol.for("v-ndc");function av(e){return kd(nv,e)}function kd(e,t,n=!0,o=!1){const a=Tt||rt;if(a){const l=a.type;if(e===Ed){const r=Hv(l,!1);if(r&&(r===t||r===Rt(t)||r===jl(Rt(t))))return l}const i=$s(a[e]||l[e],t)||$s(a.appContext[e],t);return!i&&o?l:i}}function $s(e,t){return e&&(e[t]||e[Rt(t)]||e[jl(Rt(t))])}function J_(e,t,n,o){let a;const l=n,i=be(e);if(i||ze(e)){const r=i&&vo(e);let s=!1,c=!1;r&&(s=!Pt(e),c=kn(e),e=Gl(e)),a=new Array(e.length);for(let u=0,d=e.length;ut(r,s,void 0,l));else{const r=Object.keys(e);a=new Array(r.length);for(let s=0,c=r.length;se?Kd(e)?Jl(e):ir(e.parent):null,Sa=tt(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=>ir(e.parent),$root:e=>ir(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Pd(e),$forceUpdate:e=>e.f||(e.f=()=>{zr(e.update)}),$nextTick:e=>e.n||(e.n=Se.bind(e.proxy)),$watch:e=>Um.bind(e)}),Ci=(e,t)=>e!==Be&&!e.__isScriptSetup&&De(e,t),lv={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:o,data:a,props:l,accessCache:i,type:r,appContext:s}=e;if(t[0]!=="$"){const h=i[t];if(h!==void 0)switch(h){case 1:return o[t];case 2:return a[t];case 4:return n[t];case 3:return l[t]}else{if(Ci(o,t))return i[t]=1,o[t];if(a!==Be&&De(a,t))return i[t]=2,a[t];if(De(l,t))return i[t]=3,l[t];if(n!==Be&&De(n,t))return i[t]=4,n[t];rr&&(i[t]=0)}}const c=Sa[t];let u,d;if(c)return t==="$attrs"&&it(e.attrs,"get",""),c(e);if((u=r.__cssModules)&&(u=u[t]))return u;if(n!==Be&&De(n,t))return i[t]=4,n[t];if(d=s.config.globalProperties,De(d,t))return d[t]},set({_:e},t,n){const{data:o,setupState:a,ctx:l}=e;return Ci(a,t)?(a[t]=n,!0):o!==Be&&De(o,t)?(o[t]=n,!0):De(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(l[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:o,appContext:a,props:l,type:i}},r){let s;return!!(n[r]||e!==Be&&r[0]!=="$"&&De(e,r)||Ci(t,r)||De(l,r)||De(o,r)||De(Sa,r)||De(a.config.globalProperties,r)||(s=i.__cssModules)&&s[r])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:De(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Bs(e){return be(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let rr=!0;function iv(e){const t=Pd(e),n=e.proxy,o=e.ctx;rr=!1,t.beforeCreate&&Ms(t.beforeCreate,e,"bc");const{data:a,computed:l,methods:i,watch:r,provide:s,inject:c,created:u,beforeMount:d,mounted:h,beforeUpdate:m,updated:b,activated:p,deactivated:g,beforeDestroy:w,beforeUnmount:v,destroyed:x,unmounted:S,render:y,renderTracked:T,renderTriggered:O,errorCaptured:C,serverPrefetch:I,expose:R,inheritAttrs:A,components:_,directives:D,filters:j}=t;if(c&&rv(c,o,null),i)for(const ne in i){const oe=i[ne];we(oe)&&(o[ne]=oe.bind(n))}if(a){const ne=a.call(n,n);Ne(ne)&&(e.data=je(ne))}if(rr=!0,l)for(const ne in l){const oe=l[ne],Te=we(oe)?oe.bind(n,n):we(oe.get)?oe.get.bind(n,n):ln,ke=!we(oe)&&we(oe.set)?oe.set.bind(n):ln,re=B({get:Te,set:ke});Object.defineProperty(o,ne,{enumerable:!0,configurable:!0,get:()=>re.value,set:H=>re.value=H})}if(r)for(const ne in r)Ad(r[ne],o,n,ne);if(s){const ne=we(s)?s.call(n):s;Reflect.ownKeys(ne).forEach(oe=>{rn(oe,ne[oe])})}u&&Ms(u,e,"c");function N(ne,oe){be(oe)?oe.forEach(Te=>ne(Te.bind(n))):oe&&ne(oe.bind(n))}if(N(Zm,d),N(We,h),N(Td,m),N(_d,b),N(cn,p),N(un,g),N(tv,C),N(ev,T),N(Qm,O),N(dn,v),N(wo,S),N(Jm,I),be(R))if(R.length){const ne=e.exposed||(e.exposed={});R.forEach(oe=>{Object.defineProperty(ne,oe,{get:()=>n[oe],set:Te=>n[oe]=Te,enumerable:!0})})}else e.exposed||(e.exposed={});y&&e.render===ln&&(e.render=y),A!=null&&(e.inheritAttrs=A),_&&(e.components=_),D&&(e.directives=D),I&&Sd(e)}function rv(e,t,n=ln){be(e)&&(e=sr(e));for(const o in e){const a=e[o];let l;Ne(a)?"default"in a?l=yt(a.from||o,a.default,!0):l=yt(a.from||o):l=yt(a),ot(l)?Object.defineProperty(t,o,{enumerable:!0,configurable:!0,get:()=>l.value,set:i=>l.value=i}):t[o]=l}}function Ms(e,t,n){Wt(be(e)?e.map(o=>o.bind(t.proxy)):e.bind(t.proxy),t,n)}function Ad(e,t,n,o){let a=o.includes(".")?fd(n,o):()=>n[o];if(ze(e)){const l=t[e];we(l)&&te(a,l)}else if(we(e))te(a,e.bind(n));else if(Ne(e))if(be(e))e.forEach(l=>Ad(l,t,n,o));else{const l=we(e.handler)?e.handler.bind(n):t[e.handler];we(l)&&te(a,l,e)}}function Pd(e){const t=e.type,{mixins:n,extends:o}=t,{mixins:a,optionsCache:l,config:{optionMergeStrategies:i}}=e.appContext,r=l.get(t);let s;return r?s=r:!a.length&&!n&&!o?s=t:(s={},a.length&&a.forEach(c=>Al(s,c,i,!0)),Al(s,t,i)),Ne(t)&&l.set(t,s),s}function Al(e,t,n,o=!1){const{mixins:a,extends:l}=t;l&&Al(e,l,n,!0),a&&a.forEach(i=>Al(e,i,n,!0));for(const i in t)if(!(o&&i==="expose")){const r=sv[i]||n&&n[i];e[i]=r?r(e[i],t[i]):t[i]}return e}const sv={data:Vs,props:Ls,emits:Ls,methods:va,computed:va,beforeCreate:mt,created:mt,beforeMount:mt,mounted:mt,beforeUpdate:mt,updated:mt,beforeDestroy:mt,beforeUnmount:mt,destroyed:mt,unmounted:mt,activated:mt,deactivated:mt,errorCaptured:mt,serverPrefetch:mt,components:va,directives:va,watch:uv,provide:Vs,inject:cv};function Vs(e,t){return t?e?function(){return tt(we(e)?e.call(this,this):e,we(t)?t.call(this,this):t)}:t:e}function cv(e,t){return va(sr(e),sr(t))}function sr(e){if(be(e)){const t={};for(let n=0;nt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Rt(t)}Modifiers`]||e[`${On(t)}Modifiers`];function mv(e,t,...n){if(e.isUnmounted)return;const o=e.vnode.props||Be;let a=n;const l=t.startsWith("update:"),i=l&&hv(o,t.slice(7));i&&(i.trim&&(a=n.map(u=>ze(u)?u.trim():u)),i.number&&(a=n.map(om)));let r,s=o[r=vi(t)]||o[r=vi(Rt(t))];!s&&l&&(s=o[r=vi(On(t))]),s&&Wt(s,e,6,a);const c=o[r+"Once"];if(c){if(!e.emitted)e.emitted={};else if(e.emitted[r])return;e.emitted[r]=!0,Wt(c,e,6,a)}}const vv=new WeakMap;function Od(e,t,n=!1){const o=n?vv:t.emitsCache,a=o.get(e);if(a!==void 0)return a;const l=e.emits;let i={},r=!1;if(!we(e)){const s=c=>{const u=Od(c,t,!0);u&&(r=!0,tt(i,u))};!n&&t.mixins.length&&t.mixins.forEach(s),e.extends&&s(e.extends),e.mixins&&e.mixins.forEach(s)}return!l&&!r?(Ne(e)&&o.set(e,null),null):(be(l)?l.forEach(s=>i[s]=null):tt(i,l),Ne(e)&&o.set(e,i),i)}function Zl(e,t){return!e||!Fl(t)?!1:(t=t.slice(2).replace(/Once$/,""),De(e,t[0].toLowerCase()+t.slice(1))||De(e,On(t))||De(e,t))}function Ns(e){const{type:t,vnode:n,proxy:o,withProxy:a,propsOptions:[l],slots:i,attrs:r,emit:s,render:c,renderCache:u,props:d,data:h,setupState:m,ctx:b,inheritAttrs:p}=e,g=El(e);let w,v;try{if(n.shapeFlag&4){const S=a||o,y=S;w=an(c.call(y,S,u,d,m,h,b)),v=r}else{const S=t;w=an(S.length>1?S(d,{attrs:r,slots:i,emit:s}):S(d,null)),v=t.props?r:gv(r)}}catch(S){Ca.length=0,Kl(S,e,1),w=f(nt)}let x=w;if(v&&p!==!1){const S=Object.keys(v),{shapeFlag:y}=x;S.length&&y&7&&(l&&S.some(Rr)&&(v=bv(v,l)),x=qn(x,v,!1,!0))}return n.dirs&&(x=qn(x,null,!1,!0),x.dirs=x.dirs?x.dirs.concat(n.dirs):n.dirs),n.transition&&Oa(x,n.transition),w=x,El(g),w}const gv=e=>{let t;for(const n in e)(n==="class"||n==="style"||Fl(n))&&((t||(t={}))[n]=e[n]);return t},bv=(e,t)=>{const n={};for(const o in e)(!Rr(o)||!(o.slice(9)in t))&&(n[o]=e[o]);return n};function yv(e,t,n){const{props:o,children:a,component:l}=e,{props:i,children:r,patchFlag:s}=t,c=l.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&s>=0){if(s&1024)return!0;if(s&16)return o?Fs(o,i,c):!!i;if(s&8){const u=t.dynamicProps;for(let d=0;dObject.create(Rd),$d=e=>Object.getPrototypeOf(e)===Rd;function wv(e,t,n,o=!1){const a={},l=Dd();e.propsDefaults=Object.create(null),Bd(e,t,a,l);for(const i in e.propsOptions[0])i in a||(a[i]=void 0);n?e.props=o?a:od(a):e.type.props?e.props=a:e.props=l,e.attrs=l}function xv(e,t,n,o){const{props:a,attrs:l,vnode:{patchFlag:i}}=e,r=Ie(a),[s]=e.propsOptions;let c=!1;if((o||i>0)&&!(i&16)){if(i&8){const u=e.vnode.dynamicProps;for(let d=0;d{s=!0;const[h,m]=Md(d,t,!0);tt(i,h),m&&r.push(...m)};!n&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}if(!l&&!s)return Ne(e)&&o.set(e,No),No;if(be(l))for(let u=0;ue==="_"||e==="_ctx"||e==="$stable",Ur=e=>be(e)?e.map(an):[an(e)],Cv=(e,t,n)=>{if(t._n)return t;const o=so((...a)=>Ur(t(...a)),n);return o._c=!1,o},Vd=(e,t,n)=>{const o=e._ctx;for(const a in e){if(Wr(a))continue;const l=e[a];if(we(l))t[a]=Cv(a,l,o);else if(l!=null){const i=Ur(l);t[a]=()=>i}}},Ld=(e,t)=>{const n=Ur(t);e.slots.default=()=>n},Nd=(e,t,n)=>{for(const o in t)(n||!Wr(o))&&(e[o]=t[o])},Tv=(e,t,n)=>{const o=e.slots=Dd();if(e.vnode.shapeFlag&32){const a=t._;a?(Nd(o,t,n),n&&Lu(o,"_",a,!0)):Vd(t,o)}else t&&Ld(e,t)},_v=(e,t,n)=>{const{vnode:o,slots:a}=e;let l=!0,i=Be;if(o.shapeFlag&32){const r=t._;r?n&&r===1?l=!1:Nd(a,t,n):(l=!t.$stable,Vd(t,a)),i=t}else t&&(Ld(e,t),i={default:1});if(l)for(const r in a)!Wr(r)&&i[r]==null&&delete a[r]},vt=Iv;function Ev(e){return kv(e)}function kv(e,t){const n=Wl();n.__VUE__=!0;const{insert:o,remove:a,patchProp:l,createElement:i,createText:r,createComment:s,setText:c,setElementText:u,parentNode:d,nextSibling:h,setScopeId:m=ln,insertStaticContent:b}=e,p=(k,P,$,L=null,G=null,W=null,ue=void 0,ie=null,le=!!P.dynamicChildren)=>{if(k===P)return;k&&!co(k,P)&&(L=E(k),H(k,G,W,!0),k=null),P.patchFlag===-2&&(le=!1,P.dynamicChildren=null);const{type:Q,ref:ge,shapeFlag:de}=P;switch(Q){case za:g(k,P,$,L);break;case nt:w(k,P,$,L);break;case _i:k==null&&v(P,$,L,ue);break;case Ke:_(k,P,$,L,G,W,ue,ie,le);break;default:de&1?y(k,P,$,L,G,W,ue,ie,le):de&6?D(k,P,$,L,G,W,ue,ie,le):(de&64||de&128)&&Q.process(k,P,$,L,G,W,ue,ie,le,J)}ge!=null&&G?wa(ge,k&&k.ref,W,P||k,!P):ge==null&&k&&k.ref!=null&&wa(k.ref,null,W,k,!0)},g=(k,P,$,L)=>{if(k==null)o(P.el=r(P.children),$,L);else{const G=P.el=k.el;P.children!==k.children&&c(G,P.children)}},w=(k,P,$,L)=>{k==null?o(P.el=s(P.children||""),$,L):P.el=k.el},v=(k,P,$,L)=>{[k.el,k.anchor]=b(k.children,P,$,L,k.el,k.anchor)},x=({el:k,anchor:P},$,L)=>{let G;for(;k&&k!==P;)G=h(k),o(k,$,L),k=G;o(P,$,L)},S=({el:k,anchor:P})=>{let $;for(;k&&k!==P;)$=h(k),a(k),k=$;a(P)},y=(k,P,$,L,G,W,ue,ie,le)=>{if(P.type==="svg"?ue="svg":P.type==="math"&&(ue="mathml"),k==null)T(P,$,L,G,W,ue,ie,le);else{const Q=k.el&&k.el._isVueCE?k.el:null;try{Q&&Q._beginPatch(),I(k,P,G,W,ue,ie,le)}finally{Q&&Q._endPatch()}}},T=(k,P,$,L,G,W,ue,ie)=>{let le,Q;const{props:ge,shapeFlag:de,transition:ve,dirs:ye}=k;if(le=k.el=i(k.type,W,ge&&ge.is,ge),de&8?u(le,k.children):de&16&&C(k.children,le,null,L,G,Ti(k,W),ue,ie),ye&&to(k,null,L,"created"),O(le,k,k.scopeId,ue,L),ge){for(const Me in ge)Me!=="value"&&!ga(Me)&&l(le,Me,null,ge[Me],W,L);"value"in ge&&l(le,"value",null,ge.value,W),(Q=ge.onVnodeBeforeMount)&&en(Q,L,k)}ye&&to(k,null,L,"beforeMount");const Ae=Av(G,ve);Ae&&ve.beforeEnter(le),o(le,P,$),((Q=ge&&ge.onVnodeMounted)||Ae||ye)&&vt(()=>{Q&&en(Q,L,k),Ae&&ve.enter(le),ye&&to(k,null,L,"mounted")},G)},O=(k,P,$,L,G)=>{if($&&m(k,$),L)for(let W=0;W{for(let Q=le;Q{const ie=P.el=k.el;let{patchFlag:le,dynamicChildren:Q,dirs:ge}=P;le|=k.patchFlag&16;const de=k.props||Be,ve=P.props||Be;let ye;if($&&no($,!1),(ye=ve.onVnodeBeforeUpdate)&&en(ye,$,P,k),ge&&to(P,k,$,"beforeUpdate"),$&&no($,!0),(de.innerHTML&&ve.innerHTML==null||de.textContent&&ve.textContent==null)&&u(ie,""),Q?R(k.dynamicChildren,Q,ie,$,L,Ti(P,G),W):ue||oe(k,P,ie,null,$,L,Ti(P,G),W,!1),le>0){if(le&16)A(ie,de,ve,$,G);else if(le&2&&de.class!==ve.class&&l(ie,"class",null,ve.class,G),le&4&&l(ie,"style",de.style,ve.style,G),le&8){const Ae=P.dynamicProps;for(let Me=0;Me{ye&&en(ye,$,P,k),ge&&to(P,k,$,"updated")},L)},R=(k,P,$,L,G,W,ue)=>{for(let ie=0;ie{if(P!==$){if(P!==Be)for(const W in P)!ga(W)&&!(W in $)&&l(k,W,P[W],null,G,L);for(const W in $){if(ga(W))continue;const ue=$[W],ie=P[W];ue!==ie&&W!=="value"&&l(k,W,ie,ue,G,L)}"value"in $&&l(k,"value",P.value,$.value,G)}},_=(k,P,$,L,G,W,ue,ie,le)=>{const Q=P.el=k?k.el:r(""),ge=P.anchor=k?k.anchor:r("");let{patchFlag:de,dynamicChildren:ve,slotScopeIds:ye}=P;ye&&(ie=ie?ie.concat(ye):ye),k==null?(o(Q,$,L),o(ge,$,L),C(P.children||[],$,ge,G,W,ue,ie,le)):de>0&&de&64&&ve&&k.dynamicChildren&&k.dynamicChildren.length===ve.length?(R(k.dynamicChildren,ve,$,G,W,ue,ie),(P.key!=null||G&&P===G.subTree)&&Yr(k,P,!0)):oe(k,P,$,ge,G,W,ue,ie,le)},D=(k,P,$,L,G,W,ue,ie,le)=>{P.slotScopeIds=ie,k==null?P.shapeFlag&512?G.ctx.activate(P,$,L,ue,le):j(P,$,L,G,W,ue,le):ae(k,P,le)},j=(k,P,$,L,G,W,ue)=>{const ie=k.component=Mv(k,L,G);if(ql(k)&&(ie.ctx.renderer=J),Vv(ie,!1,ue),ie.asyncDep){if(G&&G.registerDep(ie,N,ue),!k.el){const le=ie.subTree=f(nt);w(null,le,P,$),k.placeholder=le.el}}else N(ie,k,P,$,G,W,ue)},ae=(k,P,$)=>{const L=P.component=k.component;if(yv(k,P,$))if(L.asyncDep&&!L.asyncResolved){ne(L,P,$);return}else L.next=P,L.update();else P.el=k.el,L.vnode=P},N=(k,P,$,L,G,W,ue)=>{const ie=()=>{if(k.isMounted){let{next:de,bu:ve,u:ye,parent:Ae,vnode:Me}=k;{const Jt=Fd(k);if(Jt){de&&(de.el=Me.el,ne(k,de,ue)),Jt.asyncDep.then(()=>{k.isUnmounted||ie()});return}}let $e=de,pt;no(k,!1),de?(de.el=Me.el,ne(k,de,ue)):de=Me,ve&&gi(ve),(pt=de.props&&de.props.onVnodeBeforeUpdate)&&en(pt,Ae,de,Me),no(k,!0);const wt=Ns(k),Zt=k.subTree;k.subTree=wt,p(Zt,wt,d(Zt.el),E(Zt),k,G,W),de.el=wt.el,$e===null&&pv(k,wt.el),ye&&vt(ye,G),(pt=de.props&&de.props.onVnodeUpdated)&&vt(()=>en(pt,Ae,de,Me),G)}else{let de;const{el:ve,props:ye}=P,{bm:Ae,m:Me,parent:$e,root:pt,type:wt}=k,Zt=xa(P);no(k,!1),Ae&&gi(Ae),!Zt&&(de=ye&&ye.onVnodeBeforeMount)&&en(de,$e,P),no(k,!0);{pt.ce&&pt.ce._def.shadowRoot!==!1&&pt.ce._injectChildStyle(wt);const Jt=k.subTree=Ns(k);p(null,Jt,$,L,k,G,W),P.el=Jt.el}if(Me&&vt(Me,G),!Zt&&(de=ye&&ye.onVnodeMounted)){const Jt=P;vt(()=>en(de,$e,Jt),G)}(P.shapeFlag&256||$e&&xa($e.vnode)&&$e.vnode.shapeFlag&256)&&k.a&&vt(k.a,G),k.isMounted=!0,P=$=L=null}};k.scope.on();const le=k.effect=new ju(ie);k.scope.off();const Q=k.update=le.run.bind(le),ge=k.job=le.runIfDirty.bind(le);ge.i=k,ge.id=k.uid,le.scheduler=()=>zr(ge),no(k,!0),Q()},ne=(k,P,$)=>{P.component=k;const L=k.vnode.props;k.vnode=P,k.next=null,xv(k,P.props,L,$),_v(k,P.children,$),_n(),As(k),En()},oe=(k,P,$,L,G,W,ue,ie,le=!1)=>{const Q=k&&k.children,ge=k?k.shapeFlag:0,de=P.children,{patchFlag:ve,shapeFlag:ye}=P;if(ve>0){if(ve&128){ke(Q,de,$,L,G,W,ue,ie,le);return}else if(ve&256){Te(Q,de,$,L,G,W,ue,ie,le);return}}ye&8?(ge&16&&ce(Q,G,W),de!==Q&&u($,de)):ge&16?ye&16?ke(Q,de,$,L,G,W,ue,ie,le):ce(Q,G,W,!0):(ge&8&&u($,""),ye&16&&C(de,$,L,G,W,ue,ie,le))},Te=(k,P,$,L,G,W,ue,ie,le)=>{k=k||No,P=P||No;const Q=k.length,ge=P.length,de=Math.min(Q,ge);let ve;for(ve=0;vege?ce(k,G,W,!0,!1,de):C(P,$,L,G,W,ue,ie,le,de)},ke=(k,P,$,L,G,W,ue,ie,le)=>{let Q=0;const ge=P.length;let de=k.length-1,ve=ge-1;for(;Q<=de&&Q<=ve;){const ye=k[Q],Ae=P[Q]=le?Un(P[Q]):an(P[Q]);if(co(ye,Ae))p(ye,Ae,$,null,G,W,ue,ie,le);else break;Q++}for(;Q<=de&&Q<=ve;){const ye=k[de],Ae=P[ve]=le?Un(P[ve]):an(P[ve]);if(co(ye,Ae))p(ye,Ae,$,null,G,W,ue,ie,le);else break;de--,ve--}if(Q>de){if(Q<=ve){const ye=ve+1,Ae=yeve)for(;Q<=de;)H(k[Q],G,W,!0),Q++;else{const ye=Q,Ae=Q,Me=new Map;for(Q=Ae;Q<=ve;Q++){const Ct=P[Q]=le?Un(P[Q]):an(P[Q]);Ct.key!=null&&Me.set(Ct.key,Q)}let $e,pt=0;const wt=ve-Ae+1;let Zt=!1,Jt=0;const oa=new Array(wt);for(Q=0;Q=wt){H(Ct,G,W,!0);continue}let Qt;if(Ct.key!=null)Qt=Me.get(Ct.key);else for($e=Ae;$e<=ve;$e++)if(oa[$e-Ae]===0&&co(Ct,P[$e])){Qt=$e;break}Qt===void 0?H(Ct,G,W,!0):(oa[Qt-Ae]=Q+1,Qt>=Jt?Jt=Qt:Zt=!0,p(Ct,P[Qt],$,null,G,W,ue,ie,le),pt++)}const Ss=Zt?Pv(oa):No;for($e=Ss.length-1,Q=wt-1;Q>=0;Q--){const Ct=Ae+Q,Qt=P[Ct],Cs=P[Ct+1],Ts=Ct+1{const{el:W,type:ue,transition:ie,children:le,shapeFlag:Q}=k;if(Q&6){re(k.component.subTree,P,$,L);return}if(Q&128){k.suspense.move(P,$,L);return}if(Q&64){ue.move(k,P,$,J);return}if(ue===Ke){o(W,P,$);for(let de=0;deie.enter(W),G);else{const{leave:de,delayLeave:ve,afterLeave:ye}=ie,Ae=()=>{k.ctx.isUnmounted?a(W):o(W,P,$)},Me=()=>{W._isLeaving&&W[pn](!0),de(W,()=>{Ae(),ye&&ye()})};ve?ve(W,Ae,Me):Me()}else o(W,P,$)},H=(k,P,$,L=!1,G=!1)=>{const{type:W,props:ue,ref:ie,children:le,dynamicChildren:Q,shapeFlag:ge,patchFlag:de,dirs:ve,cacheIndex:ye}=k;if(de===-2&&(G=!1),ie!=null&&(_n(),wa(ie,null,$,k,!0),En()),ye!=null&&(P.renderCache[ye]=void 0),ge&256){P.ctx.deactivate(k);return}const Ae=ge&1&&ve,Me=!xa(k);let $e;if(Me&&($e=ue&&ue.onVnodeBeforeUnmount)&&en($e,P,k),ge&6)K(k.component,$,L);else{if(ge&128){k.suspense.unmount($,L);return}Ae&&to(k,null,P,"beforeUnmount"),ge&64?k.type.remove(k,P,$,J,L):Q&&!Q.hasOnce&&(W!==Ke||de>0&&de&64)?ce(Q,P,$,!1,!0):(W===Ke&&de&384||!G&&ge&16)&&ce(le,P,$),L&&ee(k)}(Me&&($e=ue&&ue.onVnodeUnmounted)||Ae)&&vt(()=>{$e&&en($e,P,k),Ae&&to(k,null,P,"unmounted")},$)},ee=k=>{const{type:P,el:$,anchor:L,transition:G}=k;if(P===Ke){he($,L);return}if(P===_i){S(k);return}const W=()=>{a($),G&&!G.persisted&&G.afterLeave&&G.afterLeave()};if(k.shapeFlag&1&&G&&!G.persisted){const{leave:ue,delayLeave:ie}=G,le=()=>ue($,W);ie?ie(k.el,W,le):le()}else W()},he=(k,P)=>{let $;for(;k!==P;)$=h(k),a(k),k=$;a(P)},K=(k,P,$)=>{const{bum:L,scope:G,job:W,subTree:ue,um:ie,m:le,a:Q}=k;zs(le),zs(Q),L&&gi(L),G.stop(),W&&(W.flags|=8,H(ue,k,P,$)),ie&&vt(ie,P),vt(()=>{k.isUnmounted=!0},P)},ce=(k,P,$,L=!1,G=!1,W=0)=>{for(let ue=W;ue{if(k.shapeFlag&6)return E(k.component.subTree);if(k.shapeFlag&128)return k.suspense.next();const P=h(k.anchor||k.el),$=P&&P[hd];return $?h($):P};let F=!1;const V=(k,P,$)=>{let L;k==null?P._vnode&&(H(P._vnode,null,null,!0),L=P._vnode.component):p(P._vnode||null,k,P,null,null,null,$),P._vnode=k,F||(F=!0,As(L),cd(),F=!1)},J={p,um:H,m:re,r:ee,mt:j,mc:C,pc:oe,pbc:R,n:E,o:e};return{render:V,hydrate:void 0,createApp:fv(V)}}function Ti({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 no({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Av(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Yr(e,t,n=!1){const o=e.children,a=t.children;if(be(o)&&be(a))for(let l=0;l>1,e[n[r]]0&&(t[o]=n[l-1]),n[l]=o)}}for(l=n.length,i=n[l-1];l-- >0;)n[l]=i,i=t[i];return n}function Fd(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Fd(t)}function zs(e){if(e)for(let t=0;te.__isSuspense;function Iv(e,t){t&&t.pendingBranch?be(e)?t.effects.push(...e):t.effects.push(e):zm(e)}const Ke=Symbol.for("v-fgt"),za=Symbol.for("v-txt"),nt=Symbol.for("v-cmt"),_i=Symbol.for("v-stc"),Ca=[];let _t=null;function jd(e=!1){Ca.push(_t=e?null:[])}function Ov(){Ca.pop(),_t=Ca[Ca.length-1]||null}let Ra=1;function Pl(e,t=!1){Ra+=e,e<0&&_t&&t&&(_t.hasOnce=!0)}function Wd(e){return e.dynamicChildren=Ra>0?_t||No:null,Ov(),Ra>0&&_t&&_t.push(e),e}function Q_(e,t,n,o,a,l){return Wd(Gd(e,t,n,o,a,l,!0))}function Ud(e,t,n,o,a){return Wd(f(e,t,n,o,a,!0))}function Da(e){return e?e.__v_isVNode===!0:!1}function co(e,t){return e.type===t.type&&e.key===t.key}const Yd=({key:e})=>e??null,pl=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?ze(e)||ot(e)||we(e)?{i:Tt,r:e,k:t,f:!!n}:e:null);function Gd(e,t=null,n=null,o=0,a=null,l=e===Ke?0:1,i=!1,r=!1){const s={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Yd(t),ref:t&&pl(t),scopeId:dd,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:l,patchFlag:o,dynamicProps:a,dynamicChildren:null,appContext:null,ctx:Tt};return r?(Gr(s,n),l&128&&e.normalize(s)):n&&(s.shapeFlag|=ze(n)?8:16),Ra>0&&!i&&_t&&(s.patchFlag>0||l&6)&&s.patchFlag!==32&&_t.push(s),s}const f=Rv;function Rv(e,t=null,n=null,o=0,a=null,l=!1){if((!e||e===ov)&&(e=nt),Da(e)){const r=qn(e,t,!0);return n&&Gr(r,n),Ra>0&&!l&&_t&&(r.shapeFlag&6?_t[_t.indexOf(e)]=r:_t.push(r)),r.patchFlag=-2,r}if(zv(e)&&(e=e.__vccOpts),t){t=Dv(t);let{class:r,style:s}=t;r&&!ze(r)&&(t.class=Yl(r)),Ne(s)&&(Hr(s)&&!be(s)&&(s=tt({},s)),t.style=Ul(s))}const i=ze(e)?1:zd(e)?128:md(e)?64:Ne(e)?4:we(e)?2:0;return Gd(e,t,n,o,a,i,l,!0)}function Dv(e){return e?Hr(e)||$d(e)?tt({},e):e:null}function qn(e,t,n=!1,o=!1){const{props:a,ref:l,patchFlag:i,children:r,transition:s}=e,c=t?Ce(a||{},t):a,u={__v_isVNode:!0,__v_skip:!0,type:e.type,props:c,key:c&&Yd(c),ref:t&&t.ref?n&&l?be(l)?l.concat(pl(t)):[l,pl(t)]:pl(t):l,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:r,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Ke?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:s,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&qn(e.ssContent),ssFallback:e.ssFallback&&qn(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return s&&o&&Oa(u,s.clone(u)),u}function uo(e=" ",t=0){return f(za,null,e,t)}function eE(e="",t=!1){return t?(jd(),Ud(nt,null,e)):f(nt,null,e)}function an(e){return e==null||typeof e=="boolean"?f(nt):be(e)?f(Ke,null,e.slice()):Da(e)?Un(e):f(za,null,String(e))}function Un(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:qn(e)}function Gr(e,t){let n=0;const{shapeFlag:o}=e;if(t==null)t=null;else if(be(t))n=16;else if(typeof t=="object")if(o&65){const a=t.default;a&&(a._c&&(a._d=!1),Gr(e,a()),a._c&&(a._d=!0));return}else{n=32;const a=t._;!a&&!$d(t)?t._ctx=Tt:a===3&&Tt&&(Tt.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else we(t)?(t={default:t,_ctx:Tt},n=32):(t=String(t),o&64?(n=16,t=[uo(t)]):n=8);e.children=t,e.shapeFlag|=n}function Ce(...e){const t={};for(let n=0;nrt||Tt;let Il,ur;{const e=Wl(),t=(n,o)=>{let a;return(a=e[n])||(a=e[n]=[]),a.push(o),l=>{a.length>1?a.forEach(i=>i(l)):a[0](l)}};Il=t("__VUE_INSTANCE_SETTERS__",n=>rt=n),ur=t("__VUE_SSR_SETTERS__",n=>$a=n)}const ja=e=>{const t=rt;return Il(e),e.scope.on(),()=>{e.scope.off(),Il(t)}},js=()=>{rt&&rt.scope.off(),Il(null)};function Kd(e){return e.vnode.shapeFlag&4}let $a=!1;function Vv(e,t=!1,n=!1){t&&ur(t);const{props:o,children:a}=e.vnode,l=Kd(e);wv(e,o,l,t),Tv(e,a,n||t);const i=l?Lv(e,t):void 0;return t&&ur(!1),i}function Lv(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,lv);const{setup:o}=n;if(o){_n();const a=e.setupContext=o.length>1?Fv(e):null,l=ja(e),i=Ha(o,e,0,[e.props,a]),r=Bu(i);if(En(),l(),(r||e.sp)&&!xa(e)&&Sd(e),r){if(i.then(js,js),t)return i.then(s=>{Ws(e,s)}).catch(s=>{Kl(s,e,0)});e.asyncDep=i}else Ws(e,i)}else qd(e)}function Ws(e,t,n){we(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Ne(t)&&(e.setupState=id(t)),qd(e)}function qd(e,t,n){const o=e.type;e.render||(e.render=o.render||ln);{const a=ja(e);_n();try{iv(e)}finally{En(),a()}}}const Nv={get(e,t){return it(e,"get",""),e[t]}};function Fv(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Nv),slots:e.slots,emit:e.emit,expose:t}}function Jl(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(id(ad(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Sa)return Sa[n](e)},has(t,n){return n in t||n in Sa}})):e.proxy}function Hv(e,t=!0){return we(e)?e.displayName||e.name:e.name||t&&e.__name}function zv(e){return we(e)&&"__vccOpts"in e}const B=(e,t)=>Vm(e,t,$a);function Kr(e,t,n){try{Pl(-1);const o=arguments.length;return o===2?Ne(t)&&!be(t)?Da(t)?f(e,null,[t]):f(e,t):f(e,null,t):(o>3?n=Array.prototype.slice.call(arguments,2):o===3&&Da(n)&&(n=[n]),f(e,t,n))}finally{Pl(1)}}const jv="3.5.26";let dr;const Us=typeof window<"u"&&window.trustedTypes;if(Us)try{dr=Us.createPolicy("vue",{createHTML:e=>e})}catch{}const Xd=dr?e=>dr.createHTML(e):e=>e,Wv="http://www.w3.org/2000/svg",Uv="http://www.w3.org/1998/Math/MathML",yn=typeof document<"u"?document:null,Ys=yn&&yn.createElement("template"),Yv={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,o)=>{const a=t==="svg"?yn.createElementNS(Wv,e):t==="mathml"?yn.createElementNS(Uv,e):n?yn.createElement(e,{is:n}):yn.createElement(e);return e==="select"&&o&&o.multiple!=null&&a.setAttribute("multiple",o.multiple),a},createText:e=>yn.createTextNode(e),createComment:e=>yn.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>yn.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,o,a,l){const i=n?n.previousSibling:t.lastChild;if(a&&(a===l||a.nextSibling))for(;t.insertBefore(a.cloneNode(!0),n),!(a===l||!(a=a.nextSibling)););else{Ys.innerHTML=Xd(o==="svg"?`${e}`:o==="mathml"?`${e}`:e);const r=Ys.content;if(o==="svg"||o==="mathml"){const s=r.firstChild;for(;s.firstChild;)r.appendChild(s.firstChild);r.removeChild(s)}t.insertBefore(r,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Mn="transition",la="animation",Ba=Symbol("_vtc"),Zd={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},Gv=tt({},bd,Zd),Kv=e=>(e.displayName="Transition",e.props=Gv,e),Ql=Kv((e,{slots:t})=>Kr(qm,qv(e),t)),oo=(e,t=[])=>{be(e)?e.forEach(n=>n(...t)):e&&e(...t)},Gs=e=>e?be(e)?e.some(t=>t.length>1):e.length>1:!1;function qv(e){const t={};for(const _ in e)_ in Zd||(t[_]=e[_]);if(e.css===!1)return t;const{name:n="v",type:o,duration:a,enterFromClass:l=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:r=`${n}-enter-to`,appearFromClass:s=l,appearActiveClass:c=i,appearToClass:u=r,leaveFromClass:d=`${n}-leave-from`,leaveActiveClass:h=`${n}-leave-active`,leaveToClass:m=`${n}-leave-to`}=e,b=Xv(a),p=b&&b[0],g=b&&b[1],{onBeforeEnter:w,onEnter:v,onEnterCancelled:x,onLeave:S,onLeaveCancelled:y,onBeforeAppear:T=w,onAppear:O=v,onAppearCancelled:C=x}=t,I=(_,D,j,ae)=>{_._enterCancelled=ae,ao(_,D?u:r),ao(_,D?c:i),j&&j()},R=(_,D)=>{_._isLeaving=!1,ao(_,d),ao(_,m),ao(_,h),D&&D()},A=_=>(D,j)=>{const ae=_?O:v,N=()=>I(D,_,j);oo(ae,[D,N]),Ks(()=>{ao(D,_?s:l),hn(D,_?u:r),Gs(ae)||qs(D,o,p,N)})};return tt(t,{onBeforeEnter(_){oo(w,[_]),hn(_,l),hn(_,i)},onBeforeAppear(_){oo(T,[_]),hn(_,s),hn(_,c)},onEnter:A(!1),onAppear:A(!0),onLeave(_,D){_._isLeaving=!0;const j=()=>R(_,D);hn(_,d),_._enterCancelled?(hn(_,h),Js(_)):(Js(_),hn(_,h)),Ks(()=>{_._isLeaving&&(ao(_,d),hn(_,m),Gs(S)||qs(_,o,g,j))}),oo(S,[_,j])},onEnterCancelled(_){I(_,!1,void 0,!0),oo(x,[_])},onAppearCancelled(_){I(_,!0,void 0,!0),oo(C,[_])},onLeaveCancelled(_){R(_),oo(y,[_])}})}function Xv(e){if(e==null)return null;if(Ne(e))return[Ei(e.enter),Ei(e.leave)];{const t=Ei(e);return[t,t]}}function Ei(e){return am(e)}function hn(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Ba]||(e[Ba]=new Set)).add(t)}function ao(e,t){t.split(/\s+/).forEach(o=>o&&e.classList.remove(o));const n=e[Ba];n&&(n.delete(t),n.size||(e[Ba]=void 0))}function Ks(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Zv=0;function qs(e,t,n,o){const a=e._endId=++Zv,l=()=>{a===e._endId&&o()};if(n!=null)return setTimeout(l,n);const{type:i,timeout:r,propCount:s}=Jv(e,t);if(!i)return o();const c=i+"end";let u=0;const d=()=>{e.removeEventListener(c,h),l()},h=m=>{m.target===e&&++u>=s&&d()};setTimeout(()=>{u(n[b]||"").split(", "),a=o(`${Mn}Delay`),l=o(`${Mn}Duration`),i=Xs(a,l),r=o(`${la}Delay`),s=o(`${la}Duration`),c=Xs(r,s);let u=null,d=0,h=0;t===Mn?i>0&&(u=Mn,d=i,h=l.length):t===la?c>0&&(u=la,d=c,h=s.length):(d=Math.max(i,c),u=d>0?i>c?Mn:la:null,h=u?u===Mn?l.length:s.length:0);const m=u===Mn&&/\b(?:transform|all)(?:,|$)/.test(o(`${Mn}Property`).toString());return{type:u,timeout:d,propCount:h,hasTransform:m}}function Xs(e,t){for(;e.lengthZs(n)+Zs(e[o])))}function Zs(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function Js(e){return(e?e.ownerDocument:document).body.offsetHeight}function Qv(e,t,n){const o=e[Ba];o&&(t=(t?[t,...o]:[...o]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Ol=Symbol("_vod"),Jd=Symbol("_vsh"),at={name:"show",beforeMount(e,{value:t},{transition:n}){e[Ol]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):ia(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:o}){!t!=!n&&(o?t?(o.beforeEnter(e),ia(e,!0),o.enter(e)):o.leave(e,()=>{ia(e,!1)}):ia(e,t))},beforeUnmount(e,{value:t}){ia(e,t)}};function ia(e,t){e.style.display=t?e[Ol]:"none",e[Jd]=!t}const eg=Symbol(""),tg=/(?:^|;)\s*display\s*:/;function ng(e,t,n){const o=e.style,a=ze(n);let l=!1;if(n&&!a){if(t)if(ze(t))for(const i of t.split(";")){const r=i.slice(0,i.indexOf(":")).trim();n[r]==null&&wl(o,r,"")}else for(const i in t)n[i]==null&&wl(o,i,"");for(const i in n)i==="display"&&(l=!0),wl(o,i,n[i])}else if(a){if(t!==n){const i=o[eg];i&&(n+=";"+i),o.cssText=n,l=tg.test(n)}}else t&&e.removeAttribute("style");Ol in e&&(e[Ol]=l?o.display:"",e[Jd]&&(o.display="none"))}const Qs=/\s*!important$/;function wl(e,t,n){if(be(n))n.forEach(o=>wl(e,t,o));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const o=og(e,t);Qs.test(n)?e.setProperty(On(o),n.replace(Qs,""),"important"):e[o]=n}}const ec=["Webkit","Moz","ms"],ki={};function og(e,t){const n=ki[t];if(n)return n;let o=Rt(t);if(o!=="filter"&&o in e)return ki[t]=o;o=jl(o);for(let a=0;aAi||(sg.then(()=>Ai=0),Ai=Date.now());function ug(e,t){const n=o=>{if(!o._vts)o._vts=Date.now();else if(o._vts<=n.attached)return;Wt(dg(o,n.value),t,5,[o])};return n.value=e,n.attached=cg(),n}function dg(e,t){if(be(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(o=>a=>!a._stopped&&o&&o(a))}else return t}const ic=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,fg=(e,t,n,o,a,l)=>{const i=a==="svg";t==="class"?Qv(e,o,i):t==="style"?ng(e,n,o):Fl(t)?Rr(t)||ig(e,t,n,o,l):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):hg(e,t,o,i))?(oc(e,t,o),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&nc(e,t,o,i,l,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!ze(o))?oc(e,Rt(t),o,l,t):(t==="true-value"?e._trueValue=o:t==="false-value"&&(e._falseValue=o),nc(e,t,o,i))};function hg(e,t,n,o){if(o)return!!(t==="innerHTML"||t==="textContent"||t in e&&ic(t)&&we(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"){const a=e.tagName;if(a==="IMG"||a==="VIDEO"||a==="CANVAS"||a==="SOURCE")return!1}return ic(t)&&ze(n)?!1:t in e}const mg={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},vg=(e,t)=>{const n=e._withKeys||(e._withKeys={}),o=t.join(".");return n[o]||(n[o]=(a=>{if(!("key"in a))return;const l=On(a.key);if(t.some(i=>i===l||mg[i]===l))return e(a)}))},gg=tt({patchProp:fg},Yv);let rc;function bg(){return rc||(rc=Ev(gg))}const Qd=((...e)=>{const t=bg().createApp(...e),{mount:n}=t;return t.mount=o=>{const a=pg(o);if(!a)return;const l=t._component;!we(l)&&!l.render&&!l.template&&(l.template=a.innerHTML),a.nodeType===1&&(a.textContent="");const i=n(a,!1,yg(a));return a instanceof Element&&(a.removeAttribute("v-cloak"),a.setAttribute("data-v-app","")),i},t});function yg(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function pg(e){return ze(e)?document.querySelector(e):e}const wg=Symbol();var sc;(function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"})(sc||(sc={}));function xg(){const e=hm(!0),t=e.run(()=>M({}));let n=[],o=[];const a=ad({install(l){a._a=l,l.provide(wg,a),l.config.globalProperties.$pinia=a,o.forEach(i=>n.push(i)),o=[]},use(l){return this._a?n.push(l):o.push(l),this},_p:n,_a:null,_e:e,_s:new Map,state:t});return a}const Vo=typeof document<"u";function ef(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function Sg(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&ef(e.default)}const Re=Object.assign;function Pi(e,t){const n={};for(const o in t){const a=t[o];n[o]=Ut(a)?a.map(e):e(a)}return n}const Ta=()=>{},Ut=Array.isArray;function cc(e,t){const n={};for(const o in e)n[o]=o in t?t[o]:e[o];return n}const tf=/#/g,Cg=/&/g,Tg=/\//g,_g=/=/g,Eg=/\?/g,nf=/\+/g,kg=/%5B/g,Ag=/%5D/g,of=/%5E/g,Pg=/%60/g,af=/%7B/g,Ig=/%7C/g,lf=/%7D/g,Og=/%20/g;function qr(e){return e==null?"":encodeURI(""+e).replace(Ig,"|").replace(kg,"[").replace(Ag,"]")}function Rg(e){return qr(e).replace(af,"{").replace(lf,"}").replace(of,"^")}function fr(e){return qr(e).replace(nf,"%2B").replace(Og,"+").replace(tf,"%23").replace(Cg,"%26").replace(Pg,"`").replace(af,"{").replace(lf,"}").replace(of,"^")}function Dg(e){return fr(e).replace(_g,"%3D")}function $g(e){return qr(e).replace(tf,"%23").replace(Eg,"%3F")}function Bg(e){return $g(e).replace(Tg,"%2F")}function Ma(e){if(e==null)return null;try{return decodeURIComponent(""+e)}catch{}return""+e}const Mg=/\/$/,Vg=e=>e.replace(Mg,"");function Ii(e,t,n="/"){let o,a={},l="",i="";const r=t.indexOf("#");let s=t.indexOf("?");return s=r>=0&&s>r?-1:s,s>=0&&(o=t.slice(0,s),l=t.slice(s,r>0?r:t.length),a=e(l.slice(1))),r>=0&&(o=o||t.slice(0,r),i=t.slice(r,t.length)),o=Hg(o??t,n),{fullPath:o+l+i,path:o,query:a,hash:Ma(i)}}function Lg(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function uc(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Ng(e,t,n){const o=t.matched.length-1,a=n.matched.length-1;return o>-1&&o===a&&Go(t.matched[o],n.matched[a])&&rf(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function Go(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function rf(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(!Fg(e[n],t[n]))return!1;return!0}function Fg(e,t){return Ut(e)?dc(e,t):Ut(t)?dc(t,e):e?.valueOf()===t?.valueOf()}function dc(e,t){return Ut(t)?e.length===t.length&&e.every((n,o)=>n===t[o]):e.length===1&&e[0]===t}function Hg(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),o=e.split("/"),a=o[o.length-1];(a===".."||a===".")&&o.push("");let l=n.length-1,i,r;for(i=0;i1&&l--;else break;return n.slice(0,l).join("/")+"/"+o.slice(i).join("/")}const Vn={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};let hr=(function(e){return e.pop="pop",e.push="push",e})({}),Oi=(function(e){return e.back="back",e.forward="forward",e.unknown="",e})({});function zg(e){if(!e)if(Vo){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),Vg(e)}const jg=/^[^#]+#/;function Wg(e,t){return e.replace(jg,"#")+t}function Ug(e,t){const n=document.documentElement.getBoundingClientRect(),o=e.getBoundingClientRect();return{behavior:t.behavior,left:o.left-n.left-(t.left||0),top:o.top-n.top-(t.top||0)}}const ei=()=>({left:window.scrollX,top:window.scrollY});function Yg(e){let t;if("el"in e){const n=e.el,o=typeof n=="string"&&n.startsWith("#"),a=typeof n=="string"?o?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!a)return;t=Ug(a,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function fc(e,t){return(history.state?history.state.position-t:-1)+e}const mr=new Map;function Gg(e,t){mr.set(e,t)}function Kg(e){const t=mr.get(e);return mr.delete(e),t}function qg(e){return typeof e=="string"||e&&typeof e=="object"}function sf(e){return typeof e=="string"||typeof e=="symbol"}let Ue=(function(e){return e[e.MATCHER_NOT_FOUND=1]="MATCHER_NOT_FOUND",e[e.NAVIGATION_GUARD_REDIRECT=2]="NAVIGATION_GUARD_REDIRECT",e[e.NAVIGATION_ABORTED=4]="NAVIGATION_ABORTED",e[e.NAVIGATION_CANCELLED=8]="NAVIGATION_CANCELLED",e[e.NAVIGATION_DUPLICATED=16]="NAVIGATION_DUPLICATED",e})({});const cf=Symbol("");Ue.MATCHER_NOT_FOUND+"",Ue.NAVIGATION_GUARD_REDIRECT+"",Ue.NAVIGATION_ABORTED+"",Ue.NAVIGATION_CANCELLED+"",Ue.NAVIGATION_DUPLICATED+"";function Ko(e,t){return Re(new Error,{type:e,[cf]:!0},t)}function mn(e,t){return e instanceof Error&&cf in e&&(t==null||!!(e.type&t))}const Xg=["params","query","hash"];function Zg(e){if(typeof e=="string")return e;if(e.path!=null)return e.path;const t={};for(const n of Xg)n in e&&(t[n]=e[n]);return JSON.stringify(t,null,2)}function Jg(e){const t={};if(e===""||e==="?")return t;const n=(e[0]==="?"?e.slice(1):e).split("&");for(let o=0;oa&&fr(a)):[o&&fr(o)]).forEach(a=>{a!==void 0&&(t+=(t.length?"&":"")+n,a!=null&&(t+="="+a))})}return t}function Qg(e){const t={};for(const n in e){const o=e[n];o!==void 0&&(t[n]=Ut(o)?o.map(a=>a==null?null:""+a):o==null?o:""+o)}return t}const eb=Symbol(""),mc=Symbol(""),Xr=Symbol(""),Zr=Symbol(""),vr=Symbol("");function ra(){let e=[];function t(o){return e.push(o),()=>{const a=e.indexOf(o);a>-1&&e.splice(a,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function Yn(e,t,n,o,a,l=i=>i()){const i=o&&(o.enterCallbacks[a]=o.enterCallbacks[a]||[]);return()=>new Promise((r,s)=>{const c=h=>{h===!1?s(Ko(Ue.NAVIGATION_ABORTED,{from:n,to:t})):h instanceof Error?s(h):qg(h)?s(Ko(Ue.NAVIGATION_GUARD_REDIRECT,{from:t,to:h})):(i&&o.enterCallbacks[a]===i&&typeof h=="function"&&i.push(h),r())},u=l(()=>e.call(o&&o.instances[a],t,n,c));let d=Promise.resolve(u);e.length<3&&(d=d.then(c)),d.catch(h=>s(h))})}function Ri(e,t,n,o,a=l=>l()){const l=[];for(const i of e)for(const r in i.components){let s=i.components[r];if(!(t!=="beforeRouteEnter"&&!i.instances[r]))if(ef(s)){const c=(s.__vccOpts||s)[t];c&&l.push(Yn(c,n,o,i,r,a))}else{let c=s();l.push(()=>c.then(u=>{if(!u)throw new Error(`Couldn't resolve component "${r}" at "${i.path}"`);const d=Sg(u)?u.default:u;i.mods[r]=u,i.components[r]=d;const h=(d.__vccOpts||d)[t];return h&&Yn(h,n,o,i,r,a)()}))}}return l}function tb(e,t){const n=[],o=[],a=[],l=Math.max(t.matched.length,e.matched.length);for(let i=0;iGo(c,r))?o.push(r):n.push(r));const s=e.matched[i];s&&(t.matched.find(c=>Go(c,s))||a.push(s))}return[n,o,a]}let nb=()=>location.protocol+"//"+location.host;function uf(e,t){const{pathname:n,search:o,hash:a}=t,l=e.indexOf("#");if(l>-1){let i=a.includes(e.slice(l))?e.slice(l).length:1,r=a.slice(i);return r[0]!=="/"&&(r="/"+r),uc(r,"")}return uc(n,e)+o+a}function ob(e,t,n,o){let a=[],l=[],i=null;const r=({state:h})=>{const m=uf(e,location),b=n.value,p=t.value;let g=0;if(h){if(n.value=m,t.value=h,i&&i===b){i=null;return}g=p?h.position-p.position:0}else o(m);a.forEach(w=>{w(n.value,b,{delta:g,type:hr.pop,direction:g?g>0?Oi.forward:Oi.back:Oi.unknown})})};function s(){i=n.value}function c(h){a.push(h);const m=()=>{const b=a.indexOf(h);b>-1&&a.splice(b,1)};return l.push(m),m}function u(){if(document.visibilityState==="hidden"){const{history:h}=window;if(!h.state)return;h.replaceState(Re({},h.state,{scroll:ei()}),"")}}function d(){for(const h of l)h();l=[],window.removeEventListener("popstate",r),window.removeEventListener("pagehide",u),document.removeEventListener("visibilitychange",u)}return window.addEventListener("popstate",r),window.addEventListener("pagehide",u),document.addEventListener("visibilitychange",u),{pauseListeners:s,listen:c,destroy:d}}function vc(e,t,n,o=!1,a=!1){return{back:e,current:t,forward:n,replaced:o,position:window.history.length,scroll:a?ei():null}}function ab(e){const{history:t,location:n}=window,o={value:uf(e,n)},a={value:t.state};a.value||l(o.value,{back:null,current:o.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function l(s,c,u){const d=e.indexOf("#"),h=d>-1?(n.host&&document.querySelector("base")?e:e.slice(d))+s:nb()+e+s;try{t[u?"replaceState":"pushState"](c,"",h),a.value=c}catch(m){console.error(m),n[u?"replace":"assign"](h)}}function i(s,c){l(s,Re({},t.state,vc(a.value.back,s,a.value.forward,!0),c,{position:a.value.position}),!0),o.value=s}function r(s,c){const u=Re({},a.value,t.state,{forward:s,scroll:ei()});l(u.current,u,!0),l(s,Re({},vc(o.value,s,null),{position:u.position+1},c),!1),o.value=s}return{location:o,state:a,push:r,replace:i}}function lb(e){e=zg(e);const t=ab(e),n=ob(e,t.state,t.location,t.replace);function o(l,i=!0){i||n.pauseListeners(),history.go(l)}const a=Re({location:"",base:e,go:o,createHref:Wg.bind(null,e)},t,n);return Object.defineProperty(a,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(a,"state",{enumerable:!0,get:()=>t.state.value}),a}let fo=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e})({});var qe=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.ParamRegExp=2]="ParamRegExp",e[e.ParamRegExpEnd=3]="ParamRegExpEnd",e[e.EscapeNext=4]="EscapeNext",e})(qe||{});const ib={type:fo.Static,value:""},rb=/[a-zA-Z0-9_]/;function sb(e){if(!e)return[[]];if(e==="/")return[[ib]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(m){throw new Error(`ERR (${n})/"${c}": ${m}`)}let n=qe.Static,o=n;const a=[];let l;function i(){l&&a.push(l),l=[]}let r=0,s,c="",u="";function d(){c&&(n===qe.Static?l.push({type:fo.Static,value:c}):n===qe.Param||n===qe.ParamRegExp||n===qe.ParamRegExpEnd?(l.length>1&&(s==="*"||s==="+")&&t(`A repeatable param (${c}) must be alone in its segment. eg: '/:ids+.`),l.push({type:fo.Param,value:c,regexp:u,repeatable:s==="*"||s==="+",optional:s==="*"||s==="?"})):t("Invalid state to consume buffer"),c="")}function h(){c+=s}for(;rt.length?t.length===1&&t[0]===gt.Static+gt.Segment?1:-1:0}function df(e,t){let n=0;const o=e.score,a=t.score;for(;n0&&t[t.length-1]<0}const hb={strict:!1,end:!0,sensitive:!1};function mb(e,t,n){const o=db(sb(e.path),n),a=Re(o,{record:e,parent:t,children:[],alias:[]});return t&&!a.record.aliasOf==!t.record.aliasOf&&t.children.push(a),a}function vb(e,t){const n=[],o=new Map;t=cc(hb,t);function a(d){return o.get(d)}function l(d,h,m){const b=!m,p=pc(d);p.aliasOf=m&&m.record;const g=cc(t,d),w=[p];if("alias"in d){const S=typeof d.alias=="string"?[d.alias]:d.alias;for(const y of S)w.push(pc(Re({},p,{components:m?m.record.components:p.components,path:y,aliasOf:m?m.record:p})))}let v,x;for(const S of w){const{path:y}=S;if(h&&y[0]!=="/"){const T=h.record.path,O=T[T.length-1]==="/"?"":"/";S.path=h.record.path+(y&&O+y)}if(v=mb(S,h,g),m?m.alias.push(v):(x=x||v,x!==v&&x.alias.push(v),b&&d.name&&!wc(v)&&i(d.name)),ff(v)&&s(v),p.children){const T=p.children;for(let O=0;O{i(x)}:Ta}function i(d){if(sf(d)){const h=o.get(d);h&&(o.delete(d),n.splice(n.indexOf(h),1),h.children.forEach(i),h.alias.forEach(i))}else{const h=n.indexOf(d);h>-1&&(n.splice(h,1),d.record.name&&o.delete(d.record.name),d.children.forEach(i),d.alias.forEach(i))}}function r(){return n}function s(d){const h=yb(d,n);n.splice(h,0,d),d.record.name&&!wc(d)&&o.set(d.record.name,d)}function c(d,h){let m,b={},p,g;if("name"in d&&d.name){if(m=o.get(d.name),!m)throw Ko(Ue.MATCHER_NOT_FOUND,{location:d});g=m.record.name,b=Re(yc(h.params,m.keys.filter(x=>!x.optional).concat(m.parent?m.parent.keys.filter(x=>x.optional):[]).map(x=>x.name)),d.params&&yc(d.params,m.keys.map(x=>x.name))),p=m.stringify(b)}else if(d.path!=null)p=d.path,m=n.find(x=>x.re.test(p)),m&&(b=m.parse(p),g=m.record.name);else{if(m=h.name?o.get(h.name):n.find(x=>x.re.test(h.path)),!m)throw Ko(Ue.MATCHER_NOT_FOUND,{location:d,currentLocation:h});g=m.record.name,b=Re({},h.params,d.params),p=m.stringify(b)}const w=[];let v=m;for(;v;)w.unshift(v.record),v=v.parent;return{name:g,path:p,params:b,matched:w,meta:bb(w)}}e.forEach(d=>l(d));function u(){n.length=0,o.clear()}return{addRoute:l,resolve:c,removeRoute:i,clearRoutes:u,getRoutes:r,getRecordMatcher:a}}function yc(e,t){const n={};for(const o of t)o in e&&(n[o]=e[o]);return n}function pc(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:gb(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function gb(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const o in e.components)t[o]=typeof n=="object"?n[o]:n;return t}function wc(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function bb(e){return e.reduce((t,n)=>Re(t,n.meta),{})}function yb(e,t){let n=0,o=t.length;for(;n!==o;){const l=n+o>>1;df(e,t[l])<0?o=l:n=l+1}const a=pb(e);return a&&(o=t.lastIndexOf(a,o-1)),o}function pb(e){let t=e;for(;t=t.parent;)if(ff(t)&&df(e,t)===0)return t}function ff({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function xc(e){const t=yt(Xr),n=yt(Zr),o=B(()=>{const s=It(e.to);return t.resolve(s)}),a=B(()=>{const{matched:s}=o.value,{length:c}=s,u=s[c-1],d=n.matched;if(!u||!d.length)return-1;const h=d.findIndex(Go.bind(null,u));if(h>-1)return h;const m=Sc(s[c-2]);return c>1&&Sc(u)===m&&d[d.length-1].path!==m?d.findIndex(Go.bind(null,s[c-2])):h}),l=B(()=>a.value>-1&&Tb(n.params,o.value.params)),i=B(()=>a.value>-1&&a.value===n.matched.length-1&&rf(n.params,o.value.params));function r(s={}){if(Cb(s)){const c=t[It(e.replace)?"replace":"push"](It(e.to)).catch(Ta);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>c),c}return Promise.resolve()}return{route:o,href:B(()=>o.value.href),isActive:l,isExactActive:i,navigate:r}}function wb(e){return e.length===1?e[0]:e}const xb=U({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:xc,setup(e,{slots:t}){const n=je(xc(e)),{options:o}=yt(Xr),a=B(()=>({[Cc(e.activeClass,o.linkActiveClass,"router-link-active")]:n.isActive,[Cc(e.exactActiveClass,o.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const l=t.default&&wb(t.default(n));return e.custom?l:Kr("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:a.value},l)}}}),Sb=xb;function Cb(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function Tb(e,t){for(const n in t){const o=t[n],a=e[n];if(typeof o=="string"){if(o!==a)return!1}else if(!Ut(a)||a.length!==o.length||o.some((l,i)=>l.valueOf()!==a[i].valueOf()))return!1}return!0}function Sc(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Cc=(e,t,n)=>e??t??n,_b=U({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const o=yt(vr),a=B(()=>e.route||o.value),l=yt(mc,0),i=B(()=>{let c=It(l);const{matched:u}=a.value;let d;for(;(d=u[c])&&!d.components;)c++;return c}),r=B(()=>a.value.matched[i.value]);rn(mc,B(()=>i.value+1)),rn(eb,r),rn(vr,a);const s=M();return te(()=>[s.value,r.value,e.name],([c,u,d],[h,m,b])=>{u&&(u.instances[d]=c,m&&m!==u&&c&&c===h&&(u.leaveGuards.size||(u.leaveGuards=m.leaveGuards),u.updateGuards.size||(u.updateGuards=m.updateGuards))),c&&u&&(!m||!Go(u,m)||!h)&&(u.enterCallbacks[d]||[]).forEach(p=>p(c))},{flush:"post"}),()=>{const c=a.value,u=e.name,d=r.value,h=d&&d.components[u];if(!h)return Tc(n.default,{Component:h,route:c});const m=d.props[u],b=m?m===!0?c.params:typeof m=="function"?m(c):m:null,g=Kr(h,Re({},b,t,{onVnodeUnmounted:w=>{w.component.isUnmounted&&(d.instances[u]=null)},ref:s}));return Tc(n.default,{Component:g,route:c})||g}}});function Tc(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const hf=_b;function Eb(e){const t=vb(e.routes,e),n=e.parseQuery||Jg,o=e.stringifyQuery||hc,a=e.history,l=ra(),i=ra(),r=ra(),s=Dm(Vn);let c=Vn;Vo&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const u=Pi.bind(null,E=>""+E),d=Pi.bind(null,Bg),h=Pi.bind(null,Ma);function m(E,F){let V,J;return sf(E)?(V=t.getRecordMatcher(E),J=F):J=E,t.addRoute(J,V)}function b(E){const F=t.getRecordMatcher(E);F&&t.removeRoute(F)}function p(){return t.getRoutes().map(E=>E.record)}function g(E){return!!t.getRecordMatcher(E)}function w(E,F){if(F=Re({},F||s.value),typeof E=="string"){const $=Ii(n,E,F.path),L=t.resolve({path:$.path},F),G=a.createHref($.fullPath);return Re($,L,{params:h(L.params),hash:Ma($.hash),redirectedFrom:void 0,href:G})}let V;if(E.path!=null)V=Re({},E,{path:Ii(n,E.path,F.path).path});else{const $=Re({},E.params);for(const L in $)$[L]==null&&delete $[L];V=Re({},E,{params:d($)}),F.params=d(F.params)}const J=t.resolve(V,F),fe=E.hash||"";J.params=u(h(J.params));const k=Lg(o,Re({},E,{hash:Rg(fe),path:J.path})),P=a.createHref(k);return Re({fullPath:k,hash:fe,query:o===hc?Qg(E.query):E.query||{}},J,{redirectedFrom:void 0,href:P})}function v(E){return typeof E=="string"?Ii(n,E,s.value.path):Re({},E)}function x(E,F){if(c!==E)return Ko(Ue.NAVIGATION_CANCELLED,{from:F,to:E})}function S(E){return O(E)}function y(E){return S(Re(v(E),{replace:!0}))}function T(E,F){const V=E.matched[E.matched.length-1];if(V&&V.redirect){const{redirect:J}=V;let fe=typeof J=="function"?J(E,F):J;return typeof fe=="string"&&(fe=fe.includes("?")||fe.includes("#")?fe=v(fe):{path:fe},fe.params={}),Re({query:E.query,hash:E.hash,params:fe.path!=null?{}:E.params},fe)}}function O(E,F){const V=c=w(E),J=s.value,fe=E.state,k=E.force,P=E.replace===!0,$=T(V,J);if($)return O(Re(v($),{state:typeof $=="object"?Re({},fe,$.state):fe,force:k,replace:P}),F||V);const L=V;L.redirectedFrom=F;let G;return!k&&Ng(o,J,V)&&(G=Ko(Ue.NAVIGATION_DUPLICATED,{to:L,from:J}),re(J,J,!0,!1)),(G?Promise.resolve(G):R(L,J)).catch(W=>mn(W)?mn(W,Ue.NAVIGATION_GUARD_REDIRECT)?W:ke(W):oe(W,L,J)).then(W=>{if(W){if(mn(W,Ue.NAVIGATION_GUARD_REDIRECT))return O(Re({replace:P},v(W.to),{state:typeof W.to=="object"?Re({},fe,W.to.state):fe,force:k}),F||L)}else W=_(L,J,!0,P,fe);return A(L,J,W),W})}function C(E,F){const V=x(E,F);return V?Promise.reject(V):Promise.resolve()}function I(E){const F=he.values().next().value;return F&&typeof F.runWithContext=="function"?F.runWithContext(E):E()}function R(E,F){let V;const[J,fe,k]=tb(E,F);V=Ri(J.reverse(),"beforeRouteLeave",E,F);for(const $ of J)$.leaveGuards.forEach(L=>{V.push(Yn(L,E,F))});const P=C.bind(null,E,F);return V.push(P),ce(V).then(()=>{V=[];for(const $ of l.list())V.push(Yn($,E,F));return V.push(P),ce(V)}).then(()=>{V=Ri(fe,"beforeRouteUpdate",E,F);for(const $ of fe)$.updateGuards.forEach(L=>{V.push(Yn(L,E,F))});return V.push(P),ce(V)}).then(()=>{V=[];for(const $ of k)if($.beforeEnter)if(Ut($.beforeEnter))for(const L of $.beforeEnter)V.push(Yn(L,E,F));else V.push(Yn($.beforeEnter,E,F));return V.push(P),ce(V)}).then(()=>(E.matched.forEach($=>$.enterCallbacks={}),V=Ri(k,"beforeRouteEnter",E,F,I),V.push(P),ce(V))).then(()=>{V=[];for(const $ of i.list())V.push(Yn($,E,F));return V.push(P),ce(V)}).catch($=>mn($,Ue.NAVIGATION_CANCELLED)?$:Promise.reject($))}function A(E,F,V){r.list().forEach(J=>I(()=>J(E,F,V)))}function _(E,F,V,J,fe){const k=x(E,F);if(k)return k;const P=F===Vn,$=Vo?history.state:{};V&&(J||P?a.replace(E.fullPath,Re({scroll:P&&$&&$.scroll},fe)):a.push(E.fullPath,fe)),s.value=E,re(E,F,V,P),ke()}let D;function j(){D||(D=a.listen((E,F,V)=>{if(!K.listening)return;const J=w(E),fe=T(J,K.currentRoute.value);if(fe){O(Re(fe,{replace:!0,force:!0}),J).catch(Ta);return}c=J;const k=s.value;Vo&&Gg(fc(k.fullPath,V.delta),ei()),R(J,k).catch(P=>mn(P,Ue.NAVIGATION_ABORTED|Ue.NAVIGATION_CANCELLED)?P:mn(P,Ue.NAVIGATION_GUARD_REDIRECT)?(O(Re(v(P.to),{force:!0}),J).then($=>{mn($,Ue.NAVIGATION_ABORTED|Ue.NAVIGATION_DUPLICATED)&&!V.delta&&V.type===hr.pop&&a.go(-1,!1)}).catch(Ta),Promise.reject()):(V.delta&&a.go(-V.delta,!1),oe(P,J,k))).then(P=>{P=P||_(J,k,!1),P&&(V.delta&&!mn(P,Ue.NAVIGATION_CANCELLED)?a.go(-V.delta,!1):V.type===hr.pop&&mn(P,Ue.NAVIGATION_ABORTED|Ue.NAVIGATION_DUPLICATED)&&a.go(-1,!1)),A(J,k,P)}).catch(Ta)}))}let ae=ra(),N=ra(),ne;function oe(E,F,V){ke(E);const J=N.list();return J.length?J.forEach(fe=>fe(E,F,V)):console.error(E),Promise.reject(E)}function Te(){return ne&&s.value!==Vn?Promise.resolve():new Promise((E,F)=>{ae.add([E,F])})}function ke(E){return ne||(ne=!E,j(),ae.list().forEach(([F,V])=>E?V(E):F()),ae.reset()),E}function re(E,F,V,J){const{scrollBehavior:fe}=e;if(!Vo||!fe)return Promise.resolve();const k=!V&&Kg(fc(E.fullPath,0))||(J||!V)&&history.state&&history.state.scroll||null;return Se().then(()=>fe(E,F,k)).then(P=>P&&Yg(P)).catch(P=>oe(P,E,F))}const H=E=>a.go(E);let ee;const he=new Set,K={currentRoute:s,listening:!0,addRoute:m,removeRoute:b,clearRoutes:t.clearRoutes,hasRoute:g,getRoutes:p,resolve:w,options:e,push:S,replace:y,go:H,back:()=>H(-1),forward:()=>H(1),beforeEach:l.add,beforeResolve:i.add,afterEach:r.add,onError:N.add,isReady:Te,install(E){E.component("RouterLink",Sb),E.component("RouterView",hf),E.config.globalProperties.$router=K,Object.defineProperty(E.config.globalProperties,"$route",{enumerable:!0,get:()=>It(s)}),Vo&&!ee&&s.value===Vn&&(ee=!0,S(a.location).catch(J=>{}));const F={};for(const J in Vn)Object.defineProperty(F,J,{get:()=>s.value[J],enumerable:!0});E.provide(Xr,K),E.provide(Zr,od(F)),E.provide(vr,s);const V=E.unmount;he.add(E),E.unmount=function(){he.delete(E),he.size<1&&(c=Vn,D&&D(),D=null,s.value=Vn,ee=!1,ne=!1),V()}}};function ce(E){return E.reduce((F,V)=>F.then(()=>I(V)),Promise.resolve())}return K}function kb(e){return yt(Zr)}const Ab={__name:"App",setup(e){const t=kb(),n=M(0),o=M("light"),a=()=>{const r=window.matchMedia("(prefers-color-scheme: dark)").matches;o.value=r?"dark":"light"};let l;We(()=>{a(),l=window.matchMedia("(prefers-color-scheme: dark)"),l.addEventListener("change",a)}),wo(()=>{l&&l.removeEventListener("change",a)});const i=r=>{t.path===r&&window.scrollTo({top:0,behavior:"smooth"})};return(r,s)=>{const c=Si("van-tabbar-item"),u=Si("van-tabbar"),d=Si("van-config-provider");return jd(),Ud(d,{theme:o.value},{default:so(()=>[f(It(hf)),f(u,{modelValue:n.value,"onUpdate:modelValue":s[2]||(s[2]=h=>n.value=h)},{default:so(()=>[f(c,{icon:"notes-o",to:"/calendar"},{default:so(()=>[...s[3]||(s[3]=[uo(" 日历 ",-1)])]),_:1}),f(c,{icon:"balance-list-o",to:"/",onClick:s[0]||(s[0]=h=>i("/"))},{default:so(()=>[...s[4]||(s[4]=[uo(" 账单 ",-1)])]),_:1}),f(c,{icon:"records-o",to:"/email",onClick:s[1]||(s[1]=h=>i("/email"))},{default:so(()=>[...s[5]||(s[5]=[uo(" 邮件 ",-1)])]),_:1}),f(c,{icon:"setting-o",to:"/setting"},{default:so(()=>[...s[6]||(s[6]=[uo(" 设置 ",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1},8,["theme"])}}},Pb="modulepreload",Ib=function(e){return"/"+e},_c={},Za=function(t,n,o){let a=Promise.resolve();if(n&&n.length>0){let s=function(c){return Promise.all(c.map(u=>Promise.resolve(u).then(d=>({status:"fulfilled",value:d}),d=>({status:"rejected",reason:d}))))};document.getElementsByTagName("link");const i=document.querySelector("meta[property=csp-nonce]"),r=i?.nonce||i?.getAttribute("nonce");a=s(n.map(c=>{if(c=Ib(c),c in _c)return;_c[c]=!0;const u=c.endsWith(".css"),d=u?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${d}`))return;const h=document.createElement("link");if(h.rel=u?"stylesheet":Pb,u||(h.as="script"),h.crossOrigin="",h.href=c,r&&h.setAttribute("nonce",r),document.head.appendChild(h),u)return new Promise((m,b)=>{h.addEventListener("load",m),h.addEventListener("error",()=>b(new Error(`Unable to preload CSS for ${c}`)))})}))}function l(i){const r=new Event("vite:preloadError",{cancelable:!0});if(r.payload=i,window.dispatchEvent(r),!r.defaultPrevented)throw i}return a.then(i=>{for(const r of i||[])r.status==="rejected"&&l(r.reason);return t().catch(l)})},Ob=Eb({history:lb("/"),routes:[{path:"/",name:"transactions",component:()=>Za(()=>import("./TransactionsRecord-COA69EP3.js"),__vite__mapDeps([0,1,2,3,4]))},{path:"/email",name:"email",component:()=>Za(()=>import("./EmailRecord-ooSXYRv8.js"),__vite__mapDeps([5,1,2,3,6]))},{path:"/setting",name:"setting",component:()=>Za(()=>import("./SettingView-DpsY2gE2.js"),__vite__mapDeps([7,2,3,8]))},{path:"/calendar",name:"calendar",component:()=>Za(()=>import("./CalendarView-By4eHUMb.js"),__vite__mapDeps([9,3]))}]});function gr(){}const me=Object.assign,Dt=typeof window<"u",Yt=e=>e!==null&&typeof e=="object",Ee=e=>e!=null,qo=e=>typeof e=="function",Jr=e=>Yt(e)&&qo(e.then)&&qo(e.catch),Va=e=>Object.prototype.toString.call(e)==="[object Date]"&&!Number.isNaN(e.getTime());function mf(e){return e=e.replace(/[^-|\d]/g,""),/^((\+86)|(86))?(1)\d{10}$/.test(e)||/^0[0-9-]{10,13}$/.test(e)}const vf=e=>typeof e=="number"||/^\d+(\.\d+)?$/.test(e),Rb=()=>Dt?/ios|iphone|ipad|ipod/.test(navigator.userAgent.toLowerCase()):!1;function Ec(e,t){const n=t.split(".");let o=e;return n.forEach(a=>{var l;o=Yt(o)&&(l=o[a])!=null?l:""}),o}function Pe(e,t,n){return t.reduce((o,a)=>((!n||e[a]!==void 0)&&(o[a]=e[a]),o),{})}const sn=(e,t)=>JSON.stringify(e)===JSON.stringify(t),Rl=e=>Array.isArray(e)?e:[e],Db=e=>e.reduce((t,n)=>t.concat(n),[]),He=null,q=[Number,String],z={type:Boolean,default:!0},Qe=e=>({type:e,required:!0}),Fe=()=>({type:Array,default:()=>[]}),Ze=e=>({type:Number,default:e}),se=e=>({type:q,default:e}),Z=e=>({type:String,default:e});var Zn=typeof window<"u";function st(e){return Zn?requestAnimationFrame(e):-1}function ti(e){Zn&&cancelAnimationFrame(e)}function Gn(e){st(()=>st(e))}var $b=e=>e===window,kc=(e,t)=>({top:0,left:0,right:e,bottom:t,width:e,height:t}),Oe=e=>{const t=It(e);if($b(t)){const n=t.innerWidth,o=t.innerHeight;return kc(n,o)}return t?.getBoundingClientRect?t.getBoundingClientRect():kc(0,0)};function Bb(e=!1){const t=M(e);return[t,(o=!t.value)=>{t.value=o}]}function lt(e){const t=yt(e,null);if(t){const n=$t(),{link:o,unlink:a,internalChildren:l}=t;o(n),wo(()=>a(n));const i=B(()=>l.indexOf(n));return{parent:t,index:i}}return{parent:null,index:M(-1)}}function Mb(e){const t=[],n=o=>{Array.isArray(o)&&o.forEach(a=>{var l;Da(a)&&(t.push(a),(l=a.component)!=null&&l.subTree&&(t.push(a.component.subTree),n(a.component.subTree.children)),a.children&&n(a.children))})};return n(e),t}var Ac=(e,t)=>{const n=e.indexOf(t);return n===-1?e.findIndex(o=>t.key!==void 0&&t.key!==null&&o.type===t.type&&o.key===t.key):n};function Vb(e,t,n){const o=Mb(e.subTree.children);n.sort((l,i)=>Ac(o,l.vnode)-Ac(o,i.vnode));const a=n.map(l=>l.proxy);t.sort((l,i)=>{const r=a.indexOf(l),s=a.indexOf(i);return r-s})}function dt(e){const t=je([]),n=je([]),o=$t();return{children:t,linkChildren:l=>{rn(e,Object.assign({link:s=>{s.proxy&&(n.push(s),t.push(s.proxy),Vb(o,t,n))},unlink:s=>{const c=n.indexOf(s);t.splice(c,1),n.splice(c,1)},children:t,internalChildren:n},l))}}}var br=1e3,yr=60*br,pr=60*yr,Pc=24*pr;function Lb(e){const t=Math.floor(e/Pc),n=Math.floor(e%Pc/pr),o=Math.floor(e%pr/yr),a=Math.floor(e%yr/br),l=Math.floor(e%br);return{total:e,days:t,hours:n,minutes:o,seconds:a,milliseconds:l}}function Nb(e,t){return Math.floor(e/1e3)===Math.floor(t/1e3)}function Fb(e){let t,n,o,a;const l=M(e.time),i=B(()=>Lb(l.value)),r=()=>{o=!1,ti(t)},s=()=>Math.max(n-Date.now(),0),c=p=>{var g,w;l.value=p,(g=e.onChange)==null||g.call(e,i.value),p===0&&(r(),(w=e.onFinish)==null||w.call(e))},u=()=>{t=st(()=>{o&&(c(s()),l.value>0&&u())})},d=()=>{t=st(()=>{if(o){const p=s();(!Nb(p,l.value)||p===0)&&c(p),l.value>0&&d()}})},h=()=>{Zn&&(e.millisecond?u():d())},m=()=>{o||(n=Date.now()+l.value,o=!0,h())},b=(p=e.time)=>{r(),l.value=p};return dn(r),cn(()=>{a&&(o=!0,a=!1,h())}),un(()=>{o&&(r(),a=!0)}),{start:m,pause:r,reset:b,current:i}}function Qo(e){let t;We(()=>{e(),Se(()=>{t=!0})}),cn(()=>{t&&e()})}function Ge(e,t,n={}){if(!Zn)return;const{target:o=window,passive:a=!1,capture:l=!1}=n;let i=!1,r;const s=d=>{if(i)return;const h=It(d);h&&!r&&(h.addEventListener(e,t,{capture:l,passive:a}),r=!0)},c=d=>{if(i)return;const h=It(d);h&&r&&(h.removeEventListener(e,t,l),r=!1)};wo(()=>c(o)),un(()=>c(o)),Qo(()=>s(o));let u;return ot(o)&&(u=te(o,(d,h)=>{c(h),s(d)})),()=>{u?.(),c(o),i=!0}}function ni(e,t,n={}){if(!Zn)return;const{eventName:o="click"}=n;Ge(o,l=>{(Array.isArray(e)?e:[e]).every(s=>{const c=It(s);return c&&!c.contains(l.target)})&&t(l)},{target:document})}var Ja,Di;function Hb(){if(!Ja&&(Ja=M(0),Di=M(0),Zn)){const e=()=>{Ja.value=window.innerWidth,Di.value=window.innerHeight};e(),window.addEventListener("resize",e,{passive:!0}),window.addEventListener("orientationchange",e,{passive:!0})}return{width:Ja,height:Di}}var zb=/scroll|auto|overlay/i,gf=Zn?window:void 0;function jb(e){return e.tagName!=="HTML"&&e.tagName!=="BODY"&&e.nodeType===1}function Qr(e,t=gf){let n=e;for(;n&&n!==t&&jb(n);){const{overflowY:o}=window.getComputedStyle(n);if(zb.test(o))return n;n=n.parentNode}return t}function ea(e,t=gf){const n=M();return We(()=>{e.value&&(n.value=Qr(e.value,t))}),n}var Qa;function Wb(){if(!Qa&&(Qa=M("visible"),Zn)){const e=()=>{Qa.value=document.hidden?"hidden":"visible"};e(),window.addEventListener("visibilitychange",e)}return Qa}var bf=Symbol("van-field");function Jn(e){const t=yt(bf,null);t&&!t.customValue.value&&(t.customValue.value=e,te(e,()=>{t.resetValidation(),t.validateWithTrigger("onChange")}))}function An(e){const t="scrollTop"in e?e.scrollTop:e.pageYOffset;return Math.max(t,0)}function Dl(e,t){"scrollTop"in e?e.scrollTop=t:e.scrollTo(e.scrollX,t)}function go(){return window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0}function La(e){Dl(window,e),Dl(document.body,e)}function Ic(e,t){if(e===window)return 0;const n=t?An(t):go();return Oe(e).top+n}const Ub=Rb();function yf(){Ub&&La(go())}const es=e=>e.stopPropagation();function Le(e,t){(typeof e.cancelable!="boolean"||e.cancelable)&&e.preventDefault(),t&&es(e)}function yo(e){const t=It(e);if(!t)return!1;const n=window.getComputedStyle(t),o=n.display==="none",a=t.offsetParent===null&&n.position!=="fixed";return o||a}const{width:Ht,height:Ot}=Hb();function Yb(e){const t=window.getComputedStyle(e);return t.transform!=="none"||t.perspective!=="none"||["transform","perspective","filter"].some(n=>(t.willChange||"").includes(n))}function Gb(e){let t=e.parentElement;for(;t;){if(t&&t.tagName!=="HTML"&&t.tagName!=="BODY"&&Yb(t))return t;t=t.parentElement}return null}function pe(e){if(Ee(e))return vf(e)?`${e}px`:String(e)}function Dn(e){if(Ee(e)){if(Array.isArray(e))return{width:pe(e[0]),height:pe(e[1])};const t=pe(e);return{width:t,height:t}}}function $n(e){const t={};return e!==void 0&&(t.zIndex=+e),t}let $i;function Kb(){if(!$i){const e=document.documentElement,t=e.style.fontSize||window.getComputedStyle(e).fontSize;$i=parseFloat(t)}return $i}function qb(e){return e=e.replace(/rem/g,""),+e*Kb()}function Xb(e){return e=e.replace(/vw/g,""),+e*Ht.value/100}function Zb(e){return e=e.replace(/vh/g,""),+e*Ot.value/100}function ts(e){if(typeof e=="number")return e;if(Dt){if(e.includes("rem"))return qb(e);if(e.includes("vw"))return Xb(e);if(e.includes("vh"))return Zb(e)}return parseFloat(e)}const Jb=/-(\w)/g,pf=e=>e.replace(Jb,(t,n)=>n.toUpperCase()),Qb=e=>e.replace(/([A-Z])/g,"-$1").toLowerCase().replace(/^-/,"");function Nt(e,t=2){let n=e+"";for(;n.lengthMath.min(Math.max(e,t),n);function Oc(e,t,n){const o=e.indexOf(t);return o===-1?e:t==="-"&&o!==0?e.slice(0,o):e.slice(0,o+1)+e.slice(o).replace(n,"")}function wr(e,t=!0,n=!0){t?e=Oc(e,".",/\./g):e=e.split(".")[0],n?e=Oc(e,"-",/-/g):e=e.replace(/-/,"");const o=t?/[^-0-9.]/g:/[^-0-9]/g;return e.replace(o,"")}function wf(e,t){return Math.round((e+t)*1e10)/1e10}const{hasOwnProperty:ey}=Object.prototype;function ty(e,t,n){const o=t[n];Ee(o)&&(!ey.call(e,n)||!Yt(o)?e[n]=o:e[n]=xf(Object(e[n]),o))}function xf(e,t){return Object.keys(t).forEach(n=>{ty(e,t,n)}),e}var ny={name:"姓名",tel:"电话",save:"保存",clear:"清空",cancel:"取消",confirm:"确认",delete:"删除",loading:"加载中...",noCoupon:"暂无优惠券",nameEmpty:"请填写姓名",addContact:"添加联系人",telInvalid:"请填写正确的电话",vanCalendar:{end:"结束",start:"开始",title:"日期选择",weekdays:["日","一","二","三","四","五","六"],monthTitle:(e,t)=>`${e}年${t}月`,rangePrompt:e=>`最多选择 ${e} 天`},vanCascader:{select:"请选择"},vanPagination:{prev:"上一页",next:"下一页"},vanPullRefresh:{pulling:"下拉即可刷新...",loosing:"释放即可刷新..."},vanSubmitBar:{label:"合计:"},vanCoupon:{unlimited:"无门槛",discount:e=>`${e}折`,condition:e=>`满${e}元可用`},vanCouponCell:{title:"优惠券",count:e=>`${e}张可用`},vanCouponList:{exchange:"兑换",close:"不使用",enable:"可用",disabled:"不可用",placeholder:"输入优惠码"},vanAddressEdit:{area:"地区",areaEmpty:"请选择地区",addressEmpty:"请填写详细地址",addressDetail:"详细地址",defaultAddress:"设为默认收货地址"},vanAddressList:{add:"新增地址"}};const Rc=M("zh-CN"),Dc=je({"zh-CN":ny}),Sf={messages(){return Dc[Rc.value]},use(e,t){Rc.value=e,this.add({[e]:t})},add(e={}){xf(Dc,e)}};var oy=Sf;function ay(e){const t=pf(e)+".";return(n,...o)=>{const a=oy.messages(),l=Ec(a,t+n)||Ec(a,n);return qo(l)?l(...o):l}}function xr(e,t){return t?typeof t=="string"?` ${e}--${t}`:Array.isArray(t)?t.reduce((n,o)=>n+xr(e,o),""):Object.keys(t).reduce((n,o)=>n+(t[o]?xr(e,o):""),""):""}function ly(e){return(t,n)=>(t&&typeof t!="string"&&(n=t,t=""),t=t?`${e}__${t}`:e,`${t}${xr(t,n)}`)}function Y(e){const t=`van-${e}`;return[t,ly(t),ay(t)]}const Bn="van-hairline",Cf=`${Bn}--top`,Tf=`${Bn}--left`,iy=`${Bn}--right`,ns=`${Bn}--bottom`,_a=`${Bn}--surround`,oi=`${Bn}--top-bottom`,ry=`${Bn}-unset--top-bottom`,ct="van-haptics-feedback",_f=Symbol("van-form"),Ef=500,$c=5;function Qn(e,{args:t=[],done:n,canceled:o,error:a}){if(e){const l=e.apply(null,t);Jr(l)?l.then(i=>{i?n():o&&o()}).catch(a||gr):l?n():o&&o()}else n()}function X(e){return e.install=t=>{const{name:n}=e;n&&(t.component(n,e),t.component(pf(`-${n}`),e))},e}function $l(e,t){return e.reduce((n,o)=>Math.abs(n-t){n&&e()})}const Af=(e,t)=>{const n=M(),o=()=>{n.value=Oe(e).height};return We(()=>{if(Se(o),t)for(let a=1;a<=3;a++)setTimeout(o,100*a)}),ai(()=>Se(o)),te([Ht,Ot],o),n};function li(e,t){const n=Af(e,!0);return o=>f("div",{class:t("placeholder"),style:{height:n.value?`${n.value}px`:void 0}},[o()])}const[Pf,Bc]=Y("action-bar"),os=Symbol(Pf),sy={placeholder:Boolean,safeAreaInsetBottom:z};var cy=U({name:Pf,props:sy,setup(e,{slots:t}){const n=M(),o=li(n,Bc),{linkChildren:a}=dt(os);a();const l=()=>{var i;return f("div",{ref:n,class:[Bc(),{"van-safe-area-bottom":e.safeAreaInsetBottom}]},[(i=t.default)==null?void 0:i.call(t)])};return()=>e.placeholder?o(l):l()}});const If=X(cy);function _e(e){const t=$t();t&&me(t.proxy,e)}const eo={to:[String,Object],url:String,replace:Boolean};function Of({to:e,url:t,replace:n,$router:o}){e&&o?o[n?"replace":"push"](e):t&&(n?location.replace(t):location.href=t)}function xo(){const e=$t().proxy;return()=>Of(e)}const[uy,Mc]=Y("badge"),dy={dot:Boolean,max:q,tag:Z("div"),color:String,offset:Array,content:q,showZero:z,position:Z("top-right")};var fy=U({name:uy,props:dy,setup(e,{slots:t}){const n=()=>{if(t.content)return!0;const{content:r,showZero:s}=e;return Ee(r)&&r!==""&&(s||r!==0&&r!=="0")},o=()=>{const{dot:r,max:s,content:c}=e;if(!r&&n())return t.content?t.content():Ee(s)&&vf(c)&&+c>+s?`${s}+`:c},a=r=>r.startsWith("-")?r.replace("-",""):`-${r}`,l=B(()=>{const r={background:e.color};if(e.offset){const[s,c]=e.offset,{position:u}=e,[d,h]=u.split("-");t.default?(typeof c=="number"?r[d]=pe(d==="top"?c:-c):r[d]=d==="top"?pe(c):a(c),typeof s=="number"?r[h]=pe(h==="left"?s:-s):r[h]=h==="left"?pe(s):a(s)):(r.marginTop=pe(c),r.marginLeft=pe(s))}return r}),i=()=>{if(n()||e.dot)return f("div",{class:Mc([e.position,{dot:e.dot,fixed:!!t.default}]),style:l.value},[o()])};return()=>{if(t.default){const{tag:r}=e;return f(r,{class:Mc("wrapper")},{default:()=>[t.default(),i()]})}return i()}}});const So=X(fy);let Rf=2e3;const hy=()=>++Rf,my=e=>{Rf=e},[Df,vy]=Y("config-provider"),$f=Symbol(Df),gy={tag:Z("div"),theme:Z("light"),zIndex:Number,themeVars:Object,themeVarsDark:Object,themeVarsLight:Object,themeVarsScope:Z("local"),iconPrefix:String};function by(e){return e.replace(/([a-zA-Z])(\d)/g,"$1-$2")}function yy(e){const t={};return Object.keys(e).forEach(n=>{const o=by(Qb(n));t[`--van-${o}`]=e[n]}),t}function el(e={},t={}){Object.keys(e).forEach(n=>{e[n]!==t[n]&&document.documentElement.style.setProperty(n,e[n])}),Object.keys(t).forEach(n=>{e[n]||document.documentElement.style.removeProperty(n)})}var py=U({name:Df,props:gy,setup(e,{slots:t}){const n=B(()=>yy(me({},e.themeVars,e.theme==="dark"?e.themeVarsDark:e.themeVarsLight)));if(Dt){const o=()=>{document.documentElement.classList.add(`van-theme-${e.theme}`)},a=(l=e.theme)=>{document.documentElement.classList.remove(`van-theme-${l}`)};te(()=>e.theme,(l,i)=>{i&&a(i),o()},{immediate:!0}),cn(o),un(a),dn(a),te(n,(l,i)=>{e.themeVarsScope==="global"&&el(l,i)}),te(()=>e.themeVarsScope,(l,i)=>{i==="global"&&el({},n.value),l==="global"&&el(n.value,{})}),e.themeVarsScope==="global"&&el(n.value,{})}return rn($f,e),Jo(()=>{e.zIndex!==void 0&&my(e.zIndex)}),()=>f(e.tag,{class:vy(),style:e.themeVarsScope==="local"?n.value:void 0},{default:()=>{var o;return[(o=t.default)==null?void 0:o.call(t)]}})}});const[wy,Vc]=Y("icon"),xy=e=>e?.includes("/"),Sy={dot:Boolean,tag:Z("i"),name:String,size:q,badge:q,color:String,badgeProps:Object,classPrefix:String};var Cy=U({name:wy,props:Sy,setup(e,{slots:t}){const n=yt($f,null),o=B(()=>e.classPrefix||n?.iconPrefix||Vc());return()=>{const{tag:a,dot:l,name:i,size:r,badge:s,color:c}=e,u=xy(i);return f(So,Ce({dot:l,tag:a,class:[o.value,u?"":`${o.value}-${i}`],style:{color:c,fontSize:pe(r)},content:s},e.badgeProps),{default:()=>{var d;return[(d=t.default)==null?void 0:d.call(t),u&&f("img",{class:Vc("image"),src:i},null)]}})}}});const xe=X(Cy);var Ty=xe;const[_y,Ea]=Y("loading"),Ey=Array(12).fill(null).map((e,t)=>f("i",{class:Ea("line",String(t+1))},null)),ky=f("svg",{class:Ea("circular"),viewBox:"25 25 50 50"},[f("circle",{cx:"50",cy:"50",r:"20",fill:"none"},null)]),Ay={size:q,type:Z("circular"),color:String,vertical:Boolean,textSize:q,textColor:String};var Py=U({name:_y,props:Ay,setup(e,{slots:t}){const n=B(()=>me({color:e.color},Dn(e.size))),o=()=>{const l=e.type==="spinner"?Ey:ky;return f("span",{class:Ea("spinner",e.type),style:n.value},[t.icon?t.icon():l])},a=()=>{var l;if(t.default)return f("span",{class:Ea("text"),style:{fontSize:pe(e.textSize),color:(l=e.textColor)!=null?l:e.color}},[t.default()])};return()=>{const{type:l,vertical:i}=e;return f("div",{class:Ea([l,{vertical:i}]),"aria-live":"polite","aria-busy":!0},[o(),a()])}}});const Gt=X(Py),[Iy,To]=Y("button"),Oy=me({},eo,{tag:Z("button"),text:String,icon:String,type:Z("default"),size:Z("normal"),color:String,block:Boolean,plain:Boolean,round:Boolean,square:Boolean,loading:Boolean,hairline:Boolean,disabled:Boolean,iconPrefix:String,nativeType:Z("button"),loadingSize:q,loadingText:String,loadingType:String,iconPosition:Z("left")});var Ry=U({name:Iy,props:Oy,emits:["click"],setup(e,{emit:t,slots:n}){const o=xo(),a=()=>n.loading?n.loading():f(Gt,{size:e.loadingSize,type:e.loadingType,class:To("loading")},null),l=()=>{if(e.loading)return a();if(n.icon)return f("div",{class:To("icon")},[n.icon()]);if(e.icon)return f(xe,{name:e.icon,class:To("icon"),classPrefix:e.iconPrefix},null)},i=()=>{let c;if(e.loading?c=e.loadingText:c=n.default?n.default():e.text,c)return f("span",{class:To("text")},[c])},r=()=>{const{color:c,plain:u}=e;if(c){const d={color:u?c:"white"};return u||(d.background=c),c.includes("gradient")?d.border=0:d.borderColor=c,d}},s=c=>{e.loading?Le(c):e.disabled||(t("click",c),o())};return()=>{const{tag:c,type:u,size:d,block:h,round:m,plain:b,square:p,loading:g,disabled:w,hairline:v,nativeType:x,iconPosition:S}=e,y=[To([u,d,{plain:b,block:h,round:m,square:p,loading:g,disabled:w,hairline:v}]),{[_a]:v}];return f(c,{type:x,class:y,style:r(),disabled:w,onClick:s},{default:()=>[f("div",{class:To("content")},[S==="left"&&l(),i(),S==="right"&&l()])]})}}});const ut=X(Ry),[Dy,$y]=Y("action-bar-button"),By=me({},eo,{type:String,text:String,icon:String,color:String,loading:Boolean,disabled:Boolean});var My=U({name:Dy,props:By,setup(e,{slots:t}){const n=xo(),{parent:o,index:a}=lt(os),l=B(()=>{if(o){const r=o.children[a.value-1];return!(r&&"isButton"in r)}}),i=B(()=>{if(o){const r=o.children[a.value+1];return!(r&&"isButton"in r)}});return _e({isButton:!0}),()=>{const{type:r,icon:s,text:c,color:u,loading:d,disabled:h}=e;return f(ut,{class:$y([r,{last:i.value,first:l.value}]),size:"large",type:r,icon:s,color:u,loading:d,disabled:h,onClick:n},{default:()=>[t.default?t.default():c]})}}});const Sr=X(My),[Vy,Bi]=Y("action-bar-icon"),Ly=me({},eo,{dot:Boolean,text:String,icon:String,color:String,badge:q,iconClass:He,badgeProps:Object,iconPrefix:String});var Ny=U({name:Vy,props:Ly,setup(e,{slots:t}){const n=xo();lt(os);const o=()=>{const{dot:a,badge:l,icon:i,color:r,iconClass:s,badgeProps:c,iconPrefix:u}=e;return t.icon?f(So,Ce({dot:a,class:Bi("icon"),content:l},c),{default:t.icon}):f(xe,{tag:"div",dot:a,name:i,badge:l,color:r,class:[Bi("icon"),s],badgeProps:c,classPrefix:u},null)};return()=>f("div",{role:"button",class:Bi(),tabindex:0,onClick:n},[o(),t.default?t.default():e.text])}});const Fy=X(Ny),ta={show:Boolean,zIndex:q,overlay:z,duration:q,teleport:[String,Object],lockScroll:z,lazyRender:z,beforeClose:Function,overlayProps:Object,overlayStyle:Object,overlayClass:He,transitionAppear:Boolean,closeOnClickOverlay:z},as=Object.keys(ta);function Hy(e,t){return e>t?"horizontal":t>e?"vertical":""}function Bt(){const e=M(0),t=M(0),n=M(0),o=M(0),a=M(0),l=M(0),i=M(""),r=M(!0),s=()=>i.value==="vertical",c=()=>i.value==="horizontal",u=()=>{n.value=0,o.value=0,a.value=0,l.value=0,i.value="",r.value=!0};return{move:(m=>{const b=m.touches[0];n.value=(b.clientX<0?0:b.clientX)-e.value,o.value=b.clientY-t.value,a.value=Math.abs(n.value),l.value=Math.abs(o.value);const p=10;(!i.value||a.value$c||l.value>$c)&&(r.value=!1)}),start:(m=>{u(),e.value=m.touches[0].clientX,t.value=m.touches[0].clientY}),reset:u,startX:e,startY:t,deltaX:n,deltaY:o,offsetX:a,offsetY:l,direction:i,isVertical:s,isHorizontal:c,isTap:r}}let sa=0;const Lc="van-overflow-hidden";function Bf(e,t){const n=Bt(),o="01",a="10",l=u=>{n.move(u);const d=n.deltaY.value>0?a:o,h=Qr(u.target,e.value),{scrollHeight:m,offsetHeight:b,scrollTop:p}=h;let g="11";p===0?g=b>=m?"00":"01":p+b>=m&&(g="10"),g!=="11"&&n.isVertical()&&!(parseInt(g,2)&parseInt(d,2))&&Le(u,!0)},i=()=>{document.addEventListener("touchstart",n.start),document.addEventListener("touchmove",l,{passive:!1}),sa||document.body.classList.add(Lc),sa++},r=()=>{sa&&(document.removeEventListener("touchstart",n.start),document.removeEventListener("touchmove",l),sa--,sa||document.body.classList.remove(Lc))},s=()=>t()&&i(),c=()=>t()&&r();Qo(s),un(c),dn(c),te(t,u=>{u?i():r()})}function ls(e){const t=M(!1);return te(e,n=>{n&&(t.value=n)},{immediate:!0}),n=>()=>t.value?n():null}const Bl=()=>{var e;const{scopeId:t}=((e=$t())==null?void 0:e.vnode)||{};return t?{[t]:""}:null},[zy,jy]=Y("overlay"),Wy={show:Boolean,zIndex:q,duration:q,className:He,lockScroll:z,lazyRender:z,customStyle:Object,teleport:[String,Object]};var Uy=U({name:zy,inheritAttrs:!1,props:Wy,setup(e,{attrs:t,slots:n}){const o=M(),a=ls(()=>e.show||!e.lazyRender),l=r=>{e.lockScroll&&Le(r,!0)},i=a(()=>{var r;const s=me($n(e.zIndex),e.customStyle);return Ee(e.duration)&&(s.animationDuration=`${e.duration}s`),et(f("div",Ce({ref:o,style:s,class:[jy(),e.className]},t),[(r=n.default)==null?void 0:r.call(n)]),[[at,e.show]])});return Ge("touchmove",l,{target:o}),()=>{const r=f(Ql,{name:"van-fade",appear:!0},{default:i});return e.teleport?f(po,{to:e.teleport},{default:()=>[r]}):r}}});const Mf=X(Uy),Yy=me({},ta,{round:Boolean,position:Z("center"),closeIcon:Z("cross"),closeable:Boolean,transition:String,iconPrefix:String,closeOnPopstate:Boolean,closeIconPosition:Z("top-right"),destroyOnClose:Boolean,safeAreaInsetTop:Boolean,safeAreaInsetBottom:Boolean}),[Gy,Nc]=Y("popup");var Ky=U({name:Gy,inheritAttrs:!1,props:Yy,emits:["open","close","opened","closed","keydown","update:show","clickOverlay","clickCloseIcon"],setup(e,{emit:t,attrs:n,slots:o}){let a,l;const i=M(),r=M(),s=ls(()=>e.show||!e.lazyRender),c=B(()=>{const T={zIndex:i.value};if(Ee(e.duration)){const O=e.position==="center"?"animationDuration":"transitionDuration";T[O]=`${e.duration}s`}return T}),u=()=>{a||(a=!0,i.value=e.zIndex!==void 0?+e.zIndex:hy(),t("open"))},d=()=>{a&&Qn(e.beforeClose,{done(){a=!1,t("close"),t("update:show",!1)}})},h=T=>{t("clickOverlay",T),e.closeOnClickOverlay&&d()},m=()=>{if(e.overlay){const T=me({show:e.show,class:e.overlayClass,zIndex:i.value,duration:e.duration,customStyle:e.overlayStyle,role:e.closeOnClickOverlay?"button":void 0,tabindex:e.closeOnClickOverlay?0:void 0},e.overlayProps);return f(Mf,Ce(T,Bl(),{onClick:h}),{default:o["overlay-content"]})}},b=T=>{t("clickCloseIcon",T),d()},p=()=>{if(e.closeable)return f(xe,{role:"button",tabindex:0,name:e.closeIcon,class:[Nc("close-icon",e.closeIconPosition),ct],classPrefix:e.iconPrefix,onClick:b},null)};let g;const w=()=>{g&&clearTimeout(g),g=setTimeout(()=>{t("opened")})},v=()=>t("closed"),x=T=>t("keydown",T),S=s(()=>{var T;const{destroyOnClose:O,round:C,position:I,safeAreaInsetTop:R,safeAreaInsetBottom:A,show:_}=e;if(!(!_&&O))return et(f("div",Ce({ref:r,style:c.value,role:"dialog",tabindex:0,class:[Nc({round:C,[I]:I}),{"van-safe-area-top":R,"van-safe-area-bottom":A}],onKeydown:x},n,Bl()),[(T=o.default)==null?void 0:T.call(o),p()]),[[at,_]])}),y=()=>{const{position:T,transition:O,transitionAppear:C}=e,I=T==="center"?"van-fade":`van-popup-slide-${T}`;return f(Ql,{name:O||I,appear:C,onAfterEnter:w,onAfterLeave:v},{default:S})};return te(()=>e.show,T=>{T&&!a&&(u(),n.tabindex===0&&Se(()=>{var O;(O=r.value)==null||O.focus()})),!T&&a&&(a=!1,t("close"))}),_e({popupRef:r}),Bf(r,()=>e.show&&e.lockScroll),Ge("popstate",()=>{e.closeOnPopstate&&(d(),l=!1)}),We(()=>{e.show&&u()}),cn(()=>{l&&(t("update:show",!0),l=!1)}),un(()=>{e.show&&e.teleport&&(d(),l=!0)}),rn(kf,()=>e.show),()=>e.teleport?f(po,{to:e.teleport},{default:()=>[m(),y()]}):f(Ke,null,[m(),y()])}});const Kt=X(Ky),[qy,kt]=Y("action-sheet"),Xy=me({},ta,{title:String,round:z,actions:Fe(),closeIcon:Z("cross"),closeable:z,cancelText:String,description:String,closeOnPopstate:z,closeOnClickAction:Boolean,safeAreaInsetBottom:z}),Zy=[...as,"round","closeOnPopstate","safeAreaInsetBottom"];var Jy=U({name:qy,props:Xy,emits:["select","cancel","update:show"],setup(e,{slots:t,emit:n}){const o=d=>n("update:show",d),a=()=>{o(!1),n("cancel")},l=()=>{if(e.title)return f("div",{class:kt("header")},[e.title,e.closeable&&f(xe,{name:e.closeIcon,class:[kt("close"),ct],onClick:a},null)])},i=()=>{if(t.cancel||e.cancelText)return[f("div",{class:kt("gap")},null),f("button",{type:"button",class:kt("cancel"),onClick:a},[t.cancel?t.cancel():e.cancelText])]},r=d=>{if(d.icon)return f(xe,{class:kt("item-icon"),name:d.icon},null)},s=(d,h)=>d.loading?f(Gt,{class:kt("loading-icon")},null):t.action?t.action({action:d,index:h}):[f("span",{class:kt("name")},[d.name]),d.subname&&f("div",{class:kt("subname")},[d.subname])],c=(d,h)=>{const{color:m,loading:b,callback:p,disabled:g,className:w}=d,v=()=>{g||b||(p&&p(d),e.closeOnClickAction&&o(!1),Se(()=>n("select",d,h)))};return f("button",{type:"button",style:{color:m},class:[kt("item",{loading:b,disabled:g}),w],onClick:v},[r(d),s(d,h)])},u=()=>{if(e.description||t.description){const d=t.description?t.description():e.description;return f("div",{class:kt("description")},[d])}};return()=>f(Kt,Ce({class:kt(),position:"bottom","onUpdate:show":o},Pe(e,Zy)),{default:()=>{var d;return[l(),u(),f("div",{class:kt("content")},[e.actions.map(c),(d=t.default)==null?void 0:d.call(t)]),i()]}})}});const Qy=X(Jy),[e0,Sn,Fc]=Y("picker"),Vf=e=>e.find(t=>!t.disabled)||e[0];function t0(e,t){const n=e[0];if(n){if(Array.isArray(n))return"multiple";if(t.children in n)return"cascade"}return"default"}function xl(e,t){t=Je(t,0,e.length);for(let n=t;n=0;n--)if(!e[n].disabled)return n;return 0}const Hc=(e,t,n)=>t!==void 0&&e.some(o=>o[n.value]===t);function Cr(e,t,n){const o=e.findIndex(l=>l[n.value]===t),a=xl(e,o);return e[a]}function n0(e,t,n){const o=[];let a={[t.children]:e},l=0;for(;a&&a[t.children];){const i=a[t.children],r=n.value[l];if(a=Ee(r)?Cr(i,r,t):void 0,!a&&i.length){const s=Vf(i)[t.value];a=Cr(i,s,t)}l++,o.push(i)}return o}function o0(e){const{transform:t}=window.getComputedStyle(e),n=t.slice(7,t.length-1).split(", ")[5];return Number(n)}function a0(e){return me({text:"text",value:"value",children:"children"},e)}const zc=200,jc=300,l0=15,[Lf,Mi]=Y("picker-column"),Nf=Symbol(Lf);var i0=U({name:Lf,props:{value:q,fields:Qe(Object),options:Fe(),readonly:Boolean,allowHtml:Boolean,optionHeight:Qe(Number),swipeDuration:Qe(q),visibleOptionNum:Qe(q)},emits:["change","clickOption","scrollInto"],setup(e,{emit:t,slots:n}){let o,a,l,i,r;const s=M(),c=M(),u=M(0),d=M(0),h=Bt(),m=()=>e.options.length,b=()=>e.optionHeight*(+e.visibleOptionNum-1)/2,p=R=>{let A=xl(e.options,R);const _=-A*e.optionHeight,D=()=>{A>m()-1&&(A=xl(e.options,R));const j=e.options[A][e.fields.value];j!==e.value&&t("change",j)};o&&_!==u.value?r=D:D(),u.value=_},g=()=>e.readonly||!e.options.length,w=R=>{o||g()||(r=null,d.value=zc,p(R),t("clickOption",e.options[R]))},v=R=>Je(Math.round(-R/e.optionHeight),0,m()-1),x=B(()=>v(u.value)),S=(R,A)=>{const _=Math.abs(R/A);R=u.value+_/.003*(R<0?-1:1);const D=v(R);d.value=+e.swipeDuration,p(D)},y=()=>{o=!1,d.value=0,r&&(r(),r=null)},T=R=>{if(!g()){if(h.start(R),o){const A=o0(c.value);u.value=Math.min(0,A-b())}d.value=0,a=u.value,l=Date.now(),i=a,r=null}},O=R=>{if(g())return;h.move(R),h.isVertical()&&(o=!0,Le(R,!0));const A=Je(a+h.deltaY.value,-(m()*e.optionHeight),e.optionHeight),_=v(A);_!==x.value&&t("scrollInto",e.options[_]),u.value=A;const D=Date.now();D-l>jc&&(l=D,i=A)},C=()=>{if(g())return;const R=u.value-i,A=Date.now()-l;if(Al0){S(R,A);return}const D=v(u.value);d.value=zc,p(D),setTimeout(()=>{o=!1},0)},I=()=>{const R={height:`${e.optionHeight}px`};return e.options.map((A,_)=>{const D=A[e.fields.text],{disabled:j}=A,ae=A[e.fields.value],N={role:"button",style:R,tabindex:j?-1:0,class:[Mi("item",{disabled:j,selected:ae===e.value}),A.className],onClick:()=>w(_)},ne={class:"van-ellipsis",[e.allowHtml?"innerHTML":"textContent"]:D};return f("li",N,[n.option?n.option(A,_):f("div",ne,null)])})};return lt(Nf),_e({stopMomentum:y}),Jo(()=>{const R=o?Math.floor(-u.value/e.optionHeight):e.options.findIndex(D=>D[e.fields.value]===e.value),A=xl(e.options,R),_=-A*e.optionHeight;o&&Af("div",{ref:s,class:Mi(),onTouchstartPassive:T,onTouchend:C,onTouchcancel:C},[f("ul",{ref:c,style:{transform:`translate3d(0, ${u.value+b()}px, 0)`,transitionDuration:`${d.value}ms`,transitionProperty:d.value?"all":"none"},class:Mi("wrapper"),onTransitionend:y},[I()])])}});const[r0]=Y("picker-toolbar"),ii={title:String,cancelButtonText:String,confirmButtonText:String},Ff=["cancel","confirm","title","toolbar"],s0=Object.keys(ii);var Hf=U({name:r0,props:ii,emits:["confirm","cancel"],setup(e,{emit:t,slots:n}){const o=()=>{if(n.title)return n.title();if(e.title)return f("div",{class:[Sn("title"),"van-ellipsis"]},[e.title])},a=()=>t("cancel"),l=()=>t("confirm"),i=()=>{var s;const c=(s=e.cancelButtonText)!=null?s:Fc("cancel");if(!(!n.cancel&&!c))return f("button",{type:"button",class:[Sn("cancel"),ct],onClick:a},[n.cancel?n.cancel():c])},r=()=>{var s;const c=(s=e.confirmButtonText)!=null?s:Fc("confirm");if(!(!n.confirm&&!c))return f("button",{type:"button",class:[Sn("confirm"),ct],onClick:l},[n.confirm?n.confirm():c])};return()=>f("div",{class:Sn("toolbar")},[n.toolbar?n.toolbar():[i(),o(),r()]])}});const is=(e,t)=>{const n=M(e());return te(e,o=>{o!==n.value&&(n.value=o)}),te(n,o=>{o!==e()&&t(o)}),n};function c0(e,t,n){let o,a=0;const l=e.scrollLeft,i=n===0?1:Math.round(n*1e3/16);let r=l;function s(){ti(o)}function c(){r+=(t-l)/i,e.scrollLeft=r,++at||!i&&lt?a=st(u):o&&(a=st(o))}return u(),c}let d0=0;function na(){const e=$t(),{name:t="unknown"}=e?.type||{};return`${t}-${++d0}`}function Wa(){const e=M([]),t=[];return Td(()=>{e.value=[]}),[e,o=>(t[o]||(t[o]=a=>{e.value[o]=a}),t[o])]}function zf(e,t){if(!Dt||!window.IntersectionObserver)return;const n=new IntersectionObserver(l=>{t(l[0].intersectionRatio>0)},{root:document.body}),o=()=>{e.value&&n.observe(e.value)},a=()=>{e.value&&n.unobserve(e.value)};un(a),dn(a),Qo(o)}const[f0,h0]=Y("sticky"),m0={zIndex:q,position:Z("top"),container:Object,offsetTop:se(0),offsetBottom:se(0)};var v0=U({name:f0,props:m0,emits:["scroll","change"],setup(e,{emit:t,slots:n}){const o=M(),a=ea(o),l=je({fixed:!1,width:0,height:0,transform:0}),i=M(!1),r=B(()=>ts(e.position==="top"?e.offsetTop:e.offsetBottom)),s=B(()=>{if(i.value)return;const{fixed:h,height:m,width:b}=l;if(h)return{width:`${b}px`,height:`${m}px`}}),c=B(()=>{if(!l.fixed||i.value)return;const h=me($n(e.zIndex),{width:`${l.width}px`,height:`${l.height}px`,[e.position]:`${r.value}px`});return l.transform&&(h.transform=`translate3d(0, ${l.transform}px, 0)`),h}),u=h=>t("scroll",{scrollTop:h,isFixed:l.fixed}),d=()=>{if(!o.value||yo(o))return;const{container:h,position:m}=e,b=Oe(o),p=An(window);if(l.width=b.width,l.height=b.height,m==="top")if(h){const g=Oe(h),w=g.bottom-r.value-l.height;l.fixed=r.value>b.top&&g.bottom>0,l.transform=w<0?w:0}else l.fixed=r.value>b.top;else{const{clientHeight:g}=document.documentElement;if(h){const w=Oe(h),v=g-w.top-r.value-l.height;l.fixed=g-r.valuew.top,l.transform=v<0?-v:0}else l.fixed=g-r.valuel.fixed,h=>t("change",h)),Ge("scroll",d,{target:a,passive:!0}),zf(o,d),te([Ht,Ot],()=>{!o.value||yo(o)||!l.fixed||(i.value=!0,Se(()=>{const h=Oe(o);l.width=h.width,l.height=h.height,i.value=!1}))}),()=>{var h;return f("div",{ref:o,style:s.value},[f("div",{class:h0({fixed:l.fixed&&!i.value}),style:c.value},[(h=n.default)==null?void 0:h.call(n)])])}}});const jf=X(v0),[Wf,tl]=Y("swipe"),g0={loop:z,width:q,height:q,vertical:Boolean,autoplay:se(0),duration:se(500),touchable:z,lazyRender:Boolean,initialSwipe:se(0),indicatorColor:String,showIndicators:z,stopPropagation:z},Uf=Symbol(Wf);var b0=U({name:Wf,props:g0,emits:["change","dragStart","dragEnd"],setup(e,{emit:t,slots:n}){const o=M(),a=M(),l=je({rect:null,width:0,height:0,offset:0,active:0,swiping:!1});let i=!1;const r=Bt(),{children:s,linkChildren:c}=dt(Uf),u=B(()=>s.length),d=B(()=>l[e.vertical?"height":"width"]),h=B(()=>e.vertical?r.deltaY.value:r.deltaX.value),m=B(()=>l.rect?(e.vertical?l.rect.height:l.rect.width)-d.value*u.value:0),b=B(()=>d.value?Math.ceil(Math.abs(m.value)/d.value):u.value),p=B(()=>u.value*d.value),g=B(()=>(l.active+u.value)%u.value),w=B(()=>{const re=e.vertical?"vertical":"horizontal";return r.direction.value===re}),v=B(()=>{const re={transitionDuration:`${l.swiping?0:e.duration}ms`,transform:`translate${e.vertical?"Y":"X"}(${+l.offset.toFixed(2)}px)`};if(d.value){const H=e.vertical?"height":"width",ee=e.vertical?"width":"height";re[H]=`${p.value}px`,re[ee]=e[ee]?`${e[ee]}px`:""}return re}),x=re=>{const{active:H}=l;return re?e.loop?Je(H+re,-1,u.value):Je(H+re,0,b.value):H},S=(re,H=0)=>{let ee=re*d.value;e.loop||(ee=Math.min(ee,-m.value));let he=H-ee;return e.loop||(he=Je(he,m.value,0)),he},y=({pace:re=0,offset:H=0,emitChange:ee})=>{if(u.value<=1)return;const{active:he}=l,K=x(re),ce=S(K,H);if(e.loop){if(s[0]&&ce!==m.value){const E=ce0;s[u.value-1].setOffset(E?-p.value:0)}}l.active=K,l.offset=ce,ee&&K!==he&&t("change",g.value)},T=()=>{l.swiping=!0,l.active<=-1?y({pace:u.value}):l.active>=u.value&&y({pace:-u.value})},O=()=>{T(),r.reset(),Gn(()=>{l.swiping=!1,y({pace:-1,emitChange:!0})})},C=()=>{T(),r.reset(),Gn(()=>{l.swiping=!1,y({pace:1,emitChange:!0})})};let I;const R=()=>clearTimeout(I),A=()=>{R(),+e.autoplay>0&&u.value>1&&(I=setTimeout(()=>{C(),A()},+e.autoplay))},_=(re=+e.initialSwipe)=>{if(!o.value)return;const H=()=>{var ee,he;if(!yo(o)){const K={width:o.value.offsetWidth,height:o.value.offsetHeight};l.rect=K,l.width=+((ee=e.width)!=null?ee:K.width),l.height=+((he=e.height)!=null?he:K.height)}u.value&&(re=Math.min(u.value-1,re),re===-1&&(re=u.value-1)),l.active=re,l.swiping=!0,l.offset=S(re),s.forEach(K=>{K.setOffset(0)}),A()};yo(o)?Se().then(H):H()},D=()=>_(l.active);let j;const ae=re=>{!e.touchable||re.touches.length>1||(r.start(re),i=!1,j=Date.now(),R(),T())},N=re=>{e.touchable&&l.swiping&&(r.move(re),w.value&&(!e.loop&&(l.active===0&&h.value>0||l.active===u.value-1&&h.value<0)||(Le(re,e.stopPropagation),y({offset:h.value}),i||(t("dragStart",{index:g.value}),i=!0))))},ne=()=>{if(!e.touchable||!l.swiping)return;const re=Date.now()-j,H=h.value/re;if((Math.abs(H)>.25||Math.abs(h.value)>d.value/2)&&w.value){const he=e.vertical?r.offsetY.value:r.offsetX.value;let K=0;e.loop?K=he>0?h.value>0?-1:1:0:K=-Math[h.value>0?"ceil":"floor"](h.value/d.value),y({pace:K,emitChange:!0})}else h.value&&y({pace:0});i=!1,l.swiping=!1,t("dragEnd",{index:g.value}),A()},oe=(re,H={})=>{T(),r.reset(),Gn(()=>{let ee;e.loop&&re===u.value?ee=l.active===0?0:re:ee=re%u.value,H.immediate?Gn(()=>{l.swiping=!1}):l.swiping=!1,y({pace:ee-l.active,emitChange:!0})})},Te=(re,H)=>{const ee=H===g.value,he=ee?{backgroundColor:e.indicatorColor}:void 0;return f("i",{style:he,class:tl("indicator",{active:ee})},null)},ke=()=>{if(n.indicator)return n.indicator({active:g.value,total:u.value});if(e.showIndicators&&u.value>1)return f("div",{class:tl("indicators",{vertical:e.vertical})},[Array(u.value).fill("").map(Te)])};return _e({prev:O,next:C,state:l,resize:D,swipeTo:oe}),c({size:d,props:e,count:u,activeIndicator:g}),te(()=>e.initialSwipe,re=>_(+re)),te(u,()=>_(l.active)),te(()=>e.autoplay,A),te([Ht,Ot,()=>e.width,()=>e.height],D),te(Wb(),re=>{re==="visible"?A():R()}),We(_),cn(()=>_(l.active)),ai(()=>_(l.active)),un(R),dn(R),Ge("touchmove",N,{target:a}),()=>{var re;return f("div",{ref:o,class:tl()},[f("div",{ref:a,style:v.value,class:tl("track",{vertical:e.vertical}),onTouchstartPassive:ae,onTouchend:ne,onTouchcancel:ne},[(re=n.default)==null?void 0:re.call(n)]),ke()])}}});const rs=X(b0),[y0,Wc]=Y("tabs");var p0=U({name:y0,props:{count:Qe(Number),inited:Boolean,animated:Boolean,duration:Qe(q),swipeable:Boolean,lazyRender:Boolean,currentIndex:Qe(Number)},emits:["change"],setup(e,{emit:t,slots:n}){const o=M(),a=r=>t("change",r),l=()=>{var r;const s=(r=n.default)==null?void 0:r.call(n);return e.animated||e.swipeable?f(rs,{ref:o,loop:!1,class:Wc("track"),duration:+e.duration*1e3,touchable:e.swipeable,lazyRender:e.lazyRender,showIndicators:!1,onChange:a},{default:()=>[s]}):s},i=r=>{const s=o.value;s&&s.state.active!==r&&s.swipeTo(r,{immediate:!e.inited})};return te(()=>e.currentIndex,i),We(()=>{i(e.currentIndex)}),_e({swipeRef:o}),()=>f("div",{class:Wc("content",{animated:e.animated||e.swipeable})},[l()])}});const[Yf,nl]=Y("tabs"),w0={type:Z("line"),color:String,border:Boolean,sticky:Boolean,shrink:Boolean,active:se(0),duration:se(.3),animated:Boolean,ellipsis:z,swipeable:Boolean,scrollspy:Boolean,offsetTop:se(0),background:String,lazyRender:z,showHeader:z,lineWidth:q,lineHeight:q,beforeChange:Function,swipeThreshold:se(5),titleActiveColor:String,titleInactiveColor:String},Gf=Symbol(Yf);var x0=U({name:Yf,props:w0,emits:["change","scroll","rendered","clickTab","update:active"],setup(e,{emit:t,slots:n}){let o,a,l,i,r;const s=M(),c=M(),u=M(),d=M(),h=na(),m=ea(s),[b,p]=Wa(),{children:g,linkChildren:w}=dt(Gf),v=je({inited:!1,position:"",lineStyle:{},currentIndex:-1}),x=B(()=>g.length>+e.swipeThreshold||!e.ellipsis||e.shrink),S=B(()=>({borderColor:e.color,background:e.background})),y=(K,ce)=>{var E;return(E=K.name)!=null?E:ce},T=B(()=>{const K=g[v.currentIndex];if(K)return y(K,v.currentIndex)}),O=B(()=>ts(e.offsetTop)),C=B(()=>e.sticky?O.value+o:0),I=K=>{const ce=c.value,E=b.value;if(!x.value||!ce||!E||!E[v.currentIndex])return;const F=E[v.currentIndex].$el,V=F.offsetLeft-(ce.offsetWidth-F.offsetWidth)/2;i&&i(),i=c0(ce,V,K?0:+e.duration)},R=()=>{const K=v.inited;Se(()=>{const ce=b.value;if(!ce||!ce[v.currentIndex]||e.type!=="line"||yo(s.value))return;const E=ce[v.currentIndex].$el,{lineWidth:F,lineHeight:V}=e,J=E.offsetLeft+E.offsetWidth/2,fe={width:pe(F),backgroundColor:e.color,transform:`translateX(${J}px) translateX(-50%)`};if(K&&(fe.transitionDuration=`${e.duration}s`),Ee(V)){const k=pe(V);fe.height=k,fe.borderRadius=k}v.lineStyle=fe})},A=K=>{const ce=K=0&&K{const E=A(K);if(!Ee(E))return;const F=g[E],V=y(F,E),J=v.currentIndex!==null;v.currentIndex!==E&&(v.currentIndex=E,ce||I(),R()),V!==e.active&&(t("update:active",V),J&&t("change",V,F.title)),l&&!e.scrollspy&&La(Math.ceil(Ic(s.value)-O.value))},D=(K,ce)=>{const E=g.findIndex((F,V)=>y(F,V)===K);_(E===-1?0:E,ce)},j=(K=!1)=>{if(e.scrollspy){const ce=g[v.currentIndex].$el;if(ce&&m.value){const E=Ic(ce,m.value)-C.value;a=!0,r&&r(),r=u0(m.value,E,K?0:+e.duration,()=>{a=!1})}}},ae=(K,ce,E)=>{const{title:F,disabled:V}=g[ce],J=y(g[ce],ce);V||(Qn(e.beforeChange,{args:[J],done:()=>{_(ce),j()}}),Of(K)),t("clickTab",{name:J,title:F,event:E,disabled:V})},N=K=>{l=K.isFixed,t("scroll",K)},ne=K=>{Se(()=>{D(K),j(!0)})},oe=()=>{for(let K=0;KC.value)return K===0?0:K-1}return g.length-1},Te=()=>{if(e.scrollspy&&!a){const K=oe();_(K)}},ke=()=>{if(e.type==="line"&&g.length)return f("div",{class:nl("line"),style:v.lineStyle},null)},re=()=>{var K,ce,E;const{type:F,border:V,sticky:J}=e,fe=[f("div",{ref:J?void 0:u,class:[nl("wrap"),{[oi]:F==="line"&&V}]},[f("div",{ref:c,role:"tablist",class:nl("nav",[F,{shrink:e.shrink,complete:x.value}]),style:S.value,"aria-orientation":"horizontal"},[(K=n["nav-left"])==null?void 0:K.call(n),g.map(k=>k.renderTitle(ae)),ke(),(ce=n["nav-right"])==null?void 0:ce.call(n)])]),(E=n["nav-bottom"])==null?void 0:E.call(n)];return J?f("div",{ref:u},[fe]):fe},H=()=>{R(),Se(()=>{var K,ce;I(!0),(ce=(K=d.value)==null?void 0:K.swipeRef.value)==null||ce.resize()})};te(()=>[e.color,e.duration,e.lineWidth,e.lineHeight],R),te(Ht,H),te(()=>e.active,K=>{K!==T.value&&D(K)}),te(()=>g.length,()=>{v.inited&&(D(e.active),R(),Se(()=>{I(!0)}))});const ee=()=>{D(e.active,!0),Se(()=>{v.inited=!0,u.value&&(o=Oe(u.value).height),I(!0)})},he=(K,ce)=>t("rendered",K,ce);return _e({resize:H,scrollTo:ne}),cn(R),ai(R),Qo(ee),zf(s,R),Ge("scroll",Te,{target:m,passive:!0}),w({id:h,props:e,setLine:R,scrollable:x,onRendered:he,currentName:T,setTitleRefs:p,scrollIntoView:I}),()=>f("div",{ref:s,class:nl([e.type])},[e.showHeader?e.sticky?f(jf,{container:s.value,offsetTop:O.value,onScroll:N},{default:()=>[re()]}):re():null,f(p0,{ref:d,count:g.length,inited:v.inited,animated:e.animated,duration:e.duration,swipeable:e.swipeable,lazyRender:e.lazyRender,currentIndex:v.currentIndex,onChange:_},{default:()=>{var K;return[(K=n.default)==null?void 0:K.call(n)]}})])}});const S0=Symbol(),Kf=Symbol(),qf=()=>yt(Kf,null),C0=e=>{const t=qf();rn(S0,e),rn(Kf,B(()=>(t==null||t.value)&&e.value))},[T0,Uc]=Y("tab"),_0=U({name:T0,props:{id:String,dot:Boolean,type:String,color:String,title:String,badge:q,shrink:Boolean,isActive:Boolean,disabled:Boolean,controls:String,scrollable:Boolean,activeColor:String,inactiveColor:String,showZeroBadge:z},setup(e,{slots:t}){const n=B(()=>{const a={},{type:l,color:i,disabled:r,isActive:s,activeColor:c,inactiveColor:u}=e;i&&l==="card"&&(a.borderColor=i,r||(s?a.backgroundColor=i:a.color=i));const h=s?c:u;return h&&(a.color=h),a}),o=()=>{const a=f("span",{class:Uc("text",{ellipsis:!e.scrollable})},[t.title?t.title():e.title]);return e.dot||Ee(e.badge)&&e.badge!==""?f(So,{dot:e.dot,content:e.badge,showZero:e.showZeroBadge},{default:()=>[a]}):a};return()=>f("div",{id:e.id,role:"tab",class:[Uc([e.type,{grow:e.scrollable&&!e.shrink,shrink:e.shrink,active:e.isActive,disabled:e.disabled}])],style:n.value,tabindex:e.disabled?void 0:e.isActive?0:-1,"aria-selected":e.isActive,"aria-disabled":e.disabled||void 0,"aria-controls":e.controls,"data-allow-mismatch":"attribute"},[o()])}}),[E0,k0]=Y("swipe-item");var A0=U({name:E0,setup(e,{slots:t}){let n;const o=je({offset:0,inited:!1,mounted:!1}),{parent:a,index:l}=lt(Uf);if(!a)return;const i=B(()=>{const c={},{vertical:u}=a.props;return a.size.value&&(c[u?"height":"width"]=`${a.size.value}px`),o.offset&&(c.transform=`translate${u?"Y":"X"}(${o.offset}px)`),c}),r=B(()=>{const{loop:c,lazyRender:u}=a.props;if(!u||n)return!0;if(!o.mounted)return!1;const d=a.activeIndicator.value,h=a.count.value-1,m=d===0&&c?h:d-1,b=d===h&&c?0:d+1;return n=l.value===d||l.value===m||l.value===b,n}),s=c=>{o.offset=c};return We(()=>{Se(()=>{o.mounted=!0})}),_e({setOffset:s}),()=>{var c;return f("div",{class:k0(),style:i.value},[r.value?(c=t.default)==null?void 0:c.call(t):null])}}});const ss=X(A0),[P0,Vi]=Y("tab"),I0=me({},eo,{dot:Boolean,name:q,badge:q,title:String,disabled:Boolean,titleClass:He,titleStyle:[String,Object],showZeroBadge:z});var O0=U({name:P0,props:I0,setup(e,{slots:t}){const n=na(),o=M(!1),a=$t(),{parent:l,index:i}=lt(Gf);if(!l)return;const r=()=>{var b;return(b=e.name)!=null?b:i.value},s=()=>{o.value=!0,l.props.lazyRender&&Se(()=>{l.onRendered(r(),e.title)})},c=B(()=>{const b=r()===l.currentName.value;return b&&!o.value&&s(),b}),u=M(""),d=M("");Jo(()=>{const{titleClass:b,titleStyle:p}=e;u.value=b?Yl(b):"",d.value=p&&typeof p!="string"?cm(Ul(p)):p});const h=b=>f(_0,Ce({key:n,id:`${l.id}-${i.value}`,ref:l.setTitleRefs(i.value),style:d.value,class:u.value,isActive:c.value,controls:n,scrollable:l.scrollable.value,activeColor:l.props.titleActiveColor,inactiveColor:l.props.titleInactiveColor,onClick:p=>b(a.proxy,i.value,p)},Pe(l.props,["type","color","shrink"]),Pe(e,["dot","badge","title","disabled","showZeroBadge"])),{title:t.title}),m=M(!c.value);return te(c,b=>{b?m.value=!1:Gn(()=>{m.value=!0})}),te(()=>e.title,()=>{l.setLine(),l.scrollIntoView()}),C0(c),_e({id:n,renderTitle:h}),()=>{var b;const p=`${l.id}-${i.value}`,{animated:g,swipeable:w,scrollspy:v,lazyRender:x}=l.props;if(!t.default&&!g)return;const S=v||c.value;if(g||w)return f(ss,{id:n,role:"tabpanel",class:Vi("panel-wrapper",{inactive:m.value}),tabindex:c.value?0:-1,"aria-hidden":!c.value,"aria-labelledby":p,"data-allow-mismatch":"attribute"},{default:()=>{var O;return[f("div",{class:Vi("panel")},[(O=t.default)==null?void 0:O.call(t)])]}});const T=o.value||v||!x?(b=t.default)==null?void 0:b.call(t):null;return et(f("div",{id:n,role:"tabpanel",class:Vi("panel"),tabindex:S?0:-1,"aria-labelledby":p,"data-allow-mismatch":"attribute"},[T]),[[at,S]])}}});const Na=X(O0),ri=X(x0),[Xf,Li]=Y("picker-group"),Zf=Symbol(Xf),R0=me({tabs:Fe(),activeTab:se(0),nextStepText:String,showToolbar:z},ii);var D0=U({name:Xf,props:R0,emits:["confirm","cancel","update:activeTab"],setup(e,{emit:t,slots:n}){const o=is(()=>e.activeTab,c=>t("update:activeTab",c)),{children:a,linkChildren:l}=dt(Zf);l();const i=()=>+o.value{i()?o.value=+o.value+1:t("confirm",a.map(c=>c.confirm()))},s=()=>t("cancel");return()=>{var c,u;let d=(u=(c=n.default)==null?void 0:c.call(n))==null?void 0:u.filter(m=>m.type!==nt).map(m=>m.type===Ke?m.children:m);d&&(d=Db(d));const h=i()?e.nextStepText:e.confirmButtonText;return f("div",{class:Li()},[e.showToolbar?f(Hf,{title:e.title,cancelButtonText:e.cancelButtonText,confirmButtonText:h,onConfirm:r,onCancel:s},Pe(n,Ff)):null,f(ri,{active:o.value,"onUpdate:active":m=>o.value=m,class:Li("tabs"),shrink:!0,animated:!0,lazyRender:!1},{default:()=>[e.tabs.map((m,b)=>f(Na,{title:m,titleClass:Li("tab-title")},{default:()=>[d?.[b]]}))]})])}}});const si=me({loading:Boolean,readonly:Boolean,allowHtml:Boolean,optionHeight:se(44),showToolbar:z,swipeDuration:se(1e3),visibleOptionNum:se(6)},ii),$0=me({},si,{columns:Fe(),modelValue:Fe(),toolbarPosition:Z("top"),columnsFieldNames:Object});var B0=U({name:e0,props:$0,emits:["confirm","cancel","change","scrollInto","clickOption","update:modelValue"],setup(e,{emit:t,slots:n}){const o=M(),a=M(e.modelValue.slice(0)),{parent:l}=lt(Zf),{children:i,linkChildren:r}=dt(Nf);r();const s=B(()=>a0(e.columnsFieldNames)),c=B(()=>ts(e.optionHeight)),u=B(()=>t0(e.columns,s.value)),d=B(()=>{const{columns:_}=e;switch(u.value){case"multiple":return _;case"cascade":return n0(_,s.value,a);default:return[_]}}),h=B(()=>d.value.some(_=>_.length)),m=B(()=>d.value.map((_,D)=>Cr(_,a.value[D],s.value))),b=B(()=>d.value.map((_,D)=>_.findIndex(j=>j[s.value.value]===a.value[D]))),p=(_,D)=>{if(a.value[_]!==D){const j=a.value.slice(0);j[_]=D,a.value=j}},g=()=>({selectedValues:a.value.slice(0),selectedOptions:m.value,selectedIndexes:b.value}),w=(_,D)=>{p(D,_),u.value==="cascade"&&a.value.forEach((j,ae)=>{const N=d.value[ae];Hc(N,j,s.value)||p(ae,N.length?N[0][s.value.value]:void 0)}),Se(()=>{t("change",me({columnIndex:D},g()))})},v=(_,D)=>{const j={columnIndex:D,currentOption:_};t("clickOption",me(g(),j)),t("scrollInto",j)},x=()=>{i.forEach(D=>D.stopMomentum());const _=g();return Se(()=>{const D=g();t("confirm",D)}),_},S=()=>t("cancel",g()),y=()=>d.value.map((_,D)=>f(i0,{value:a.value[D],fields:s.value,options:_,readonly:e.readonly,allowHtml:e.allowHtml,optionHeight:c.value,swipeDuration:e.swipeDuration,visibleOptionNum:e.visibleOptionNum,onChange:j=>w(j,D),onClickOption:j=>v(j,D),onScrollInto:j=>{t("scrollInto",{currentOption:j,columnIndex:D})}},{option:n.option})),T=_=>{if(h.value){const D={height:`${c.value}px`},j={backgroundSize:`100% ${(_-c.value)/2}px`};return[f("div",{class:Sn("mask"),style:j},null),f("div",{class:[ry,Sn("frame")],style:D},null)]}},O=()=>{const _=c.value*+e.visibleOptionNum,D={height:`${_}px`};return!e.loading&&!h.value&&n.empty?n.empty():f("div",{ref:o,class:Sn("columns"),style:D},[y(),T(_)])},C=()=>{if(e.showToolbar&&!l)return f(Hf,Ce(Pe(e,s0),{onConfirm:x,onCancel:S}),Pe(n,Ff))},I=_=>{_.forEach((D,j)=>{D.length&&!Hc(D,a.value[j],s.value)&&p(j,Vf(D)[s.value.value])})};te(d,_=>I(_),{immediate:!0});let R;return te(()=>e.modelValue,_=>{!sn(_,a.value)&&!sn(_,R)&&(a.value=_.slice(0),R=_.slice(0)),e.modelValue.length===0&&I(d.value)},{deep:!0}),te(a,_=>{sn(_,e.modelValue)||(R=_.slice(0),t("update:modelValue",R))},{immediate:!0}),Ge("touchmove",Le,{target:o}),_e({confirm:x,getSelectedOptions:()=>m.value}),()=>{var _,D;return f("div",{class:Sn()},[e.toolbarPosition==="top"?C():null,e.loading?f(Gt,{class:Sn("loading")},null):null,(_=n["columns-top"])==null?void 0:_.call(n),O(),(D=n["columns-bottom"])==null?void 0:D.call(n),e.toolbarPosition==="bottom"?C():null])}}});const jo="000000",M0=["title","cancel","confirm","toolbar","columns-top","columns-bottom"],Jf=["title","loading","readonly","optionHeight","swipeDuration","visibleOptionNum","cancelButtonText","confirmButtonText"],Ln=(e="",t=jo,n=void 0)=>({text:e,value:t,children:n});function V0({areaList:e,columnsNum:t,columnsPlaceholder:n}){const{city_list:o={},county_list:a={},province_list:l={}}=e,i=+t>1,r=+t>2,s=()=>{if(i)return n.length>1?[Ln(n[1],jo,r?[]:void 0)]:[]},c=new Map;Object.keys(l).forEach(h=>{c.set(h.slice(0,2),Ln(l[h],h,s()))});const u=new Map;if(i){const h=()=>{if(r)return n.length>2?[Ln(n[2])]:[]};Object.keys(o).forEach(m=>{const b=Ln(o[m],m,h());u.set(m.slice(0,4),b);const p=c.get(m.slice(0,2));p&&p.children.push(b)})}r&&Object.keys(a).forEach(h=>{const m=u.get(h.slice(0,4));m&&m.children.push(Ln(a[h],h))});const d=Array.from(c.values());if(n.length){const h=r?[Ln(n[2])]:void 0,m=i?[Ln(n[1],jo,h)]:void 0;d.unshift(Ln(n[0],jo,m))}return d}const ci=X(B0),[L0,N0]=Y("area"),F0=me({},Pe(si,Jf),{modelValue:String,columnsNum:se(3),columnsPlaceholder:Fe(),areaList:{type:Object,default:()=>({})}});var H0=U({name:L0,props:F0,emits:["change","confirm","cancel","update:modelValue"],setup(e,{emit:t,slots:n}){const o=M([]),a=M(),l=B(()=>V0(e)),i=(...c)=>t("change",...c),r=(...c)=>t("cancel",...c),s=(...c)=>t("confirm",...c);return te(o,c=>{const u=c.length?c[c.length-1]:"";u&&u!==e.modelValue&&t("update:modelValue",u)},{deep:!0}),te(()=>e.modelValue,c=>{if(c){const u=o.value.length?o.value[o.value.length-1]:"";c!==u&&(o.value=[`${c.slice(0,2)}0000`,`${c.slice(0,4)}00`,c].slice(0,+e.columnsNum))}else o.value=[]},{immediate:!0}),_e({confirm:()=>{var c;return(c=a.value)==null?void 0:c.confirm()},getSelectedOptions:()=>{var c;return((c=a.value)==null?void 0:c.getSelectedOptions())||[]}}),()=>f(ci,Ce({ref:a,modelValue:o.value,"onUpdate:modelValue":c=>o.value=c,class:N0(),columns:l.value,onChange:i,onCancel:r,onConfirm:s},Pe(e,Jf)),Pe(n,M0))}});const Qf=X(H0),[z0,_o]=Y("cell"),ui={tag:Z("div"),icon:String,size:String,title:q,value:q,label:q,center:Boolean,isLink:Boolean,border:z,iconPrefix:String,valueClass:He,labelClass:He,titleClass:He,titleStyle:null,arrowDirection:String,required:{type:[Boolean,String],default:null},clickable:{type:Boolean,default:null}},j0=me({},ui,eo);var W0=U({name:z0,props:j0,setup(e,{slots:t}){const n=xo(),o=()=>{if(t.label||Ee(e.label))return f("div",{class:[_o("label"),e.labelClass]},[t.label?t.label():e.label])},a=()=>{var s;if(t.title||Ee(e.title)){const c=(s=t.title)==null?void 0:s.call(t);return Array.isArray(c)&&c.length===0?void 0:f("div",{class:[_o("title"),e.titleClass],style:e.titleStyle},[c||f("span",null,[e.title]),o()])}},l=()=>{const s=t.value||t.default;if(s||Ee(e.value))return f("div",{class:[_o("value"),e.valueClass]},[s?s():f("span",null,[e.value])])},i=()=>{if(t.icon)return t.icon();if(e.icon)return f(xe,{name:e.icon,class:_o("left-icon"),classPrefix:e.iconPrefix},null)},r=()=>{if(t["right-icon"])return t["right-icon"]();if(e.isLink){const s=e.arrowDirection&&e.arrowDirection!=="right"?`arrow-${e.arrowDirection}`:"arrow";return f(xe,{name:s,class:_o("right-icon")},null)}};return()=>{var s;const{tag:c,size:u,center:d,border:h,isLink:m,required:b}=e,p=(s=e.clickable)!=null?s:m,g={center:d,required:!!b,clickable:p,borderless:!h};return u&&(g[u]=!!u),f(c,{class:_o(g),role:p?"button":void 0,tabindex:p?0:void 0,onClick:n},{default:()=>{var w;return[i(),a(),l(),r(),(w=t.extra)==null?void 0:w.call(t)]}})}}});const qt=X(W0),[U0,Y0]=Y("form"),G0={colon:Boolean,disabled:Boolean,readonly:Boolean,required:[Boolean,String],showError:Boolean,labelWidth:q,labelAlign:String,inputAlign:String,scrollToError:Boolean,scrollToErrorPosition:String,validateFirst:Boolean,submitOnEnter:z,showErrorMessage:z,errorMessageAlign:String,validateTrigger:{type:[String,Array],default:"onBlur"}};var K0=U({name:U0,props:G0,emits:["submit","failed"],setup(e,{emit:t,slots:n}){const{children:o,linkChildren:a}=dt(_f),l=g=>g?o.filter(w=>g.includes(w.name)):o,i=g=>new Promise((w,v)=>{const x=[];l(g).reduce((y,T)=>y.then(()=>{if(!x.length)return T.validate().then(O=>{O&&x.push(O)})}),Promise.resolve()).then(()=>{x.length?v(x):w()})}),r=g=>new Promise((w,v)=>{const x=l(g);Promise.all(x.map(S=>S.validate())).then(S=>{S=S.filter(Boolean),S.length?v(S):w()})}),s=g=>{const w=o.find(v=>v.name===g);return w?new Promise((v,x)=>{w.validate().then(S=>{S?x(S):v()})}):Promise.reject()},c=g=>typeof g=="string"?s(g):e.validateFirst?i(g):r(g),u=g=>{typeof g=="string"&&(g=[g]),l(g).forEach(v=>{v.resetValidation()})},d=()=>o.reduce((g,w)=>(g[w.name]=w.getValidationStatus(),g),{}),h=(g,w)=>{o.some(v=>v.name===g?(v.$el.scrollIntoView(w),!0):!1)},m=()=>o.reduce((g,w)=>(w.name!==void 0&&(g[w.name]=w.formValue.value),g),{}),b=()=>{const g=m();c().then(()=>t("submit",g)).catch(w=>{t("failed",{values:g,errors:w});const{scrollToError:v,scrollToErrorPosition:x}=e;v&&w[0].name&&h(w[0].name,x?{block:x}:void 0)})},p=g=>{Le(g),b()};return a({props:e}),_e({submit:b,validate:c,getValues:m,scrollToField:h,resetValidation:u,getValidationStatus:d}),()=>{var g;return f("form",{class:Y0(),onSubmit:p},[(g=n.default)==null?void 0:g.call(n)])}}});const cs=X(K0);function eh(e){return Array.isArray(e)?!e.length:e===0?!1:!e}function q0(e,t){if(eh(e)){if(t.required)return!1;if(t.validateEmpty===!1)return!0}return!(t.pattern&&!t.pattern.test(String(e)))}function X0(e,t){return new Promise(n=>{const o=t.validator(e,t);if(Jr(o)){o.then(n);return}n(o)})}function Yc(e,t){const{message:n}=t;return qo(n)?n(e,t):n||""}function Z0({target:e}){e.composing=!0}function Gc({target:e}){e.composing&&(e.composing=!1,e.dispatchEvent(new Event("input")))}function J0(e,t){const n=go();e.style.height="auto";let o=e.scrollHeight;if(Yt(t)){const{maxHeight:a,minHeight:l}=t;a!==void 0&&(o=Math.min(o,a)),l!==void 0&&(o=Math.max(o,l))}o&&(e.style.height=`${o}px`,La(n))}function Q0(e,t){return e==="number"&&(e="text",t??(t="decimal")),e==="digit"&&(e="tel",t??(t="numeric")),{type:e,inputmode:t}}function ol(e){return[...e].length}function Ni(e,t){return[...e].slice(0,t).join("")}const[ep,At]=Y("field"),us={id:String,name:String,leftIcon:String,rightIcon:String,autofocus:Boolean,clearable:Boolean,maxlength:q,max:Number,min:Number,formatter:Function,clearIcon:Z("clear"),modelValue:se(""),inputAlign:String,placeholder:String,autocomplete:String,autocapitalize:String,autocorrect:String,errorMessage:String,enterkeyhint:String,clearTrigger:Z("focus"),formatTrigger:Z("onChange"),spellcheck:{type:Boolean,default:null},error:{type:Boolean,default:null},disabled:{type:Boolean,default:null},readonly:{type:Boolean,default:null},inputmode:String},tp=me({},ui,us,{rows:q,type:Z("text"),rules:Array,autosize:[Boolean,Object],labelWidth:q,labelClass:He,labelAlign:String,showWordLimit:Boolean,errorMessageAlign:String,colon:{type:Boolean,default:null}});var np=U({name:ep,props:tp,emits:["blur","focus","clear","keypress","clickInput","endValidate","startValidate","clickLeftIcon","clickRightIcon","update:modelValue"],setup(e,{emit:t,slots:n}){const o=na(),a=je({status:"unvalidated",focused:!1,validateMessage:""}),l=M(),i=M(),r=M(),{parent:s}=lt(_f),c=()=>{var E;return String((E=e.modelValue)!=null?E:"")},u=E=>{if(Ee(e[E]))return e[E];if(s&&Ee(s.props[E]))return s.props[E]},d=B(()=>{const E=u("readonly");if(e.clearable&&!E){const F=c()!=="",V=e.clearTrigger==="always"||e.clearTrigger==="focus"&&a.focused;return F&&V}return!1}),h=B(()=>r.value&&n.input?r.value():e.modelValue),m=B(()=>{var E;const F=u("required");return F==="auto"?(E=e.rules)==null?void 0:E.some(V=>V.required):F}),b=E=>E.reduce((F,V)=>F.then(()=>{if(a.status==="failed")return;let{value:J}=h;if(V.formatter&&(J=V.formatter(J,V)),!q0(J,V)){a.status="failed",a.validateMessage=Yc(J,V);return}if(V.validator)return eh(J)&&V.validateEmpty===!1?void 0:X0(J,V).then(fe=>{fe&&typeof fe=="string"?(a.status="failed",a.validateMessage=fe):fe===!1&&(a.status="failed",a.validateMessage=Yc(J,V))})}),Promise.resolve()),p=()=>{a.status="unvalidated",a.validateMessage=""},g=()=>t("endValidate",{status:a.status,message:a.validateMessage}),w=(E=e.rules)=>new Promise(F=>{p(),E?(t("startValidate"),b(E).then(()=>{a.status==="failed"?(F({name:e.name,message:a.validateMessage}),g()):(a.status="passed",F(),g())})):F()}),v=E=>{if(s&&e.rules){const{validateTrigger:F}=s.props,V=Rl(F).includes(E),J=e.rules.filter(fe=>fe.trigger?Rl(fe.trigger).includes(E):V);J.length&&w(J)}},x=E=>{var F;const{maxlength:V}=e;if(Ee(V)&&ol(E)>+V){const J=c();if(J&&ol(J)===+V)return J;const fe=(F=l.value)==null?void 0:F.selectionEnd;if(a.focused&&fe){const k=[...E],P=k.length-+V;return k.splice(fe-P,P),k.join("")}return Ni(E,+V)}return E},S=(E,F="onChange")=>{var V,J;const fe=E;E=x(E);const k=fe.length-E.length;if(e.type==="number"||e.type==="digit"){const $=e.type==="number";if(E=wr(E,$,$),F==="onBlur"&&E!==""&&(e.min!==void 0||e.max!==void 0)){const L=Je(+E,(V=e.min)!=null?V:-1/0,(J=e.max)!=null?J:1/0);+E!==L&&(E=L.toString())}}let P=0;if(e.formatter&&F===e.formatTrigger){const{formatter:$,maxlength:L}=e;if(E=$(E),Ee(L)&&ol(E)>+L&&(E=Ni(E,+L)),l.value&&a.focused){const{selectionEnd:G}=l.value,W=Ni(fe,G);P=$(W).length-W.length}}if(l.value&&l.value.value!==E)if(a.focused){let{selectionStart:$,selectionEnd:L}=l.value;if(l.value.value=E,Ee($)&&Ee(L)){const G=E.length;k?($-=k,L-=k):P&&($+=P,L+=P),l.value.setSelectionRange(Math.min($,G),Math.min(L,G))}}else l.value.value=E;E!==e.modelValue&&t("update:modelValue",E)},y=E=>{E.target.composing||S(E.target.value)},T=()=>{var E;return(E=l.value)==null?void 0:E.blur()},O=()=>{var E;return(E=l.value)==null?void 0:E.focus()},C=()=>{const E=l.value;e.type==="textarea"&&e.autosize&&E&&J0(E,e.autosize)},I=E=>{a.focused=!0,t("focus",E),Se(C),u("readonly")&&T()},R=E=>{a.focused=!1,S(c(),"onBlur"),t("blur",E),!u("readonly")&&(v("onBlur"),Se(C),yf())},A=E=>t("clickInput",E),_=E=>t("clickLeftIcon",E),D=E=>t("clickRightIcon",E),j=E=>{Le(E),t("update:modelValue",""),t("clear",E)},ae=B(()=>{if(typeof e.error=="boolean")return e.error;if(s&&s.props.showError&&a.status==="failed")return!0}),N=B(()=>{const E=u("labelWidth"),F=u("labelAlign");if(E&&F!=="top")return{width:pe(E)}}),ne=E=>{E.keyCode===13&&(!(s&&s.props.submitOnEnter)&&e.type!=="textarea"&&Le(E),e.type==="search"&&T()),t("keypress",E)},oe=()=>e.id||`${o}-input`,Te=()=>a.status,ke=()=>{const E=At("control",[u("inputAlign"),{error:ae.value,custom:!!n.input,"min-height":e.type==="textarea"&&!e.autosize}]);if(n.input)return f("div",{class:E,onClick:A},[n.input()]);const F={id:oe(),ref:l,name:e.name,rows:e.rows!==void 0?+e.rows:void 0,class:E,disabled:u("disabled"),readonly:u("readonly"),autofocus:e.autofocus,placeholder:e.placeholder,autocomplete:e.autocomplete,autocapitalize:e.autocapitalize,autocorrect:e.autocorrect,enterkeyhint:e.enterkeyhint,spellcheck:e.spellcheck,"aria-labelledby":e.label?`${o}-label`:void 0,"data-allow-mismatch":"attribute",onBlur:R,onFocus:I,onInput:y,onClick:A,onChange:Gc,onKeypress:ne,onCompositionend:Gc,onCompositionstart:Z0};return e.type==="textarea"?f("textarea",Ce(F,{inputmode:e.inputmode}),null):f("input",Ce(Q0(e.type,e.inputmode),F),null)},re=()=>{const E=n["left-icon"];if(e.leftIcon||E)return f("div",{class:At("left-icon"),onClick:_},[E?E():f(xe,{name:e.leftIcon,classPrefix:e.iconPrefix},null)])},H=()=>{const E=n["right-icon"];if(e.rightIcon||E)return f("div",{class:At("right-icon"),onClick:D},[E?E():f(xe,{name:e.rightIcon,classPrefix:e.iconPrefix},null)])},ee=()=>{if(e.showWordLimit&&e.maxlength){const E=ol(c());return f("div",{class:At("word-limit")},[f("span",{class:At("word-num")},[E]),uo("/"),e.maxlength])}},he=()=>{if(s&&s.props.showErrorMessage===!1)return;const E=e.errorMessage||a.validateMessage;if(E){const F=n["error-message"],V=u("errorMessageAlign");return f("div",{class:At("error-message",V)},[F?F({message:E}):E])}},K=()=>{const E=u("labelWidth"),F=u("labelAlign"),V=u("colon")?":":"";if(n.label)return[n.label(),V];if(e.label)return f("label",{id:`${o}-label`,for:n.input?void 0:oe(),"data-allow-mismatch":"attribute",onClick:J=>{Le(J),O()},style:F==="top"&&E?{width:pe(E)}:void 0},[e.label+V])},ce=()=>[f("div",{class:At("body")},[ke(),d.value&&f(xe,{ref:i,name:e.clearIcon,class:At("clear")},null),H(),n.button&&f("div",{class:At("button")},[n.button()])]),ee(),he()];return _e({blur:T,focus:O,validate:w,formValue:h,resetValidation:p,getValidationStatus:Te}),rn(bf,{customValue:r,resetValidation:p,validateWithTrigger:v}),te(()=>e.modelValue,()=>{S(c()),p(),v("onChange"),Se(C)}),We(()=>{S(c(),e.formatTrigger),Se(C)}),Ge("touchstart",j,{target:B(()=>{var E;return(E=i.value)==null?void 0:E.$el})}),()=>{const E=u("disabled"),F=u("labelAlign"),V=re(),J=()=>{const fe=K();return F==="top"?[V,fe].filter(Boolean):fe||[]};return f(qt,{size:e.size,class:At({error:ae.value,disabled:E,[`label-${F}`]:F}),center:e.center,border:e.border,isLink:e.isLink,clickable:e.clickable,titleStyle:N.value,valueClass:At("value"),titleClass:[At("label",[F,{required:m.value}]),e.labelClass],arrowDirection:e.arrowDirection},{icon:V&&F!=="top"?()=>V:null,title:J,value:ce,extra:n.extra})}}});const Cn=X(np);let ca=0;function op(e){e?(ca||document.body.classList.add("van-toast--unclickable"),ca++):ca&&(ca--,ca||document.body.classList.remove("van-toast--unclickable"))}const[ap,Eo]=Y("toast"),lp=["show","overlay","teleport","transition","overlayClass","overlayStyle","closeOnClickOverlay","zIndex"],ip={icon:String,show:Boolean,type:Z("text"),overlay:Boolean,message:q,iconSize:q,duration:Ze(2e3),position:Z("middle"),teleport:[String,Object],wordBreak:String,className:He,iconPrefix:String,transition:Z("van-fade"),loadingType:String,forbidClick:Boolean,overlayClass:He,overlayStyle:Object,closeOnClick:Boolean,closeOnClickOverlay:Boolean,zIndex:q};var th=U({name:ap,props:ip,emits:["update:show"],setup(e,{emit:t,slots:n}){let o,a=!1;const l=()=>{const d=e.show&&e.forbidClick;a!==d&&(a=d,op(a))},i=d=>t("update:show",d),r=()=>{e.closeOnClick&&i(!1)},s=()=>clearTimeout(o),c=()=>{const{icon:d,type:h,iconSize:m,iconPrefix:b,loadingType:p}=e;if(d||h==="success"||h==="fail")return f(xe,{name:d||h,size:m,class:Eo("icon"),classPrefix:b},null);if(h==="loading")return f(Gt,{class:Eo("loading"),size:m,type:p},null)},u=()=>{const{type:d,message:h}=e;if(n.message)return f("div",{class:Eo("text")},[n.message()]);if(Ee(h)&&h!=="")return d==="html"?f("div",{key:0,class:Eo("text"),innerHTML:String(h)},null):f("div",{class:Eo("text")},[h])};return te(()=>[e.show,e.forbidClick],l),te(()=>[e.show,e.type,e.message,e.duration],()=>{s(),e.show&&e.duration>0&&(o=setTimeout(()=>{i(!1)},e.duration))}),We(l),wo(l),()=>f(Kt,Ce({class:[Eo([e.position,e.wordBreak==="normal"?"break-normal":e.wordBreak,{[e.type]:!e.icon}]),e.className],lockScroll:!1,onClick:r,onClosed:s,"onUpdate:show":i},Pe(e,lp)),{default:()=>[c(),u()]})}});function nh(){const e=je({show:!1}),t=a=>{e.show=a},n=a=>{me(e,a,{transitionAppear:!0}),t(!0)},o=()=>t(!1);return _e({open:n,close:o,toggle:t}),{open:n,close:o,state:e,toggle:t}}function oh(e){const t=Qd(e),n=document.createElement("div");return document.body.appendChild(n),{instance:t.mount(n),unmount(){t.unmount(),document.body.removeChild(n)}}}const rp={icon:"",type:"text",message:"",className:"",overlay:!1,onClose:void 0,onOpened:void 0,duration:2e3,teleport:"body",iconSize:void 0,iconPrefix:void 0,position:"middle",transition:"van-fade",forbidClick:!1,loadingType:void 0,overlayClass:"",overlayStyle:void 0,closeOnClick:!1,closeOnClickOverlay:!1};let Lo=[],sp=!1,Kc=me({},rp);const cp=new Map;function ah(e){return Yt(e)?e:{message:e}}function up(){const{instance:e}=oh({setup(){const t=M(""),{open:n,state:o,close:a,toggle:l}=nh(),i=()=>{},r=()=>f(th,Ce(o,{onClosed:i,"onUpdate:show":l}),null);return te(t,s=>{o.message=s}),$t().render=r,{open:n,close:a,message:t}}});return e}function dp(){if(!Lo.length||sp){const e=up();Lo.push(e)}return Lo[Lo.length-1]}function Ml(e={}){if(!Dt)return{};const t=dp(),n=ah(e);return t.open(me({},Kc,cp.get(n.type||Kc.type),n)),t}const lh=e=>t=>Ml(me({type:e},ah(t))),tE=lh("loading"),nE=lh("success"),oE=e=>{Lo.length&&Lo[0].close()},fp=X(th),[hp,Fi]=Y("switch"),mp={size:q,loading:Boolean,disabled:Boolean,modelValue:He,activeColor:String,inactiveColor:String,activeValue:{type:He,default:!0},inactiveValue:{type:He,default:!1}};var vp=U({name:hp,props:mp,emits:["change","update:modelValue"],setup(e,{emit:t,slots:n}){const o=()=>e.modelValue===e.activeValue,a=()=>{if(!e.disabled&&!e.loading){const i=o()?e.inactiveValue:e.activeValue;t("update:modelValue",i),t("change",i)}},l=()=>{if(e.loading){const i=o()?e.activeColor:e.inactiveColor;return f(Gt,{class:Fi("loading"),color:i},null)}if(n.node)return n.node()};return Jn(()=>e.modelValue),()=>{var i;const{size:r,loading:s,disabled:c,activeColor:u,inactiveColor:d}=e,h=o(),m={fontSize:pe(r),backgroundColor:h?u:d};return f("div",{role:"switch",class:Fi({on:h,loading:s,disabled:c}),style:m,tabindex:c?void 0:0,"aria-checked":h,onClick:a},[f("div",{class:Fi("node")},[l()]),(i=n.background)==null?void 0:i.call(n)])}}});const ds=X(vp),[gp,qc]=Y("address-edit-detail"),Xc=Y("address-edit")[2];var bp=U({name:gp,props:{show:Boolean,rows:q,value:String,rules:Array,focused:Boolean,maxlength:q,searchResult:Array,showSearchResult:Boolean},emits:["blur","focus","input","selectSearch"],setup(e,{emit:t}){const n=M(),o=()=>e.focused&&e.searchResult&&e.showSearchResult,a=c=>{t("selectSearch",c),t("input",`${c.address||""} ${c.name||""}`.trim())},l=()=>{if(!o())return;const{searchResult:c}=e;return c.map(u=>f(qt,{clickable:!0,key:(u.name||"")+(u.address||""),icon:"location-o",title:u.name,label:u.address,class:qc("search-item"),border:!1,onClick:()=>a(u)},null))},i=c=>t("blur",c),r=c=>t("focus",c),s=c=>t("input",c);return()=>{if(e.show)return f(Ke,null,[f(Cn,{autosize:!0,clearable:!0,ref:n,class:qc(),rows:e.rows,type:"textarea",rules:e.rules,label:Xc("addressDetail"),border:!o(),maxlength:e.maxlength,modelValue:e.value,placeholder:Xc("addressDetail"),onBlur:i,onFocus:r,"onUpdate:modelValue":s},null),l()])}}});const[yp,ko,ft]=Y("address-edit"),ih={name:"",tel:"",city:"",county:"",province:"",areaCode:"",isDefault:!1,addressDetail:""},pp={areaList:Object,isSaving:Boolean,isDeleting:Boolean,validator:Function,showArea:z,showDetail:z,showDelete:Boolean,disableArea:Boolean,searchResult:Array,telMaxlength:q,showSetDefault:Boolean,saveButtonText:String,areaPlaceholder:String,deleteButtonText:String,showSearchResult:Boolean,detailRows:se(1),detailMaxlength:se(200),areaColumnsPlaceholder:Fe(),addressInfo:{type:Object,default:()=>me({},ih)},telValidator:{type:Function,default:mf}};var wp=U({name:yp,props:pp,emits:["save","focus","change","delete","clickArea","changeArea","changeDetail","selectSearch","changeDefault"],setup(e,{emit:t,slots:n}){const o=M(),a=je({}),l=M(!1),i=M(!1),r=B(()=>Yt(e.areaList)&&Object.keys(e.areaList).length),s=B(()=>{const{province:T,city:O,county:C,areaCode:I}=a;if(I){const R=[T,O,C];return T&&T===O&&R.splice(1,1),R.filter(Boolean).join("/")}return""}),c=B(()=>{var T;return((T=e.searchResult)==null?void 0:T.length)&&i.value}),u=T=>{i.value=T==="addressDetail",t("focus",T)},d=(T,O)=>{t("change",{key:T,value:O})},h=B(()=>{const{validator:T,telValidator:O}=e,C=(I,R)=>({validator:A=>{if(T){const _=T(I,A);if(_)return _}return A?!0:R}});return{name:[C("name",ft("nameEmpty"))],tel:[C("tel",ft("telInvalid")),{validator:O,message:ft("telInvalid")}],areaCode:[C("areaCode",ft("areaEmpty"))],addressDetail:[C("addressDetail",ft("addressEmpty"))]}}),m=()=>t("save",a),b=T=>{a.addressDetail=T,t("changeDetail",T)},p=T=>{a.province=T[0].text,a.city=T[1].text,a.county=T[2].text},g=({selectedValues:T,selectedOptions:O})=>{T.some(C=>C===jo)?Ml(ft("areaEmpty")):(l.value=!1,p(O),t("changeArea",O))},w=()=>t("delete",a),v=T=>{a.areaCode=T||""},x=()=>{setTimeout(()=>{i.value=!1})},S=T=>{a.addressDetail=T},y=()=>{if(e.showSetDefault){const T={"right-icon":()=>f(ds,{modelValue:a.isDefault,"onUpdate:modelValue":O=>a.isDefault=O,onChange:O=>t("changeDefault",O)},null)};return et(f(qt,{center:!0,border:!1,title:ft("defaultAddress"),class:ko("default")},T),[[at,!c.value]])}};return _e({setAreaCode:v,setAddressDetail:S}),te(()=>e.addressInfo,T=>{me(a,ih,T),Se(()=>{var O;const C=(O=o.value)==null?void 0:O.getSelectedOptions();C&&C.every(I=>I&&I.value!==jo)&&p(C)})},{deep:!0,immediate:!0}),()=>{const{disableArea:T}=e;return f(cs,{class:ko(),onSubmit:m},{default:()=>{var O;return[f("div",{class:ko("fields")},[f(Cn,{modelValue:a.name,"onUpdate:modelValue":[C=>a.name=C,C=>d("name",C)],clearable:!0,label:ft("name"),rules:h.value.name,placeholder:ft("name"),onFocus:()=>u("name")},null),f(Cn,{modelValue:a.tel,"onUpdate:modelValue":[C=>a.tel=C,C=>d("tel",C)],clearable:!0,type:"tel",label:ft("tel"),rules:h.value.tel,maxlength:e.telMaxlength,placeholder:ft("tel"),onFocus:()=>u("tel")},null),et(f(Cn,{readonly:!0,label:ft("area"),"is-link":!T,modelValue:s.value,rules:e.showArea?h.value.areaCode:void 0,placeholder:e.areaPlaceholder||ft("area"),onFocus:()=>u("areaCode"),onClick:()=>{t("clickArea"),l.value=!T}},null),[[at,e.showArea]]),f(bp,{show:e.showDetail,rows:e.detailRows,rules:h.value.addressDetail,value:a.addressDetail,focused:i.value,maxlength:e.detailMaxlength,searchResult:e.searchResult,showSearchResult:e.showSearchResult,onBlur:x,onFocus:()=>u("addressDetail"),onInput:b,onSelectSearch:C=>t("selectSearch",C)},null),(O=n.default)==null?void 0:O.call(n)]),y(),et(f("div",{class:ko("buttons")},[f(ut,{block:!0,round:!0,type:"primary",text:e.saveButtonText||ft("save"),class:ko("button"),loading:e.isSaving,nativeType:"submit"},null),e.showDelete&&f(ut,{block:!0,round:!0,class:ko("button"),loading:e.isDeleting,text:e.deleteButtonText||ft("delete"),onClick:w},null)]),[[at,!c.value]]),f(Kt,{show:l.value,"onUpdate:show":C=>l.value=C,round:!0,teleport:"body",position:"bottom",lazyRender:!1},{default:()=>[f(Qf,{modelValue:a.areaCode,"onUpdate:modelValue":C=>a.areaCode=C,ref:o,loading:!r.value,areaList:e.areaList,columnsPlaceholder:e.areaColumnsPlaceholder,onConfirm:g,onCancel:()=>{l.value=!1}},null)]})]}})}}});const xp=X(wp),[rh,Sp]=Y("radio-group"),Cp={shape:String,disabled:Boolean,iconSize:q,direction:String,modelValue:He,checkedColor:String},sh=Symbol(rh);var Tp=U({name:rh,props:Cp,emits:["change","update:modelValue"],setup(e,{emit:t,slots:n}){const{linkChildren:o}=dt(sh),a=l=>t("update:modelValue",l);return te(()=>e.modelValue,l=>t("change",l)),o({props:e,updateValue:a}),Jn(()=>e.modelValue),()=>{var l;return f("div",{class:Sp([e.direction]),role:"radiogroup"},[(l=n.default)==null?void 0:l.call(n)])}}});const fs=X(Tp),[ch,_p]=Y("checkbox-group"),Ep={max:q,shape:Z("round"),disabled:Boolean,iconSize:q,direction:String,modelValue:Fe(),checkedColor:String},uh=Symbol(ch);var kp=U({name:ch,props:Ep,emits:["change","update:modelValue"],setup(e,{emit:t,slots:n}){const{children:o,linkChildren:a}=dt(uh),l=r=>t("update:modelValue",r),i=(r={})=>{typeof r=="boolean"&&(r={checked:r});const{checked:s,skipDisabled:c}=r,d=o.filter(h=>h.props.bindGroup?h.props.disabled&&c?h.checked.value:s??!h.checked.value:!1).map(h=>h.name);l(d)};return te(()=>e.modelValue,r=>t("change",r)),_e({toggleAll:i}),Jn(()=>e.modelValue),a({props:e,updateValue:l}),()=>{var r;return f("div",{class:_p([e.direction])},[(r=n.default)==null?void 0:r.call(n)])}}});const dh=X(kp),[Ap,Zc]=Y("tag"),Pp={size:String,mark:Boolean,show:z,type:Z("default"),color:String,plain:Boolean,round:Boolean,textColor:String,closeable:Boolean};var Ip=U({name:Ap,props:Pp,emits:["close"],setup(e,{slots:t,emit:n}){const o=i=>{i.stopPropagation(),n("close",i)},a=()=>e.plain?{color:e.textColor||e.color,borderColor:e.color}:{color:e.textColor,background:e.color},l=()=>{var i;const{type:r,mark:s,plain:c,round:u,size:d,closeable:h}=e,m={mark:s,plain:c,round:u};d&&(m[d]=d);const b=h&&f(xe,{name:"cross",class:[Zc("close"),ct],onClick:o},null);return f("span",{style:a(),class:Zc([m,r])},[(i=t.default)==null?void 0:i.call(t),b])};return()=>f(Ql,{name:e.closeable?"van-fade":void 0},{default:()=>[e.show?l():null]})}});const di=X(Ip),hs={name:He,disabled:Boolean,iconSize:q,modelValue:He,checkedColor:String,labelPosition:String,labelDisabled:Boolean};var fh=U({props:me({},hs,{bem:Qe(Function),role:String,shape:String,parent:Object,checked:Boolean,bindGroup:z,indeterminate:{type:Boolean,default:null}}),emits:["click","toggle"],setup(e,{emit:t,slots:n}){const o=M(),a=h=>{if(e.parent&&e.bindGroup)return e.parent.props[h]},l=B(()=>{if(e.parent&&e.bindGroup){const h=a("disabled")||e.disabled;if(e.role==="checkbox"){const m=a("modelValue").length,b=a("max"),p=b&&m>=+b;return h||p&&!e.checked}return h}return e.disabled}),i=B(()=>a("direction")),r=B(()=>{const h=e.checkedColor||a("checkedColor");if(h&&(e.checked||e.indeterminate)&&!l.value)return{borderColor:h,backgroundColor:h}}),s=B(()=>e.shape||a("shape")||"round"),c=h=>{const{target:m}=h,b=o.value,p=b===m||b?.contains(m);!l.value&&(p||!e.labelDisabled)&&t("toggle"),t("click",h)},u=()=>{var h,m;const{bem:b,checked:p,indeterminate:g}=e,w=e.iconSize||a("iconSize");return f("div",{ref:o,class:b("icon",[s.value,{disabled:l.value,checked:p,indeterminate:g}]),style:s.value!=="dot"?{fontSize:pe(w)}:{width:pe(w),height:pe(w),borderColor:(h=r.value)==null?void 0:h.borderColor}},[n.icon?n.icon({checked:p,disabled:l.value}):s.value!=="dot"?f(xe,{name:g?"minus":"success",style:r.value},null):f("div",{class:b("icon--dot__icon"),style:{backgroundColor:(m=r.value)==null?void 0:m.backgroundColor}},null)])},d=()=>{const{checked:h}=e;if(n.default)return f("span",{class:e.bem("label",[e.labelPosition,{disabled:l.value}])},[n.default({checked:h,disabled:l.value})])};return()=>{const h=e.labelPosition==="left"?[d(),u()]:[u(),d()];return f("div",{role:e.role,class:e.bem([{disabled:l.value,"label-disabled":e.labelDisabled},i.value]),tabindex:l.value?void 0:0,"aria-checked":e.checked,onClick:c},[h])}}});const Op=me({},hs,{shape:String}),[Rp,Dp]=Y("radio");var $p=U({name:Rp,props:Op,emits:["update:modelValue"],setup(e,{emit:t,slots:n}){const{parent:o}=lt(sh),a=()=>(o?o.props.modelValue:e.modelValue)===e.name,l=()=>{o?o.updateValue(e.name):t("update:modelValue",e.name)};return()=>f(fh,Ce({bem:Dp,role:"radio",parent:o,checked:a(),onToggle:l},e),Pe(n,["default","icon"]))}});const ms=X($p),[Bp,Mp]=Y("checkbox"),Vp=me({},hs,{shape:String,bindGroup:z,indeterminate:{type:Boolean,default:null}});var Lp=U({name:Bp,props:Vp,emits:["change","update:modelValue"],setup(e,{emit:t,slots:n}){const{parent:o}=lt(uh),a=r=>{const{name:s}=e,{max:c,modelValue:u}=o.props,d=u.slice();if(r)!(c&&d.length>=+c)&&!d.includes(s)&&(d.push(s),e.bindGroup&&o.updateValue(d));else{const h=d.indexOf(s);h!==-1&&(d.splice(h,1),e.bindGroup&&o.updateValue(d))}},l=B(()=>o&&e.bindGroup?o.props.modelValue.indexOf(e.name)!==-1:!!e.modelValue),i=(r=!l.value)=>{o&&e.bindGroup?a(r):t("update:modelValue",r),e.indeterminate!==null&&t("change",r)};return te(()=>e.modelValue,r=>{e.indeterminate===null&&t("change",r)}),_e({toggle:i,props:e,checked:l}),Jn(()=>e.modelValue),()=>f(fh,Ce({bem:Mp,role:"checkbox",parent:o,checked:l.value,onToggle:i},e),Pe(n,["default","icon"]))}});const vs=X(Lp),[Np,Ao]=Y("address-item");var Fp=U({name:Np,props:{address:Qe(Object),disabled:Boolean,switchable:Boolean,singleChoice:Boolean,defaultTagText:String,rightIcon:Z("edit")},emits:["edit","click","select"],setup(e,{slots:t,emit:n}){const o=r=>{e.switchable&&n("select"),n("click",r)},a=()=>f(xe,{name:e.rightIcon,class:Ao("edit"),onClick:r=>{r.stopPropagation(),n("edit"),n("click",r)}},null),l=()=>{if(t.tag)return t.tag(e.address);if(e.address.isDefault&&e.defaultTagText)return f(di,{type:"primary",round:!0,class:Ao("tag")},{default:()=>[e.defaultTagText]})},i=()=>{const{address:r,disabled:s,switchable:c,singleChoice:u}=e,d=[f("div",{class:Ao("name")},[`${r.name} ${r.tel}`,l()]),f("div",{class:Ao("address")},[r.address])];return c&&!s?u?f(ms,{name:r.id,iconSize:18},{default:()=>[d]}):f(vs,{name:r.id,iconSize:18},{default:()=>[d]}):d};return()=>{var r;const{disabled:s}=e;return f("div",{class:Ao({disabled:s}),onClick:o},[f(qt,{border:!1,titleClass:Ao("title")},{title:i,"right-icon":a}),(r=t.bottom)==null?void 0:r.call(t,me({},e.address,{disabled:s}))])}}});const[Hp,al,zp]=Y("address-list"),jp={list:Fe(),modelValue:[...q,Array],switchable:z,disabledText:String,disabledList:Fe(),showAddButton:z,addButtonText:String,defaultTagText:String,rightIcon:Z("edit")};var Wp=U({name:Hp,props:jp,emits:["add","edit","select","clickItem","editDisabled","selectDisabled","update:modelValue"],setup(e,{slots:t,emit:n}){const o=B(()=>!Array.isArray(e.modelValue)),a=(r,s,c)=>{const u=()=>n(c?"editDisabled":"edit",r,s),d=m=>n("clickItem",r,s,{event:m}),h=()=>{if(n(c?"selectDisabled":"select",r,s),!c)if(o.value)n("update:modelValue",r.id);else{const m=e.modelValue;m.includes(r.id)?n("update:modelValue",m.filter(b=>b!==r.id)):n("update:modelValue",[...m,r.id])}};return f(Fp,{key:r.id,address:r,disabled:c,switchable:e.switchable,singleChoice:o.value,defaultTagText:e.defaultTagText,rightIcon:e.rightIcon,onEdit:u,onClick:d,onSelect:h},{bottom:t["item-bottom"],tag:t.tag})},l=(r,s)=>{if(r)return r.map((c,u)=>a(c,u,s))},i=()=>e.showAddButton?f("div",{class:[al("bottom"),"van-safe-area-bottom"]},[f(ut,{round:!0,block:!0,type:"primary",text:e.addButtonText||zp("add"),class:al("add"),onClick:()=>n("add")},null)]):void 0;return()=>{var r,s;const c=l(e.list),u=l(e.disabledList,!0),d=e.disabledText&&f("div",{class:al("disabled-text")},[e.disabledText]);return f("div",{class:al()},[(r=t.top)==null?void 0:r.call(t),!o.value&&Array.isArray(e.modelValue)?f(dh,{modelValue:e.modelValue},{default:()=>[c]}):f(fs,{modelValue:e.modelValue},{default:()=>[c]}),d,u,(s=t.default)==null?void 0:s.call(t),i()])}}});const Up=X(Wp);function Yp(e,t){let n=null,o=0;return function(...a){if(n)return;const l=Date.now()-o,i=()=>{o=Date.now(),n=!1,e.apply(this,a)};l>=t?i():n=setTimeout(i,t)}}const[Gp,Hi]=Y("back-top"),Kp={right:q,bottom:q,zIndex:q,target:[String,Object],offset:se(200),immediate:Boolean,teleport:{type:[String,Object],default:"body"}};var qp=U({name:Gp,inheritAttrs:!1,props:Kp,emits:["click"],setup(e,{emit:t,slots:n,attrs:o}){let a=!1;const l=M(!1),i=M(),r=M(),s=B(()=>me($n(e.zIndex),{right:pe(e.right),bottom:pe(e.bottom)})),c=m=>{var b;t("click",m),(b=r.value)==null||b.scrollTo({top:0,behavior:e.immediate?"auto":"smooth"})},u=()=>{l.value=r.value?An(r.value)>=+e.offset:!1},d=()=>{const{target:m}=e;if(typeof m=="string"){const b=document.querySelector(m);if(b)return b}else return m},h=()=>{Dt&&Se(()=>{r.value=e.target?d():Qr(i.value),u()})};return Ge("scroll",Yp(u,100),{target:r}),We(h),cn(()=>{a&&(l.value=!0,a=!1)}),un(()=>{l.value&&e.teleport&&(l.value=!1,a=!0)}),te(()=>e.target,h),()=>{const m=f("div",Ce({ref:e.teleport?void 0:i,class:Hi({active:l.value}),style:s.value,onClick:c},o),[n.default?n.default():f(xe,{name:"back-top",class:Hi("icon")},null)]);return e.teleport?[f("div",{ref:i,class:Hi("placeholder")},null),f(po,{to:e.teleport},{default:()=>[m]})]:m}}});const Xp=X(qp);var Zp=(e,t,n)=>new Promise((o,a)=>{var l=s=>{try{r(n.next(s))}catch(c){a(c)}},i=s=>{try{r(n.throw(s))}catch(c){a(c)}},r=s=>s.done?o(s.value):Promise.resolve(s.value).then(l,i);r((n=n.apply(e,t)).next())});const Jp={top:se(10),rows:se(4),duration:se(4e3),autoPlay:z,delay:Ze(300),modelValue:Fe()},[Qp,Jc]=Y("barrage");var ew=U({name:Qp,props:Jp,emits:["update:modelValue"],setup(e,{emit:t,slots:n}){const o=M(),a=Jc("item"),l=M(0),i=[],r=(p,g=e.delay)=>{const w=document.createElement("span");return w.className=a,w.innerText=String(p),w.style.animationDuration=`${e.duration}ms`,w.style.animationDelay=`${g}ms`,w.style.animationName="van-barrage",w.style.animationTimingFunction="linear",w},s=M(!0),c=M(e.autoPlay),u=({id:p,text:g},w)=>{var v;const x=r(g,s.value?w*e.delay:void 0);!e.autoPlay&&c.value===!1&&(x.style.animationPlayState="paused"),(v=o.value)==null||v.append(x),l.value++;const S=(l.value-1)%+e.rows*x.offsetHeight+ +e.top;x.style.top=`${S}px`,x.dataset.id=String(p),i.push(x),x.addEventListener("animationend",()=>{t("update:modelValue",[...e.modelValue].filter(y=>String(y.id)!==x.dataset.id))})},d=(p,g)=>{const w=new Map(g.map(v=>[v.id,v]));p.forEach((v,x)=>{w.has(v.id)?w.delete(v.id):u(v,x)}),w.forEach(v=>{const x=i.findIndex(S=>S.dataset.id===String(v.id));x>-1&&(i[x].remove(),i.splice(x,1))}),s.value=!1};te(()=>e.modelValue.slice(),(p,g)=>d(p??[],g??[]),{deep:!0});const h=M({});return We(()=>Zp(null,null,function*(){var p;h.value["--move-distance"]=`-${(p=o.value)==null?void 0:p.offsetWidth}px`,yield Se(),d(e.modelValue,[])})),_e({play:()=>{c.value=!0,i.forEach(p=>{p.style.animationPlayState="running"})},pause:()=>{c.value=!1,i.forEach(p=>{p.style.animationPlayState="paused"})}}),()=>{var p;return f("div",{class:Jc(),ref:o,style:h.value},[(p=n.default)==null?void 0:p.call(n)])}}});const tw=X(ew),[nw,Ye,Tn]=Y("calendar"),ow=e=>Tn("monthTitle",e.getFullYear(),e.getMonth()+1);function ho(e,t){const n=e.getFullYear(),o=t.getFullYear();if(n===o){const a=e.getMonth(),l=t.getMonth();return a===l?0:a>l?1:-1}return n>o?1:-1}function St(e,t){const n=ho(e,t);if(n===0){const o=e.getDate(),a=t.getDate();return o===a?0:o>a?1:-1}return n}const Xo=e=>new Date(e),Qc=e=>Array.isArray(e)?e.map(Xo):Xo(e);function gs(e,t){const n=Xo(e);return n.setDate(n.getDate()+t),n}function bs(e,t){const n=Xo(e);return n.setMonth(n.getMonth()+t),n.getDate()!==e.getDate()&&n.setDate(0),n}function hh(e,t){const n=Xo(e);return n.setFullYear(n.getFullYear()+t),n.getDate()!==e.getDate()&&n.setDate(0),n}const Tr=e=>gs(e,-1),_r=e=>gs(e,1),eu=e=>bs(e,-1),tu=e=>bs(e,1),nu=e=>hh(e,-1),ou=e=>hh(e,1),ll=()=>{const e=new Date;return e.setHours(0,0,0,0),e};function aw(e){const t=e[0].getTime();return(e[1].getTime()-t)/(1e3*60*60*24)+1}function lw(e,t=0){const n=new Date(e.getFullYear(),e.getMonth()+1,0),o=t+e.getDate()-1,a=t+n.getDate()-1;return Math.floor(o/7)===Math.floor(a/7)}const mh=me({},si,{modelValue:Fe(),filter:Function,formatter:{type:Function,default:(e,t)=>t}}),vh=Object.keys(si);function iw(e,t){if(e<0)return[];const n=Array(e);let o=-1;for(;++o32-new Date(e,t-1,32).getDate(),Wo=(e,t,n,o,a,l)=>{const i=iw(t-e+1,r=>{const s=Nt(e+r);return o(n,{text:s,value:s})});return a?a(n,i,l):i},bh=(e,t)=>e.map((n,o)=>{const a=t[o];if(a.length){const l=+a[0].value,i=+a[a.length-1].value;return Nt(Je(+n,l,i))}return n}),[rw]=Y("calendar-day");var sw=U({name:rw,props:{item:Qe(Object),color:String,index:Number,offset:Ze(0),rowHeight:String},emits:["click","clickDisabledDate"],setup(e,{emit:t,slots:n}){const o=B(()=>{const{item:c,index:u,color:d,offset:h,rowHeight:m}=e,b={height:m};if(c.type==="placeholder")return b.width="100%",b;if(u===0&&(b.marginLeft=`${100*h/7}%`),d)switch(c.type){case"end":case"start":case"start-end":case"multiple-middle":case"multiple-selected":b.background=d;break;case"middle":b.color=d;break}return c.date&&lw(c.date,h)&&(b.marginBottom=0),b}),a=()=>{e.item.type!=="disabled"?t("click",e.item):t("clickDisabledDate",e.item)},l=()=>{const{topInfo:c}=e.item;if(c||n["top-info"])return f("div",{class:Ye("top-info")},[n["top-info"]?n["top-info"](e.item):c])},i=()=>{const{bottomInfo:c}=e.item;if(c||n["bottom-info"])return f("div",{class:Ye("bottom-info")},[n["bottom-info"]?n["bottom-info"](e.item):c])},r=()=>n.text?n.text(e.item):e.item.text,s=()=>{const{item:c,color:u,rowHeight:d}=e,{type:h}=c,m=[l(),r(),i()];return h==="selected"?f("div",{class:Ye("selected-day"),style:{width:d,height:d,background:u}},[m]):m};return()=>{const{type:c,className:u}=e.item;return c==="placeholder"?f("div",{class:Ye("day"),style:o.value},null):f("div",{role:"gridcell",style:o.value,class:[Ye("day",c),u],tabindex:c==="disabled"?void 0:-1,onClick:a},[s()])}}});const[cw]=Y("calendar-month"),uw={date:Qe(Date),type:String,color:String,minDate:Date,maxDate:Date,showMark:Boolean,rowHeight:q,formatter:Function,lazyRender:Boolean,currentDate:[Date,Array],allowSameDay:Boolean,showSubtitle:Boolean,showMonthTitle:Boolean,firstDayOfWeek:Number};var dw=U({name:cw,props:uw,emits:["click","clickDisabledDate"],setup(e,{emit:t,slots:n}){const[o,a]=Bb(),l=M(),i=M(),r=Af(i),s=B(()=>ow(e.date)),c=B(()=>pe(e.rowHeight)),u=B(()=>{const R=e.date.getDate(),_=(e.date.getDay()-R%7+8)%7;return e.firstDayOfWeek?(_+7-e.firstDayOfWeek)%7:_}),d=B(()=>gh(e.date.getFullYear(),e.date.getMonth()+1)),h=B(()=>o.value||!e.lazyRender),m=()=>s.value,b=R=>{const A=_=>e.currentDate.some(D=>St(D,_)===0);if(A(R)){const _=Tr(R),D=_r(R),j=A(_),ae=A(D);return j&&ae?"multiple-middle":j?"end":ae?"start":"multiple-selected"}return""},p=R=>{const[A,_]=e.currentDate;if(!A)return"";const D=St(R,A);if(!_)return D===0?"start":"";const j=St(R,_);return e.allowSameDay&&D===0&&j===0?"start-end":D===0?"start":j===0?"end":D>0&&j<0?"middle":""},g=R=>{const{type:A,minDate:_,maxDate:D,currentDate:j}=e;if(_&&St(R,_)<0||D&&St(R,D)>0)return"disabled";if(j===null)return"";if(Array.isArray(j)){if(A==="multiple")return b(R);if(A==="range")return p(R)}else if(A==="single")return St(R,j)===0?"selected":"";return""},w=R=>{if(e.type==="range"){if(R==="start"||R==="end")return Tn(R);if(R==="start-end")return`${Tn("start")}/${Tn("end")}`}},v=()=>{if(e.showMonthTitle)return f("div",{class:Ye("month-title")},[n["month-title"]?n["month-title"]({date:e.date,text:s.value}):s.value])},x=()=>{if(e.showMark&&h.value)return f("div",{class:Ye("month-mark")},[e.date.getMonth()+1])},S=B(()=>{const R=Math.ceil((d.value+u.value)/7);return Array(R).fill({type:"placeholder"})}),y=B(()=>{const R=[],A=e.date.getFullYear(),_=e.date.getMonth();for(let D=1;D<=d.value;D++){const j=new Date(A,_,D),ae=g(j);let N={date:j,type:ae,text:D,bottomInfo:w(ae)};e.formatter&&(N=e.formatter(N)),R.push(N)}return R}),T=B(()=>y.value.filter(R=>R.type==="disabled")),O=(R,A)=>{if(l.value){const _=Oe(l.value),D=S.value.length,ae=(Math.ceil((A.getDate()+u.value)/7)-1)*_.height/D;Dl(R,_.top+ae+R.scrollTop-Oe(R).top)}},C=(R,A)=>f(sw,{item:R,index:A,color:e.color,offset:u.value,rowHeight:c.value,onClick:_=>t("click",_),onClickDisabledDate:_=>t("clickDisabledDate",_)},Pe(n,["top-info","bottom-info","text"])),I=()=>f("div",{ref:l,role:"grid",class:Ye("days")},[x(),(h.value?y:S).value.map(C)]);return _e({getTitle:m,getHeight:()=>r.value,setVisible:a,scrollToDate:O,disabledDays:T}),()=>f("div",{class:Ye("month"),ref:i},[v(),I()])}});const[fw]=Y("calendar-header");var hw=U({name:fw,props:{date:Date,minDate:Date,maxDate:Date,title:String,subtitle:String,showTitle:Boolean,showSubtitle:Boolean,firstDayOfWeek:Number,switchMode:Z("none")},emits:["clickSubtitle","panelChange"],setup(e,{slots:t,emit:n}){const o=B(()=>e.date&&e.minDate&&ho(eu(e.date),e.minDate)<0),a=B(()=>e.date&&e.minDate&&ho(nu(e.date),e.minDate)<0),l=B(()=>e.date&&e.maxDate&&ho(tu(e.date),e.maxDate)>0),i=B(()=>e.date&&e.maxDate&&ho(ou(e.date),e.maxDate)>0),r=()=>{if(e.showTitle){const m=e.title||Tn("title"),b=t.title?t.title():m;return f("div",{class:Ye("header-title")},[b])}},s=m=>n("clickSubtitle",m),c=m=>n("panelChange",m),u=m=>{const b=e.switchMode==="year-month",p=t[m?"next-month":"prev-month"],g=t[m?"next-year":"prev-year"],w=m?l.value:o.value,v=m?i.value:a.value,x=m?"arrow":"arrow-left",S=m?"arrow-double-right":"arrow-double-left",y=()=>c((m?tu:eu)(e.date)),T=()=>c((m?ou:nu)(e.date)),O=f("view",{class:Ye("header-action",{disabled:w}),onClick:w?void 0:y},[p?p({disabled:w}):f(xe,{class:{[ct]:!w},name:x},null)]),C=b&&f("view",{class:Ye("header-action",{disabled:v}),onClick:v?void 0:T},[g?g({disabled:v}):f(xe,{class:{[ct]:!v},name:S},null)]);return m?[O,C]:[C,O]},d=()=>{if(e.showSubtitle){const m=t.subtitle?t.subtitle({date:e.date,text:e.subtitle}):e.subtitle,b=e.switchMode!=="none";return f("div",{class:Ye("header-subtitle",{"with-switch":b}),onClick:s},[b?[u(),f("div",{class:Ye("header-subtitle-text")},[m]),u(!0)]:m])}},h=()=>{const{firstDayOfWeek:m}=e,b=Tn("weekdays"),p=[...b.slice(m,7),...b.slice(0,m)];return f("div",{class:Ye("weekdays")},[p.map(g=>f("span",{class:Ye("weekday")},[g]))])};return()=>f("div",{class:Ye("header")},[r(),d(),h()])}});const mw={show:Boolean,type:Z("single"),switchMode:Z("none"),title:String,color:String,round:z,readonly:Boolean,poppable:z,maxRange:se(null),position:Z("bottom"),teleport:[String,Object],showMark:z,showTitle:z,formatter:Function,rowHeight:q,confirmText:String,rangePrompt:String,lazyRender:z,showConfirm:z,defaultDate:[Date,Array],allowSameDay:Boolean,showSubtitle:z,closeOnPopstate:z,showRangePrompt:z,confirmDisabledText:String,closeOnClickOverlay:z,safeAreaInsetTop:Boolean,safeAreaInsetBottom:z,minDate:{type:Date,validator:Va},maxDate:{type:Date,validator:Va},firstDayOfWeek:{type:q,default:0,validator:e=>e>=0&&e<=6}};var vw=U({name:nw,props:mw,emits:["select","confirm","unselect","monthShow","overRange","update:show","clickSubtitle","clickDisabledDate","clickOverlay","panelChange"],setup(e,{emit:t,slots:n}){const o=B(()=>e.switchMode!=="none"),a=B(()=>!e.minDate&&!o.value?ll():e.minDate),l=B(()=>!e.maxDate&&!o.value?bs(ll(),6):e.maxDate),i=(H,ee=a.value,he=l.value)=>ee&&St(H,ee)===-1?ee:he&&St(H,he)===1?he:H,r=(H=e.defaultDate)=>{const{type:ee,allowSameDay:he}=e;if(H===null)return H;const K=ll();if(ee==="range"){Array.isArray(H)||(H=[]),H.length===1&&St(H[0],K)===1&&(H=[]);const ce=a.value,E=l.value,F=i(H[0]||K,ce,E?he?E:Tr(E):void 0),V=i(H[1]||(he?K:_r(K)),ce?he?ce:_r(ce):void 0);return[F,V]}return ee==="multiple"?Array.isArray(H)?H.map(ce=>i(ce)):[i(K)]:((!H||Array.isArray(H))&&(H=K),i(H))},s=()=>{const H=Array.isArray(d.value)?d.value[0]:d.value;return H||i(ll())};let c;const u=M(),d=M(r()),h=M(s()),m=M(),[b,p]=Wa(),g=B(()=>e.firstDayOfWeek?+e.firstDayOfWeek%7:0),w=B(()=>{const H=[];if(!a.value||!l.value)return H;const ee=new Date(a.value);ee.setDate(1);do H.push(new Date(ee)),ee.setMonth(ee.getMonth()+1);while(ho(ee,l.value)!==1);return H}),v=B(()=>{if(d.value){if(e.type==="range")return!d.value[0]||!d.value[1];if(e.type==="multiple")return!d.value.length}return!d.value}),x=()=>d.value,S=()=>{const H=An(u.value),ee=H+c,he=w.value.map((V,J)=>b.value[J].getHeight()),K=he.reduce((V,J)=>V+J,0);if(ee>K&&H>0)return;let ce=0,E;const F=[-1,-1];for(let V=0;V=H&&(F[1]=V,E||(E=J,F[0]=V),b.value[V].showed||(b.value[V].showed=!0,t("monthShow",{date:J.date,title:J.getTitle()}))),ce+=he[V]}w.value.forEach((V,J)=>{const fe=J>=F[0]-1&&J<=F[1]+1;b.value[J].setVisible(fe)}),E&&(m.value=E)},y=H=>{o.value?h.value=H:st(()=>{w.value.some((ee,he)=>ho(ee,H)===0?(u.value&&b.value[he].scrollToDate(u.value,H),!0):!1),S()})},T=()=>{if(!(e.poppable&&!e.show))if(d.value){const H=e.type==="single"?d.value:d.value[0];Va(H)&&y(H)}else o.value||st(S)},O=()=>{e.poppable&&!e.show||(o.value||st(()=>{c=Math.floor(Oe(u).height)}),T())},C=(H=r())=>{d.value=H,T()},I=H=>{const{maxRange:ee,rangePrompt:he,showRangePrompt:K}=e;return ee&&aw(H)>+ee?(K&&Ml(he||Tn("rangePrompt",ee)),t("overRange"),!1):!0},R=H=>{h.value=H,t("panelChange",{date:H})},A=()=>{var H;return t("confirm",(H=d.value)!=null?H:Qc(d.value))},_=(H,ee)=>{const he=K=>{d.value=K,t("select",Qc(K))};if(ee&&e.type==="range"&&!I(H)){he([H[0],gs(H[0],+e.maxRange-1)]);return}he(H),ee&&!e.showConfirm&&A()},D=(H,ee,he)=>{var K;return(K=H.find(ce=>St(ee,ce.date)===-1&&St(ce.date,he)===-1))==null?void 0:K.date},j=B(()=>b.value.reduce((H,ee)=>{var he,K;return H.push(...(K=(he=ee.disabledDays)==null?void 0:he.value)!=null?K:[]),H},[])),ae=H=>{if(e.readonly||!H.date)return;const{date:ee}=H,{type:he}=e;if(he==="range"){if(!d.value){_([ee]);return}const[K,ce]=d.value;if(K&&!ce){const E=St(ee,K);if(E===1){const F=D(j.value,K,ee);if(F){const V=Tr(F);St(K,V)===-1?_([K,V]):_([ee])}else _([K,ee],!0)}else E===-1?_([ee]):e.allowSameDay&&_([ee,ee],!0)}else _([ee])}else if(he==="multiple"){if(!d.value){_([ee]);return}const K=d.value,ce=K.findIndex(E=>St(E,ee)===0);if(ce!==-1){const[E]=K.splice(ce,1);t("unselect",Xo(E))}else e.maxRange&&K.length>=+e.maxRange?Ml(e.rangePrompt||Tn("rangePrompt",e.maxRange)):_([...K,ee])}else _(ee,!0)},N=H=>t("clickOverlay",H),ne=H=>t("update:show",H),oe=(H,ee)=>{const he=ee!==0||!e.showSubtitle;return f(dw,Ce({ref:o.value?m:p(ee),date:H,currentDate:d.value,showMonthTitle:he,firstDayOfWeek:g.value,lazyRender:o.value?!1:e.lazyRender,maxDate:l.value,minDate:a.value},Pe(e,["type","color","showMark","formatter","rowHeight","showSubtitle","allowSameDay"]),{onClick:ae,onClickDisabledDate:K=>t("clickDisabledDate",K)}),Pe(n,["top-info","bottom-info","month-title","text"]))},Te=()=>{if(n.footer)return n.footer();if(e.showConfirm){const H=n["confirm-text"],ee=v.value,he=ee?e.confirmDisabledText:e.confirmText;return f(ut,{round:!0,block:!0,type:"primary",color:e.color,class:Ye("confirm"),disabled:ee,nativeType:"button",onClick:A},{default:()=>[H?H({disabled:ee}):he||Tn("confirm")]})}},ke=()=>f("div",{class:[Ye("footer"),{"van-safe-area-bottom":e.safeAreaInsetBottom}]},[Te()]),re=()=>{var H,ee;return f("div",{class:Ye()},[f(hw,{date:(H=m.value)==null?void 0:H.date,maxDate:l.value,minDate:a.value,title:e.title,subtitle:(ee=m.value)==null?void 0:ee.getTitle(),showTitle:e.showTitle,showSubtitle:e.showSubtitle,switchMode:e.switchMode,firstDayOfWeek:g.value,onClickSubtitle:he=>t("clickSubtitle",he),onPanelChange:R},Pe(n,["title","subtitle","prev-month","prev-year","next-month","next-year"])),f("div",{ref:u,class:Ye("body"),onScroll:o.value?void 0:S},[o.value?oe(h.value,0):w.value.map(oe)]),ke()])};return te(()=>e.show,O),te(()=>[e.type,e.minDate,e.maxDate,e.switchMode],()=>C(r(d.value))),te(()=>e.defaultDate,H=>{C(H)}),_e({reset:C,scrollToDate:y,getSelectedDate:x}),Qo(O),()=>e.poppable?f(Kt,{show:e.show,class:Ye("popup"),round:e.round,position:e.position,closeable:e.showTitle||e.showSubtitle,teleport:e.teleport,closeOnPopstate:e.closeOnPopstate,safeAreaInsetTop:e.safeAreaInsetTop,closeOnClickOverlay:e.closeOnClickOverlay,onClickOverlay:N,"onUpdate:show":ne},{default:re}):re()}});const gw=X(vw),[bw,Po]=Y("image"),yw={src:String,alt:String,fit:String,position:String,round:Boolean,block:Boolean,width:q,height:q,radius:q,lazyLoad:Boolean,iconSize:q,showError:z,errorIcon:Z("photo-fail"),iconPrefix:String,showLoading:z,loadingIcon:Z("photo"),crossorigin:String,referrerpolicy:String,decoding:String};var pw=U({name:bw,props:yw,emits:["load","error"],setup(e,{emit:t,slots:n}){const o=M(!1),a=M(!0),l=M(),{$Lazyload:i}=$t().proxy,r=B(()=>{const g={width:pe(e.width),height:pe(e.height)};return Ee(e.radius)&&(g.overflow="hidden",g.borderRadius=pe(e.radius)),g});te(()=>e.src,()=>{o.value=!1,a.value=!0});const s=g=>{a.value&&(a.value=!1,t("load",g))},c=()=>{const g=new Event("load");Object.defineProperty(g,"target",{value:l.value,enumerable:!0}),s(g)},u=g=>{o.value=!0,a.value=!1,t("error",g)},d=(g,w,v)=>v?v():f(xe,{name:g,size:e.iconSize,class:w,classPrefix:e.iconPrefix},null),h=()=>{if(a.value&&e.showLoading)return f("div",{class:Po("loading")},[d(e.loadingIcon,Po("loading-icon"),n.loading)]);if(o.value&&e.showError)return f("div",{class:Po("error")},[d(e.errorIcon,Po("error-icon"),n.error)])},m=()=>{if(o.value||!e.src)return;const g={alt:e.alt,class:Po("img"),decoding:e.decoding,style:{objectFit:e.fit,objectPosition:e.position},crossorigin:e.crossorigin,referrerpolicy:e.referrerpolicy};return e.lazyLoad?et(f("img",Ce({ref:l},g),null),[[av("lazy"),e.src]]):f("img",Ce({ref:l,src:e.src,onLoad:s,onError:u},g),null)},b=({el:g})=>{const w=()=>{g===l.value&&a.value&&c()};l.value?w():Se(w)},p=({el:g})=>{g===l.value&&!o.value&&u()};return i&&Dt&&(i.$on("loaded",b),i.$on("error",p),dn(()=>{i.$off("loaded",b),i.$off("error",p)})),We(()=>{Se(()=>{var g;(g=l.value)!=null&&g.complete&&!e.lazyLoad&&c()})}),()=>{var g;return f("div",{class:Po({round:e.round,block:e.block}),style:r.value},[m(),h(),(g=n.default)==null?void 0:g.call(n)])}}});const fi=X(pw),[ww,ht]=Y("card"),xw={tag:String,num:q,desc:String,thumb:String,title:String,price:q,centered:Boolean,lazyLoad:Boolean,currency:Z("¥"),thumbLink:String,originPrice:q};var Sw=U({name:ww,props:xw,emits:["clickThumb"],setup(e,{slots:t,emit:n}){const o=()=>{if(t.title)return t.title();if(e.title)return f("div",{class:[ht("title"),"van-multi-ellipsis--l2"]},[e.title])},a=()=>{if(t.tag||e.tag)return f("div",{class:ht("tag")},[t.tag?t.tag():f(di,{mark:!0,type:"primary"},{default:()=>[e.tag]})])},l=()=>t.thumb?t.thumb():f(fi,{src:e.thumb,fit:"cover",width:"100%",height:"100%",lazyLoad:e.lazyLoad},null),i=()=>{if(t.thumb||e.thumb)return f("a",{href:e.thumbLink,class:ht("thumb"),onClick:c=>n("clickThumb",c)},[l(),a()])},r=()=>{if(t.desc)return t.desc();if(e.desc)return f("div",{class:[ht("desc"),"van-ellipsis"]},[e.desc])},s=()=>{const c=e.price.toString().split(".");return f("div",null,[f("span",{class:ht("price-currency")},[e.currency]),f("span",{class:ht("price-integer")},[c[0]]),c.length>1&&f(Ke,null,[uo("."),f("span",{class:ht("price-decimal")},[c[1]])])])};return()=>{var c,u,d;const h=t.num||Ee(e.num),m=t.price||Ee(e.price),b=t["origin-price"]||Ee(e.originPrice),p=h||m||b||t.bottom,g=m&&f("div",{class:ht("price")},[t.price?t.price():s()]),w=b&&f("div",{class:ht("origin-price")},[t["origin-price"]?t["origin-price"]():`${e.currency} ${e.originPrice}`]),v=h&&f("div",{class:ht("num")},[t.num?t.num():`x${e.num}`]),x=t.footer&&f("div",{class:ht("footer")},[t.footer()]),S=p&&f("div",{class:ht("bottom")},[(c=t["price-top"])==null?void 0:c.call(t),g,w,v,(u=t.bottom)==null?void 0:u.call(t)]);return f("div",{class:ht()},[f("div",{class:ht("header")},[i(),f("div",{class:ht("content",{centered:e.centered})},[f("div",null,[o(),r(),(d=t.tags)==null?void 0:d.call(t)]),S])]),x])}}});const Cw=X(Sw),[Tw,vn,_w]=Y("cascader"),Ew={title:String,options:Fe(),closeable:z,swipeable:z,closeIcon:Z("cross"),showHeader:z,modelValue:q,fieldNames:Object,placeholder:String,activeColor:String};var kw=U({name:Tw,props:Ew,emits:["close","change","finish","clickTab","update:modelValue"],setup(e,{slots:t,emit:n}){const o=M([]),a=M(0),[l,i]=Wa(),{text:r,value:s,children:c}=me({text:"text",value:"value",children:"children"},e.fieldNames),u=(y,T)=>{for(const O of y){if(O[s]===T)return[O];if(O[c]){const C=u(O[c],T);if(C)return[O,...C]}}},d=()=>{const{options:y,modelValue:T}=e;if(T!==void 0){const O=u(y,T);if(O){let C=y;o.value=O.map(I=>{const R={options:C,selected:I},A=C.find(_=>_[s]===I[s]);return A&&(C=A[c]),R}),C&&o.value.push({options:C,selected:null}),Se(()=>{a.value=o.value.length-1});return}}o.value=[{options:y,selected:null}]},h=(y,T)=>{if(y.disabled)return;if(o.value[T].selected=y,o.value.length>T+1&&(o.value=o.value.slice(0,T+1)),y[c]){const I={options:y[c],selected:null};o.value[T+1]?o.value[T+1]=I:o.value.push(I),Se(()=>{a.value++})}const O=o.value.map(I=>I.selected).filter(Boolean);n("update:modelValue",y[s]);const C={value:y[s],tabIndex:T,selectedOptions:O};n("change",C),y[c]||n("finish",C)},m=()=>n("close"),b=({name:y,title:T})=>n("clickTab",y,T),p=()=>e.showHeader?f("div",{class:vn("header")},[f("h2",{class:vn("title")},[t.title?t.title():e.title]),e.closeable?f(xe,{name:e.closeIcon,class:[vn("close-icon"),ct],onClick:m},null):null]):null,g=(y,T,O)=>{const{disabled:C}=y,I=!!(T&&y[s]===T[s]),R=y.color||(I?e.activeColor:void 0),A=t.option?t.option({option:y,selected:I}):f("span",null,[y[r]]);return f("li",{ref:I?i(O):void 0,role:"menuitemradio",class:[vn("option",{selected:I,disabled:C}),y.className],style:{color:R},tabindex:C?void 0:I?0:-1,"aria-checked":I,"aria-disabled":C||void 0,onClick:()=>h(y,O)},[A,I?f(xe,{name:"success",class:vn("selected-icon")},null):null])},w=(y,T,O)=>f("ul",{role:"menu",class:vn("options")},[y.map(C=>g(C,T,O))]),v=(y,T)=>{const{options:O,selected:C}=y,I=e.placeholder||_w("select"),R=C?C[r]:I;return f(Na,{title:R,titleClass:vn("tab",{unselected:!C})},{default:()=>{var A,_;return[(A=t["options-top"])==null?void 0:A.call(t,{tabIndex:T}),w(O,C,T),(_=t["options-bottom"])==null?void 0:_.call(t,{tabIndex:T})]}})},x=()=>f(ri,{active:a.value,"onUpdate:active":y=>a.value=y,shrink:!0,animated:!0,class:vn("tabs"),color:e.activeColor,swipeable:e.swipeable,onClickTab:b},{default:()=>[o.value.map(v)]}),S=y=>{const T=y.parentElement;T&&(T.scrollTop=y.offsetTop-(T.offsetHeight-y.offsetHeight)/2)};return d(),te(a,y=>{const T=l.value[y];T&&S(T)}),te(()=>e.options,d,{deep:!0}),te(()=>e.modelValue,y=>{y!==void 0&&o.value.map(O=>{var C;return(C=O.selected)==null?void 0:C[s]}).includes(y)||d()}),()=>f("div",{class:vn()},[p(),x()])}});const Aw=X(kw),[Pw,au]=Y("cell-group"),Iw={title:String,inset:Boolean,border:z};var Ow=U({name:Pw,inheritAttrs:!1,props:Iw,setup(e,{slots:t,attrs:n}){const o=()=>{var l;return f("div",Ce({class:[au({inset:e.inset}),{[oi]:e.border&&!e.inset}]},n,Bl()),[(l=t.default)==null?void 0:l.call(t)])},a=()=>f("div",{class:au("title",{inset:e.inset})},[t.title?t.title():e.title]);return()=>e.title||t.title?f(Ke,null,[a(),o()]):o()}});const Rw=X(Ow),[Dw,il]=Y("circle");let $w=0;const lu=e=>Math.min(Math.max(+e,0),100);function Bw(e,t){const n=e?1:0;return`M ${t/2} ${t/2} m 0, -500 a 500, 500 0 1, ${n} 0, 1000 a 500, 500 0 1, ${n} 0, -1000`}const Mw={text:String,size:q,fill:Z("none"),rate:se(100),speed:se(0),color:[String,Object],clockwise:z,layerColor:String,currentRate:Ze(0),strokeWidth:se(40),strokeLinecap:String,startPosition:Z("top")};var Vw=U({name:Dw,props:Mw,emits:["update:currentRate"],setup(e,{emit:t,slots:n}){const o=`van-circle-${$w++}`,a=B(()=>+e.strokeWidth+1e3),l=B(()=>Bw(e.clockwise,a.value)),i=B(()=>{const h={top:0,right:90,bottom:180,left:270}[e.startPosition];if(h)return{transform:`rotate(${h}deg)`}});te(()=>e.rate,d=>{let h;const m=Date.now(),b=e.currentRate,p=lu(d),g=Math.abs((b-p)*1e3/+e.speed),w=()=>{const v=Date.now(),S=Math.min((v-m)/g,1)*(p-b)+b;t("update:currentRate",lu(parseFloat(S.toFixed(1)))),(p>b?Sp)&&(h=st(w))};e.speed?(h&&ti(h),h=st(w)):t("update:currentRate",p)},{immediate:!0});const r=()=>{const{strokeWidth:h,currentRate:m,strokeLinecap:b}=e,p=3140*m/100,g=Yt(e.color)?`url(#${o})`:e.color,w={stroke:g,strokeWidth:`${+h+1}px`,strokeLinecap:b,strokeDasharray:`${p}px 3140px`};return f("path",{d:l.value,style:w,class:il("hover"),stroke:g},null)},s=()=>{const d={fill:e.fill,stroke:e.layerColor,strokeWidth:`${e.strokeWidth}px`};return f("path",{class:il("layer"),style:d,d:l.value},null)},c=()=>{const{color:d}=e;if(!Yt(d))return;const h=Object.keys(d).sort((m,b)=>parseFloat(m)-parseFloat(b)).map((m,b)=>f("stop",{key:b,offset:m,"stop-color":d[m]},null));return f("defs",null,[f("linearGradient",{id:o,x1:"100%",y1:"0%",x2:"0%",y2:"0%"},[h])])},u=()=>{if(n.default)return n.default();if(e.text)return f("div",{class:il("text")},[e.text])};return()=>f("div",{class:il(),style:Dn(e.size)},[f("svg",{viewBox:`0 0 ${a.value} ${a.value}`,style:i.value},[c(),s(),r()]),u()])}});const Lw=X(Vw),[yh,Nw]=Y("row"),ph=Symbol(yh),Fw={tag:Z("div"),wrap:z,align:String,gutter:{type:[String,Number,Array],default:0},justify:String};var Hw=U({name:yh,props:Fw,setup(e,{slots:t}){const{children:n,linkChildren:o}=dt(ph),a=B(()=>{const r=[[]];let s=0;return n.forEach((c,u)=>{s+=Number(c.span),s>24?(r.push([u]),s-=24):r[r.length-1].push(u)}),r}),l=B(()=>{let r=0;Array.isArray(e.gutter)?r=Number(e.gutter[0])||0:r=Number(e.gutter);const s=[];return r&&a.value.forEach(c=>{const u=r*(c.length-1)/c.length;c.forEach((d,h)=>{if(h===0)s.push({right:u});else{const m=r-s[d-1].right,b=u-m;s.push({left:m,right:b})}})}),s}),i=B(()=>{const{gutter:r}=e,s=[];if(Array.isArray(r)&&r.length>1){const c=Number(r[1])||0;if(c<=0)return s;a.value.forEach((u,d)=>{d!==a.value.length-1&&u.forEach(()=>{s.push({bottom:c})})})}return s});return o({spaces:l,verticalSpaces:i}),()=>{const{tag:r,wrap:s,align:c,justify:u}=e;return f(r,{class:Nw({[`align-${c}`]:c,[`justify-${u}`]:u,nowrap:!s})},{default:()=>{var d;return[(d=t.default)==null?void 0:d.call(t)]}})}}});const[zw,jw]=Y("col"),Ww={tag:Z("div"),span:se(0),offset:q};var Uw=U({name:zw,props:Ww,setup(e,{slots:t}){const{parent:n,index:o}=lt(ph),a=B(()=>{if(!n)return;const{spaces:l,verticalSpaces:i}=n;let r={};if(l&&l.value&&l.value[o.value]){const{left:c,right:u}=l.value[o.value];r={paddingLeft:c?`${c}px`:null,paddingRight:u?`${u}px`:null}}const{bottom:s}=i.value[o.value]||{};return me(r,{marginBottom:s?`${s}px`:null})});return()=>{const{tag:l,span:i,offset:r}=e;return f(l,{style:a.value,class:jw({[i]:i,[`offset-${r}`]:r})},{default:()=>{var s;return[(s=t.default)==null?void 0:s.call(t)]}})}}});const Yw=X(Uw),[wh,Gw]=Y("collapse"),xh=Symbol(wh),Kw={border:z,accordion:Boolean,modelValue:{type:[String,Number,Array],default:""}};var qw=U({name:wh,props:Kw,emits:["change","update:modelValue"],setup(e,{emit:t,slots:n}){const{linkChildren:o,children:a}=dt(xh),l=c=>{t("change",c),t("update:modelValue",c)},i=(c,u)=>{const{accordion:d,modelValue:h}=e;l(d?c===h?"":c:u?h.concat(c):h.filter(m=>m!==c))},r=(c={})=>{if(e.accordion)return;typeof c=="boolean"&&(c={expanded:c});const{expanded:u,skipDisabled:d}=c,m=a.filter(b=>b.disabled&&d?b.expanded.value:u??!b.expanded.value).map(b=>b.itemName.value);l(m)},s=c=>{const{accordion:u,modelValue:d}=e;return u?d===c:d.includes(c)};return _e({toggleAll:r}),o({toggle:i,isExpanded:s}),()=>{var c;return f("div",{class:[Gw(),{[oi]:e.border}]},[(c=n.default)==null?void 0:c.call(n)])}}});const Xw=X(qw),[Zw,rl]=Y("collapse-item"),Jw=["icon","title","value","label","right-icon"],Qw=me({},ui,{name:q,isLink:z,disabled:Boolean,readonly:Boolean,lazyRender:z});var ex=U({name:Zw,props:Qw,setup(e,{slots:t}){const n=M(),o=M(),{parent:a,index:l}=lt(xh);if(!a)return;const i=B(()=>{var p;return(p=e.name)!=null?p:l.value}),r=B(()=>a.isExpanded(i.value)),s=M(r.value),c=ls(()=>s.value||!e.lazyRender),u=()=>{r.value?n.value&&(n.value.style.height=""):s.value=!1};te(r,(p,g)=>{if(g===null)return;p&&(s.value=!0),(p?Se:st)(()=>{if(!o.value||!n.value)return;const{offsetHeight:v}=o.value;if(v){const x=`${v}px`;n.value.style.height=p?"0":x,Gn(()=>{n.value&&(n.value.style.height=p?x:"0")})}else u()})});const d=(p=!r.value)=>{a.toggle(i.value,p)},h=()=>{!e.disabled&&!e.readonly&&d()},m=()=>{const{border:p,disabled:g,readonly:w}=e,v=Pe(e,Object.keys(ui));return w&&(v.isLink=!1),(g||w)&&(v.clickable=!1),f(qt,Ce({role:"button",class:rl("title",{disabled:g,expanded:r.value,borderless:!p}),"aria-expanded":String(r.value),onClick:h},v),Pe(t,Jw))},b=c(()=>{var p;return et(f("div",{ref:n,class:rl("wrapper"),onTransitionend:u},[f("div",{ref:o,class:rl("content")},[(p=t.default)==null?void 0:p.call(t)])]),[[at,s.value]])});return _e({toggle:d,expanded:r,itemName:i}),()=>f("div",{class:[rl({border:l.value&&e.border})]},[m(),b()])}});const tx=X(ex),Sh=X(py),[nx,iu,zi]=Y("contact-card"),ox={tel:String,name:String,type:Z("add"),addText:String,editable:z};var ax=U({name:nx,props:ox,emits:["click"],setup(e,{emit:t}){const n=a=>{e.editable&&t("click",a)},o=()=>e.type==="add"?e.addText||zi("addContact"):[f("div",null,[`${zi("name")}:${e.name}`]),f("div",null,[`${zi("tel")}:${e.tel}`])];return()=>f(qt,{center:!0,icon:e.type==="edit"?"contact":"add-square",class:iu([e.type]),border:!1,isLink:e.editable,titleClass:iu("title"),onClick:n},{title:o})}});const lx=X(ax),[ix,Io,Nn]=Y("contact-edit"),Er={tel:"",name:""},rx={isEdit:Boolean,isSaving:Boolean,isDeleting:Boolean,showSetDefault:Boolean,setDefaultLabel:String,contactInfo:{type:Object,default:()=>me({},Er)},telValidator:{type:Function,default:mf}};var sx=U({name:ix,props:rx,emits:["save","delete","changeDefault"],setup(e,{emit:t}){const n=je(me({},Er,e.contactInfo)),o=()=>{e.isSaving||t("save",n)},a=()=>t("delete",n),l=()=>f("div",{class:Io("buttons")},[f(ut,{block:!0,round:!0,type:"primary",text:Nn("save"),class:Io("button"),loading:e.isSaving,nativeType:"submit"},null),e.isEdit&&f(ut,{block:!0,round:!0,text:Nn("delete"),class:Io("button"),loading:e.isDeleting,onClick:a},null)]),i=()=>f(ds,{modelValue:n.isDefault,"onUpdate:modelValue":s=>n.isDefault=s,onChange:s=>t("changeDefault",s)},null),r=()=>{if(e.showSetDefault)return f(qt,{title:e.setDefaultLabel,class:Io("switch-cell"),border:!1},{"right-icon":i})};return te(()=>e.contactInfo,s=>me(n,Er,s)),()=>f(cs,{class:Io(),onSubmit:o},{default:()=>[f("div",{class:Io("fields")},[f(Cn,{modelValue:n.name,"onUpdate:modelValue":s=>n.name=s,clearable:!0,label:Nn("name"),rules:[{required:!0,message:Nn("nameEmpty")}],maxlength:"30",placeholder:Nn("name")},null),f(Cn,{modelValue:n.tel,"onUpdate:modelValue":s=>n.tel=s,clearable:!0,type:"tel",label:Nn("tel"),rules:[{validator:e.telValidator,message:Nn("telInvalid")}],placeholder:Nn("tel")},null)]),r(),l()]})}});const cx=X(sx),[ux,gn,dx]=Y("contact-list"),fx={list:Array,addText:String,modelValue:He,defaultTagText:String};var hx=U({name:ux,props:fx,emits:["add","edit","select","update:modelValue"],setup(e,{emit:t}){const n=(o,a)=>{const l=()=>{t("update:modelValue",o.id),t("select",o,a)},i=()=>f(ms,{class:gn("radio"),name:o.id,iconSize:18},null),r=()=>f(xe,{name:"edit",class:gn("edit"),onClick:c=>{c.stopPropagation(),t("edit",o,a)}},null),s=()=>{const c=[`${o.name},${o.tel}`];return o.isDefault&&e.defaultTagText&&c.push(f(di,{type:"primary",round:!0,class:gn("item-tag")},{default:()=>[e.defaultTagText]})),c};return f(qt,{key:o.id,isLink:!0,center:!0,class:gn("item"),titleClass:gn("item-title"),onClick:l},{icon:r,title:s,"right-icon":i})};return()=>f("div",{class:gn()},[f(fs,{modelValue:e.modelValue,class:gn("group")},{default:()=>[e.list&&e.list.map(n)]}),f("div",{class:[gn("bottom"),"van-safe-area-bottom"]},[f(ut,{round:!0,block:!0,type:"primary",class:gn("add"),text:e.addText||dx("addContact"),onClick:()=>t("add")},null)])])}});const mx=X(hx);function vx(e,t){const{days:n}=t;let{hours:o,minutes:a,seconds:l,milliseconds:i}=t;if(e.includes("DD")?e=e.replace("DD",Nt(n)):o+=n*24,e.includes("HH")?e=e.replace("HH",Nt(o)):a+=o*60,e.includes("mm")?e=e.replace("mm",Nt(a)):l+=a*60,e.includes("ss")?e=e.replace("ss",Nt(l)):i+=l*1e3,e.includes("S")){const r=Nt(i,3);e.includes("SSS")?e=e.replace("SSS",r):e.includes("SS")?e=e.replace("SS",r.slice(0,2)):e=e.replace("S",r.charAt(0))}return e}const[gx,bx]=Y("count-down"),yx={time:se(0),format:Z("HH:mm:ss"),autoStart:z,millisecond:Boolean};var px=U({name:gx,props:yx,emits:["change","finish"],setup(e,{emit:t,slots:n}){const{start:o,pause:a,reset:l,current:i}=Fb({time:+e.time,millisecond:e.millisecond,onChange:c=>t("change",c),onFinish:()=>t("finish")}),r=B(()=>vx(e.format,i.value)),s=()=>{l(+e.time),e.autoStart&&o()};return te(()=>e.time,s,{immediate:!0}),_e({start:o,pause:a,reset:s}),()=>f("div",{role:"timer",class:bx()},[n.default?n.default(i.value):r.value])}});const wx=X(px);function ru(e){const t=new Date(e*1e3);return`${t.getFullYear()}.${Nt(t.getMonth()+1)}.${Nt(t.getDate())}`}const xx=e=>(e/10).toFixed(e%10===0?0:1),su=e=>(e/100).toFixed(e%100===0?0:e%10===0?1:2),[Sx,tn,ji]=Y("coupon");var Cx=U({name:Sx,props:{chosen:Boolean,coupon:Qe(Object),disabled:Boolean,currency:Z("¥")},setup(e){const t=B(()=>{const{startAt:a,endAt:l}=e.coupon;return`${ru(a)} - ${ru(l)}`}),n=B(()=>{const{coupon:a,currency:l}=e;if(a.valueDesc)return[a.valueDesc,f("span",null,[a.unitDesc||""])];if(a.denominations){const i=su(a.denominations);return[f("span",null,[l]),` ${i}`]}return a.discount?ji("discount",xx(a.discount)):""}),o=B(()=>{const a=su(e.coupon.originCondition||0);return a==="0"?ji("unlimited"):ji("condition",a)});return()=>{const{chosen:a,coupon:l,disabled:i}=e,r=i&&l.reason||l.description;return f("div",{class:tn({disabled:i})},[f("div",{class:tn("content")},[f("div",{class:tn("head")},[f("h2",{class:tn("amount")},[n.value]),f("p",{class:tn("condition")},[l.condition||o.value])]),f("div",{class:tn("body")},[f("p",{class:tn("name")},[l.name]),f("p",{class:tn("valid")},[t.value]),!i&&f(vs,{class:tn("corner"),modelValue:a},null)])]),r&&f("p",{class:tn("description")},[r])])}}});const kr=X(Cx),[Tx,cu,Ar]=Y("coupon-cell"),_x={title:String,border:z,editable:z,coupons:Fe(),currency:Z("¥"),chosenCoupon:{type:[Number,Array],default:-1}},Ex=e=>{const{value:t,denominations:n}=e;return Ee(t)?t:Ee(n)?n:0};function kx({coupons:e,chosenCoupon:t,currency:n}){let o=0,a=!1;return(Array.isArray(t)?t:[t]).forEach(l=>{const i=e[+l];i&&(a=!0,o+=Ex(i))}),a?`-${n} ${(o/100).toFixed(2)}`:e.length===0?Ar("noCoupon"):Ar("count",e.length)}var Ax=U({name:Tx,props:_x,setup(e){return()=>{const t=Array.isArray(e.chosenCoupon)?e.chosenCoupon.length:e.coupons[+e.chosenCoupon];return f(qt,{class:cu(),value:kx(e),title:e.title||Ar("title"),border:e.border,isLink:e.editable,valueClass:cu("value",{selected:t})},null)}}});const Px=X(Ax),[Ix,sl]=Y("empty"),Ox={image:Z("default"),imageSize:[Number,String,Array],description:String};var Rx=U({name:Ix,props:Ox,setup(e,{slots:t}){const n=()=>{const w=t.description?t.description():e.description;if(w)return f("p",{class:sl("description")},[w])},o=()=>{if(t.default)return f("div",{class:sl("bottom")},[t.default()])},a=na(),l=w=>`${a}-${w}`,i=w=>`url(#${l(w)})`,r=(w,v,x)=>f("stop",{"stop-color":w,offset:`${v}%`,"stop-opacity":x},null),s=(w,v)=>[r(w,0),r(v,100)],c=w=>[f("defs",null,[f("radialGradient",{id:l(w),cx:"50%",cy:"54%",fx:"50%",fy:"54%",r:"297%",gradientTransform:"matrix(-.16 0 0 -.33 .58 .72)","data-allow-mismatch":"attribute"},[r("#EBEDF0",0),r("#F2F3F5",100,.3)])]),f("ellipse",{fill:i(w),opacity:".8",cx:"80",cy:"140",rx:"46",ry:"8","data-allow-mismatch":"attribute"},null)],u=()=>[f("defs",null,[f("linearGradient",{id:l("a"),x1:"64%",y1:"100%",x2:"64%","data-allow-mismatch":"attribute"},[r("#FFF",0,.5),r("#F2F3F5",100)])]),f("g",{opacity:".8","data-allow-mismatch":"children"},[f("path",{d:"M36 131V53H16v20H2v58h34z",fill:i("a")},null),f("path",{d:"M123 15h22v14h9v77h-31V15z",fill:i("a")},null)])],d=()=>[f("defs",null,[f("linearGradient",{id:l("b"),x1:"64%",y1:"97%",x2:"64%",y2:"0%","data-allow-mismatch":"attribute"},[r("#F2F3F5",0,.3),r("#F2F3F5",100)])]),f("g",{opacity:".8","data-allow-mismatch":"children"},[f("path",{d:"M87 6c3 0 7 3 8 6a8 8 0 1 1-1 16H80a7 7 0 0 1-8-6c0-4 3-7 6-7 0-5 4-9 9-9Z",fill:i("b")},null),f("path",{d:"M19 23c2 0 3 1 4 3 2 0 4 2 4 4a4 4 0 0 1-4 3v1h-7v-1l-1 1c-2 0-3-2-3-4 0-1 1-3 3-3 0-2 2-4 4-4Z",fill:i("b")},null)])],h=()=>f("svg",{viewBox:"0 0 160 160"},[f("defs",{"data-allow-mismatch":"children"},[f("linearGradient",{id:l(1),x1:"64%",y1:"100%",x2:"64%"},[r("#FFF",0,.5),r("#F2F3F5",100)]),f("linearGradient",{id:l(2),x1:"50%",x2:"50%",y2:"84%"},[r("#EBEDF0",0),r("#DCDEE0",100,0)]),f("linearGradient",{id:l(3),x1:"100%",x2:"100%",y2:"100%"},[s("#EAEDF0","#DCDEE0")]),f("radialGradient",{id:l(4),cx:"50%",cy:"0%",fx:"50%",fy:"0%",r:"100%",gradientTransform:"matrix(0 1 -.54 0 .5 -.5)"},[r("#EBEDF0",0),r("#FFF",100,0)])]),f("g",{fill:"none"},[u(),f("path",{fill:i(4),d:"M0 139h160v21H0z","data-allow-mismatch":"attribute"},null),f("path",{d:"M80 54a7 7 0 0 1 3 13v27l-2 2h-2a2 2 0 0 1-2-2V67a7 7 0 0 1 3-13z",fill:i(2),"data-allow-mismatch":"attribute"},null),f("g",{opacity:".6","stroke-linecap":"round","stroke-width":"7","data-allow-mismatch":"children"},[f("path",{d:"M64 47a19 19 0 0 0-5 13c0 5 2 10 5 13",stroke:i(3)},null),f("path",{d:"M53 36a34 34 0 0 0 0 48",stroke:i(3)},null),f("path",{d:"M95 73a19 19 0 0 0 6-13c0-5-2-9-6-13",stroke:i(3)},null),f("path",{d:"M106 84a34 34 0 0 0 0-48",stroke:i(3)},null)]),f("g",{transform:"translate(31 105)"},[f("rect",{fill:"#EBEDF0",width:"98",height:"34",rx:"2"},null),f("rect",{fill:"#FFF",x:"9",y:"8",width:"80",height:"18",rx:"1.1"},null),f("rect",{fill:"#EBEDF0",x:"15",y:"12",width:"18",height:"6",rx:"1.1"},null)])])]),m=()=>f("svg",{viewBox:"0 0 160 160"},[f("defs",{"data-allow-mismatch":"children"},[f("linearGradient",{x1:"50%",x2:"50%",y2:"100%",id:l(5)},[s("#F2F3F5","#DCDEE0")]),f("linearGradient",{x1:"95%",y1:"48%",x2:"5.5%",y2:"51%",id:l(6)},[s("#EAEDF1","#DCDEE0")]),f("linearGradient",{y1:"45%",x2:"100%",y2:"54%",id:l(7)},[s("#EAEDF1","#DCDEE0")])]),u(),d(),f("g",{transform:"translate(36 50)",fill:"none"},[f("g",{transform:"translate(8)"},[f("rect",{fill:"#EBEDF0",opacity:".6",x:"38",y:"13",width:"36",height:"53",rx:"2"},null),f("rect",{fill:i(5),width:"64",height:"66",rx:"2","data-allow-mismatch":"attribute"},null),f("rect",{fill:"#FFF",x:"6",y:"6",width:"52",height:"55",rx:"1"},null),f("g",{transform:"translate(15 17)",fill:i(6),"data-allow-mismatch":"attribute"},[f("rect",{width:"34",height:"6",rx:"1"},null),f("path",{d:"M0 14h34v6H0z"},null),f("rect",{y:"28",width:"34",height:"6",rx:"1"},null)])]),f("rect",{fill:i(7),y:"61",width:"88",height:"28",rx:"1","data-allow-mismatch":"attribute"},null),f("rect",{fill:"#F7F8FA",x:"29",y:"72",width:"30",height:"6",rx:"1"},null)])]),b=()=>f("svg",{viewBox:"0 0 160 160"},[f("defs",null,[f("linearGradient",{x1:"50%",x2:"50%",y2:"100%",id:l(8),"data-allow-mismatch":"attribute"},[s("#EAEDF1","#DCDEE0")])]),u(),d(),c("c"),f("path",{d:"m59 60 21 21 21-21h3l9 9v3L92 93l21 21v3l-9 9h-3l-21-21-21 21h-3l-9-9v-3l21-21-21-21v-3l9-9h3Z",fill:i(8),"data-allow-mismatch":"attribute"},null)]),p=()=>f("svg",{viewBox:"0 0 160 160"},[f("defs",{"data-allow-mismatch":"children"},[f("linearGradient",{x1:"50%",y1:"100%",x2:"50%",id:l(9)},[s("#EEE","#D8D8D8")]),f("linearGradient",{x1:"100%",y1:"50%",y2:"50%",id:l(10)},[s("#F2F3F5","#DCDEE0")]),f("linearGradient",{x1:"50%",x2:"50%",y2:"100%",id:l(11)},[s("#F2F3F5","#DCDEE0")]),f("linearGradient",{x1:"50%",x2:"50%",y2:"100%",id:l(12)},[s("#FFF","#F7F8FA")])]),u(),d(),c("d"),f("g",{transform:"rotate(-45 113 -4)",fill:"none","data-allow-mismatch":"children"},[f("rect",{fill:i(9),x:"24",y:"52.8",width:"5.8",height:"19",rx:"1"},null),f("rect",{fill:i(10),x:"22.1",y:"67.3",width:"9.9",height:"28",rx:"1"},null),f("circle",{stroke:i(11),"stroke-width":"8",cx:"27",cy:"27",r:"27"},null),f("circle",{fill:i(12),cx:"27",cy:"27",r:"16"},null),f("path",{d:"M37 7c-8 0-15 5-16 12",stroke:i(11),"stroke-width":"3",opacity:".5","stroke-linecap":"round",transform:"rotate(45 29 13)"},null)])]),g=()=>{var w;if(t.image)return t.image();const v={error:b,search:p,network:h,default:m};return((w=v[e.image])==null?void 0:w.call(v))||f("img",{src:e.image},null)};return()=>f("div",{class:sl()},[f("div",{class:sl("image"),style:Dn(e.imageSize)},[g()]),n(),o()])}});const Ch=X(Rx),[Dx,nn,Oo]=Y("coupon-list"),$x={code:Z(""),coupons:Fe(),currency:Z("¥"),showCount:z,emptyImage:String,enabledTitle:String,disabledTitle:String,disabledCoupons:Fe(),showExchangeBar:z,showCloseButton:z,closeButtonText:String,inputPlaceholder:String,exchangeMinLength:Ze(1),exchangeButtonText:String,displayedCouponIndex:Ze(-1),exchangeButtonLoading:Boolean,exchangeButtonDisabled:Boolean,chosenCoupon:{type:[Number,Array],default:-1}};var Bx=U({name:Dx,props:$x,emits:["change","exchange","update:code"],setup(e,{emit:t,slots:n}){const[o,a]=Wa(),l=M(),i=M(),r=M(0),s=M(0),c=M(e.code),u=B(()=>!e.exchangeButtonLoading&&(e.exchangeButtonDisabled||!c.value||c.value.length{const x=Oe(l).height,S=Oe(i).height+44;s.value=(x>S?x:Ot.value)-S},h=()=>{t("exchange",c.value),e.code||(c.value="")},m=v=>{Se(()=>{var x;return(x=o.value[v])==null?void 0:x.scrollIntoView()})},b=()=>f(Ch,{image:e.emptyImage},{default:()=>[f("p",{class:nn("empty-tip")},[Oo("noCoupon")])]}),p=()=>{if(e.showExchangeBar)return f("div",{ref:i,class:nn("exchange-bar")},[f(Cn,{modelValue:c.value,"onUpdate:modelValue":v=>c.value=v,clearable:!0,border:!1,class:nn("field"),placeholder:e.inputPlaceholder||Oo("placeholder"),maxlength:"20"},null),f(ut,{plain:!0,type:"primary",class:nn("exchange"),text:e.exchangeButtonText||Oo("exchange"),loading:e.exchangeButtonLoading,disabled:u.value,onClick:h},null)])},g=()=>{const{coupons:v,chosenCoupon:x}=e,S=e.showCount?` (${v.length})`:"",y=(e.enabledTitle||Oo("enable"))+S,T=(O=[],C=0)=>O.includes(C)?O.filter(I=>I!==C):[...O,C];return f(Na,{title:y},{default:()=>{var O;return[f("div",{class:nn("list",{"with-bottom":e.showCloseButton}),style:{height:`${s.value}px`}},[v.map((C,I)=>f(kr,{key:C.id,ref:a(I),coupon:C,chosen:Array.isArray(x)?x.includes(I):I===x,currency:e.currency,onClick:()=>t("change",Array.isArray(x)?T(x,I):I)},null)),!v.length&&b(),(O=n["list-footer"])==null?void 0:O.call(n)])]}})},w=()=>{const{disabledCoupons:v}=e,x=e.showCount?` (${v.length})`:"",S=(e.disabledTitle||Oo("disabled"))+x;return f(Na,{title:S},{default:()=>{var y;return[f("div",{class:nn("list",{"with-bottom":e.showCloseButton}),style:{height:`${s.value}px`}},[v.map(T=>f(kr,{disabled:!0,key:T.id,coupon:T,currency:e.currency},null)),!v.length&&b(),(y=n["disabled-list-footer"])==null?void 0:y.call(n)])]}})};return te(()=>e.code,v=>{c.value=v}),te(Ot,d),te(c,v=>t("update:code",v)),te(()=>e.displayedCouponIndex,m),We(()=>{d(),m(e.displayedCouponIndex)}),()=>f("div",{ref:l,class:nn()},[p(),f(ri,{active:r.value,"onUpdate:active":v=>r.value=v,class:nn("tab")},{default:()=>[g(),w()]}),f("div",{class:nn("bottom")},[n["list-button"]?n["list-button"]():et(f(ut,{round:!0,block:!0,type:"primary",class:nn("close"),text:e.closeButtonText||Oo("close"),onClick:()=>t("change",Array.isArray(e.chosenCoupon)?[]:-1)},null),[[at,e.showCloseButton]])])])}});const Mx=X(Bx),uu=new Date().getFullYear(),[Vx]=Y("date-picker"),Lx=me({},mh,{columnsType:{type:Array,default:()=>["year","month","day"]},minDate:{type:Date,default:()=>new Date(uu-10,0,1),validator:Va},maxDate:{type:Date,default:()=>new Date(uu+10,11,31),validator:Va}});var Nx=U({name:Vx,props:Lx,emits:["confirm","cancel","change","update:modelValue"],setup(e,{emit:t,slots:n}){const o=M(e.modelValue),a=M(!1),l=M(),i=B(()=>a.value?e.modelValue:o.value),r=y=>y===e.minDate.getFullYear(),s=y=>y===e.maxDate.getFullYear(),c=y=>y===e.minDate.getMonth()+1,u=y=>y===e.maxDate.getMonth()+1,d=y=>{const{minDate:T,columnsType:O}=e,C=O.indexOf(y),I=i.value[C];if(I)return+I;switch(y){case"year":return T.getFullYear();case"month":return T.getMonth()+1;case"day":return T.getDate()}},h=()=>{const y=e.minDate.getFullYear(),T=e.maxDate.getFullYear();return Wo(y,T,"year",e.formatter,e.filter,i.value)},m=()=>{const y=d("year"),T=r(y)?e.minDate.getMonth()+1:1,O=s(y)?e.maxDate.getMonth()+1:12;return Wo(T,O,"month",e.formatter,e.filter,i.value)},b=()=>{const y=d("year"),T=d("month"),O=r(y)&&c(T)?e.minDate.getDate():1,C=s(y)&&u(T)?e.maxDate.getDate():gh(y,T);return Wo(O,C,"day",e.formatter,e.filter,i.value)},p=()=>{var y;return(y=l.value)==null?void 0:y.confirm()},g=()=>o.value,w=B(()=>e.columnsType.map(y=>{switch(y){case"year":return h();case"month":return m();case"day":return b();default:return[]}}));te(o,y=>{sn(y,e.modelValue)||t("update:modelValue",y)}),te(()=>e.modelValue,(y,T)=>{a.value=sn(T,o.value),y=bh(y,w.value),sn(y,o.value)||(o.value=y),a.value=!1},{immediate:!0});const v=(...y)=>t("change",...y),x=(...y)=>t("cancel",...y),S=(...y)=>t("confirm",...y);return _e({confirm:p,getSelectedDate:g}),()=>f(ci,Ce({ref:l,modelValue:o.value,"onUpdate:modelValue":y=>o.value=y,columns:w.value,onChange:v,onCancel:x,onConfirm:S},Pe(e,vh)),n)}});const Fx=X(Nx),[Hx,Mt,cl]=Y("dialog"),zx=me({},ta,{title:String,theme:String,width:q,message:[String,Function],callback:Function,allowHtml:Boolean,className:He,transition:Z("van-dialog-bounce"),messageAlign:String,closeOnPopstate:z,showCancelButton:Boolean,cancelButtonText:String,cancelButtonColor:String,cancelButtonDisabled:Boolean,confirmButtonText:String,confirmButtonColor:String,confirmButtonDisabled:Boolean,showConfirmButton:z,closeOnClickOverlay:Boolean,keyboardEnabled:z,destroyOnClose:Boolean}),jx=[...as,"transition","closeOnPopstate","destroyOnClose"];var Wx=U({name:Hx,props:zx,emits:["confirm","cancel","keydown","update:show"],setup(e,{emit:t,slots:n}){const o=M(),a=je({confirm:!1,cancel:!1}),l=w=>t("update:show",w),i=w=>{var v;l(!1),(v=e.callback)==null||v.call(e,w)},r=w=>()=>{e.show&&(t(w),e.beforeClose?(a[w]=!0,Qn(e.beforeClose,{args:[w],done(){i(w),a[w]=!1},canceled(){a[w]=!1}})):i(w))},s=r("cancel"),c=r("confirm"),u=vg(w=>{var v,x;if(!e.keyboardEnabled||w.target!==((x=(v=o.value)==null?void 0:v.popupRef)==null?void 0:x.value))return;({Enter:e.showConfirmButton?c:gr,Escape:e.showCancelButton?s:gr})[w.key](),t("keydown",w)},["enter","esc"]),d=()=>{const w=n.title?n.title():e.title;if(w)return f("div",{class:Mt("header",{isolated:!e.message&&!n.default})},[w])},h=w=>{const{message:v,allowHtml:x,messageAlign:S}=e,y=Mt("message",{"has-title":w,[S]:S}),T=qo(v)?v():v;return x&&typeof T=="string"?f("div",{class:y,innerHTML:T},null):f("div",{class:y},[T])},m=()=>{if(n.default)return f("div",{class:Mt("content")},[n.default()]);const{title:w,message:v,allowHtml:x}=e;if(v){const S=!!(w||n.title);return f("div",{key:x?1:0,class:Mt("content",{isolated:!S})},[h(S)])}},b=()=>f("div",{class:[Cf,Mt("footer")]},[e.showCancelButton&&f(ut,{size:"large",text:e.cancelButtonText||cl("cancel"),class:Mt("cancel"),style:{color:e.cancelButtonColor},loading:a.cancel,disabled:e.cancelButtonDisabled,onClick:s},null),e.showConfirmButton&&f(ut,{size:"large",text:e.confirmButtonText||cl("confirm"),class:[Mt("confirm"),{[Tf]:e.showCancelButton}],style:{color:e.confirmButtonColor},loading:a.confirm,disabled:e.confirmButtonDisabled,onClick:c},null)]),p=()=>f(If,{class:Mt("footer")},{default:()=>[e.showCancelButton&&f(Sr,{type:"warning",text:e.cancelButtonText||cl("cancel"),class:Mt("cancel"),color:e.cancelButtonColor,loading:a.cancel,disabled:e.cancelButtonDisabled,onClick:s},null),e.showConfirmButton&&f(Sr,{type:"danger",text:e.confirmButtonText||cl("confirm"),class:Mt("confirm"),color:e.confirmButtonColor,loading:a.confirm,disabled:e.confirmButtonDisabled,onClick:c},null)]}),g=()=>n.footer?n.footer():e.theme==="round-button"?p():b();return()=>{const{width:w,title:v,theme:x,message:S,className:y}=e;return f(Kt,Ce({ref:o,role:"dialog",class:[Mt([x]),y],style:{width:pe(w)},tabindex:0,"aria-labelledby":v||S,onKeydown:u,"onUpdate:show":l},Pe(e,jx)),{default:()=>[d(),m(),g()]})}}});const Ux=X(Wx),[Yx,Gx]=Y("divider"),Kx={dashed:Boolean,hairline:z,vertical:Boolean,contentPosition:Z("center")};var qx=U({name:Yx,props:Kx,setup(e,{slots:t}){return()=>{var n;return f("div",{role:"separator",class:Gx({dashed:e.dashed,hairline:e.hairline,vertical:e.vertical,[`content-${e.contentPosition}`]:!!t.default&&!e.vertical})},[!e.vertical&&((n=t.default)==null?void 0:n.call(t))])}}});const Xx=X(qx),[Th,ul]=Y("dropdown-menu"),Zx={overlay:z,zIndex:q,duration:se(.2),direction:Z("down"),activeColor:String,autoLocate:Boolean,closeOnClickOutside:z,closeOnClickOverlay:z,swipeThreshold:q},_h=Symbol(Th);var Jx=U({name:Th,props:Zx,setup(e,{slots:t}){const n=na(),o=M(),a=M(),l=M(0),{children:i,linkChildren:r}=dt(_h),s=ea(o),c=B(()=>i.some(v=>v.state.showWrapper)),u=B(()=>e.swipeThreshold&&i.length>+e.swipeThreshold),d=B(()=>{if(c.value&&Ee(e.zIndex))return{zIndex:+e.zIndex+1}}),h=()=>{i.forEach(v=>{v.toggle(!1)})},m=()=>{e.closeOnClickOutside&&h()},b=()=>{if(a.value){const v=Oe(a);e.direction==="down"?l.value=v.bottom:l.value=Ot.value-v.top}},p=()=>{c.value&&b()},g=v=>{i.forEach((x,S)=>{S===v?x.toggle():x.state.showPopup&&x.toggle(!1,{immediate:!0})})},w=(v,x)=>{const{showPopup:S}=v.state,{disabled:y,titleClass:T}=v;return f("div",{id:`${n}-${x}`,role:"button",tabindex:y?void 0:0,"data-allow-mismatch":"attribute",class:[ul("item",{disabled:y,grow:u.value}),{[ct]:!y}],onClick:()=>{y||g(x)}},[f("span",{class:[ul("title",{down:S===(e.direction==="down"),active:S}),T],style:{color:S?e.activeColor:""}},[f("div",{class:"van-ellipsis"},[v.renderTitle()])])])};return _e({close:h,opened:c}),r({id:n,props:e,offset:l,opened:c,updateOffset:b}),ni(o,m),Ge("scroll",p,{target:s,passive:!0}),()=>{var v;return f("div",{ref:o,class:ul()},[f("div",{ref:a,style:d.value,class:ul("bar",{opened:c.value,scrollable:u.value})},[i.map(w)]),(v=t.default)==null?void 0:v.call(t)])}}});const[Qx,dl]=Y("dropdown-item"),eS={title:String,options:Fe(),disabled:Boolean,teleport:[String,Object],lazyRender:z,modelValue:He,titleClass:He};var tS=U({name:Qx,inheritAttrs:!1,props:eS,emits:["open","opened","close","closed","change","update:modelValue"],setup(e,{emit:t,slots:n,attrs:o}){const a=je({showPopup:!1,transition:!0,showWrapper:!1}),l=M(),{parent:i,index:r}=lt(_h);if(!i)return;const s=v=>()=>t(v),c=s("open"),u=s("close"),d=s("opened"),h=()=>{a.showWrapper=!1,t("closed")},m=v=>{e.teleport&&v.stopPropagation()},b=(v=!a.showPopup,x={})=>{v!==a.showPopup&&(a.showPopup=v,a.transition=!x.immediate,v&&(i.updateOffset(),a.showWrapper=!0))},p=()=>{if(n.title)return n.title();if(e.title)return e.title;const v=e.options.find(x=>x.value===e.modelValue);return v?v.text:""},g=v=>{const{activeColor:x}=i.props,{disabled:S}=v,y=v.value===e.modelValue,T=()=>{S||(a.showPopup=!1,v.value!==e.modelValue&&(t("update:modelValue",v.value),t("change",v.value)))},O=()=>{if(y)return f(xe,{class:dl("icon"),color:S?void 0:x,name:"success"},null)};return f(qt,{role:"menuitem",key:String(v.value),icon:v.icon,title:v.text,class:dl("option",{active:y,disabled:S}),style:{color:y?x:""},tabindex:y?0:-1,clickable:!S,onClick:T},{value:O})},w=()=>{const{offset:v}=i,{autoLocate:x,zIndex:S,overlay:y,duration:T,direction:O,closeOnClickOverlay:C}=i.props,I=$n(S);let R=v.value;if(x&&l.value){const A=Gb(l.value);A&&(R-=Oe(A).top)}return O==="down"?I.top=`${R}px`:I.bottom=`${R}px`,et(f("div",Ce({ref:l,style:I,class:dl([O]),onClick:m},o),[f(Kt,{show:a.showPopup,"onUpdate:show":A=>a.showPopup=A,role:"menu",class:dl("content"),overlay:y,overlayProps:{duration:a.transition&&!i.opened.value?T:0},position:O==="down"?"top":"bottom",duration:a.transition?T:0,lazyRender:e.lazyRender,overlayStyle:{position:"absolute"},"aria-labelledby":`${i.id}-${r.value}`,"data-allow-mismatch":"attribute",closeOnClickOverlay:C,onOpen:c,onClose:u,onOpened:d,onClosed:h},{default:()=>{var A;return[e.options.map(g),(A=n.default)==null?void 0:A.call(n)]}})]),[[at,a.showWrapper]])};return _e({state:a,toggle:b,renderTitle:p}),()=>e.teleport?f(po,{to:e.teleport},{default:()=>[w()]}):w()}});const nS=X(tS),oS=X(Jx),aS={gap:{type:[Number,Object],default:24},icon:String,axis:Z("y"),magnetic:String,offset:Object,teleport:{type:[String,Object],default:"body"}},[lS,du]=Y("floating-bubble");var iS=U({name:lS,inheritAttrs:!1,props:aS,emits:["click","update:offset","offsetChange"],setup(e,{slots:t,emit:n,attrs:o}){const a=M(),l=M({x:0,y:0,width:0,height:0}),i=B(()=>Yt(e.gap)?e.gap.x:e.gap),r=B(()=>Yt(e.gap)?e.gap.y:e.gap),s=B(()=>({top:r.value,right:Ht.value-l.value.width-i.value,bottom:Ot.value-l.value.height-r.value,left:i.value})),c=M(!1);let u=!1;const d=B(()=>{const y={},T=pe(l.value.x),O=pe(l.value.y);return y.transform=`translate3d(${T}, ${O}, 0)`,(c.value||!u)&&(y.transition="none"),y}),h=()=>{if(!S.value)return;const{width:y,height:T}=Oe(a.value),{offset:O}=e;l.value={x:O?O.x:Ht.value-y-i.value,y:O?O.y:Ot.value-T-r.value,width:y,height:T}},m=Bt();let b=0,p=0;const g=y=>{m.start(y),c.value=!0,b=l.value.x,p=l.value.y};Ge("touchmove",y=>{if(y.preventDefault(),m.move(y),e.axis!=="lock"&&!m.isTap.value){if(e.axis==="x"||e.axis==="xy"){let O=b+m.deltaX.value;Os.value.right&&(O=s.value.right),l.value.x=O}if(e.axis==="y"||e.axis==="xy"){let O=p+m.deltaY.value;Os.value.bottom&&(O=s.value.bottom),l.value.y=O}const T=Pe(l.value,["x","y"]);n("update:offset",T)}},{target:a});const v=()=>{c.value=!1,Se(()=>{if(e.magnetic==="x"){const y=$l([s.value.left,s.value.right],l.value.x);l.value.x=y}if(e.magnetic==="y"){const y=$l([s.value.top,s.value.bottom],l.value.y);l.value.y=y}if(!m.isTap.value){const y=Pe(l.value,["x","y"]);n("update:offset",y),(b!==y.x||p!==y.y)&&n("offsetChange",y)}})},x=y=>{m.isTap.value?n("click",y):y.stopPropagation()};We(()=>{h(),Se(()=>{u=!0})}),te([Ht,Ot,i,r,()=>e.offset],h,{deep:!0});const S=M(!0);return cn(()=>{S.value=!0}),un(()=>{e.teleport&&(S.value=!1)}),()=>{const y=et(f("div",Ce({class:du(),ref:a,onTouchstartPassive:g,onTouchend:v,onTouchcancel:v,onClickCapture:x,style:d.value},o),[t.default?t.default():f(Ty,{name:e.icon,class:du("icon")},null)]),[[at,S.value]]);return e.teleport?f(po,{to:e.teleport},{default:()=>[y]}):y}}});const rS=X(iS),sS={height:se(0),anchors:Fe(),duration:se(.3),magnetic:z,contentDraggable:z,lockScroll:Boolean,safeAreaInsetBottom:z},[cS,fl]=Y("floating-panel");var uS=U({name:cS,props:sS,emits:["heightChange","update:height"],setup(e,{emit:t,slots:n}){const a=M(),l=M(),i=is(()=>+e.height,x=>t("update:height",x)),r=B(()=>{var x,S;return{min:(x=e.anchors[0])!=null?x:100,max:(S=e.anchors[e.anchors.length-1])!=null?S:Math.round(Ot.value*.6)}}),s=B(()=>e.anchors.length>=2?e.anchors:[r.value.min,r.value.max]),c=M(!1),u=B(()=>({height:pe(r.value.max),transform:`translateY(calc(100% + ${pe(-i.value)}))`,transition:c.value?"none":`transform ${e.duration}s cubic-bezier(0.18, 0.89, 0.32, 1.28)`})),d=x=>{const S=Math.abs(x),{min:y,max:T}=r.value;return S>T?-(T+(S-T)*.2):S{b.start(x),c.value=!0,h=-i.value,m=-1},g=x=>{var S;b.move(x);const y=x.target;if(l.value===y||(S=l.value)!=null&&S.contains(y)){const{scrollTop:O}=l.value;if(m=Math.max(m,O),!e.contentDraggable)return;if(-h0)||m>0)return}const T=b.deltaY.value+h;i.value=-d(T)},w=()=>{if(m=-1,c.value=!1,e.magnetic)i.value=$l(s.value,i.value);else{const{min:x,max:S}=r.value;i.value=Math.max(x,Math.min(S,i.value))}i.value!==-h&&t("heightChange",{height:i.value})};te(r,()=>{i.value=$l(s.value,i.value)},{immediate:!0}),Bf(a,()=>e.lockScroll||c.value),Ge("touchmove",g,{target:a});const v=()=>n.header?n.header():f("div",{class:fl("header")},[f("div",{class:fl("header-bar")},null)]);return()=>{var x;return f("div",{class:[fl(),{"van-safe-area-bottom":e.safeAreaInsetBottom}],ref:a,style:u.value,onTouchstartPassive:p,onTouchend:w,onTouchcancel:w},[v(),f("div",{class:fl("content"),ref:l,style:{paddingBottom:pe(r.value.max-i.value)}},[(x=n.default)==null?void 0:x.call(n)])])}}});const dS=X(uS),[Eh,fS]=Y("grid"),hS={square:Boolean,center:z,border:z,gutter:q,reverse:Boolean,iconSize:q,direction:String,clickable:Boolean,columnNum:se(4)},kh=Symbol(Eh);var mS=U({name:Eh,props:hS,setup(e,{slots:t}){const{linkChildren:n}=dt(kh);return n({props:e}),()=>{var o;return f("div",{style:{paddingLeft:pe(e.gutter)},class:[fS(),{[Cf]:e.border&&!e.gutter}]},[(o=t.default)==null?void 0:o.call(t)])}}});const vS=X(mS),[gS,hl]=Y("grid-item"),bS=me({},eo,{dot:Boolean,text:String,icon:String,badge:q,iconColor:String,iconPrefix:String,badgeProps:Object});var yS=U({name:gS,props:bS,setup(e,{slots:t}){const{parent:n,index:o}=lt(kh),a=xo();if(!n)return;const l=B(()=>{const{square:u,gutter:d,columnNum:h}=n.props,m=`${100/+h}%`,b={flexBasis:m};if(u)b.paddingTop=m;else if(d){const p=pe(d);b.paddingRight=p,o.value>=+h&&(b.marginTop=p)}return b}),i=B(()=>{const{square:u,gutter:d}=n.props;if(u&&d){const h=pe(d);return{right:h,bottom:h,height:"auto"}}}),r=()=>{if(t.icon)return f(So,Ce({dot:e.dot,content:e.badge},e.badgeProps),{default:t.icon});if(e.icon)return f(xe,{dot:e.dot,name:e.icon,size:n.props.iconSize,badge:e.badge,class:hl("icon"),color:e.iconColor,badgeProps:e.badgeProps,classPrefix:e.iconPrefix},null)},s=()=>{if(t.text)return t.text();if(e.text)return f("span",{class:hl("text")},[e.text])},c=()=>t.default?t.default():[r(),s()];return()=>{const{center:u,border:d,square:h,gutter:m,reverse:b,direction:p,clickable:g}=n.props,w=[hl("content",[p,{center:u,square:h,reverse:b,clickable:g,surround:d&&m}]),{[Bn]:d}];return f("div",{class:[hl({square:h})],style:l.value},[f("div",{role:g?"button":void 0,class:w,style:i.value,tabindex:g?0:void 0,onClick:a},[c()])])}}});const pS=X(yS),[wS,fu]=Y("highlight"),xS={autoEscape:z,caseSensitive:Boolean,highlightClass:String,highlightTag:Z("span"),keywords:Qe([String,Array]),sourceString:Z(""),tag:Z("div"),unhighlightClass:String,unhighlightTag:Z("span")};var SS=U({name:wS,props:xS,setup(e){const t=B(()=>{const{autoEscape:o,caseSensitive:a,keywords:l,sourceString:i}=e,r=a?"g":"gi";let c=(Array.isArray(l)?l:[l]).filter(d=>d).reduce((d,h)=>{o&&(h=h.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"));const m=new RegExp(h,r);let b;for(;b=m.exec(i);){const p=b.index,g=m.lastIndex;if(p>=g){m.lastIndex++;continue}d.push({start:p,end:g,highlight:!0})}return d},[]);c=c.sort((d,h)=>d.start-h.start).reduce((d,h)=>{const m=d[d.length-1];if(!m||h.start>m.end){const b=m?m.end:0,p=h.start;b!==p&&d.push({start:b,end:p,highlight:!1}),d.push(h)}else m.end=Math.max(m.end,h.end);return d},[]);const u=c[c.length-1];return u||c.push({start:0,end:i.length,highlight:!1}),u&&u.end{const{sourceString:o,highlightClass:a,unhighlightClass:l,highlightTag:i,unhighlightTag:r}=e;return t.value.map(s=>{const{start:c,end:u,highlight:d}=s,h=o.slice(c,u);return d?f(i,{class:[fu("tag"),a]},{default:()=>[h]}):f(r,{class:l},{default:()=>[h]})})};return()=>{const{tag:o}=e;return f(o,{class:fu()},{default:()=>[n()]})}}});const CS=X(SS),hu=e=>Math.sqrt((e[0].clientX-e[1].clientX)**2+(e[0].clientY-e[1].clientY)**2),TS=e=>({x:(e[0].clientX+e[1].clientX)/2,y:(e[0].clientY+e[1].clientY)/2}),Wi=Y("image-preview")[1],mu=2.6,_S={src:String,show:Boolean,active:Number,minZoom:Qe(q),maxZoom:Qe(q),rootWidth:Qe(Number),rootHeight:Qe(Number),disableZoom:Boolean,doubleScale:Boolean,closeOnClickImage:Boolean,closeOnClickOverlay:Boolean,vertical:Boolean};var ES=U({props:_S,emits:["scale","close","longPress"],setup(e,{emit:t,slots:n}){const o=je({scale:1,moveX:0,moveY:0,moving:!1,zooming:!1,initializing:!1,imageRatio:0}),a=Bt(),l=M(),i=M(),r=M(!1),s=M(!1);let c=0;const u=B(()=>{const{scale:N,moveX:ne,moveY:oe,moving:Te,zooming:ke,initializing:re}=o,H={transitionDuration:ke||Te||re?"0s":".3s"};return(N!==1||s.value)&&(H.transform=`matrix(${N}, 0, 0, ${N}, ${ne}, ${oe})`),H}),d=B(()=>{if(o.imageRatio){const{rootWidth:N,rootHeight:ne}=e,oe=r.value?ne/o.imageRatio:N;return Math.max(0,(o.scale*oe-N)/2)}return 0}),h=B(()=>{if(o.imageRatio){const{rootWidth:N,rootHeight:ne}=e,oe=r.value?ne:N*o.imageRatio;return Math.max(0,(o.scale*oe-ne)/2)}return 0}),m=(N,ne)=>{var oe;if(N=Je(N,+e.minZoom,+e.maxZoom+1),N!==o.scale){const Te=N/o.scale;if(o.scale=N,ne){const ke=Oe((oe=l.value)==null?void 0:oe.$el),re={x:ke.width*.5,y:ke.height*.5},H=o.moveX-(ne.x-ke.left-re.x)*(Te-1),ee=o.moveY-(ne.y-ke.top-re.y)*(Te-1);o.moveX=Je(H,-d.value,d.value),o.moveY=Je(ee,-h.value,h.value)}else o.moveX=0,o.moveY=s.value?c:0;t("scale",{scale:N,index:e.active})}},b=()=>{m(1)},p=()=>{const N=o.scale>1?1:2;m(N,N===2||s.value?{x:a.startX.value,y:a.startY.value}:void 0)};let g,w,v,x,S,y,T,O,C=!1;const I=N=>{const{touches:ne}=N;if(g=ne.length,g===2&&e.disableZoom)return;const{offsetX:oe}=a;a.start(N),w=o.moveX,v=o.moveY,O=Date.now(),C=!1,o.moving=g===1&&(o.scale!==1||s.value),o.zooming=g===2&&!oe.value,o.zooming&&(x=o.scale,S=hu(ne))},R=N=>{const{touches:ne}=N;if(a.move(N),o.moving){const{deltaX:oe,deltaY:Te}=a,ke=oe.value+w,re=Te.value+v;if((e.vertical?a.isVertical()&&Math.abs(re)>h.value:a.isHorizontal()&&Math.abs(ke)>d.value)&&!C){o.moving=!1;return}C=!0,Le(N,!0),o.moveX=Je(ke,-d.value,d.value),o.moveY=Je(re,-h.value,h.value)}if(o.zooming&&(Le(N,!0),ne.length===2)){const oe=hu(ne),Te=x*oe/S;y=TS(ne),m(Te,y)}},A=N=>{var ne;const oe=(ne=i.value)==null?void 0:ne.$el;if(!oe)return;const Te=oe.firstElementChild,ke=N.target===oe,re=Te?.contains(N.target);!e.closeOnClickImage&&re||!e.closeOnClickOverlay&&ke||t("close")},_=N=>{if(g>1)return;const ne=Date.now()-O,oe=250;a.isTap.value&&(ne{A(N),T=null},oe):A(N):ne>Ef&&t("longPress"))},D=N=>{let ne=!1;if((o.moving||o.zooming)&&(ne=!0,o.moving&&w===o.moveX&&v===o.moveY&&(ne=!1),!N.touches.length)){o.zooming&&(o.moveX=Je(o.moveX,-d.value,d.value),o.moveY=Je(o.moveY,-h.value,h.value),o.zooming=!1),o.moving=!1,w=0,v=0,x=1,o.scale<1&&b();const oe=+e.maxZoom;o.scale>oe&&m(oe,y)}Le(N,ne),_(N),a.reset()},j=()=>{const{rootWidth:N,rootHeight:ne}=e,oe=ne/N,{imageRatio:Te}=o;r.value=o.imageRatio>oe&&Teoe&&Te>=mu,s.value&&(c=(Te*N-ne)/2,o.moveY=c,o.initializing=!0,st(()=>{o.initializing=!1})),b()},ae=N=>{const{naturalWidth:ne,naturalHeight:oe}=N.target;o.imageRatio=oe/ne,j()};return te(()=>e.active,b),te(()=>e.show,N=>{N||b()}),te(()=>[e.rootWidth,e.rootHeight],j),Ge("touchmove",R,{target:B(()=>{var N;return(N=i.value)==null?void 0:N.$el})}),_e({resetScale:b}),()=>{const N={loading:()=>f(Gt,{type:"spinner"},null)};return f(ss,{ref:i,class:Wi("swipe-item"),onTouchstartPassive:I,onTouchend:D,onTouchcancel:D},{default:()=>[n.image?f("div",{class:Wi("image-wrap")},[n.image({src:e.src,onLoad:ae,style:u.value})]):f(fi,{ref:l,src:e.src,fit:"contain",class:Wi("image",{vertical:r.value}),style:u.value,onLoad:ae},N)]})}}});const[kS,Ro]=Y("image-preview"),AS=["show","teleport","transition","overlayStyle","closeOnPopstate"],PS={show:Boolean,loop:z,images:Fe(),minZoom:se(1/3),maxZoom:se(3),overlay:z,vertical:Boolean,closeable:Boolean,showIndex:z,className:He,closeIcon:Z("clear"),transition:String,beforeClose:Function,doubleScale:z,overlayClass:He,overlayStyle:Object,swipeDuration:se(300),startPosition:se(0),showIndicators:Boolean,closeOnPopstate:z,closeOnClickImage:z,closeOnClickOverlay:z,closeIconPosition:Z("top-right"),teleport:[String,Object]};var Ah=U({name:kS,props:PS,emits:["scale","close","closed","change","longPress","update:show"],setup(e,{emit:t,slots:n}){const o=M(),a=M(),l=je({active:0,rootWidth:0,rootHeight:0,disableZoom:!1}),i=()=>{if(o.value){const x=Oe(o.value.$el);l.rootWidth=x.width,l.rootHeight=x.height,o.value.resize()}},r=x=>t("scale",x),s=x=>t("update:show",x),c=()=>{Qn(e.beforeClose,{args:[l.active],done:()=>s(!1)})},u=x=>{x!==l.active&&(l.active=x,t("change",x))},d=()=>{if(e.showIndex)return f("div",{class:Ro("index")},[n.index?n.index({index:l.active}):`${l.active+1} / ${e.images.length}`])},h=()=>{if(n.cover)return f("div",{class:Ro("cover")},[n.cover()])},m=()=>{l.disableZoom=!0},b=()=>{l.disableZoom=!1},p=()=>f(rs,{ref:o,lazyRender:!0,loop:e.loop,class:Ro("swipe"),vertical:e.vertical,duration:e.swipeDuration,initialSwipe:e.startPosition,showIndicators:e.showIndicators,indicatorColor:"white",onChange:u,onDragEnd:b,onDragStart:m},{default:()=>[e.images.map((x,S)=>f(ES,{ref:y=>{S===l.active&&(a.value=y)},src:x,show:e.show,active:l.active,maxZoom:e.maxZoom,minZoom:e.minZoom,rootWidth:l.rootWidth,rootHeight:l.rootHeight,disableZoom:l.disableZoom,doubleScale:e.doubleScale,closeOnClickImage:e.closeOnClickImage,closeOnClickOverlay:e.closeOnClickOverlay,vertical:e.vertical,onScale:r,onClose:c,onLongPress:()=>t("longPress",{index:S})},{image:n.image}))]}),g=()=>{if(e.closeable)return f(xe,{role:"button",name:e.closeIcon,class:[Ro("close-icon",e.closeIconPosition),ct],onClick:c},null)},w=()=>t("closed"),v=(x,S)=>{var y;return(y=o.value)==null?void 0:y.swipeTo(x,S)};return _e({resetScale:()=>{var x;(x=a.value)==null||x.resetScale()},swipeTo:v}),We(i),te([Ht,Ot],i),te(()=>e.startPosition,x=>u(+x)),te(()=>e.show,x=>{const{images:S,startPosition:y}=e;x?(u(+y),Se(()=>{i(),v(+y,{immediate:!0})})):t("close",{index:l.active,url:S[l.active]})}),()=>f(Kt,Ce({class:[Ro(),e.className],overlayClass:[Ro("overlay"),e.overlayClass],onClosed:w,"onUpdate:show":s},Pe(e,AS)),{default:()=>[g(),p(),d(),h()]})}});let Sl;const IS={loop:!0,images:[],maxZoom:3,minZoom:1/3,onScale:void 0,onClose:void 0,onChange:void 0,vertical:!1,teleport:"body",className:"",showIndex:!0,closeable:!1,closeIcon:"clear",transition:void 0,beforeClose:void 0,doubleScale:!0,overlayStyle:void 0,overlayClass:void 0,startPosition:0,swipeDuration:300,showIndicators:!1,closeOnPopstate:!0,closeOnClickOverlay:!0,closeIconPosition:"top-right"};function OS(){({instance:Sl}=oh({setup(){const{state:e,toggle:t}=nh(),n=()=>{e.images=[]};return()=>f(Ah,Ce(e,{onClosed:n,"onUpdate:show":t}),null)}}))}const RS=(e,t=0)=>{if(Dt)return Sl||OS(),e=Array.isArray(e)?{images:e,startPosition:t}:e,Sl.open(me({},IS,e)),Sl},DS=X(Ah);function $S(){return Array(26).fill("").map((n,o)=>String.fromCharCode(65+o))}const[Ph,Ui]=Y("index-bar"),BS={sticky:z,zIndex:q,teleport:[String,Object],highlightColor:String,stickyOffsetTop:Ze(0),indexList:{type:Array,default:$S}},Ih=Symbol(Ph);var MS=U({name:Ph,props:BS,emits:["select","change"],setup(e,{emit:t,slots:n}){const o=M(),a=M(),l=M(""),i=Bt(),r=ea(o),{children:s,linkChildren:c}=dt(Ih);let u;c({props:e});const d=B(()=>{if(Ee(e.zIndex))return{zIndex:+e.zIndex+1}}),h=B(()=>{if(e.highlightColor)return{color:e.highlightColor}}),m=(C,I)=>{for(let R=s.length-1;R>=0;R--){const A=R>0?I[R-1].height:0,_=e.sticky?A+e.stickyOffsetTop:0;if(C+_>=I[R].top)return R}return-1},b=C=>s.find(I=>String(I.index)===C),p=()=>{if(yo(o))return;const{sticky:C,indexList:I}=e,R=An(r.value),A=Oe(r),_=s.map(j=>j.getRect(r.value,A));let D=-1;if(u){const j=b(u);if(j){const ae=j.getRect(r.value,A);e.sticky&&e.stickyOffsetTop?D=m(ae.top-e.stickyOffsetTop,_):D=m(ae.top,_)}}else D=m(R,_);l.value=I[D],C&&s.forEach((j,ae)=>{const{state:N,$el:ne}=j;if(ae===D||ae===D-1){const oe=ne.getBoundingClientRect();N.left=oe.left,N.width=oe.width}else N.left=null,N.width=null;if(ae===D)N.active=!0,N.top=Math.max(e.stickyOffsetTop,_[ae].top-R)+A.top;else if(ae===D-1&&u===""){const oe=_[D].top-R;N.active=oe>0,N.top=oe+A.top-_[ae].height}else N.active=!1}),u=""},g=()=>{Se(p)};Ge("scroll",p,{target:r,passive:!0}),We(g),te(()=>e.indexList,g),te(l,C=>{C&&t("change",C)});const w=()=>e.indexList.map(C=>{const I=C===l.value;return f("span",{class:Ui("index",{active:I}),style:I?h.value:void 0,"data-index":C},[C])}),v=C=>{u=String(C);const I=b(u);if(I){const R=An(r.value),A=Oe(r),{offsetHeight:_}=document.documentElement;if(I.$el.scrollIntoView(),R===_-A.height){p();return}e.sticky&&e.stickyOffsetTop&&(go()===_-A.height?La(go()):La(go()-e.stickyOffsetTop)),t("select",I.index)}},x=C=>{const{index:I}=C.dataset;I&&v(I)},S=C=>{x(C.target)};let y;const T=C=>{if(i.move(C),i.isVertical()){Le(C);const{clientX:I,clientY:R}=C.touches[0],A=document.elementFromPoint(I,R);if(A){const{index:_}=A.dataset;_&&y!==_&&(y=_,x(A))}}},O=()=>f("div",{ref:a,class:Ui("sidebar"),style:d.value,onClick:S,onTouchstartPassive:i.start},[w()]);return _e({scrollTo:v}),Ge("touchmove",T,{target:a}),()=>{var C;return f("div",{ref:o,class:Ui()},[e.teleport?f(po,{to:e.teleport},{default:()=>[O()]}):O(),(C=n.default)==null?void 0:C.call(n)])}}});const[VS,LS]=Y("index-anchor"),NS={index:q};var FS=U({name:VS,props:NS,setup(e,{slots:t}){const n=je({top:0,left:null,rect:{top:0,height:0},width:null,active:!1}),o=M(),{parent:a}=lt(Ih);if(!a)return;const l=()=>n.active&&a.props.sticky,i=B(()=>{const{zIndex:s,highlightColor:c}=a.props;if(l())return me($n(s),{left:n.left?`${n.left}px`:void 0,width:n.width?`${n.width}px`:void 0,transform:n.top?`translate3d(0, ${n.top}px, 0)`:void 0,color:c})});return _e({state:n,getRect:(s,c)=>{const u=Oe(o);return n.rect.height=u.height,s===window||s===document.body?n.rect.top=u.top+go():n.rect.top=u.top+An(s)-c.top,n.rect}}),()=>{const s=l();return f("div",{ref:o,style:{height:s?`${n.rect.height}px`:void 0}},[f("div",{style:i.value,class:[LS({sticky:s}),{[ns]:s}]},[t.default?t.default():e.index])])}}});const HS=X(FS),zS=X(MS),[jS,Do,WS]=Y("list"),US={error:Boolean,offset:se(300),loading:Boolean,disabled:Boolean,finished:Boolean,scroller:Object,errorText:String,direction:Z("down"),loadingText:{type:String,default:""},finishedText:String,immediateCheck:z};var YS=U({name:jS,props:US,emits:["load","update:error","update:loading"],setup(e,{emit:t,slots:n}){const o=M(e.loading),a=M(),l=M(),i=qf(),r=ea(a),s=B(()=>e.scroller||r.value),c=()=>{Se(()=>{if(o.value||e.finished||e.disabled||e.error||i?.value===!1)return;const{direction:b}=e,p=+e.offset,g=Oe(s);if(!g.height||yo(a))return;let w=!1;const v=Oe(l);b==="up"?w=g.top-v.top<=p:w=v.bottom-g.bottom<=p,w&&(o.value=!0,t("update:loading",!0),t("load"))})},u=()=>{if(e.finished){const b=n.finished?n.finished():e.finishedText;if(b)return f("div",{class:Do("finished-text")},[b])}},d=()=>{t("update:error",!1),c()},h=()=>{if(e.error){const b=n.error?n.error():e.errorText;if(b)return f("div",{role:"button",class:Do("error-text"),tabindex:0,onClick:d},[b])}},m=()=>{if(o.value&&!e.finished&&!e.disabled)return f("div",{class:Do("loading")},[n.loading?n.loading():e.loadingText!=null&&f(Gt,{class:Do("loading-icon")},{default:()=>[e.loadingText||WS("loading")]})])};return te(()=>[e.loading,e.finished,e.error],c),i&&te(i,b=>{b&&c()}),_d(()=>{o.value=e.loading}),We(()=>{e.immediateCheck&&c()}),_e({check:c}),Ge("scroll",c,{target:s,passive:!0}),()=>{var b;const p=(b=n.default)==null?void 0:b.call(n),g=f("div",{ref:l,class:Do("placeholder")},null);return f("div",{ref:a,role:"feed",class:Do(),"aria-busy":o.value},[e.direction==="down"?p:g,m(),u(),h(),e.direction==="up"?p:g])}}});const GS=X(YS),[KS,bn]=Y("nav-bar"),qS={title:String,fixed:Boolean,zIndex:q,border:z,leftText:String,rightText:String,leftDisabled:Boolean,rightDisabled:Boolean,leftArrow:Boolean,placeholder:Boolean,safeAreaInsetTop:Boolean,clickable:z};var XS=U({name:KS,props:qS,emits:["clickLeft","clickRight"],setup(e,{emit:t,slots:n}){const o=M(),a=li(o,bn),l=u=>{e.leftDisabled||t("clickLeft",u)},i=u=>{e.rightDisabled||t("clickRight",u)},r=()=>n.left?n.left():[e.leftArrow&&f(xe,{class:bn("arrow"),name:"arrow-left"},null),e.leftText&&f("span",{class:bn("text")},[e.leftText])],s=()=>n.right?n.right():f("span",{class:bn("text")},[e.rightText]),c=()=>{const{title:u,fixed:d,border:h,zIndex:m}=e,b=$n(m),p=e.leftArrow||e.leftText||n.left,g=e.rightText||n.right;return f("div",{ref:o,style:b,class:[bn({fixed:d}),{[ns]:h,"van-safe-area-top":e.safeAreaInsetTop}]},[f("div",{class:bn("content")},[p&&f("div",{class:[bn("left",{disabled:e.leftDisabled}),e.clickable&&!e.leftDisabled?ct:""],onClick:l},[r()]),f("div",{class:[bn("title"),"van-ellipsis"]},[n.title?n.title():u]),g&&f("div",{class:[bn("right",{disabled:e.rightDisabled}),e.clickable&&!e.rightDisabled?ct:""],onClick:i},[s()])])])};return()=>e.fixed&&e.placeholder?a(c):c()}});const ZS=X(XS),[JS,ua]=Y("notice-bar"),QS={text:String,mode:String,color:String,delay:se(1),speed:se(60),leftIcon:String,wrapable:Boolean,background:String,scrollable:{type:Boolean,default:null}};var eC=U({name:JS,props:QS,emits:["close","replay"],setup(e,{emit:t,slots:n}){let o=0,a=0,l;const i=M(),r=M(),s=je({show:!0,offset:0,duration:0}),c=()=>{if(n["left-icon"])return n["left-icon"]();if(e.leftIcon)return f(xe,{class:ua("left-icon"),name:e.leftIcon},null)},u=()=>{if(e.mode==="closeable")return"cross";if(e.mode==="link")return"arrow"},d=g=>{e.mode==="closeable"&&(s.show=!1,t("close",g))},h=()=>{if(n["right-icon"])return n["right-icon"]();const g=u();if(g)return f(xe,{name:g,class:ua("right-icon"),onClick:d},null)},m=()=>{s.offset=o,s.duration=0,st(()=>{Gn(()=>{s.offset=-a,s.duration=(a+o)/+e.speed,t("replay")})})},b=()=>{const g=e.scrollable===!1&&!e.wrapable,w={transform:s.offset?`translateX(${s.offset}px)`:"",transitionDuration:`${s.duration}s`};return f("div",{ref:i,role:"marquee",class:ua("wrap")},[f("div",{ref:r,style:w,class:[ua("content"),{"van-ellipsis":g}],onTransitionend:m},[n.default?n.default():e.text])])},p=()=>{const{delay:g,speed:w,scrollable:v}=e,x=Ee(g)?+g*1e3:0;o=0,a=0,s.offset=0,s.duration=0,clearTimeout(l),l=setTimeout(()=>{if(!i.value||!r.value||v===!1)return;const S=Oe(i).width,y=Oe(r).width;(v||y>S)&&Gn(()=>{o=S,a=y,s.offset=-a,s.duration=a/+w})},x)};return ai(p),Qo(p),Ge("pageshow",p),_e({reset:p}),te(()=>[e.text,e.scrollable],p),()=>{const{color:g,wrapable:w,background:v}=e;return et(f("div",{role:"alert",class:ua({wrapable:w}),style:{color:g,background:v}},[c(),b(),h()]),[[at,s.show]])}}});const tC=X(eC),[nC,oC]=Y("notify"),aC=["lockScroll","position","show","teleport","zIndex"],lC=me({},ta,{type:Z("danger"),color:String,message:q,position:Z("top"),className:He,background:String,lockScroll:Boolean});var iC=U({name:nC,props:lC,emits:["update:show"],setup(e,{emit:t,slots:n}){const o=a=>t("update:show",a);return()=>f(Kt,Ce({class:[oC([e.type]),e.className],style:{color:e.color,background:e.background},overlay:!1,duration:.2,"onUpdate:show":o},Pe(e,aC)),{default:()=>[n.default?n.default():e.message]})}});const rC=X(iC),[sC,ka]=Y("key"),cC=f("svg",{class:ka("collapse-icon"),viewBox:"0 0 30 24"},[f("path",{d:"M26 13h-2v2h2v-2zm-8-3h2V8h-2v2zm2-4h2V4h-2v2zm2 4h4V4h-2v4h-2v2zm-7 14 3-3h-6l3 3zM6 13H4v2h2v-2zm16 0H8v2h14v-2zm-12-3h2V8h-2v2zM28 0l1 1 1 1v15l-1 2H1l-1-2V2l1-1 1-1zm0 2H2v15h26V2zM6 4v2H4V4zm10 2h2V4h-2v2zM8 9v1H4V8zm8 0v1h-2V8zm-6-5v2H8V4zm4 0v2h-2V4z",fill:"currentColor"},null)]),uC=f("svg",{class:ka("delete-icon"),viewBox:"0 0 32 22"},[f("path",{d:"M28 0a4 4 0 0 1 4 4v14a4 4 0 0 1-4 4H10.4a2 2 0 0 1-1.4-.6L1 13.1c-.6-.5-.9-1.3-.9-2 0-1 .3-1.7.9-2.2L9 .6a2 2 0 0 1 1.4-.6zm0 2H10.4l-8.2 8.3a1 1 0 0 0-.3.7c0 .3.1.5.3.7l8.2 8.4H28a2 2 0 0 0 2-2V4c0-1.1-.9-2-2-2zm-5 4a1 1 0 0 1 .7.3 1 1 0 0 1 0 1.4L20.4 11l3.3 3.3c.2.2.3.5.3.7 0 .3-.1.5-.3.7a1 1 0 0 1-.7.3 1 1 0 0 1-.7-.3L19 12.4l-3.4 3.3a1 1 0 0 1-.6.3 1 1 0 0 1-.7-.3 1 1 0 0 1-.3-.7c0-.2.1-.5.3-.7l3.3-3.3-3.3-3.3A1 1 0 0 1 14 7c0-.3.1-.5.3-.7A1 1 0 0 1 15 6a1 1 0 0 1 .6.3L19 9.6l3.3-3.3A1 1 0 0 1 23 6z",fill:"currentColor"},null)]);var Yi=U({name:sC,props:{type:String,text:q,color:String,wider:Boolean,large:Boolean,loading:Boolean},emits:["press"],setup(e,{emit:t,slots:n}){const o=M(!1),a=Bt(),l=c=>{a.start(c),o.value=!0},i=c=>{a.move(c),a.direction.value&&(o.value=!1)},r=c=>{o.value&&(n.default||Le(c),o.value=!1,t("press",e.text,e.type))},s=()=>{if(e.loading)return f(Gt,{class:ka("loading-icon")},null);const c=n.default?n.default():e.text;switch(e.type){case"delete":return c||uC;case"extra":return c||cC;default:return c}};return()=>f("div",{class:ka("wrapper",{wider:e.wider}),onTouchstartPassive:l,onTouchmovePassive:i,onTouchend:r,onTouchcancel:r},[f("div",{role:"button",tabindex:0,class:ka([e.color,{large:e.large,active:o.value,delete:e.type==="delete"}])},[s()])])}});const[dC,Fn]=Y("number-keyboard"),fC={show:Boolean,title:String,theme:Z("default"),zIndex:q,teleport:[String,Object],maxlength:se(1/0),modelValue:Z(""),transition:z,blurOnClose:z,showDeleteKey:z,randomKeyOrder:Boolean,closeButtonText:String,deleteButtonText:String,closeButtonLoading:Boolean,hideOnClickOutside:z,safeAreaInsetBottom:z,extraKey:{type:[String,Array],default:""}};function hC(e){for(let t=e.length-1;t>0;t--){const n=Math.floor(Math.random()*(t+1)),o=e[t];e[t]=e[n],e[n]=o}return e}var mC=U({name:dC,inheritAttrs:!1,props:fC,emits:["show","hide","blur","input","close","delete","update:modelValue"],setup(e,{emit:t,slots:n,attrs:o}){const a=M(),l=()=>{const g=Array(9).fill("").map((w,v)=>({text:v+1}));return e.randomKeyOrder&&hC(g),g},i=()=>[...l(),{text:e.extraKey,type:"extra"},{text:0},{text:e.showDeleteKey?e.deleteButtonText:"",type:e.showDeleteKey?"delete":""}],r=()=>{const g=l(),{extraKey:w}=e,v=Array.isArray(w)?w:[w];return v.length===0?g.push({text:0,wider:!0}):v.length===1?g.push({text:0,wider:!0},{text:v[0],type:"extra"}):v.length===2&&g.push({text:v[0],type:"extra"},{text:0},{text:v[1],type:"extra"}),g},s=B(()=>e.theme==="custom"?r():i()),c=()=>{e.show&&t("blur")},u=()=>{t("close"),e.blurOnClose&&c()},d=()=>t(e.show?"show":"hide"),h=(g,w)=>{if(g===""){w==="extra"&&c();return}const v=e.modelValue;w==="delete"?(t("delete"),t("update:modelValue",v.slice(0,v.length-1))):w==="close"?u():v.length<+e.maxlength&&(t("input",g),t("update:modelValue",v+g))},m=()=>{const{title:g,theme:w,closeButtonText:v}=e,x=n["title-left"],S=v&&w==="default";if(g||S||x)return f("div",{class:Fn("header")},[x&&f("span",{class:Fn("title-left")},[x()]),g&&f("h2",{class:Fn("title")},[g]),S&&f("button",{type:"button",class:[Fn("close"),ct],onClick:u},[v])])},b=()=>s.value.map(g=>{const w={};return g.type==="delete"&&(w.default=n.delete),g.type==="extra"&&(w.default=n["extra-key"]),f(Yi,{key:g.text,text:g.text,type:g.type,wider:g.wider,color:g.color,onPress:h},w)}),p=()=>{if(e.theme==="custom")return f("div",{class:Fn("sidebar")},[e.showDeleteKey&&f(Yi,{large:!0,text:e.deleteButtonText,type:"delete",onPress:h},{default:n.delete}),f(Yi,{large:!0,text:e.closeButtonText,type:"close",color:"blue",loading:e.closeButtonLoading,onPress:h},null)])};return te(()=>e.show,g=>{e.transition||t(g?"show":"hide")}),e.hideOnClickOutside&&ni(a,c,{eventName:"touchstart"}),()=>{const g=m(),w=f(Ql,{name:e.transition?"van-slide-up":""},{default:()=>[et(f("div",Ce({ref:a,style:$n(e.zIndex),class:Fn({unfit:!e.safeAreaInsetBottom,"with-title":!!g}),onAnimationend:d,onTouchstartPassive:es},o),[g,f("div",{class:Fn("body")},[f("div",{class:Fn("keys")},[b()]),p()])]),[[at,e.show]])]});return e.teleport?f(po,{to:e.teleport},{default:()=>[w]}):w}}});const vC=X(mC),[gC,$o,vu]=Y("pagination"),Gi=(e,t,n)=>({number:e,text:t,active:n}),bC={mode:Z("multi"),prevText:String,nextText:String,pageCount:se(0),modelValue:Ze(0),totalItems:se(0),showPageSize:se(5),itemsPerPage:se(10),forceEllipses:Boolean,showPrevButton:z,showNextButton:z};var yC=U({name:gC,props:bC,emits:["change","update:modelValue"],setup(e,{emit:t,slots:n}){const o=B(()=>{const{pageCount:u,totalItems:d,itemsPerPage:h}=e,m=+u||Math.ceil(+d/+h);return Math.max(1,m)}),a=B(()=>{const u=[],d=o.value,h=+e.showPageSize,{modelValue:m,forceEllipses:b}=e;let p=1,g=d;const w=hd&&(g=d,p=g-h+1));for(let v=p;v<=g;v++){const x=Gi(v,v,v===m);u.push(x)}if(w&&h>0&&b){if(p>1){const v=Gi(p-1,"...");u.unshift(v)}if(g{u=Je(u,1,o.value),e.modelValue!==u&&(t("update:modelValue",u),d&&t("change",u))};Jo(()=>l(e.modelValue));const i=()=>f("li",{class:$o("page-desc")},[n.pageDesc?n.pageDesc():`${e.modelValue}/${o.value}`]),r=()=>{const{mode:u,modelValue:d,showPrevButton:h}=e;if(!h)return;const m=n["prev-text"],b=d===1;return f("li",{class:[$o("item",{disabled:b,border:u==="simple",prev:!0}),_a]},[f("button",{type:"button",disabled:b,onClick:()=>l(d-1,!0)},[m?m():e.prevText||vu("prev")])])},s=()=>{const{mode:u,modelValue:d,showNextButton:h}=e;if(!h)return;const m=n["next-text"],b=d===o.value;return f("li",{class:[$o("item",{disabled:b,border:u==="simple",next:!0}),_a]},[f("button",{type:"button",disabled:b,onClick:()=>l(d+1,!0)},[m?m():e.nextText||vu("next")])])},c=()=>a.value.map(u=>f("li",{class:[$o("item",{active:u.active,page:!0}),_a]},[f("button",{type:"button","aria-current":u.active||void 0,onClick:()=>l(u.number,!0)},[n.page?n.page(u):u.text])]));return()=>f("nav",{role:"navigation",class:$o()},[f("ul",{class:$o("items")},[r(),e.mode==="simple"?i():c(),s()])])}});const pC=X(yC),[wC,da]=Y("password-input"),xC={info:String,mask:z,value:Z(""),gutter:q,length:se(6),focused:Boolean,errorInfo:String};var SC=U({name:wC,props:xC,emits:["focus"],setup(e,{emit:t}){const n=a=>{a.stopPropagation(),t("focus",a)},o=()=>{const a=[],{mask:l,value:i,gutter:r,focused:s}=e,c=+e.length;for(let u=0;u{const a=e.errorInfo||e.info;return f("div",{class:da()},[f("ul",{class:[da("security"),{[_a]:!e.gutter}],onTouchstartPassive:n},[o()]),a&&f("div",{class:da(e.errorInfo?"error-info":"info")},[a])])}}});const CC=X(SC),TC=X(D0);function Xt(e){if(e==null)return window;if(e.toString()!=="[object Window]"){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function ys(e){var t=Xt(e).Element;return e instanceof t||e instanceof Element}function zt(e){var t=Xt(e).HTMLElement;return e instanceof t||e instanceof HTMLElement}function Oh(e){if(typeof ShadowRoot>"u")return!1;var t=Xt(e).ShadowRoot;return e instanceof t||e instanceof ShadowRoot}var Zo=Math.round;function Pr(){var e=navigator.userAgentData;return e!=null&&e.brands?e.brands.map(function(t){return t.brand+"/"+t.version}).join(" "):navigator.userAgent}function _C(){return!/^((?!chrome|android).)*safari/i.test(Pr())}function Vl(e,t,n){t===void 0&&(t=!1),n===void 0&&(n=!1);var o=e.getBoundingClientRect(),a=1,l=1;t&&zt(e)&&(a=e.offsetWidth>0&&Zo(o.width)/e.offsetWidth||1,l=e.offsetHeight>0&&Zo(o.height)/e.offsetHeight||1);var i=ys(e)?Xt(e):window,r=i.visualViewport,s=!_C()&&n,c=(o.left+(s&&r?r.offsetLeft:0))/a,u=(o.top+(s&&r?r.offsetTop:0))/l,d=o.width/a,h=o.height/l;return{width:d,height:h,top:u,right:c+d,bottom:u+h,left:c,x:c,y:u}}function Rh(e){var t=Xt(e),n=t.pageXOffset,o=t.pageYOffset;return{scrollLeft:n,scrollTop:o}}function EC(e){return{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}}function kC(e){return e===Xt(e)||!zt(e)?Rh(e):EC(e)}function Pn(e){return e?(e.nodeName||"").toLowerCase():null}function hi(e){return((ys(e)?e.ownerDocument:e.document)||window.document).documentElement}function AC(e){return Vl(hi(e)).left+Rh(e).scrollLeft}function In(e){return Xt(e).getComputedStyle(e)}function ps(e){var t=In(e),n=t.overflow,o=t.overflowX,a=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+a+o)}function PC(e){var t=e.getBoundingClientRect(),n=Zo(t.width)/e.offsetWidth||1,o=Zo(t.height)/e.offsetHeight||1;return n!==1||o!==1}function IC(e,t,n){n===void 0&&(n=!1);var o=zt(t),a=zt(t)&&PC(t),l=hi(t),i=Vl(e,a,n),r={scrollLeft:0,scrollTop:0},s={x:0,y:0};return(o||!o&&!n)&&((Pn(t)!=="body"||ps(l))&&(r=kC(t)),zt(t)?(s=Vl(t,!0),s.x+=t.clientLeft,s.y+=t.clientTop):l&&(s.x=AC(l))),{x:i.left+r.scrollLeft-s.x,y:i.top+r.scrollTop-s.y,width:i.width,height:i.height}}function OC(e){var t=Vl(e),n=e.offsetWidth,o=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-o)<=1&&(o=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:o}}function ws(e){return Pn(e)==="html"?e:e.assignedSlot||e.parentNode||(Oh(e)?e.host:null)||hi(e)}function Dh(e){return["html","body","#document"].indexOf(Pn(e))>=0?e.ownerDocument.body:zt(e)&&ps(e)?e:Dh(ws(e))}function Cl(e,t){var n;t===void 0&&(t=[]);var o=Dh(e),a=o===((n=e.ownerDocument)==null?void 0:n.body),l=Xt(o),i=a?[l].concat(l.visualViewport||[],ps(o)?o:[]):o,r=t.concat(i);return a?r:r.concat(Cl(ws(i)))}function RC(e){return["table","td","th"].indexOf(Pn(e))>=0}function gu(e){return!zt(e)||In(e).position==="fixed"?null:e.offsetParent}function DC(e){var t=/firefox/i.test(Pr()),n=/Trident/i.test(Pr());if(n&&zt(e)){var o=In(e);if(o.position==="fixed")return null}var a=ws(e);for(Oh(a)&&(a=a.host);zt(a)&&["html","body"].indexOf(Pn(a))<0;){var l=In(a);if(l.transform!=="none"||l.perspective!=="none"||l.contain==="paint"||["transform","perspective"].indexOf(l.willChange)!==-1||t&&l.willChange==="filter"||t&&l.filter&&l.filter!=="none")return a;a=a.parentNode}return null}function $h(e){for(var t=Xt(e),n=gu(e);n&&RC(n)&&In(n).position==="static";)n=gu(n);return n&&(Pn(n)==="html"||Pn(n)==="body"&&In(n).position==="static")?t:n||DC(e)||t}var Uo="top",Ll="bottom",Fa="right",bo="left",Bh="auto",$C=[Uo,Ll,Fa,bo],Mh="start",Nl="end",BC=[].concat($C,[Bh]).reduce(function(e,t){return e.concat([t,t+"-"+Mh,t+"-"+Nl])},[]),MC="beforeRead",VC="read",LC="afterRead",NC="beforeMain",FC="main",HC="afterMain",zC="beforeWrite",jC="write",WC="afterWrite",Ir=[MC,VC,LC,NC,FC,HC,zC,jC,WC];function UC(e){var t=new Map,n=new Set,o=[];e.forEach(function(l){t.set(l.name,l)});function a(l){n.add(l.name);var i=[].concat(l.requires||[],l.requiresIfExists||[]);i.forEach(function(r){if(!n.has(r)){var s=t.get(r);s&&a(s)}}),o.push(l)}return e.forEach(function(l){n.has(l.name)||a(l)}),o}function YC(e){var t=UC(e);return Ir.reduce(function(n,o){return n.concat(t.filter(function(a){return a.phase===o}))},[])}function GC(e){var t;return function(){return t||(t=new Promise(function(n){Promise.resolve().then(function(){t=void 0,n(e())})})),t}}function Hn(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o=0?"x":"y"}function QC(e){var t=e.reference,n=e.element,o=e.placement,a=o?mi(o):null,l=o?Vh(o):null,i=t.x+t.width/2-n.width/2,r=t.y+t.height/2-n.height/2,s;switch(a){case Uo:s={x:i,y:t.y-n.height};break;case Ll:s={x:i,y:t.y+t.height};break;case Fa:s={x:t.x+t.width,y:r};break;case bo:s={x:t.x-n.width,y:r};break;default:s={x:t.x,y:t.y}}var c=a?JC(a):null;if(c!=null){var u=c==="y"?"height":"width";switch(l){case Mh:s[c]=s[c]-(t[u]/2-n[u]/2);break;case Nl:s[c]=s[c]+(t[u]/2-n[u]/2);break}}return s}var yu="Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.",e1="Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.",pu={placement:"bottom",modifiers:[],strategy:"absolute"};function wu(){for(var e=arguments.length,t=new Array(e),n=0;n100){console.error(e1);break}if(u.reset===!0){u.reset=!1,y=-1;continue}var T=u.orderedModifiers[y],O=T.fn,C=T.options,I=C===void 0?{}:C,R=T.name;typeof O=="function"&&(u=O({state:u,options:I,name:R,instance:m})||u)}}},update:GC(function(){return new Promise(function(g){m.forceUpdate(),g(u)})}),destroy:function(){p(),h=!0}};if(!wu(r,s))return console.error(yu),m;m.setOptions(c).then(function(g){!h&&c.onFirstUpdate&&c.onFirstUpdate(g)});function b(){u.orderedModifiers.forEach(function(g){var w=g.name,v=g.options,x=v===void 0?{}:v,S=g.effect;if(typeof S=="function"){var y=S({state:u,name:w,instance:m,options:x}),T=function(){};d.push(y||T)}})}function p(){d.forEach(function(g){return g()}),d=[]}return m}}var ml={passive:!0};function n1(e){var t=e.state,n=e.instance,o=e.options,a=o.scroll,l=a===void 0?!0:a,i=o.resize,r=i===void 0?!0:i,s=Xt(t.elements.popper),c=[].concat(t.scrollParents.reference,t.scrollParents.popper);return l&&c.forEach(function(u){u.addEventListener("scroll",n.update,ml)}),r&&s.addEventListener("resize",n.update,ml),function(){l&&c.forEach(function(u){u.removeEventListener("scroll",n.update,ml)}),r&&s.removeEventListener("resize",n.update,ml)}}var o1={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:n1,data:{}};function a1(e){var t=e.state,n=e.name;t.modifiersData[n]=QC({reference:t.rects.reference,element:t.rects.popper,placement:t.placement})}var l1={name:"popperOffsets",enabled:!0,phase:"read",fn:a1,data:{}},i1={top:"auto",right:"auto",bottom:"auto",left:"auto"};function r1(e){var t=e.x,n=e.y,o=window,a=o.devicePixelRatio||1;return{x:Zo(t*a)/a||0,y:Zo(n*a)/a||0}}function xu(e){var t,n=e.popper,o=e.popperRect,a=e.placement,l=e.variation,i=e.offsets,r=e.position,s=e.gpuAcceleration,c=e.adaptive,u=e.roundOffsets,d=e.isFixed,h=i.x,m=h===void 0?0:h,b=i.y,p=b===void 0?0:b,g=typeof u=="function"?u({x:m,y:p}):{x:m,y:p};m=g.x,p=g.y;var w=i.hasOwnProperty("x"),v=i.hasOwnProperty("y"),x=bo,S=Uo,y=window;if(c){var T=$h(n),O="clientHeight",C="clientWidth";if(T===Xt(n)&&(T=hi(n),In(T).position!=="static"&&r==="absolute"&&(O="scrollHeight",C="scrollWidth")),T=T,a===Uo||(a===bo||a===Fa)&&l===Nl){S=Ll;var I=d&&T===y&&y.visualViewport?y.visualViewport.height:T[O];p-=I-o.height,p*=s?1:-1}if(a===bo||(a===Uo||a===Ll)&&l===Nl){x=Fa;var R=d&&T===y&&y.visualViewport?y.visualViewport.width:T[C];m-=R-o.width,m*=s?1:-1}}var A=Object.assign({position:r},c&&i1),_=u===!0?r1({x:m,y:p}):{x:m,y:p};if(m=_.x,p=_.y,s){var D;return Object.assign({},A,(D={},D[S]=v?"0":"",D[x]=w?"0":"",D.transform=(y.devicePixelRatio||1)<=1?"translate("+m+"px, "+p+"px)":"translate3d("+m+"px, "+p+"px, 0)",D))}return Object.assign({},A,(t={},t[S]=v?p+"px":"",t[x]=w?m+"px":"",t.transform="",t))}function s1(e){var t=e.state,n=e.options,o=n.gpuAcceleration,a=o===void 0?!0:o,l=n.adaptive,i=l===void 0?!0:l,r=n.roundOffsets,s=r===void 0?!0:r;{var c=In(t.elements.popper).transitionProperty||"";i&&["transform","top","right","bottom","left"].some(function(d){return c.indexOf(d)>=0})&&console.warn(["Popper: Detected CSS transitions on at least one of the following",'CSS properties: "transform", "top", "right", "bottom", "left".',` + +`,'Disable the "computeStyles" modifier\'s `adaptive` option to allow',"for smooth transitions, or remove these properties from the CSS","transition declaration on the popper element if only transitioning","opacity or background-color for example.",` + +`,"We recommend using the popper element as a wrapper around an inner","element that can have any CSS property transitioned for animations."].join(" "))}var u={placement:mi(t.placement),variation:Vh(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:a,isFixed:t.options.strategy==="fixed"};t.modifiersData.popperOffsets!=null&&(t.styles.popper=Object.assign({},t.styles.popper,xu(Object.assign({},u,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:i,roundOffsets:s})))),t.modifiersData.arrow!=null&&(t.styles.arrow=Object.assign({},t.styles.arrow,xu(Object.assign({},u,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:s})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})}var c1={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:s1,data:{}};function u1(e){var t=e.state;Object.keys(t.elements).forEach(function(n){var o=t.styles[n]||{},a=t.attributes[n]||{},l=t.elements[n];!zt(l)||!Pn(l)||(Object.assign(l.style,o),Object.keys(a).forEach(function(i){var r=a[i];r===!1?l.removeAttribute(i):l.setAttribute(i,r===!0?"":r)}))})}function d1(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach(function(o){var a=t.elements[o],l=t.attributes[o]||{},i=Object.keys(t.styles.hasOwnProperty(o)?t.styles[o]:n[o]),r=i.reduce(function(s,c){return s[c]="",s},{});!zt(a)||!Pn(a)||(Object.assign(a.style,r),Object.keys(l).forEach(function(s){a.removeAttribute(s)}))})}}var f1={name:"applyStyles",enabled:!0,phase:"write",fn:u1,effect:d1,requires:["computeStyles"]},h1=[o1,l1,c1,f1],m1=t1({defaultModifiers:h1});function v1(e,t,n){var o=mi(e),a=[bo,Uo].indexOf(o)>=0?-1:1,l=typeof n=="function"?n(Object.assign({},t,{placement:e})):n,i=l[0],r=l[1];return i=i||0,r=(r||0)*a,[bo,Fa].indexOf(o)>=0?{x:r,y:i}:{x:i,y:r}}function g1(e){var t=e.state,n=e.options,o=e.name,a=n.offset,l=a===void 0?[0,0]:a,i=BC.reduce(function(u,d){return u[d]=v1(d,t.rects,l),u},{}),r=i[t.placement],s=r.x,c=r.y;t.modifiersData.popperOffsets!=null&&(t.modifiersData.popperOffsets.x+=s,t.modifiersData.popperOffsets.y+=c),t.modifiersData[o]=i}var b1={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:g1};const[y1,io]=Y("popover"),p1=["overlay","duration","teleport","overlayStyle","overlayClass","closeOnClickOverlay"],w1={show:Boolean,theme:Z("light"),overlay:Boolean,actions:Fe(),actionsDirection:Z("vertical"),trigger:Z("click"),duration:q,showArrow:z,placement:Z("bottom"),iconPrefix:String,overlayClass:He,overlayStyle:Object,closeOnClickAction:z,closeOnClickOverlay:z,closeOnClickOutside:z,offset:{type:Array,default:()=>[0,8]},teleport:{type:[String,Object],default:"body"}};var x1=U({name:y1,props:w1,emits:["select","touchstart","update:show"],setup(e,{emit:t,slots:n,attrs:o}){let a;const l=M(),i=M(),r=M(),s=is(()=>e.show,v=>t("update:show",v)),c=()=>({placement:e.placement,modifiers:[{name:"computeStyles",options:{adaptive:!1,gpuAcceleration:!1}},me({},b1,{options:{offset:e.offset}})]}),u=()=>i.value&&r.value?m1(i.value,r.value.popupRef.value,c()):null,d=()=>{Se(()=>{s.value&&(a?a.setOptions(c()):(a=u(),Dt&&(window.addEventListener("animationend",d),window.addEventListener("transitionend",d))))})},h=v=>{s.value=v},m=()=>{e.trigger==="click"&&(s.value=!s.value)},b=(v,x)=>{v.disabled||(t("select",v,x),e.closeOnClickAction&&(s.value=!1))},p=()=>{s.value&&e.closeOnClickOutside&&(!e.overlay||e.closeOnClickOverlay)&&(s.value=!1)},g=(v,x)=>n.action?n.action({action:v,index:x}):[v.icon&&f(xe,{name:v.icon,classPrefix:e.iconPrefix,class:io("action-icon")},null),f("div",{class:[io("action-text"),{[ns]:e.actionsDirection==="vertical"}]},[v.text])],w=(v,x)=>{const{icon:S,color:y,disabled:T,className:O}=v;return f("div",{role:"menuitem",class:[io("action",{disabled:T,"with-icon":S}),{[iy]:e.actionsDirection==="horizontal"},O],style:{color:y},tabindex:T?void 0:0,"aria-disabled":T||void 0,onClick:()=>b(v,x)},[g(v,x)])};return We(()=>{d(),Jo(()=>{var v;l.value=(v=r.value)==null?void 0:v.popupRef.value})}),dn(()=>{a&&(Dt&&(window.removeEventListener("animationend",d),window.removeEventListener("transitionend",d)),a.destroy(),a=null)}),te(()=>[s.value,e.offset,e.placement],d),ni([i,l],p,{eventName:"touchstart"}),()=>{var v;return f(Ke,null,[f("span",{ref:i,class:io("wrapper"),onClick:m},[(v=n.reference)==null?void 0:v.call(n)]),f(Kt,Ce({ref:r,show:s.value,class:io([e.theme]),position:"",transition:"van-popover-zoom",lockScroll:!1,"onUpdate:show":h},o,Bl(),Pe(e,p1)),{default:()=>[e.showArrow&&f("div",{class:io("arrow")},null),f("div",{role:"menu",class:io("content",e.actionsDirection)},[n.default?n.default():e.actions.map(w)])]})])}}});const S1=X(x1),[C1,Ki]=Y("progress"),T1={color:String,inactive:Boolean,pivotText:String,textColor:String,showPivot:z,pivotColor:String,trackColor:String,strokeWidth:q,percentage:{type:q,default:0,validator:e=>+e>=0&&+e<=100}};var _1=U({name:C1,props:T1,setup(e){const t=B(()=>e.inactive?void 0:e.color),n=a=>Math.min(Math.max(+a,0),100),o=()=>{const{textColor:a,pivotText:l,pivotColor:i,percentage:r}=e,s=n(r),c=l??`${r}%`;if(e.showPivot&&c){const u={color:a,left:`${s}%`,transform:`translate(-${s}%,-50%)`,background:i||t.value};return f("span",{style:u,class:Ki("pivot",{inactive:e.inactive})},[c])}};return()=>{const{trackColor:a,percentage:l,strokeWidth:i}=e,r=n(l),s={background:a,height:pe(i)},c={width:`${r}%`,background:t.value};return f("div",{class:Ki(),style:s},[f("span",{class:Ki("portion",{inactive:e.inactive}),style:c},null),o()])}}});const E1=X(_1),[k1,fa,A1]=Y("pull-refresh"),Lh=50,P1=["pulling","loosing","success"],I1={disabled:Boolean,modelValue:Boolean,headHeight:se(Lh),successText:String,pullingText:String,loosingText:String,loadingText:String,pullDistance:q,successDuration:se(500),animationDuration:se(300)};var O1=U({name:k1,props:I1,emits:["change","refresh","update:modelValue"],setup(e,{emit:t,slots:n}){let o;const a=M(),l=M(),i=ea(a),r=je({status:"normal",distance:0,duration:0}),s=Bt(),c=()=>{if(e.headHeight!==Lh)return{height:`${e.headHeight}px`}},u=()=>r.status!=="loading"&&r.status!=="success"&&!e.disabled,d=S=>{const y=+(e.pullDistance||e.headHeight);return S>y&&(S{const T=+(e.pullDistance||e.headHeight);r.distance=S,y?r.status="loading":S===0?r.status="normal":S{const{status:S}=r;return S==="normal"?"":e[`${S}Text`]||A1(S)},b=()=>{const{status:S,distance:y}=r;if(n[S])return n[S]({distance:y});const T=[];return P1.includes(S)&&T.push(f("div",{class:fa("text")},[m()])),S==="loading"&&T.push(f(Gt,{class:fa("loading")},{default:m})),T},p=()=>{r.status="success",setTimeout(()=>{h(0)},+e.successDuration)},g=S=>{o=An(i.value)===0,o&&(r.duration=0,s.start(S))},w=S=>{u()&&g(S)},v=S=>{if(u()){o||g(S);const{deltaY:y}=s;s.move(S),o&&y.value>=0&&s.isVertical()&&(Le(S),h(d(y.value)))}},x=()=>{o&&s.deltaY.value&&u()&&(r.duration=+e.animationDuration,r.status==="loosing"?(h(+e.headHeight,!0),t("update:modelValue",!0),Se(()=>t("refresh"))):h(0))};return te(()=>e.modelValue,S=>{r.duration=+e.animationDuration,S?h(+e.headHeight,!0):n.success||e.successText?p():h(0,!1)}),Ge("touchmove",v,{target:l}),()=>{var S;const y={transitionDuration:`${r.duration}ms`,transform:r.distance?`translate3d(0,${r.distance}px, 0)`:""};return f("div",{ref:a,class:fa()},[f("div",{ref:l,class:fa("track"),style:y,onTouchstartPassive:w,onTouchend:x,onTouchcancel:x},[f("div",{class:fa("head"),style:c()},[b()]),(S=n.default)==null?void 0:S.call(n)])])}}});const R1=X(O1),[D1,vl]=Y("rate");function $1(e,t,n,o){return e>=t?{status:"full",value:1}:e+.5>=t&&n&&!o?{status:"half",value:.5}:e+1>=t&&n&&o?{status:"half",value:Math.round((e-t+1)*1e10)/1e10}:{status:"void",value:0}}const B1={size:q,icon:Z("star"),color:String,count:se(5),gutter:q,clearable:Boolean,readonly:Boolean,disabled:Boolean,voidIcon:Z("star-o"),allowHalf:Boolean,voidColor:String,touchable:z,iconPrefix:String,modelValue:Ze(0),disabledColor:String};var M1=U({name:D1,props:B1,emits:["change","update:modelValue"],setup(e,{emit:t}){const n=Bt(),[o,a]=Wa(),l=M(),i=B(()=>e.readonly||e.disabled),r=B(()=>i.value||!e.touchable),s=B(()=>Array(+e.count).fill("").map((x,S)=>$1(e.modelValue,S+1,e.allowHalf,e.readonly)));let c,u,d=Number.MAX_SAFE_INTEGER,h=Number.MIN_SAFE_INTEGER;const m=()=>{u=Oe(l);const x=o.value.map(Oe);c=[],x.forEach((S,y)=>{d=Math.min(S.top,d),h=Math.max(S.top,h),e.allowHalf?c.push({score:y+.5,left:S.left,top:S.top,height:S.height},{score:y+1,left:S.left+S.width/2,top:S.top,height:S.height}):c.push({score:y+1,left:S.left,top:S.top,height:S.height})})},b=(x,S)=>{for(let y=c.length-1;y>0;y--)if(S>=u.top&&S<=u.bottom){if(x>c[y].left&&S>=c[y].top&&S<=c[y].top+c[y].height)return c[y].score}else{const T=Sc[y].left&&c[y].top===T)return c[y].score}return e.allowHalf?.5:1},p=x=>{i.value||x===e.modelValue||(t("update:modelValue",x),t("change",x))},g=x=>{r.value||(n.start(x),m())},w=x=>{if(!r.value&&(n.move(x),n.isHorizontal()&&!n.isTap.value)){const{clientX:S,clientY:y}=x.touches[0];Le(x),p(b(S,y))}},v=(x,S)=>{const{icon:y,size:T,color:O,count:C,gutter:I,voidIcon:R,disabled:A,voidColor:_,allowHalf:D,iconPrefix:j,disabledColor:ae}=e,N=S+1,ne=x.status==="full",oe=x.status==="void",Te=D&&x.value>0&&x.value<1;let ke;I&&N!==+C&&(ke={paddingRight:pe(I)});const re=H=>{m();let ee=D?b(H.clientX,H.clientY):N;e.clearable&&n.isTap.value&&ee===e.modelValue&&(ee=0),p(ee)};return f("div",{key:S,ref:a(S),role:"radio",style:ke,class:vl("item"),tabindex:A?void 0:0,"aria-setsize":C,"aria-posinset":N,"aria-checked":!oe,onClick:re},[f(xe,{size:T,name:ne?y:R,class:vl("icon",{disabled:A,full:ne}),color:A?ae:ne?O:_,classPrefix:j},null),Te&&f(xe,{size:T,style:{width:x.value+"em"},name:oe?R:y,class:vl("icon",["half",{disabled:A,full:!oe}]),color:A?ae:oe?_:O,classPrefix:j},null)])};return Jn(()=>e.modelValue),Ge("touchmove",w,{target:l}),()=>f("div",{ref:l,role:"radiogroup",class:vl({readonly:e.readonly,disabled:e.disabled}),tabindex:e.disabled?void 0:0,"aria-disabled":e.disabled,"aria-readonly":e.readonly,onTouchstartPassive:g},[s.value.map(v)])}});const V1=X(M1),L1={figureArr:Fe(),delay:Number,duration:Ze(2),isStart:Boolean,direction:Z("down"),height:Ze(40)},[N1,qi]=Y("rolling-text-item");var F1=U({name:N1,props:L1,setup(e){const t=B(()=>e.direction==="down"?e.figureArr.slice().reverse():e.figureArr),n=B(()=>`-${e.height*(e.figureArr.length-1)}px`),o=B(()=>({lineHeight:pe(e.height)})),a=B(()=>({height:pe(e.height),"--van-translate":n.value,"--van-duration":e.duration+"s","--van-delay":e.delay+"s"}));return()=>f("div",{class:qi([e.direction]),style:a.value},[f("div",{class:qi("box",{animate:e.isStart})},[Array.isArray(t.value)&&t.value.map(l=>f("div",{class:qi("item"),style:o.value},[l]))])])}});const[H1,z1]=Y("rolling-text"),j1={startNum:Ze(0),targetNum:Number,textList:Fe(),duration:Ze(2),autoStart:z,direction:Z("down"),stopOrder:Z("ltr"),height:Ze(40)},W1=2;var U1=U({name:H1,props:j1,setup(e){const t=B(()=>Array.isArray(e.textList)&&e.textList.length),n=B(()=>t.value?e.textList[0].length:`${Math.max(e.startNum,e.targetNum)}`.length),o=d=>{const h=[];for(let m=0;mt.value?new Array(n.value).fill(""):Nt(e.targetNum,n.value).split("")),l=B(()=>Nt(e.startNum,n.value).split("")),i=d=>{const h=+l.value[d],m=+a.value[d],b=[];for(let p=h;p<=9;p++)b.push(p);for(let p=0;p<=W1;p++)for(let g=0;g<=9;g++)b.push(g);for(let p=0;p<=m;p++)b.push(p);return b},r=(d,h)=>e.stopOrder==="ltr"?.2*d:.2*(h-1-d),s=M(e.autoStart),c=()=>{s.value=!0},u=()=>{s.value=!1,e.autoStart&&st(()=>c())};return te(()=>e.autoStart,d=>{d&&c()}),_e({start:c,reset:u}),()=>f("div",{class:z1()},[a.value.map((d,h)=>f(F1,{figureArr:t.value?o(h):i(h),duration:e.duration,direction:e.direction,isStart:s.value,height:e.height,delay:r(h,n.value)},null))])}});const Y1=X(U1),G1=X(Hw),[K1,ha,q1]=Y("search"),X1=me({},us,{label:String,shape:Z("square"),leftIcon:Z("search"),clearable:z,actionText:String,background:String,showAction:Boolean});var Z1=U({name:K1,props:X1,emits:["blur","focus","clear","search","cancel","clickInput","clickLeftIcon","clickRightIcon","update:modelValue"],setup(e,{emit:t,slots:n,attrs:o}){const a=na(),l=M(),i=()=>{n.action||(t("update:modelValue",""),t("cancel"))},r=y=>{y.keyCode===13&&(Le(y),t("search",e.modelValue))},s=()=>e.id||`${a}-input`,c=()=>{if(n.label||e.label)return f("label",{class:ha("label"),for:s(),"data-allow-mismatch":"attribute"},[n.label?n.label():e.label])},u=()=>{if(e.showAction){const y=e.actionText||q1("cancel");return f("div",{class:ha("action"),role:"button",tabindex:0,onClick:i},[n.action?n.action():y])}},d=()=>{var y;return(y=l.value)==null?void 0:y.blur()},h=()=>{var y;return(y=l.value)==null?void 0:y.focus()},m=y=>t("blur",y),b=y=>t("focus",y),p=y=>t("clear",y),g=y=>t("clickInput",y),w=y=>t("clickLeftIcon",y),v=y=>t("clickRightIcon",y),x=Object.keys(us),S=()=>{const y=me({},o,Pe(e,x),{id:s()}),T=O=>t("update:modelValue",O);return f(Cn,Ce({ref:l,type:"search",class:ha("field",{"with-message":y.errorMessage}),border:!1,labelAlign:"left",onBlur:m,onFocus:b,onClear:p,onKeypress:r,onClickInput:g,onClickLeftIcon:w,onClickRightIcon:v,"onUpdate:modelValue":T},y),Pe(n,["left-icon","right-icon"]))};return _e({focus:h,blur:d}),()=>{var y;return f("div",{class:ha({"show-action":e.showAction}),style:{background:e.background}},[(y=n.left)==null?void 0:y.call(n),f("div",{class:ha("content",e.shape)},[c(),S()]),u()])}}});const J1=X(Z1),Q1=e=>e?.includes("/"),eT=[...as,"round","closeOnPopstate","safeAreaInsetBottom"],tT={qq:"qq",link:"link-o",weibo:"weibo",qrcode:"qr",poster:"photo-o",wechat:"wechat","weapp-qrcode":"miniprogram-o","wechat-moments":"wechat-moments"},[nT,Vt,oT]=Y("share-sheet"),aT=me({},ta,{title:String,round:z,options:Fe(),cancelText:String,description:String,closeOnPopstate:z,safeAreaInsetBottom:z});var lT=U({name:nT,props:aT,emits:["cancel","select","update:show"],setup(e,{emit:t,slots:n}){const o=h=>t("update:show",h),a=()=>{o(!1),t("cancel")},l=(h,m)=>t("select",h,m),i=()=>{const h=n.title?n.title():e.title,m=n.description?n.description():e.description;if(h||m)return f("div",{class:Vt("header")},[h&&f("h2",{class:Vt("title")},[h]),m&&f("span",{class:Vt("description")},[m])])},r=h=>Q1(h)?f("img",{src:h,class:Vt("image-icon")},null):f("div",{class:Vt("icon",[h])},[f(xe,{name:tT[h]||h},null)]),s=(h,m)=>{const{name:b,icon:p,className:g,description:w}=h;return f("div",{role:"button",tabindex:0,class:[Vt("option"),g,ct],onClick:()=>l(h,m)},[r(p),b&&f("span",{class:Vt("name")},[b]),w&&f("span",{class:Vt("option-description")},[w])])},c=(h,m)=>f("div",{class:Vt("options",{border:m})},[h.map(s)]),u=()=>{const{options:h}=e;return Array.isArray(h[0])?h.map((m,b)=>c(m,b!==0)):c(h)},d=()=>{var h;const m=(h=e.cancelText)!=null?h:oT("cancel");if(n.cancel||m)return f("button",{type:"button",class:Vt("cancel"),onClick:a},[n.cancel?n.cancel():m])};return()=>f(Kt,Ce({class:Vt(),position:"bottom","onUpdate:show":o},Pe(e,eT)),{default:()=>[i(),u(),d()]})}});const iT=X(lT),[Nh,rT]=Y("sidebar"),Fh=Symbol(Nh),sT={modelValue:se(0)};var cT=U({name:Nh,props:sT,emits:["change","update:modelValue"],setup(e,{emit:t,slots:n}){const{linkChildren:o}=dt(Fh),a=()=>+e.modelValue;return o({getActive:a,setActive:i=>{i!==a()&&(t("update:modelValue",i),t("change",i))}}),()=>{var i;return f("div",{role:"tablist",class:rT()},[(i=n.default)==null?void 0:i.call(n)])}}});const Hh=X(cT),[uT,Su]=Y("sidebar-item"),dT=me({},eo,{dot:Boolean,title:String,badge:q,disabled:Boolean,badgeProps:Object});var fT=U({name:uT,props:dT,emits:["click"],setup(e,{emit:t,slots:n}){const o=xo(),{parent:a,index:l}=lt(Fh);if(!a)return;const i=()=>{e.disabled||(t("click",l.value),a.setActive(l.value),o())};return()=>{const{dot:r,badge:s,title:c,disabled:u}=e,d=l.value===a.getActive();return f("div",{role:"tab",class:Su({select:d,disabled:u}),tabindex:u?void 0:0,"aria-selected":d,onClick:i},[f(So,Ce({dot:r,class:Su("text"),content:s},e.badgeProps),{default:()=>[n.title?n.title():c]})])}}});const zh=X(fT),[hT,Xi,Cu]=Y("signature"),mT={tips:String,type:Z("png"),penColor:Z("#000"),lineWidth:Ze(3),clearButtonText:String,backgroundColor:Z(""),confirmButtonText:String},vT=()=>{var e;const t=document.createElement("canvas");return!!((e=t.getContext)!=null&&e.call(t,"2d"))};var gT=U({name:hT,props:mT,emits:["submit","clear","start","end","signing"],setup(e,{emit:t,slots:n}){const o=M(),a=M(),l=B(()=>o.value?o.value.getContext("2d"):null),i=Dt?vT():!0;let r=0,s=0,c;const u=()=>{if(!l.value)return!1;l.value.beginPath(),l.value.lineWidth=e.lineWidth,l.value.strokeStyle=e.penColor,c=Oe(o),t("start")},d=x=>{if(!l.value)return!1;Le(x);const S=x.touches[0],y=S.clientX-(c?.left||0),T=S.clientY-(c?.top||0);l.value.lineCap="round",l.value.lineJoin="round",l.value.lineTo(y,T),l.value.stroke(),t("signing",x)},h=x=>{Le(x),t("end")},m=x=>{const S=document.createElement("canvas");if(S.width=x.width,S.height=x.height,e.backgroundColor){const y=S.getContext("2d");b(y)}return x.toDataURL()===S.toDataURL()},b=x=>{x&&e.backgroundColor&&(x.fillStyle=e.backgroundColor,x.fillRect(0,0,r,s))},p=()=>{var x,S;const y=o.value;if(!y)return;const O=m(y)?"":((S=(x={jpg:()=>y.toDataURL("image/jpeg",.8),jpeg:()=>y.toDataURL("image/jpeg",.8)})[e.type])==null?void 0:S.call(x))||y.toDataURL(`image/${e.type}`);t("submit",{image:O,canvas:y})},g=()=>{l.value&&(l.value.clearRect(0,0,r,s),l.value.closePath(),b(l.value)),t("clear")},w=()=>{var x,S,y;if(i&&o.value){const T=o.value,O=Dt?window.devicePixelRatio:1;r=T.width=(((x=a.value)==null?void 0:x.offsetWidth)||0)*O,s=T.height=(((S=a.value)==null?void 0:S.offsetHeight)||0)*O,(y=l.value)==null||y.scale(O,O),b(l.value)}},v=()=>{if(l.value){const x=l.value.getImageData(0,0,r,s);w(),l.value.putImageData(x,0,0)}};return te(Ht,v),We(w),_e({resize:v,clear:g,submit:p}),()=>f("div",{class:Xi()},[f("div",{class:Xi("content"),ref:a},[i?f("canvas",{ref:o,onTouchstartPassive:u,onTouchmove:d,onTouchend:h},null):n.tips?n.tips():f("p",null,[e.tips])]),f("div",{class:Xi("footer")},[f(ut,{size:"small",onClick:g},{default:()=>[e.clearButtonText||Cu("clear")]}),f(ut,{type:"primary",size:"small",onClick:p},{default:()=>[e.confirmButtonText||Cu("confirm")]})])])}});const bT=X(gT),[yT,pT]=Y("skeleton-title"),wT={round:Boolean,titleWidth:q};var xT=U({name:yT,props:wT,setup(e){return()=>f("h3",{class:pT([{round:e.round}]),style:{width:pe(e.titleWidth)}},null)}});const jh=X(xT);var ST=jh;const[CT,TT]=Y("skeleton-avatar"),_T={avatarSize:q,avatarShape:Z("round")};var ET=U({name:CT,props:_T,setup(e){return()=>f("div",{class:TT([e.avatarShape]),style:Dn(e.avatarSize)},null)}});const Wh=X(ET);var kT=Wh;const xs="100%",AT={round:Boolean,rowWidth:{type:q,default:xs}},[PT,IT]=Y("skeleton-paragraph");var OT=U({name:PT,props:AT,setup(e){return()=>f("div",{class:IT([{round:e.round}]),style:{width:e.rowWidth}},null)}});const Uh=X(OT);var RT=Uh;const[DT,Tu]=Y("skeleton"),$T="60%",BT={row:se(0),round:Boolean,title:Boolean,titleWidth:q,avatar:Boolean,avatarSize:q,avatarShape:Z("round"),loading:z,animate:z,rowWidth:{type:[Number,String,Array],default:xs}};var MT=U({name:DT,inheritAttrs:!1,props:BT,setup(e,{slots:t,attrs:n}){const o=()=>{if(e.avatar)return f(kT,{avatarShape:e.avatarShape,avatarSize:e.avatarSize},null)},a=()=>{if(e.title)return f(ST,{round:e.round,titleWidth:e.titleWidth},null)},l=s=>{const{rowWidth:c}=e;return c===xs&&s===+e.row-1?$T:Array.isArray(c)?c[s]:c},i=()=>Array(+e.row).fill("").map((s,c)=>f(RT,{key:c,round:e.round,rowWidth:pe(l(c))},null)),r=()=>t.template?t.template():f(Ke,null,[o(),f("div",{class:Tu("content")},[a(),i()])]);return()=>{var s;return e.loading?f("div",Ce({class:Tu({animate:e.animate,round:e.round})},n),[r()]):(s=t.default)==null?void 0:s.call(t)}}});const VT=X(MT),[LT,_u]=Y("skeleton-image"),NT={imageSize:q,imageShape:Z("square")};var FT=U({name:LT,props:NT,setup(e){return()=>f("div",{class:_u([e.imageShape]),style:Dn(e.imageSize)},[f(xe,{name:"photo",class:_u("icon")},null)])}});const HT=X(FT),[zT,ma]=Y("slider"),jT={min:se(0),max:se(100),step:se(1),range:Boolean,reverse:Boolean,disabled:Boolean,readonly:Boolean,vertical:Boolean,barHeight:q,buttonSize:q,activeColor:String,inactiveColor:String,modelValue:{type:[Number,Array],default:0}};var WT=U({name:zT,props:jT,emits:["change","dragEnd","dragStart","update:modelValue"],setup(e,{emit:t,slots:n}){let o,a,l;const i=M(),r=[M(),M()],s=M(),c=Bt(),u=B(()=>Number(e.max)-Number(e.min)),d=B(()=>{const A=e.vertical?"width":"height";return{background:e.inactiveColor,[A]:pe(e.barHeight)}}),h=A=>e.range&&Array.isArray(A),m=()=>{const{modelValue:A,min:_}=e;return h(A)?`${(A[1]-A[0])*100/u.value}%`:`${(A-Number(_))*100/u.value}%`},b=()=>{const{modelValue:A,min:_}=e;return h(A)?`${(A[0]-Number(_))*100/u.value}%`:"0%"},p=B(()=>{const _={[e.vertical?"height":"width"]:m(),background:e.activeColor};s.value&&(_.transition="none");const D=()=>e.vertical?e.reverse?"bottom":"top":e.reverse?"right":"left";return _[D()]=b(),_}),g=A=>{const _=+e.min,D=+e.max,j=+e.step;A=Je(A,_,D);const ae=Math.round((A-_)/j)*j;return wf(_,ae)},w=()=>{const A=e.modelValue;h(A)?l=A.map(g):l=g(A)},v=A=>{var _,D;const j=(_=A[0])!=null?_:Number(e.min),ae=(D=A[1])!=null?D:Number(e.max);return j>ae?[ae,j]:[j,ae]},x=(A,_)=>{h(A)?A=v(A).map(g):A=g(A),sn(A,e.modelValue)||t("update:modelValue",A),_&&!sn(A,l)&&t("change",A)},S=A=>{if(A.stopPropagation(),e.disabled||e.readonly)return;w();const{min:_,reverse:D,vertical:j,modelValue:ae}=e,N=Oe(i),ne=()=>j?D?N.bottom-A.clientY:A.clientY-N.top:D?N.right-A.clientX:A.clientX-N.left,oe=j?N.height:N.width,Te=Number(_)+ne()/oe*u.value;if(h(ae)){const[ke,re]=ae,H=(ke+re)/2;Te<=H?x([Te,re],!0):x([ke,Te],!0)}else x(Te,!0)},y=A=>{e.disabled||e.readonly||(c.start(A),a=e.modelValue,w(),s.value="start")},T=A=>{if(e.disabled||e.readonly)return;s.value==="start"&&t("dragStart",A),Le(A,!0),c.move(A),s.value="dragging";const _=Oe(i),D=e.vertical?c.deltaY.value:c.deltaX.value,j=e.vertical?_.height:_.width;let ae=D/j*u.value;if(e.reverse&&(ae=-ae),h(l)){const N=e.reverse?1-o:o;a[N]=l[N]+ae}else a=l+ae;x(a)},O=A=>{e.disabled||e.readonly||(s.value==="dragging"&&(x(a,!0),t("dragEnd",A)),s.value="")},C=A=>typeof A=="number"?ma("button-wrapper",["left","right"][A]):ma("button-wrapper",e.reverse?"left":"right"),I=(A,_)=>{const D=s.value==="dragging";if(typeof _=="number"){const j=n[_===0?"left-button":"right-button"];let ae;if(D&&Array.isArray(a)&&(ae=a[0]>a[1]?o^1:o),j)return j({value:A,dragging:D,dragIndex:ae})}return n.button?n.button({value:A,dragging:D}):f("div",{class:ma("button"),style:Dn(e.buttonSize)},null)},R=A=>{const _=typeof A=="number"?e.modelValue[A]:e.modelValue;return f("div",{ref:r[A??0],role:"slider",class:C(A),tabindex:e.disabled?void 0:0,"aria-valuemin":e.min,"aria-valuenow":_,"aria-valuemax":e.max,"aria-disabled":e.disabled||void 0,"aria-readonly":e.readonly||void 0,"aria-orientation":e.vertical?"vertical":"horizontal",onTouchstartPassive:D=>{typeof A=="number"&&(o=A),y(D)},onTouchend:O,onTouchcancel:O,onClick:es},[I(_,A)])};return x(e.modelValue),Jn(()=>e.modelValue),r.forEach(A=>{Ge("touchmove",T,{target:A})}),()=>f("div",{ref:i,style:d.value,class:ma({vertical:e.vertical,disabled:e.disabled}),onClick:S},[f("div",{class:ma("bar"),style:p.value},[e.range?[R(0),R(1)]:R()])])}});const UT=X(WT),[Eu,YT]=Y("space"),GT={align:String,direction:{type:String,default:"horizontal"},size:{type:[Number,String,Array],default:8},wrap:Boolean,fill:Boolean};function Yh(e=[]){const t=[];return e.forEach(n=>{Array.isArray(n)?t.push(...n):n.type===Ke?t.push(...Yh(n.children)):t.push(n)}),t.filter(n=>{var o;return!(n&&(n.type===nt||n.type===Ke&&((o=n.children)==null?void 0:o.length)===0||n.type===za&&n.children.trim()===""))})}var KT=U({name:Eu,props:GT,setup(e,{slots:t}){const n=B(()=>{var l;return(l=e.align)!=null?l:e.direction==="horizontal"?"center":""}),o=l=>typeof l=="number"?l+"px":l,a=l=>{const i={},r=`${o(Array.isArray(e.size)?e.size[0]:e.size)}`,s=`${o(Array.isArray(e.size)?e.size[1]:e.size)}`;return l?e.wrap?{marginBottom:s}:{}:(e.direction==="horizontal"&&(i.marginRight=r),(e.direction==="vertical"||e.wrap)&&(i.marginBottom=s),i)};return()=>{var l;const i=Yh((l=t.default)==null?void 0:l.call(t));return f("div",{class:[YT({[e.direction]:e.direction,[`align-${n.value}`]:n.value,wrap:e.wrap,fill:e.fill})]},[i.map((r,s)=>f("div",{key:`item-${s}`,class:`${Eu}-item`,style:a(s===i.length-1)},[r]))])}}});const qT=X(KT),[Gh,ku]=Y("steps"),XT={active:se(0),direction:Z("horizontal"),activeIcon:Z("checked"),iconPrefix:String,finishIcon:String,activeColor:String,inactiveIcon:String,inactiveColor:String},Kh=Symbol(Gh);var ZT=U({name:Gh,props:XT,emits:["clickStep"],setup(e,{emit:t,slots:n}){const{linkChildren:o}=dt(Kh);return o({props:e,onClickStep:l=>t("clickStep",l)}),()=>{var l;return f("div",{class:ku([e.direction])},[f("div",{class:ku("items")},[(l=n.default)==null?void 0:l.call(n)])])}}});const[JT,zn]=Y("step");var QT=U({name:JT,setup(e,{slots:t}){const{parent:n,index:o}=lt(Kh);if(!n)return;const a=n.props,l=()=>{const d=+a.active;return o.valuel()==="process",r=B(()=>({background:l()==="finish"?a.activeColor:a.inactiveColor})),s=B(()=>{if(i())return{color:a.activeColor};if(l()==="waiting")return{color:a.inactiveColor}}),c=()=>n.onClickStep(o.value),u=()=>{const{iconPrefix:d,finishIcon:h,activeIcon:m,activeColor:b,inactiveIcon:p}=a;return i()?t["active-icon"]?t["active-icon"]():f(xe,{class:zn("icon","active"),name:m,color:b,classPrefix:d},null):l()==="finish"&&(h||t["finish-icon"])?t["finish-icon"]?t["finish-icon"]():f(xe,{class:zn("icon","finish"),name:h,color:b,classPrefix:d},null):t["inactive-icon"]?t["inactive-icon"]():p?f(xe,{class:zn("icon"),name:p,classPrefix:d},null):f("i",{class:zn("circle"),style:r.value},null)};return()=>{var d;const h=l();return f("div",{class:[Bn,zn([a.direction,{[h]:h}])]},[f("div",{class:zn("title",{active:i()}),style:s.value,onClick:c},[(d=t.default)==null?void 0:d.call(t)]),f("div",{class:zn("circle-container"),onClick:c},[u()]),f("div",{class:zn("line"),style:r.value},null)])}}});const e_=X(QT),[t_,gl]=Y("stepper"),n_=200,bl=(e,t)=>String(e)===String(t),o_={min:se(1),max:se(1/0),name:se(""),step:se(1),theme:String,integer:Boolean,disabled:Boolean,showPlus:z,showMinus:z,showInput:z,longPress:z,autoFixed:z,allowEmpty:Boolean,modelValue:q,inputWidth:q,buttonSize:q,placeholder:String,disablePlus:Boolean,disableMinus:Boolean,disableInput:Boolean,beforeChange:Function,defaultValue:se(1),decimalLength:q};var a_=U({name:t_,props:o_,emits:["plus","blur","minus","focus","change","overlimit","update:modelValue"],setup(e,{emit:t}){const n=(C,I=!0)=>{const{min:R,max:A,allowEmpty:_,decimalLength:D}=e;return _&&C===""||(typeof C=="number"&&String(C).includes("e")&&(C=C.toFixed(D?+D:17)),C=wr(String(C),!e.integer),C=C===""?0:+C,C=Number.isNaN(C)?+R:C,C=I?Math.max(Math.min(+A,C),+R):C,Ee(D)&&(C=C.toFixed(+D))),C},o=()=>{var C;const I=(C=e.modelValue)!=null?C:e.defaultValue,R=n(I);return bl(R,e.modelValue)||t("update:modelValue",R),R};let a;const l=M(),i=M(o()),r=B(()=>e.disabled||e.disableMinus||+i.value<=+e.min),s=B(()=>e.disabled||e.disablePlus||+i.value>=+e.max),c=B(()=>({width:pe(e.inputWidth),height:pe(e.buttonSize)})),u=B(()=>Dn(e.buttonSize)),d=()=>{const C=n(i.value);bl(C,i.value)||(i.value=C)},h=C=>{e.beforeChange?Qn(e.beforeChange,{args:[C],done(){i.value=C}}):i.value=C},m=()=>{if(a==="plus"&&s.value||a==="minus"&&r.value){t("overlimit",a);return}const C=a==="minus"?-e.step:+e.step,I=n(wf(+i.value,C));h(I),t(a)},b=C=>{const I=C.target,{value:R}=I,{decimalLength:A}=e;let _=wr(String(R),!e.integer);if(Ee(A)&&_.includes(".")){const j=_.split(".");_=`${j[0]}.${j[1].slice(0,+A)}`}e.beforeChange?I.value=String(i.value):bl(R,_)||(I.value=_);const D=_===String(+_);h(D?+_:_)},p=C=>{var I;e.disableInput?(I=l.value)==null||I.blur():t("focus",C)},g=C=>{const I=C.target,R=n(I.value,e.autoFixed);I.value=String(R),i.value=R,Se(()=>{t("blur",C),yf()})};let w,v;const x=()=>{v=setTimeout(()=>{m(),x()},n_)},S=()=>{e.longPress&&(w=!1,clearTimeout(v),v=setTimeout(()=>{w=!0,m(),x()},Ef))},y=C=>{e.longPress&&(clearTimeout(v),w&&Le(C))},T=C=>{e.disableInput&&Le(C)},O=C=>({onClick:I=>{Le(I),a=C,m()},onTouchstartPassive:()=>{a=C,S()},onTouchend:y,onTouchcancel:y});return te(()=>[e.max,e.min,e.integer,e.decimalLength],d),te(()=>e.modelValue,C=>{bl(C,i.value)||(i.value=n(C))}),te(i,C=>{t("update:modelValue",C),t("change",C,{name:e.name})}),Jn(()=>e.modelValue),()=>f("div",{role:"group",class:gl([e.theme])},[et(f("button",Ce({type:"button",style:u.value,class:[gl("minus",{disabled:r.value}),{[ct]:!r.value}],"aria-disabled":r.value||void 0},O("minus")),null),[[at,e.showMinus]]),et(f("input",{ref:l,type:e.integer?"tel":"text",role:"spinbutton",class:gl("input"),value:i.value,style:c.value,disabled:e.disabled,readonly:e.disableInput,inputmode:e.integer?"numeric":"decimal",placeholder:e.placeholder,autocomplete:"off","aria-valuemax":e.max,"aria-valuemin":e.min,"aria-valuenow":i.value,onBlur:g,onInput:b,onFocus:p,onMousedown:T},null),[[at,e.showInput]]),et(f("button",Ce({type:"button",style:u.value,class:[gl("plus",{disabled:s.value}),{[ct]:!s.value}],"aria-disabled":s.value||void 0},O("plus")),null),[[at,e.showPlus]])])}});const l_=X(a_),i_=X(ZT),[r_,Lt,s_]=Y("submit-bar"),c_={tip:String,label:String,price:Number,tipIcon:String,loading:Boolean,currency:Z("¥"),disabled:Boolean,textAlign:String,buttonText:String,buttonType:Z("danger"),buttonColor:String,suffixLabel:String,placeholder:Boolean,decimalLength:se(2),safeAreaInsetBottom:z};var u_=U({name:r_,props:c_,emits:["submit"],setup(e,{emit:t,slots:n}){const o=M(),a=li(o,Lt),l=()=>{const{price:u,label:d,currency:h,textAlign:m,suffixLabel:b,decimalLength:p}=e;if(typeof u=="number"){const g=(u/100).toFixed(+p).split("."),w=p?`.${g[1]}`:"";return f("div",{class:Lt("text"),style:{textAlign:m}},[f("span",null,[d||s_("label")]),f("span",{class:Lt("price")},[h,f("span",{class:Lt("price-integer")},[g[0]]),w]),b&&f("span",{class:Lt("suffix-label")},[b])])}},i=()=>{var u;const{tip:d,tipIcon:h}=e;if(n.tip||d)return f("div",{class:Lt("tip")},[h&&f(xe,{class:Lt("tip-icon"),name:h},null),d&&f("span",{class:Lt("tip-text")},[d]),(u=n.tip)==null?void 0:u.call(n)])},r=()=>t("submit"),s=()=>n.button?n.button():f(ut,{round:!0,type:e.buttonType,text:e.buttonText,class:Lt("button",e.buttonType),color:e.buttonColor,loading:e.loading,disabled:e.disabled,onClick:r},null),c=()=>{var u,d;return f("div",{ref:o,class:[Lt(),{"van-safe-area-bottom":e.safeAreaInsetBottom}]},[(u=n.top)==null?void 0:u.call(n),i(),f("div",{class:Lt("bar")},[(d=n.default)==null?void 0:d.call(n),l(),s()])])};return()=>e.placeholder?a(c):c()}});const d_=X(u_),[f_,Zi]=Y("swipe-cell"),h_={name:se(""),disabled:Boolean,leftWidth:q,rightWidth:q,beforeClose:Function,stopPropagation:Boolean};var m_=U({name:f_,props:h_,emits:["open","close","click"],setup(e,{emit:t,slots:n}){let o,a,l,i;const r=M(),s=M(),c=M(),u=je({offset:0,dragging:!1}),d=Bt(),h=C=>C.value?Oe(C).width:0,m=B(()=>Ee(e.leftWidth)?+e.leftWidth:h(s)),b=B(()=>Ee(e.rightWidth)?+e.rightWidth:h(c)),p=C=>{u.offset=C==="left"?m.value:-b.value,o||(o=!0,t("open",{name:e.name,position:C}))},g=C=>{u.offset=0,o&&(o=!1,t("close",{name:e.name,position:C}))},w=C=>{const I=Math.abs(u.offset),R=.15,A=o?1-R:R,_=C==="left"?m.value:b.value;_&&I>_*A?p(C):g(C)},v=C=>{e.disabled||(l=u.offset,d.start(C))},x=C=>{if(e.disabled)return;const{deltaX:I}=d;d.move(C),d.isHorizontal()&&(a=!0,u.dragging=!0,(!o||I.value*l<0)&&Le(C,e.stopPropagation),u.offset=Je(I.value+l,-b.value,m.value))},S=()=>{u.dragging&&(u.dragging=!1,w(u.offset>0?"left":"right"),setTimeout(()=>{a=!1},0))},y=(C="outside",I)=>{i||(t("click",C),o&&!a&&(i=!0,Qn(e.beforeClose,{args:[{event:I,name:e.name,position:C}],done:()=>{i=!1,g(C)},canceled:()=>i=!1,error:()=>i=!1})))},T=C=>I=>{(a||o)&&I.stopPropagation(),!a&&y(C,I)},O=(C,I)=>{const R=n[C];if(R)return f("div",{ref:I,class:Zi(C),onClick:T(C)},[R()])};return _e({open:p,close:g}),ni(r,C=>y("outside",C),{eventName:"touchstart"}),Ge("touchmove",x,{target:r}),()=>{var C;const I={transform:`translate3d(${u.offset}px, 0, 0)`,transitionDuration:u.dragging?"0s":".6s"};return f("div",{ref:r,class:Zi(),onClick:T("cell"),onTouchstartPassive:v,onTouchend:S,onTouchcancel:S},[f("div",{class:Zi("wrapper"),style:I},[O("left",s),(C=n.default)==null?void 0:C.call(n),O("right",c)])])}}});const v_=X(m_),[qh,Au]=Y("tabbar"),g_={route:Boolean,fixed:z,border:z,zIndex:q,placeholder:Boolean,activeColor:String,beforeChange:Function,inactiveColor:String,modelValue:se(0),safeAreaInsetBottom:{type:Boolean,default:null}},Xh=Symbol(qh);var b_=U({name:qh,props:g_,emits:["change","update:modelValue"],setup(e,{emit:t,slots:n}){const o=M(),{linkChildren:a}=dt(Xh),l=li(o,Au),i=()=>{var c;return(c=e.safeAreaInsetBottom)!=null?c:e.fixed},r=()=>{var c;const{fixed:u,zIndex:d,border:h}=e;return f("div",{ref:o,role:"tablist",style:$n(d),class:[Au({fixed:u}),{[oi]:h,"van-safe-area-bottom":i()}]},[(c=n.default)==null?void 0:c.call(n)])};return a({props:e,setActive:(c,u)=>{Qn(e.beforeChange,{args:[c],done(){t("update:modelValue",c),t("change",c),u()}})}}),()=>e.fixed&&e.placeholder?l(r):r()}});const y_=X(b_),[p_,Ji]=Y("tabbar-item"),w_=me({},eo,{dot:Boolean,icon:String,name:q,badge:q,badgeProps:Object,iconPrefix:String});var x_=U({name:p_,props:w_,emits:["click"],setup(e,{emit:t,slots:n}){const o=xo(),a=$t().proxy,{parent:l,index:i}=lt(Xh);if(!l)return;const r=B(()=>{var u;const{route:d,modelValue:h}=l.props;if(d&&"$route"in a){const{$route:m}=a,{to:b}=e,p=Yt(b)?b:{path:b};return m.matched.some(g=>{const w="path"in p&&p.path===g.path,v="name"in p&&p.name===g.name;return w||v})}return((u=e.name)!=null?u:i.value)===h}),s=u=>{var d;r.value||l.setActive((d=e.name)!=null?d:i.value,o),t("click",u)},c=()=>{if(n.icon)return n.icon({active:r.value});if(e.icon)return f(xe,{name:e.icon,classPrefix:e.iconPrefix},null)};return()=>{var u;const{dot:d,badge:h}=e,{activeColor:m,inactiveColor:b}=l.props,p=r.value?m:b;return f("div",{role:"tab",class:Ji({active:r.value}),style:{color:p},tabindex:0,"aria-selected":r.value,onClick:s},[f(So,Ce({dot:d,class:Ji("icon"),content:h},e.badgeProps),{default:c}),f("div",{class:Ji("text")},[(u=n.default)==null?void 0:u.call(n,{active:r.value})])])}}});const S_=X(x_),[C_,Pu]=Y("text-ellipsis"),T_={rows:se(1),dots:Z("..."),content:Z(""),expandText:Z(""),collapseText:Z(""),position:Z("end")};var __=U({name:C_,props:T_,emits:["clickAction"],setup(e,{emit:t,slots:n}){const o=M(e.content),a=M(!1),l=M(!1),i=M(),r=M();let s=!1;const c=B(()=>a.value?e.collapseText:e.expandText),u=w=>{if(!w)return 0;const v=w.match(/^\d*(\.\d*)?/);return v?Number(v[0]):0},d=()=>{if(!i.value||!i.value.isConnected)return;const w=window.getComputedStyle(i.value),v=document.createElement("div");return Array.prototype.slice.apply(w).forEach(S=>{v.style.setProperty(S,w.getPropertyValue(S))}),v.style.position="fixed",v.style.zIndex="-9999",v.style.top="-9999px",v.style.height="auto",v.style.minHeight="auto",v.style.maxHeight="auto",v.innerText=e.content,document.body.appendChild(v),v},h=(w,v)=>{var x,S;const{content:y,position:T,dots:O}=e,C=y.length,I=0+C>>1,R=n.action?(S=(x=r.value)==null?void 0:x.outerHTML)!=null?S:"":e.expandText,A=()=>{const D=(j,ae)=>{if(ae-j<=1)return T==="end"?y.slice(0,j)+O:O+y.slice(ae,C);const N=Math.round((j+ae)/2);return T==="end"?w.innerText=y.slice(0,N)+O:w.innerText=O+y.slice(N,C),w.innerHTML+=R,w.offsetHeight>v?T==="end"?D(j,N):D(N,ae):T==="end"?D(N,ae):D(j,N)};return D(0,C)},_=(D,j)=>{if(D[1]-D[0]<=1&&j[1]-j[0]<=1)return y.slice(0,D[0])+O+y.slice(j[1],C);const ae=Math.floor((D[0]+D[1])/2),N=Math.ceil((j[0]+j[1])/2);return w.innerText=e.content.slice(0,ae)+e.dots+e.content.slice(N,C),w.innerHTML+=R,w.offsetHeight>=v?_([D[0],ae],[N,j[1]]):_([ae,D[1]],[j[0],N])};return e.position==="middle"?_([0,I],[I,C]):A()},m=()=>{const w=d();if(!w){s=!0;return}const{paddingBottom:v,paddingTop:x,lineHeight:S}=w.style,y=Math.ceil((Number(e.rows)+.5)*u(S)+u(x)+u(v));y{a.value=w},p=w=>{b(),t("clickAction",w)},g=()=>{const w=n.action?n.action({expanded:a.value}):c.value;return f("span",{ref:r,class:Pu("action"),onClick:p},[w])};return We(()=>{m(),n.action&&Se(m)}),cn(()=>{s&&(s=!1,m())}),te([Ht,()=>[e.content,e.rows,e.position]],m),_e({toggle:b}),()=>f("div",{ref:i,class:Pu()},[a.value?e.content:o.value,l.value?g():null])}});const E_=X(__),[k_]=Y("time-picker"),Iu=e=>/^([01]\d|2[0-3]):([0-5]\d):([0-5]\d)$/.test(e),A_=["hour","minute","second"],P_=me({},mh,{minHour:se(0),maxHour:se(23),minMinute:se(0),maxMinute:se(59),minSecond:se(0),maxSecond:se(59),minTime:{type:String,validator:Iu},maxTime:{type:String,validator:Iu},columnsType:{type:Array,default:()=>["hour","minute"]}});var I_=U({name:k_,props:P_,emits:["confirm","cancel","change","update:modelValue"],setup(e,{emit:t,slots:n}){const o=M(e.modelValue),a=M(),l=h=>{const m=h.split(":");return A_.map((b,p)=>e.columnsType.includes(b)?m[p]:"00")},i=()=>{var h;return(h=a.value)==null?void 0:h.confirm()},r=()=>o.value,s=B(()=>{let{minHour:h,maxHour:m,minMinute:b,maxMinute:p,minSecond:g,maxSecond:w}=e;if(e.minTime||e.maxTime){const v={hour:0,minute:0,second:0};e.columnsType.forEach((y,T)=>{var O;v[y]=(O=o.value[T])!=null?O:0});const{hour:x,minute:S}=v;if(e.minTime){const[y,T,O]=l(e.minTime);h=y,b=+x<=+h?T:"00",g=+x<=+h&&+S<=+b?O:"00"}if(e.maxTime){const[y,T,O]=l(e.maxTime);m=y,p=+x>=+m?T:"59",w=+x>=+m&&+S>=+p?O:"59"}}return e.columnsType.map(v=>{const{filter:x,formatter:S}=e;switch(v){case"hour":return Wo(+h,+m,v,S,x,o.value);case"minute":return Wo(+b,+p,v,S,x,o.value);case"second":return Wo(+g,+w,v,S,x,o.value);default:return[]}})});te(o,h=>{sn(h,e.modelValue)||t("update:modelValue",h)}),te(()=>e.modelValue,h=>{h=bh(h,s.value),sn(h,o.value)||(o.value=h)},{immediate:!0});const c=(...h)=>t("change",...h),u=(...h)=>t("cancel",...h),d=(...h)=>t("confirm",...h);return _e({confirm:i,getSelectedTime:r}),()=>f(ci,Ce({ref:a,modelValue:o.value,"onUpdate:modelValue":h=>o.value=h,columns:s.value,onChange:c,onCancel:u,onConfirm:d},Pe(e,vh)),n)}});const O_=X(I_),[R_,Bo]=Y("tree-select"),D_={max:se(1/0),items:Fe(),height:se(300),selectedIcon:Z("success"),mainActiveIndex:se(0),activeId:{type:[Number,String,Array],default:0}};var $_=U({name:R_,props:D_,emits:["clickNav","clickItem","update:activeId","update:mainActiveIndex"],setup(e,{emit:t,slots:n}){const o=c=>Array.isArray(e.activeId)?e.activeId.includes(c):e.activeId===c,a=c=>{const u=()=>{if(c.disabled)return;let d;if(Array.isArray(e.activeId)){d=e.activeId.slice();const h=d.indexOf(c.id);h!==-1?d.splice(h,1):d.length<+e.max&&d.push(c.id)}else d=c.id;t("update:activeId",d),t("clickItem",c)};return f("div",{key:c.id,class:["van-ellipsis",Bo("item",{active:o(c.id),disabled:c.disabled})],onClick:u},[c.text,o(c.id)&&f(xe,{name:e.selectedIcon,class:Bo("selected")},null)])},l=c=>{t("update:mainActiveIndex",c)},i=c=>t("clickNav",c),r=()=>{const c=e.items.map(u=>f(zh,{dot:u.dot,badge:u.badge,class:[Bo("nav-item"),u.className],disabled:u.disabled,onClick:i},{title:()=>n["nav-text"]?n["nav-text"](u):u.text}));return f(Hh,{class:Bo("nav"),modelValue:e.mainActiveIndex,onChange:l},{default:()=>[c]})},s=()=>{if(n.content)return n.content();const c=e.items[+e.mainActiveIndex]||{};if(c.children)return c.children.map(a)};return()=>f("div",{class:Bo(),style:{height:pe(e.height)}},[r(),f("div",{class:Bo("content")},[s()])])}});const B_=X($_),[M_,Xe,V_]=Y("uploader");function Ou(e,t){return new Promise(n=>{if(t==="file"){n();return}const o=new FileReader;o.onload=a=>{n(a.target.result)},t==="dataUrl"?o.readAsDataURL(e):t==="text"&&o.readAsText(e)})}function Zh(e,t){return Rl(e).some(n=>n.file?qo(t)?t(n.file):n.file.size>+t:!1)}function L_(e,t){const n=[],o=[];return e.forEach(a=>{Zh(a,t)?o.push(a):n.push(a)}),{valid:n,invalid:o}}const N_=/\.(jpeg|jpg|gif|png|svg|webp|jfif|bmp|dpg|avif)/i,F_=e=>N_.test(e);function Jh(e){return e.isImage?!0:e.file&&e.file.type?e.file.type.indexOf("image")===0:e.url?F_(e.url):typeof e.content=="string"?e.content.indexOf("data:image")===0:!1}var H_=U({props:{name:q,item:Qe(Object),index:Number,imageFit:String,lazyLoad:Boolean,deletable:Boolean,reupload:Boolean,previewSize:[Number,String,Array],beforeDelete:Function},emits:["delete","preview","reupload"],setup(e,{emit:t,slots:n}){const o=()=>{const{status:u,message:d}=e.item;if(u==="uploading"||u==="failed"){const h=u==="failed"?f(xe,{name:"close",class:Xe("mask-icon")},null):f(Gt,{class:Xe("loading")},null),m=Ee(d)&&d!=="";return f("div",{class:Xe("mask")},[h,m&&f("div",{class:Xe("mask-message")},[d])])}},a=u=>{const{name:d,item:h,index:m,beforeDelete:b}=e;u.stopPropagation(),Qn(b,{args:[h,{name:d,index:m}],done:()=>t("delete")})},l=()=>t("preview"),i=()=>t("reupload"),r=()=>{if(e.deletable&&e.item.status!=="uploading"){const u=n["preview-delete"];return f("div",{role:"button",class:Xe("preview-delete",{shadow:!u}),tabindex:0,"aria-label":V_("delete"),onClick:a},[u?u():f(xe,{name:"cross",class:Xe("preview-delete-icon")},null)])}},s=()=>{if(n["preview-cover"]){const{index:u,item:d}=e;return f("div",{class:Xe("preview-cover")},[n["preview-cover"](me({index:u},d))])}},c=()=>{const{item:u,lazyLoad:d,imageFit:h,previewSize:m,reupload:b}=e;return Jh(u)?f(fi,{fit:h,src:u.objectUrl||u.content||u.url,class:Xe("preview-image"),width:Array.isArray(m)?m[0]:m,height:Array.isArray(m)?m[1]:m,lazyLoad:d,onClick:b?i:l},{default:s}):f("div",{class:Xe("file"),style:Dn(e.previewSize)},[f(xe,{class:Xe("file-icon"),name:"description"},null),f("div",{class:[Xe("file-name"),"van-ellipsis"]},[u.file?u.file.name:u.url]),s()])};return()=>f("div",{class:Xe("preview")},[c(),o(),r()])}});const z_={name:se(""),accept:Z("image/*"),capture:String,multiple:Boolean,disabled:Boolean,readonly:Boolean,lazyLoad:Boolean,maxCount:se(1/0),imageFit:Z("cover"),resultType:Z("dataUrl"),uploadIcon:Z("photograph"),uploadText:String,deletable:z,reupload:Boolean,afterRead:Function,showUpload:z,modelValue:Fe(),beforeRead:Function,beforeDelete:Function,previewSize:[Number,String,Array],previewImage:z,previewOptions:Object,previewFullImage:z,maxSize:{type:[Number,String,Function],default:1/0}};var j_=U({name:M_,props:z_,emits:["delete","oversize","clickUpload","closePreview","clickPreview","clickReupload","update:modelValue"],setup(e,{emit:t,slots:n}){const o=M(),a=[],l=M(-1),i=M(!1),r=(C=e.modelValue.length)=>({name:e.name,index:C}),s=()=>{o.value&&(o.value.value="")},c=C=>{if(s(),Zh(C,e.maxSize))if(Array.isArray(C)){const I=L_(C,e.maxSize);if(C=I.valid,t("oversize",I.invalid,r()),!C.length)return}else{t("oversize",C,r());return}if(C=je(C),l.value>-1){const I=[...e.modelValue];I.splice(l.value,1,C),t("update:modelValue",I),l.value=-1}else t("update:modelValue",[...e.modelValue,...Rl(C)]);e.afterRead&&e.afterRead(C,r())},u=C=>{const{maxCount:I,modelValue:R,resultType:A}=e;if(Array.isArray(C)){const _=+I-R.length;C.length>_&&(C=C.slice(0,_)),Promise.all(C.map(D=>Ou(D,A))).then(D=>{const j=C.map((ae,N)=>{const ne={file:ae,status:"",message:"",objectUrl:URL.createObjectURL(ae)};return D[N]&&(ne.content=D[N]),ne});c(j)})}else Ou(C,A).then(_=>{const D={file:C,status:"",message:"",objectUrl:URL.createObjectURL(C)};_&&(D.content=_),c(D)})},d=C=>{const{files:I}=C.target;if(e.disabled||!I||!I.length)return;const R=I.length===1?I[0]:[].slice.call(I);if(e.beforeRead){const A=e.beforeRead(R,r());if(!A){s();return}if(Jr(A)){A.then(_=>{u(_||R)}).catch(s);return}}u(R)};let h;const m=()=>t("closePreview"),b=C=>{if(e.previewFullImage){const I=e.modelValue.filter(Jh),R=I.map(A=>(A.objectUrl&&!A.url&&A.status!=="failed"&&(A.url=A.objectUrl,a.push(A.url)),A.url)).filter(Boolean);h=RS(me({images:R,startPosition:I.indexOf(C),onClose:m},e.previewOptions))}},p=()=>{h&&h.close()},g=(C,I)=>{const R=e.modelValue.slice(0);R.splice(I,1),t("update:modelValue",R),t("delete",C,r(I))},w=C=>{i.value=!0,l.value=C,Se(()=>O())},v=()=>{i.value||(l.value=-1),i.value=!1},x=(C,I)=>{const R=["imageFit","deletable","reupload","previewSize","beforeDelete"],A=me(Pe(e,R),Pe(C,R,!0));return f(H_,Ce({item:C,index:I,onClick:()=>t(e.reupload?"clickReupload":"clickPreview",C,r(I)),onDelete:()=>g(C,I),onPreview:()=>b(C),onReupload:()=>w(I)},Pe(e,["name","lazyLoad"]),A),Pe(n,["preview-cover","preview-delete"]))},S=()=>{if(e.previewImage)return e.modelValue.map(x)},y=C=>t("clickUpload",C),T=()=>{const C=e.modelValue.length<+e.maxCount,I=e.readonly?null:f("input",{ref:o,type:"file",class:Xe("input"),accept:e.accept,capture:e.capture,multiple:e.multiple&&l.value===-1,disabled:e.disabled,onChange:d,onClick:v},null);return n.default?et(f("div",{class:Xe("input-wrapper"),onClick:y},[n.default(),I]),[[at,C]]):et(f("div",{class:Xe("upload",{readonly:e.readonly}),style:Dn(e.previewSize),onClick:y},[f(xe,{name:e.uploadIcon,class:Xe("upload-icon")},null),e.uploadText&&f("span",{class:Xe("upload-text")},[e.uploadText]),I]),[[at,e.showUpload&&C]])},O=()=>{o.value&&!e.disabled&&o.value.click()};return dn(()=>{a.forEach(C=>URL.revokeObjectURL(C))}),_e({chooseFile:O,reuploadFile:w,closeImagePreview:p}),Jn(()=>e.modelValue),()=>f("div",{class:Xe()},[f("div",{class:Xe("wrapper",{disabled:e.disabled})},[S(),T()])])}});const W_=X(j_),[U_,Ru]=Y("watermark"),Y_={gapX:Ze(0),gapY:Ze(0),image:String,width:Ze(100),height:Ze(100),rotate:se(-22),zIndex:q,content:String,opacity:q,fullPage:z,textColor:Z("#dcdee0")};var G_=U({name:U_,props:Y_,setup(e,{slots:t}){const n=M(),o=M(""),a=M(""),l=()=>{const u={transformOrigin:"center",transform:`rotate(${e.rotate}deg)`},d=()=>e.image&&!t.content?f("image",{href:a.value,"xlink:href":a.value,x:"0",y:"0",width:e.width,height:e.height,style:u},null):f("foreignObject",{x:"0",y:"0",width:e.width,height:e.height},[f("div",{xmlns:"http://www.w3.org/1999/xhtml",style:u},[t.content?t.content():f("span",{style:{color:e.textColor}},[e.content])])]),h=e.width+e.gapX,m=e.height+e.gapY;return f("svg",{viewBox:`0 0 ${h} ${m}`,width:h,height:m,xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",style:{padding:`0 ${e.gapX}px ${e.gapY}px 0`,opacity:e.opacity}},[d()])},i=u=>{const d=document.createElement("canvas"),h=new Image;h.crossOrigin="anonymous",h.referrerPolicy="no-referrer",h.onload=()=>{d.width=h.naturalWidth,d.height=h.naturalHeight;const m=d.getContext("2d");m?.drawImage(h,0,0),a.value=d.toDataURL()},h.src=u},r=u=>{const d=new Blob([u],{type:"image/svg+xml"});return URL.createObjectURL(d)},s=()=>{o.value&&URL.revokeObjectURL(o.value)},c=()=>{n.value&&(s(),o.value=r(n.value.innerHTML))};return Jo(()=>{e.image&&i(e.image)}),te(()=>[e.content,e.textColor,e.height,e.width,e.rotate,e.gapX,e.gapY],c),te(a,()=>{Se(c)}),We(c),wo(s),()=>{const u=me({backgroundImage:`url(${o.value})`},$n(e.zIndex));return f("div",{class:Ru({full:e.fullPage}),style:u},[f("div",{class:Ru("wrapper"),ref:n},[l()])])}}});const K_=X(G_),q_="4.9.22";function X_(e){[If,Sr,Fy,Qy,xp,Up,Qf,Xp,So,tw,ut,gw,Cw,Aw,qt,Rw,vs,dh,Lw,Yw,Xw,tx,Sh,lx,cx,mx,wx,kr,Px,Mx,Fx,Ux,Xx,nS,oS,Ch,Cn,rS,dS,cs,vS,pS,CS,xe,fi,DS,HS,zS,GS,Gt,Sf,ZS,tC,rC,vC,Mf,pC,CC,ci,TC,S1,Kt,E1,R1,ms,fs,V1,Y1,G1,J1,iT,Hh,zh,bT,VT,Wh,HT,Uh,jh,UT,qT,e_,l_,i_,jf,d_,rs,v_,ss,ds,Na,y_,S_,ri,di,E_,O_,fp,B_,W_,K_].forEach(n=>{n.install?e.use(n):n.name&&e.component(n.name,n)})}var Z_={install:X_,version:q_};const Ua=Qd(Ab);Ua.use(xg());Ua.use(Ob);Ua.use(Z_);Ua.use(Sh);Ua.mount("#app");export{Ke as F,je as a,f as b,Q_ as c,Gd as d,Si as e,jd as f,uo as g,Ud as h,eE as i,J_ as j,me as k,Dt as l,oh as m,Yl as n,We as o,Ce as p,Wx as q,M as r,Ml as s,fm as t,nh as u,tE as v,so as w,nE as x,oE as y}; diff --git a/Web/dist/assets/index-JYOJmkEG.css b/Web/dist/assets/index-JYOJmkEG.css new file mode 100644 index 0000000..d703fde --- /dev/null +++ b/Web/dist/assets/index-JYOJmkEG.css @@ -0,0 +1 @@ +:root{--vt-c-white: #ffffff;--vt-c-white-soft: #f8f8f8;--vt-c-white-mute: #f2f2f2;--vt-c-black: #181818;--vt-c-black-soft: #222222;--vt-c-black-mute: #282828;--vt-c-indigo: #2c3e50;--vt-c-divider-light-1: rgba(60, 60, 60, .29);--vt-c-divider-light-2: rgba(60, 60, 60, .12);--vt-c-divider-dark-1: rgba(84, 84, 84, .65);--vt-c-divider-dark-2: rgba(84, 84, 84, .48);--vt-c-text-light-1: var(--vt-c-indigo);--vt-c-text-light-2: rgba(60, 60, 60, .66);--vt-c-text-dark-1: var(--vt-c-white);--vt-c-text-dark-2: rgba(235, 235, 235, .64)}:root{--color-background: var(--vt-c-white);--color-background-soft: var(--vt-c-white-soft);--color-background-mute: var(--vt-c-white-mute);--color-border: var(--vt-c-divider-light-2);--color-border-hover: var(--vt-c-divider-light-1);--color-heading: var(--vt-c-text-light-1);--color-text: var(--vt-c-text-light-1);--section-gap: 160px}@media(prefers-color-scheme:dark){:root{--color-background: var(--vt-c-black);--color-background-soft: var(--vt-c-black-soft);--color-background-mute: var(--vt-c-black-mute);--color-border: var(--vt-c-divider-dark-2);--color-border-hover: var(--vt-c-divider-dark-1);--color-heading: var(--vt-c-text-dark-1);--color-text: var(--vt-c-text-dark-2)}}*,*:before,*:after{box-sizing:border-box;margin:0;font-weight:400}body{min-height:100vh;color:var(--color-text);background:var(--color-background);transition:color .5s,background-color .5s;line-height:1.6;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;font-size:15px;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#app{max-width:1280px;margin:0 auto;font-weight:400}a,.green{text-decoration:none;color:#00bd7e;transition:.4s;padding:3px}@media(hover:hover){a:hover{background-color:#00bd7e33}}@media(min-width:1024px){body{display:flex;place-items:center}#app{display:grid;grid-template-columns:1fr 1fr;padding:0 2rem}}:root,:host{--van-black: #000;--van-white: #fff;--van-gray-1: #f7f8fa;--van-gray-2: #f2f3f5;--van-gray-3: #ebedf0;--van-gray-4: #dcdee0;--van-gray-5: #c8c9cc;--van-gray-6: #969799;--van-gray-7: #646566;--van-gray-8: #323233;--van-red: #ee0a24;--van-blue: #1989fa;--van-orange: #ff976a;--van-orange-dark: #ed6a0c;--van-orange-light: #fffbe8;--van-green: #07c160;--van-gradient-red: linear-gradient(to right, #ff6034, #ee0a24);--van-gradient-orange: linear-gradient(to right, #ffd01e, #ff8917);--van-primary-color: var(--van-blue);--van-success-color: var(--van-green);--van-danger-color: var(--van-red);--van-warning-color: var(--van-orange);--van-text-color: var(--van-gray-8);--van-text-color-2: var(--van-gray-6);--van-text-color-3: var(--van-gray-5);--van-active-color: var(--van-gray-2);--van-active-opacity: .6;--van-disabled-opacity: .5;--van-background: var(--van-gray-1);--van-background-2: var(--van-white);--van-background-3: var(--van-white);--van-padding-base: 4px;--van-padding-xs: 8px;--van-padding-sm: 12px;--van-padding-md: 16px;--van-padding-lg: 24px;--van-padding-xl: 32px;--van-font-bold: 600;--van-font-size-xs: 10px;--van-font-size-sm: 12px;--van-font-size-md: 14px;--van-font-size-lg: 16px;--van-line-height-xs: 14px;--van-line-height-sm: 18px;--van-line-height-md: 20px;--van-line-height-lg: 22px;--van-base-font: -apple-system, BlinkMacSystemFont, "Helvetica Neue", Helvetica, Segoe UI, Arial, Roboto, "PingFang SC", "miui", "Hiragino Sans GB", "Microsoft Yahei", sans-serif;--van-price-font: avenir-heavy, "PingFang SC", helvetica neue, arial, sans-serif;--van-duration-base: .3s;--van-duration-fast: .2s;--van-ease-out: ease-out;--van-ease-in: ease-in;--van-border-color: var(--van-gray-3);--van-border-width: 1px;--van-radius-sm: 2px;--van-radius-md: 4px;--van-radius-lg: 8px;--van-radius-max: 999px}.van-theme-dark{--van-text-color: #f5f5f5;--van-text-color-2: #707070;--van-text-color-3: #4d4d4d;--van-border-color: #3a3a3c;--van-active-color: #3a3a3c;--van-background: #000;--van-background-2: #1c1c1e;--van-background-3: #37363b}html{-webkit-tap-highlight-color:transparent}body{margin:0;font-family:var(--van-base-font)}a{text-decoration:none}input,button,textarea{color:inherit;font:inherit}a:focus,input:focus,button:focus,textarea:focus,[class*=van-]:focus{outline:none}ol,ul{margin:0;padding:0;list-style:none}@keyframes van-slide-up-enter{0%{transform:translate3d(0,100%,0)}}@keyframes van-slide-up-leave{to{transform:translate3d(0,100%,0)}}@keyframes van-slide-down-enter{0%{transform:translate3d(0,-100%,0)}}@keyframes van-slide-down-leave{to{transform:translate3d(0,-100%,0)}}@keyframes van-slide-left-enter{0%{transform:translate3d(-100%,0,0)}}@keyframes van-slide-left-leave{to{transform:translate3d(-100%,0,0)}}@keyframes van-slide-right-enter{0%{transform:translate3d(100%,0,0)}}@keyframes van-slide-right-leave{to{transform:translate3d(100%,0,0)}}@keyframes van-fade-in{0%{opacity:0}to{opacity:1}}@keyframes van-fade-out{0%{opacity:1}to{opacity:0}}@keyframes van-rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.van-fade-enter-active{animation:var(--van-duration-base) van-fade-in both var(--van-ease-out)}.van-fade-leave-active{animation:var(--van-duration-base) van-fade-out both var(--van-ease-in)}.van-slide-up-enter-active{animation:van-slide-up-enter var(--van-duration-base) both var(--van-ease-out)}.van-slide-up-leave-active{animation:van-slide-up-leave var(--van-duration-base) both var(--van-ease-in)}.van-slide-down-enter-active{animation:van-slide-down-enter var(--van-duration-base) both var(--van-ease-out)}.van-slide-down-leave-active{animation:van-slide-down-leave var(--van-duration-base) both var(--van-ease-in)}.van-slide-left-enter-active{animation:van-slide-left-enter var(--van-duration-base) both var(--van-ease-out)}.van-slide-left-leave-active{animation:van-slide-left-leave var(--van-duration-base) both var(--van-ease-in)}.van-slide-right-enter-active{animation:van-slide-right-enter var(--van-duration-base) both var(--van-ease-out)}.van-slide-right-leave-active{animation:van-slide-right-leave var(--van-duration-base) both var(--van-ease-in)}.van-clearfix:after{display:table;clear:both;content:""}.van-ellipsis{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.van-multi-ellipsis--l2{display:-webkit-box;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;line-break:anywhere;-webkit-box-orient:vertical}.van-multi-ellipsis--l3{display:-webkit-box;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:3;line-break:anywhere;-webkit-box-orient:vertical}.van-safe-area-top{padding-top:constant(safe-area-inset-top);padding-top:env(safe-area-inset-top)}.van-safe-area-bottom{padding-bottom:constant(safe-area-inset-bottom);padding-bottom:env(safe-area-inset-bottom)}.van-haptics-feedback{cursor:pointer}.van-haptics-feedback:active{opacity:var(--van-active-opacity)}[class*=van-hairline]:after{position:absolute;box-sizing:border-box;content:" ";pointer-events:none;inset:-50%;border:0 solid var(--van-border-color);transform:scale(.5)}.van-hairline,.van-hairline--top,.van-hairline--left,.van-hairline--right,.van-hairline--bottom,.van-hairline--surround,.van-hairline--top-bottom{position:relative}.van-hairline--top:after{border-top-width:var(--van-border-width)}.van-hairline--left:after{border-left-width:var(--van-border-width)}.van-hairline--right:after{border-right-width:var(--van-border-width)}.van-hairline--bottom:after{border-bottom-width:var(--van-border-width)}.van-hairline--top-bottom:after,.van-hairline-unset--top-bottom:after{border-width:var(--van-border-width) 0}.van-hairline--surround:after{border-width:var(--van-border-width)}:root,:host{--van-action-bar-background: var(--van-background-2);--van-action-bar-height: 50px}.van-action-bar{position:fixed;right:0;bottom:0;left:0;display:flex;align-items:center;box-sizing:content-box;height:var(--van-action-bar-height);background:var(--van-action-bar-background)}:root,:host{--van-badge-size: 16px;--van-badge-color: var(--van-white);--van-badge-padding: 0 3px;--van-badge-font-size: var(--van-font-size-sm);--van-badge-font-weight: var(--van-font-bold);--van-badge-border-width: var(--van-border-width);--van-badge-background: var(--van-danger-color);--van-badge-dot-color: var(--van-danger-color);--van-badge-dot-size: 8px;--van-badge-font: -apple-system-font, helvetica neue, arial, sans-serif}.van-badge{display:inline-block;box-sizing:border-box;min-width:var(--van-badge-size);padding:var(--van-badge-padding);color:var(--van-badge-color);font-weight:var(--van-badge-font-weight);font-size:var(--van-badge-font-size);font-family:var(--van-badge-font);line-height:1.2;text-align:center;background:var(--van-badge-background);border:var(--van-badge-border-width) solid var(--van-background-2);border-radius:var(--van-radius-max)}.van-badge--fixed{position:absolute;transform-origin:100%}.van-badge--top-left{top:0;left:0;transform:translate(-50%,-50%)}.van-badge--top-right{top:0;right:0;transform:translate(50%,-50%)}.van-badge--bottom-left{bottom:0;left:0;transform:translate(-50%,50%)}.van-badge--bottom-right{bottom:0;right:0;transform:translate(50%,50%)}.van-badge--dot{width:var(--van-badge-dot-size);min-width:0;height:var(--van-badge-dot-size);background:var(--van-badge-dot-color);border-radius:100%;border:none;padding:0}.van-badge__wrapper{position:relative;display:inline-block}.van-icon{position:relative;display:inline-block;font:14px/1 vant-icon;font:normal normal normal 14px/1 var(--van-icon-font-family, "vant-icon");font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased}.van-icon:before{display:inline-block}.van-icon-arrow-double-left:before{content:""}.van-icon-arrow-double-right:before{content:""}.van-icon-contact:before{content:""}.van-icon-notes:before{content:""}.van-icon-records:before{content:""}.van-icon-cash-back-record:before{content:""}.van-icon-newspaper:before{content:""}.van-icon-discount:before{content:""}.van-icon-completed:before{content:""}.van-icon-user:before{content:""}.van-icon-description:before{content:""}.van-icon-list-switch:before{content:""}.van-icon-list-switching:before{content:""}.van-icon-link-o:before{content:""}.van-icon-miniprogram-o:before{content:""}.van-icon-qq:before{content:""}.van-icon-wechat-moments:before{content:""}.van-icon-weibo:before{content:""}.van-icon-cash-o:before{content:""}.van-icon-guide-o:before{content:""}.van-icon-invitation:before{content:""}.van-icon-shield-o:before{content:""}.van-icon-exchange:before{content:""}.van-icon-eye:before{content:""}.van-icon-enlarge:before{content:""}.van-icon-expand-o:before{content:""}.van-icon-eye-o:before{content:""}.van-icon-expand:before{content:""}.van-icon-filter-o:before{content:""}.van-icon-fire:before{content:""}.van-icon-fail:before{content:""}.van-icon-failure:before{content:""}.van-icon-fire-o:before{content:""}.van-icon-flag-o:before{content:""}.van-icon-font:before{content:""}.van-icon-font-o:before{content:""}.van-icon-gem-o:before{content:""}.van-icon-flower-o:before{content:""}.van-icon-gem:before{content:""}.van-icon-gift-card:before{content:""}.van-icon-friends:before{content:""}.van-icon-friends-o:before{content:""}.van-icon-gold-coin:before{content:""}.van-icon-gold-coin-o:before{content:""}.van-icon-good-job-o:before{content:""}.van-icon-gift:before{content:""}.van-icon-gift-o:before{content:""}.van-icon-gift-card-o:before{content:""}.van-icon-good-job:before{content:""}.van-icon-home-o:before{content:""}.van-icon-goods-collect:before{content:""}.van-icon-graphic:before{content:""}.van-icon-goods-collect-o:before{content:""}.van-icon-hot-o:before{content:""}.van-icon-info:before{content:""}.van-icon-hotel-o:before{content:""}.van-icon-info-o:before{content:""}.van-icon-hot-sale-o:before{content:""}.van-icon-hot:before{content:""}.van-icon-like:before{content:""}.van-icon-idcard:before{content:""}.van-icon-like-o:before{content:""}.van-icon-hot-sale:before{content:""}.van-icon-location-o:before{content:""}.van-icon-location:before{content:""}.van-icon-label:before{content:""}.van-icon-lock:before{content:""}.van-icon-label-o:before{content:""}.van-icon-map-marked:before{content:""}.van-icon-logistics:before{content:""}.van-icon-manager:before{content:""}.van-icon-more:before{content:""}.van-icon-live:before{content:""}.van-icon-manager-o:before{content:""}.van-icon-medal:before{content:""}.van-icon-more-o:before{content:""}.van-icon-music-o:before{content:""}.van-icon-music:before{content:""}.van-icon-new-arrival-o:before{content:""}.van-icon-medal-o:before{content:""}.van-icon-new-o:before{content:""}.van-icon-free-postage:before{content:""}.van-icon-newspaper-o:before{content:""}.van-icon-new-arrival:before{content:""}.van-icon-minus:before{content:""}.van-icon-orders-o:before{content:""}.van-icon-new:before{content:""}.van-icon-paid:before{content:""}.van-icon-notes-o:before{content:""}.van-icon-other-pay:before{content:""}.van-icon-pause-circle:before{content:""}.van-icon-pause:before{content:""}.van-icon-pause-circle-o:before{content:""}.van-icon-peer-pay:before{content:""}.van-icon-pending-payment:before{content:""}.van-icon-passed:before{content:""}.van-icon-plus:before{content:""}.van-icon-phone-circle-o:before{content:""}.van-icon-phone-o:before{content:""}.van-icon-printer:before{content:""}.van-icon-photo-fail:before{content:""}.van-icon-phone:before{content:""}.van-icon-photo-o:before{content:""}.van-icon-play-circle:before{content:""}.van-icon-play:before{content:""}.van-icon-phone-circle:before{content:""}.van-icon-point-gift-o:before{content:""}.van-icon-point-gift:before{content:""}.van-icon-play-circle-o:before{content:""}.van-icon-shrink:before{content:""}.van-icon-photo:before{content:""}.van-icon-qr:before{content:""}.van-icon-qr-invalid:before{content:""}.van-icon-question-o:before{content:""}.van-icon-revoke:before{content:""}.van-icon-replay:before{content:""}.van-icon-service:before{content:""}.van-icon-question:before{content:""}.van-icon-search:before{content:""}.van-icon-refund-o:before{content:""}.van-icon-service-o:before{content:""}.van-icon-scan:before{content:""}.van-icon-share:before{content:""}.van-icon-send-gift-o:before{content:""}.van-icon-share-o:before{content:""}.van-icon-setting:before{content:""}.van-icon-points:before{content:""}.van-icon-photograph:before{content:""}.van-icon-shop:before{content:""}.van-icon-shop-o:before{content:""}.van-icon-shop-collect-o:before{content:""}.van-icon-shop-collect:before{content:""}.van-icon-smile:before{content:""}.van-icon-shopping-cart-o:before{content:""}.van-icon-sign:before{content:""}.van-icon-sort:before{content:""}.van-icon-star-o:before{content:""}.van-icon-smile-comment-o:before{content:""}.van-icon-stop:before{content:""}.van-icon-stop-circle-o:before{content:""}.van-icon-smile-o:before{content:""}.van-icon-star:before{content:""}.van-icon-success:before{content:""}.van-icon-stop-circle:before{content:""}.van-icon-records-o:before{content:""}.van-icon-shopping-cart:before{content:""}.van-icon-tosend:before{content:""}.van-icon-todo-list:before{content:""}.van-icon-thumb-circle-o:before{content:""}.van-icon-thumb-circle:before{content:""}.van-icon-umbrella-circle:before{content:""}.van-icon-underway:before{content:""}.van-icon-upgrade:before{content:""}.van-icon-todo-list-o:before{content:""}.van-icon-tv-o:before{content:""}.van-icon-underway-o:before{content:""}.van-icon-user-o:before{content:""}.van-icon-vip-card-o:before{content:""}.van-icon-vip-card:before{content:""}.van-icon-send-gift:before{content:""}.van-icon-wap-home:before{content:""}.van-icon-wap-nav:before{content:""}.van-icon-volume-o:before{content:""}.van-icon-video:before{content:""}.van-icon-wap-home-o:before{content:""}.van-icon-volume:before{content:""}.van-icon-warning:before{content:""}.van-icon-weapp-nav:before{content:""}.van-icon-wechat-pay:before{content:""}.van-icon-warning-o:before{content:""}.van-icon-wechat:before{content:""}.van-icon-setting-o:before{content:""}.van-icon-youzan-shield:before{content:""}.van-icon-warn-o:before{content:""}.van-icon-smile-comment:before{content:""}.van-icon-user-circle-o:before{content:""}.van-icon-video-o:before{content:""}.van-icon-add-square:before{content:""}.van-icon-add:before{content:""}.van-icon-arrow-down:before{content:""}.van-icon-arrow-up:before{content:""}.van-icon-arrow:before{content:""}.van-icon-after-sale:before{content:""}.van-icon-add-o:before{content:""}.van-icon-alipay:before{content:""}.van-icon-ascending:before{content:""}.van-icon-apps-o:before{content:""}.van-icon-aim:before{content:""}.van-icon-award:before{content:""}.van-icon-arrow-left:before{content:""}.van-icon-award-o:before{content:""}.van-icon-audio:before{content:""}.van-icon-bag-o:before{content:""}.van-icon-balance-list:before{content:""}.van-icon-back-top:before{content:""}.van-icon-bag:before{content:""}.van-icon-balance-pay:before{content:""}.van-icon-balance-o:before{content:""}.van-icon-bar-chart-o:before{content:""}.van-icon-bars:before{content:""}.van-icon-balance-list-o:before{content:""}.van-icon-birthday-cake-o:before{content:""}.van-icon-bookmark:before{content:""}.van-icon-bill:before{content:""}.van-icon-bell:before{content:""}.van-icon-browsing-history-o:before{content:""}.van-icon-browsing-history:before{content:""}.van-icon-bookmark-o:before{content:""}.van-icon-bulb-o:before{content:""}.van-icon-bullhorn-o:before{content:""}.van-icon-bill-o:before{content:""}.van-icon-calendar-o:before{content:""}.van-icon-brush-o:before{content:""}.van-icon-card:before{content:""}.van-icon-cart-o:before{content:""}.van-icon-cart-circle:before{content:""}.van-icon-cart-circle-o:before{content:""}.van-icon-cart:before{content:""}.van-icon-cash-on-deliver:before{content:""}.van-icon-cash-back-record-o:before{content:""}.van-icon-cashier-o:before{content:""}.van-icon-chart-trending-o:before{content:""}.van-icon-certificate:before{content:""}.van-icon-chat:before{content:""}.van-icon-clear:before{content:""}.van-icon-chat-o:before{content:""}.van-icon-checked:before{content:""}.van-icon-clock:before{content:""}.van-icon-clock-o:before{content:""}.van-icon-close:before{content:""}.van-icon-closed-eye:before{content:""}.van-icon-circle:before{content:""}.van-icon-cluster-o:before{content:""}.van-icon-column:before{content:""}.van-icon-comment-circle-o:before{content:""}.van-icon-cluster:before{content:""}.van-icon-comment:before{content:""}.van-icon-comment-o:before{content:""}.van-icon-comment-circle:before{content:""}.van-icon-completed-o:before{content:""}.van-icon-credit-pay:before{content:""}.van-icon-coupon:before{content:""}.van-icon-debit-pay:before{content:""}.van-icon-coupon-o:before{content:""}.van-icon-contact-o:before{content:""}.van-icon-descending:before{content:""}.van-icon-desktop-o:before{content:""}.van-icon-diamond-o:before{content:""}.van-icon-description-o:before{content:""}.van-icon-delete:before{content:""}.van-icon-diamond:before{content:""}.van-icon-delete-o:before{content:""}.van-icon-cross:before{content:""}.van-icon-edit:before{content:""}.van-icon-ellipsis:before{content:""}.van-icon-down:before{content:""}.van-icon-discount-o:before{content:""}.van-icon-ecard-pay:before{content:""}.van-icon-envelop-o:before{content:""}@font-face{font-weight:400;font-family:vant-icon;font-style:normal;font-display:auto;src:url(data:font/woff2;charset=utf-8;base64,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) format("woff2"),url(//at.alicdn.com/t/c/font_2553510_ciljc7axaw7.woff?t=1705587463221) format("woff")}.van-icon__image{display:block;width:1em;height:1em;object-fit:contain}:root,:host{--van-skeleton-image-size: 96px;--van-skeleton-image-radius: 24px}.van-skeleton-image{display:flex;width:var(--van-skeleton-image-size);height:var(--van-skeleton-image-size);align-items:center;justify-content:center;background:var(--van-active-color)}.van-skeleton-image--round{border-radius:var(--van-skeleton-image-radius)}.van-skeleton-image__icon{width:calc(var(--van-skeleton-image-size) / 2);height:calc(var(--van-skeleton-image-size) / 2);font-size:calc(var(--van-skeleton-image-size) / 2);color:var(--van-gray-5)}:root,:host{--van-rate-icon-size: 20px;--van-rate-icon-gutter: var(--van-padding-base);--van-rate-icon-void-color: var(--van-gray-5);--van-rate-icon-full-color: var(--van-danger-color);--van-rate-icon-disabled-color: var(--van-gray-5)}.van-rate{display:inline-flex;cursor:pointer;-webkit-user-select:none;user-select:none;flex-wrap:wrap}.van-rate__item{position:relative}.van-rate__item:not(:last-child){padding-right:var(--van-rate-icon-gutter)}.van-rate__icon{display:block;width:1em;color:var(--van-rate-icon-void-color);font-size:var(--van-rate-icon-size)}.van-rate__icon--half{position:absolute;top:0;left:0;overflow:hidden;pointer-events:none}.van-rate__icon--full{color:var(--van-rate-icon-full-color)}.van-rate__icon--disabled{color:var(--van-rate-icon-disabled-color)}.van-rate--disabled{cursor:not-allowed}.van-rate--readonly{cursor:default}:root,:host{--van-notice-bar-height: 40px;--van-notice-bar-padding: 0 var(--van-padding-md);--van-notice-bar-wrapable-padding: var(--van-padding-xs) var(--van-padding-md);--van-notice-bar-text-color: var(--van-orange-dark);--van-notice-bar-font-size: var(--van-font-size-md);--van-notice-bar-line-height: 24px;--van-notice-bar-background: var(--van-orange-light);--van-notice-bar-icon-size: 16px;--van-notice-bar-icon-min-width: 24px}.van-notice-bar{position:relative;display:flex;align-items:center;height:var(--van-notice-bar-height);padding:var(--van-notice-bar-padding);color:var(--van-notice-bar-text-color);font-size:var(--van-notice-bar-font-size);line-height:var(--van-notice-bar-line-height);background:var(--van-notice-bar-background)}.van-notice-bar__left-icon,.van-notice-bar__right-icon{min-width:var(--van-notice-bar-icon-min-width);font-size:var(--van-notice-bar-icon-size)}.van-notice-bar__right-icon{text-align:right;cursor:pointer}.van-notice-bar__wrap{position:relative;display:flex;flex:1;align-items:center;height:100%;overflow:hidden}.van-notice-bar__content{position:absolute;white-space:nowrap;transition-timing-function:linear}.van-notice-bar__content.van-ellipsis{max-width:100%}.van-notice-bar--wrapable{height:auto;padding:var(--van-notice-bar-wrapable-padding)}.van-notice-bar--wrapable .van-notice-bar__wrap{height:auto}.van-notice-bar--wrapable .van-notice-bar__content{position:relative;white-space:normal;word-wrap:break-word}:root,:host{--van-nav-bar-height: 46px;--van-nav-bar-background: var(--van-background-2);--van-nav-bar-arrow-size: 16px;--van-nav-bar-icon-color: var(--van-primary-color);--van-nav-bar-text-color: var(--van-primary-color);--van-nav-bar-title-font-size: var(--van-font-size-lg);--van-nav-bar-title-text-color: var(--van-text-color);--van-nav-bar-z-index: 1;--van-nav-bar-disabled-opacity: var(--van-disabled-opacity)}.van-nav-bar{position:relative;z-index:var(--van-nav-bar-z-index);line-height:var(--van-line-height-lg);text-align:center;background:var(--van-nav-bar-background);-webkit-user-select:none;user-select:none}.van-nav-bar--fixed{position:fixed;top:0;left:0;width:100%}.van-nav-bar--safe-area-inset-top{padding-top:constant(safe-area-inset-top);padding-top:env(safe-area-inset-top)}.van-nav-bar .van-icon{color:var(--van-nav-bar-icon-color)}.van-nav-bar__content{position:relative;display:flex;align-items:center;height:var(--van-nav-bar-height)}.van-nav-bar__arrow{margin-right:var(--van-padding-base);font-size:var(--van-nav-bar-arrow-size)}.van-nav-bar__title{max-width:60%;margin:0 auto;color:var(--van-nav-bar-title-text-color);font-weight:var(--van-font-bold);font-size:var(--van-nav-bar-title-font-size)}.van-nav-bar__left,.van-nav-bar__right{position:absolute;top:0;bottom:0;display:flex;align-items:center;padding:0 var(--van-padding-md);font-size:var(--van-font-size-md)}.van-nav-bar__left--disabled,.van-nav-bar__right--disabled{cursor:not-allowed;opacity:var(--van-nav-bar-disabled-opacity)}.van-nav-bar__left{left:0}.van-nav-bar__right{right:0}.van-nav-bar__text{color:var(--van-nav-bar-text-color)}:root,:host{--van-floating-bubble-size: 48px;--van-floating-bubble-initial-gap: 24px;--van-floating-bubble-icon-size: 28px;--van-floating-bubble-background: var(--van-primary-color);--van-floating-bubble-color: var(--van-background-2);--van-floating-bubble-z-index: 999;--van-floating-bubble-border-radius: var(--van-radius-max)}.van-floating-bubble{position:fixed;left:0;top:0;right:var(--van-floating-bubble-initial-gap);bottom:var(--van-floating-bubble-initial-gap);width:var(--van-floating-bubble-size);height:var(--van-floating-bubble-size);box-sizing:border-box;display:flex;justify-content:center;align-items:center;overflow:hidden;cursor:pointer;-webkit-user-select:none;user-select:none;touch-action:none;background:var(--van-floating-bubble-background);color:var(--van-floating-bubble-color);border-radius:var(--van-floating-bubble-border-radius);z-index:var(--van-floating-bubble-z-index);transition:transform var(--van-duration-base)}.van-floating-bubble:active{opacity:.8}.van-floating-bubble__icon{font-size:var(--van-floating-bubble-icon-size)}:root,:host{--van-image-placeholder-text-color: var(--van-text-color-2);--van-image-placeholder-font-size: var(--van-font-size-md);--van-image-placeholder-background: var(--van-background);--van-image-loading-icon-size: 32px;--van-image-loading-icon-color: var(--van-gray-4);--van-image-error-icon-size: 32px;--van-image-error-icon-color: var(--van-gray-4)}.van-image{position:relative;display:inline-block}.van-image--round{overflow:hidden;border-radius:var(--van-radius-max)}.van-image--round .van-image__img{border-radius:inherit}.van-image--block{display:block}.van-image__img,.van-image__error,.van-image__loading{display:block;width:100%;height:100%}.van-image__error,.van-image__loading{position:absolute;top:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--van-image-placeholder-text-color);font-size:var(--van-image-placeholder-font-size);background:var(--van-image-placeholder-background)}.van-image__loading-icon{color:var(--van-image-loading-icon-color);font-size:var(--van-image-loading-icon-size)}.van-image__error-icon{color:var(--van-image-error-icon-color);font-size:var(--van-image-error-icon-size)}:root,:host{--van-back-top-size: 40px;--van-back-top-right: 30px;--van-back-top-bottom: 40px;--van-back-top-z-index: 100;--van-back-top-icon-size: 20px;--van-back-top-text-color: #fff;--van-back-top-background: var(--van-blue)}.van-back-top{position:fixed;display:flex;align-items:center;justify-content:center;width:var(--van-back-top-size);height:var(--van-back-top-size);right:var(--van-back-top-right);bottom:var(--van-back-top-bottom);z-index:var(--van-back-top-z-index);cursor:pointer;color:var(--van-back-top-text-color);border-radius:var(--van-radius-max);box-shadow:0 2px 8px #0000001f;transform:scale(0);transition:var(--van-duration-base) cubic-bezier(.25,.8,.5,1);background-color:var(--van-back-top-background)}.van-back-top:active{opacity:var(--van-active-opacity)}.van-back-top__placeholder{display:none}.van-back-top--active{transform:scale(1)}.van-back-top__icon{font-size:var(--van-back-top-icon-size);font-weight:var(--van-font-bold)}:root,:host{--van-tag-padding: 0 var(--van-padding-base);--van-tag-text-color: var(--van-white);--van-tag-font-size: var(--van-font-size-sm);--van-tag-radius: 2px;--van-tag-line-height: 16px;--van-tag-medium-padding: 2px 6px;--van-tag-large-padding: var(--van-padding-base) var(--van-padding-xs);--van-tag-large-radius: var(--van-radius-md);--van-tag-large-font-size: var(--van-font-size-md);--van-tag-round-radius: var(--van-radius-max);--van-tag-danger-color: var(--van-danger-color);--van-tag-primary-color: var(--van-primary-color);--van-tag-success-color: var(--van-success-color);--van-tag-warning-color: var(--van-warning-color);--van-tag-default-color: var(--van-gray-6);--van-tag-plain-background: var(--van-background-2)}.van-tag{position:relative;display:inline-flex;align-items:center;padding:var(--van-tag-padding);color:var(--van-tag-text-color);font-size:var(--van-tag-font-size);line-height:var(--van-tag-line-height);border-radius:var(--van-tag-radius)}.van-tag--default{background:var(--van-tag-default-color)}.van-tag--default.van-tag--plain{color:var(--van-tag-default-color)}.van-tag--danger{background:var(--van-tag-danger-color)}.van-tag--danger.van-tag--plain{color:var(--van-tag-danger-color)}.van-tag--primary{background:var(--van-tag-primary-color)}.van-tag--primary.van-tag--plain{color:var(--van-tag-primary-color)}.van-tag--success{background:var(--van-tag-success-color)}.van-tag--success.van-tag--plain{color:var(--van-tag-success-color)}.van-tag--warning{background:var(--van-tag-warning-color)}.van-tag--warning.van-tag--plain{color:var(--van-tag-warning-color)}.van-tag--plain{background:var(--van-tag-plain-background);border-color:currentColor}.van-tag--plain:before{position:absolute;inset:0;border:1px solid;border-color:inherit;border-radius:inherit;content:"";pointer-events:none}.van-tag--medium{padding:var(--van-tag-medium-padding)}.van-tag--large{padding:var(--van-tag-large-padding);font-size:var(--van-tag-large-font-size);border-radius:var(--van-tag-large-radius)}.van-tag--mark{border-radius:0 var(--van-tag-round-radius) var(--van-tag-round-radius) 0}.van-tag--mark:after{display:block;width:2px;content:""}.van-tag--round{border-radius:var(--van-tag-round-radius)}.van-tag__close{margin-left:2px}:root,:host{--van-card-padding: var(--van-padding-xs) var(--van-padding-md);--van-card-font-size: var(--van-font-size-sm);--van-card-text-color: var(--van-text-color);--van-card-background: var(--van-background);--van-card-thumb-size: 88px;--van-card-thumb-radius: var(--van-radius-lg);--van-card-title-line-height: 16px;--van-card-desc-color: var(--van-text-color-2);--van-card-desc-line-height: var(--van-line-height-md);--van-card-price-color: var(--van-text-color);--van-card-origin-price-color: var(--van-text-color-2);--van-card-num-color: var(--van-text-color-2);--van-card-origin-price-font-size: var(--van-font-size-xs);--van-card-price-font-size: var(--van-font-size-sm);--van-card-price-integer-font-size: var(--van-font-size-lg);--van-card-price-font: var(--van-price-font)}.van-card{position:relative;box-sizing:border-box;padding:var(--van-card-padding);color:var(--van-card-text-color);font-size:var(--van-card-font-size);background:var(--van-card-background)}.van-card:not(:first-child){margin-top:var(--van-padding-xs)}.van-card__header{display:flex}.van-card__thumb{position:relative;flex:none;width:var(--van-card-thumb-size);height:var(--van-card-thumb-size);margin-right:var(--van-padding-xs)}.van-card__thumb img{border-radius:var(--van-card-thumb-radius)}.van-card__content{position:relative;display:flex;flex:1;flex-direction:column;justify-content:space-between;min-width:0;min-height:var(--van-card-thumb-size)}.van-card__content--centered{justify-content:center}.van-card__title,.van-card__desc{word-wrap:break-word}.van-card__title{max-height:32px;font-weight:var(--van-font-bold);line-height:var(--van-card-title-line-height)}.van-card__desc{max-height:var(--van-card-desc-line-height);color:var(--van-card-desc-color);line-height:var(--van-card-desc-line-height)}.van-card__bottom{line-height:var(--van-line-height-md)}.van-card__price{display:inline-block;color:var(--van-card-price-color);font-weight:var(--van-font-bold);font-size:var(--van-card-price-font-size)}.van-card__price-integer{font-size:var(--van-card-price-integer-font-size);font-family:var(--van-card-price-font)}.van-card__price-decimal{font-family:var(--van-card-price-font)}.van-card__origin-price{display:inline-block;margin-left:5px;color:var(--van-card-origin-price-color);font-size:var(--van-card-origin-price-font-size);text-decoration:line-through}.van-card__num{float:right;color:var(--van-card-num-color)}.van-card__tag{position:absolute;top:2px;left:0}.van-card__footer{flex:none;text-align:right}.van-card__footer .van-button{margin-left:5px}:root,:host{--van-cell-font-size: var(--van-font-size-md);--van-cell-line-height: 24px;--van-cell-vertical-padding: 10px;--van-cell-horizontal-padding: var(--van-padding-md);--van-cell-text-color: var(--van-text-color);--van-cell-background: var(--van-background-2);--van-cell-border-color: var(--van-border-color);--van-cell-active-color: var(--van-active-color);--van-cell-required-color: var(--van-danger-color);--van-cell-label-color: var(--van-text-color-2);--van-cell-label-font-size: var(--van-font-size-sm);--van-cell-label-line-height: var(--van-line-height-sm);--van-cell-label-margin-top: var(--van-padding-base);--van-cell-value-color: var(--van-text-color-2);--van-cell-value-font-size: inherit;--van-cell-icon-size: 16px;--van-cell-right-icon-color: var(--van-gray-6);--van-cell-large-vertical-padding: var(--van-padding-sm);--van-cell-large-title-font-size: var(--van-font-size-lg);--van-cell-large-label-font-size: var(--van-font-size-md);--van-cell-large-value-font-size: inherit}.van-cell{position:relative;display:flex;box-sizing:border-box;width:100%;padding:var(--van-cell-vertical-padding) var(--van-cell-horizontal-padding);overflow:hidden;color:var(--van-cell-text-color);font-size:var(--van-cell-font-size);line-height:var(--van-cell-line-height);background:var(--van-cell-background)}.van-cell:after{position:absolute;box-sizing:border-box;content:" ";pointer-events:none;right:var(--van-padding-md);bottom:0;left:var(--van-padding-md);border-bottom:1px solid var(--van-cell-border-color);transform:scaleY(.5)}.van-cell:last-child:after,.van-cell--borderless:after{display:none}.van-cell__label{margin-top:var(--van-cell-label-margin-top);color:var(--van-cell-label-color);font-size:var(--van-cell-label-font-size);line-height:var(--van-cell-label-line-height)}.van-cell__title,.van-cell__value{flex:1}.van-cell__value{position:relative;overflow:hidden;color:var(--van-cell-value-color);font-size:var(--van-cell-value-font-size);text-align:right;vertical-align:middle;word-wrap:break-word}.van-cell__left-icon,.van-cell__right-icon{height:var(--van-cell-line-height);font-size:var(--van-cell-icon-size);line-height:var(--van-cell-line-height)}.van-cell__left-icon{margin-right:var(--van-padding-base)}.van-cell__right-icon{margin-left:var(--van-padding-base);color:var(--van-cell-right-icon-color)}.van-cell--clickable{cursor:pointer}.van-cell--clickable:active{background-color:var(--van-cell-active-color)}.van-cell--required{overflow:visible}.van-cell--required:before{position:absolute;left:var(--van-padding-xs);color:var(--van-cell-required-color);font-size:var(--van-cell-font-size);content:"*"}.van-cell--center{align-items:center}.van-cell--large{padding-top:var(--van-cell-large-vertical-padding);padding-bottom:var(--van-cell-large-vertical-padding)}.van-cell--large .van-cell__title{font-size:var(--van-cell-large-title-font-size)}.van-cell--large .van-cell__label{font-size:var(--van-cell-large-label-font-size)}.van-cell--large .van-cell__value{font-size:var(--van-cell-large-value-font-size)}:root,:host{--van-coupon-cell-selected-text-color: var(--van-text-color)}.van-coupon-cell__value--selected{color:var(--van-coupon-cell-selected-text-color)}:root,:host{--van-contact-card-padding: var(--van-padding-md);--van-contact-card-add-icon-size: 40px;--van-contact-card-add-icon-color: var(--van-primary-color);--van-contact-card-title-line-height: var(--van-line-height-md)}.van-contact-card{padding:var(--van-contact-card-padding)}.van-contact-card__title{margin-left:5px;line-height:var(--van-contact-card-title-line-height)}.van-contact-card--add .van-contact-card__value{line-height:var(--van-contact-card-add-icon-size)}.van-contact-card--add .van-cell__left-icon{color:var(--van-contact-card-add-icon-color);font-size:var(--van-contact-card-add-icon-size)}.van-contact-card:before{position:absolute;right:0;bottom:0;left:0;height:2px;background:repeating-linear-gradient(-45deg,var(--van-warning-color) 0,var(--van-warning-color) 20%,transparent 0,transparent 25%,var(--van-primary-color) 0,var(--van-primary-color) 45%,transparent 0,transparent 50%);background-size:80px;content:""}:root,:host{--van-collapse-item-duration: var(--van-duration-base);--van-collapse-item-content-padding: var(--van-padding-sm) var(--van-padding-md);--van-collapse-item-content-font-size: var(--van-font-size-md);--van-collapse-item-content-line-height: 1.5;--van-collapse-item-content-text-color: var(--van-text-color-2);--van-collapse-item-content-background: var(--van-background-2);--van-collapse-item-title-disabled-color: var(--van-text-color-3)}.van-collapse-item{position:relative}.van-collapse-item--border:after{position:absolute;box-sizing:border-box;content:" ";pointer-events:none;top:0;right:var(--van-padding-md);left:var(--van-padding-md);border-top:1px solid var(--van-border-color);transform:scaleY(.5)}.van-collapse-item__title .van-cell__right-icon:before{transform:rotate(90deg) translateZ(0);transition:transform var(--van-collapse-item-duration)}.van-collapse-item__title:after{right:var(--van-padding-md);display:none}.van-collapse-item__title--expanded .van-cell__right-icon:before{transform:rotate(-90deg)}.van-collapse-item__title--expanded:after{display:block}.van-collapse-item__title--borderless:after{display:none}.van-collapse-item__title--disabled{cursor:not-allowed}.van-collapse-item__title--disabled,.van-collapse-item__title--disabled .van-cell__right-icon{color:var(--van-collapse-item-title-disabled-color)}.van-collapse-item__wrapper{overflow:hidden;transition:height var(--van-collapse-item-duration) ease-in-out;will-change:height}.van-collapse-item__content{padding:var(--van-collapse-item-content-padding);color:var(--van-collapse-item-content-text-color);font-size:var(--van-collapse-item-content-font-size);line-height:var(--van-collapse-item-content-line-height);background:var(--van-collapse-item-content-background)}:root,:host{--van-field-label-width: 6.2em;--van-field-label-color: var(--van-text-color);--van-field-label-margin-right: var(--van-padding-sm);--van-field-input-text-color: var(--van-text-color);--van-field-input-error-text-color: var(--van-danger-color);--van-field-input-disabled-text-color: var(--van-text-color-3);--van-field-placeholder-text-color: var(--van-text-color-3);--van-field-icon-size: 18px;--van-field-clear-icon-size: 18px;--van-field-clear-icon-color: var(--van-gray-5);--van-field-right-icon-color: var(--van-gray-6);--van-field-error-message-color: var(--van-danger-color);--van-field-error-message-font-size: 12px;--van-field-text-area-min-height: 60px;--van-field-word-limit-color: var(--van-gray-7);--van-field-word-limit-font-size: var(--van-font-size-sm);--van-field-word-limit-line-height: 16px;--van-field-disabled-text-color: var(--van-text-color-3);--van-field-required-mark-color: var(--van-red)}.van-field{flex-wrap:wrap}.van-field__label{flex:none;box-sizing:border-box;width:var(--van-field-label-width);margin-right:var(--van-field-label-margin-right);color:var(--van-field-label-color);text-align:left;word-wrap:break-word}.van-field__label--center{text-align:center}.van-field__label--right{text-align:right}.van-field__label--top{display:flex;width:100%;text-align:left;margin-bottom:var(--van-padding-base);overflow-wrap:break-word}.van-field__label--required:before{margin-right:2px;color:var(--van-field-required-mark-color);content:"*"}.van-field--disabled .van-field__label{color:var(--van-field-disabled-text-color)}.van-field__value{overflow:visible}.van-field__body{display:flex;align-items:center}.van-field__control{display:block;box-sizing:border-box;width:100%;min-width:0;margin:0;padding:0;color:var(--van-field-input-text-color);line-height:inherit;text-align:left;background-color:transparent;border:0;resize:none;-webkit-user-select:auto;user-select:auto}.van-field__control::-webkit-input-placeholder{color:var(--van-field-placeholder-text-color)}.van-field__control::placeholder{color:var(--van-field-placeholder-text-color)}.van-field__control:read-only{cursor:default}.van-field__control:disabled{color:var(--van-field-input-disabled-text-color);cursor:not-allowed;opacity:1;-webkit-text-fill-color:var(--van-field-input-disabled-text-color)}.van-field__control--center{justify-content:center;text-align:center}.van-field__control--right{justify-content:flex-end;text-align:right}.van-field__control--custom{display:flex;align-items:center;min-height:var(--van-cell-line-height)}.van-field__control--error::-webkit-input-placeholder{color:var(--van-field-input-error-text-color);-webkit-text-fill-color:currentColor}.van-field__control--error,.van-field__control--error::placeholder{color:var(--van-field-input-error-text-color);-webkit-text-fill-color:currentColor}.van-field__control--min-height{min-height:var(--van-field-text-area-min-height)}.van-field__control[type=date],.van-field__control[type=time],.van-field__control[type=datetime-local]{min-height:var(--van-cell-line-height)}.van-field__control[type=search]{-webkit-appearance:none}.van-field__clear,.van-field__icon,.van-field__button,.van-field__right-icon{flex-shrink:0}.van-field__clear,.van-field__right-icon{margin-right:calc(var(--van-padding-xs) * -1);padding:0 var(--van-padding-xs);line-height:inherit}.van-field__clear{color:var(--van-field-clear-icon-color);font-size:var(--van-field-clear-icon-size);cursor:pointer}.van-field__left-icon .van-icon,.van-field__right-icon .van-icon{display:block;font-size:var(--van-field-icon-size);line-height:inherit}.van-field__left-icon{margin-right:var(--van-padding-base)}.van-field__right-icon{color:var(--van-field-right-icon-color)}.van-field__button{padding-left:var(--van-padding-xs)}.van-field__error-message{color:var(--van-field-error-message-color);font-size:var(--van-field-error-message-font-size);text-align:left}.van-field__error-message--center{text-align:center}.van-field__error-message--right{text-align:right}.van-field__word-limit{margin-top:var(--van-padding-base);color:var(--van-field-word-limit-color);font-size:var(--van-field-word-limit-font-size);line-height:var(--van-field-word-limit-line-height);text-align:right}:root,:host{--van-search-padding: 10px var(--van-padding-sm);--van-search-background: var(--van-background-2);--van-search-content-background: var(--van-background);--van-search-input-height: 34px;--van-search-label-padding: 0 5px;--van-search-label-color: var(--van-text-color);--van-search-label-font-size: var(--van-font-size-md);--van-search-left-icon-color: var(--van-gray-6);--van-search-action-padding: 0 var(--van-padding-xs);--van-search-action-text-color: var(--van-text-color);--van-search-action-font-size: var(--van-font-size-md)}.van-search{display:flex;align-items:center;box-sizing:border-box;padding:var(--van-search-padding);background:var(--van-search-background)}.van-search__content{display:flex;flex:1;padding-left:var(--van-padding-sm);background:var(--van-search-content-background);border-radius:var(--van-radius-sm)}.van-search__content--round{border-radius:var(--van-radius-max)}.van-search__label{padding:var(--van-search-label-padding);color:var(--van-search-label-color);font-size:var(--van-search-label-font-size);line-height:var(--van-search-input-height)}.van-search__field{flex:1;align-items:center;padding:0 var(--van-padding-xs) 0 0;height:var(--van-search-input-height);background-color:transparent}.van-search__field .van-field__left-icon{color:var(--van-search-left-icon-color)}.van-search__field--with-message{height:auto;align-items:flex-start;padding-top:5px;padding-bottom:5px}.van-search--show-action{padding-right:0}.van-search input::-webkit-search-decoration,.van-search input::-webkit-search-cancel-button,.van-search input::-webkit-search-results-button,.van-search input::-webkit-search-results-decoration{display:none}.van-search__action{padding:var(--van-search-action-padding);color:var(--van-search-action-text-color);font-size:var(--van-search-action-font-size);line-height:var(--van-search-input-height);cursor:pointer;-webkit-user-select:none;user-select:none}.van-search__action:active{background-color:var(--van-active-color)}:root,:host{--van-action-bar-icon-width: 48px;--van-action-bar-icon-height: 100%;--van-action-bar-icon-color: var(--van-text-color);--van-action-bar-icon-size: 18px;--van-action-bar-icon-font-size: var(--van-font-size-xs);--van-action-bar-icon-active-color: var(--van-active-color);--van-action-bar-icon-text-color: var(--van-text-color);--van-action-bar-icon-background: var(--van-background-2)}.van-action-bar-icon{display:flex;flex-direction:column;justify-content:center;min-width:var(--van-action-bar-icon-width);height:var(--van-action-bar-icon-height);color:var(--van-action-bar-icon-text-color);font-size:var(--van-action-bar-icon-font-size);line-height:1;text-align:center;background:var(--van-action-bar-icon-background);cursor:pointer}.van-action-bar-icon:active{background-color:var(--van-action-bar-icon-active-color)}.van-action-bar-icon__icon{margin:0 auto var(--van-padding-base);color:var(--van-action-bar-icon-color);font-size:var(--van-action-bar-icon-size)}:root,:host{--van-loading-text-color: var(--van-text-color-2);--van-loading-text-font-size: var(--van-font-size-md);--van-loading-spinner-color: var(--van-gray-5);--van-loading-spinner-size: 30px;--van-loading-spinner-duration: .8s}.van-loading{position:relative;color:var(--van-loading-spinner-color);font-size:0;vertical-align:middle}.van-loading__spinner{position:relative;display:inline-block;width:var(--van-loading-spinner-size);max-width:100%;height:var(--van-loading-spinner-size);max-height:100%;vertical-align:middle;animation:van-rotate var(--van-loading-spinner-duration) linear infinite}.van-loading__spinner--spinner{animation-timing-function:steps(12)}.van-loading__spinner--circular{animation-duration:2s}.van-loading__line{position:absolute;top:0;left:0;width:100%;height:100%}.van-loading__line:before{display:block;width:2px;height:25%;margin:0 auto;background-color:currentColor;border-radius:40%;content:" "}.van-loading__circular{display:block;width:100%;height:100%}.van-loading__circular circle{animation:van-circular 1.5s ease-in-out infinite;stroke:currentColor;stroke-width:3;stroke-linecap:round}.van-loading__text{display:inline-block;margin-left:var(--van-padding-xs);color:var(--van-loading-text-color);font-size:var(--van-loading-text-font-size);vertical-align:middle}.van-loading--vertical{display:flex;flex-direction:column;align-items:center}.van-loading--vertical .van-loading__text{margin:var(--van-padding-xs) 0 0}@keyframes van-circular{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40}to{stroke-dasharray:90,150;stroke-dashoffset:-120}}.van-loading__line--1{transform:rotate(30deg);opacity:1}.van-loading__line--2{transform:rotate(60deg);opacity:.9375}.van-loading__line--3{transform:rotate(90deg);opacity:.875}.van-loading__line--4{transform:rotate(120deg);opacity:.8125}.van-loading__line--5{transform:rotate(150deg);opacity:.75}.van-loading__line--6{transform:rotate(180deg);opacity:.6875}.van-loading__line--7{transform:rotate(210deg);opacity:.625}.van-loading__line--8{transform:rotate(240deg);opacity:.5625}.van-loading__line--9{transform:rotate(270deg);opacity:.5}.van-loading__line--10{transform:rotate(300deg);opacity:.4375}.van-loading__line--11{transform:rotate(330deg);opacity:.375}.van-loading__line--12{transform:rotate(360deg);opacity:.3125}:root,:host{--van-pull-refresh-head-height: 50px;--van-pull-refresh-head-font-size: var(--van-font-size-md);--van-pull-refresh-head-text-color: var(--van-text-color-2);--van-pull-refresh-loading-icon-size: 16px}.van-pull-refresh{overflow:hidden}.van-pull-refresh__track{position:relative;height:100%;transition-property:transform}.van-pull-refresh__head{position:absolute;left:0;width:100%;height:var(--van-pull-refresh-head-height);overflow:hidden;color:var(--van-pull-refresh-head-text-color);font-size:var(--van-pull-refresh-head-font-size);line-height:var(--van-pull-refresh-head-height);text-align:center;transform:translateY(-100%)}.van-pull-refresh__loading .van-loading__spinner{width:var(--van-pull-refresh-loading-icon-size);height:var(--van-pull-refresh-loading-icon-size)}:root,:host{--van-number-keyboard-background: var(--van-gray-2);--van-number-keyboard-key-height: 48px;--van-number-keyboard-key-font-size: 28px;--van-number-keyboard-key-active-color: var(--van-gray-3);--van-number-keyboard-key-background: var(--van-background-2);--van-number-keyboard-delete-font-size: var(--van-font-size-lg);--van-number-keyboard-title-color: var(--van-gray-7);--van-number-keyboard-title-height: 34px;--van-number-keyboard-title-font-size: var(--van-font-size-lg);--van-number-keyboard-close-padding: 0 var(--van-padding-md);--van-number-keyboard-close-color: var(--van-primary-color);--van-number-keyboard-close-font-size: var(--van-font-size-md);--van-number-keyboard-button-text-color: var(--van-white);--van-number-keyboard-button-background: var(--van-primary-color);--van-number-keyboard-z-index: 100}.van-theme-dark{--van-number-keyboard-background: var(--van-gray-8);--van-number-keyboard-key-background: var(--van-gray-7);--van-number-keyboard-key-active-color: var(--van-gray-6)}.van-number-keyboard{position:fixed;bottom:0;left:0;z-index:var(--van-number-keyboard-z-index);width:100%;padding-bottom:22px;background:var(--van-number-keyboard-background);-webkit-user-select:none;user-select:none}.van-number-keyboard--with-title{border-radius:20px 20px 0 0}.van-number-keyboard__header{position:relative;display:flex;align-items:center;justify-content:center;box-sizing:content-box;height:var(--van-number-keyboard-title-height);padding-top:6px;color:var(--van-number-keyboard-title-color);font-size:var(--van-number-keyboard-title-font-size)}.van-number-keyboard__title{display:inline-block;font-weight:400}.van-number-keyboard__title-left{position:absolute;left:0}.van-number-keyboard__body{display:flex;padding:6px 0 0 6px}.van-number-keyboard__keys{display:flex;flex:3;flex-wrap:wrap}.van-number-keyboard__close{position:absolute;right:0;height:100%;padding:var(--van-number-keyboard-close-padding);color:var(--van-number-keyboard-close-color);font-size:var(--van-number-keyboard-close-font-size);background-color:transparent;border:none}.van-number-keyboard__sidebar{display:flex;flex:1;flex-direction:column}.van-number-keyboard--unfit{padding-bottom:0}.van-key{display:flex;align-items:center;justify-content:center;height:var(--van-number-keyboard-key-height);font-size:var(--van-number-keyboard-key-font-size);line-height:1.5;background:var(--van-number-keyboard-key-background);border-radius:var(--van-radius-lg);cursor:pointer}.van-key--large{position:absolute;inset:0 6px 6px 0;height:auto}.van-key--blue,.van-key--delete{font-size:var(--van-number-keyboard-delete-font-size)}.van-key--active{background-color:var(--van-number-keyboard-key-active-color)}.van-key--blue{color:var(--van-number-keyboard-button-text-color);background:var(--van-number-keyboard-button-background)}.van-key--blue.van-key--active{opacity:var(--van-active-opacity)}.van-key__wrapper{position:relative;flex:1;flex-basis:33%;box-sizing:border-box;padding:0 6px 6px 0}.van-key__wrapper--wider{flex-basis:66%}.van-key__delete-icon{width:32px;height:22px}.van-key__collapse-icon{width:30px;height:24px}.van-key__loading-icon{color:var(--van-number-keyboard-button-text-color)}:root,:host{--van-list-text-color: var(--van-text-color-2);--van-list-text-font-size: var(--van-font-size-md);--van-list-text-line-height: 50px;--van-list-loading-icon-size: 16px}.van-list__loading,.van-list__finished-text,.van-list__error-text{color:var(--van-list-text-color);font-size:var(--van-list-text-font-size);line-height:var(--van-list-text-line-height);text-align:center}.van-list__placeholder{height:0;pointer-events:none}.van-list__loading-icon .van-loading__spinner{width:var(--van-list-loading-icon-size);height:var(--van-list-loading-icon-size)}:root,:host{--van-switch-size: 26px;--van-switch-width: calc(1.8em + 4px) ;--van-switch-height: calc(1em + 4px) ;--van-switch-node-size: 1em;--van-switch-node-background: var(--van-white);--van-switch-node-shadow: 0 3px 1px 0 rgba(0, 0, 0, .05);--van-switch-background: rgba(120, 120, 128, .16);--van-switch-on-background: var(--van-primary-color);--van-switch-duration: var(--van-duration-base);--van-switch-disabled-opacity: var(--van-disabled-opacity)}.van-theme-dark{--van-switch-background: rgba(120, 120, 128, .32)}.van-switch{position:relative;display:inline-block;box-sizing:content-box;width:var(--van-switch-width);height:var(--van-switch-height);font-size:var(--van-switch-size);background:var(--van-switch-background);border-radius:var(--van-switch-node-size);cursor:pointer;transition:background-color var(--van-switch-duration)}.van-switch__node{position:absolute;top:2px;left:2px;width:var(--van-switch-node-size);height:var(--van-switch-node-size);font-size:inherit;background:var(--van-switch-node-background);border-radius:100%;box-shadow:var(--van-switch-node-shadow);transition:transform var(--van-switch-duration) cubic-bezier(.3,1.05,.4,1.05)}.van-switch__loading{top:25%;left:25%;width:50%;height:50%;line-height:1}.van-switch--on{background:var(--van-switch-on-background)}.van-switch--on .van-switch__node{transform:translate(calc(var(--van-switch-width) - var(--van-switch-node-size) - 4px))}.van-switch--on .van-switch__loading{color:var(--van-switch-on-background)}.van-switch--disabled{cursor:not-allowed;opacity:var(--van-switch-disabled-opacity)}.van-switch--loading{cursor:default}:root,:host{--van-button-mini-height: 24px;--van-button-mini-padding: 0 var(--van-padding-base);--van-button-mini-font-size: var(--van-font-size-xs);--van-button-small-height: 32px;--van-button-small-padding: 0 var(--van-padding-xs);--van-button-small-font-size: var(--van-font-size-sm);--van-button-normal-padding: 0 15px;--van-button-normal-font-size: var(--van-font-size-md);--van-button-large-height: 50px;--van-button-default-height: 44px;--van-button-default-line-height: 1.2;--van-button-default-font-size: var(--van-font-size-lg);--van-button-default-color: var(--van-text-color);--van-button-default-background: var(--van-background-2);--van-button-default-border-color: var(--van-gray-4);--van-button-primary-color: var(--van-white);--van-button-primary-background: var(--van-primary-color);--van-button-primary-border-color: var(--van-primary-color);--van-button-success-color: var(--van-white);--van-button-success-background: var(--van-success-color);--van-button-success-border-color: var(--van-success-color);--van-button-danger-color: var(--van-white);--van-button-danger-background: var(--van-danger-color);--van-button-danger-border-color: var(--van-danger-color);--van-button-warning-color: var(--van-white);--van-button-warning-background: var(--van-warning-color);--van-button-warning-border-color: var(--van-warning-color);--van-button-border-width: var(--van-border-width);--van-button-radius: var(--van-radius-md);--van-button-round-radius: var(--van-radius-max);--van-button-plain-background: var(--van-white);--van-button-disabled-opacity: var(--van-disabled-opacity);--van-button-icon-size: 1.2em;--van-button-loading-icon-size: 20px}.van-theme-dark{--van-button-plain-background: transparent}.van-button{position:relative;display:inline-block;box-sizing:border-box;height:var(--van-button-default-height);margin:0;padding:0;font-size:var(--van-button-default-font-size);line-height:var(--van-button-default-line-height);text-align:center;border-radius:var(--van-button-radius);cursor:pointer;transition:opacity var(--van-duration-fast);-webkit-appearance:none;-webkit-font-smoothing:auto}.van-button:before{position:absolute;top:50%;left:50%;width:100%;height:100%;background:var(--van-black);border:inherit;border-color:var(--van-black);border-radius:inherit;transform:translate(-50%,-50%);opacity:0;content:" ";box-sizing:content-box}.van-button:active:before{opacity:.1}.van-button--loading:before,.van-button--disabled:before{display:none}.van-button--default{color:var(--van-button-default-color);background:var(--van-button-default-background);border:var(--van-button-border-width) solid var(--van-button-default-border-color)}.van-button--primary{color:var(--van-button-primary-color);background:var(--van-button-primary-background);border:var(--van-button-border-width) solid var(--van-button-primary-border-color)}.van-button--success{color:var(--van-button-success-color);background:var(--van-button-success-background);border:var(--van-button-border-width) solid var(--van-button-success-border-color)}.van-button--danger{color:var(--van-button-danger-color);background:var(--van-button-danger-background);border:var(--van-button-border-width) solid var(--van-button-danger-border-color)}.van-button--warning{color:var(--van-button-warning-color);background:var(--van-button-warning-background);border:var(--van-button-border-width) solid var(--van-button-warning-border-color)}.van-button--plain{background:var(--van-button-plain-background)}.van-button--plain.van-button--primary{color:var(--van-button-primary-background)}.van-button--plain.van-button--success{color:var(--van-button-success-background)}.van-button--plain.van-button--danger{color:var(--van-button-danger-background)}.van-button--plain.van-button--warning{color:var(--van-button-warning-background)}.van-button--large{width:100%;height:var(--van-button-large-height)}.van-button--normal{padding:var(--van-button-normal-padding);font-size:var(--van-button-normal-font-size)}.van-button--small{height:var(--van-button-small-height);padding:var(--van-button-small-padding);font-size:var(--van-button-small-font-size)}.van-button__loading{color:inherit;font-size:inherit}.van-button__loading .van-loading__spinner{color:currentColor;width:var(--van-button-loading-icon-size);height:var(--van-button-loading-icon-size)}.van-button--mini{height:var(--van-button-mini-height);padding:var(--van-button-mini-padding);font-size:var(--van-button-mini-font-size)}.van-button--mini+.van-button--mini{margin-left:var(--van-padding-base)}.van-button--block{display:block;width:100%}.van-button--disabled{cursor:not-allowed;opacity:var(--van-button-disabled-opacity)}.van-button--loading{cursor:default}.van-button--round{border-radius:var(--van-button-round-radius)}.van-button--square{border-radius:0}.van-button__content{display:flex;align-items:center;justify-content:center;height:100%}.van-button__content:before{content:" "}.van-button__icon{font-size:var(--van-button-icon-size);line-height:inherit}.van-button__icon+.van-button__text,.van-button__loading+.van-button__text,.van-button__text+.van-button__icon,.van-button__text+.van-button__loading{margin-left:var(--van-padding-base)}.van-button--hairline{border-width:0}.van-button--hairline:after{border-color:inherit;border-radius:calc(var(--van-button-radius) * 2)}.van-button--hairline.van-button--round:after{border-radius:var(--van-button-round-radius)}.van-button--hairline.van-button--square:after{border-radius:0}:root,:host{--van-submit-bar-height: 50px;--van-submit-bar-z-index: 100;--van-submit-bar-background: var(--van-background-2);--van-submit-bar-button-width: 110px;--van-submit-bar-price-color: var(--van-danger-color);--van-submit-bar-price-font-size: var(--van-font-size-sm);--van-submit-bar-price-integer-font-size: 20px;--van-submit-bar-price-font: var(--van-price-font);--van-submit-bar-text-color: var(--van-text-color);--van-submit-bar-text-font-size: var(--van-font-size-md);--van-submit-bar-tip-padding: var(--van-padding-xs) var(--van-padding-sm);--van-submit-bar-tip-font-size: var(--van-font-size-sm);--van-submit-bar-tip-line-height: 1.5;--van-submit-bar-tip-color: var(--van-orange-dark);--van-submit-bar-tip-background: var(--van-orange-light);--van-submit-bar-tip-icon-size: 12px;--van-submit-bar-button-height: 40px;--van-submit-bar-padding: 0 var(--van-padding-md)}.van-submit-bar{position:fixed;bottom:0;left:0;z-index:var(--van-submit-bar-z-index);width:100%;background:var(--van-submit-bar-background);-webkit-user-select:none;user-select:none}.van-submit-bar__tip{padding:var(--van-submit-bar-tip-padding);color:var(--van-submit-bar-tip-color);font-size:var(--van-submit-bar-tip-font-size);line-height:var(--van-submit-bar-tip-line-height);background:var(--van-submit-bar-tip-background)}.van-submit-bar__tip-icon{margin-right:var(--van-padding-base);font-size:var(--van-submit-bar-tip-icon-size);vertical-align:middle}.van-submit-bar__tip-text{vertical-align:middle}.van-submit-bar__bar{display:flex;align-items:center;justify-content:flex-end;height:var(--van-submit-bar-height);padding:var(--van-submit-bar-padding);font-size:var(--van-submit-bar-text-font-size)}.van-submit-bar__text{flex:1;padding-right:var(--van-padding-sm);color:var(--van-submit-bar-text-color);text-align:right}.van-submit-bar__text span{display:inline-block}.van-submit-bar__suffix-label{margin-left:var(--van-padding-base);font-weight:var(--van-font-bold)}.van-submit-bar__price{color:var(--van-submit-bar-price-color);font-weight:var(--van-font-bold);font-size:var(--van-submit-bar-price-font-size);margin-left:var(--van-padding-base)}.van-submit-bar__price-integer{font-size:var(--van-submit-bar-price-integer-font-size);font-family:var(--van-submit-bar-price-font)}.van-submit-bar__button{width:var(--van-submit-bar-button-width);height:var(--van-submit-bar-button-height);font-weight:var(--van-font-bold);border:none}.van-submit-bar__button--danger{background:var(--van-gradient-red)}:root,:host{--van-signature-padding: var(--van-padding-xs);--van-signature-content-height: 200px;--van-signature-content-background: var(--van-background-2);--van-signature-content-border: 1px dotted #dadada}.van-signature{padding:var(--van-signature-padding)}.van-signature__content{display:flex;justify-content:center;align-items:center;height:var(--van-signature-content-height);background-color:var(--van-signature-content-background);border:var(--van-signature-content-border);border-radius:var(--van-radius-lg);overflow:hidden}.van-signature__content canvas{width:100%;height:100%}.van-signature__footer{display:flex;justify-content:flex-end}.van-signature__footer .van-button{padding:0 var(--van-padding-md);margin-top:var(--van-padding-xs);margin-left:var(--van-padding-xs)}:root,:host{--van-contact-edit-padding: var(--van-padding-md);--van-contact-edit-fields-radius: var(--van-radius-md);--van-contact-edit-buttons-padding: var(--van-padding-xl) 0;--van-contact-edit-button-margin-bottom: var(--van-padding-sm);--van-contact-edit-button-font-size: var(--van-font-size-lg);--van-contact-edit-field-label-width: 4.1em}.van-contact-edit{padding:var(--van-contact-edit-padding)}.van-contact-edit__fields{overflow:hidden;border-radius:var(--van-contact-edit-fields-radius)}.van-contact-edit__fields .van-field__label{width:var(--van-contact-edit-field-label-width)}.van-contact-edit__switch-cell{margin-top:10px;padding-top:9px;padding-bottom:9px;border-radius:var(--van-contact-edit-fields-radius)}.van-contact-edit__buttons{padding:var(--van-contact-edit-buttons-padding)}.van-contact-edit__button{margin-bottom:var(--van-contact-edit-button-margin-bottom);font-size:var(--van-contact-edit-button-font-size)}:root,:host{--van-action-bar-button-height: 40px;--van-action-bar-button-warning-color: var(--van-gradient-orange);--van-action-bar-button-danger-color: var(--van-gradient-red)}.van-action-bar-button{flex:1;height:var(--van-action-bar-button-height);font-weight:var(--van-font-bold);font-size:var(--van-font-size-md);border:none;border-radius:0}.van-action-bar-button--first{margin-left:5px;border-top-left-radius:var(--van-radius-max);border-bottom-left-radius:var(--van-radius-max)}.van-action-bar-button--last{margin-right:5px;border-top-right-radius:var(--van-radius-max);border-bottom-right-radius:var(--van-radius-max)}.van-action-bar-button--warning{background:var(--van-action-bar-button-warning-color)}.van-action-bar-button--danger{background:var(--van-action-bar-button-danger-color)}@media(max-width:321px){.van-action-bar-button{font-size:13px}}:root,:host{--van-overlay-z-index: 1;--van-overlay-background: rgba(0, 0, 0, .7)}.van-overlay{position:fixed;top:0;left:0;z-index:var(--van-overlay-z-index);width:100%;height:100%;background:var(--van-overlay-background)}:root,:host{--van-popup-background: var(--van-background-2);--van-popup-transition: transform var(--van-duration-base);--van-popup-round-radius: 16px;--van-popup-close-icon-size: 22px;--van-popup-close-icon-color: var(--van-gray-5);--van-popup-close-icon-margin: 16px;--van-popup-close-icon-z-index: 1}.van-overflow-hidden{overflow:hidden!important}.van-popup{position:fixed;max-height:100%;overflow-y:auto;box-sizing:border-box;background:var(--van-popup-background);transition:var(--van-popup-transition);-webkit-overflow-scrolling:touch}.van-popup--center{top:50%;left:0;right:0;width:-webkit-fit-content;width:fit-content;max-width:calc(100vw - var(--van-padding-md) * 2);margin:0 auto;transform:translateY(-50%)}.van-popup--center.van-popup--round{border-radius:var(--van-popup-round-radius)}.van-popup--top{top:0;left:0;width:100%}.van-popup--top.van-popup--round{border-radius:0 0 var(--van-popup-round-radius) var(--van-popup-round-radius)}.van-popup--right{top:50%;right:0;transform:translate3d(0,-50%,0)}.van-popup--right.van-popup--round{border-radius:var(--van-popup-round-radius) 0 0 var(--van-popup-round-radius)}.van-popup--bottom{bottom:0;left:0;width:100%}.van-popup--bottom.van-popup--round{border-radius:var(--van-popup-round-radius) var(--van-popup-round-radius) 0 0}.van-popup--left{top:50%;left:0;transform:translate3d(0,-50%,0)}.van-popup--left.van-popup--round{border-radius:0 var(--van-popup-round-radius) var(--van-popup-round-radius) 0}.van-popup-slide-top-enter-active,.van-popup-slide-left-enter-active,.van-popup-slide-right-enter-active,.van-popup-slide-bottom-enter-active{transition-timing-function:var(--van-ease-out)}.van-popup-slide-top-leave-active,.van-popup-slide-left-leave-active,.van-popup-slide-right-leave-active,.van-popup-slide-bottom-leave-active{transition-timing-function:var(--van-ease-in)}.van-popup-slide-top-enter-from,.van-popup-slide-top-leave-active{transform:translate3d(0,-100%,0)}.van-popup-slide-right-enter-from,.van-popup-slide-right-leave-active{transform:translate3d(100%,-50%,0)}.van-popup-slide-bottom-enter-from,.van-popup-slide-bottom-leave-active{transform:translate3d(0,100%,0)}.van-popup-slide-left-enter-from,.van-popup-slide-left-leave-active{transform:translate3d(-100%,-50%,0)}.van-popup__close-icon{position:absolute;z-index:var(--van-popup-close-icon-z-index);color:var(--van-popup-close-icon-color);font-size:var(--van-popup-close-icon-size)}.van-popup__close-icon--top-left{top:var(--van-popup-close-icon-margin);left:var(--van-popup-close-icon-margin)}.van-popup__close-icon--top-right{top:var(--van-popup-close-icon-margin);right:var(--van-popup-close-icon-margin)}.van-popup__close-icon--bottom-left{bottom:var(--van-popup-close-icon-margin);left:var(--van-popup-close-icon-margin)}.van-popup__close-icon--bottom-right{right:var(--van-popup-close-icon-margin);bottom:var(--van-popup-close-icon-margin)}:root,:host{--van-share-sheet-header-padding: var(--van-padding-sm) var(--van-padding-md);--van-share-sheet-title-color: var(--van-text-color);--van-share-sheet-title-font-size: var(--van-font-size-md);--van-share-sheet-title-line-height: var(--van-line-height-md);--van-share-sheet-description-color: var(--van-text-color-2);--van-share-sheet-description-font-size: var(--van-font-size-sm);--van-share-sheet-description-line-height: 16px;--van-share-sheet-icon-size: 48px;--van-share-sheet-option-name-color: var(--van-gray-7);--van-share-sheet-option-name-font-size: var(--van-font-size-sm);--van-share-sheet-option-description-color: var(--van-text-color-3);--van-share-sheet-option-description-font-size: var(--van-font-size-sm);--van-share-sheet-cancel-button-font-size: var(--van-font-size-lg);--van-share-sheet-cancel-button-height: 48px;--van-share-sheet-cancel-button-background: var(--van-background-2)}.van-share-sheet__header{padding:var(--van-share-sheet-header-padding);text-align:center}.van-share-sheet__title{margin-top:var(--van-padding-xs);color:var(--van-share-sheet-title-color);font-weight:400;font-size:var(--van-share-sheet-title-font-size);line-height:var(--van-share-sheet-title-line-height)}.van-share-sheet__description{display:block;margin-top:var(--van-padding-xs);color:var(--van-share-sheet-description-color);font-size:var(--van-share-sheet-description-font-size);line-height:var(--van-share-sheet-description-line-height)}.van-share-sheet__options{position:relative;display:flex;padding:var(--van-padding-md) 0 var(--van-padding-md) var(--van-padding-xs);overflow-x:auto;overflow-y:visible;-webkit-overflow-scrolling:touch}.van-share-sheet__options--border:before{position:absolute;box-sizing:border-box;content:" ";pointer-events:none;top:0;right:0;left:var(--van-padding-md);border-top:1px solid var(--van-border-color);transform:scaleY(.5)}.van-share-sheet__options::-webkit-scrollbar{height:0}.van-share-sheet__option{display:flex;flex-direction:column;align-items:center;-webkit-user-select:none;user-select:none}.van-share-sheet__icon,.van-share-sheet__image-icon{width:var(--van-share-sheet-icon-size);height:var(--van-share-sheet-icon-size);margin:0 var(--van-padding-md)}.van-share-sheet__icon{display:flex;align-items:center;justify-content:center;color:var(--van-gray-7);border-radius:100%;background-color:var(--van-gray-2)}.van-share-sheet__icon--link,.van-share-sheet__icon--poster,.van-share-sheet__icon--qrcode{font-size:26px}.van-share-sheet__icon--weapp-qrcode{font-size:28px}.van-share-sheet__icon--qq,.van-share-sheet__icon--weibo,.van-share-sheet__icon--wechat,.van-share-sheet__icon--wechat-moments{font-size:30px;color:var(--van-white)}.van-share-sheet__icon--qq{background-color:#38b9fa}.van-share-sheet__icon--wechat{background-color:#0bc15f}.van-share-sheet__icon--weibo{background-color:#ee575e}.van-share-sheet__icon--wechat-moments{background-color:#7bc845}.van-share-sheet__name{margin-top:var(--van-padding-xs);padding:0 var(--van-padding-base);color:var(--van-share-sheet-option-name-color);font-size:var(--van-share-sheet-option-name-font-size)}.van-share-sheet__option-description{padding:0 var(--van-padding-base);color:var(--van-share-sheet-option-description-color);font-size:var(--van-share-sheet-option-description-font-size)}.van-share-sheet__cancel{display:block;width:100%;padding:0;font-size:var(--van-share-sheet-cancel-button-font-size);line-height:var(--van-share-sheet-cancel-button-height);text-align:center;background:var(--van-share-sheet-cancel-button-background);border:none;cursor:pointer}.van-share-sheet__cancel:before{display:block;height:var(--van-padding-xs);background-color:var(--van-background);content:" "}.van-share-sheet__cancel:active{background-color:var(--van-active-color)}:root,:host{--van-popover-arrow-size: 6px;--van-popover-radius: var(--van-radius-lg);--van-popover-action-width: 128px;--van-popover-action-height: 44px;--van-popover-action-font-size: var(--van-font-size-md);--van-popover-action-line-height: var(--van-line-height-md);--van-popover-action-icon-size: 20px;--van-popover-horizontal-action-height: 34px;--van-popover-horizontal-action-icon-size: 16px;--van-popover-light-text-color: var(--van-text-color);--van-popover-light-background: var(--van-background-2);--van-popover-light-action-disabled-text-color: var(--van-text-color-3);--van-popover-dark-text-color: var(--van-white);--van-popover-dark-background: #4a4a4a;--van-popover-dark-action-disabled-text-color: var(--van-text-color-2)}.van-popover{position:absolute;overflow:visible;background-color:transparent;transition:opacity .15s,transform .15s}.van-popover__wrapper{display:inline-block}.van-popover__arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid;border-width:var(--van-popover-arrow-size)}.van-popover__content{overflow:hidden;border-radius:var(--van-popover-radius)}.van-popover__content--horizontal{display:flex;width:-webkit-max-content;width:max-content}.van-popover__content--horizontal .van-popover__action{flex:none;width:auto;height:var(--van-popover-horizontal-action-height);padding:0 var(--van-padding-sm)}.van-popover__content--horizontal .van-popover__action:last-child:after{display:none}.van-popover__content--horizontal .van-popover__action-icon{margin-right:var(--van-padding-base);font-size:var(--van-popover-horizontal-action-icon-size)}.van-popover__action{position:relative;display:flex;align-items:center;box-sizing:border-box;width:var(--van-popover-action-width);height:var(--van-popover-action-height);padding:0 var(--van-padding-md);font-size:var(--van-popover-action-font-size);line-height:var(--van-line-height-md);cursor:pointer}.van-popover__action:last-child .van-popover__action-text:after{display:none}.van-popover__action-text{display:flex;flex:1;align-items:center;justify-content:center;height:100%}.van-popover__action-icon{margin-right:var(--van-padding-xs);font-size:var(--van-popover-action-icon-size)}.van-popover__action--with-icon .van-popover__action-text{justify-content:flex-start}.van-popover[data-popper-placement^=top] .van-popover__arrow{bottom:0;border-top-color:currentColor;border-bottom-width:0;margin-bottom:calc(var(--van-popover-arrow-size) * -1)}.van-popover[data-popper-placement=top]{transform-origin:50% 100%}.van-popover[data-popper-placement=top] .van-popover__arrow{left:50%;transform:translate(-50%)}.van-popover[data-popper-placement=top-start]{transform-origin:0 100%}.van-popover[data-popper-placement=top-start] .van-popover__arrow{left:var(--van-padding-md)}.van-popover[data-popper-placement=top-end]{transform-origin:100% 100%}.van-popover[data-popper-placement=top-end] .van-popover__arrow{right:var(--van-padding-md)}.van-popover[data-popper-placement^=left] .van-popover__arrow{right:0;border-right-width:0;border-left-color:currentColor;margin-right:calc(var(--van-popover-arrow-size) * -1)}.van-popover[data-popper-placement=left]{transform-origin:100% 50%}.van-popover[data-popper-placement=left] .van-popover__arrow{top:50%;transform:translateY(-50%)}.van-popover[data-popper-placement=left-start]{transform-origin:100% 0}.van-popover[data-popper-placement=left-start] .van-popover__arrow{top:var(--van-padding-md)}.van-popover[data-popper-placement=left-end]{transform-origin:100% 100%}.van-popover[data-popper-placement=left-end] .van-popover__arrow{bottom:var(--van-padding-md)}.van-popover[data-popper-placement^=right] .van-popover__arrow{left:0;border-right-color:currentColor;border-left-width:0;margin-left:calc(var(--van-popover-arrow-size) * -1)}.van-popover[data-popper-placement=right]{transform-origin:0 50%}.van-popover[data-popper-placement=right] .van-popover__arrow{top:50%;transform:translateY(-50%)}.van-popover[data-popper-placement=right-start]{transform-origin:0 0}.van-popover[data-popper-placement=right-start] .van-popover__arrow{top:var(--van-padding-md)}.van-popover[data-popper-placement=right-end]{transform-origin:0 100%}.van-popover[data-popper-placement=right-end] .van-popover__arrow{bottom:var(--van-padding-md)}.van-popover[data-popper-placement^=bottom] .van-popover__arrow{top:0;border-top-width:0;border-bottom-color:currentColor;margin-top:calc(var(--van-popover-arrow-size) * -1)}.van-popover[data-popper-placement=bottom]{transform-origin:50% 0}.van-popover[data-popper-placement=bottom] .van-popover__arrow{left:50%;transform:translate(-50%)}.van-popover[data-popper-placement=bottom-start]{transform-origin:0 0}.van-popover[data-popper-placement=bottom-start] .van-popover__arrow{left:var(--van-padding-md)}.van-popover[data-popper-placement=bottom-end]{transform-origin:100% 0}.van-popover[data-popper-placement=bottom-end] .van-popover__arrow{right:var(--van-padding-md)}.van-popover--light{color:var(--van-popover-light-text-color)}.van-popover--light .van-popover__content{background:var(--van-popover-light-background);box-shadow:0 2px 12px #3232331f}.van-popover--light .van-popover__arrow{color:var(--van-popover-light-background)}.van-popover--light .van-popover__action:active{background-color:var(--van-active-color)}.van-popover--light .van-popover__action--disabled{color:var(--van-popover-light-action-disabled-text-color);cursor:not-allowed}.van-popover--light .van-popover__action--disabled:active{background-color:transparent}.van-popover--dark{color:var(--van-popover-dark-text-color)}.van-popover--dark .van-popover__content{background:var(--van-popover-dark-background)}.van-popover--dark .van-popover__arrow{color:var(--van-popover-dark-background)}.van-popover--dark .van-popover__action:active{background-color:#0003}.van-popover--dark .van-popover__action--disabled{color:var(--van-popover-dark-action-disabled-text-color)}.van-popover--dark .van-popover__action--disabled:active{background-color:transparent}.van-popover--dark .van-popover__action-text:after{border-color:var(--van-gray-7)}.van-popover-zoom-enter-from,.van-popover-zoom-leave-active{transform:scale(.8);opacity:0}.van-popover-zoom-enter-active{transition-timing-function:var(--van-ease-out)}.van-popover-zoom-leave-active{transition-timing-function:var(--van-ease-in)}:root,:host{--van-notify-text-color: var(--van-white);--van-notify-padding: var(--van-padding-xs) var(--van-padding-md);--van-notify-font-size: var(--van-font-size-md);--van-notify-line-height: var(--van-line-height-md);--van-notify-primary-background: var(--van-primary-color);--van-notify-success-background: var(--van-success-color);--van-notify-danger-background: var(--van-danger-color);--van-notify-warning-background: var(--van-warning-color)}.van-notify{display:flex;align-items:center;justify-content:center;box-sizing:border-box;padding:var(--van-notify-padding);color:var(--van-notify-text-color);font-size:var(--van-notify-font-size);line-height:var(--van-notify-line-height);white-space:pre-wrap;text-align:center;word-wrap:break-word}.van-notify--primary{background:var(--van-notify-primary-background)}.van-notify--success{background:var(--van-notify-success-background)}.van-notify--danger{background:var(--van-notify-danger-background)}.van-notify--warning{background:var(--van-notify-warning-background)}:root,:host{--van-dialog-width: 320px;--van-dialog-small-screen-width: 90%;--van-dialog-font-size: var(--van-font-size-lg);--van-dialog-transition: var(--van-duration-base);--van-dialog-radius: 16px;--van-dialog-background: var(--van-background-2);--van-dialog-header-font-weight: var(--van-font-bold);--van-dialog-header-line-height: 24px;--van-dialog-header-padding-top: 26px;--van-dialog-header-isolated-padding: var(--van-padding-lg) 0;--van-dialog-message-padding: var(--van-padding-lg);--van-dialog-message-font-size: var(--van-font-size-md);--van-dialog-message-line-height: var(--van-line-height-md);--van-dialog-message-max-height: 60vh;--van-dialog-has-title-message-text-color: var(--van-gray-7);--van-dialog-has-title-message-padding-top: var(--van-padding-xs);--van-dialog-button-height: 48px;--van-dialog-round-button-height: 36px;--van-dialog-confirm-button-text-color: var(--van-primary-color)}.van-dialog{top:45%;width:var(--van-dialog-width);overflow:hidden;font-size:var(--van-dialog-font-size);background:var(--van-dialog-background);border-radius:var(--van-dialog-radius);-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:var(--van-dialog-transition);transition-property:transform,opacity}@media(max-width:321px){.van-dialog{width:var(--van-dialog-small-screen-width)}}.van-dialog__header{color:var(--van-text-color);padding-top:var(--van-dialog-header-padding-top);font-weight:var(--van-dialog-header-font-weight);line-height:var(--van-dialog-header-line-height);text-align:center}.van-dialog__header--isolated{padding:var(--van-dialog-header-isolated-padding)}.van-dialog__content--isolated{display:flex;align-items:center;min-height:104px}.van-dialog__message{color:var(--van-text-color);flex:1;max-height:var(--van-dialog-message-max-height);padding:26px var(--van-dialog-message-padding);overflow-y:auto;font-size:var(--van-dialog-message-font-size);line-height:var(--van-dialog-message-line-height);white-space:pre-wrap;text-align:center;word-wrap:break-word;-webkit-overflow-scrolling:touch}.van-dialog__message--has-title{padding-top:var(--van-dialog-has-title-message-padding-top);color:var(--van-dialog-has-title-message-text-color)}.van-dialog__message--left{text-align:left}.van-dialog__message--right{text-align:right}.van-dialog__message--justify{text-align:justify}.van-dialog__footer{display:flex;overflow:hidden;-webkit-user-select:none;user-select:none}.van-dialog__confirm,.van-dialog__cancel{flex:1;height:var(--van-dialog-button-height);margin:0;border:0;border-radius:0}.van-dialog__confirm,.van-dialog__confirm:active{color:var(--van-dialog-confirm-button-text-color)}.van-dialog--round-button .van-dialog__footer{position:relative;height:auto;padding:var(--van-padding-xs) var(--van-padding-lg) var(--van-padding-md)}.van-dialog--round-button .van-dialog__message{padding-bottom:var(--van-padding-md);color:var(--van-text-color)}.van-dialog--round-button .van-dialog__confirm,.van-dialog--round-button .van-dialog__cancel{height:var(--van-dialog-round-button-height)}.van-dialog--round-button .van-dialog__confirm{color:var(--van-white)}.van-dialog--round-button .van-action-bar-button--first{border-top-left-radius:var(--van-radius-max);border-bottom-left-radius:var(--van-radius-max)}.van-dialog--round-button .van-action-bar-button--last{border-top-right-radius:var(--van-radius-max);border-bottom-right-radius:var(--van-radius-max)}.van-dialog-bounce-enter-from{transform:translate3d(0,-50%,0) scale(.7);opacity:0}.van-dialog-bounce-leave-active{transform:translate3d(0,-50%,0) scale(.9);opacity:0}:root,:host{--van-toast-max-width: 70%;--van-toast-font-size: var(--van-font-size-md);--van-toast-text-color: var(--van-white);--van-toast-loading-icon-color: var(--van-white);--van-toast-line-height: var(--van-line-height-md);--van-toast-radius: var(--van-radius-lg);--van-toast-background: rgba(0, 0, 0, .7);--van-toast-icon-size: 36px;--van-toast-text-min-width: 96px;--van-toast-text-padding: var(--van-padding-xs) var(--van-padding-sm);--van-toast-default-padding: var(--van-padding-md);--van-toast-default-width: 88px;--van-toast-default-min-height: 88px;--van-toast-position-top-distance: 20%;--van-toast-position-bottom-distance: 20%}.van-toast{display:flex;flex-direction:column;align-items:center;justify-content:center;box-sizing:content-box;transition:all var(--van-duration-fast);width:var(--van-toast-default-width);max-width:var(--van-toast-max-width);min-height:var(--van-toast-default-min-height);padding:var(--van-toast-default-padding);color:var(--van-toast-text-color);font-size:var(--van-toast-font-size);line-height:var(--van-toast-line-height);white-space:pre-wrap;word-break:break-all;text-align:center;background:var(--van-toast-background);border-radius:var(--van-toast-radius)}.van-toast--break-normal{word-break:normal;word-wrap:normal}.van-toast--break-word{word-break:normal;word-wrap:break-word}.van-toast--unclickable{overflow:hidden;cursor:not-allowed}.van-toast--unclickable *{pointer-events:none}.van-toast--text,.van-toast--html{width:-webkit-fit-content;width:fit-content;min-width:var(--van-toast-text-min-width);min-height:0;padding:var(--van-toast-text-padding)}.van-toast--text .van-toast__text,.van-toast--html .van-toast__text{margin-top:0}.van-toast--top{top:var(--van-toast-position-top-distance)}.van-toast--bottom{top:auto;bottom:var(--van-toast-position-bottom-distance)}.van-toast__icon{font-size:var(--van-toast-icon-size)}.van-toast__loading{padding:var(--van-padding-base);color:var(--van-toast-loading-icon-color)}.van-toast__text{margin-top:var(--van-padding-xs)}:root,:host{--van-action-sheet-max-height: 80%;--van-action-sheet-header-height: 48px;--van-action-sheet-header-font-size: var(--van-font-size-lg);--van-action-sheet-description-color: var(--van-text-color-2);--van-action-sheet-description-font-size: var(--van-font-size-md);--van-action-sheet-description-line-height: var(--van-line-height-md);--van-action-sheet-item-background: var(--van-background-2);--van-action-sheet-item-font-size: var(--van-font-size-lg);--van-action-sheet-item-line-height: var(--van-line-height-lg);--van-action-sheet-item-text-color: var(--van-text-color);--van-action-sheet-item-disabled-text-color: var(--van-text-color-3);--van-action-sheet-item-icon-size: 18px;--van-action-sheet-item-icon-margin-right: var(--van-padding-xs);--van-action-sheet-subname-color: var(--van-text-color-2);--van-action-sheet-subname-font-size: var(--van-font-size-sm);--van-action-sheet-subname-line-height: var(--van-line-height-sm);--van-action-sheet-close-icon-size: 22px;--van-action-sheet-close-icon-color: var(--van-gray-5);--van-action-sheet-close-icon-padding: 0 var(--van-padding-md);--van-action-sheet-cancel-text-color: var(--van-gray-7);--van-action-sheet-cancel-padding-top: var(--van-padding-xs);--van-action-sheet-cancel-padding-color: var(--van-background);--van-action-sheet-loading-icon-size: 22px}.van-action-sheet{display:flex;flex-direction:column;max-height:var(--van-action-sheet-max-height);overflow:hidden;color:var(--van-action-sheet-item-text-color)}.van-action-sheet__content{flex:1 auto;overflow-y:auto;-webkit-overflow-scrolling:touch}.van-action-sheet__item,.van-action-sheet__cancel{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;width:100%;padding:14px var(--van-padding-md);font-size:var(--van-action-sheet-item-font-size);background:var(--van-action-sheet-item-background);border:none;cursor:pointer}.van-action-sheet__item:active,.van-action-sheet__cancel:active{background-color:var(--van-active-color)}.van-action-sheet__item{line-height:var(--van-action-sheet-item-line-height)}.van-action-sheet__item--loading,.van-action-sheet__item--disabled{color:var(--van-action-sheet-item-disabled-text-color)}.van-action-sheet__item--loading:active,.van-action-sheet__item--disabled:active{background-color:var(--van-action-sheet-item-background)}.van-action-sheet__item--disabled{cursor:not-allowed}.van-action-sheet__item--loading{cursor:default}.van-action-sheet__item-icon{font-size:var(--van-action-sheet-item-icon-size);margin-right:var(--van-action-sheet-item-icon-margin-right)}.van-action-sheet__cancel{flex-shrink:0;box-sizing:border-box;color:var(--van-action-sheet-cancel-text-color)}.van-action-sheet__subname{width:100%;margin-top:var(--van-padding-xs);color:var(--van-action-sheet-subname-color);font-size:var(--van-action-sheet-subname-font-size);line-height:var(--van-action-sheet-subname-line-height);overflow-wrap:break-word}.van-action-sheet__gap{display:block;height:var(--van-action-sheet-cancel-padding-top);background:var(--van-action-sheet-cancel-padding-color)}.van-action-sheet__header{flex-shrink:0;font-weight:var(--van-font-bold);font-size:var(--van-action-sheet-header-font-size);line-height:var(--van-action-sheet-header-height);text-align:center}.van-action-sheet__description{position:relative;flex-shrink:0;padding:20px var(--van-padding-md);color:var(--van-action-sheet-description-color);font-size:var(--van-action-sheet-description-font-size);line-height:var(--van-action-sheet-description-line-height);text-align:center}.van-action-sheet__description:after{position:absolute;box-sizing:border-box;content:" ";pointer-events:none;right:var(--van-padding-md);bottom:0;left:var(--van-padding-md);border-bottom:1px solid var(--van-border-color);transform:scaleY(.5)}.van-action-sheet__loading-icon .van-loading__spinner{width:var(--van-action-sheet-loading-icon-size);height:var(--van-action-sheet-loading-icon-size)}.van-action-sheet__close{position:absolute;top:0;right:0;z-index:1;padding:var(--van-action-sheet-close-icon-padding);color:var(--van-action-sheet-close-icon-color);font-size:var(--van-action-sheet-close-icon-size);line-height:inherit}:root,:host{--van-sticky-z-index: 99}.van-sticky--fixed{position:fixed;z-index:var(--van-sticky-z-index)}:root,:host{--van-swipe-indicator-size: 6px;--van-swipe-indicator-margin: var(--van-padding-sm);--van-swipe-indicator-active-opacity: 1;--van-swipe-indicator-inactive-opacity: .3;--van-swipe-indicator-active-background: var(--van-primary-color);--van-swipe-indicator-inactive-background: var(--van-border-color)}.van-swipe{position:relative;overflow:hidden;transform:translateZ(0);cursor:-webkit-grab;cursor:grab;-webkit-user-select:none;user-select:none}.van-swipe__track{display:flex;height:100%;transition-property:transform}.van-swipe__track--vertical{flex-direction:column}.van-swipe__indicators{position:absolute;bottom:var(--van-swipe-indicator-margin);left:50%;display:flex;transform:translate(-50%)}.van-swipe__indicators--vertical{top:50%;bottom:auto;left:var(--van-swipe-indicator-margin);flex-direction:column;transform:translateY(-50%)}.van-swipe__indicators--vertical .van-swipe__indicator:not(:last-child){margin-bottom:var(--van-swipe-indicator-size)}.van-swipe__indicator{width:var(--van-swipe-indicator-size);height:var(--van-swipe-indicator-size);background-color:var(--van-swipe-indicator-inactive-background);border-radius:100%;opacity:var(--van-swipe-indicator-inactive-opacity);transition:opacity var(--van-duration-fast),background-color var(--van-duration-fast)}.van-swipe__indicator:not(:last-child){margin-right:var(--van-swipe-indicator-size)}.van-swipe__indicator--active{background-color:var(--van-swipe-indicator-active-background);opacity:var(--van-swipe-indicator-active-opacity)}.van-swipe-item{position:relative;flex-shrink:0;width:100%;height:100%}:root,:host{--van-image-preview-index-text-color: var(--van-white);--van-image-preview-index-font-size: var(--van-font-size-md);--van-image-preview-index-line-height: var(--van-line-height-md);--van-image-preview-index-text-shadow: 0 1px 1px var(--van-gray-8);--van-image-preview-overlay-background: rgba(0, 0, 0, .9);--van-image-preview-close-icon-size: 22px;--van-image-preview-close-icon-color: var(--van-gray-5);--van-image-preview-close-icon-margin: var(--van-padding-md);--van-image-preview-close-icon-z-index: 1}.van-image-preview{position:fixed;top:0;left:0;width:100%;height:100%;max-width:none;background-color:transparent;transform:none}.van-image-preview__swipe{height:100%}.van-image-preview__swipe-item{display:flex;align-items:center;justify-content:center;overflow:hidden}.van-image-preview__cover{position:absolute;top:0;left:0}.van-image-preview__image,.van-image-preview__image-wrap{width:100%;transition-property:transform}.van-image-preview__image--vertical,.van-image-preview__image-wrap--vertical{width:auto;height:100%}.van-image-preview__image img,.van-image-preview__image-wrap img,.van-image-preview__image video,.van-image-preview__image-wrap video{-webkit-user-drag:none}.van-image-preview__image .van-image__error,.van-image-preview__image-wrap .van-image__error{top:30%;height:40%}.van-image-preview__image .van-image__error-icon,.van-image-preview__image-wrap .van-image__error-icon{font-size:36px}.van-image-preview__image .van-image__loading,.van-image-preview__image-wrap .van-image__loading{background-color:transparent}.van-image-preview__index{position:absolute;top:var(--van-padding-md);left:50%;color:var(--van-image-preview-index-text-color);font-size:var(--van-image-preview-index-font-size);line-height:var(--van-image-preview-index-line-height);text-shadow:var(--van-image-preview-index-text-shadow);transform:translate(-50%)}.van-image-preview__overlay{background:var(--van-image-preview-overlay-background)}.van-image-preview__close-icon{position:absolute;z-index:var(--van-image-preview-close-icon-z-index);color:var(--van-image-preview-close-icon-color);font-size:var(--van-image-preview-close-icon-size)}.van-image-preview__close-icon--top-left{top:var(--van-image-preview-close-icon-margin);left:var(--van-image-preview-close-icon-margin)}.van-image-preview__close-icon--top-right{top:var(--van-image-preview-close-icon-margin);right:var(--van-image-preview-close-icon-margin)}.van-image-preview__close-icon--bottom-left{bottom:var(--van-image-preview-close-icon-margin);left:var(--van-image-preview-close-icon-margin)}.van-image-preview__close-icon--bottom-right{right:var(--van-image-preview-close-icon-margin);bottom:var(--van-image-preview-close-icon-margin)}:root,:host{--van-uploader-size: 80px;--van-uploader-icon-size: 24px;--van-uploader-icon-color: var(--van-gray-4);--van-uploader-text-color: var(--van-text-color-2);--van-uploader-text-font-size: var(--van-font-size-sm);--van-uploader-upload-background: var(--van-gray-1);--van-uploader-upload-active-color: var(--van-active-color);--van-uploader-delete-color: var(--van-white);--van-uploader-delete-icon-size: 14px;--van-uploader-delete-background: rgba(0, 0, 0, .7);--van-uploader-file-background: var(--van-background);--van-uploader-file-icon-size: 20px;--van-uploader-file-icon-color: var(--van-gray-7);--van-uploader-file-name-padding: 0 var(--van-padding-base);--van-uploader-file-name-margin-top: var(--van-padding-xs);--van-uploader-file-name-font-size: var(--van-font-size-sm);--van-uploader-file-name-text-color: var(--van-gray-7);--van-uploader-mask-text-color: var(--van-white);--van-uploader-mask-background: rgba(50, 50, 51, .88);--van-uploader-mask-icon-size: 22px;--van-uploader-mask-message-font-size: var(--van-font-size-sm);--van-uploader-mask-message-line-height: var(--van-line-height-xs);--van-uploader-loading-icon-size: 22px;--van-uploader-loading-icon-color: var(--van-white);--van-uploader-disabled-opacity: var(--van-disabled-opacity);--van-uploader-border-radius: 0px}.van-uploader{position:relative;display:inline-block}.van-uploader__wrapper{display:flex;flex-wrap:wrap}.van-uploader__wrapper--disabled{opacity:var(--van-uploader-disabled-opacity)}.van-uploader__input{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden;cursor:pointer;opacity:0}.van-uploader__input-wrapper{position:relative}.van-uploader__input:disabled{cursor:not-allowed}.van-uploader__upload{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;box-sizing:border-box;width:var(--van-uploader-size);height:var(--van-uploader-size);margin:0 var(--van-padding-xs) var(--van-padding-xs) 0;background:var(--van-uploader-upload-background);border-radius:var(--van-uploader-border-radius)}.van-uploader__upload:active{background-color:var(--van-uploader-upload-active-color)}.van-uploader__upload--readonly:active{background-color:var(--van-uploader-upload-background)}.van-uploader__upload-icon{color:var(--van-uploader-icon-color);font-size:var(--van-uploader-icon-size)}.van-uploader__upload-text{margin-top:var(--van-padding-xs);color:var(--van-uploader-text-color);font-size:var(--van-uploader-text-font-size)}.van-uploader__preview{position:relative;margin:0 var(--van-padding-xs) var(--van-padding-xs) 0;cursor:pointer}.van-uploader__preview-image{display:block;width:var(--van-uploader-size);height:var(--van-uploader-size);overflow:hidden;border-radius:var(--van-uploader-border-radius)}.van-uploader__preview-delete{position:absolute;top:0;right:0}.van-uploader__preview-delete--shadow{width:var(--van-uploader-delete-icon-size);height:var(--van-uploader-delete-icon-size);background:var(--van-uploader-delete-background);border-radius:0 0 0 12px}.van-uploader__preview-delete-icon{position:absolute;top:0;right:0;color:var(--van-uploader-delete-color);font-size:var(--van-uploader-delete-icon-size);transform:scale(.7) translate(10%,-10%)}.van-uploader__preview-cover{position:absolute;inset:0}.van-uploader__mask{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--van-uploader-mask-text-color);background:var(--van-uploader-mask-background);border-radius:var(--van-uploader-border-radius)}.van-uploader__mask-icon{font-size:var(--van-uploader-mask-icon-size)}.van-uploader__mask-message{margin-top:6px;padding:0 var(--van-padding-base);font-size:var(--van-uploader-mask-message-font-size);line-height:var(--van-uploader-mask-message-line-height)}.van-uploader__loading{width:var(--van-uploader-loading-icon-size);height:var(--van-uploader-loading-icon-size);color:var(--van-uploader-loading-icon-color)}.van-uploader__file{display:flex;flex-direction:column;align-items:center;justify-content:center;width:var(--van-uploader-size);height:var(--van-uploader-size);background:var(--van-uploader-file-background)}.van-uploader__file-icon{color:var(--van-uploader-file-icon-color);font-size:var(--van-uploader-file-icon-size)}.van-uploader__file-name{box-sizing:border-box;width:100%;margin-top:var(--van-uploader-file-name-margin-top);padding:var(--van-uploader-file-name-padding);color:var(--van-uploader-file-name-text-color);font-size:var(--van-uploader-file-name-font-size);text-align:center}:root,:host{--van-tab-text-color: var(--van-gray-7);--van-tab-active-text-color: var(--van-text-color);--van-tab-disabled-text-color: var(--van-text-color-3);--van-tab-font-size: var(--van-font-size-md);--van-tab-line-height: var(--van-line-height-md);--van-tabs-default-color: var(--van-primary-color);--van-tabs-line-height: 44px;--van-tabs-card-height: 30px;--van-tabs-nav-background: var(--van-background-2);--van-tabs-bottom-bar-width: 40px;--van-tabs-bottom-bar-height: 3px;--van-tabs-bottom-bar-color: var(--van-primary-color)}.van-tab{position:relative;display:flex;flex:1;align-items:center;justify-content:center;box-sizing:border-box;padding:0 var(--van-padding-base);color:var(--van-tab-text-color);font-size:var(--van-tab-font-size);line-height:var(--van-tab-line-height);cursor:pointer}.van-tab--active{color:var(--van-tab-active-text-color);font-weight:var(--van-font-bold)}.van-tab--disabled{color:var(--van-tab-disabled-text-color);cursor:not-allowed}.van-tab--grow{flex:1 0 auto;padding:0 var(--van-padding-sm)}.van-tab--shrink{flex:none;padding:0 var(--van-padding-xs)}.van-tab--card{color:var(--van-tabs-default-color);border-right:var(--van-border-width) solid var(--van-tabs-default-color)}.van-tab--card:last-child{border-right:none}.van-tab--card.van-tab--active{color:var(--van-white);background-color:var(--van-tabs-default-color)}.van-tab--card.van-tab--disabled{color:var(--van-tab-disabled-text-color)}.van-tab__text--ellipsis{display:-webkit-box;overflow:hidden;-webkit-line-clamp:1;-webkit-box-orient:vertical}.van-tabs{position:relative}.van-tabs__wrap{overflow:hidden}.van-tabs__wrap--page-top{position:fixed}.van-tabs__wrap--content-bottom{top:auto;bottom:0}.van-tabs__nav{position:relative;display:flex;background:var(--van-tabs-nav-background);-webkit-user-select:none;user-select:none}.van-tabs__nav--complete{overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch}.van-tabs__nav--complete::-webkit-scrollbar{display:none}.van-tabs__nav--line{box-sizing:content-box;height:100%;padding-bottom:15px}.van-tabs__nav--line.van-tabs__nav--shrink,.van-tabs__nav--line.van-tabs__nav--complete{padding-right:var(--van-padding-xs);padding-left:var(--van-padding-xs)}.van-tabs__nav--card{box-sizing:border-box;height:var(--van-tabs-card-height);margin:0 var(--van-padding-md);border:var(--van-border-width) solid var(--van-tabs-default-color);border-radius:var(--van-radius-sm)}.van-tabs__nav--card.van-tabs__nav--shrink{display:inline-flex}.van-tabs__line{position:absolute;bottom:15px;left:0;z-index:1;width:var(--van-tabs-bottom-bar-width);height:var(--van-tabs-bottom-bar-height);background:var(--van-tabs-bottom-bar-color);border-radius:var(--van-tabs-bottom-bar-height)}.van-tabs__track{position:relative;display:flex;width:100%;height:100%;will-change:left}.van-tabs__content--animated{overflow:hidden}.van-tabs--line .van-tabs__wrap{height:var(--van-tabs-line-height)}.van-tabs--card>.van-tabs__wrap{height:var(--van-tabs-card-height)}.van-tab__panel,.van-tab__panel-wrapper{flex-shrink:0;box-sizing:border-box;width:100%}.van-tab__panel-wrapper--inactive{height:0;overflow:visible}:root,:host{--van-cascader-header-height: 48px;--van-cascader-header-padding: 0 var(--van-padding-md);--van-cascader-title-font-size: var(--van-font-size-lg);--van-cascader-title-line-height: 20px;--van-cascader-close-icon-size: 22px;--van-cascader-close-icon-color: var(--van-gray-5);--van-cascader-selected-icon-size: 18px;--van-cascader-tabs-height: 48px;--van-cascader-active-color: var(--van-primary-color);--van-cascader-options-height: 384px;--van-cascader-option-disabled-color: var(--van-text-color-3);--van-cascader-tab-color: var(--van-text-color);--van-cascader-unselected-tab-color: var(--van-text-color-2)}.van-cascader__header{display:flex;align-items:center;justify-content:space-between;height:var(--van-cascader-header-height);padding:var(--van-cascader-header-padding)}.van-cascader__title{font-weight:var(--van-font-bold);font-size:var(--van-cascader-title-font-size);line-height:var(--van-cascader-title-line-height)}.van-cascader__close-icon{color:var(--van-cascader-close-icon-color);font-size:var(--van-cascader-close-icon-size)}.van-cascader__tabs.van-tabs--line .van-tabs__wrap{height:var(--van-cascader-tabs-height)}.van-cascader__tab{color:var(--van-cascader-tab-color);font-weight:var(--van-font-bold)}.van-cascader__tab--unselected{color:var(--van-cascader-unselected-tab-color);font-weight:400}.van-cascader__option{display:flex;align-items:center;justify-content:space-between;padding:10px var(--van-padding-md);font-size:var(--van-font-size-md);line-height:var(--van-line-height-md);cursor:pointer}.van-cascader__option:active{background-color:var(--van-active-color)}.van-cascader__option--selected{color:var(--van-cascader-active-color);font-weight:var(--van-font-bold)}.van-cascader__option--disabled{color:var(--van-cascader-option-disabled-color);cursor:not-allowed}.van-cascader__option--disabled:active{background-color:transparent}.van-cascader__selected-icon{font-size:var(--van-cascader-selected-icon-size)}.van-cascader__options{box-sizing:border-box;height:var(--van-cascader-options-height);padding-top:6px;overflow-y:auto;-webkit-overflow-scrolling:touch}:root,:host{--van-picker-background: var(--van-background-2);--van-picker-toolbar-height: 44px;--van-picker-title-font-size: var(--van-font-size-lg);--van-picker-title-line-height: var(--van-line-height-md);--van-picker-action-padding: 0 var(--van-padding-md);--van-picker-action-font-size: var(--van-font-size-md);--van-picker-confirm-action-color: var(--van-primary-color);--van-picker-cancel-action-color: var(--van-text-color-2);--van-picker-option-font-size: var(--van-font-size-lg);--van-picker-option-padding: 0 var(--van-padding-base);--van-picker-option-text-color: var(--van-text-color);--van-picker-option-disabled-opacity: .3;--van-picker-loading-icon-color: var(--van-primary-color);--van-picker-loading-mask-color: rgba(255, 255, 255, .9);--van-picker-mask-color: linear-gradient(180deg, rgba(255, 255, 255, .9), rgba(255, 255, 255, .4)), linear-gradient(0deg, rgba(255, 255, 255, .9), rgba(255, 255, 255, .4))}.van-theme-dark{--van-picker-loading-mask-color: rgba(0, 0, 0, .6);--van-picker-mask-color: linear-gradient(180deg, rgba(0, 0, 0, .6), rgba(0, 0, 0, .1)), linear-gradient(0deg, rgba(0, 0, 0, .6), rgba(0, 0, 0, .1))}.van-picker{position:relative;background:var(--van-picker-background);-webkit-user-select:none;user-select:none}.van-picker__toolbar{position:relative;display:flex;align-items:center;justify-content:space-between;height:var(--van-picker-toolbar-height)}.van-picker__cancel,.van-picker__confirm{height:100%;padding:var(--van-picker-action-padding);font-size:var(--van-picker-action-font-size);background-color:transparent;border:none}.van-picker__confirm{color:var(--van-picker-confirm-action-color)}.van-picker__cancel{color:var(--van-picker-cancel-action-color)}.van-picker__title{position:absolute;left:50%;color:var(--van-text-color);max-width:50%;font-weight:var(--van-font-bold);font-size:var(--van-picker-title-font-size);line-height:var(--van-picker-title-line-height);text-align:center;transform:translate(-50%)}.van-picker__columns{position:relative;display:flex;cursor:-webkit-grab;cursor:grab}.van-picker__loading{position:absolute;inset:0;z-index:3;display:flex;align-items:center;justify-content:center;color:var(--van-picker-loading-icon-color);background:var(--van-picker-loading-mask-color)}.van-picker__frame{position:absolute;top:50%;right:var(--van-padding-md);left:var(--van-padding-md);z-index:2;transform:translateY(-50%);pointer-events:none}.van-picker__mask{position:absolute;top:0;left:0;z-index:1;width:100%;height:100%;background-image:var(--van-picker-mask-color);background-repeat:no-repeat;background-position:top,bottom;transform:translateZ(0);pointer-events:none}.van-picker-column{flex:1;overflow:hidden;font-size:var(--van-picker-option-font-size)}.van-picker-column__wrapper{transition-timing-function:cubic-bezier(.23,1,.68,1)}.van-picker-column__item{display:flex;align-items:center;justify-content:center;padding:var(--van-picker-option-padding);color:var(--van-picker-option-text-color)}.van-picker-column__item--disabled{cursor:not-allowed;opacity:var(--van-picker-option-disabled-opacity)}:root,:host{--van-picker-group-background: var(--van-background-2)}.van-picker-group{background:var(--van-picker-group-background)}.van-picker-group__tabs{margin-top:var(--van-padding-base)}.van-picker-group__tab-title{margin-right:16px}:root,:host{--van-calendar-background: var(--van-background-2);--van-calendar-popup-height: 80%;--van-calendar-header-shadow: 0 2px 10px rgba(125, 126, 128, .16);--van-calendar-header-title-height: 44px;--van-calendar-header-title-font-size: var(--van-font-size-lg);--van-calendar-header-subtitle-font-size: var(--van-font-size-md);--van-calendar-header-action-width: 28px;--van-calendar-header-action-color: var(--van-text-color);--van-calendar-header-action-disabled-color: var(--van-text-color-3);--van-calendar-weekdays-height: 30px;--van-calendar-weekdays-font-size: var(--van-font-size-sm);--van-calendar-month-title-font-size: var(--van-font-size-md);--van-calendar-month-mark-color: rgba(242, 243, 245, .8);--van-calendar-month-mark-font-size: 160px;--van-calendar-day-height: 64px;--van-calendar-day-font-size: var(--van-font-size-lg);--van-calendar-day-margin-bottom: 4px;--van-calendar-day-disabled-color: var(--van-text-color-3);--van-calendar-range-edge-color: var(--van-white);--van-calendar-range-edge-background: var(--van-primary-color);--van-calendar-range-middle-color: var(--van-primary-color);--van-calendar-range-middle-background-opacity: .1;--van-calendar-selected-day-size: 54px;--van-calendar-selected-day-color: var(--van-white);--van-calendar-selected-day-background: var(--van-primary-color);--van-calendar-info-font-size: var(--van-font-size-xs);--van-calendar-info-line-height: var(--van-line-height-xs);--van-calendar-confirm-button-height: 36px;--van-calendar-confirm-button-margin: 7px 0}.van-theme-dark{--van-calendar-month-mark-color: rgba(100, 101, 102, .2);--van-calendar-day-disabled-color: var(--van-gray-7)}.van-calendar{display:flex;flex-direction:column;height:100%;background:var(--van-calendar-background)}.van-calendar__popup.van-popup--top,.van-calendar__popup.van-popup--bottom{height:var(--van-calendar-popup-height)}.van-calendar__popup.van-popup--left,.van-calendar__popup.van-popup--right{height:100%}.van-calendar__popup .van-popup__close-icon{top:11px}.van-calendar__header{flex-shrink:0;box-shadow:var(--van-calendar-header-shadow)}.van-calendar__month-title,.van-calendar__header-title,.van-calendar__header-subtitle{color:var(--van-text-color);height:var(--van-calendar-header-title-height);font-weight:var(--van-font-bold);line-height:var(--van-calendar-header-title-height);text-align:center}.van-calendar__header-title{font-size:var(--van-calendar-header-title-font-size)}.van-calendar__header-subtitle{font-size:var(--van-calendar-header-subtitle-font-size)}.van-calendar__header-subtitle--with-switch{display:flex;align-items:center;padding:0 var(--van-padding-base)}.van-calendar__header-subtitle-text{flex:1}.van-calendar__header-action{display:flex;align-items:center;justify-content:center;min-width:var(--van-calendar-header-action-width);height:100%;color:var(--van-calendar-header-action-color);cursor:pointer}.van-calendar__header-action--disabled{color:var(--van-calendar-header-action-disabled-color);cursor:not-allowed}.van-calendar__month-title{font-size:var(--van-calendar-month-title-font-size)}.van-calendar__weekdays{display:flex}.van-calendar__weekday{flex:1;font-size:var(--van-calendar-weekdays-font-size);line-height:var(--van-calendar-weekdays-height);text-align:center}.van-calendar__body{flex:1;overflow:auto;-webkit-overflow-scrolling:touch}.van-calendar__days{position:relative;display:flex;flex-wrap:wrap;-webkit-user-select:none;user-select:none}.van-calendar__month-mark{position:absolute;top:50%;left:50%;z-index:0;color:var(--van-calendar-month-mark-color);font-size:var(--van-calendar-month-mark-font-size);transform:translate(-50%,-50%);pointer-events:none}.van-calendar__day,.van-calendar__selected-day{display:flex;align-items:center;justify-content:center;text-align:center}.van-calendar__day{position:relative;width:14.285%;height:var(--van-calendar-day-height);font-size:var(--van-calendar-day-font-size);margin-bottom:var(--van-calendar-day-margin-bottom);cursor:pointer}.van-calendar__day--end,.van-calendar__day--start,.van-calendar__day--start-end,.van-calendar__day--multiple-middle,.van-calendar__day--multiple-selected{color:var(--van-calendar-range-edge-color);background:var(--van-calendar-range-edge-background)}.van-calendar__day--start{border-radius:var(--van-radius-md) 0 0 var(--van-radius-md)}.van-calendar__day--end{border-radius:0 var(--van-radius-md) var(--van-radius-md) 0}.van-calendar__day--start-end,.van-calendar__day--multiple-selected{border-radius:var(--van-radius-md)}.van-calendar__day--middle{color:var(--van-calendar-range-middle-color)}.van-calendar__day--middle:after{position:absolute;inset:0;background-color:currentColor;opacity:var(--van-calendar-range-middle-background-opacity);content:""}.van-calendar__day--disabled{color:var(--van-calendar-day-disabled-color);cursor:default}.van-calendar__top-info,.van-calendar__bottom-info{position:absolute;right:0;left:0;font-size:var(--van-calendar-info-font-size);line-height:var(--van-calendar-info-line-height)}@media(max-width:350px){.van-calendar__top-info,.van-calendar__bottom-info{font-size:9px}}.van-calendar__top-info{top:6px}.van-calendar__bottom-info{bottom:6px}.van-calendar__selected-day{width:var(--van-calendar-selected-day-size);height:var(--van-calendar-selected-day-size);color:var(--van-calendar-selected-day-color);background:var(--van-calendar-selected-day-background);border-radius:var(--van-radius-md)}.van-calendar__footer{flex-shrink:0;padding-left:var(--van-padding-md);padding-right:var(--van-padding-md)}.van-calendar__confirm{height:var(--van-calendar-confirm-button-height);margin:var(--van-calendar-confirm-button-margin)}:root,:host{--van-address-edit-padding: var(--van-padding-sm);--van-address-edit-buttons-padding: var(--van-padding-xl) var(--van-padding-base);--van-address-edit-button-margin-bottom: var(--van-padding-sm);--van-address-edit-button-font-size: var(--van-font-size-lg)}.van-address-edit{padding:var(--van-address-edit-padding)}.van-address-edit__fields{overflow:hidden;border-radius:var(--van-padding-xs)}.van-address-edit__fields .van-field__label{width:4.1em}.van-address-edit__default{margin-top:var(--van-padding-sm);overflow:hidden;border-radius:var(--van-padding-xs)}.van-address-edit__buttons{padding:var(--van-address-edit-buttons-padding)}.van-address-edit__button{margin-bottom:var(--van-address-edit-button-margin-bottom);font-size:var(--van-address-edit-button-font-size)}.van-address-edit-detail__search-item{background:var(--van-gray-2)}.van-radio-group--horizontal,.van-checkbox-group--horizontal{display:flex;flex-wrap:wrap}:root,:host{--van-checkbox-size: 20px;--van-checkbox-border-color: var(--van-gray-5);--van-checkbox-duration: var(--van-duration-fast);--van-checkbox-label-margin: var(--van-padding-xs);--van-checkbox-label-color: var(--van-text-color);--van-checkbox-checked-icon-color: var(--van-primary-color);--van-checkbox-disabled-icon-color: var(--van-gray-5);--van-checkbox-disabled-label-color: var(--van-text-color-3);--van-checkbox-disabled-background: var(--van-border-color)}.van-checkbox{display:flex;align-items:center;overflow:hidden;cursor:pointer;-webkit-user-select:none;user-select:none}.van-checkbox--disabled{cursor:not-allowed}.van-checkbox--label-disabled{cursor:default}.van-checkbox--horizontal{margin-right:var(--van-padding-sm)}.van-checkbox__icon{flex:none;height:1em;font-size:var(--van-checkbox-size);line-height:1em;cursor:pointer}.van-checkbox__icon .van-icon{display:block;box-sizing:border-box;width:1.25em;height:1.25em;color:transparent;font-size:.8em;line-height:1.25;text-align:center;border:1px solid var(--van-checkbox-border-color);transition-duration:var(--van-checkbox-duration);transition-property:color,border-color,background-color}.van-checkbox__icon--round .van-icon{border-radius:100%}.van-checkbox__icon--indeterminate .van-icon{display:flex;align-items:center;justify-content:center;color:var(--van-white);border-color:var(--van-checkbox-checked-icon-color);background-color:var(--van-checkbox-checked-icon-color)}.van-checkbox__icon--checked .van-icon{color:var(--van-white);background-color:var(--van-checkbox-checked-icon-color);border-color:var(--van-checkbox-checked-icon-color)}.van-checkbox__icon--disabled{cursor:not-allowed}.van-checkbox__icon--disabled .van-icon{background-color:var(--van-checkbox-disabled-background);border-color:var(--van-checkbox-disabled-icon-color)}.van-checkbox__icon--disabled.van-checkbox__icon--checked .van-icon{color:var(--van-checkbox-disabled-icon-color)}.van-checkbox__label{margin-left:var(--van-checkbox-label-margin);color:var(--van-checkbox-label-color);line-height:var(--van-checkbox-size)}.van-checkbox__label--left{margin:0 var(--van-checkbox-label-margin) 0 0}.van-checkbox__label--disabled{color:var(--van-checkbox-disabled-label-color)}:root,:host{--van-coupon-margin: 0 var(--van-padding-sm) var(--van-padding-sm);--van-coupon-content-height: 84px;--van-coupon-content-padding: 14px 0;--van-coupon-content-text-color: var(--van-text-color);--van-coupon-background: var(--van-background-2);--van-coupon-active-background: var(--van-active-color);--van-coupon-radius: var(--van-radius-lg);--van-coupon-shadow: 0 0 4px rgba(0, 0, 0, .1);--van-coupon-head-width: 96px;--van-coupon-amount-color: var(--van-primary-color);--van-coupon-amount-font-size: 30px;--van-coupon-currency-font-size: 40%;--van-coupon-name-font-size: var(--van-font-size-md);--van-coupon-disabled-text-color: var(--van-text-color-2);--van-coupon-description-padding: var(--van-padding-xs) var(--van-padding-md);--van-coupon-description-border-color: var(--van-border-color);--van-coupon-checkbox-color: var(--van-primary-color)}.van-coupon{margin:var(--van-coupon-margin);overflow:hidden;background:var(--van-coupon-background);border-radius:var(--van-coupon-radius);box-shadow:var(--van-coupon-shadow)}.van-coupon:active{background-color:var(--van-coupon-active-background)}.van-coupon__content{display:flex;align-items:center;box-sizing:border-box;min-height:var(--van-coupon-content-height);padding:var(--van-coupon-content-padding);color:var(--van-coupon-content-text-color)}.van-coupon__head{position:relative;min-width:var(--van-coupon-head-width);padding:0 var(--van-padding-xs);color:var(--van-coupon-amount-color);text-align:center}.van-coupon__amount,.van-coupon__condition,.van-coupon__name,.van-coupon__valid{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.van-coupon__amount{margin-bottom:6px;font-weight:var(--van-font-bold);font-size:var(--van-coupon-amount-font-size);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.van-coupon__amount span{font-size:var(--van-coupon-currency-font-size)}.van-coupon__amount span:not(:empty){margin-left:2px}.van-coupon__condition{font-size:var(--van-font-size-sm);line-height:16px;white-space:pre-wrap}.van-coupon__body{position:relative;flex:1}.van-coupon__name{margin-bottom:10px;font-weight:var(--van-font-bold);font-size:var(--van-coupon-name-font-size);line-height:var(--van-line-height-md)}.van-coupon__valid{font-size:var(--van-font-size-sm)}.van-coupon__corner{position:absolute;top:0;right:var(--van-padding-md);bottom:0}.van-coupon__corner .van-checkbox__icon--checked .van-icon{background-color:var(--van-coupon-checkbox-color);border-color:var(--van-coupon-checkbox-color)}.van-coupon__description{padding:var(--van-coupon-description-padding);font-size:var(--van-font-size-sm);border-top:1px dashed var(--van-coupon-description-border-color)}.van-coupon--disabled:active{background-color:var(--van-coupon-background)}.van-coupon--disabled .van-coupon-item__content{height:calc(var(--van-coupon-content-height) - 10px)}.van-coupon--disabled .van-coupon__head{color:inherit}:root,:host{--van-radio-size: 20px;--van-radio-dot-size: 8px;--van-radio-border-color: var(--van-gray-5);--van-radio-duration: var(--van-duration-fast);--van-radio-label-margin: var(--van-padding-xs);--van-radio-label-color: var(--van-text-color);--van-radio-checked-icon-color: var(--van-primary-color);--van-radio-disabled-icon-color: var(--van-gray-5);--van-radio-disabled-label-color: var(--van-text-color-3);--van-radio-disabled-background: var(--van-border-color)}.van-radio{display:flex;align-items:center;overflow:hidden;cursor:pointer;-webkit-user-select:none;user-select:none}.van-radio--disabled{cursor:not-allowed}.van-radio--label-disabled{cursor:default}.van-radio--horizontal{margin-right:var(--van-padding-sm)}.van-radio__icon{flex:none;height:1em;font-size:var(--van-radio-size);line-height:1em;cursor:pointer}.van-radio__icon .van-icon{display:block;box-sizing:border-box;width:1.25em;height:1.25em;color:transparent;font-size:.8em;line-height:1.25;text-align:center;border:1px solid var(--van-radio-border-color);transition-duration:var(--van-radio-duration);transition-property:color,border-color,background-color}.van-radio__icon--round .van-icon{border-radius:100%}.van-radio__icon--dot{position:relative;border-radius:100%;box-sizing:border-box;width:var(--van-radio-size);height:var(--van-radio-size);border:1px solid var(--van-radio-border-color);transition-duration:var(--van-radio-duration);transition-property:border-color}.van-radio__icon--dot__icon{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);border-radius:100%;height:calc(100% - var(--van-radio-dot-size));width:calc(100% - var(--van-radio-dot-size));transition-duration:var(--van-radio-duration);transition-property:background-color}.van-radio__icon--checked .van-icon{color:var(--van-white);background-color:var(--van-radio-checked-icon-color);border-color:var(--van-radio-checked-icon-color)}.van-radio__icon--checked.van-radio__icon--dot{border-color:var(--van-radio-checked-icon-color)}.van-radio__icon--checked.van-radio__icon--dot .van-radio__icon--dot__icon{background:var(--van-radio-checked-icon-color)}.van-radio__icon--disabled{cursor:not-allowed}.van-radio__icon--disabled .van-icon{background-color:var(--van-radio-disabled-background);border-color:var(--van-radio-disabled-icon-color)}.van-radio__icon--disabled.van-radio__icon--checked .van-icon{color:var(--van-radio-disabled-icon-color)}.van-radio__label{margin-left:var(--van-radio-label-margin);color:var(--van-radio-label-color);line-height:var(--van-radio-size)}.van-radio__label--left{margin:0 var(--van-radio-label-margin) 0 0}.van-radio__label--disabled{color:var(--van-radio-disabled-label-color)}:root,:host{--van-contact-list-padding: var(--van-padding-sm) var(--van-padding-sm) 80px;--van-contact-list-edit-icon-size: 16px;--van-contact-list-add-button-z-index: 999;--van-contact-list-radio-color: var(--van-primary-color);--van-contact-list-item-padding: var(--van-padding-md)}.van-contact-list{box-sizing:border-box;height:100%;padding:var(--van-contact-list-padding)}.van-contact-list__item{padding:var(--van-contact-list-item-padding)}.van-contact-list__item-title{display:flex;align-items:center;padding-right:var(--van-padding-xl);padding-left:var(--van-padding-xs)}.van-contact-list__item-tag{flex:none;margin-left:var(--van-padding-xs);padding-top:0;padding-bottom:0;line-height:1.4em}.van-contact-list__group{box-sizing:border-box;height:100%;overflow-y:scroll;-webkit-overflow-scrolling:touch;border-radius:var(--van-radius-lg)}.van-contact-list__edit{font-size:var(--van-contact-list-edit-icon-size)}.van-contact-list__radio .van-radio__icon--checked .van-icon{background-color:var(--van-contact-list-radio-color);border-color:var(--van-contact-list-radio-color)}.van-contact-list__bottom{position:fixed;right:0;bottom:0;left:0;z-index:var(--van-contact-list-add-button-z-index);padding-left:var(--van-padding-md);padding-right:var(--van-padding-md);background-color:var(--van-background-2)}.van-contact-list__add{height:40px;margin:5px 0}:root,:host{--van-address-list-padding: var(--van-padding-sm) var(--van-padding-sm) 80px;--van-address-list-disabled-text-color: var(--van-text-color-2);--van-address-list-disabled-text-padding: calc(var(--van-padding-base) * 5) 0;--van-address-list-disabled-text-font-size: var(--van-font-size-md);--van-address-list-disabled-text-line-height: var(--van-line-height-md);--van-address-list-add-button-z-index: 999;--van-address-list-item-padding: var(--van-padding-sm);--van-address-list-item-text-color: var(--van-text-color);--van-address-list-item-disabled-text-color: var(--van-text-color-3);--van-address-list-item-font-size: 13px;--van-address-list-item-line-height: var(--van-line-height-sm);--van-address-list-radio-color: var(--van-primary-color);--van-address-list-edit-icon-size: 20px}.van-address-list{box-sizing:border-box;height:100%;padding:var(--van-address-list-padding)}.van-address-list__bottom{position:fixed;bottom:0;left:0;z-index:var(--van-address-list-add-button-z-index);box-sizing:border-box;width:100%;padding-left:var(--van-padding-md);padding-right:var(--van-padding-md);background-color:var(--van-background-2)}.van-address-list__add{height:40px;margin:5px 0}.van-address-list__disabled-text{padding:var(--van-address-list-disabled-text-padding);color:var(--van-address-list-disabled-text-color);font-size:var(--van-address-list-disabled-text-font-size);line-height:var(--van-address-list-disabled-text-line-height)}.van-address-item{padding:var(--van-address-list-item-padding);background-color:var(--van-background-2);border-radius:var(--van-radius-lg)}.van-address-item:not(:last-child){margin-bottom:var(--van-padding-sm)}.van-address-item__title{padding-right:44px}.van-address-item__name{display:flex;align-items:center;margin-bottom:var(--van-padding-xs);font-size:var(--van-font-size-lg);line-height:var(--van-line-height-lg)}.van-address-item__tag{flex:none;margin-left:var(--van-padding-xs);padding-top:0;padding-bottom:0;line-height:1.4em}.van-address-item__address{color:var(--van-address-list-item-text-color);font-size:var(--van-address-list-item-font-size);line-height:var(--van-address-list-item-line-height)}.van-address-item--disabled .van-address-item__name,.van-address-item--disabled .van-address-item__address{color:var(--van-address-list-item-disabled-text-color)}.van-address-item__edit{position:absolute;top:50%;right:var(--van-padding-md);color:var(--van-gray-6);font-size:var(--van-address-list-edit-icon-size);transform:translateY(-50%)}.van-address-item .van-cell{padding:0}.van-address-item .van-radio__label{margin-left:var(--van-padding-sm)}.van-address-item .van-radio__icon--checked .van-icon{background-color:var(--van-address-list-radio-color);border-color:var(--van-address-list-radio-color)}:root,:host{--van-barrage-font-size: 16px;--van-barrage-space: 10px;--van-barrage-font: inherit;--van-barrage-color: var(--van-white)}.van-barrage{position:relative;overflow:hidden}.van-barrage__item{position:absolute;top:0;right:0;z-index:99;padding-bottom:var(--van-barrage-space);opacity:.75;line-height:1;font-size:var(--van-barrage-font-size);font-family:var(--van-barrage-font);font-weight:700;white-space:nowrap;color:var(--van-barrage-color);text-shadow:1px 0 1px #000000,0 1px 1px #000000,0 -1px 1px #000000,-1px 0 1px #000000;-webkit-user-select:none;user-select:none;will-change:transform;transform:translate(110%)}@keyframes van-barrage{0%{transform:translate(110%)}to{transform:translate(var(--move-distance))}}:root,:host{--van-cell-group-background: var(--van-background-2);--van-cell-group-title-color: var(--van-text-color-2);--van-cell-group-title-padding: var(--van-padding-md) var(--van-padding-md);--van-cell-group-title-font-size: var(--van-font-size-md);--van-cell-group-title-line-height: 16px;--van-cell-group-inset-padding: 0 var(--van-padding-md);--van-cell-group-inset-radius: var(--van-radius-lg);--van-cell-group-inset-title-padding: var(--van-padding-md) var(--van-padding-md)}.van-cell-group{background:var(--van-cell-group-background)}.van-cell-group--inset{margin:var(--van-cell-group-inset-padding);border-radius:var(--van-cell-group-inset-radius);overflow:hidden}.van-cell-group__title{padding:var(--van-cell-group-title-padding);color:var(--van-cell-group-title-color);font-size:var(--van-cell-group-title-font-size);line-height:var(--van-cell-group-title-line-height)}.van-cell-group__title--inset{padding:var(--van-cell-group-inset-title-padding)}:root,:host{--van-circle-size: 100px;--van-circle-color: var(--van-primary-color);--van-circle-layer-color: var(--van-white);--van-circle-text-color: var(--van-text-color);--van-circle-text-font-weight: var(--van-font-bold);--van-circle-text-font-size: var(--van-font-size-md);--van-circle-text-line-height: var(--van-line-height-md)}.van-circle{position:relative;display:inline-block;width:var(--van-circle-size);height:var(--van-circle-size);text-align:center}.van-circle svg{position:absolute;top:0;left:0;width:100%;height:100%}.van-circle__layer{stroke:var(--van-circle-layer-color)}.van-circle__hover{fill:none;stroke:var(--van-circle-color);stroke-linecap:round}.van-circle__text{position:absolute;top:50%;left:0;box-sizing:border-box;width:100%;padding:0 var(--van-padding-base);color:var(--van-circle-text-color);font-weight:var(--van-circle-text-font-weight);font-size:var(--van-circle-text-font-size);line-height:var(--van-circle-text-line-height);transform:translateY(-50%)}.van-row{display:flex;flex-wrap:wrap}.van-row--nowrap{flex-wrap:nowrap}.van-row--justify-center{justify-content:center}.van-row--justify-end{justify-content:flex-end}.van-row--justify-space-between{justify-content:space-between}.van-row--justify-space-around{justify-content:space-around}.van-row--align-center{align-items:center}.van-row--align-bottom{align-items:flex-end}.van-col{display:block;box-sizing:border-box;min-height:1px}.van-col--1{flex:0 0 4.16666667%;max-width:4.16666667%}.van-col--offset-1{margin-left:4.16666667%}.van-col--2{flex:0 0 8.33333333%;max-width:8.33333333%}.van-col--offset-2{margin-left:8.33333333%}.van-col--3{flex:0 0 12.5%;max-width:12.5%}.van-col--offset-3{margin-left:12.5%}.van-col--4{flex:0 0 16.66666667%;max-width:16.66666667%}.van-col--offset-4{margin-left:16.66666667%}.van-col--5{flex:0 0 20.83333333%;max-width:20.83333333%}.van-col--offset-5{margin-left:20.83333333%}.van-col--6{flex:0 0 25%;max-width:25%}.van-col--offset-6{margin-left:25%}.van-col--7{flex:0 0 29.16666667%;max-width:29.16666667%}.van-col--offset-7{margin-left:29.16666667%}.van-col--8{flex:0 0 33.33333333%;max-width:33.33333333%}.van-col--offset-8{margin-left:33.33333333%}.van-col--9{flex:0 0 37.5%;max-width:37.5%}.van-col--offset-9{margin-left:37.5%}.van-col--10{flex:0 0 41.66666667%;max-width:41.66666667%}.van-col--offset-10{margin-left:41.66666667%}.van-col--11{flex:0 0 45.83333333%;max-width:45.83333333%}.van-col--offset-11{margin-left:45.83333333%}.van-col--12{flex:0 0 50%;max-width:50%}.van-col--offset-12{margin-left:50%}.van-col--13{flex:0 0 54.16666667%;max-width:54.16666667%}.van-col--offset-13{margin-left:54.16666667%}.van-col--14{flex:0 0 58.33333333%;max-width:58.33333333%}.van-col--offset-14{margin-left:58.33333333%}.van-col--15{flex:0 0 62.5%;max-width:62.5%}.van-col--offset-15{margin-left:62.5%}.van-col--16{flex:0 0 66.66666667%;max-width:66.66666667%}.van-col--offset-16{margin-left:66.66666667%}.van-col--17{flex:0 0 70.83333333%;max-width:70.83333333%}.van-col--offset-17{margin-left:70.83333333%}.van-col--18{flex:0 0 75%;max-width:75%}.van-col--offset-18{margin-left:75%}.van-col--19{flex:0 0 79.16666667%;max-width:79.16666667%}.van-col--offset-19{margin-left:79.16666667%}.van-col--20{flex:0 0 83.33333333%;max-width:83.33333333%}.van-col--offset-20{margin-left:83.33333333%}.van-col--21{flex:0 0 87.5%;max-width:87.5%}.van-col--offset-21{margin-left:87.5%}.van-col--22{flex:0 0 91.66666667%;max-width:91.66666667%}.van-col--offset-22{margin-left:91.66666667%}.van-col--23{flex:0 0 95.83333333%;max-width:95.83333333%}.van-col--offset-23{margin-left:95.83333333%}.van-col--24{flex:0 0 100%;max-width:100%}.van-col--offset-24{margin-left:100%}:root,:host{--van-count-down-text-color: var(--van-text-color);--van-count-down-font-size: var(--van-font-size-md);--van-count-down-line-height: var(--van-line-height-md)}.van-count-down{color:var(--van-count-down-text-color);font-size:var(--van-count-down-font-size);line-height:var(--van-count-down-line-height)}:root,:host{--van-empty-padding: var(--van-padding-xl) 0;--van-empty-image-size: 160px;--van-empty-description-margin-top: var(--van-padding-md);--van-empty-description-padding: 0 60px;--van-empty-description-color: var(--van-text-color-2);--van-empty-description-font-size: var(--van-font-size-md);--van-empty-description-line-height: var(--van-line-height-md);--van-empty-bottom-margin-top: 24px}.van-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;box-sizing:border-box;padding:var(--van-empty-padding)}.van-empty__image{width:var(--van-empty-image-size);height:var(--van-empty-image-size)}.van-empty__image img{width:100%;height:100%}.van-empty__description{margin-top:var(--van-empty-description-margin-top);padding:var(--van-empty-description-padding);color:var(--van-empty-description-color);font-size:var(--van-empty-description-font-size);line-height:var(--van-empty-description-line-height)}.van-empty__bottom{margin-top:var(--van-empty-bottom-margin-top)}.van-theme-dark .van-empty{opacity:.5}:root,:host{--van-coupon-list-background: var(--van-background);--van-coupon-list-field-padding: 5px 0 5px var(--van-padding-md);--van-coupon-list-exchange-button-height: 32px;--van-coupon-list-close-button-height: 40px;--van-coupon-list-empty-tip-color: var(--van-text-color-2);--van-coupon-list-empty-tip-font-size: var(--van-font-size-md);--van-coupon-list-empty-tip-line-height: var(--van-line-height-md)}.van-coupon-list{position:relative;height:100%;background:var(--van-coupon-list-background)}.van-coupon-list__field{padding:var(--van-coupon-list-field-padding)}.van-coupon-list__field .van-field__body{height:34px;padding-left:var(--van-padding-sm);line-height:34px;background:var(--van-background);border-radius:var(--van-radius-max)}.van-coupon-list__field .van-field__body::-webkit-input-placeholder{color:var(--van-text-color-3)}.van-coupon-list__field .van-field__body::placeholder{color:var(--van-text-color-3)}.van-coupon-list__field .van-field__clear{margin-right:0}.van-coupon-list__exchange-bar{display:flex;align-items:center;background-color:var(--van-background-2)}.van-coupon-list__exchange{flex:none;height:var(--van-coupon-list-exchange-button-height);font-size:var(--van-font-size-lg);line-height:calc(var(--van-coupon-list-exchange-button-height) - 2px);border:0}.van-coupon-list .van-tabs__wrap{box-shadow:0 6px 12px -12px var(--van-gray-6)}.van-coupon-list__list{box-sizing:border-box;padding:var(--van-padding-md) 0 var(--van-padding-lg);overflow-y:auto;-webkit-overflow-scrolling:touch}.van-coupon-list__list--with-bottom{padding-bottom:50px}.van-coupon-list__bottom{position:absolute;bottom:0;left:0;z-index:999;box-sizing:border-box;width:100%;padding:5px var(--van-padding-md);font-weight:var(--van-font-bold);background-color:var(--van-background-2)}.van-coupon-list__close{height:var(--van-coupon-list-close-button-height)}.van-coupon-list__empty-tip{color:var(--van-coupon-list-empty-tip-color);font-size:var(--van-coupon-list-empty-tip-font-size);line-height:var(--van-coupon-list-empty-tip-line-height)}:root,:host{--van-divider-margin: var(--van-padding-md) 0;--van-divider-vertical-margin: 0 var(--van-padding-xs);--van-divider-text-color: var(--van-text-color-2);--van-divider-font-size: var(--van-font-size-md);--van-divider-line-height: 24px;--van-divider-border-color: var(--van-border-color);--van-divider-content-padding: var(--van-padding-md);--van-divider-content-left-width: 10%;--van-divider-content-right-width: 10%}.van-divider{display:flex;align-items:center;margin:var(--van-divider-margin);color:var(--van-divider-text-color);font-size:var(--van-divider-font-size);line-height:var(--van-divider-line-height);border-color:var(--van-divider-border-color);border-style:solid;border-width:0}.van-divider:before,.van-divider:after{display:block;flex:1;box-sizing:border-box;height:1px;border-color:inherit;border-style:inherit;border-width:var(--van-border-width) 0 0}.van-divider:before{content:""}.van-divider--hairline:before,.van-divider--hairline:after{transform:scaleY(.5)}.van-divider--dashed{border-style:dashed}.van-divider--content-center:before,.van-divider--content-left:before,.van-divider--content-right:before{margin-right:var(--van-divider-content-padding)}.van-divider--content-center:after,.van-divider--content-left:after,.van-divider--content-right:after{margin-left:var(--van-divider-content-padding);content:""}.van-divider--content-left:before{max-width:var(--van-divider-content-left-width)}.van-divider--content-right:after{max-width:var(--van-divider-content-right-width)}.van-divider--vertical{display:inline-block;width:var(--van-border-width);height:1em;margin:var(--van-divider-vertical-margin);vertical-align:middle}.van-divider--vertical:before{height:100%;border-width:0 0 0 var(--van-border-width)}.van-divider--vertical:after{display:none}.van-divider--vertical.van-divider--hairline:before{transform:scaleX(.5)}:root,:host{--van-dropdown-menu-height: 48px;--van-dropdown-menu-background: var(--van-background-2);--van-dropdown-menu-shadow: 0 2px 12px rgba(100, 101, 102, .12);--van-dropdown-menu-title-font-size: 15px;--van-dropdown-menu-title-text-color: var(--van-text-color);--van-dropdown-menu-title-active-text-color: var(--van-primary-color);--van-dropdown-menu-title-disabled-text-color: var(--van-text-color-2);--van-dropdown-menu-title-padding: 0 var(--van-padding-xs);--van-dropdown-menu-title-line-height: var(--van-line-height-lg);--van-dropdown-menu-option-active-color: var(--van-primary-color);--van-dropdown-menu-option-disabled-color: var(--van-text-color-3);--van-dropdown-menu-content-max-height: 80%}.van-dropdown-menu{-webkit-user-select:none;user-select:none}.van-dropdown-menu__bar{position:relative;display:flex;height:var(--van-dropdown-menu-height);background:var(--van-dropdown-menu-background);box-shadow:var(--van-dropdown-menu-shadow)}.van-dropdown-menu__bar--opened{z-index:calc(var(--van-dropdown-item-z-index) + 1)}.van-dropdown-menu__bar--scrollable{padding-left:var(--van-padding-base);padding-right:var(--van-padding-xs);overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch}.van-dropdown-menu__bar--scrollable::-webkit-scrollbar{display:none}.van-dropdown-menu__item{display:flex;flex:1;align-items:center;justify-content:center;min-width:0}.van-dropdown-menu__item--disabled .van-dropdown-menu__title{color:var(--van-dropdown-menu-title-disabled-text-color)}.van-dropdown-menu__item--grow{flex:1 0 auto;padding-left:var(--van-padding-base);padding-right:var(--van-padding-sm)}.van-dropdown-menu__title{position:relative;box-sizing:border-box;max-width:100%;padding:var(--van-dropdown-menu-title-padding);color:var(--van-dropdown-menu-title-text-color);font-size:var(--van-dropdown-menu-title-font-size);line-height:var(--van-dropdown-menu-title-line-height)}.van-dropdown-menu__title:after{position:absolute;top:50%;right:-4px;margin-top:-5px;border:3px solid;border-color:transparent transparent var(--van-gray-4) var(--van-gray-4);transform:rotate(-45deg);opacity:.8;content:""}.van-dropdown-menu__title--active{color:var(--van-dropdown-menu-title-active-text-color)}.van-dropdown-menu__title--active:after{border-color:transparent transparent currentColor currentColor}.van-dropdown-menu__title--down:after{margin-top:-1px;transform:rotate(135deg)}:root,:host{--van-dropdown-item-z-index: 10}.van-dropdown-item{position:fixed;right:0;left:0;z-index:var(--van-dropdown-item-z-index);overflow:hidden}.van-dropdown-item__icon{display:block;line-height:inherit}.van-dropdown-item__option{text-align:left}.van-dropdown-item__option--active,.van-dropdown-item__option--active .van-dropdown-item__icon{color:var(--van-dropdown-menu-option-active-color)}.van-dropdown-item__option--disabled,.van-dropdown-item__option--disabled .van-dropdown-item__icon{color:var(--van-dropdown-menu-option-disabled-color)}.van-dropdown-item--up{top:0}.van-dropdown-item--down{bottom:0}.van-dropdown-item__content{position:absolute;max-height:var(--van-dropdown-menu-content-max-height)}:root,:host{--van-floating-panel-border-radius: 16px;--van-floating-panel-header-height: 30px;--van-floating-panel-z-index: 999;--van-floating-panel-background: var(--van-background-2);--van-floating-panel-bar-width: 20px;--van-floating-panel-bar-height: 3px;--van-floating-panel-bar-color: var(--van-gray-5)}.van-floating-panel{position:fixed;left:0;bottom:0;width:100vw;z-index:var(--van-floating-panel-z-index);display:flex;flex-direction:column;touch-action:none;border-top-left-radius:var(--van-floating-panel-border-radius);border-top-right-radius:var(--van-floating-panel-border-radius);background:var(--van-floating-panel-background);will-change:transform}.van-floating-panel:after{content:"";display:block;position:absolute;bottom:-100vh;height:100vh;width:100vw;background-color:inherit}.van-floating-panel__header{height:var(--van-floating-panel-header-height);display:flex;justify-content:center;align-items:center;cursor:-webkit-grab;cursor:grab;-webkit-user-select:none;user-select:none}.van-floating-panel__header-bar{height:var(--van-floating-panel-bar-height);width:var(--van-floating-panel-bar-width);border-radius:var(--van-radius-md);background:var(--van-floating-panel-bar-color)}.van-floating-panel__content{flex:1;overflow-y:auto;background-color:var(--van-floating-panel-background)}.van-grid{display:flex;flex-wrap:wrap}:root,:host{--van-grid-item-content-padding: var(--van-padding-md) var(--van-padding-xs);--van-grid-item-content-background: var(--van-background-2);--van-grid-item-content-active-color: var(--van-active-color);--van-grid-item-icon-size: 28px;--van-grid-item-text-color: var(--van-text-color);--van-grid-item-text-font-size: var(--van-font-size-sm)}.van-grid-item{position:relative;box-sizing:border-box}.van-grid-item--square{height:0}.van-grid-item__icon{font-size:var(--van-grid-item-icon-size)}.van-grid-item__text{color:var(--van-grid-item-text-color);font-size:var(--van-grid-item-text-font-size);line-height:1.5;word-break:break-all}.van-grid-item__icon+.van-grid-item__text{margin-top:var(--van-padding-xs)}.van-grid-item__content{display:flex;flex-direction:column;box-sizing:border-box;height:100%;padding:var(--van-grid-item-content-padding);background:var(--van-grid-item-content-background)}.van-grid-item__content:after{z-index:1;border-width:0 var(--van-border-width) var(--van-border-width) 0}.van-grid-item__content--square{position:absolute;top:0;right:0;left:0}.van-grid-item__content--center{align-items:center;justify-content:center}.van-grid-item__content--horizontal{flex-direction:row}.van-grid-item__content--horizontal .van-grid-item__text{margin:0 0 0 var(--van-padding-xs)}.van-grid-item__content--reverse{flex-direction:column-reverse}.van-grid-item__content--reverse .van-grid-item__text{margin:0 0 var(--van-padding-xs)}.van-grid-item__content--horizontal.van-grid-item__content--reverse{flex-direction:row-reverse}.van-grid-item__content--horizontal.van-grid-item__content--reverse .van-grid-item__text{margin:0 var(--van-padding-xs) 0 0}.van-grid-item__content--surround:after{border-width:var(--van-border-width)}.van-grid-item__content--clickable{cursor:pointer}.van-grid-item__content--clickable:active{background-color:var(--van-grid-item-content-active-color)}:root,:host{--van-highlight-tag-color: var(--van-primary-color)}.van-highlight__tag{color:var(--van-highlight-tag-color)}:root,:host{--van-index-bar-sidebar-z-index: 2;--van-index-bar-index-font-size: var(--van-font-size-xs);--van-index-bar-index-line-height: var(--van-line-height-xs);--van-index-bar-index-active-color: var(--van-primary-color)}.van-index-bar__sidebar{position:fixed;top:50%;right:0;z-index:var(--van-index-bar-sidebar-z-index);display:flex;flex-direction:column;text-align:center;transform:translateY(-50%);cursor:pointer;-webkit-user-select:none;user-select:none}.van-index-bar__index{padding:0 var(--van-padding-xs) 0 var(--van-padding-md);font-weight:var(--van-font-bold);font-size:var(--van-index-bar-index-font-size);line-height:var(--van-index-bar-index-line-height)}.van-index-bar__index--active{color:var(--van-index-bar-index-active-color);font-weight:700}:root,:host{--van-index-anchor-z-index: 1;--van-index-anchor-padding: 0 var(--van-padding-md);--van-index-anchor-text-color: var(--van-text-color);--van-index-anchor-font-weight: var(--van-font-bold);--van-index-anchor-font-size: var(--van-font-size-md);--van-index-anchor-line-height: 32px;--van-index-anchor-background: transparent;--van-index-anchor-sticky-text-color: var(--van-primary-color);--van-index-anchor-sticky-background: var(--van-background-2)}.van-index-anchor{z-index:var(--van-index-anchor-z-index);box-sizing:border-box;padding:var(--van-index-anchor-padding);color:var(--van-index-anchor-text-color);font-weight:var(--van-index-anchor-font-weight);font-size:var(--van-index-anchor-font-size);line-height:var(--van-index-anchor-line-height);background:var(--van-index-anchor-background)}.van-index-anchor--sticky{position:fixed;top:0;right:0;left:0;color:var(--van-index-anchor-sticky-text-color);background:var(--van-index-anchor-sticky-background)}:root,:host{--van-pagination-height: 40px;--van-pagination-font-size: var(--van-font-size-md);--van-pagination-item-width: 36px;--van-pagination-item-default-color: var(--van-primary-color);--van-pagination-item-disabled-color: var(--van-gray-7);--van-pagination-item-disabled-background: var(--van-background);--van-pagination-background: var(--van-background-2);--van-pagination-desc-color: var(--van-gray-7);--van-pagination-disabled-opacity: var(--van-disabled-opacity)}.van-pagination{font-size:var(--van-pagination-font-size)}.van-pagination__items{display:flex}.van-pagination__item,.van-pagination__page-desc{display:flex;align-items:center;justify-content:center}.van-pagination__item{flex:1;box-sizing:border-box;min-width:var(--van-pagination-item-width);height:var(--van-pagination-height);color:var(--van-pagination-item-default-color);background:var(--van-pagination-background);cursor:pointer;-webkit-user-select:none;user-select:none}.van-pagination__item button{flex:1;height:100%;border:none;padding:0;background:transparent}.van-pagination__item button[disabled]{cursor:not-allowed}.van-pagination__item:active{color:var(--van-white);background-color:var(--van-pagination-item-default-color)}.van-pagination__item:not(:last-child):after{border-right-width:0}.van-pagination__item--active{color:var(--van-white);background-color:var(--van-pagination-item-default-color)}.van-pagination__item--page{flex-grow:0}.van-pagination__item--prev,.van-pagination__item--next{padding:0 var(--van-padding-base);cursor:pointer}.van-pagination__item--border:first-child:after{border-right-width:var(--van-border-width)}.van-pagination__item--disabled,.van-pagination__item--disabled:active{color:var(--van-pagination-item-disabled-color);background-color:var(--van-pagination-item-disabled-background);opacity:var(--van-pagination-disabled-opacity)}.van-pagination__page-desc{flex:1;height:var(--van-pagination-height);color:var(--van-pagination-desc-color)}:root,:host{--van-password-input-height: 50px;--van-password-input-margin: 0 var(--van-padding-md);--van-password-input-font-size: 20px;--van-password-input-radius: 6px;--van-password-input-background: var(--van-background-2);--van-password-input-info-color: var(--van-text-color-2);--van-password-input-info-font-size: var(--van-font-size-md);--van-password-input-error-info-color: var(--van-danger-color);--van-password-input-dot-size: 10px;--van-password-input-dot-color: var(--van-text-color);--van-password-input-text-color: var(--van-text-color);--van-password-input-cursor-color: var(--van-text-color);--van-password-input-cursor-width: 1px;--van-password-input-cursor-height: 40%;--van-password-input-cursor-duration: 1s}.van-password-input{position:relative;margin:var(--van-password-input-margin);-webkit-user-select:none;user-select:none}.van-password-input__info,.van-password-input__error-info{margin-top:var(--van-padding-md);font-size:var(--van-password-input-info-font-size);text-align:center}.van-password-input__info{color:var(--van-password-input-info-color)}.van-password-input__error-info{color:var(--van-password-input-error-info-color)}.van-password-input__security{display:flex;width:100%;height:var(--van-password-input-height);cursor:pointer}.van-password-input__security:after{border-radius:var(--van-password-input-radius)}.van-password-input__security li{position:relative;display:flex;flex:1;align-items:center;justify-content:center;height:100%;color:var(--van-password-input-text-color);font-size:var(--van-password-input-font-size);line-height:1.2;background:var(--van-password-input-background)}.van-password-input__security i{position:absolute;top:50%;left:50%;width:var(--van-password-input-dot-size);height:var(--van-password-input-dot-size);background:var(--van-password-input-dot-color);border-radius:100%;transform:translate(-50%,-50%);visibility:hidden}.van-password-input__cursor{position:absolute;top:50%;left:50%;width:var(--van-password-input-cursor-width);height:var(--van-password-input-cursor-height);background:var(--van-password-input-cursor-color);transform:translate(-50%,-50%);animation:var(--van-password-input-cursor-duration) van-cursor-flicker infinite}@keyframes van-cursor-flicker{0%{opacity:0}50%{opacity:1}to{opacity:0}}:root,:host{--van-progress-height: 4px;--van-progress-color: var(--van-primary-color);--van-progress-inactive-color: var(--van-gray-5);--van-progress-background: var(--van-gray-3);--van-progress-pivot-padding: 0 5px;--van-progress-pivot-text-color: var(--van-white);--van-progress-pivot-font-size: var(--van-font-size-xs);--van-progress-pivot-line-height: 1.6;--van-progress-pivot-background: var(--van-primary-color)}.van-progress{position:relative;height:var(--van-progress-height);background:var(--van-progress-background);border-radius:var(--van-progress-height)}.van-progress__portion{position:absolute;left:0;width:100%;height:100%;background:var(--van-progress-color);border-radius:inherit;transform-origin:0;transition:all var(--van-duration-base) var(--van-ease-out)}.van-progress__portion--inactive{background:var(--van-progress-inactive-color)}.van-progress__pivot{position:absolute;top:50%;box-sizing:border-box;min-width:3.6em;padding:var(--van-progress-pivot-padding);color:var(--van-progress-pivot-text-color);font-size:var(--van-progress-pivot-font-size);line-height:var(--van-progress-pivot-line-height);text-align:center;word-break:keep-all;background:var(--van-progress-pivot-background);border-radius:1em;transition:all var(--van-duration-base) var(--van-ease-out)}.van-progress__pivot--inactive{background:var(--van-progress-inactive-color)}:root,:host{--van-rolling-text-background: inherit;--van-rolling-text-color: var(--van-text-color);--van-rolling-text-font-size: var(--van-font-size-md);--van-rolling-text-gap: 0px;--van-rolling-text-item-width: 15px;--van-rolling-text-item-border-radius: 0px}.van-rolling-text{display:inline-flex;justify-content:center;align-items:center;font-size:var(--van-rolling-text-font-size);color:var(--van-rolling-text-color)}.van-rolling-text-item{margin-right:var(--van-rolling-text-gap);width:var(--van-rolling-text-item-width);border-radius:var(--van-rolling-text-item-border-radius);background:var(--van-rolling-text-background);overflow:hidden}.van-rolling-text-item:last-child{margin-right:0}.van-rolling-text-item__box{overflow:hidden}.van-rolling-text-item__box--animate{animation:van-up var(--van-duration) ease-in-out var(--van-delay);animation-iteration-count:1;animation-fill-mode:both}.van-rolling-text-item__item{text-align:center}.van-rolling-text-item--down .van-rolling-text-item__box{transform:translateY(var(--van-translate))}.van-rolling-text-item--down .van-rolling-text-item__box--animate{animation-name:van-down}@keyframes van-down{0%{transform:translateY(var(--van-translate))}to{transform:translateY(0)}}@keyframes van-up{0%{transform:translateY(0)}to{transform:translateY(var(--van-translate))}}:root,:host{--van-sidebar-width: 80px}.van-sidebar{width:var(--van-sidebar-width);overflow-y:auto;-webkit-overflow-scrolling:touch}:root,:host{--van-sidebar-font-size: var(--van-font-size-md);--van-sidebar-line-height: var(--van-line-height-md);--van-sidebar-text-color: var(--van-text-color);--van-sidebar-disabled-text-color: var(--van-text-color-3);--van-sidebar-padding: 20px var(--van-padding-sm);--van-sidebar-active-color: var(--van-active-color);--van-sidebar-background: var(--van-background);--van-sidebar-selected-font-weight: var(--van-font-bold);--van-sidebar-selected-text-color: var(--van-text-color);--van-sidebar-selected-border-width: 4px;--van-sidebar-selected-border-height: 16px;--van-sidebar-selected-border-color: var(--van-primary-color);--van-sidebar-selected-background: var(--van-background-2)}.van-sidebar-item{position:relative;display:block;box-sizing:border-box;padding:var(--van-sidebar-padding);overflow:hidden;color:var(--van-sidebar-text-color);font-size:var(--van-sidebar-font-size);line-height:var(--van-sidebar-line-height);background:var(--van-sidebar-background);cursor:pointer;-webkit-user-select:none;user-select:none}.van-sidebar-item:active{background-color:var(--van-sidebar-active-color)}.van-sidebar-item:not(:last-child):after{border-bottom-width:1px}.van-sidebar-item__text{word-break:break-all}.van-sidebar-item--select{color:var(--van-sidebar-selected-text-color);font-weight:var(--van-sidebar-selected-font-weight)}.van-sidebar-item--select,.van-sidebar-item--select:active{background-color:var(--van-sidebar-selected-background)}.van-sidebar-item--select:before{position:absolute;top:50%;left:0;width:var(--van-sidebar-selected-border-width);height:var(--van-sidebar-selected-border-height);background-color:var(--van-sidebar-selected-border-color);transform:translateY(-50%);content:""}.van-sidebar-item--disabled{color:var(--van-sidebar-disabled-text-color);cursor:not-allowed}.van-sidebar-item--disabled:active{background-color:var(--van-sidebar-background)}:root,:host{--van-tree-select-font-size: var(--van-font-size-md);--van-tree-select-nav-background: var(--van-background);--van-tree-select-content-background: var(--van-background-2);--van-tree-select-nav-item-padding: 14px var(--van-padding-sm);--van-tree-select-item-height: 48px;--van-tree-select-item-active-color: var(--van-primary-color);--van-tree-select-item-disabled-color: var(--van-gray-5);--van-tree-select-item-selected-size: 16px}.van-tree-select{position:relative;display:flex;font-size:var(--van-tree-select-font-size)}.van-tree-select__nav{flex:1;overflow-y:auto;background:var(--van-tree-select-nav-background);-webkit-overflow-scrolling:touch}.van-tree-select__nav-item{padding:var(--van-tree-select-nav-item-padding)}.van-tree-select__content{flex:2;overflow-y:auto;background:var(--van-tree-select-content-background);-webkit-overflow-scrolling:touch}.van-tree-select__item{position:relative;padding:0 32px 0 var(--van-padding-md);font-weight:var(--van-font-bold);line-height:var(--van-tree-select-item-height);-webkit-user-select:none;user-select:none;cursor:pointer}.van-tree-select__item--active{color:var(--van-tree-select-item-active-color)}.van-tree-select__item:active{background-color:var(--van-active-color)}.van-tree-select__item--disabled{color:var(--van-tree-select-item-disabled-color);cursor:not-allowed}.van-tree-select__item--disabled:active{background-color:transparent}.van-tree-select__selected{position:absolute;top:50%;right:var(--van-padding-md);margin-top:calc(var(--van-padding-xs) * -1);font-size:var(--van-tree-select-item-selected-size)}:root,:host{--van-skeleton-title-width: 40%}.van-skeleton-title{height:var(--van-skeleton-paragraph-height);background:var(--van-skeleton-paragraph-background)}.van-skeleton-title--round{border-radius:var(--van-radius-max)}.van-skeleton-title{width:var(--van-skeleton-title-width);margin:0}.van-skeleton-title+.van-skeleton-paragraph{margin-top:20px}:root,:host{--van-skeleton-avatar-size: 32px;--van-skeleton-avatar-background: var(--van-active-color)}.van-skeleton-avatar{flex-shrink:0;width:var(--van-skeleton-avatar-size);height:var(--van-skeleton-avatar-size);margin-right:var(--van-padding-md);background:var(--van-skeleton-avatar-background)}.van-skeleton-avatar--round{border-radius:var(--van-radius-max)}.van-skeleton-avatar+.van-skeleton__content{padding-top:var(--van-padding-xs)}:root,:host{--van-skeleton-paragraph-height: 16px;--van-skeleton-paragraph-background: var(--van-active-color);--van-skeleton-paragraph-margin-top: var(--van-padding-sm)}.van-skeleton-paragraph{height:var(--van-skeleton-paragraph-height);background:var(--van-skeleton-paragraph-background)}.van-skeleton-paragraph--round{border-radius:var(--van-radius-max)}.van-skeleton-paragraph:not(:first-child){margin-top:var(--van-skeleton-paragraph-margin-top)}:root,:host{--van-skeleton-duration: 1.2s}.van-skeleton{display:flex;padding:0 var(--van-padding-md)}.van-skeleton__content{width:100%}.van-skeleton--animate{animation:van-skeleton-blink var(--van-skeleton-duration) ease-in-out infinite}@keyframes van-skeleton-blink{50%{opacity:.6}}:root,:host{--van-slider-active-background: var(--van-primary-color);--van-slider-inactive-background: var(--van-gray-3);--van-slider-disabled-opacity: var(--van-disabled-opacity);--van-slider-bar-height: 2px;--van-slider-button-width: 24px;--van-slider-button-height: 24px;--van-slider-button-radius: 50%;--van-slider-button-background: var(--van-white);--van-slider-button-shadow: 0 1px 2px rgba(0, 0, 0, .5)}.van-theme-dark{--van-slider-inactive-background: var(--van-background-3)}.van-slider{position:relative;width:100%;height:var(--van-slider-bar-height);background:var(--van-slider-inactive-background);border-radius:var(--van-radius-max);cursor:pointer}.van-slider:before{position:absolute;top:calc(var(--van-padding-xs) * -1);right:0;bottom:calc(var(--van-padding-xs) * -1);left:0;content:""}.van-slider__bar{position:absolute;width:100%;height:100%;background:var(--van-slider-active-background);border-radius:inherit;transition:all var(--van-duration-fast)}.van-slider__button{width:var(--van-slider-button-width);height:var(--van-slider-button-height);background:var(--van-slider-button-background);border-radius:var(--van-slider-button-radius);box-shadow:var(--van-slider-button-shadow)}.van-slider__button-wrapper{position:absolute;cursor:-webkit-grab;cursor:grab;top:50%}.van-slider__button-wrapper--right{right:0;transform:translate3d(50%,-50%,0)}.van-slider__button-wrapper--left{left:0;transform:translate3d(-50%,-50%,0)}.van-slider--disabled{cursor:not-allowed;opacity:var(--van-slider-disabled-opacity)}.van-slider--disabled .van-slider__button-wrapper{cursor:not-allowed}.van-slider--vertical{display:inline-block;width:var(--van-slider-bar-height);height:100%}.van-slider--vertical .van-slider__button-wrapper--right{top:auto;right:50%;bottom:0;transform:translate3d(50%,50%,0)}.van-slider--vertical .van-slider__button-wrapper--left{top:0;right:50%;left:auto;transform:translate3d(50%,-50%,0)}.van-slider--vertical:before{top:0;right:calc(var(--van-padding-xs) * -1);bottom:0;left:calc(var(--van-padding-xs) * -1)}.van-space{display:inline-flex}.van-space--horizontal .van-space-item{display:flex;align-items:center}.van-space--vertical{flex-direction:column}.van-space--align-baseline{align-items:baseline}.van-space--align-start{align-items:flex-start}.van-space--align-end{align-items:flex-end}.van-space--align-center{align-items:center}.van-space--wrap{flex-wrap:wrap}.van-space--fill{display:flex}:root,:host{--van-steps-background: var(--van-background-2)}.van-steps{overflow:hidden;background-color:var(--van-steps-background)}.van-steps--horizontal{padding:10px 10px 0}.van-steps--horizontal .van-steps__items{position:relative;display:flex;margin:0 0 10px;padding-bottom:22px}.van-steps--vertical{padding:0 0 0 var(--van-padding-xl)}:root,:host{--van-step-text-color: var(--van-text-color-2);--van-step-active-color: var(--van-primary-color);--van-step-process-text-color: var(--van-text-color);--van-step-font-size: var(--van-font-size-md);--van-step-line-color: var(--van-border-color);--van-step-finish-line-color: var(--van-primary-color);--van-step-finish-text-color: var(--van-text-color);--van-step-icon-size: 12px;--van-step-circle-size: 5px;--van-step-circle-color: var(--van-gray-6);--van-step-horizontal-title-font-size: var(--van-font-size-sm)}.van-step{position:relative;flex:1;color:var(--van-step-text-color);font-size:var(--van-step-font-size)}.van-step__circle{display:block;width:var(--van-step-circle-size);height:var(--van-step-circle-size);background-color:var(--van-step-circle-color);border-radius:50%}.van-step__line{position:absolute;background-color:var(--van-step-line-color);transition:background-color var(--van-duration-base)}.van-step--horizontal{float:left}.van-step--horizontal:first-child .van-step__title{margin-left:0;transform:none}.van-step--horizontal:last-child:not(:first-child){position:absolute;right:1px;width:auto}.van-step--horizontal:last-child:not(:first-child) .van-step__title{margin-left:0;transform:none}.van-step--horizontal:last-child:not(:first-child) .van-step__circle-container{right:-9px;left:auto}.van-step--horizontal .van-step__circle-container{position:absolute;top:30px;left:calc(var(--van-padding-xs) * -1);z-index:1;padding:0 var(--van-padding-xs);background-color:var(--van-background-2);transform:translateY(-50%)}.van-step--horizontal .van-step__title{display:inline-block;margin-left:3px;font-size:var(--van-step-horizontal-title-font-size);transform:translate(-50%)}.van-step--horizontal .van-step__line{top:30px;left:0;width:100%;height:1px}.van-step--horizontal .van-step__icon{display:block;font-size:var(--van-step-icon-size)}.van-step--horizontal .van-step--process{color:var(--van-step-process-text-color)}.van-step--vertical{display:block;float:none;padding:10px 10px 10px 0;line-height:var(--van-line-height-sm)}.van-step--vertical:not(:last-child):after{border-bottom-width:1px}.van-step--vertical .van-step__circle-container{position:absolute;top:19px;left:-15px;z-index:1;font-size:var(--van-step-icon-size);line-height:1;transform:translate(-50%,-50%)}.van-step--vertical .van-step__line{top:16px;left:-15px;width:1px;height:100%}.van-step:last-child .van-step__line{width:0}.van-step--finish{color:var(--van-step-finish-text-color)}.van-step--finish .van-step__circle,.van-step--finish .van-step__line{background-color:var(--van-step-finish-line-color)}.van-step__icon,.van-step__title{transition:color var(--van-duration-base)}.van-step__icon--active,.van-step__title--active,.van-step__icon--finish,.van-step__title--finish{color:var(--van-step-active-color)}:root,:host{--van-stepper-background: var(--van-active-color);--van-stepper-button-icon-color: var(--van-text-color);--van-stepper-button-disabled-color: var(--van-background);--van-stepper-button-disabled-icon-color: var(--van-gray-5);--van-stepper-button-round-theme-color: var(--van-primary-color);--van-stepper-input-width: 32px;--van-stepper-input-height: 28px;--van-stepper-input-font-size: var(--van-font-size-md);--van-stepper-input-line-height: normal;--van-stepper-input-text-color: var(--van-text-color);--van-stepper-input-disabled-text-color: var(--van-text-color-3);--van-stepper-input-disabled-background: var(--van-active-color);--van-stepper-radius: var(--van-radius-md)}.van-stepper{display:inline-block;-webkit-user-select:none;user-select:none}.van-stepper__minus,.van-stepper__plus{position:relative;box-sizing:border-box;width:var(--van-stepper-input-height);height:var(--van-stepper-input-height);margin:0;padding:0;color:var(--van-stepper-button-icon-color);vertical-align:middle;background:var(--van-stepper-background);border:0}.van-stepper__minus:before,.van-stepper__plus:before{width:50%;height:1px}.van-stepper__minus:after,.van-stepper__plus:after{width:1px;height:50%}.van-stepper__minus:before,.van-stepper__plus:before,.van-stepper__minus:after,.van-stepper__plus:after{position:absolute;top:50%;left:50%;background-color:currentColor;transform:translate(-50%,-50%);content:""}.van-stepper__minus--disabled,.van-stepper__plus--disabled{color:var(--van-stepper-button-disabled-icon-color);background-color:var(--van-stepper-button-disabled-color);cursor:not-allowed}.van-stepper__minus{border-radius:var(--van-stepper-radius) 0 0 var(--van-stepper-radius)}.van-stepper__minus:after{display:none}.van-stepper__plus{border-radius:0 var(--van-stepper-radius) var(--van-stepper-radius) 0}.van-stepper__input{box-sizing:border-box;width:var(--van-stepper-input-width);height:var(--van-stepper-input-height);margin:0 2px;padding:0;color:var(--van-stepper-input-text-color);font-size:var(--van-stepper-input-font-size);line-height:var(--van-stepper-input-line-height);text-align:center;vertical-align:middle;background:var(--van-stepper-background);border:0;border-width:1px 0;border-radius:0;-webkit-appearance:none}.van-stepper__input:disabled{color:var(--van-stepper-input-disabled-text-color);background-color:var(--van-stepper-input-disabled-background);-webkit-text-fill-color:var(--van-stepper-input-disabled-text-color);opacity:1}.van-stepper__input:read-only{cursor:default}.van-stepper--round .van-stepper__input{background-color:transparent}.van-stepper--round .van-stepper__plus,.van-stepper--round .van-stepper__minus{border-radius:100%}.van-stepper--round .van-stepper__plus--disabled,.van-stepper--round .van-stepper__minus--disabled{opacity:.3;cursor:not-allowed}.van-stepper--round .van-stepper__plus{color:var(--van-white);background:var(--van-stepper-button-round-theme-color)}.van-stepper--round .van-stepper__minus{color:var(--van-stepper-button-round-theme-color);background-color:var(--van-background-2);border:1px solid var(--van-stepper-button-round-theme-color)}.van-swipe-cell{position:relative;overflow:hidden;cursor:-webkit-grab;cursor:grab}.van-swipe-cell__wrapper{transition-timing-function:cubic-bezier(.18,.89,.32,1);transition-property:transform}.van-swipe-cell__left,.van-swipe-cell__right{position:absolute;top:0;height:100%}.van-swipe-cell__left{left:0;transform:translate3d(-100%,0,0)}.van-swipe-cell__right{right:0;transform:translate3d(100%,0,0)}:root,:host{--van-tabbar-height: 50px;--van-tabbar-z-index: 1;--van-tabbar-background: var(--van-background-2)}.van-tabbar{z-index:var(--van-tabbar-z-index);display:flex;box-sizing:content-box;width:100%;height:var(--van-tabbar-height);background:var(--van-tabbar-background)}.van-tabbar--fixed{position:fixed;bottom:0;left:0}:root,:host{--van-tabbar-item-font-size: var(--van-font-size-sm);--van-tabbar-item-text-color: var(--van-text-color);--van-tabbar-item-active-color: var(--van-primary-color);--van-tabbar-item-active-background: var(--van-background-2);--van-tabbar-item-line-height: 1;--van-tabbar-item-icon-size: 22px;--van-tabbar-item-icon-margin-bottom: var(--van-padding-base)}.van-tabbar-item{display:flex;flex:1;flex-direction:column;align-items:center;justify-content:center;color:var(--van-tabbar-item-text-color);font-size:var(--van-tabbar-item-font-size);line-height:var(--van-tabbar-item-line-height);cursor:pointer}.van-tabbar-item__icon{margin-bottom:var(--van-tabbar-item-icon-margin-bottom);font-size:var(--van-tabbar-item-icon-size)}.van-tabbar-item__icon .van-icon{display:block}.van-tabbar-item__icon .van-badge{margin-top:var(--van-padding-base)}.van-tabbar-item__icon img{display:block;height:20px}.van-tabbar-item--active{color:var(--van-tabbar-item-active-color);background-color:var(--van-tabbar-item-active-background)}:root,:host{--van-text-ellipsis-line-height: 1.6;--van-text-ellipsis-action-color: var(--van-blue)}.van-text-ellipsis{line-height:var(--van-text-ellipsis-line-height);white-space:pre-wrap;overflow-wrap:break-word}.van-text-ellipsis__action{cursor:pointer;color:var(--van-text-ellipsis-action-color)}.van-text-ellipsis__action:active{opacity:var(--van-active-opacity)}:root,:host{--van-watermark-z-index: 100}.van-watermark{position:absolute;height:100%;width:100%;left:0;top:0;z-index:var(--van-watermark-z-index);background-repeat:repeat;pointer-events:none}.van-watermark__wrapper{display:none}.van-watermark--full{position:fixed} diff --git a/Web/dist/assets/request-CDAs_I05.js b/Web/dist/assets/request-CDAs_I05.js new file mode 100644 index 0000000..a8b91aa --- /dev/null +++ b/Web/dist/assets/request-CDAs_I05.js @@ -0,0 +1 @@ +import{k as r,l as c,m as i,u,b as m,p,q as f,s as a}from"./index-CoRZCnfa.js";import{a as d}from"./index-B9ygI19o.js";let n;const g={title:"",width:"",theme:null,message:"",overlay:!0,callback:null,teleport:"body",className:"",allowHtml:!1,lockScroll:!0,transition:void 0,beforeClose:null,overlayClass:"",overlayStyle:void 0,messageAlign:"",cancelButtonText:"",cancelButtonColor:null,cancelButtonDisabled:!1,confirmButtonText:"",confirmButtonColor:null,confirmButtonDisabled:!1,showConfirmButton:!0,showCancelButton:!1,closeOnPopstate:!0,closeOnClickOverlay:!1,destroyOnClose:!1};let b=r({},g);function w(){({instance:n}=i({setup(){const{state:s,toggle:o}=u();return()=>m(f,p(s,{"onUpdate:show":o}),null)}}))}function C(e){return c?new Promise((s,o)=>{n||w(),n.open(r({},b,e,{callback:t=>{(t==="confirm"?s:o)(t)}}))}):Promise.resolve(void 0)}const B=e=>C(r({showCancelButton:!0},e)),l=d.create({baseURL:"/api",timeout:3e4,headers:{"Content-Type":"application/json"}});l.interceptors.request.use(e=>e,e=>(console.error("请求错误:",e),Promise.reject(e)));l.interceptors.response.use(e=>{const{data:s}=e;return s.success===!1?(a(s.message||"请求失败"),Promise.reject(new Error(s.message||"请求失败"))):s},e=>{if(console.error("响应错误:",e),e.response){const{status:s,data:o}=e.response;let t="请求失败";switch(s){case 400:t=o?.message||"请求参数错误";break;case 401:t="未授权,请重新登录";break;case 403:t="拒绝访问";break;case 404:t="请求的资源不存在";break;case 500:t="服务器内部错误";break;default:t=o?.message||`请求失败 (${s})`}a(t)}else e.request?a("网络连接失败,请检查网络"):a(e.message||"请求失败");return Promise.reject(e)});export{l as r,B as s}; diff --git a/Web/dist/favicon.ico b/Web/dist/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..df36fcfb72584e00488330b560ebcf34a41c64c2 GIT binary patch literal 4286 zcmds*O-Phc6o&64GDVCEQHxsW(p4>LW*W<827=Unuo8sGpRux(DN@jWP-e29Wl%wj zY84_aq9}^Am9-cWTD5GGEo#+5Fi2wX_P*bo+xO!)p*7B;iKlbFd(U~_d(U?#hLj56 zPhFkj-|A6~Qk#@g^#D^U0XT1cu=c-vu1+SElX9NR;kzAUV(q0|dl0|%h|dI$%VICy zJnu2^L*Te9JrJMGh%-P79CL0}dq92RGU6gI{v2~|)p}sG5x0U*z<8U;Ij*hB9z?ei z@g6Xq-pDoPl=MANPiR7%172VA%r)kevtV-_5H*QJKFmd;8yA$98zCxBZYXTNZ#QFk2(TX0;Y2dt&WitL#$96|gJY=3xX zpCoi|YNzgO3R`f@IiEeSmKrPSf#h#Qd<$%Ej^RIeeYfsxhPMOG`S`Pz8q``=511zm zAm)MX5AV^5xIWPyEu7u>qYs?pn$I4nL9J!=K=SGlKLXpE<5x+2cDTXq?brj?n6sp= zphe9;_JHf40^9~}9i08r{XM$7HB!`{Ys~TK0kx<}ZQng`UPvH*11|q7&l9?@FQz;8 zx!=3<4seY*%=OlbCbcae?5^V_}*K>Uo6ZWV8mTyE^B=DKy7-sdLYkR5Z?paTgK-zyIkKjIcpyO z{+uIt&YSa_$QnN_@t~L014dyK(fOOo+W*MIxbA6Ndgr=Y!f#Tokqv}n<7-9qfHkc3 z=>a|HWqcX8fzQCT=dqVbogRq!-S>H%yA{1w#2Pn;=e>JiEj7Hl;zdt-2f+j2%DeVD zsW0Ab)ZK@0cIW%W7z}H{&~yGhn~D;aiP4=;m-HCo`BEI+Kd6 z={Xwx{TKxD#iCLfl2vQGDitKtN>z|-AdCN|$jTFDg0m3O`WLD4_s#$S literal 0 HcmV?d00001 diff --git a/Web/dist/index.html b/Web/dist/index.html new file mode 100644 index 0000000..4e33341 --- /dev/null +++ b/Web/dist/index.html @@ -0,0 +1,14 @@ + + + + + + + Vite App + + + + +
+ + diff --git a/Web/eslint.config.js b/Web/eslint.config.js new file mode 100644 index 0000000..7807d8b --- /dev/null +++ b/Web/eslint.config.js @@ -0,0 +1,26 @@ +import { defineConfig, globalIgnores } from 'eslint/config' +import globals from 'globals' +import js from '@eslint/js' +import pluginVue from 'eslint-plugin-vue' +import skipFormatting from '@vue/eslint-config-prettier/skip-formatting' + +export default defineConfig([ + { + name: 'app/files-to-lint', + files: ['**/*.{js,mjs,jsx,vue}'], + }, + + globalIgnores(['**/dist/**', '**/dist-ssr/**', '**/coverage/**']), + + { + languageOptions: { + globals: { + ...globals.browser, + }, + }, + }, + + js.configs.recommended, + ...pluginVue.configs['flat/essential'], + skipFormatting, +]) diff --git a/Web/index.html b/Web/index.html new file mode 100644 index 0000000..b19040a --- /dev/null +++ b/Web/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite App + + +
+ + + diff --git a/Web/jsconfig.json b/Web/jsconfig.json new file mode 100644 index 0000000..5a1f2d2 --- /dev/null +++ b/Web/jsconfig.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "paths": { + "@/*": ["./src/*"] + } + }, + "exclude": ["node_modules", "dist"] +} diff --git a/Web/package.json b/Web/package.json new file mode 100644 index 0000000..f390d67 --- /dev/null +++ b/Web/package.json @@ -0,0 +1,34 @@ +{ + "name": "email-bill", + "version": "0.0.0", + "private": true, + "type": "module", + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview", + "lint": "eslint . --fix --cache", + "format": "prettier --write --experimental-cli src/" + }, + "dependencies": { + "axios": "^1.13.2", + "pinia": "^3.0.4", + "vant": "^4.9.22", + "vue": "^3.5.25", + "vue-router": "^4.6.3" + }, + "devDependencies": { + "@eslint/js": "^9.39.1", + "@vitejs/plugin-vue": "^6.0.2", + "@vue/eslint-config-prettier": "^10.2.0", + "eslint": "^9.39.1", + "eslint-plugin-vue": "~10.5.1", + "globals": "^16.5.0", + "prettier": "3.6.2", + "vite": "^7.2.4", + "vite-plugin-vue-devtools": "^8.0.5" + } +} diff --git a/Web/pnpm-lock.yaml b/Web/pnpm-lock.yaml new file mode 100644 index 0000000..95f352b --- /dev/null +++ b/Web/pnpm-lock.yaml @@ -0,0 +1,2738 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + axios: + specifier: ^1.13.2 + version: 1.13.2 + pinia: + specifier: ^3.0.4 + version: 3.0.4(vue@3.5.26) + vant: + specifier: ^4.9.22 + version: 4.9.22(vue@3.5.26) + vue: + specifier: ^3.5.25 + version: 3.5.26 + vue-router: + specifier: ^4.6.3 + version: 4.6.4(vue@3.5.26) + devDependencies: + '@eslint/js': + specifier: ^9.39.1 + version: 9.39.2 + '@vitejs/plugin-vue': + specifier: ^6.0.2 + version: 6.0.3(vite@7.3.0)(vue@3.5.26) + '@vue/eslint-config-prettier': + specifier: ^10.2.0 + version: 10.2.0(eslint@9.39.2)(prettier@3.6.2) + eslint: + specifier: ^9.39.1 + version: 9.39.2 + eslint-plugin-vue: + specifier: ~10.5.1 + version: 10.5.1(eslint@9.39.2)(vue-eslint-parser@10.2.0(eslint@9.39.2)) + globals: + specifier: ^16.5.0 + version: 16.5.0 + prettier: + specifier: 3.6.2 + version: 3.6.2 + vite: + specifier: ^7.2.4 + version: 7.3.0 + vite-plugin-vue-devtools: + specifier: ^8.0.5 + version: 8.0.5(vite@7.3.0)(vue@3.5.26) + +packages: + + '@babel/code-frame@7.27.1': + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.28.5': + resolution: {integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.28.5': + resolution: {integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.28.5': + resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-annotate-as-pure@7.27.3': + resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.27.2': + resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-create-class-features-plugin@7.28.5': + resolution: {integrity: sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-globals@7.28.0': + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-member-expression-to-functions@7.28.5': + resolution: {integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.27.1': + resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.28.3': + resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-optimise-call-expression@7.27.1': + resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-plugin-utils@7.27.1': + resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-replace-supers@7.27.1': + resolution: {integrity: sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.28.4': + resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.28.5': + resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-proposal-decorators@7.28.0': + resolution: {integrity: sha512-zOiZqvANjWDUaUS9xMxbMcK/Zccztbe/6ikvUXaG9nsPH3w6qh5UaPGAnirI/WhIbZ8m3OHU0ReyPrknG+ZKeg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-decorators@7.27.1': + resolution: {integrity: sha512-YMq8Z87Lhl8EGkmb0MwYkt36QnxC+fzCgrl66ereamPlYToRpIk5nUjKUY3QKLWq8mwUB1BgbeXcTJhZOCDg5A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-attributes@7.27.1': + resolution: {integrity: sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-meta@7.10.4': + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-jsx@7.27.1': + resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-typescript@7.27.1': + resolution: {integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typescript@7.28.5': + resolution: {integrity: sha512-x2Qa+v/CuEoX7Dr31iAfr0IhInrVOWZU/2vJMJ00FOR/2nM0BcBEclpaf9sWCDc+v5e9dMrhSH8/atq/kX7+bA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/template@7.27.2': + resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.28.5': + resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.28.5': + resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} + engines: {node: '>=6.9.0'} + + '@esbuild/aix-ppc64@0.27.2': + resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.27.2': + resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.27.2': + resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.27.2': + resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.27.2': + resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.27.2': + resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.27.2': + resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.27.2': + resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.27.2': + resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.27.2': + resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.27.2': + resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.27.2': + resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.27.2': + resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.27.2': + resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.27.2': + resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.27.2': + resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.27.2': + resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.27.2': + resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.27.2': + resolution: {integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.27.2': + resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.27.2': + resolution: {integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.27.2': + resolution: {integrity: sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.27.2': + resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.27.2': + resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.27.2': + resolution: {integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.27.2': + resolution: {integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.9.0': + resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.21.1': + resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/config-helpers@0.4.2': + resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.17.0': + resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.3.3': + resolution: {integrity: sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.39.2': + resolution: {integrity: sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.7': + resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.4.1': + resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.7': + resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@pkgr/core@0.2.9': + resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + + '@polka/url@1.0.0-next.29': + resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} + + '@rolldown/pluginutils@1.0.0-beta.53': + resolution: {integrity: sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==} + + '@rollup/rollup-android-arm-eabi@4.54.0': + resolution: {integrity: sha512-OywsdRHrFvCdvsewAInDKCNyR3laPA2mc9bRYJ6LBp5IyvF3fvXbbNR0bSzHlZVFtn6E0xw2oZlyjg4rKCVcng==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.54.0': + resolution: {integrity: sha512-Skx39Uv+u7H224Af+bDgNinitlmHyQX1K/atIA32JP3JQw6hVODX5tkbi2zof/E69M1qH2UoN3Xdxgs90mmNYw==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.54.0': + resolution: {integrity: sha512-k43D4qta/+6Fq+nCDhhv9yP2HdeKeP56QrUUTW7E6PhZP1US6NDqpJj4MY0jBHlJivVJD5P8NxrjuobZBJTCRw==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.54.0': + resolution: {integrity: sha512-cOo7biqwkpawslEfox5Vs8/qj83M/aZCSSNIWpVzfU2CYHa2G3P1UN5WF01RdTHSgCkri7XOlTdtk17BezlV3A==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.54.0': + resolution: {integrity: sha512-miSvuFkmvFbgJ1BevMa4CPCFt5MPGw094knM64W9I0giUIMMmRYcGW/JWZDriaw/k1kOBtsWh1z6nIFV1vPNtA==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.54.0': + resolution: {integrity: sha512-KGXIs55+b/ZfZsq9aR026tmr/+7tq6VG6MsnrvF4H8VhwflTIuYh+LFUlIsRdQSgrgmtM3fVATzEAj4hBQlaqQ==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.54.0': + resolution: {integrity: sha512-EHMUcDwhtdRGlXZsGSIuXSYwD5kOT9NVnx9sqzYiwAc91wfYOE1g1djOEDseZJKKqtHAHGwnGPQu3kytmfaXLQ==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm-musleabihf@4.54.0': + resolution: {integrity: sha512-+pBrqEjaakN2ySv5RVrj/qLytYhPKEUwk+e3SFU5jTLHIcAtqh2rLrd/OkbNuHJpsBgxsD8ccJt5ga/SeG0JmA==} + cpu: [arm] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-arm64-gnu@4.54.0': + resolution: {integrity: sha512-NSqc7rE9wuUaRBsBp5ckQ5CVz5aIRKCwsoa6WMF7G01sX3/qHUw/z4pv+D+ahL1EIKy6Enpcnz1RY8pf7bjwng==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm64-musl@4.54.0': + resolution: {integrity: sha512-gr5vDbg3Bakga5kbdpqx81m2n9IX8M6gIMlQQIXiLTNeQW6CucvuInJ91EuCJ/JYvc+rcLLsDFcfAD1K7fMofg==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-loong64-gnu@4.54.0': + resolution: {integrity: sha512-gsrtB1NA3ZYj2vq0Rzkylo9ylCtW/PhpLEivlgWe0bpgtX5+9j9EZa0wtZiCjgu6zmSeZWyI/e2YRX1URozpIw==} + cpu: [loong64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-ppc64-gnu@4.54.0': + resolution: {integrity: sha512-y3qNOfTBStmFNq+t4s7Tmc9hW2ENtPg8FeUD/VShI7rKxNW7O4fFeaYbMsd3tpFlIg1Q8IapFgy7Q9i2BqeBvA==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-riscv64-gnu@4.54.0': + resolution: {integrity: sha512-89sepv7h2lIVPsFma8iwmccN7Yjjtgz0Rj/Ou6fEqg3HDhpCa+Et+YSufy27i6b0Wav69Qv4WBNl3Rs6pwhebQ==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-riscv64-musl@4.54.0': + resolution: {integrity: sha512-ZcU77ieh0M2Q8Ur7D5X7KvK+UxbXeDHwiOt/CPSBTI1fBmeDMivW0dPkdqkT4rOgDjrDDBUed9x4EgraIKoR2A==} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-s390x-gnu@4.54.0': + resolution: {integrity: sha512-2AdWy5RdDF5+4YfG/YesGDDtbyJlC9LHmL6rZw6FurBJ5n4vFGupsOBGfwMRjBYH7qRQowT8D/U4LoSvVwOhSQ==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-gnu@4.54.0': + resolution: {integrity: sha512-WGt5J8Ij/rvyqpFexxk3ffKqqbLf9AqrTBbWDk7ApGUzaIs6V+s2s84kAxklFwmMF/vBNGrVdYgbblCOFFezMQ==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-musl@4.54.0': + resolution: {integrity: sha512-JzQmb38ATzHjxlPHuTH6tE7ojnMKM2kYNzt44LO/jJi8BpceEC8QuXYA908n8r3CNuG/B3BV8VR3Hi1rYtmPiw==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rollup/rollup-openharmony-arm64@4.54.0': + resolution: {integrity: sha512-huT3fd0iC7jigGh7n3q/+lfPcXxBi+om/Rs3yiFxjvSxbSB6aohDFXbWvlspaqjeOh+hx7DDHS+5Es5qRkWkZg==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.54.0': + resolution: {integrity: sha512-c2V0W1bsKIKfbLMBu/WGBz6Yci8nJ/ZJdheE0EwB73N3MvHYKiKGs3mVilX4Gs70eGeDaMqEob25Tw2Gb9Nqyw==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.54.0': + resolution: {integrity: sha512-woEHgqQqDCkAzrDhvDipnSirm5vxUXtSKDYTVpZG3nUdW/VVB5VdCYA2iReSj/u3yCZzXID4kuKG7OynPnB3WQ==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-gnu@4.54.0': + resolution: {integrity: sha512-dzAc53LOuFvHwbCEOS0rPbXp6SIhAf2txMP5p6mGyOXXw5mWY8NGGbPMPrs4P1WItkfApDathBj/NzMLUZ9rtQ==} + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.54.0': + resolution: {integrity: sha512-hYT5d3YNdSh3mbCU1gwQyPgQd3T2ne0A3KG8KSBdav5TiBg6eInVmV+TeR5uHufiIgSFg0XsOWGW5/RhNcSvPg==} + cpu: [x64] + os: [win32] + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@vant/popperjs@1.3.0': + resolution: {integrity: sha512-hB+czUG+aHtjhaEmCJDuXOep0YTZjdlRR+4MSmIFnkCQIxJaXLQdSsR90XWvAI2yvKUI7TCGqR8pQg2RtvkMHw==} + + '@vant/use@1.6.0': + resolution: {integrity: sha512-PHHxeAASgiOpSmMjceweIrv2AxDZIkWXyaczksMoWvKV2YAYEhoizRuk/xFnKF+emUIi46TsQ+rvlm/t2BBCfA==} + peerDependencies: + vue: ^3.0.0 + + '@vitejs/plugin-vue@6.0.3': + resolution: {integrity: sha512-TlGPkLFLVOY3T7fZrwdvKpjprR3s4fxRln0ORDo1VQ7HHyxJwTlrjKU3kpVWTlaAjIEuCTokmjkZnr8Tpc925w==} + engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + vue: ^3.2.25 + + '@vue/babel-helper-vue-transform-on@1.5.0': + resolution: {integrity: sha512-0dAYkerNhhHutHZ34JtTl2czVQHUNWv6xEbkdF5W+Yrv5pCWsqjeORdOgbtW2I9gWlt+wBmVn+ttqN9ZxR5tzA==} + + '@vue/babel-plugin-jsx@1.5.0': + resolution: {integrity: sha512-mneBhw1oOqCd2247O0Yw/mRwC9jIGACAJUlawkmMBiNmL4dGA2eMzuNZVNqOUfYTa6vqmND4CtOPzmEEEqLKFw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + peerDependenciesMeta: + '@babel/core': + optional: true + + '@vue/babel-plugin-resolve-type@1.5.0': + resolution: {integrity: sha512-Wm/60o+53JwJODm4Knz47dxJnLDJ9FnKnGZJbUUf8nQRAtt6P+undLUAVU3Ha33LxOJe6IPoifRQ6F/0RrU31w==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@vue/compiler-core@3.5.26': + resolution: {integrity: sha512-vXyI5GMfuoBCnv5ucIT7jhHKl55Y477yxP6fc4eUswjP8FG3FFVFd41eNDArR+Uk3QKn2Z85NavjaxLxOC19/w==} + + '@vue/compiler-dom@3.5.26': + resolution: {integrity: sha512-y1Tcd3eXs834QjswshSilCBnKGeQjQXB6PqFn/1nxcQw4pmG42G8lwz+FZPAZAby6gZeHSt/8LMPfZ4Rb+Bd/A==} + + '@vue/compiler-sfc@3.5.26': + resolution: {integrity: sha512-egp69qDTSEZcf4bGOSsprUr4xI73wfrY5oRs6GSgXFTiHrWj4Y3X5Ydtip9QMqiCMCPVwLglB9GBxXtTadJ3mA==} + + '@vue/compiler-ssr@3.5.26': + resolution: {integrity: sha512-lZT9/Y0nSIRUPVvapFJEVDbEXruZh2IYHMk2zTtEgJSlP5gVOqeWXH54xDKAaFS4rTnDeDBQUYDtxKyoW9FwDw==} + + '@vue/devtools-api@6.6.4': + resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} + + '@vue/devtools-api@7.7.9': + resolution: {integrity: sha512-kIE8wvwlcZ6TJTbNeU2HQNtaxLx3a84aotTITUuL/4bzfPxzajGBOoqjMhwZJ8L9qFYDU/lAYMEEm11dnZOD6g==} + + '@vue/devtools-core@8.0.5': + resolution: {integrity: sha512-dpCw8nl0GDBuiL9SaY0mtDxoGIEmU38w+TQiYEPOLhW03VDC0lfNMYXS/qhl4I0YlysGp04NLY4UNn6xgD0VIQ==} + peerDependencies: + vue: ^3.0.0 + + '@vue/devtools-kit@7.7.9': + resolution: {integrity: sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA==} + + '@vue/devtools-kit@8.0.5': + resolution: {integrity: sha512-q2VV6x1U3KJMTQPUlRMyWEKVbcHuxhqJdSr6Jtjz5uAThAIrfJ6WVZdGZm5cuO63ZnSUz0RCsVwiUUb0mDV0Yg==} + + '@vue/devtools-shared@7.7.9': + resolution: {integrity: sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA==} + + '@vue/devtools-shared@8.0.5': + resolution: {integrity: sha512-bRLn6/spxpmgLk+iwOrR29KrYnJjG9DGpHGkDFG82UM21ZpJ39ztUT9OXX3g+usW7/b2z+h46I9ZiYyB07XMXg==} + + '@vue/eslint-config-prettier@10.2.0': + resolution: {integrity: sha512-GL3YBLwv/+b86yHcNNfPJxOTtVFJ4Mbc9UU3zR+KVoG7SwGTjPT+32fXamscNumElhcpXW3mT0DgzS9w32S7Bw==} + peerDependencies: + eslint: '>= 8.21.0' + prettier: '>= 3.0.0' + + '@vue/reactivity@3.5.26': + resolution: {integrity: sha512-9EnYB1/DIiUYYnzlnUBgwU32NNvLp/nhxLXeWRhHUEeWNTn1ECxX8aGO7RTXeX6PPcxe3LLuNBFoJbV4QZ+CFQ==} + + '@vue/runtime-core@3.5.26': + resolution: {integrity: sha512-xJWM9KH1kd201w5DvMDOwDHYhrdPTrAatn56oB/LRG4plEQeZRQLw0Bpwih9KYoqmzaxF0OKSn6swzYi84e1/Q==} + + '@vue/runtime-dom@3.5.26': + resolution: {integrity: sha512-XLLd/+4sPC2ZkN/6+V4O4gjJu6kSDbHAChvsyWgm1oGbdSO3efvGYnm25yCjtFm/K7rrSDvSfPDgN1pHgS4VNQ==} + + '@vue/server-renderer@3.5.26': + resolution: {integrity: sha512-TYKLXmrwWKSodyVuO1WAubucd+1XlLg4set0YoV+Hu8Lo79mp/YMwWV5mC5FgtsDxX3qo1ONrxFaTP1OQgy1uA==} + peerDependencies: + vue: 3.5.26 + + '@vue/shared@3.5.26': + resolution: {integrity: sha512-7Z6/y3uFI5PRoKeorTOSXKcDj0MSasfNNltcslbFrPpcw6aXRUALq4IfJlaTRspiWIUOEZbrpM+iQGmCOiWe4A==} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansis@4.2.0: + resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==} + engines: {node: '>=14'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + axios@1.13.2: + resolution: {integrity: sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + baseline-browser-mapping@2.9.11: + resolution: {integrity: sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ==} + hasBin: true + + birpc@2.9.0: + resolution: {integrity: sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + brace-expansion@1.1.12: + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} + + browserslist@4.28.1: + resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + caniuse-lite@1.0.30001761: + resolution: {integrity: sha512-JF9ptu1vP2coz98+5051jZ4PwQgd2ni8A+gYSN7EA7dPKIMf0pDlSUxhdmVOaV3/fYK5uWBkgSXJaRLr4+3A6g==} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + copy-anything@4.0.5: + resolution: {integrity: sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==} + engines: {node: '>=18'} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + default-browser-id@5.0.1: + resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==} + engines: {node: '>=18'} + + default-browser@5.4.0: + resolution: {integrity: sha512-XDuvSq38Hr1MdN47EDvYtx3U0MTqpCEn+F6ft8z2vYDzMrvQhVp0ui9oQdqW3MvK3vqUETglt1tVGgjLuJ5izg==} + engines: {node: '>=18'} + + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + electron-to-chromium@1.5.267: + resolution: {integrity: sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==} + + entities@7.0.0: + resolution: {integrity: sha512-FDWG5cmEYf2Z00IkYRhbFrwIwvdFKH07uV8dvNy0omp/Qb1xcyCWp2UDtcwJF4QZZvk0sLudP6/hAu42TaqVhQ==} + engines: {node: '>=0.12'} + + error-stack-parser-es@1.0.5: + resolution: {integrity: sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + esbuild@0.27.2: + resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-config-prettier@10.1.8: + resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-plugin-prettier@5.5.4: + resolution: {integrity: sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + '@types/eslint': '>=8.0.0' + eslint: '>=8.0.0' + eslint-config-prettier: '>= 7.0.0 <10.0.0 || >=10.1.0' + prettier: '>=3.0.0' + peerDependenciesMeta: + '@types/eslint': + optional: true + eslint-config-prettier: + optional: true + + eslint-plugin-vue@10.5.1: + resolution: {integrity: sha512-SbR9ZBUFKgvWAbq3RrdCtWaW0IKm6wwUiApxf3BVTNfqUIo4IQQmreMg2iHFJJ6C/0wss3LXURBJ1OwS/MhFcQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@stylistic/eslint-plugin': ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 + '@typescript-eslint/parser': ^7.0.0 || ^8.0.0 + eslint: ^8.57.0 || ^9.0.0 + vue-eslint-parser: ^10.0.0 + peerDependenciesMeta: + '@stylistic/eslint-plugin': + optional: true + '@typescript-eslint/parser': + optional: true + + eslint-scope@8.4.0: + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.39.2: + resolution: {integrity: sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.4.0: + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.3.3: + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + + follow-redirects@1.15.11: + resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + form-data@4.0.5: + resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} + engines: {node: '>= 6'} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globals@16.5.0: + resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==} + engines: {node: '>=18'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + + is-what@5.5.0: + resolution: {integrity: sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==} + engines: {node: '>=18'} + + is-wsl@3.1.0: + resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} + engines: {node: '>=16'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.1: + resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} + hasBin: true + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + kolorist@1.8.0: + resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + + mrmime@2.0.1: + resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} + engines: {node: '>=10'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + nanoid@5.1.6: + resolution: {integrity: sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg==} + engines: {node: ^18 || >=20} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + node-releases@2.0.27: + resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + ohash@2.0.11: + resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} + + open@10.2.0: + resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} + engines: {node: '>=18'} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + perfect-debounce@1.0.0: + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + + perfect-debounce@2.0.0: + resolution: {integrity: sha512-fkEH/OBiKrqqI/yIgjR92lMfs2K8105zt/VT6+7eTjNwisrsh47CeIED9z58zI7DfKdH3uHAn25ziRZn3kgAow==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + + pinia@3.0.4: + resolution: {integrity: sha512-l7pqLUFTI/+ESXn6k3nu30ZIzW5E2WZF/LaHJEpoq6ElcLD+wduZoB2kBN19du6K/4FDpPMazY2wJr+IndBtQw==} + peerDependencies: + typescript: '>=4.5.0' + vue: ^3.5.11 + peerDependenciesMeta: + typescript: + optional: true + + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} + + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier-linter-helpers@1.0.0: + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} + + prettier@3.6.2: + resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} + engines: {node: '>=14'} + hasBin: true + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + + rollup@4.54.0: + resolution: {integrity: sha512-3nk8Y3a9Ea8szgKhinMlGMhGMw89mqule3KWczxhIzqudyHdCIOHw8WJlj/r329fACjKLEh13ZSk7oE22kyeIw==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-applescript@7.1.0: + resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} + engines: {node: '>=18'} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.7.3: + resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} + engines: {node: '>=10'} + hasBin: true + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + sirv@3.0.2: + resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} + engines: {node: '>=18'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + speakingurl@14.0.1: + resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} + engines: {node: '>=0.10.0'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + superjson@2.2.6: + resolution: {integrity: sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==} + engines: {node: '>=16'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + synckit@0.11.11: + resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==} + engines: {node: ^14.18.0 || >=16.0.0} + + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + engines: {node: '>=12.0.0'} + + totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + unplugin-utils@0.3.1: + resolution: {integrity: sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog==} + engines: {node: '>=20.19.0'} + + update-browserslist-db@1.2.3: + resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + vant@4.9.22: + resolution: {integrity: sha512-P2PDSj3oB6l3W1OpVlQpapeLmI6bXMSvPqPdrw5rutslC0Y6tSkrVB/iSD57weD7K92GsjGkvgDK0eZlOsXGqw==} + peerDependencies: + vue: ^3.0.0 + + vite-dev-rpc@1.1.0: + resolution: {integrity: sha512-pKXZlgoXGoE8sEKiKJSng4hI1sQ4wi5YT24FCrwrLt6opmkjlqPPVmiPWWJn8M8byMxRGzp1CrFuqQs4M/Z39A==} + peerDependencies: + vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.1 || ^7.0.0-0 + + vite-hot-client@2.1.0: + resolution: {integrity: sha512-7SpgZmU7R+dDnSmvXE1mfDtnHLHQSisdySVR7lO8ceAXvM0otZeuQQ6C8LrS5d/aYyP/QZ0hI0L+dIPrm4YlFQ==} + peerDependencies: + vite: ^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0 + + vite-plugin-inspect@11.3.3: + resolution: {integrity: sha512-u2eV5La99oHoYPHE6UvbwgEqKKOQGz86wMg40CCosP6q8BkB6e5xPneZfYagK4ojPJSj5anHCrnvC20DpwVdRA==} + engines: {node: '>=14'} + peerDependencies: + '@nuxt/kit': '*' + vite: ^6.0.0 || ^7.0.0-0 + peerDependenciesMeta: + '@nuxt/kit': + optional: true + + vite-plugin-vue-devtools@8.0.5: + resolution: {integrity: sha512-p619BlKFOqQXJ6uDWS1vUPQzuJOD6xJTfftj57JXBGoBD/yeQCowR7pnWcr/FEX4/HVkFbreI6w2uuGBmQOh6A==} + engines: {node: '>=v14.21.3'} + peerDependencies: + vite: ^6.0.0 || ^7.0.0-0 + + vite-plugin-vue-inspector@5.3.2: + resolution: {integrity: sha512-YvEKooQcSiBTAs0DoYLfefNja9bLgkFM7NI2b07bE2SruuvX0MEa9cMaxjKVMkeCp5Nz9FRIdcN1rOdFVBeL6Q==} + peerDependencies: + vite: ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0 + + vite@7.3.0: + resolution: {integrity: sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + jiti: '>=1.21.0' + less: ^4.0.0 + lightningcss: ^1.21.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 + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vue-eslint-parser@10.2.0: + resolution: {integrity: sha512-CydUvFOQKD928UzZhTp4pr2vWz1L+H99t7Pkln2QSPdvmURT0MoC4wUccfCnuEaihNsu9aYYyk+bep8rlfkUXw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + + vue-router@4.6.4: + resolution: {integrity: sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==} + peerDependencies: + vue: ^3.5.0 + + vue@3.5.26: + resolution: {integrity: sha512-SJ/NTccVyAoNUJmkM9KUqPcYlY+u8OVL1X5EW9RIs3ch5H2uERxyyIUI4MRxVCSOiEcupX9xNGde1tL9ZKpimA==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + wsl-utils@0.1.0: + resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} + engines: {node: '>=18'} + + xml-name-validator@4.0.0: + resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} + engines: {node: '>=12'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@babel/code-frame@7.27.1': + dependencies: + '@babel/helper-validator-identifier': 7.28.5 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.28.5': {} + + '@babel/core@7.28.5': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.5 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) + '@babel/helpers': 7.28.4 + '@babel/parser': 7.28.5 + '@babel/template': 7.27.2 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.28.5': + dependencies: + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + + '@babel/helper-annotate-as-pure@7.27.3': + dependencies: + '@babel/types': 7.28.5 + + '@babel/helper-compilation-targets@7.27.2': + dependencies: + '@babel/compat-data': 7.28.5 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.28.1 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-create-class-features-plugin@7.28.5(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-member-expression-to-functions': 7.28.5 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.5) + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/traverse': 7.28.5 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-globals@7.28.0': {} + + '@babel/helper-member-expression-to-functions@7.28.5': + dependencies: + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-imports@7.27.1': + dependencies: + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.28.5 + transitivePeerDependencies: + - supports-color + + '@babel/helper-optimise-call-expression@7.27.1': + dependencies: + '@babel/types': 7.28.5 + + '@babel/helper-plugin-utils@7.27.1': {} + + '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-member-expression-to-functions': 7.28.5 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/traverse': 7.28.5 + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + dependencies: + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.27.1': {} + + '@babel/helper-validator-identifier@7.28.5': {} + + '@babel/helper-validator-option@7.27.1': {} + + '@babel/helpers@7.28.4': + dependencies: + '@babel/template': 7.27.2 + '@babel/types': 7.28.5 + + '@babel/parser@7.28.5': + dependencies: + '@babel/types': 7.28.5 + + '@babel/plugin-proposal-decorators@7.28.0(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-decorators': 7.27.1(@babel/core@7.28.5) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-syntax-decorators@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-typescript@7.28.5(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.5) + transitivePeerDependencies: + - supports-color + + '@babel/template@7.27.2': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 + + '@babel/traverse@7.28.5': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.5 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.28.5 + '@babel/template': 7.27.2 + '@babel/types': 7.28.5 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.28.5': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + + '@esbuild/aix-ppc64@0.27.2': + optional: true + + '@esbuild/android-arm64@0.27.2': + optional: true + + '@esbuild/android-arm@0.27.2': + optional: true + + '@esbuild/android-x64@0.27.2': + optional: true + + '@esbuild/darwin-arm64@0.27.2': + optional: true + + '@esbuild/darwin-x64@0.27.2': + optional: true + + '@esbuild/freebsd-arm64@0.27.2': + optional: true + + '@esbuild/freebsd-x64@0.27.2': + optional: true + + '@esbuild/linux-arm64@0.27.2': + optional: true + + '@esbuild/linux-arm@0.27.2': + optional: true + + '@esbuild/linux-ia32@0.27.2': + optional: true + + '@esbuild/linux-loong64@0.27.2': + optional: true + + '@esbuild/linux-mips64el@0.27.2': + optional: true + + '@esbuild/linux-ppc64@0.27.2': + optional: true + + '@esbuild/linux-riscv64@0.27.2': + optional: true + + '@esbuild/linux-s390x@0.27.2': + optional: true + + '@esbuild/linux-x64@0.27.2': + optional: true + + '@esbuild/netbsd-arm64@0.27.2': + optional: true + + '@esbuild/netbsd-x64@0.27.2': + optional: true + + '@esbuild/openbsd-arm64@0.27.2': + optional: true + + '@esbuild/openbsd-x64@0.27.2': + optional: true + + '@esbuild/openharmony-arm64@0.27.2': + optional: true + + '@esbuild/sunos-x64@0.27.2': + optional: true + + '@esbuild/win32-arm64@0.27.2': + optional: true + + '@esbuild/win32-ia32@0.27.2': + optional: true + + '@esbuild/win32-x64@0.27.2': + optional: true + + '@eslint-community/eslint-utils@4.9.0(eslint@9.39.2)': + dependencies: + eslint: 9.39.2 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.2': {} + + '@eslint/config-array@0.21.1': + dependencies: + '@eslint/object-schema': 2.1.7 + debug: 4.4.3 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.4.2': + dependencies: + '@eslint/core': 0.17.0 + + '@eslint/core@0.17.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.3.3': + dependencies: + ajv: 6.12.6 + debug: 4.4.3 + espree: 10.4.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.1.1 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.39.2': {} + + '@eslint/object-schema@2.1.7': {} + + '@eslint/plugin-kit@0.4.1': + dependencies: + '@eslint/core': 0.17.0 + levn: 0.4.1 + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.7': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.4.3 + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.4.3': {} + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@pkgr/core@0.2.9': {} + + '@polka/url@1.0.0-next.29': {} + + '@rolldown/pluginutils@1.0.0-beta.53': {} + + '@rollup/rollup-android-arm-eabi@4.54.0': + optional: true + + '@rollup/rollup-android-arm64@4.54.0': + optional: true + + '@rollup/rollup-darwin-arm64@4.54.0': + optional: true + + '@rollup/rollup-darwin-x64@4.54.0': + optional: true + + '@rollup/rollup-freebsd-arm64@4.54.0': + optional: true + + '@rollup/rollup-freebsd-x64@4.54.0': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.54.0': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.54.0': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.54.0': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.54.0': + optional: true + + '@rollup/rollup-linux-loong64-gnu@4.54.0': + optional: true + + '@rollup/rollup-linux-ppc64-gnu@4.54.0': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.54.0': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.54.0': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.54.0': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.54.0': + optional: true + + '@rollup/rollup-linux-x64-musl@4.54.0': + optional: true + + '@rollup/rollup-openharmony-arm64@4.54.0': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.54.0': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.54.0': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.54.0': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.54.0': + optional: true + + '@types/estree@1.0.8': {} + + '@types/json-schema@7.0.15': {} + + '@vant/popperjs@1.3.0': {} + + '@vant/use@1.6.0(vue@3.5.26)': + dependencies: + vue: 3.5.26 + + '@vitejs/plugin-vue@6.0.3(vite@7.3.0)(vue@3.5.26)': + dependencies: + '@rolldown/pluginutils': 1.0.0-beta.53 + vite: 7.3.0 + vue: 3.5.26 + + '@vue/babel-helper-vue-transform-on@1.5.0': {} + + '@vue/babel-plugin-jsx@1.5.0(@babel/core@7.28.5)': + dependencies: + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5) + '@babel/template': 7.27.2 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 + '@vue/babel-helper-vue-transform-on': 1.5.0 + '@vue/babel-plugin-resolve-type': 1.5.0(@babel/core@7.28.5) + '@vue/shared': 3.5.26 + optionalDependencies: + '@babel/core': 7.28.5 + transitivePeerDependencies: + - supports-color + + '@vue/babel-plugin-resolve-type@1.5.0(@babel/core@7.28.5)': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/core': 7.28.5 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/parser': 7.28.5 + '@vue/compiler-sfc': 3.5.26 + transitivePeerDependencies: + - supports-color + + '@vue/compiler-core@3.5.26': + dependencies: + '@babel/parser': 7.28.5 + '@vue/shared': 3.5.26 + entities: 7.0.0 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + + '@vue/compiler-dom@3.5.26': + dependencies: + '@vue/compiler-core': 3.5.26 + '@vue/shared': 3.5.26 + + '@vue/compiler-sfc@3.5.26': + dependencies: + '@babel/parser': 7.28.5 + '@vue/compiler-core': 3.5.26 + '@vue/compiler-dom': 3.5.26 + '@vue/compiler-ssr': 3.5.26 + '@vue/shared': 3.5.26 + estree-walker: 2.0.2 + magic-string: 0.30.21 + postcss: 8.5.6 + source-map-js: 1.2.1 + + '@vue/compiler-ssr@3.5.26': + dependencies: + '@vue/compiler-dom': 3.5.26 + '@vue/shared': 3.5.26 + + '@vue/devtools-api@6.6.4': {} + + '@vue/devtools-api@7.7.9': + dependencies: + '@vue/devtools-kit': 7.7.9 + + '@vue/devtools-core@8.0.5(vite@7.3.0)(vue@3.5.26)': + dependencies: + '@vue/devtools-kit': 8.0.5 + '@vue/devtools-shared': 8.0.5 + mitt: 3.0.1 + nanoid: 5.1.6 + pathe: 2.0.3 + vite-hot-client: 2.1.0(vite@7.3.0) + vue: 3.5.26 + transitivePeerDependencies: + - vite + + '@vue/devtools-kit@7.7.9': + dependencies: + '@vue/devtools-shared': 7.7.9 + birpc: 2.9.0 + hookable: 5.5.3 + mitt: 3.0.1 + perfect-debounce: 1.0.0 + speakingurl: 14.0.1 + superjson: 2.2.6 + + '@vue/devtools-kit@8.0.5': + dependencies: + '@vue/devtools-shared': 8.0.5 + birpc: 2.9.0 + hookable: 5.5.3 + mitt: 3.0.1 + perfect-debounce: 2.0.0 + speakingurl: 14.0.1 + superjson: 2.2.6 + + '@vue/devtools-shared@7.7.9': + dependencies: + rfdc: 1.4.1 + + '@vue/devtools-shared@8.0.5': + dependencies: + rfdc: 1.4.1 + + '@vue/eslint-config-prettier@10.2.0(eslint@9.39.2)(prettier@3.6.2)': + dependencies: + eslint: 9.39.2 + eslint-config-prettier: 10.1.8(eslint@9.39.2) + eslint-plugin-prettier: 5.5.4(eslint-config-prettier@10.1.8(eslint@9.39.2))(eslint@9.39.2)(prettier@3.6.2) + prettier: 3.6.2 + transitivePeerDependencies: + - '@types/eslint' + + '@vue/reactivity@3.5.26': + dependencies: + '@vue/shared': 3.5.26 + + '@vue/runtime-core@3.5.26': + dependencies: + '@vue/reactivity': 3.5.26 + '@vue/shared': 3.5.26 + + '@vue/runtime-dom@3.5.26': + dependencies: + '@vue/reactivity': 3.5.26 + '@vue/runtime-core': 3.5.26 + '@vue/shared': 3.5.26 + csstype: 3.2.3 + + '@vue/server-renderer@3.5.26(vue@3.5.26)': + dependencies: + '@vue/compiler-ssr': 3.5.26 + '@vue/shared': 3.5.26 + vue: 3.5.26 + + '@vue/shared@3.5.26': {} + + acorn-jsx@5.3.2(acorn@8.15.0): + dependencies: + acorn: 8.15.0 + + acorn@8.15.0: {} + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansis@4.2.0: {} + + argparse@2.0.1: {} + + asynckit@0.4.0: {} + + axios@1.13.2: + dependencies: + follow-redirects: 1.15.11 + form-data: 4.0.5 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + balanced-match@1.0.2: {} + + baseline-browser-mapping@2.9.11: {} + + birpc@2.9.0: {} + + boolbase@1.0.0: {} + + brace-expansion@1.1.12: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + browserslist@4.28.1: + dependencies: + baseline-browser-mapping: 2.9.11 + caniuse-lite: 1.0.30001761 + electron-to-chromium: 1.5.267 + node-releases: 2.0.27 + update-browserslist-db: 1.2.3(browserslist@4.28.1) + + bundle-name@4.1.0: + dependencies: + run-applescript: 7.1.0 + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + callsites@3.1.0: {} + + caniuse-lite@1.0.30001761: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + concat-map@0.0.1: {} + + convert-source-map@2.0.0: {} + + copy-anything@4.0.5: + dependencies: + is-what: 5.5.0 + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + cssesc@3.0.0: {} + + csstype@3.2.3: {} + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + deep-is@0.1.4: {} + + default-browser-id@5.0.1: {} + + default-browser@5.4.0: + dependencies: + bundle-name: 4.1.0 + default-browser-id: 5.0.1 + + define-lazy-prop@3.0.0: {} + + delayed-stream@1.0.0: {} + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + electron-to-chromium@1.5.267: {} + + entities@7.0.0: {} + + error-stack-parser-es@1.0.5: {} + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + esbuild@0.27.2: + optionalDependencies: + '@esbuild/aix-ppc64': 0.27.2 + '@esbuild/android-arm': 0.27.2 + '@esbuild/android-arm64': 0.27.2 + '@esbuild/android-x64': 0.27.2 + '@esbuild/darwin-arm64': 0.27.2 + '@esbuild/darwin-x64': 0.27.2 + '@esbuild/freebsd-arm64': 0.27.2 + '@esbuild/freebsd-x64': 0.27.2 + '@esbuild/linux-arm': 0.27.2 + '@esbuild/linux-arm64': 0.27.2 + '@esbuild/linux-ia32': 0.27.2 + '@esbuild/linux-loong64': 0.27.2 + '@esbuild/linux-mips64el': 0.27.2 + '@esbuild/linux-ppc64': 0.27.2 + '@esbuild/linux-riscv64': 0.27.2 + '@esbuild/linux-s390x': 0.27.2 + '@esbuild/linux-x64': 0.27.2 + '@esbuild/netbsd-arm64': 0.27.2 + '@esbuild/netbsd-x64': 0.27.2 + '@esbuild/openbsd-arm64': 0.27.2 + '@esbuild/openbsd-x64': 0.27.2 + '@esbuild/openharmony-arm64': 0.27.2 + '@esbuild/sunos-x64': 0.27.2 + '@esbuild/win32-arm64': 0.27.2 + '@esbuild/win32-ia32': 0.27.2 + '@esbuild/win32-x64': 0.27.2 + + escalade@3.2.0: {} + + escape-string-regexp@4.0.0: {} + + eslint-config-prettier@10.1.8(eslint@9.39.2): + dependencies: + eslint: 9.39.2 + + eslint-plugin-prettier@5.5.4(eslint-config-prettier@10.1.8(eslint@9.39.2))(eslint@9.39.2)(prettier@3.6.2): + dependencies: + eslint: 9.39.2 + prettier: 3.6.2 + prettier-linter-helpers: 1.0.0 + synckit: 0.11.11 + optionalDependencies: + eslint-config-prettier: 10.1.8(eslint@9.39.2) + + eslint-plugin-vue@10.5.1(eslint@9.39.2)(vue-eslint-parser@10.2.0(eslint@9.39.2)): + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2) + eslint: 9.39.2 + natural-compare: 1.4.0 + nth-check: 2.1.1 + postcss-selector-parser: 6.1.2 + semver: 7.7.3 + vue-eslint-parser: 10.2.0(eslint@9.39.2) + xml-name-validator: 4.0.0 + + eslint-scope@8.4.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.1: {} + + eslint@9.39.2: + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.21.1 + '@eslint/config-helpers': 0.4.2 + '@eslint/core': 0.17.0 + '@eslint/eslintrc': 3.3.3 + '@eslint/js': 9.39.2 + '@eslint/plugin-kit': 0.4.1 + '@humanfs/node': 0.16.7 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.3 + escape-string-regexp: 4.0.0 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + transitivePeerDependencies: + - supports-color + + espree@10.4.0: + dependencies: + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + eslint-visitor-keys: 4.2.1 + + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + estree-walker@2.0.2: {} + + esutils@2.0.3: {} + + fast-deep-equal@3.1.3: {} + + fast-diff@1.3.0: {} + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fdir@6.5.0(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.3.3 + keyv: 4.5.4 + + flatted@3.3.3: {} + + follow-redirects@1.15.11: {} + + form-data@4.0.5: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.2 + mime-types: 2.1.35 + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + gensync@1.0.0-beta.2: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + globals@14.0.0: {} + + globals@16.5.0: {} + + gopd@1.2.0: {} + + has-flag@4.0.0: {} + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + hookable@5.5.3: {} + + ignore@5.3.2: {} + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + imurmurhash@0.1.4: {} + + is-docker@3.0.0: {} + + is-extglob@2.1.1: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + + is-what@5.5.0: {} + + is-wsl@3.1.0: + dependencies: + is-inside-container: 1.0.0 + + isexe@2.0.0: {} + + js-tokens@4.0.0: {} + + js-yaml@4.1.1: + dependencies: + argparse: 2.0.1 + + jsesc@3.1.0: {} + + json-buffer@3.0.1: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json5@2.2.3: {} + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + kolorist@1.8.0: {} + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.merge@4.6.2: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + math-intrinsics@1.1.0: {} + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.12 + + mitt@3.0.1: {} + + mrmime@2.0.1: {} + + ms@2.1.3: {} + + nanoid@3.3.11: {} + + nanoid@5.1.6: {} + + natural-compare@1.4.0: {} + + node-releases@2.0.27: {} + + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + + ohash@2.0.11: {} + + open@10.2.0: + dependencies: + default-browser: 5.4.0 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + wsl-utils: 0.1.0 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + path-exists@4.0.0: {} + + path-key@3.1.1: {} + + pathe@2.0.3: {} + + perfect-debounce@1.0.0: {} + + perfect-debounce@2.0.0: {} + + picocolors@1.1.1: {} + + picomatch@4.0.3: {} + + pinia@3.0.4(vue@3.5.26): + dependencies: + '@vue/devtools-api': 7.7.9 + vue: 3.5.26 + + postcss-selector-parser@6.1.2: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss@8.5.6: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prelude-ls@1.2.1: {} + + prettier-linter-helpers@1.0.0: + dependencies: + fast-diff: 1.3.0 + + prettier@3.6.2: {} + + proxy-from-env@1.1.0: {} + + punycode@2.3.1: {} + + resolve-from@4.0.0: {} + + rfdc@1.4.1: {} + + rollup@4.54.0: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.54.0 + '@rollup/rollup-android-arm64': 4.54.0 + '@rollup/rollup-darwin-arm64': 4.54.0 + '@rollup/rollup-darwin-x64': 4.54.0 + '@rollup/rollup-freebsd-arm64': 4.54.0 + '@rollup/rollup-freebsd-x64': 4.54.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.54.0 + '@rollup/rollup-linux-arm-musleabihf': 4.54.0 + '@rollup/rollup-linux-arm64-gnu': 4.54.0 + '@rollup/rollup-linux-arm64-musl': 4.54.0 + '@rollup/rollup-linux-loong64-gnu': 4.54.0 + '@rollup/rollup-linux-ppc64-gnu': 4.54.0 + '@rollup/rollup-linux-riscv64-gnu': 4.54.0 + '@rollup/rollup-linux-riscv64-musl': 4.54.0 + '@rollup/rollup-linux-s390x-gnu': 4.54.0 + '@rollup/rollup-linux-x64-gnu': 4.54.0 + '@rollup/rollup-linux-x64-musl': 4.54.0 + '@rollup/rollup-openharmony-arm64': 4.54.0 + '@rollup/rollup-win32-arm64-msvc': 4.54.0 + '@rollup/rollup-win32-ia32-msvc': 4.54.0 + '@rollup/rollup-win32-x64-gnu': 4.54.0 + '@rollup/rollup-win32-x64-msvc': 4.54.0 + fsevents: 2.3.3 + + run-applescript@7.1.0: {} + + semver@6.3.1: {} + + semver@7.7.3: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + sirv@3.0.2: + dependencies: + '@polka/url': 1.0.0-next.29 + mrmime: 2.0.1 + totalist: 3.0.1 + + source-map-js@1.2.1: {} + + speakingurl@14.0.1: {} + + strip-json-comments@3.1.1: {} + + superjson@2.2.6: + dependencies: + copy-anything: 4.0.5 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + synckit@0.11.11: + dependencies: + '@pkgr/core': 0.2.9 + + tinyglobby@0.2.15: + dependencies: + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + + totalist@3.0.1: {} + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + unplugin-utils@0.3.1: + dependencies: + pathe: 2.0.3 + picomatch: 4.0.3 + + update-browserslist-db@1.2.3(browserslist@4.28.1): + dependencies: + browserslist: 4.28.1 + escalade: 3.2.0 + picocolors: 1.1.1 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + util-deprecate@1.0.2: {} + + vant@4.9.22(vue@3.5.26): + dependencies: + '@vant/popperjs': 1.3.0 + '@vant/use': 1.6.0(vue@3.5.26) + '@vue/shared': 3.5.26 + vue: 3.5.26 + + vite-dev-rpc@1.1.0(vite@7.3.0): + dependencies: + birpc: 2.9.0 + vite: 7.3.0 + vite-hot-client: 2.1.0(vite@7.3.0) + + vite-hot-client@2.1.0(vite@7.3.0): + dependencies: + vite: 7.3.0 + + vite-plugin-inspect@11.3.3(vite@7.3.0): + dependencies: + ansis: 4.2.0 + debug: 4.4.3 + error-stack-parser-es: 1.0.5 + ohash: 2.0.11 + open: 10.2.0 + perfect-debounce: 2.0.0 + sirv: 3.0.2 + unplugin-utils: 0.3.1 + vite: 7.3.0 + vite-dev-rpc: 1.1.0(vite@7.3.0) + transitivePeerDependencies: + - supports-color + + vite-plugin-vue-devtools@8.0.5(vite@7.3.0)(vue@3.5.26): + dependencies: + '@vue/devtools-core': 8.0.5(vite@7.3.0)(vue@3.5.26) + '@vue/devtools-kit': 8.0.5 + '@vue/devtools-shared': 8.0.5 + sirv: 3.0.2 + vite: 7.3.0 + vite-plugin-inspect: 11.3.3(vite@7.3.0) + vite-plugin-vue-inspector: 5.3.2(vite@7.3.0) + transitivePeerDependencies: + - '@nuxt/kit' + - supports-color + - vue + + vite-plugin-vue-inspector@5.3.2(vite@7.3.0): + dependencies: + '@babel/core': 7.28.5 + '@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.28.5) + '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.5) + '@babel/plugin-transform-typescript': 7.28.5(@babel/core@7.28.5) + '@vue/babel-plugin-jsx': 1.5.0(@babel/core@7.28.5) + '@vue/compiler-dom': 3.5.26 + kolorist: 1.8.0 + magic-string: 0.30.21 + vite: 7.3.0 + transitivePeerDependencies: + - supports-color + + vite@7.3.0: + dependencies: + esbuild: 0.27.2 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.54.0 + tinyglobby: 0.2.15 + optionalDependencies: + fsevents: 2.3.3 + + vue-eslint-parser@10.2.0(eslint@9.39.2): + dependencies: + debug: 4.4.3 + eslint: 9.39.2 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + esquery: 1.6.0 + semver: 7.7.3 + transitivePeerDependencies: + - supports-color + + vue-router@4.6.4(vue@3.5.26): + dependencies: + '@vue/devtools-api': 6.6.4 + vue: 3.5.26 + + vue@3.5.26: + dependencies: + '@vue/compiler-dom': 3.5.26 + '@vue/compiler-sfc': 3.5.26 + '@vue/runtime-dom': 3.5.26 + '@vue/server-renderer': 3.5.26(vue@3.5.26) + '@vue/shared': 3.5.26 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + word-wrap@1.2.5: {} + + wsl-utils@0.1.0: + dependencies: + is-wsl: 3.1.0 + + xml-name-validator@4.0.0: {} + + yallist@3.1.1: {} + + yocto-queue@0.1.0: {} diff --git a/Web/pnpm-workspace.yaml b/Web/pnpm-workspace.yaml new file mode 100644 index 0000000..c5739b7 --- /dev/null +++ b/Web/pnpm-workspace.yaml @@ -0,0 +1,2 @@ +ignoredBuiltDependencies: + - esbuild diff --git a/Web/public/favicon.ico b/Web/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..df36fcfb72584e00488330b560ebcf34a41c64c2 GIT binary patch literal 4286 zcmds*O-Phc6o&64GDVCEQHxsW(p4>LW*W<827=Unuo8sGpRux(DN@jWP-e29Wl%wj zY84_aq9}^Am9-cWTD5GGEo#+5Fi2wX_P*bo+xO!)p*7B;iKlbFd(U~_d(U?#hLj56 zPhFkj-|A6~Qk#@g^#D^U0XT1cu=c-vu1+SElX9NR;kzAUV(q0|dl0|%h|dI$%VICy zJnu2^L*Te9JrJMGh%-P79CL0}dq92RGU6gI{v2~|)p}sG5x0U*z<8U;Ij*hB9z?ei z@g6Xq-pDoPl=MANPiR7%172VA%r)kevtV-_5H*QJKFmd;8yA$98zCxBZYXTNZ#QFk2(TX0;Y2dt&WitL#$96|gJY=3xX zpCoi|YNzgO3R`f@IiEeSmKrPSf#h#Qd<$%Ej^RIeeYfsxhPMOG`S`Pz8q``=511zm zAm)MX5AV^5xIWPyEu7u>qYs?pn$I4nL9J!=K=SGlKLXpE<5x+2cDTXq?brj?n6sp= zphe9;_JHf40^9~}9i08r{XM$7HB!`{Ys~TK0kx<}ZQng`UPvH*11|q7&l9?@FQz;8 zx!=3<4seY*%=OlbCbcae?5^V_}*K>Uo6ZWV8mTyE^B=DKy7-sdLYkR5Z?paTgK-zyIkKjIcpyO z{+uIt&YSa_$QnN_@t~L014dyK(fOOo+W*MIxbA6Ndgr=Y!f#Tokqv}n<7-9qfHkc3 z=>a|HWqcX8fzQCT=dqVbogRq!-S>H%yA{1w#2Pn;=e>JiEj7Hl;zdt-2f+j2%DeVD zsW0Ab)ZK@0cIW%W7z}H{&~yGhn~D;aiP4=;m-HCo`BEI+Kd6 z={Xwx{TKxD#iCLfl2vQGDitKtN>z|-AdCN|$jTFDg0m3O`WLD4_s#$S literal 0 HcmV?d00001 diff --git a/Web/src/App.vue b/Web/src/App.vue new file mode 100644 index 0000000..18877c6 --- /dev/null +++ b/Web/src/App.vue @@ -0,0 +1,58 @@ + + + + diff --git a/Web/src/api/billImport.js b/Web/src/api/billImport.js new file mode 100644 index 0000000..aaa8226 --- /dev/null +++ b/Web/src/api/billImport.js @@ -0,0 +1,68 @@ +import axios from 'axios' +import { showToast } from 'vant' + +/** + * 账单导入相关 API + */ + +/** + * 上传账单文件 + * @param {File} file - 要上传的文件 + * @param {string} type - 账单类型 ('Alipay' | 'WeChat') + * @returns {Promise<{success: boolean, message: string, data: any}>} + */ +export const uploadBillFile = (file, type) => { + const formData = new FormData() + formData.append('file', file) + formData.append('type', type) + + return axios({ + url: `${import.meta.env.VITE_API_BASE_URL}/BillImport/UploadFile`, + method: 'post', + data: formData, + headers: { + 'Content-Type': 'multipart/form-data' + }, + timeout: 60000 // 文件上传增加超时时间 + }).then(response => { + const { data } = response + + if (data.success === false) { + showToast(data.message || '上传失败') + return Promise.reject(new Error(data.message || '上传失败')) + } + + return data + }).catch(error => { + console.error('上传错误:', error) + + if (error.response) { + const { status, data } = error.response + let message = '上传失败' + + switch (status) { + case 400: + message = data?.message || '请求参数错误' + break + case 401: + message = '未授权,请先登录' + break + case 403: + message = '没有权限' + break + case 413: + message = '文件过大' + break + case 500: + message = '服务器错误' + break + } + + showToast(message) + return Promise.reject(new Error(message)) + } + + showToast('网络错误,请检查网络连接') + return Promise.reject(error) + }) +} diff --git a/Web/src/api/emailRecord.js b/Web/src/api/emailRecord.js new file mode 100644 index 0000000..efea7a7 --- /dev/null +++ b/Web/src/api/emailRecord.js @@ -0,0 +1,80 @@ +import request from './request' + +/** + * 邮件记录相关 API + */ + +/** + * 获取邮件列表(分页) + * @param {Object} params - 查询参数 + * @param {number} [params.latestId] - 最后一条记录的ID,用于游标分页 + * @returns {Promise<{success: boolean, data: Array, total: number, lastId: number}>} + */ +export const getEmailList = (params = {}) => { + return request({ + url: '/EmailMessage/GetList', + method: 'get', + params + }) +} + +/** + * 根据ID获取邮件详情 + * @param {number} id - 邮件ID + * @returns {Promise<{success: boolean, data: Object}>} + */ +export const getEmailDetail = (id) => { + return request({ + url: `/EmailMessage/GetById/${id}`, + method: 'get' + }) +} + +/** + * 删除邮件 + * @param {number} id - 邮件ID + * @returns {Promise<{success: boolean}>} + */ +export const deleteEmail = (id) => { + return request({ + url: `/EmailMessage/DeleteById`, + method: 'post', + params: { id } + }) +} + +/** + * 重新分析邮件并刷新交易记录 + * @param {number} id - 邮件ID + * @returns {Promise<{success: boolean}>} + */ +export const refreshTransactionRecords = (id) => { + return request({ + url: `/EmailMessage/RefreshTransactionRecords`, + method: 'post', + params: { id } + }) +} + +/** + * 立即同步邮件 + * @returns {Promise<{success: boolean, message: string}>} + */ +export const syncEmails = () => { + return request({ + url: `/EmailMessage/SyncEmails`, + method: 'post' + }) +} + +/** + * 获取邮件关联的交易记录列表 + * @param {number} emailId - 邮件ID + * @returns {Promise<{success: boolean, data: Array}>} + */ +export const getEmailTransactions = (emailId) => { + return request({ + url: `/TransactionRecord/GetByEmailId/${emailId}`, + method: 'get' + }) +} diff --git a/Web/src/api/request.js b/Web/src/api/request.js new file mode 100644 index 0000000..0e587ff --- /dev/null +++ b/Web/src/api/request.js @@ -0,0 +1,81 @@ +import axios from 'axios' +import { showToast } from 'vant' + +// 创建 axios 实例 +const request = axios.create({ + baseURL: import.meta.env.VITE_API_BASE_URL, + timeout: 30000, + headers: { + 'Content-Type': 'application/json' + } +}) + +// 请求拦截器 +request.interceptors.request.use( + config => { + // 可以在这里添加 token 等认证信息 + // const token = localStorage.getItem('token') + // if (token) { + // config.headers.Authorization = `Bearer ${token}` + // } + return config + }, + error => { + console.error('请求错误:', error) + return Promise.reject(error) + } +) + +// 响应拦截器 +request.interceptors.response.use( + response => { + const { data } = response + + // 统一处理业务错误 + if (data.success === false) { + showToast(data.message || '请求失败') + return Promise.reject(new Error(data.message || '请求失败')) + } + + return data + }, + error => { + console.error('响应错误:', error) + + // 统一处理 HTTP 错误 + if (error.response) { + const { status, data } = error.response + let message = '请求失败' + + switch (status) { + case 400: + message = data?.message || '请求参数错误' + break + case 401: + message = '未授权,请重新登录' + break + case 403: + message = '拒绝访问' + break + case 404: + message = '请求的资源不存在' + break + case 500: + message = '服务器内部错误' + break + default: + message = data?.message || `请求失败 (${status})` + } + + showToast(message) + } else if (error.request) { + showToast('网络连接失败,请检查网络') + } else { + showToast(error.message || '请求失败') + } + + return Promise.reject(error) + } +) + +export default request diff --git a/Web/src/api/transactionCategory.js b/Web/src/api/transactionCategory.js new file mode 100644 index 0000000..1c998fa --- /dev/null +++ b/Web/src/api/transactionCategory.js @@ -0,0 +1,104 @@ +import request from './request' + +/** + * 获取分类树(支持按类型筛选) + * @param {string|null} type - 交易类型(Expense=0/Income=1),null表示获取全部 + * @returns {Promise<{success: boolean, data: Array}>} + */ +export const getCategoryTree = (type = null) => { + return request({ + url: '/TransactionCategory/GetTree', + method: 'get', + params: type !== null ? { type } : {} + }) +} + +/** + * 获取顶级分类列表(按类型) + * @param {number} type - 交易类型(Expense=0/Income=1) + * @returns {Promise<{success: boolean, data: Array}>} + */ +export const getTopLevelCategories = (type) => { + return request({ + url: '/TransactionCategory/GetTopLevel', + method: 'get', + params: { type } + }) +} + +/** + * 获取子分类列表 + * @param {number} parentId - 父分类ID + * @returns {Promise<{success: boolean, data: Array}>} + */ +export const getChildCategories = (parentId) => { + return request({ + url: '/TransactionCategory/GetChildren', + method: 'get', + params: { parentId } + }) +} + +/** + * 根据ID获取分类详情 + * @param {number} id - 分类ID + * @returns {Promise<{success: boolean, data: object}>} + */ +export const getCategoryById = (id) => { + return request({ + url: `/TransactionCategory/GetById/${id}`, + method: 'get' + }) +} + +/** + * 创建分类 + * @param {object} data - 分类数据 + * @returns {Promise<{success: boolean, data: number}>} 返回新创建的分类ID + */ +export const createCategory = (data) => { + return request({ + url: '/TransactionCategory/Create', + method: 'post', + data + }) +} + +/** + * 更新分类 + * @param {object} data - 分类数据 + * @returns {Promise<{success: boolean}>} + */ +export const updateCategory = (data) => { + return request({ + url: '/TransactionCategory/Update', + method: 'post', + data + }) +} + +/** + * 删除分类 + * @param {number} id - 分类ID + * @returns {Promise<{success: boolean}>} + */ +export const deleteCategory = (id) => { + return request({ + url: '/TransactionCategory/Delete', + method: 'post', + params: { id } + }) +} + +/** + * 批量创建分类(用于初始化) + * @param {Array} dataList - 分类数据数组 + * @returns {Promise<{success: boolean, data: number}>} 返回创建的数量 + */ +export const batchCreateCategories = (dataList) => { + return request({ + url: '/TransactionCategory/BatchCreate', + method: 'post', + data: dataList + }) +} diff --git a/Web/src/api/transactionRecord.js b/Web/src/api/transactionRecord.js new file mode 100644 index 0000000..990dd84 --- /dev/null +++ b/Web/src/api/transactionRecord.js @@ -0,0 +1,102 @@ +import request from './request' + +/** + * 交易记录相关 API + */ + +/** + * 获取交易记录列表(分页) + * @param {Object} params - 查询参数 + * @param {number} [params.latestId] - 最后一条记录的ID,用于游标分页 + * @param {string} [params.searchKeyword] - 搜索关键词 + * @returns {Promise<{success: boolean, data: Array, total: number, lastId: number}>} + */ +export const getTransactionList = (params = {}) => { + return request({ + url: '/TransactionRecord/GetList', + method: 'get', + params + }) +} + +/** + * 根据ID获取交易记录详情 + * @param {number} id - 交易记录ID + * @returns {Promise<{success: boolean, data: Object}>} + */ +export const getTransactionDetail = (id) => { + return request({ + url: `/TransactionRecord/GetById/${id}`, + method: 'get' + }) +} + +/** + * 创建交易记录 + * @param {Object} data - 交易记录数据 + * @param {string} data.card - 卡号 + * @param {string} data.occurredAt - 交易时间 + * @param {string} data.reason - 交易摘要 + * @param {number} data.amount - 交易金额 + * @param {number} data.balance - 交易后余额 + * @param {number} data.type - 交易类型 (0:支出, 1:收入, 2:不计入收支) + * @param {string} data.classify - 交易分类 + * @param {string} data.subClassify - 交易子分类 + * @returns {Promise<{success: boolean}>} + */ +export const createTransaction = (data) => { + return request({ + url: '/TransactionRecord/Create', + method: 'post', + data + }) +} + +/** + * 更新交易记录 + * @param {Object} data - 交易记录数据 + * @param {number} data.id - 交易记录ID + * @param {number} data.amount - 交易金额 + * @param {number} data.balance - 交易后余额 + * @param {number} data.type - 交易类型 (0:支出, 1:收入, 2:不计入收支) + * @param {string} data.classify - 交易分类 + * @param {string} data.subClassify - 交易子分类 + * @returns {Promise<{success: boolean}>} + */ +export const updateTransaction = (data) => { + return request({ + url: '/TransactionRecord/Update', + method: 'post', + data + }) +} + +/** + * 删除交易记录 + * @param {number} id - 交易记录ID + * @returns {Promise<{success: boolean}>} + */ +export const deleteTransaction = (id) => { + return request({ + url: `/TransactionRecord/DeleteById`, + method: 'post', + params: { id } + }) +} + +/** + * 获取指定日期的交易记录 + * @param {string} date - 日期字符串 (格式: yyyy-MM-dd) + * @returns {Promise<{success: boolean, data: Array}>} + */ +export const getTransactionsByDate = (date) => { + return request({ + url: '/TransactionRecord/GetByDate', + method: 'get', + params: { date } + }) +} + + +// 注意:分类相关的API已迁移到 transactionCategory.js +// 请使用 getCategoryTree 等新接口 diff --git a/Web/src/assets/base.css b/Web/src/assets/base.css new file mode 100644 index 0000000..8816868 --- /dev/null +++ b/Web/src/assets/base.css @@ -0,0 +1,86 @@ +/* color palette from */ +:root { + --vt-c-white: #ffffff; + --vt-c-white-soft: #f8f8f8; + --vt-c-white-mute: #f2f2f2; + + --vt-c-black: #181818; + --vt-c-black-soft: #222222; + --vt-c-black-mute: #282828; + + --vt-c-indigo: #2c3e50; + + --vt-c-divider-light-1: rgba(60, 60, 60, 0.29); + --vt-c-divider-light-2: rgba(60, 60, 60, 0.12); + --vt-c-divider-dark-1: rgba(84, 84, 84, 0.65); + --vt-c-divider-dark-2: rgba(84, 84, 84, 0.48); + + --vt-c-text-light-1: var(--vt-c-indigo); + --vt-c-text-light-2: rgba(60, 60, 60, 0.66); + --vt-c-text-dark-1: var(--vt-c-white); + --vt-c-text-dark-2: rgba(235, 235, 235, 0.64); +} + +/* semantic color variables for this project */ +:root { + --color-background: var(--vt-c-white); + --color-background-soft: var(--vt-c-white-soft); + --color-background-mute: var(--vt-c-white-mute); + + --color-border: var(--vt-c-divider-light-2); + --color-border-hover: var(--vt-c-divider-light-1); + + --color-heading: var(--vt-c-text-light-1); + --color-text: var(--vt-c-text-light-1); + + --section-gap: 160px; +} + +@media (prefers-color-scheme: dark) { + :root { + --color-background: var(--vt-c-black); + --color-background-soft: var(--vt-c-black-soft); + --color-background-mute: var(--vt-c-black-mute); + + --color-border: var(--vt-c-divider-dark-2); + --color-border-hover: var(--vt-c-divider-dark-1); + + --color-heading: var(--vt-c-text-dark-1); + --color-text: var(--vt-c-text-dark-2); + } +} + +*, +*::before, +*::after { + box-sizing: border-box; + margin: 0; + font-weight: normal; +} + +body { + min-height: 100vh; + color: var(--color-text); + background: var(--color-background); + transition: + color 0.5s, + background-color 0.5s; + line-height: 1.6; + font-family: + Inter, + -apple-system, + BlinkMacSystemFont, + 'Segoe UI', + Roboto, + Oxygen, + Ubuntu, + Cantarell, + 'Fira Sans', + 'Droid Sans', + 'Helvetica Neue', + sans-serif; + font-size: 15px; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} diff --git a/Web/src/assets/logo.svg b/Web/src/assets/logo.svg new file mode 100644 index 0000000..7565660 --- /dev/null +++ b/Web/src/assets/logo.svg @@ -0,0 +1 @@ + diff --git a/Web/src/assets/main.css b/Web/src/assets/main.css new file mode 100644 index 0000000..ead0bf6 --- /dev/null +++ b/Web/src/assets/main.css @@ -0,0 +1,34 @@ +@import './base.css'; + +#app { + max-width: 1280px; + margin: 0 auto; + font-weight: normal; +} + +a, +.green { + text-decoration: none; + color: hsla(160, 100%, 37%, 1); + transition: 0.4s; + padding: 3px; +} + +@media (hover: hover) { + a:hover { + background-color: hsla(160, 100%, 37%, 0.2); + } +} + +@media (min-width: 1024px) { + body { + display: flex; + place-items: center; + } + + #app { + display: grid; + grid-template-columns: 1fr 1fr; + padding: 0 2rem; + } +} diff --git a/Web/src/components/TransactionDetail.vue b/Web/src/components/TransactionDetail.vue new file mode 100644 index 0000000..40782b9 --- /dev/null +++ b/Web/src/components/TransactionDetail.vue @@ -0,0 +1,521 @@ + + + + + diff --git a/Web/src/components/TransactionList.vue b/Web/src/components/TransactionList.vue new file mode 100644 index 0000000..d7a5613 --- /dev/null +++ b/Web/src/components/TransactionList.vue @@ -0,0 +1,251 @@ + + + + + diff --git a/Web/src/main.js b/Web/src/main.js new file mode 100644 index 0000000..0d4cf44 --- /dev/null +++ b/Web/src/main.js @@ -0,0 +1,19 @@ +import './assets/main.css' + +import { createApp } from 'vue' +import { createPinia } from 'pinia' + +import App from './App.vue' +import router from './router' +import vant from 'vant' +import { ConfigProvider } from 'vant'; +import 'vant/lib/index.css' + +const app = createApp(App) + +app.use(createPinia()) +app.use(router) +app.use(vant) +app.use(ConfigProvider); + +app.mount('#app') diff --git a/Web/src/router/index.js b/Web/src/router/index.js new file mode 100644 index 0000000..2016096 --- /dev/null +++ b/Web/src/router/index.js @@ -0,0 +1,29 @@ +import { createRouter, createWebHistory } from 'vue-router' + +const router = createRouter({ + history: createWebHistory(import.meta.env.BASE_URL), + routes: [ + { + path: '/', + name: 'transactions', + component: () => import('../views/TransactionsRecord.vue'), + }, + { + path: '/email', + name: 'email', + component: () => import('../views/EmailRecord.vue'), + }, + { + path: '/setting', + name: 'setting', + component: () => import('../views/SettingView.vue'), + }, + { + path: '/calendar', + name: 'calendar', + component: () => import('../views/CalendarView.vue'), + }, + ], +}) + +export default router diff --git a/Web/src/stores/counter.js b/Web/src/stores/counter.js new file mode 100644 index 0000000..b6757ba --- /dev/null +++ b/Web/src/stores/counter.js @@ -0,0 +1,12 @@ +import { ref, computed } from 'vue' +import { defineStore } from 'pinia' + +export const useCounterStore = defineStore('counter', () => { + const count = ref(0) + const doubleCount = computed(() => count.value * 2) + function increment() { + count.value++ + } + + return { count, doubleCount, increment } +}) diff --git a/Web/src/styles/common.css b/Web/src/styles/common.css new file mode 100644 index 0000000..4616f53 --- /dev/null +++ b/Web/src/styles/common.css @@ -0,0 +1,109 @@ +/* 通用页面容器样式 */ +.page-container { + min-height: 100vh; + background-color: #f5f5f5; +} + +@media (prefers-color-scheme: dark) { + .page-container { + background-color: #1a1a1a; + } +} + +/* 下拉刷新包装器 */ +.refresh-wrapper { + min-height: calc(100vh - 46px); +} + +/* 增加卡片组的对比度 */ +:deep(.van-cell-group--inset) { + margin: 10px 16px; + background-color: #ffffff; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); +} + +@media (prefers-color-scheme: dark) { + :deep(.van-cell-group--inset) { + background-color: #2c2c2c; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3); + } +} + +/* 单元格样式 */ +:deep(.van-cell) { + background-color: #ffffff; + border-bottom: 1px solid #f0f0f0; +} + +@media (prefers-color-scheme: dark) { + :deep(.van-cell) { + background-color: #2c2c2c; + border-bottom: 1px solid #3a3a3a; + } +} + +:deep(.van-cell:last-child) { + border-bottom: none; +} + +/* 详情弹出层样式 */ +.detail-popup { + padding: 16px; + height: 100%; + overflow-y: auto; + background-color: #f5f5f5; +} + +@media (prefers-color-scheme: dark) { + .detail-popup { + background-color: #1a1a1a; + } +} + +/* 弹出层内的卡片组样式 */ +.detail-popup :deep(.van-cell-group--inset) { + background-color: #ffffff; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); +} + +@media (prefers-color-scheme: dark) { + .detail-popup :deep(.van-cell-group--inset) { + background-color: #2c2c2c; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3); + } +} + +/* 详情头部样式 */ +.detail-header { + margin-bottom: 16px; +} + +.detail-header h3 { + margin: 0; + font-size: 18px; + font-weight: bold; + word-break: break-word; +} + +.detail-header p { + margin: 0; + font-size: 14px; + color: #969799; + font-weight: normal; +} + +/* 导航栏透明背景 */ +:deep(.van-nav-bar) { + background-color: transparent; +} + +/* 修复表单字段过长时的换行显示 */ +:deep(.van-field__control) { + word-break: break-all; + white-space: normal; +} + +:deep(.van-field__value) { + word-break: break-all; + white-space: normal; +} diff --git a/Web/src/views/CalendarView.vue b/Web/src/views/CalendarView.vue new file mode 100644 index 0000000..1c35f6e --- /dev/null +++ b/Web/src/views/CalendarView.vue @@ -0,0 +1,226 @@ + + + + + \ No newline at end of file diff --git a/Web/src/views/EmailRecord.vue b/Web/src/views/EmailRecord.vue new file mode 100644 index 0000000..58ff808 --- /dev/null +++ b/Web/src/views/EmailRecord.vue @@ -0,0 +1,474 @@ + + + + + \ No newline at end of file diff --git a/Web/src/views/SettingView.vue b/Web/src/views/SettingView.vue new file mode 100644 index 0000000..ad4ff07 --- /dev/null +++ b/Web/src/views/SettingView.vue @@ -0,0 +1,134 @@ + + + + + \ No newline at end of file diff --git a/Web/src/views/TransactionsRecord.vue b/Web/src/views/TransactionsRecord.vue new file mode 100644 index 0000000..dd0f580 --- /dev/null +++ b/Web/src/views/TransactionsRecord.vue @@ -0,0 +1,607 @@ + + + + + \ No newline at end of file diff --git a/Web/vite.config.js b/Web/vite.config.js new file mode 100644 index 0000000..4217010 --- /dev/null +++ b/Web/vite.config.js @@ -0,0 +1,18 @@ +import { fileURLToPath, URL } from 'node:url' + +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' +import vueDevTools from 'vite-plugin-vue-devtools' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [ + vue(), + vueDevTools(), + ], + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)) + }, + }, +}) diff --git a/WebApi/Controllers/BillImportController.cs b/WebApi/Controllers/BillImportController.cs new file mode 100644 index 0000000..86f94b9 --- /dev/null +++ b/WebApi/Controllers/BillImportController.cs @@ -0,0 +1,84 @@ +namespace WebApi.Controllers; + +/// +/// 账单导入控制器 +/// +[ApiController] +[Route("api/[controller]/[action]")] +public class BillImportController( + ILogger logger, + IImportService importService +) : ControllerBase +{ + /// + /// 上传账单文件 + /// + /// 账单文件 + /// 账单类型(Alipay | WeChat) + /// + [HttpPost] + public async Task> UploadFile( + [FromForm] IFormFile file, + [FromForm] string type + ) + { + try + { + // 验证参数 + if (file.Length == 0) + { + return BaseResponse.Fail("请选择要上传的文件"); + } + + if (string.IsNullOrWhiteSpace(type) || (type != "Alipay" && type != "WeChat")) + { + return BaseResponse.Fail("账单类型参数错误,必须是 Alipay 或 WeChat"); + } + + // 验证文件类型 + var allowedExtensions = new[] { ".csv", ".xlsx", ".xls" }; + var fileExtension = Path.GetExtension(file.FileName).ToLowerInvariant(); + if (!allowedExtensions.Contains(fileExtension)) + { + return BaseResponse.Fail("只支持 CSV 或 Excel 文件格式"); + } + + // 验证文件大小(10MB限制) + const long maxFileSize = 10 * 1024 * 1024; + if (file.Length > maxFileSize) + { + return BaseResponse.Fail("文件大小不能超过 10MB"); + } + + // 生成唯一文件名 + var fileName = $"{type}_{DateTime.Now:yyyyMMddHHmmss}_{Guid.NewGuid():N}{fileExtension}"; + + // 保存文件 + var ok = false; + var message = string.Empty; + await using (var stream = new MemoryStream()) + { + await file.CopyToAsync(stream); + if (type == "Alipay") + { + (ok, message) = await importService.ImportAlipayAsync(stream, fileExtension); + } + else if (type == "WeChat") + { + (ok, message) = await importService.ImportWeChatAsync(stream, fileExtension); + } + } + + return new BaseResponse + { + Success = ok, + Message = message + }; + } + catch (Exception ex) + { + logger.LogError(ex, "文件上传失败,类型: {Type}", type); + return BaseResponse.Fail($"文件上传失败: {ex.Message}"); + } + } +} diff --git a/WebApi/Controllers/Dto/BaseResponse.cs b/WebApi/Controllers/Dto/BaseResponse.cs new file mode 100644 index 0000000..c1acf60 --- /dev/null +++ b/WebApi/Controllers/Dto/BaseResponse.cs @@ -0,0 +1,41 @@ +namespace WebApi.Controllers.Dto; + +public class BaseResponse +{ + /// + /// 是否成功 + /// + public bool Success { get; set; } + + /// + /// 错误消息 + /// + public string? Message { get; set; } + + public static BaseResponse Fail(string message) + { + return new BaseResponse + { + Success = false, + Message = message + }; + } +} + +public class BaseResponse : BaseResponse +{ + /// + /// 返回数据 + /// + public T? Data { get; set; } + + public new static BaseResponse Fail(string message) + { + return new BaseResponse + { + Success = false, + Message = message + }; + } +} + diff --git a/WebApi/Controllers/Dto/EmailMessageDto.cs b/WebApi/Controllers/Dto/EmailMessageDto.cs new file mode 100644 index 0000000..a35429d --- /dev/null +++ b/WebApi/Controllers/Dto/EmailMessageDto.cs @@ -0,0 +1,40 @@ +namespace WebApi.Controllers.Dto; + +/// +/// 邮件消息DTO,包含额外的统计信息 +/// +public class EmailMessageDto +{ + public long Id { get; set; } + public string Subject { get; set; } = string.Empty; + public string From { get; set; } = string.Empty; + public string Body { get; set; } = string.Empty; + public string HtmlBody { get; set; } = string.Empty; + public DateTime ReceivedDate { get; set; } + public DateTime CreateTime { get; set; } + public DateTime? UpdateTime { get; set; } + + /// + /// 已解析的账单数量 + /// + public int TransactionCount { get; set; } + + /// + /// 从实体转换为DTO + /// + public static EmailMessageDto FromEntity(Entity.EmailMessage entity, int transactionCount = 0) + { + return new EmailMessageDto + { + Id = entity.Id, + Subject = entity.Subject, + From = entity.From, + Body = entity.Body, + HtmlBody = entity.HtmlBody, + ReceivedDate = entity.ReceivedDate, + CreateTime = entity.CreateTime, + UpdateTime = entity.UpdateTime, + TransactionCount = transactionCount + }; + } +} diff --git a/WebApi/Controllers/Dto/PagedResponse.cs b/WebApi/Controllers/Dto/PagedResponse.cs new file mode 100644 index 0000000..274e187 --- /dev/null +++ b/WebApi/Controllers/Dto/PagedResponse.cs @@ -0,0 +1,25 @@ +namespace WebApi.Controllers.Dto; + +public class PagedResponse : BaseResponse +{ + public long LastId { get; set; } = 0; + + /// + /// 最后一条记录的时间(用于游标分页) + /// + public DateTime? LastTime { get; set; } + + /// + /// 总记录数 + /// + public int Total { get; set; } + + public new static PagedResponse Fail(string message) + { + return new PagedResponse + { + Success = false, + Message = message + }; + } +} \ No newline at end of file diff --git a/WebApi/Controllers/EmailMessageController.cs b/WebApi/Controllers/EmailMessageController.cs new file mode 100644 index 0000000..8954cb5 --- /dev/null +++ b/WebApi/Controllers/EmailMessageController.cs @@ -0,0 +1,161 @@ +namespace WebApi.Controllers.EmailMessage; + +[ApiController] +[Route("api/[controller]/[action]")] +public class EmailMessageController( + IEmailMessageRepository emailRepository, + ITransactionRecordRepository transactionRepository, + ILogger logger, + IEmailHandleService emailHandleService, + IEmailBackgroundService emailBackgroundService +) : ControllerBase +{ + /// + /// 获取邮件列表(分页) + /// + [HttpGet] + public async Task> GetListAsync( + [FromQuery] DateTime? lastReceivedDate = null, + [FromQuery] long? lastId = null + ) + { + try + { + var (list, lastTime, lastIdResult) = await emailRepository.GetPagedListAsync(lastReceivedDate, lastId); + var total = await emailRepository.GetTotalCountAsync(); + + // 为每个邮件获取账单数量 + var emailDtos = new List(); + foreach (var email in list) + { + var transactionCount = await transactionRepository.GetCountByEmailIdAsync(email.Id); + emailDtos.Add(EmailMessageDto.FromEntity(email, transactionCount)); + } + + return new PagedResponse + { + Success = true, + Data = emailDtos.ToArray(), + Total = (int)total, + LastId = lastIdResult, + LastTime = lastTime + }; + } + catch (Exception ex) + { + logger.LogError(ex, "获取邮件列表失败,时间: {LastTime}, ID: {LastId}", lastReceivedDate, lastId); + return PagedResponse.Fail($"获取邮件列表失败: {ex.Message}"); + } + } + + /// + /// 根据ID获取邮件详情 + /// + [HttpGet("{id}")] + public async Task> GetByIdAsync(long id) + { + try + { + var email = await emailRepository.GetByIdAsync(id); + if (email == null) + { + return BaseResponse.Fail("邮件不存在"); + } + + // 获取账单数量 + var transactionCount = await transactionRepository.GetCountByEmailIdAsync(id); + var emailDto = EmailMessageDto.FromEntity(email, transactionCount); + + return new BaseResponse + { + Success = true, + Data = emailDto + }; + } + catch (Exception ex) + { + logger.LogError(ex, "获取邮件详情失败,邮件ID: {EmailId}", id); + return BaseResponse.Fail($"获取邮件详情失败: {ex.Message}"); + } + } + + public async Task DeleteByIdAsync(long id) + { + try + { + var success = await emailRepository.DeleteAsync(id); + if (success) + { + return new BaseResponse + { + Success = true + }; + } + else + { + return BaseResponse.Fail("删除邮件失败,邮件不存在"); + } + } + catch (Exception ex) + { + logger.LogError(ex, "删除邮件失败,邮件ID: {EmailId}", id); + return BaseResponse.Fail($"删除邮件失败: {ex.Message}"); + } + } + + /// + /// 重新分析邮件并刷新交易记录 + /// + [HttpPost] + public async Task RefreshTransactionRecordsAsync([FromQuery] long id) + { + try + { + var email = await emailRepository.GetByIdAsync(id); + if (email == null) + { + return BaseResponse.Fail("邮件不存在"); + } + + var success = await emailHandleService.RefreshTransactionRecordsAsync(id); + if (success) + { + return new BaseResponse + { + Success = true + }; + } + else + { + return BaseResponse.Fail("重新分析失败"); + } + } + catch (Exception ex) + { + logger.LogError(ex, "重新分析邮件失败,邮件ID: {EmailId}", id); + return BaseResponse.Fail($"重新分析失败: {ex.Message}"); + } + } + + /// + /// 立即同步邮件 + /// + [HttpPost] + public async Task SyncEmailsAsync() + { + try + { + await emailBackgroundService.SyncEmailsAsync(); + return new BaseResponse + { + Success = true, + Message = "同步成功" + }; + } + catch (Exception ex) + { + logger.LogError(ex, "同步邮件失败"); + return BaseResponse.Fail($"同步邮件失败: {ex.Message}"); + } + } +} diff --git a/WebApi/Controllers/TransactionCategoryController.cs b/WebApi/Controllers/TransactionCategoryController.cs new file mode 100644 index 0000000..03a5db9 --- /dev/null +++ b/WebApi/Controllers/TransactionCategoryController.cs @@ -0,0 +1,301 @@ +namespace WebApi.Controllers; + +[ApiController] +[Route("api/[controller]/[action]")] +public class TransactionCategoryController( + ITransactionCategoryRepository categoryRepository, + ILogger logger +) : ControllerBase +{ + /// + /// 获取分类树(支持按类型筛选) + /// + [HttpGet] + public async Task>> GetTreeAsync([FromQuery] TransactionType? type = null) + { + try + { + var tree = await categoryRepository.GetCategoryTreeAsync(type); + return new BaseResponse> + { + Success = true, + Data = tree + }; + } + catch (Exception ex) + { + logger.LogError(ex, "获取分类树失败"); + return BaseResponse>.Fail($"获取分类树失败: {ex.Message}"); + } + } + + /// + /// 获取顶级分类列表(按类型) + /// + [HttpGet] + public async Task>> GetTopLevelAsync([FromQuery] TransactionType type) + { + try + { + var categories = await categoryRepository.GetTopLevelCategoriesByTypeAsync(type); + return new BaseResponse> + { + Success = true, + Data = categories + }; + } + catch (Exception ex) + { + logger.LogError(ex, "获取顶级分类失败, Type: {Type}", type); + return BaseResponse>.Fail($"获取顶级分类失败: {ex.Message}"); + } + } + + /// + /// 获取子分类列表 + /// + [HttpGet] + public async Task>> GetChildrenAsync([FromQuery] long parentId) + { + try + { + var categories = await categoryRepository.GetChildCategoriesAsync(parentId); + return new BaseResponse> + { + Success = true, + Data = categories + }; + } + catch (Exception ex) + { + logger.LogError(ex, "获取子分类失败, ParentId: {ParentId}", parentId); + return BaseResponse>.Fail($"获取子分类失败: {ex.Message}"); + } + } + + /// + /// 根据ID获取分类详情 + /// + [HttpGet("{id}")] + public async Task> GetByIdAsync(long id) + { + try + { + var category = await categoryRepository.GetByIdAsync(id); + if (category == null) + { + return BaseResponse.Fail("分类不存在"); + } + + return new BaseResponse + { + Success = true, + Data = category + }; + } + catch (Exception ex) + { + logger.LogError(ex, "获取分类详情失败, Id: {Id}", id); + return BaseResponse.Fail($"获取分类详情失败: {ex.Message}"); + } + } + + /// + /// 创建分类 + /// + [HttpPost] + public async Task> CreateAsync([FromBody] CreateCategoryDto dto) + { + try + { + // 检查同名分类 + var existing = await categoryRepository.GetByNameAndParentAsync(dto.Name, dto.ParentId, dto.Type); + if (existing != null) + { + return BaseResponse.Fail("同级已存在相同名称的分类"); + } + + var category = new TransactionCategory + { + Name = dto.Name, + ParentId = dto.ParentId, + Type = dto.Type, + Level = dto.Level, + SortOrder = dto.SortOrder, + Icon = dto.Icon, + Remark = dto.Remark + }; + + var result = await categoryRepository.AddAsync(category); + if (result) + { + return new BaseResponse + { + Success = true, + Data = category.Id + }; + } + else + { + return BaseResponse.Fail("创建分类失败"); + } + } + catch (Exception ex) + { + logger.LogError(ex, "创建分类失败, Dto: {@Dto}", dto); + return BaseResponse.Fail($"创建分类失败: {ex.Message}"); + } + } + + /// + /// 更新分类 + /// + [HttpPost] + public async Task UpdateAsync([FromBody] UpdateCategoryDto dto) + { + try + { + var category = await categoryRepository.GetByIdAsync(dto.Id); + if (category == null) + { + return BaseResponse.Fail("分类不存在"); + } + + // 如果修改了名称,检查同名 + if (category.Name != dto.Name) + { + var existing = await categoryRepository.GetByNameAndParentAsync(dto.Name, category.ParentId, category.Type); + if (existing != null && existing.Id != dto.Id) + { + return BaseResponse.Fail("同级已存在相同名称的分类"); + } + } + + category.Name = dto.Name; + category.SortOrder = dto.SortOrder; + category.Icon = dto.Icon; + category.IsEnabled = dto.IsEnabled; + category.Remark = dto.Remark; + category.UpdateTime = DateTime.Now; + + var success = await categoryRepository.UpdateAsync(category); + if (success) + { + return new BaseResponse { Success = true }; + } + else + { + return BaseResponse.Fail("更新分类失败"); + } + } + catch (Exception ex) + { + logger.LogError(ex, "更新分类失败, Dto: {@Dto}", dto); + return BaseResponse.Fail($"更新分类失败: {ex.Message}"); + } + } + + /// + /// 删除分类 + /// + [HttpPost] + public async Task DeleteAsync([FromQuery] long id) + { + try + { + // 检查是否有子分类 + var children = await categoryRepository.GetChildCategoriesAsync(id); + if (children.Any()) + { + return BaseResponse.Fail("该分类下存在子分类,无法删除"); + } + + // 检查是否被使用 + var inUse = await categoryRepository.IsCategoryInUseAsync(id); + if (inUse) + { + return BaseResponse.Fail("该分类已被使用,无法删除"); + } + + var success = await categoryRepository.DeleteAsync(id); + if (success) + { + return new BaseResponse { Success = true }; + } + else + { + return BaseResponse.Fail("删除分类失败,分类不存在"); + } + } + catch (Exception ex) + { + logger.LogError(ex, "删除分类失败, Id: {Id}", id); + return BaseResponse.Fail($"删除分类失败: {ex.Message}"); + } + } + + /// + /// 批量创建分类(用于初始化) + /// + [HttpPost] + public async Task> BatchCreateAsync([FromBody] List dtoList) + { + try + { + var categories = dtoList.Select(dto => new TransactionCategory + { + Name = dto.Name, + ParentId = dto.ParentId, + Type = dto.Type, + Level = dto.Level, + SortOrder = dto.SortOrder, + Icon = dto.Icon, + Remark = dto.Remark + }).ToList(); + + var result = await categoryRepository.AddRangeAsync(categories); + if (result) + { + return new BaseResponse + { + Success = true, + Data = categories.Count + }; + } + else + { + return BaseResponse.Fail("批量创建分类失败"); + } + } + catch (Exception ex) + { + logger.LogError(ex, "批量创建分类失败, Count: {Count}", dtoList.Count); + return BaseResponse.Fail($"批量创建分类失败: {ex.Message}"); + } + } +} + +/// +/// 创建分类DTO +/// +public record CreateCategoryDto( + string Name, + long ParentId, + TransactionType Type, + int Level, + int SortOrder = 0, + string? Icon = null, + string? Remark = null +); + +/// +/// 更新分类DTO +/// +public record UpdateCategoryDto( + long Id, + string Name, + int SortOrder, + string? Icon, + bool IsEnabled, + string? Remark +); diff --git a/WebApi/Controllers/TransactionRecordController.cs b/WebApi/Controllers/TransactionRecordController.cs new file mode 100644 index 0000000..40bca13 --- /dev/null +++ b/WebApi/Controllers/TransactionRecordController.cs @@ -0,0 +1,302 @@ +namespace WebApi.Controllers; + +[ApiController] +[Route("api/[controller]/[action]")] +public class TransactionRecordController( + ITransactionRecordRepository transactionRepository, + ILogger logger +) : ControllerBase +{ + /// + /// 获取交易记录列表(分页) + /// + [HttpGet] + public async Task> GetListAsync( + [FromQuery] DateTime? lastOccurredAt = null, + [FromQuery] long? lastId = null, + [FromQuery] string? searchKeyword = null + ) + { + try + { + var (list, lastTime, lastIdResult) = await transactionRepository.GetPagedListAsync(lastOccurredAt, lastId, 20, searchKeyword); + var total = await transactionRepository.GetTotalCountAsync(); + + return new PagedResponse + { + Success = true, + Data = list.ToArray(), + Total = (int)total, + LastId = lastIdResult, + LastTime = lastTime + }; + } + catch (Exception ex) + { + logger.LogError(ex, "获取交易记录列表失败,时间: {LastTime}, ID: {LastId}", lastOccurredAt, lastId); + return PagedResponse.Fail($"获取交易记录列表失败: {ex.Message}"); + } + } + + /// + /// 根据ID获取交易记录详情 + /// + [HttpGet("{id}")] + public async Task> GetByIdAsync(long id) + { + try + { + var transaction = await transactionRepository.GetByIdAsync(id); + if (transaction == null) + { + return BaseResponse.Fail("交易记录不存在"); + } + + return new BaseResponse + { + Success = true, + Data = transaction + }; + } + catch (Exception ex) + { + logger.LogError(ex, "获取交易记录详情失败,交易ID: {TransactionId}", id); + return BaseResponse.Fail($"获取交易记录详情失败: {ex.Message}"); + } + } + + /// + /// 根据邮件ID获取交易记录列表 + /// + [HttpGet("{emailId}")] + public async Task>> GetByEmailIdAsync(long emailId) + { + try + { + var transactions = await transactionRepository.GetByEmailIdAsync(emailId); + return new BaseResponse> + { + Success = true, + Data = transactions + }; + } + catch (Exception ex) + { + logger.LogError(ex, "获取邮件交易记录失败,邮件ID: {EmailId}", emailId); + return BaseResponse>.Fail($"获取邮件交易记录失败: {ex.Message}"); + } + } + + /// + /// 创建交易记录 + /// + [HttpPost] + public async Task CreateAsync([FromBody] CreateTransactionDto dto) + { + try + { + // 解析日期字符串 + if (!DateTime.TryParse(dto.OccurredAt, out var occurredAt)) + { + return BaseResponse.Fail("交易时间格式不正确"); + } + + var transaction = new Entity.TransactionRecord + { + OccurredAt = occurredAt, + Reason = dto.Reason ?? string.Empty, + Amount = dto.Amount, + Type = dto.Type, + Classify = dto.Classify ?? string.Empty, + SubClassify = dto.SubClassify ?? string.Empty, + ImportFrom = "手动录入", + EmailMessageId = 0 // 手动录入的记录,EmailMessageId 设为 0 + }; + + var result = await transactionRepository.AddAsync(transaction); + if (result) + { + return new BaseResponse + { + Success = true + }; + } + else + { + return BaseResponse.Fail("创建交易记录失败"); + } + } + catch (Exception ex) + { + logger.LogError(ex, "创建交易记录失败,交易信息: {@TransactionDto}", dto); + return BaseResponse.Fail($"创建交易记录失败: {ex.Message}"); + } + } + + /// + /// 更新交易记录 + /// + [HttpPost] + public async Task UpdateAsync([FromBody] UpdateTransactionDto dto) + { + try + { + var transaction = await transactionRepository.GetByIdAsync(dto.Id); + if (transaction == null) + { + return BaseResponse.Fail("交易记录不存在"); + } + + // 更新可编辑字段 + transaction.Reason = dto.Reason ?? string.Empty; + transaction.Amount = dto.Amount; + transaction.Balance = dto.Balance; + transaction.Type = dto.Type; + transaction.Classify = dto.Classify ?? string.Empty; + transaction.SubClassify = dto.SubClassify ?? string.Empty; + + var success = await transactionRepository.UpdateAsync(transaction); + if (success) + { + return new BaseResponse + { + Success = true + }; + } + else + { + return BaseResponse.Fail("更新交易记录失败"); + } + } + catch (Exception ex) + { + logger.LogError(ex, "更新交易记录失败,交易ID: {TransactionId}, 交易信息: {@TransactionDto}", dto.Id, dto); + return BaseResponse.Fail($"更新交易记录失败: {ex.Message}"); + } + } + + /// + /// 删除交易记录 + /// + [HttpPost] + public async Task DeleteByIdAsync([FromQuery] long id) + { + try + { + var success = await transactionRepository.DeleteAsync(id); + if (success) + { + return new BaseResponse + { + Success = true + }; + } + else + { + return BaseResponse.Fail("删除交易记录失败,记录不存在"); + } + } + catch (Exception ex) + { + logger.LogError(ex, "删除交易记录失败,交易ID: {TransactionId}", id); + return BaseResponse.Fail($"删除交易记录失败: {ex.Message}"); + } + } + + /// + /// 获取指定月份每天的消费统计 + /// + [HttpGet] + public async Task>> GetDailyStatisticsAsync( + [FromQuery] int year, + [FromQuery] int month + ) + { + try + { + var statistics = await transactionRepository.GetDailyStatisticsAsync(year, month); + var result = statistics.Select(s => new DailyStatisticsDto(s.Key, s.Value.count, s.Value.amount)).ToList(); + + return new BaseResponse> + { + Success = true, + Data = result + }; + } + catch (Exception ex) + { + logger.LogError(ex, "获取日历统计数据失败,年份: {Year}, 月份: {Month}", year, month); + return BaseResponse>.Fail($"获取日历统计数据失败: {ex.Message}"); + } + } + + /// + /// 获取指定日期的交易记录 + /// + [HttpGet] + public async Task>> GetByDateAsync( + [FromQuery] string date + ) + { + try + { + if (!DateTime.TryParse(date, out var targetDate)) + { + return BaseResponse>.Fail("日期格式不正确"); + } + + // 获取当天的开始和结束时间 + var startDate = targetDate.Date; + var endDate = startDate.AddDays(1); + + var records = await transactionRepository.GetByDateRangeAsync(startDate, endDate); + + return new BaseResponse> + { + Success = true, + Data = records + }; + } + catch (Exception ex) + { + logger.LogError(ex, "获取指定日期的交易记录失败,日期: {Date}", date); + return BaseResponse>.Fail($"获取指定日期的交易记录失败: {ex.Message}"); + } + } + + +} + +/// +/// 创建交易记录DTO +/// +public record CreateTransactionDto( + string OccurredAt, + string? Reason, + decimal Amount, + TransactionType Type, + string? Classify, + string? SubClassify +); + +/// +/// 更新交易记录DTO +/// +public record UpdateTransactionDto( + long Id, + string? Reason, + decimal Amount, + decimal Balance, + TransactionType Type, + string? Classify, + string? SubClassify +); + +/// +/// 日历统计响应DTO +/// +public record DailyStatisticsDto( + string Date, + int Count, + decimal Amount +); \ No newline at end of file diff --git a/WebApi/GlobalUsings.cs b/WebApi/GlobalUsings.cs new file mode 100644 index 0000000..86872fb --- /dev/null +++ b/WebApi/GlobalUsings.cs @@ -0,0 +1,6 @@ +global using Service; +global using Common; +global using Microsoft.AspNetCore.Mvc; +global using WebApi.Controllers.Dto; +global using Repository; +global using Entity; \ No newline at end of file diff --git a/WebApi/Program.cs b/WebApi/Program.cs new file mode 100644 index 0000000..3fc995e --- /dev/null +++ b/WebApi/Program.cs @@ -0,0 +1,112 @@ +using FreeSql; +using Scalar.AspNetCore; +using Serilog; +using Service.AppSettingModel; +using Yitter.IdGenerator; + +// 初始化雪花算法ID生成器 +var options = new IdGeneratorOptions(1); // WorkerId 为 1,可根据实际部署情况调整 +YitIdHelper.SetIdGenerator(options); + +var builder = WebApplication.CreateBuilder(args); + +// 配置 Serilog +builder.Host.UseSerilog((context, loggerConfig) => +{ + loggerConfig.ReadFrom.Configuration(context.Configuration); +}); + +// Add services to the container. +builder.Services.AddControllers(); +builder.Services.AddOpenApi(); +builder.Services.AddHttpClient(); + +// 配置 CORS +builder.Services.AddCors(options => +{ + options.AddDefaultPolicy(policy => + { + policy.WithOrigins("http://localhost:5173") + .AllowAnyHeader() + .AllowAnyMethod(); + }); +}); + +// 绑定配置 +builder.Services.Configure(builder.Configuration.GetSection("EmailSettings")); +builder.Services.Configure(builder.Configuration.GetSection("OpenAI")); + +// 配置 FreeSql + SQLite +var dbPath = Path.Combine(AppContext.BaseDirectory, "database"); +if (!Directory.Exists(dbPath)) +{ + Directory.CreateDirectory(dbPath); +} + +// 使用绝对路径作为数据库文件路径 +var dbFilePath = Path.Combine(dbPath, "EmailBill.db"); +var connectionString = $"Data Source={dbFilePath}"; +Log.Information("数据库路径: {DbPath}", dbFilePath); + +var fsql = new FreeSqlBuilder() + .UseConnectionString(DataType.Sqlite, connectionString) + .UseAutoSyncStructure(true) + .UseLazyLoading(true) + .UseMonitorCommand( + cmd => + { + Log.Information("执行SQL: {Sql}", cmd.CommandText); + } + ) + .Build(); + +builder.Services.AddSingleton(fsql); + +// 自动扫描注册服务和仓储 +builder.Services.AddServices(); + +var app = builder.Build(); + +// Configure the HTTP request pipeline. +if (app.Environment.IsDevelopment()) +{ + app.MapOpenApi(); + app.MapScalarApiReference(); +} + +// 启用静态文件服务 +app.UseDefaultFiles(); +app.UseStaticFiles(); + +// 启用 CORS +app.UseCors(); + +app.MapControllers(); + +// 添加 SPA 回退路由(用于前端路由) +app.MapFallbackToFile("index.html"); + +// 启动后台邮件抓取服务(必须只注册一次) +app.Lifetime.ApplicationStarted.Register(() => +{ + try + { + if (app.Services.GetRequiredService() is not EmailBackgroundService emailService) + { + return; + } + + // 检查是否已在运行,避免重复启动 + if (!emailService.IsBusy) + { + emailService.RunWorkerAsync(); + } + } + catch (Exception ex) + { + var logger = app.Services.GetRequiredService>(); + logger.LogError(ex, "启动后台服务失败"); + } +}); + +app.Run(); diff --git a/WebApi/Properties/launchSettings.json b/WebApi/Properties/launchSettings.json new file mode 100644 index 0000000..9e9a2ef --- /dev/null +++ b/WebApi/Properties/launchSettings.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://json.schemastore.org/launchsettings.json", + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": false, + "applicationUrl": "http://localhost:5071", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": false, + "applicationUrl": "https://localhost:7275;http://localhost:5071", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/WebApi/WebApi.csproj b/WebApi/WebApi.csproj new file mode 100644 index 0000000..c9d4d21 --- /dev/null +++ b/WebApi/WebApi.csproj @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + Always + + + + + + + + diff --git a/WebApi/WebApi.http b/WebApi/WebApi.http new file mode 100644 index 0000000..6497ed7 --- /dev/null +++ b/WebApi/WebApi.http @@ -0,0 +1,6 @@ +@WebApi_HostAddress = http://localhost:5071 + +GET {{WebApi_HostAddress}}/weatherforecast/ +Accept: application/json + +### diff --git a/WebApi/appsettings.Development.json b/WebApi/appsettings.Development.json new file mode 100644 index 0000000..437975f --- /dev/null +++ b/WebApi/appsettings.Development.json @@ -0,0 +1,28 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "Serilog": { + "MinimumLevel": { + "Default": "Debug", + "Override": { + "Microsoft": "Information", + "Microsoft.EntityFrameworkCore": "Information" + } + }, + "WriteTo": [ + { + "Name": "Console" + } + ], + "Enrich": ["FromLogContext"] + }, + "OpenAI": { + "Endpoint": "https://api.deepseek.com/v1", + "Key": "sk-2240d91e2ab1475881147e3810b343d3", + "Model": "deepseek-chat" + } +} diff --git a/WebApi/appsettings.json b/WebApi/appsettings.json new file mode 100644 index 0000000..acea236 --- /dev/null +++ b/WebApi/appsettings.json @@ -0,0 +1,52 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*", + "ConnectionStrings": { + "DefaultConnection": "Data Source=database/EmailBill.db" + }, + "Serilog": { + "MinimumLevel": { + "Default": "Information", + "Override": { + "Microsoft": "Warning", + "Microsoft.EntityFrameworkCore": "Warning" + } + }, + "WriteTo": [ + { + "Name": "Console" + }, + { + "Name": "File", + "Args": { + "path": "logs/log-.txt", + "rollingInterval": "Day", + "outputTemplate": "[{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz}] [{Level:u3}] {Message:lj}{NewLine}{Exception}" + } + } + ], + "Enrich": ["FromLogContext"] + }, + "EmailSettings": { + "CheckIntervalMinutes": 1, + "SmtpList": [ + { + "Name": "SC", + "Email": "779343834@qq.com", + "Password": "zxjkkkilfdgvbfjf", + "ImapHost": "imap.qq.com", + "ImapPort": 993, + "UseSsl": true + } + ], + "FilterFromAddresses": [ + "95555@message.cmbchina.com", + "ccsvc@message.cmbchina.com" + ] + } +} diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..ac7ba90 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,21 @@ +services: + emailbill: + build: + context: . + dockerfile: Dockerfile + container_name: emailbill + restart: unless-stopped + networks: + - all_in + ports: + - "14904:8080" + environment: + - ASPNETCORE_ENVIRONMENT=Production + - ASPNETCORE_URLS=http://+:8080 + volumes: + - /wd/apps/vols/emailbill/database:/app/database + - /wd/apps/vols/emailbill/logs:/app/logs + +networks: + all_in: + external: true \ No newline at end of file diff --git a/nuget.config b/nuget.config new file mode 100644 index 0000000..7b5c86f --- /dev/null +++ b/nuget.config @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file